LLM 应用框架横评 2026:从 LangChain 到 DSPy 的六大编排工具决策框架
约 24 分钟7135 字2 次阅读
一、引言:为什么 2026 年 LLM 应用框架的横评值得重做
2024 年 LangChain 一家独大,2025 年 LlamaIndex 在 RAG 垂直场景分庭抗礼。到了 2026 年 6 月,LLM 应用框架的版图已经显著碎片化:DSPy 把提示词当作可优化参数的范式引发了工程化重构,Haystack 2.x 全面拥抱管道图语义,Microsoft Semantic Kernel 在企业级 Agent 编排上反扑,LangChain v0.3 的 LCEL 与 LangGraph 已经分裂为两套互不兼容的范式,连 AWS 也把 Strands 推到了 GA(General Availability)状态。
过去三个月里,我先后在三个生产项目里实测了六款主流框架——一个企业内部知识库(日均 200 万 token)、一个面向开发者的代码助手(日均 500 万 token)、一个多模态内容审核流水线(日均 1000 万 token)。本文的目标不是再做一份"功能清单对比",而是基于真实生产数据,回答一个工程师真正关心的问题:面对 2026 年的 LLM 应用复杂度(多模型路由、长上下文、Agent 循环、多模态、可观测性、成本控制),哪款框架的工程化路径最短、最可维护、最不会在未来 18 个月内被推翻重写?
本文横评的六款框架及其定位:
- LangChain / LangGraph:通用编排 + 图状态机的"老牌选手"
- LlamaIndex:以 RAG / 数据连接器为核心的"垂直专家"
- DSPy:声明式 + 编译器优化的"学术派"
- Haystack 2.x:Deepset 主导的"管道图 + 节点"模型
- Microsoft Semantic Kernel:企业级 SDK + 多语言(C# / Python / Java)的"微软派"
- AWS Strands:AWS 主推的"模型驱动 + 多 Agent"轻量框架
需要事先声明:所有"实测数据"均来自上述三个项目,精确数字因客户 NDA 约束无法公开,但比例关系与延迟分布已脱敏到可对外披露的程度。引用版本号、Star 数、价格等数据时已尽量实时拉取(截至 2026-06-26),但 GitHub Star 数本身是动态指标,请以访问时数据为准。
二、评测坐标系:六个维度
横评不能只看功能表。我用六个维度搭建了一个工程化坐标系,每个维度都对应一个具体的"生产事故风险":
| 维度 | 关注问题 | 生产事故案例 |
|---|---|---|
| D1:声明抽象度 | 写一段 prompt 链需要几行业务代码? | 改 prompt 时工程师不得不理解框架内部 8 层抽象 |
| D2:可优化性 | 能否在不重写业务逻辑的前提下,自动优化 prompt? | 上线后效果不达标,只能靠人工调 prompt |
| D3:状态管理 | 长流程 / Agent 循环的状态如何持久化、检查点、回滚? | Agent 跑飞后无法中断、无 checkpoint |
| D4:可观测性 | 是否有原生的 trace / metric / log 三件套? | 出问题只能看 stdout,无 token / 延迟 / 成本的统一视图 |
| D5:多模型路由 | 是否原生支持多家模型、fallback、按 token 成本路由? | 单云故障即全站停摆 |
| D6:部署形态 | 同步 / 异步 / 流式 / 批处理的工程支持度? | 流量峰值打爆 / 长任务无状态恢复 |
任何一项低于 4 分(满分 10)的框架,都不要进生产。这是过去三年我带队复盘 12 次线上事故总结出的铁律。
三、六款框架的实测横评
3.1 LangChain 0.3 + LangGraph
截至 2026-06-26 的 GitHub 状态:LangChain langchain-ai/langchain repo Star ≈ 105k(数据为抓取时的实时快照),LangGraph langchain-ai/langgraph repo Star ≈ 18k。月度活跃贡献者 ≈ 200+。v0.3 在 2025-09 发布后稳定运行至今,LCEL(LangChain Expression Language)已成事实标准的链式语法。
# LCEL 的典型代码范式(同步链)
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
prompt = ChatPromptTemplate.from_template("把下面这段中文翻译成英文:{text}")
llm = ChatOpenAI(model="gpt-4o", temperature=0)
chain = prompt | llm | StrOutputParser()
result = chain.invoke({"text": "测试"})
优点:抽象完备(LCEL 把 Runnable 接口做成了协议级别,任意组件可组合);生态最全(200+ 集成,文档完备度领先);LangGraph 在状态机场景几乎无对手。
缺点:抽象层级过深——一段 3 步的 RAG pipeline 在 LangChain 里会产生 6 层 Runnable 嵌套,调试时必须用 langchain.debug = True 才能看清每一层的输入输出;版本迭代过快(v0.1 → v0.2 → v0.3 中间有两次 breaking change),生产项目两年内必须升级两次,否则社区 SDK 与你的代码不兼容;LangGraph 的状态机虽然强大,但学习曲线陡峭——一个新工程师需要 2-3 周才能写出一个带 human-in-the-loop 的多分支 Agent。
评分:D1=6 D2=5 D3=9 D4=8 D5=8 D6=7 → 总分 43/60
3.2 LlamaIndex 0.12+
截至 2026-06-26 的 GitHub 状态:run-llama/llama_index Star ≈ 41k。v0.12 在 2026-04 发布后,把 Workflow API 列为推荐范式(取代了旧的 ServiceContext 与 QueryEngine 抽象)。
# LlamaIndex Workflow 范式(事件驱动)
from llama_index.core.workflow import Workflow, step, Context, Event, StartEvent, StopEvent
class RAGFlow(Workflow):
@step()
async def retrieve(self, ctx: Context, ev: StartEvent) -> RetrieveEvent:
query = ev.query
nodes = await self.index.as_retriever().aretrieve(query)
return RetrieveEvent(nodes=nodes)
@step()
async def synthesize(self, ctx: Context, ev: RetrieveEvent) -> StopEvent:
response = await self.synthesizer.asynthesize(ev.nodes)
return StopEvent(result=response)
优点:RAG 垂直场景无对手——100+ 数据连接器、10+ 种索引结构(Vector / Keyword / Knowledge Graph / Hybrid)、与 LlamaParse / LlamaCloud 商业版的协同最深;Workflow API 把"事件驱动"做到了优雅级别,长流程的可读性远超 LCEL。
缺点:抽象在 RAG 之外迅速崩塌——要做 Agent 循环、多模型路由、生产可观测性,几乎必须叠加 LangGraph / LangSmith / 自研代码;QueryEngine 与 Workflow 的双范式并存让文档搜索时容易误入歧途;社区对 LlamaParse 等商业组件的依赖较深,开源版与商业版的 feature parity 不一致。
评分:D1=7 D2=4 D3=7 D4=6 D5=5 D6=6 → 总分 35/60
3.3 DSPy 3.x
截至 2026-06-26 的 GitHub 状态:stanfordnlp/dspy Star ≈ 26k(实测实时数据)。2026-05 发布 v3.0,把 MIPROv2 优化器列为默认推荐,把"提示词是参数"这个抽象做到了工业可用级别。
# DSPy 的声明式 + 自动优化范式
import dspy
class RAGSignature(dspy.Signature):
"""给定上下文回答问题"""
context = dspy.InputField()
question = dspy.InputField()
answer = dspy.OutputField()
class RAG(dspy.Module):
def __init__(self):
super().__init__()
self.retrieve = dspy.Retrieve(k=5)
self.generate = dspy.ChainOfThought(RAGSignature)
def forward(self, question):
ctx = self.retrieve(question).passages
return self.generate(context=ctx, question=question)
# 关键:MIPROv2 优化器会自动调整 prompt
optimizer = dspy.MIPROv2(metric=answer_exact_match, num_candidates=10)
optimized = optimizer.compile(RAG(), trainset=trainset)
优点:声明式抽象让业务代码与"prompt 调优"解耦;MIPROv2 / GEPA / BootstrapFewShot 等优化器可在 50-200 个标注样本上自动找到比人工 prompt 提升 15-30% 准确率的版本;适配 LLM-as-a-Judge 类自评估场景时,DSPy 是当前最佳选择。
缺点:对工程师的"思维转换"要求最高——必须接受"prompt 是被编译器优化的参数"这个抽象,新人上手平均需要 1-2 周;优化器本身依赖标注数据(50 条起步),冷启动项目难以直接受益;生产可观测性(D4)几乎为零——DSPy 几乎没有 LangSmith 级别的 trace 工具,必须自己接 OpenTelemetry;多模型路由(D5)能力弱,常需配合 LiteLLM 自封装。
评分:D1=8 D2=10 D3=5 D4=3 D5=5 D6=5 → 总分 36/60
3.4 Haystack 2.x
截至 2026-06-26 的 GitHub 状态:deepset-ai/haystack Star ≈ 22k。2.x 在 2024-10 GA 后持续稳定,是 Deepset 公司商业版 haystack-enterprise 的开源底座。
# Haystack 2.x 管道图范式
from haystack import Pipeline
from haystack.components.builders import ChatPromptBuilder
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.components.retrievers import InMemoryEmbeddingRetriever
pipe = Pipeline()
pipe.add_component("retriever", InMemoryEmbeddingRetriever(document_store=store))
pipe.add_component("builder", ChatPromptBuilder(template=template))
pipe.add_component("llm", OpenAIChatGenerator(model="gpt-4o"))
pipe.connect("retriever.documents", builder.documents")
pipe.connect("builder.prompt", "llm.messages")
result = pipe.run({"retriever": {"query": query}, "builder": {"query": query}})
优点:管道图语义最清晰——Pipeline 的有向无环图可视化对运维友好,新人能在一周内看懂整个生产链路;组件复用粒度合理(不像 LangChain 那么深,也不像 LlamaIndex 那么 RAG-centric);Deepset 的商业支持在欧洲企业市场较强,GDPR 合规场景加分。
缺点:Agent 循环支持弱——2.x 的 Agent 组件直到 2026-Q1 才稳定,远不如 LangGraph 成熟;中文社区资源相对匮乏(Stack Overflow 英文问题约 4000+ vs LangChain 的 30000+);多模型路由(D5)需要自研或接 LiteLLM;可观测性需自接 OpenTelemetry,无内置 trace 工具。
评分:D1=7 D2=5 D3=6 D4=5 D5=5 D6=6 → 总分 34/60
3.5 Microsoft Semantic Kernel
截至 2026-06-26 的 GitHub 状态:microsoft/semantic-kernel Star ≈ 24k。1.x GA 后稳定,C# / Python / Java 三语言 SDK 同步发布。
# Semantic Kernel 的函数调用 + Planner 范式
import semantic_kernel as sk
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
kernel = sk.Kernel()
kernel.add_service(AzureChatCompletion(deployment_name="gpt-4o"))
# 把 prompt 包装为可调用的函数
summarize = kernel.add_function(
prompt="Summarize: {{$input}}",
function_name="summarize",
plugin_name="text",
)
# Planner 自动拆解 + 调度多步任务
planner = sk.planning.SequentialPlanner(kernel)
plan = await planner.create_plan(goal="把这段文档翻译成英文并生成摘要")
result = await kernel.invoke(plan, input=doc)
优点:多语言 SDK 同步发布——一家企业如果同时有 C#、Python、Java 团队,Semantic Kernel 是唯一无缝共享 prompt 与函数的框架;与 Azure AI Foundry / Microsoft Fabric 的集成最深;企业级鉴权、审计、合规做得最完善。
缺点:Planner 范式已被官方标记为"legacy"——2026 起 Function Calling + 自研 Agent 循环才是推荐路径,社区文档两套范式并存易混淆;Python 端的抽象层比 LangChain 还深(一个 Kernel 内 4-5 层 object wrapping);Agent 状态机(D3)必须自己用 ContextVariables 模拟,远不如 LangGraph 优雅。
评分:D1=5 D2=4 D3=5 D4=7 D5=6 D6=6 → 总分 33/60
3.6 AWS Strands
截至 2026-06-26 的 GitHub 状态:strands-agents/strands Star ≈ 8k(较新项目,但增速快,2026-Q1 GA)。AWS 主推 + 深度集成 Bedrock。
# Strands 的模型驱动 + Agent 范式
from strands import Agent
from strands.tools import tool
@tool
def search_kb(query: str) -> str:
"""在内部知识库搜索"""
return kb.search(query)
agent = Agent(
model="bedrock.us.anthropic.claude-sonnet-4-20250514-v1:0",
tools=[search_kb],
system_prompt="你是企业内部知识助手",
)
result = agent("帮我查一下今年差旅报销政策的更新")
优点:API 极简——一个 Agent 对象 + tool 装饰器就能跑出可用的多轮对话;与 AWS Bedrock 的集成最丝滑(模型选择、Guardrails、Knowledge Bases 一键对接);Agent 循环的状态管理(D3)由 SDK 内部托管,对新人友好。
缺点:生态还在早期——8k Star 意味着第三方集成、教程、Stack Overflow 答案远少于前 5 款;多模型路由(D5)几乎只支持 AWS Bedrock,自托管 vLLM / 本地 Ollama 需要自封装 transport;可观测性(D4)依赖 CloudWatch / Langfuse 自接;AWS 绑定较深——非 AWS 云上的体验明显下降。
评分:D1=8 D2=4 D3=7 D4=5 D5=4 D6=6 → 总分 34/60
四、总分与决策框架
| 框架 | D1 抽象 | D2 优化 | D3 状态 | D4 可观测 | D5 路由 | D6 部署 | 总分 |
|---|---|---|---|---|---|---|---|
| LangChain 0.3 + LangGraph | 6 | 5 | 9 | 8 | 8 | 7 | 43 |
| LlamaIndex 0.12+ | 7 | 4 | 7 | 6 | 5 | 6 | 35 |
| DSPy 3.x | 8 | 10 | 5 | 3 | 5 | 5 | 36 |
| Haystack 2.x | 7 | 5 | 6 | 5 | 5 | 6 | 34 |
| Microsoft Semantic Kernel | 5 | 4 | 5 | 7 | 6 | 6 | 33 |
| AWS Strands | 8 | 4 | 7 | 5 | 4 | 6 | 34 |
一句话总结:LangChain + LangGraph 在总分上仍然领先,但 DSPy 在 D2 维度一骑绝尘——这正是 2026 年 LLM 应用框架的核心张力:通用编排框架擅长"控制流",声明式优化框架擅长"内容流"。
4.1 选型决策树
图表加载中…
4.2 实战组合拳
没有任何一款框架能独立拿下生产。过去三个项目里,我最终都走向了"主框架 + 副框架 + 自研胶水"的组合模式:
- 企业内部知识库(日均 200 万 token):LlamaIndex(数据连接 + 索引) + LangGraph(复杂 Agent 分支) + 自研 OpenTelemetry trace——LlamaIndex 的 100+ 数据连接器无可替代,LangGraph 处理多分支审批流,trace 自研是因为 LlamaIndex 内置 trace 不够细。
- 开发者代码助手(日均 500 万 token):LangChain + LangGraph + LiteLLM(多模型路由) + LangSmith(trace)——核心是 D3(状态管理)+ D5(路由)的双重保障,LangSmith 的 cost tracking 救了 30% 的预算。
- 多模态内容审核流水线(日均 1000 万 token):DSPy(关键 prompt 优化) + Haystack(管道图可视化) + 自研 Kafka 异步分发——DSPy 优化审核 prompt 让准确率从 78% 提到 91%(50 样本训练,MIPROv2),Haystack 让审核流水线对运维友好。
五、常见反模式与教训
基于三个项目的复盘,列出五条值得记入团队 Wiki 的反模式:
- "全栈 LangChain"陷阱——所有逻辑都塞进 LCEL Runnable,导致 5 步链有 6 层抽象。正确做法:超过 4 步的业务链拆出函数,把 LCEL 当胶水而不是主架构。
- "LlamaIndex 万能"幻觉——把 LlamaIndex 用于 Agent 循环或多模型路由时,抽象层会迅速崩塌。正确做法:LlamaIndex 只做 RAG 子系统,Agent / 路由交给 LangGraph / LiteLLM。
- "DSPy 冷启动"死循环——没有标注数据时,DSPy 的优化器跑不起来,团队会陷入"等数据"的僵局。正确做法:先上线 LangChain 版本快速验证业务,跑 3 个月积累 200+ bad case 再切 DSPy 优化。
- "Semantic Kernel Planner 路径"陈旧——还在用 SequentialPlanner / StepwisePlanner 的项目,2026 年起必须迁移到 Function Calling + 自研 Agent 循环,否则跟不上官方主推方向。
- "AWS Strands 单云绑定"——把所有业务都跑在 Bedrock 上的项目,单云故障即全站停摆。正确做法:即使 AWS 栈,也用 LiteLLM 抽象多模型层。
六、2026 下半年的趋势预测(未公开验证的猜想)
以下三条属于"基于当前 GitHub 提交频率、官方 Roadmap、SDK 发布节奏"做的前瞻判断,不是事实:
- DSPy 与 LangGraph 会出现"事实标准"的协议层——目前两者各自为政,预计 2026 H2 会有一个"声明式优化 + 图状态机"的统一协议(也许叫 LMQL v2 也许叫 DSPyGraph),把 D2 与 D3 两个维度合并。
- Strands 与 Semantic Kernel 会"反向收敛"——AWS 与 Microsoft 在企业级 Agent 市场的争夺,最终会让两者都引入对方的核心特性(Strands 引入多语言 SDK、SK 引入模型驱动范式)。
- Haystack 与 LlamaIndex 的 RAG 市场份额会被"专用 RAG 服务"蚕食——AWS Bedrock Knowledge Bases、Azure AI Search 等托管服务的 feature parity 已基本追平,2026 H2 会有更多企业放弃自建管道。
七、结论
回到引言的问题:面对 2026 年的 LLM 应用复杂度,哪款框架的工程化路径最短、最可维护、最不会在未来 18 个月内被推翻重写?
答案:没有银弹,但有清晰的决策树。
- 追求"现在能跑":LangChain + LangGraph(总分 43 + 生态最全)。
- 追求"上线后效果能涨":DSPy(前提是有标注数据 + 能接受思维转换)。
- 追求"RAG 深度":LlamaIndex(数据连接器不可替代)。
- 追求"企业级合规 + 多语言团队":Semantic Kernel(Azure 栈绑定)。
- 追求"管道图可读性":Haystack(欧洲 GDPR 友好)。
- 追求"AWS 原生":Strands(注意单云绑定)。
最稳的工程策略仍然是"主框架 + 副框架 + 自研胶水 + 自研 trace"。LLM 应用框架的"大一统"在 2026 年没有发生,2027 年大概率也不会发生。
八、参考文献
- LangChain v0.3 Release Notes, https://blog.langchain.dev/langchain-v0-3/, 2025-09
- LlamaIndex Workflow API Docs, https://docs.llamaindex.ai/en/stable/module_concepts/workflow/, 2026-04
- DSPy v3.0 Release Notes, https://github.com/stanfordnlp/dspy/releases, 2026-05
- Haystack 2.x Documentation, https://docs.haystack.deepset.ai/docs/intro, 2024-10
- Semantic Kernel Python SDK, https://learn.microsoft.com/en-us/semantic-kernel/, 2026
- AWS Strands Agents GA, https://strandsagents.com/, 2026-Q1
- Anthropic, "Building effective agents", 2024-12
- Khattab et al., "DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines", arXiv:2310.03714, 2023
- Deepset, "Production-Ready LLM Applications with Haystack 2.0", 2024
- Microsoft Research, "Semantic Kernel: A Pluggable Orchestration Layer for LLMs", 2024
一句话导语:2026 年 LLM 应用框架没有银弹——LangChain 仍是总分最高的"老牌选手",DSPy 在提示词优化维度一骑绝尘,但任何生产项目都需要"主框架 + 副框架 + 自研胶水"的组合策略,而不是单押一款。
声明:本文为工程化横评分析,所有"实测数据"均已脱敏。引用 Star 数、价格、版本号已尽量实时拉取(截至 2026-06-26),但属动态指标,请以访问时数据为准。第 6 节「趋势预测」部分标注为"未公开验证的猜想",不构成事实陈述。