使用SemanticKernel 进行智能应用开发(2023-10更新)
以OpenAI 的ChatGPT 所掀起的GenAI 快速创新浪潮,其中连接LLM 和 应用之间的桥梁的两大开源项目:LangChain[1]和Semantic Kernel[2] ,在半年前写过一篇文章 LangChain vs Semantic Kernel [3],这半年以来Semantic kernel 有了显着改进,这篇文章反应了最新的更新。
Semantic Kernel (SK)是什么?
Semantic Kernel (SK) 是一个开源的将大型语言模型(LLM)与流行的编程语言相结合的SDK,Microsoft将Semantic Kernel(简称SK)称为轻量级SDK,结合了OpenAI,Azure OpenAI和Hugging Face等AI LLM的集成。它使开发人员能够通过编排 AI 组件并将其与现有代码集成来创建 AI 应用。SDK 提供对 Java、Python 和 C# 的支持。它提供了用于添加内存和AI服务的连接器,为应用程序创建模拟的“大脑”。语义内核支持来自不同提供商的插件,为开发人员提供自己的 API,并简化 AI 服务的集成,使开发人员能够利用最新的 AI 进步并构建复杂和智能的管道。SK 大约 是在 2023 年 3 月下旬开源,大约开源6个多月,比 LangChain 晚开源了5个月。
专为应用程序开发人员和 ML 工程师打造
Semantic Kernel 虽然与LangChain类似,但SK是为应用开发开发人员创建的。SK使构建企业AI编排器变得容易,这是Copilot Stack的中心[4]。Semantic Kernel的清晰文档和代码示例让应用程序开发人员容易理解,很容易就可以将SK 集成到应用程序中。
SK 还支持 ML 工程师和数据科学家喜爱的功能。
- 将函数链接在一起[5]
- 使用 Jupyter 笔记本[6]进行实验。 (注意:您可以使用适用于 Python 和 C# 的笔记本。对于 C#,请使用多语言笔记本[7])。
SK Planner :自动函数调用
使用 GPT4 的一个有用技术是生成一个计划,其中包含解决问题的明确步骤。Planner 是一个函数,它接受用户的请求并返回有关如何完成请求的计划。它通过使用AI混合和匹配内核中注册的插件来实现,以便可以将它们重新组合成一系列完成目标的步骤。给定一个问题,SK Planner可以根据您指定的功能创建分步计划,然后执行它们。
SK Planner 与LangChain Agents [8]非常相似。主要区别在于SK Planner 将从一开始就创建一个计划,而LangChain Agent将在每一步确定下一步的行动方案。LangChain的方法听起来更好,但代价是性能低和更高的Token 使用量。Planner 是SK的可扩展部分。这意味着我们有多个Planner 可供选择,如果您有特定需求,您可以创建自定义Planner。有关Planner 更多信息,请参阅此处[9]。
AI 插件:语义和本机函数
“Plugins”只是SK用来表示一组函数的术语。为了推动整个行业的一致性,SK 采用了OpenAI插件规范作为插件[10]的标准。这将有助于创建一个可互操作的插件生态系统,可用于所有主要的AI应用程序和服务,如ChatGPT,Bing和Microsoft 365。
对于使用SK 的开发人员来说,这意味着您可以导出您构建的任何插件,以便它们可以在 ChatGPT、Bing 和 Microsoft 365 中使用。这使您无需重写代码即可扩大 AI 功能的范围。这也意味着为 ChatGPT、Bing 和 Microsoft 365 构建的插件可以无缝导入到SK中。
大多数“插件”将涉及与外部服务的集成,例如LLM,数据库,MS Teams,SAP等。但是绝对可以创建纯粹由函数组成的插件,而无需任何外部服务集成。
您可以使用 SK 插件编写两种类型的函数,语义函数和本机函数。
Semantic Functions
Semantic Functions是使用 LLM 提示语编写的函数。以下是一些示例:
IsValidEmail
Respond with 1 or 0, is this a valid e-mail address format:"{email}"
or
LanguageTranslator
Translate this text from {from} to {to}:"{input}"
我非常喜欢SK的是把这些提示是写在文件中的,或代码中没有多行魔术字符串。
Native Functions
Native Functions是我们习惯的传统代码函数(有关详细信息,请参阅此处[11])。下面是一个获取数字字符串平方根的本机函数的示例:
[SKFunction, Description("Take the square root of a number")] public string Sqrt(string number) { return Math.Sqrt(Convert.ToDouble(number, CultureInfo.InvariantCulture)).ToString(CultureInfo.InvariantCulture); }
LLM 通常只是自然语言处理方面的能手,比如通常数学不好,我们可以把 使用经过验证的数学库封装为本地函数,SK 通过语义函数和本地函数将传统的语法编程和语义编程结合起来构建强大的插件。插件之前叫做技能,将“插件”视为“技能”更容易理解。我猜测SK 之后使用术语“插件”来与OpenAI的术语保持一致。
开箱即用 (OOTB) 插件
Semantic Kernel与LangChain相比,SK目前拥有一组较小的开箱即用插件( LangChain 比SK开源时间早了4个月)。以下是目前一些值得注意的差异:
- LangChain的工具[12]主要是与其他系统集成。您也可以定义自定义工具[13],例如 SK 本机函数,但开箱即用的工具并不多。
- 由于SK来自Microsoft,因此它有一个用于Microsoft Graph [14]的OOTB插件集成了大量的Microsoft 服务。
- LangChain与非Microsoft服务的集成更多(见列表[15])。
Semantic Memory
Semantic Memory 是“一个开源的 服务和插件,专门用于数据集的有效索引(来源在这里[16])它是SK的有力搭档。 注入AI的应用程序的大多数实际用例都涉及处理数据,以便LLM可以使用数据。分块、嵌入、向量存储和向量搜索是该领域讨论的一些常见主题。有关详细信息,请参阅文档和存储库。
SK 没有内置功能将聊天记录存储在文件系统、Redis 缓存、MongoDB 或其他数据库等持久存储中,这部分功能的演示包含在参考应用程序 Chat Copilot[17]。
Semantic kernel的应用开发
正如反复提到的,SK是为开发人员而构建的。本节介绍一些这方面的工具:
VS 代码扩展
SK Semantic Function最好使用 VS Code 编写,并使用官方语义内核工具扩展[18]。
Prompt flow
提示流[19]是一种开发工具,旨在简化LLM应用程序的创建。它通过提供简化原型设计,实验,迭代和部署LLM应用程序过程的工具来实现这一点。最值得注意的是,提示流允许您编写本机和语义函数链,并将它们可视化为图形。这使你和团队的其他成员能够在 Azure ML Studio和本地使用 VS Code 轻松创建和测试 AI 支持的功能。
Prompt Playground
Prompt Playground[20] 是一个简易的 Semantic Kernel 语义技能调试工具,创建新的语义函数并对其进行测试,而无需编写任何代码
可观测性
正如反复提到的,SK是为开发人员而构建的,采用云原生的可观测性来建立有效的产品遥测,产品遥测是指从软件应用程序收集和分析数据以深入了解以下内容的过程:
- 错误检测和调试:遥测支持近乎实时地监视应用程序,从而可以及时检测和诊断问题或错误。这样可以缩短解决速度并提高整体软件质量。若要成功执行此操作,应用程序需要具有跟踪功能。
- 性能优化:通过跟踪应用程序性能指标,您可以确定瓶颈和需要优化的区域。这种数据驱动的方法可确保应用程序以最佳状态运行,从而增强用户体验。
- 主动维护:遥测允许主动维护,因为您可以预测潜在问题并在问题升级之前解决它们,从而减少停机时间并提高产品可靠性。
- 数据驱动的决策:借助遥测,决策可以基于数据而不是假设,从而制定更有效、更成功的产品开发策略。
使用Semantic Kernel记录和计量请求有几个主要好处:
- 您可以轻松跟踪 API 使用情况和成本,因为每个令牌对应于一个计费单位。您还可以比较不同模型和参数的令牌使用情况,以找到适合您的使用案例的最佳设置。
- 您可以排查请求期间可能发生的任何问题或错误,因为每个请求都会记录其提示、完成和令牌计数。您还可以使用日志来分析完成的性能和质量。
- 您可以利用语义内核的强大功能和灵活性,通过其他 AI 服务或插件编排您的请求,同时仍然完全了解和控制您的令牌使用情况。
Chat Copilot 应用程序
SK发布了一个 Chat Copilot[17]参考应用程序。与许多 ChatGPT 存储库[21]不同,此示例应用程序充分展示SK 的上述各项特性:
- 微服务部署架构(即前端和后端服务是分开的),
- 如何为前端 SPA 和后端 API Web 服务配置 Azure AD
- 如何使用OpenAI或Azure OpenAI
- 上传用于嵌入和矢量数据库存储的文档(Semantic Memory实现)
- 聊天记录存储在文件系统或者ComosDB中。
- 开箱即用的示例和自定义插件集成。
- 使用Azure ApplicationInsight的产品遥测和记录和计量请求。
除了Chat Copilot 参考应用程序之外,还有其他示例应用。这些应用展示:
- 使用 Azure 函数[22]实现的后端业务流程协调程序服务[23]
- 一组使用后端 orhestrator 的 TypeScript/React 示例应用程序[24]。
加入社区
Semantic Kernel 是一个强大的SDK,用于为您的Copilot Stack 构建AI编排器。 在这篇文章中,我向你介绍了如何使用SK完成各种任务的学习总结,例如创建和执行计划,编写语义和本机函数等等。我还向您展示了一些使用 SK 进行开发的实用资源,例如 VS Code 扩展、Chat Copilot 应用程序和其他示例应用程序。虽然目前的SK版本已经相当强大,马上就要发布1.0 版本了,但它正在不断创新 。如果您想了解有关SK的更多信息并加入SK社区。我在Github上为你准备好了开始探索SK的资源列表:https://github.com/geffzhang/awesome-semantickernel[25]
相关链接:
- [1]LangChain: https://blog.langchain.dev/announcing-our-10m-seed-round-led-by-benchmark/
- [2]Semantic Kernel: https://learn.microsoft.com/en-us/semantic-kernel/overview/
- [3]LangChain vs Semantic Kernel :https://www.cnblogs.com/shanyou/p/17338785.html
- [4]Copilot Stack的中心: https://learn.microsoft.com/en-us/semantic-kernel/overview/#semantic-kernel-is-at-the-center-of-the-copilot-stack
- [5]将函数链接在一起: https://learn.microsoft.com/en-us/semantic-kernel/ai-orchestration/chaining-functions?tabs=Csharp
- [6]Jupyter 笔记本: https://learn.microsoft.com/en-us/semantic-kernel/get-started/quick-start-guide/?tabs=Csharp
- [7]多语言笔记本: https://devblogs.microsoft.com/dotnet/polyglot-notebooks-december-2022-release/
- [8]LangChain Agents : https://docs.langchain.com/docs/components/agents/
- [9]与规划器协调AI: https://learn.microsoft.com/en-us/semantic-kernel/ai-orchestration/planner?tabs=Csharp
- [10]OpenAI插件规范作为插件: https://platform.openai.com/docs/plugins/getting-started/
- [11]本地函数: https://learn.microsoft.com/en-us/semantic-kernel/ai-orchestration/native-functions?tabs=Csharp
- [12]LangChain的工具:https://python.langchain.com/docs/integrations/tools/
- [13]自定义工具:https://python.langchain.com/docs/modules/agents/tools/custom_tools
- [14]Microsoft Graph:https://github.com/microsoft/semantic-kernel/tree/main/dotnet/src/Plugins/Plugins.MsGraph
- [15]LangChain的工具列表: https://python.langchain.com/docs/integrations/tools/
- [16]Semantic Memory:https://github.com/microsoft/semantic-memory
- [17]Chat Copilot:https://learn.microsoft.com/en-us/semantic-kernel/chat-copilot/
- [18]语义内核工具扩展:https://marketplace.visualstudio.com/items?itemName=ms-semantic-kernel.semantic-kernel
- [19]提示流: https://learn.microsoft.com/en-us/azure/machine-learning/prompt-flow/overview-what-is-prompt-flow?view=azureml-api-2
- [20]Prompt Playground:https://github.com/xbotter/promptplayground
- [21]ChatGPT 存储库:https://github.com/search?q=chatgpt&type=repositories
- [22]Azure 函数:https://azure.microsoft.com/en-us/products/functions#:~:text=Azure%20Functions%20is%20an%20event,programming%20language%20of%20your%20choice.
- [23]业务流程协调程序服务:https://learn.microsoft.com/en-us/semantic-kernel/samples-and-solutions/local-api-service
- [24]TypeScript/React 示例应用程序:https://learn.microsoft.com/en-us/semantic-kernel/samples-and-solutions/#try-the-typescriptreact-sample-apps
- [25]SK的资源列表:https://github.com/geffzhang/awesome-semantickernel
欢迎大家扫描下面二维码成为我的客户,扶你上云