Semantic Kernel 通过 LocalAI 集成本地模型
内容提要
本文介绍了如何使用LLama 2和LocalAI集成Semantic Kernel(SK)和本地大模型。通过LocalAI将本地部署的大模型转换为OpenAI格式,并使用SK的OpenAI Connector访问。文章提供了示例代码和GitHub链接。
延伸解读
LocalAI 的兼容性优势
LocalAI 提供与 OpenAI API 规范兼容的 RESTFul API,这使得现有基于 OpenAI 的代码可以几乎无缝迁移到本地模型。文章通过自定义 HttpClient 将请求重定向到 LocalAI,展示了这种兼容性如何降低集成成本。对于希望私有化部署的团队,这意味着无需重写大量业务逻辑,只需调整端点配置即可。
硬件与模型支持范围
LocalAI 支持在消费级硬件上运行,无需 GPU,并兼容 ggml 格式的多种模型家族。文章以 LLama 2 为例,说明本地大模型可以通过 LocalAI 转换为 OpenAI 格式,进而被 Semantic Kernel 调用。这为资源有限的开发者提供了可行的本地推理方案,但需注意模型性能可能受硬件限制。
集成中的关键代码调整
文章重点展示了自定义 HttpClientHandler 的作用:拦截发往 /v1/chat/completions 的请求,并将其重定向到 LocalAI 服务。同时,通过扩展方法 AddChatCompletionService 根据配置切换 OpenAI、Azure OpenAI 或 LocalAI 后端。这种设计保持了代码的灵活性,允许在不同服务间切换,而无需修改核心聊天逻辑。
Q&A
Semantic Kernel 如何与本地部署的大模型集成?
通过 LocalAI 将本地大模型转换为 OpenAI 格式,然后使用 Semantic Kernel 的 OpenAI Connector 访问,并将 OpenAI 的 Endpoint 指向 LocalAI。
LocalAI 是什么?它有什么特点?
LocalAI 是一个本地推理框架,提供与 OpenAI API 兼容的 RESTFul API,允许在消费级硬件上本地或自有服务器上运行 LLM,支持多种模型家族,不需要 GPU。
如何将 Semantic Kernel 的请求重定向到 LocalAI?
通过自定义 HttpClientHandler,在 SendAsync 方法中检查请求路径是否为 /v1/chat/completions,如果是则修改请求的 Scheme、Host 和 Port 指向 LocalAI 服务。
在 C# 项目中如何配置 Semantic Kernel 以使用 LocalAI?
创建 KernelBuilder,添加日志,通过扩展方法 AddChatCompletionService 根据配置添加聊天完成服务,对于 LocalAI 类型,使用 AddOpenAIChatCompletion 并传入自定义的 HttpClient。
如何实现流式聊天循环?
使用 kernel.InvokeStreamingAsync 方法,传入提示和聊天历史,然后通过 await foreach 遍历结果并实时输出内容。
示例代码的 GitHub 链接是什么?
示例源代码链接为 https://github.com/geffzhang/sk-csharp-hello-world。