
Semantic Kernel 在 Microsoft.SemanticKernel.Plugins 开头的包中提供了一些插件不同的包有不同功能的插件。大部分目前还是属于半成品因此这部分不详细讲解本节只做简单说明。目前官方仓库有以下包提供了一些插件├─Plugins.Core ├─Plugins.Document ├─Plugins.Memory ├─Plugins.MsGraph └─Plugins.Webnuget 搜索时需要加上Microsoft.SemanticKernel.前缀。Semantic Kernel 还有通过远程 swagger.json 使用插件的做法详细请参考文档https://learn.microsoft.com/en-us/semantic-kernel/agents/plugins/openai-pluginsPlugins.Core 中包含最基础简单的插件// 读取和写入文件 FileIOPlugin // http 请求以及返回字符串结果 HttpPlugin // 只提供了 和 - 两种运算 MathPlugin // 文本大小写等简单的功能 TextPlugin // 获得本地时间日期 TimePlugin // 在操作之前等待一段时间 WaitPlugin因为这些插件对本文演示没什么帮助功能也非常简单因此这里不讲解。下面简单讲一下文档插件。文档插件安装 Microsoft.SemanticKernel.Plugins.Document需要勾选预览版里面包含了文档插件该文档插件使用了 DocumentFormat.OpenXml 项目DocumentFormat.OpenXml 支持以下文档格式DocumentFormat.OpenXml 项目地址 GitHub - dotnet/Open-XML-SDK: Open XML SDK by Microsoft · GitHubWordprocessingML用于创建和编辑 Word 文档 (.docx)SpreadsheetML用于创建和编辑 Excel 电子表格 (.xlsx)PowerPointML用于创建和编辑 PowerPoint 演示文稿 (.pptx)VisioML用于创建和编辑 Visio 图表 (.vsdx)ProjectML用于创建和编辑 Project 项目 (.mpp)DiagramML用于创建和编辑 Visio 图表 (.vsdx)PublisherML用于创建和编辑 Publisher 出版物 (.pubx)InfoPathML用于创建和编辑 InfoPath 表单 (.xsn)文档插件暂时还没有好的应用场景只是加载文档提取文字比较方便代码示例如下DocumentPlugin documentPlugin new(new WordDocumentConnector(), new LocalFileSystemConnector()); string filePath (完整版)基础财务知识.docx; string text await documentPlugin.ReadTextAsync(filePath); Console.WriteLine(text);由于这些插件目前都是半成品因此这里就不展开说明了。planners依然是半成品这里就不再赘述。因为我也没有看明白这个东西怎么用。Kernel Memory 构建文档知识库Kernel Memory 是一个歪果仁的个人项目支持 PDF 和 Word 文档、 PowerPoint 演示文稿、图像、电子表格等通过利用大型语言模型(llm)、嵌入和矢量存储来提取信息和生成记录主要目的是提供文档处理相关的接口最常使用的场景是知识库系统。读者可能对知识库系统不了解如果有条件建议部署一个 Fastgpt 系统研究一下。但是目前 Kernel Memory 依然是半产品文档也不完善所以接下来笔者也只讲解最核心的部分感兴趣的读者建议直接看源码。Kernel Memory 项目文档https://microsoft.github.io/kernel-memory/Kernel Memory 项目仓库GitHub - microsoft/kernel-memory: Research project. A Memory solution for users, teams, and applications. · GitHub打开 Kernel Memory 项目仓库将项目拉取到本地。要讲解知识库系统可以这样理解。大家都知道训练一个医学模型是十分麻烦的别说机器的 GPU 够不够猛光是训练 AI 就需要掌握各种专业的知识。如果出现一个新的需求可能又要重新训练一个模型这样太麻烦了。于是出现了大语言模型特点是什么都学什么都会但是不够专业深入好处时无论医学、摄影等都可以使用。虽然某方面专业的知识不够深入和专业但是我们换种部分解决。首先将 docx、pdf 等问题提取出文本然后切割成多个段落每一段都使用 AI 模型生成相关向量这个向量的原理笔者也不懂大家可以简单理解为分词生成向量后将段落文本和向量都存储到数据库中数据库需要支持向量。然后在用户提问 “什么是报表” 时首先在数据库中搜索根据向量来确定相似程度把几个跟问题相关的段落拿出来然后把这几段文本和用户的问题一起发给 AI。相对于在提示模板中塞进一部分背景知识然后加上用户的问题再由 AI 进行总结回答。笔者建议大家有条件的话部署一个开源版本的 Fastgpt 系统把这个系统研究一下学会这个系统后再去研究 Kernel Memory 你就会觉得非常简单了。同理如果有条件可以先部署一个 LobeHub 开源的 AI 对话系统研究怎么用再去研究 Semantic Kernel 文档接着再深入源码。从 web 处理网页Kernel Memory 支持从网页爬取、导入文档、直接给定字符串三种方式导入信息由于 Kernel Memory 提供了一个 Service 示例里面有一些值得研究的代码写法因此下面的示例是启动 Service 这个 Web 服务然后在客户端将文档推送该 Service 处理客户端本身不对接 AI。由于这一步比较麻烦读者动手的过程中搞不出来可以直接放弃后面会说怎么自己写一个。打开 kernel-memory 源码的service/Service路径。使用命令启动服务dotnet run setup这个控制台的作用是帮助我们生成相关配置的。启动这个控制台之后根据提示选择对应的选项按上下键选择选项按下回车键确认以及填写配置内容配置会被存储到 appsettings.Development.json 中。如果读者搞不懂这个控制台怎么使用那么可以直接将替换下面的 json 到 appsettings.Development.json 。有几个地方需要读者配置一下。AccessKey1、AccessKey2 是客户端使用该 Service 所需要的验证密钥随便填几个字母即可。AzureAIDocIntel、AzureOpenAIEmbedding、AzureOpenAIText 根据实际情况填写。{ KernelMemory: { Service: { RunWebService: true, RunHandlers: true, OpenApiEnabled: true, Handlers: {} }, ContentStorageType: SimpleFileStorage, TextGeneratorType: AzureOpenAIText, ServiceAuthorization: { Enabled: true, AuthenticationType: APIKey, HttpHeaderName: Authorization, AccessKey1: 自定义密钥1, AccessKey2: 自定义密钥2 }, DataIngestion: { OrchestrationType: Distributed, DistributedOrchestration: { QueueType: SimpleQueues }, EmbeddingGenerationEnabled: true, EmbeddingGeneratorTypes: [ AzureOpenAIEmbedding ], MemoryDbTypes: [ SimpleVectorDb ], ImageOcrType: AzureAIDocIntel, TextPartitioning: { MaxTokensPerParagraph: 1000, MaxTokensPerLine: 300, OverlappingTokens: 100 }, DefaultSteps: [] }, Retrieval: { MemoryDbType: SimpleVectorDb, EmbeddingGeneratorType: AzureOpenAIEmbedding, SearchClient: { MaxAskPromptSize: -1, MaxMatchesCount: 100, AnswerTokens: 300, EmptyAnswer: INFO NOT FOUND } }, Services: { SimpleQueues: { Directory: _tmp_queues }, SimpleFileStorage: { Directory: _tmp_files }, AzureAIDocIntel: { Auth: ApiKey, Endpoint: https://aaa.openai.azure.com/, APIKey: aaa }, AzureOpenAIEmbedding: { APIType: EmbeddingGeneration, Auth: ApiKey, Endpoint: https://aaa.openai.azure.com/, Deployment: aitext, APIKey: aaa }, SimpleVectorDb: { Directory: _tmp_vectors }, AzureOpenAIText: { APIType: ChatCompletion, Auth: ApiKey, Endpoint: https://aaa.openai.azure.com/, Deployment: myai, APIKey: aaa, MaxRetries: 10 } } }, Logging: { LogLevel: { Default: Warning } }, AllowedHosts: * }