每当向他人介绍 Semantic Kernel, 会得到的第一个问题就是 Semantic Kernel 类似于LangChain吗,或者是c# 版本的LangChain吗? 为了全面而不想重复的回答这个问题,因此我写下这篇文章。

ChatGPT 之前,构建 集成AI的应用程序的主要分为两个步骤:

  1. 机器学习工程师/数据科学家创建模型,然后通过 REST API 终结点发布此模型。
  2. 应用程序开发人员通过传递确定性参数来调用 REST API 终结点。

有了GPT以后 构建与 AI 集成的应用程序过去要简单得多,应用程序员开发人员直接访问OpenAI的REST API,将它集成到我们的应用中,但是真正开始集成的时候才发现挑战不仅仅是调用API,例如:

  • 如何将OpenAI与内部知识搜索(内部文档,数据库,SharePoint等)集成
  • 如何将OpenAI与其他系统集成,如SAP,ERP,CRM,HR系统,IT票务系统等。
  • 如何有效地跟踪聊天对话历史记录
  • 如何以可配置的方式将提示实现到代码中(而不是使它们看起来像魔术字符串))
  • 如何最小化使用的Token
  • 如何在服务限制内和围绕服务配额和限制工作 - 更具体地说,围绕最大请求数/分钟
  • 以及更多...

这中间需要有一个业务流程协调程序。该服务编排来自各种依赖项(OpenAI、Azure 搜索、数据库等)的输入和输出,并将其拼接在一起。

  • 这种模式可以从微软最近发布的Copilot服务中看出。请注意,GitHub Copilot、M365 Copilot、D365 Copilot 和Security Copilot的架构之间都有一个“Copilot Service”,用于将应用程序与LLM模型和其他服务链接起来。
  • 另请注意,微软在架构图中提到了的是“LLM”,而不是“GPT-4”。这是因为业务流程协调程序服务同时使用不同的 LLM 来实现其目的。

这就是像Semantic KernelLangChain这样的库的用武之地。这些库可帮助开发人员:

  • 管理对话历史记录,这是ChatCompletionAPI 希望开发人员弄清楚的。
  • 根据意图规划方法。
  • 为该方法实现“链接”
  • 管理Memory和服务连接要求(即对话历史记录、外部 API 等)

LangChain目前是“最成熟”(但相当新的)拥有大型开源社区的。第一次提交是在 2022 年10月。

  • 它支持Python和TypeScript,其中Python具有更多功能
  • 大多数在线文章都使用Jupyter笔记本 演示 LangChain,LangChai也不把自己被称为“SDK”,它是为习惯于使用笔记本的ML工程师构建的。
  • 应用程序开发人员需要弄清楚如何组织代码和使用 LangChain,软件工程方面的组织相对SK 显得差了很多。
  • LangChainHarrison Chase创立,他的职业是ML工程师,更多是从ML 工程师角度架构应用。
  • LangChain开源社区的贡献非常活跃,目前已经有29k star。

Semantic Kernel(SK)是相对“较新的”,但它是为开发人员构建的。第一次提交是在 2023 年 2 月。

  • 它主要面向 C# 开发人员,它也支持 Python,(功能另请参阅功能奇偶校验文档)。
  • 因为它是为开发人员构建的,所以它被称为轻量级 SDK,可帮助开发人员将代码组织到内置于 Planner 中的技能、记忆和连接器中(在此处阅读更多内容)。
  • 示例代码中有很多业务流程协调程序 Web 服务的示例。
  • SK由一个以软件开发工程能力超强的组织(微软)创立。开源社区规模也相当活跃,目前已经有5.7k star。
  • 它是由微软创立的,文档方面做的也非常好,它有一个官方的支持页面LinkedIn学习课程
  • 由于 SK 在构建时考虑了应用,因此有一个 MS Graph连接器工具包,适用于需要与日历、电子邮件、OneDrive 等集成的方案。

这两个库我们选择使用哪一个,我觉得主要的考虑因素是开发人员的技能,LLM 已经将机器学习的门槛降低到普通开发人员就可以开发AI应用,SK 在帮助应用开发人员开发AI方面的帮助会比LangChain更大,我会选择采用SK来构建AI应用。

