以OpenAI 的ChatGPT 所掀起的GenAI 快速创新浪潮,其中连接LLM 和 应用之间的桥梁的两大开源项目:LangChain[1]和Semantic Kernel[2] ,在半年前写过一篇文章 LangChain vs Semantic Kernel [3],这半年以来Semantic kernel 有了显着改进,这篇文章反应了最新的更新。
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个月。
SK Planner 与LangChain Agents [8]非常相似。主要区别在于SK Planner 将从一开始就创建一个计划,而LangChain Agent将在每一步确定下一步的行动方案。LangChain的方法听起来更好,但代价是性能低和更高的Token 使用量。Planner 是SK的可扩展部分。这意味着我们有多个Planner 可供选择,如果您有特定需求,您可以创建自定义Planner。有关Planner 更多信息,请参阅此处[9]。
“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 插件编写两种类型的函数,语义函数和本机函数。
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的是把这些提示是写在文件中的,或代码中没有多行魔术字符串。
[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的术语保持一致。
Semantic Kernel与LangChain相比,SK目前拥有一组较小的开箱即用插件( LangChain 比SK开源时间早了4个月)。以下是目前一些值得注意的差异:
Semantic Memory 是“一个开源的 服务和插件,专门用于数据集的有效索引(来源在这里[16])它是SK的有力搭档。 注入AI的应用程序的大多数实际用例都涉及处理数据,以便LLM可以使用数据。分块、嵌入、向量存储和向量搜索是该领域讨论的一些常见主题。有关详细信息,请参阅文档和存储库。
SK 没有内置功能将聊天记录存储在文件系统、Redis 缓存、MongoDB 或其他数据库等持久存储中,这部分功能的演示包含在参考应用程序 Chat Copilot[17]。
正如反复提到的,SK是为开发人员而构建的。本节介绍一些这方面的工具:
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记录和计量请求有几个主要好处:
Chat Copilot 应用程序
SK发布了一个 Chat Copilot[17]参考应用程序。与许多 ChatGPT 存储库[21]不同,此示例应用程序充分展示SK 的上述各项特性:
除了Chat Copilot 参考应用程序之外,还有其他示例应用。这些应用展示:
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]
相关链接: