前言
Kernel Memory可以讓我們快速建立 RAG(Retrieval-Augmented Generation)服務。
支持多種文件格式的文本(如 Image、Office、Pdf、Text 和 WebPages)的提取和分塊,並使用 LLM 嵌入生成器提取嵌入,將嵌入保存到 Vector DB 中。
文件處理到儲存到 Vector DB 的過程,是透過DataPipeline中的Steps
來處理。
Vector DB 也可以存到AzureAISearch
, Qdrant
, Postgres
, Redis
, SimpleVectorDb
及 SqlServer
…
當這些文件知識庫存到 Vector DB 後,使用者就可以透過 Filter 來進行 RAG 問答及摘要功能。
以下使用相容 OpenAI 的本地小模型(llama.cpp),並將嵌入保存到本地的 MSSQL 中。
實作
設定 Kernel Memory as a Service
參考Kernel Memory as a Service,直接在本地運行。
在跑之前,要調整Service 專案中的appsettings.json
檔案。
使用相容 OpenAI 的地端小模型(llama.cpp)並將嵌入保存到地端的 MSSQL,TextGeneratorType
設定為 OpenAI
在 DataIngestion 區段,OrchestrationType
設定成 InProcess
,EmbeddingGenerationEnabled
設定為 true
,EmbeddingGeneratorTypes
設定為 [ "OpenAI" ]
,MemoryDbTypes
設定為 [ "SqlServer" ]
,TextPartitioning
可以依需求去設定
Retrieval 區段,EmbeddingGeneratorType
設定為 OpenAI
MemoryDbType
設定為 SqlServer
Services 區段中,
OpenAI區段設定地端的 url 及 apikey,
1 | "OpenAI": { |
SimpleFileStorage 區段中的 StorageType
改成 Disk
SqlServer 區段,設定 ConnectionString
設定好後,可以把程式跑起來,Console 的結果如下,

透過 MemoryWebClient 來操作
Kernel Memory Service 跑起來後,
再來就可以透過 MemoryWebClient 來將文件上傳成為知識庫,並進行問答
1.加入Microsoft.KernelMemory
Nuget 套件
2.建立 MemoryWebClient Instance
1 | using Microsoft.KernelMemory; |
3.呼叫ImportDocumentAsync
來匯入文件
1 | var docPath = @"C:\Projects\請假規則.docx"; |
註: documentId 可以讓它自動產生,或是指定一個值給它(最好給英數字,不要給中文哦~)
4.透過IsDocumentReadyAsync
來查看是否匯入完成
1 | var isDocReady = await kmClient.IsDocumentReadyAsync(documentId, tenantId); |
5.進行問答
1 | var question = "請假6天,需要簽到那位主管核准? 要事前幾天請呢?"; |

從上圖可以發現,可以從知識庫中找到對應的資訊並回覆給使用者
在單欄的 PDF Table 也可以查得到哦。
例如花蓮觀光糖廠參考資料,
我查詢 7 月份的房價,是可以正常回覆的,如下,

查到的 Chunk 資料如下,

在本機可以使用
OrchestrationType
為InProcess
,如果是大檔或是正式機,請使用Distributed
參考資源
Kernel Memory
rrg92/text-embeddings-enus - 文字轉成嵌入 Demo 網頁
The error "Invalid non-ASCII or control character in header: 0x82B1" occurs during the MemoryWebClient.ImportDocumentAsync operation.