前言
在前幾篇文章中,從直接使用 MemoryServerless 到將 Kernel Memory 啟動為 Service ,並以 MemoryWebClient
去操作它。
接下來我們將 Embedding DB 改存到 Qdrant 並透過 TextPartitioningOptions
來設定切 Chunks 的 Token 數
實作
使用 Qdrant
您可以透過 Docker 來啟動 Qdrant
或是到 cloud.qdrant 建立免費試用的 DB。
如果是 cloud Qdrant 會多一個 Apikey 才可以存取它。
設定 Qdrant 及 TextPartitioningOptions
以下 VSCode 建立 ipynb
檔,並用 OpenAI 及 cloud.qdrant 來測試,
建立 .env
檔案,並放入相關的設定值,如下,
1 | OPENAI_APIKEY=你的OpenAI API Key |
1.加入套件
1 |
|
2.設定 Qdrant 及 TextPartitioningOptions
1 | var openaiApikey = env["OPENAI_APIKEY"]; |
TextPartitioningOptions的各屬性初始值如下,
1 | private readonly int _maxTokensPerParagraph = 1000; |
以上改成每段最大的 Token 數為 800,每行最多的 Token 數為 150,Overlapping 的 Token 為 50。Constants.DefaultPipeline
就是預設會進行處理的 Tasks ,分別是 extract,partition,gen_embeddings 及 save_records
3.extract,partition,gen_embeddings,save_records
接下來將上傳檔案,讀取內容,依TextPartitioningOptions
設定切 Chunk 的大小,
透過 OpenAI 建立內容 embedding ,存到 Qdrant 並設定 index 為 tooth。
1 | var id = "tooth"; |
所以在 Qdrant 上可以看到這次建立的 tooth index。
從 tooth index 可以看到設定的 documentId, Tag 及檔案名稱,
4.將使用者問題轉成 Embeddings 到 Qdrant tooth index 進行搜尋,並將相關內容透過 OpenAI 進行 Summary
1 | var answer = await memory.AskAsync("請問洗牙有什麼規定?", index:id); |
5.刪除 index ,
最後如果不想再用這個 index ,可以刪除它
1 | await memory.DeleteIndexAsync(id); |
參考資源
SK-Kernel Memory (KM) 初探
SK-Kernel Memory (KM) Service 與 MemoryWebClient