AI应用开发框架对比:LangChain vs. Semantic Kernel vs. DSPy 深度解析

7 阅读5分钟

本文为微信公众号 敏叔的技术札记 原创文章,版权归 敏叔的技术札记 所有。
如需转载或引用本文内容,请务必注明原文出处、作者以及原文链接
欢迎关注我的微信公众号 「敏叔的技术札记」,获取最新技术分享与深度解析。
对于任何未注明来源的转载、摘编、修改或商业使用行为,本人保留追究法律责任的权利。

前言

最近在搞AI应用开发,发现市面上框架是真不少,一开始我也懵,到底用哪个好呢?

我用下来之后发现,LangChain、Semantic Kernel、DSPy这三个是现在最火的,但各有各的脾气。今天就跟大家唠唠我的实际使用体验,不整那些虚的,直接上干货。

环境准备

先不说框架,环境得先搭好。这三个都是Python的,所以虚拟环境走起:

python3 -m venv ai-frameworks
source ai-frameworks/bin/activate

附赠安装小技巧,国内用阿里云镜像,速度飞起:

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

框架一:LangChain - 老大哥也有烦恼

安装

pip install langchain langchain-openai

LangChain算是这里面资格最老的,生态也最全。我用下来发现最大的好处就是文档多、例子多,新手友好。

基本使用

from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate

# 初始化模型
llm = ChatOpenAI(
    api_key="your-api-key",
    base_url="https://api.openai.com/v1",
    model="gpt-4"
)

# 创建提示模板
prompt = ChatPromptTemplate.from_template("请用{language}写一个{function}函数")

# 链式调用
chain = prompt | llm
result = chain.invoke({"language""Python""function""快速排序"})
print(result.content)

踩坑经验

  1. 版本兼容性:LangChain更新太快,有时候今天能跑的代码明天就报错。建议锁定版本:

    pip install langchain==0.1.0
    
  2. 内存泄漏:长时间运行要注意,特别是用ConversationBufferMemory的时候,记得定期清理。

  3. 国内网络问题:调用OpenAI API需要科学上网,不然干瞪眼。

框架二:Semantic Kernel - 微软的亲儿子

安装

pip install semantic-kernel

这是微软出的,跟Azure集成得特别好。我发现它最大的特点是“插件化”设计,用起来很灵活。

基本使用

import semantic_kernel as sk
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion

# 创建内核
kernel = sk.Kernel()

# 添加服务
api_key = "your-api-key"
kernel.add_chat_service(
    "chat_completion",
    OpenAIChatCompletion("gpt-4", api_key)
)

# 定义技能(其实就是函数)
sk_prompt = """
请用{{$language}}写一个{{$function}}函数
要求:{{$requirement}}
"""

summarize_function = kernel.create_semantic_function(
    sk_prompt,
    max_tokens=1000,
    temperature=0.7
)

# 执行
context = kernel.create_new_context()
context["language"] = "Python"
context["function"] = "二分查找"
context["requirement"] = "要有详细注释"

result = await summarize_function.invoke_async(context=context)
print(result.result)

实用技巧

  1. 本地技能:可以写Python函数当技能用,这个很实用:

    @sk_function(
        description="计算两个数的和",
        name="add_numbers"
    )
    def add_numbers(context: SKContext) -> str:
        num1 = float(context["num1"])
        num2 = float(context["num2"])
        return str(num1 + num2)
    
    kernel.import_skill(MySkills(), "math")
    
  2. 规划器:这个功能很强,能让AI自己规划任务步骤,但配置有点复杂,需要多调试。

  3. 配置文件:建议用config.json管理配置,别硬编码在代码里。

框架三:DSPy - 学术派的新贵

安装

pip install dspy-ai

这是斯坦福搞出来的,理念很新。最大的特点是“用程序优化提示”,不用手动调prompt了,这个我试了确实香!

基本使用

import dspy
from dspy.datasets.gsm8k import GSM8K

# 配置LM
lm = dspy.OpenAI(model='gpt-4', api_key='your-api-key')
dspy.configure(lm=lm)

# 加载数据
gsm8k = GSM8K()
trainset, devset = gsm8k.train, gsm8k.dev

# 定义签名(相当于接口)
class CoT(dspy.Module):
    def __init__(self):
        super().__init__()
        self.prog = dspy.ChainOfThought("question -> answer")
    
    def forward(self, question):
        return self.prog(question=question)

# 训练优化器
from dspy.teleprompt import BootstrapFewShot

teleprompter = BootstrapFewShot(metric=gsm8k.metric)
compiled_cot = teleprompter.compile(CoT(), trainset=trainset[:10])

# 使用
question = "小明有5个苹果,吃了2个,又买了3个,现在有几个?"
pred = compiled_cot(question=question)
print(f"答案: {pred.answer}")
print(f"推理过程: {pred.rationale}")

发现的问题

  1. 学习曲线陡:概念比较新,得花时间理解“签名”、“优化器”这些。

  2. 数据依赖:需要训练数据来优化,如果没数据就白搭。

  3. 资源消耗:优化过程比较吃算力,本地跑慢。

对比总结

我做了个表格,大家一眼就能看清楚:

| 特性 | LangChain | Semantic Kernel | DSPy | | --- | --- | --- | --- | | 上手难度 | 容易 | 中等 | 较难 | | 生态丰富度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | | 代码可读性 | 较好 | 好 | 一般 | | 提示优化 | 手动 | 半自动 | 自动 | | 企业级支持 | 好 | 非常好(微软) | 一般 | | 学习资料 | 极多 | 较多 | 较少 |

我的选择建议

场景一:快速原型开发

选LangChain,别犹豫。文档多、例子多,Stack Overflow上一堆答案,遇到问题好解决。

场景二:企业级应用,用Azure

选Semantic Kernel,跟微软全家桶集成得那叫一个丝滑,权限管理、监控啥的都现成的。

场景三:追求效果,有数据

选DSPy,特别是那种对输出质量要求高的场景。自动优化prompt真的能提升效果,我测试能提升10%-20%。

场景四:新手入门

还是LangChain,先把这个玩明白了,再去看别的。不然容易从入门到放弃。

后记

实际用下来,我发现没有哪个框架是完美的。

  • LangChain像是个啥都有的工具箱,但有点杂乱。

  • Semantic Kernel设计很工整,但不够灵活。

  • DSPy理念先进,但还不够成熟。

我的做法是:混着用。用LangChain搭基础架构,复杂逻辑用Semantic Kernel的规划器,关键模块用DSPy优化。

最后提醒一句:不管用哪个,一定要写测试!!AI应用的不确定性太大,没测试上线就是找骂。

祝各位开发顺利,少踩坑,多产出!