以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 工程师和数据科学家喜爱的功能。
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 参考应用程序之外,还有其他示例应用。这些应用展示:

加入社区

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]

相关链接:

使用SemanticKernel 进行智能应用开发(2023-10更新)的更多相关文章

  1. EOS智能合约开发(四):智能合约部署及调试(附编程示例)

    EOS智能合约开发(一):EOS环境搭建和创建节点 EOS智能合约开发(二):EOS创建和管理钱包 EOS智能合约开发(三):EOS创建和管理账号 部署智能合约的示例代码如下: $ cleos set ...

  2. 以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明

    以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明 为了让你的Ðapp运行上以太坊,一种选择是使用web3.js library提供的web3.对象.底层实 ...

  3. 搭建智能合约开发环境Remix IDE及使用

    目前开发智能的IDE, 首推还是Remix, 而Remix官网, 总是由于各种各样的(网络)原因无法使用,本文就来介绍一下如何在本地搭建智能合约开发环境remix-ide并介绍Remix的使用. 写在 ...

  4. eos 智能合约开发体验

    eos编译安装 eos 特性 数据存储 eos投票智能合约开发 eos投票智能合约部署测试 注意避坑 eos编译安装 ERROR: Could not find a package configura ...

  5. 区块链入门到实战(27)之以太坊(Ethereum) – 智能合约开发

    智能合约的优点 与传统合同相比,智能合约有一些显著优点: 不需要中间人 费用低 代码就是规则 区块链网络中有多个备份,不用担心丢失 避免人工错误 无需信任,就可履行协议 匿名履行协议 以太坊(Ethe ...

  6. Hyperledger Fabric 智能合约开发及 fabric-sdk-go/fabric-gateway 使用示例

    前言 在上个实验 Hyperledger Fabric 多组织多排序节点部署在多个主机上 中,我们已经实现了多组织多排序节点部署在多个主机上,但到目前为止,我们所有的实验都只是研究了联盟链的网络配置方 ...

  7. Hyperledger Fabric 使用 CouchDB 和复杂智能合约开发

    前言 在上个实验中,我们已经实现了简单智能合约实现及客户端开发,但该实验中智能合约只有基础的增删改查功能,且其中的数据管理功能与传统 MySQL 比相差甚远.本文将在前面实验的基础上,将 Hyperl ...

  8. [教学] Delphi Berlin 10.1 开发 Windows 10 平板 App 远程调试

    Delphi Berlin 10.1 开发 Windows 10 平板 App 远程调试安装步骤: 准备电脑: 一台开发电脑,安装 Delphi 开发环境 一台平板电脑,安装 PAServer,安装方 ...

  9. 人类大脑只开发了10%? I don't think so.

    既然程序执行时有些部分是彼此互斥的(在程序的一次执行中,执行了这部分就不会去执行另一部分),那么所谓的 人类大脑只开发了10%? 是不是其实只是程序互斥的一种体现. 而往往"智商" ...

  10. 【今日推荐】移动 Web 开发的10个最佳 JavaScript 框架

    选择正确的 JavaScript 框架,对于开发移动 Web 应用程序是至关重要的,也是移动应用程序开发的一项重要任务.开发人员可以使用框架实现的功能高效地达到他们的开发目标.这些预实现的组件采用优秀 ...

随机推荐

  1. 【AGC】Connect API报错submit failed的相关问题

    ​[关键字] AGC.Connect API.Publishing API [问题描述] 开发者反馈在使用AGC的Connect API提交发布时,报出了[cds]submit failed, add ...

  2. js修改css样式

    修改宽度: document.getElementById("div1").style.width="200px"; 修改border-radius: docu ...

  3. Java 使用ArrayList获取10个1-20之间的随机数,要求不能重复

    代码如下: public static void main(String[] args) { List<Integer> nums = new ArrayList<Integer&g ...

  4. 五分钟了解MES与MOM的区别和联系

    大家好,我是Edison. 上一篇,我们通过了解了MES系统的发展历程和标准体系.本篇,我们来快速了解一下近年来吵得很热的MOM是什么鬼,它和MES到底有什么区别和联系. MES是什么 MES (Ma ...

  5. (内附示例源码)如何通过electron构建桌面跨平台音视频应用

    近年来,视频直播.直播带货.在线教育.在线医疗等音视频领域的相关行业都非常热门,成为大众瞩目的焦点. 在不久的将来,音视频技术渗透于各行各业,无处不在.从IoT网络到个人用户的移动设备,音视频技术以不 ...

  6. 平时容易忽视的地方之一:java在抽取方法时,什么时候该用void

    当一个类中多个方法有相同编码,或该部分编码可以作为一个整体,适合抽取出一个方法时,要注意这个抽取的方法的返回值,什么时候可以用void,什么时候不能用void? 先看代码: import lombok ...

  7. Object.equals 和 String.equals的区别

    一.  源码展示: 1. Object.equals: ①引用类型地址值比较,直接返回结果:true || false public class Object { public boolean equ ...

  8. 行行AI人才直播第12期:风平智能创始人林洪祥《AI数字人的技术实践和商业探讨》

    行行AI人才是博客园和顺顺智慧共同运营的AI行业人才全生命周期服务平台. 歌手孙燕姿凭借AI翻唱席卷各大视频平台.有视频博主用AI技术复活已故的奶奶,并且与之对话缅怀亲人填补遗憾.更有国外网红通过GP ...

  9. Element-ui源码解析(二):最简单的组件Button

    好家伙,为了有足够的能力去开发组件,先研究一下别人的组件 开始抄袭模仿我们的行业标杆element-ui   找到Button组件的源码  只有三个文件,看上去非常易读,开搞  其中最重要的部分,自然 ...

  10. Nginx:超时 keeplive_timeout 配置

    参考:Nginx的超时keeplive_timeout配置详解 HTTP 是一种无状态协议,客户端向服务器发送一个 TCP 请求,服务端响应完毕后断开连接. 如果客户端向服务器发送多个请求,每个请求都 ...