启动 Service 后,可以看到以下 swagger 界面。
然后编写代码连接到知识库系统推送要处理的网页地址给 Service。创建一个项目引入 Microsoft.KernelMemory.WebClient 包。然后按照以下代码将文档推送给 Service 处理。// 前面部署的 Service 地址和自定义的密钥。 var memory new MemoryWebClient(endpoint: http://localhost:9001/, apiKey: 自定义密钥1); // 导入网页 await memory.ImportWebPageAsync( https://baike.baidu.com/item/比特币挖矿机/12536531, documentId: doc02); Console.WriteLine(正在处理文档请稍等...); // 使用 AI 处理网页知识 while (!await memory.IsDocumentReadyAsync(documentId: doc02)) { await Task.Delay(TimeSpan.FromMilliseconds(1500)); } // 提问 var answer await memory.AskAsync(比特币是什么); Console.WriteLine($\nAnswer: {answer.Result});此外还有 ImportTextAsync、ImportDocumentAsync 来个导入知识的方法。手动处理文档本节内容稍多主要讲解如何使用 Kernel Memory 从将文档导入、生成向量、存储向量、搜索问题等。新建项目安装 Microsoft.KernelMemory.Core 库。为了便于演示下面代码将文档和向量临时存储不使用数据库存储。全部代码示例如下using Microsoft.KernelMemory; using Microsoft.KernelMemory.MemoryStorage.DevTools; using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Connectors.OpenAI; var memory new KernelMemoryBuilder() // 文档解析后的向量存储位置可以选择 Postgres 等 // 这里选择使用本地临时文件存储向量 .WithSimpleVectorDb(new SimpleVectorDbConfig { Directory aaa }) // 配置文档解析向量模型 .WithAzureOpenAITextEmbeddingGeneration(new AzureOpenAIConfig { Deployment aitext, Endpoint https://aaa.openai.azure.com/, Auth AzureOpenAIConfig.AuthTypes.APIKey, APIType AzureOpenAIConfig.APITypes.EmbeddingGeneration, APIKey aaa }) // 配置文本生成模型 .WithAzureOpenAITextGeneration(new AzureOpenAIConfig { Deployment myai, Endpoint https://aaa.openai.azure.com/, Auth AzureOpenAIConfig.AuthTypes.APIKey, APIKey aaa, APIType AzureOpenAIConfig.APITypes.ChatCompletion }) .Build(); // 导入网页 await memory.ImportWebPageAsync( https://baike.baidu.com/item/比特币挖矿机/12536531, documentId: doc02); // Wait for ingestion to complete, usually 1-2 seconds Console.WriteLine(正在处理文档请稍等...); while (!await memory.IsDocumentReadyAsync(documentId: doc02)) { await Task.Delay(TimeSpan.FromMilliseconds(1500)); } // Ask a question var answer await memory.AskAsync(比特币是什么); Console.WriteLine($\nAnswer: {answer.Result});首先使用 KernelMemoryBuilder 构建配置配置的内容比较多这里会使用到两个模型一个是向量模型一个是文本生成模型可以使用对话模型如 gpt-4-32k。接下来按照该程序的工作流程讲解各个环节的相关知识。首先是讲解将文件存储到哪里也就是导入文件之后将文件存储到哪里存储文件的接口是 IContentStorage目前有两个实现AzureBlobsStorage // 存储到目录 SimpleFileStorage使用方法var memory new KernelMemoryBuilder() .WithSimpleFileStorage(new SimpleFileStorageConfig { Directory aaa }) .WithAzureBlobsStorage(new AzureBlobsConfig { Account }) ...Kernel Memory 还不支持 Mongodb不过可以自己使用 IContentStorage 接口写一个。本地解析文档后会进行分段如右边的q列所示。接着是配置文档生成向量模型导入文件文档后在本地提取出文本需要使用 AI 模型从文本中生成向量。解析后的向量是这样的将文本生成向量需要使用 ITextEmbeddingGenerator 接口目前有两个实现AzureOpenAITextEmbeddingGenerator OpenAITextEmbeddingGenerator示例var memory new KernelMemoryBuilder() // 配置文档解析向量模型 .WithAzureOpenAITextEmbeddingGeneration(new AzureOpenAIConfig { Deployment aitext, Endpoint https://xxx.openai.azure.com/, Auth AzureOpenAIConfig.AuthTypes.APIKey, APIType AzureOpenAIConfig.APITypes.EmbeddingGeneration, APIKey xxx }) .WithOpenAITextEmbeddingGeneration(new OpenAIConfig { ... ... })生成向量后需要存储这些向量需要实现 IMemoryDb 接口有以下配置可以使用// 文档解析后的向量存储位置可以选择 Postgres 等 // 这里选择使用本地临时文件存储向量 .WithSimpleVectorDb(new SimpleVectorDbConfig { Directory aaa }) .WithAzureAISearchMemoryDb(new AzureAISearchConfig { }) .WithPostgresMemoryDb(new PostgresConfig { }) .WithQdrantMemoryDb(new QdrantConfig { }) .WithRedisMemoryDb(host....)当用户提问时首先会在这里的 IMemoryDb 调用相关方法查询文档中的向量、索引等查找出相关的文本。查出相关的文本后需要发送给 AI 处理需要使用 ITextGenerator 接口目前有两个实现