LLMs 应用开发框架 Semantic Kernel 和 LangChain 比较
Semantic Kernel 和 LangChain 是当前比较受欢迎的两款 LLMs 应用开发框架,笔者通过实现一个支持联网功能的智能 AI 助手来比较分析下两个框架的差异(适合自己场景的工具才是最好滴 🧑🏻💻)
我的新书《LangChain编程从入门到实践》 已经开售!推荐正在学习AI应用开发的朋友购买阅读!
关键概念对应(非严谨版)
LangChain | Semantic Kernel | 备注 |
---|---|---|
Chains | Kernel | 构造调用序列 |
Agents | Planner | 自动规划任务以满足用户的需求 |
Tools | Plugins (semantic functions + native function) | 可在不同应用之间重复使用的自定义组件 |
Memory | Memory | 将上下文和嵌入存储在内存或其他存储中 |
语言支持
编程语言 | LangChain | Semantic Kernel |
---|---|---|
Python | ✅ | ✅ |
JavaScript | ✅ | ❌ |
C# | ❌ | ✅ |
Java | ✅ | ✅ |
基于Semantic Kernel 构建应用过程概览
基于LangChain 构建应用过程概览
AI 助手的设计
- 能够结合上下文识别提问意图
- 使用向量数据库获取相关信息
- 回答内容参考自最新外部知识
功能
意图识别
首先根据历史对话记录确定用户的询问意图
LangChain 实现
1 | from langchain.chains import LLMChain |
Semantic Kernel实现
1 | import os |
信息检索功能
使用向量数据库 Chroma 存储嵌入后的文本向量,获取相关上下文
LangChain 实现
1 | def _get_web_research_retriever(self): |
Semantic Kernel实现
1 | async def _get_context(self, query: str) -> list[str]: |
结合上下文(检索增强生成)
结合历史对话记录,回答用户问题
LangChain 实现
1 | def _rag(self, context: list[str], query: str)-> str: |
Semantic Kernel实现
1 | async def _rag(self, context: list[str], query: str)-> str: |
问答功能实现
1 | async def ask(self, query: str) -> str: |
结论
Langchain更适合构建MVP,Semantic Kernel更适合生产级应用
Langchain更适合独立开发,Semantic Kernel更适合企业应用
LangChain 的优势在于丰富的组件支持,以WebResearchRetriever
的封装实现为例,将向量数据库和搜索引擎结合起来,只需几行代码就可以完成复杂功能,加速MVP实现,需求验证。LangChain 的缺点主要是过度封装,Prompt 模板组件做这么抽象实在没必要,应用调试和生产环境可观测性方面都不太友好,软件工程方面的组织相对较差。
Semantic Kernel生态比起 LangChain 还差点,但是背靠大厂“巨硬”,这点也能快速赶上,设计整体奔着构建生产级应用去的,把LangChain的一些缺点基本都规避了。Semantic Kernel主要面向C#开发者,也支持Python,C#开发者只能选择Semantic Kernel。
LLMs 应用开发框架 Semantic Kernel 和 LangChain 比较
https://liduos.com/the-difference-semantic-kernel-and-langchain.html