LangChain vs Semantic Kernel的更多相关文章

  1. Large Kernel Matters —— Improve Semantic Segmentation by Global Convolutional Network(GCN全局卷积网络)

    作者认为语义分割的两个挑战是分类和定位,而这两个挑战又是比较对立的.对于分类问题,模型需要有变形和旋转不变形,而对于定位问题,模型有需要对变形敏感. 提出的GCN遵循两个主要原则: 1.对定位问题,模 ...

  2. 谈一谈深度学习之semantic Segmentation

    上一次发博客已经是9月份的事了....这段时间公司的事实在是多,有写博客的时间都拿去看paper了..正好春节回来写点东西,也正好对这段时间做一个总结. 首先当然还是好好说点这段时间的主要工作:语义分 ...

  3. The user's guide what comes in the kernel Documentation directory

    The Linux IPMI Driver --------------------- Corey Minyard <minyard@mvista.com> <minyard@acm ...

  4. Review of Semantic Segmentation with Deep Learning

    In this post, I review the literature on semantic segmentation. Most research on semantic segmentati ...

  5. Fully Convolutional Networks for Semantic Segmentation 译文

    Fully Convolutional Networks for Semantic Segmentation 译文 Abstract   Convolutional networks are powe ...

  6. Semantic Segmentation on Remotely Sensed Images Using an Enhanced Global Convolutional Network with Channel Attention and Domain Specific Transfer Learning

    创新点: 1.在GCN(global convolutional network)基础上,把他的backbone替换成更多层的,使其适应中分辨率影像,resnet50,101,152 2.利用 cha ...

  7. 图像分割:Semantic/Instance/Panoramic Segmentation

    一. 背景介绍 语义分割(Semantic Segmentation):对一张图片上的所有像素点进行分类,同一物体的不同实例不需要单独分割出来. 实例分割(Instance Segmentation) ...

  8. Linux 内核概述 - Linux Kernel

    Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...

  9. 04.ubuntu下kvm 命令行安装64位ubuntu报"Couldn't find hvm kernel for Ubuntu tree."的问题

    1.安装ubuntu时使用的virt-install的配置: virt-install \ --name test4 \ --ram 1024 \ --disk path=/data/01_ubunt ...

  10. 语义网 (Semantic Web)和 web 3.0

    语义网=有意义的网络. "如果说 HTML 和 WEB 将整个在线文档变成了一本巨大的书,那么 RDF, schema, 和 inference languages 将会使世界上所有的数据变 ...

随机推荐

  1. heimaJava17

    java IO流 缓冲流 概念 缓存流也称为高效流.或者高级流.之前学习的字节流也可以称为原始流 作用:缓冲流自带缓冲区.可以提高原始字节流.字符流读写数据的性能 分类 字节缓冲流 字节缓冲输入流:B ...

  2. 使用阿里云镜像安装tensorflow

    pip --default-timeout=1000 install --index-url https://mirrors.aliyun.com/pypi/simple tensorflow pip ...

  3. ubuntu系统使用 sudo: cd:找不到命令

    1. https://blog.csdn.net/sazass/article/details/125694492 https://blog.csdn.net/weixin_34033624/arti ...

  4. IP与bigint互转

    IP转为bigint create function [dbo].[iptobigint](@ipinfo varchar(16)) returns bigint as begin declare @ ...

  5. TProtocolException: Required field 'type' is unset! Struct:TPrimitiveTypeEntry(type:null)

    org.apache.thrift.protocol.TProtocolException: Required field 'type' is unset! Struct:TPrimitiveType ...

  6. meterpreter的使用

    meterpreter是metasploit中的一个杀手锏,通常在漏洞利用成功后,会返回给攻击者一个攻击通道,其中有很多自动化操作 场景布置 生成木马 首先,我们使用metasploit中的另一个后门 ...

  7. GO语言学习笔记-反射篇 Study for Go ! Chapter nine - Reflect

    持续更新 Go 语言学习进度中 ...... GO语言学习笔记-类型篇 Study for Go! Chapter one - Type - slowlydance2me - 博客园 (cnblogs ...

  8. JAVA重试机制多种方式深入浅出

    重试机制在分布式系统中,或者调用外部接口中,都是十分重要的. 重试机制可以保护系统减少因网络波动.依赖服务短暂性不可用带来的影响,让系统能更稳定的运行的一种保护机制. 为了方便说明,先假设我们想要进行 ...

  9. 利用Intent在两个页面之间进行传值操作的具体实现

    不知道为什么,我本来使用的呼声最高的Bundle发送,但是我使用它会显示不出来,由于时间问题,我今天就先不找了,先放一下,先以完成任务为己任哈! 我们都清楚,我们基本上都是用的Intent实现的页面之 ...

  10. Android笔记--发送彩信

    发送彩信 界面还是那个界面,图片也实现了从相册进行选择图片,选择完成之后,就会回到界面里面的功能: 下面接着实现发送彩信的完整版: 具体实现如下: 界面代码不再展示,主要着重于后台的代码编写啦! 1. ...