Semantic Kernel vs LangChain


框架的核心价值,都是降低开发以及维护成本。大语言模型开发框架也不例外,让开发者可以更方便地开发基于大语言模型的应用。

主要提供两类帮助:

  • 第三方能力抽象。比如 LLM、向量数据库、搜索引擎等
  • 常用工具、方案封装
提示:选对框架,会有事半功倍的效果。
Semantic Kernel LangChain
出品公司 微软 LangChain AI
支持的语言 Python、C#、Java、TypeScript Python、TypeScript
开源协议 MIT MIT
应用 Microsoft 365 Copilot、Bing 1.5w+ 开源项目

以下数据来源于 Github Star History ,看起来 Langchain 一骑绝尘?事实真的是这样吗? 千万不要低估了微软浑厚的软件工程底蕴。

sk-vs-langchain-star-history

LangChain Semantic Kernel
Model Connector
Tools Connector
Vectorstore Connector
Memory Memory
Prompt Templates Plugins
Chain Pipeline
Agent Planner
TextSplitter text.*
OutputParser -
LangChain Semantic Kernel
大模型 70+ 5+
向量数据库 50+ 11
Agent/Planner 10+ 4

当下 LangChain 更强。LangChain 的战略就是拼命的完善需求,扩展功能进而抢占市场。使用上有些功能略显冗余和低效,所以能感觉的到它目前重心不在质量上。

但 Semantic Kernel 可能更有未来,因为:

  • 不要怀疑微软要做 AI 霸主的决心
  • 不要轻视微软的架构和软件工程能力,从名字可以看出来是把它当做操作系统内核一样的架构去设计
  • 以及,钞能力

但微软的非中立性,尤其是对待其他家大模型的态度,可能是影响 Semantic Kernel 推广的一个重要因素。

目前 Semantic Kernel 对集成第三方能力的态度:

  • 不希望放在自己的代码库中
  • 像操作系统一样,它只提供最基础的能力,其它的都是外部维护,按需安装, 参考 这里。

两者都值得学。

  • 语言限制方面 C#、Java 只能用 SK,JavaScript 只能用 LangChain。
  • 做原型,首选 LangChain,功能多,开发快。
  • 做产品,Semantic Kernel 可能长期更合适。

我们也可以各取其长,但对我们的要求更高,免不了要读源代码来分析它们,找到最佳的组合策略(过程中,可能会发现,有些部分自己做更好)。

组合思路:

  • Semantic Kernel 搭框架,用它的 ConnectorsPlugins 能力
  • LangChain 的各种小工具做局部处理,比如 TextSplitterOutputParser
  • LlamaIndex 对接外部数据
  • Prompt Flow 调试和评估
  • LangSmith 监视 LLM 流量
  • 创建自己的 Agent(特定场景的 agent 一定不是通用的)

从论文上的理论,到仿真出的算法,到最后落实的工程项目,每一步常常需要重写,重设计。 因为算法科学家可能不懂工程,软件工程师可能不懂算法,这是 AI 剧烈发展带来的真空地带。

LlamaIndex 是一个建造 LLM 应用的数据框架

  • GitHub 22.4k+ stars
  • 专门针对搜索、检索类 LLM 应用优化,性能不错
  • 接口简单直接,易于上手
  • 外部数据的对接极其方便
  • 官网 https://llamahub.ai/

MetaGPT 国内公司开发的多 Agent 框架

  • GitHub 27k+ stars
  • 并不是 AI 编程工具,而是个开发框架
  • 多 Agent 的概念非常超前。虽然实用性还不行,但值得关注

可用于 LangChain 的调试。 (LangChain) 🦜🔗 → 🦜🛠️ (LangSmith)

  • 非开源的商业 SaaS 项目,官网见这里
  • 在线调试、测试和监视 prompt、LLM 应用
  • 与 LangChain 配合的很好(但是它并没有和 LangChain 紧耦合)
langsmith-debug

日志 LLM 应用

只需要在 .env 中配置:

LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT=https://api.smith.langchain.com
LANGCHAIN_API_KEY=<your-api-key>  # LangSmith 中的 API Key
LANGCHAIN_PROJECT=<your-project>  # 在 LangSmith 中创建的项目名。默认会使用 "default"

然后运行基于 LangChain 的应用,就能:

  • 在 LangSmith 中看到 LLM、Chain 等的调用日志
  • 就日志内容直接调试 prompt,创建数据集

数据集:

  • 数据集可以直接被代码引用,当做 prompt 中的例子
  • 可以批量跑数据集来测试模型效果
  • 内置若干好用的评估能力,也可以自定义

Hub:

  • 类似 GitHub,可以和其它人共享 prompt
  • Hub 中的 prompt 可以直接在代码中引用
from langchain import hub
obj = hub.pull("homanp/superagent")

Prompt Flow 可以与 LangSmith 类似,但也有区别。

  • 是个 VS Code 插件 + 命令行工具
  • 可以和 SK 配合,也可以独立使用
  • 可视化 flow 组合 prompt 和代码,调试参数,用数据集评估效果
  • 代码可直接部署到 Azure
  • 纯靠 prompt flow 拼接,实现和 LLM 对话,但每次的输出都用 LLM 做摘要,以节约阅读时间

prompt-flow