前言
LangChain 是最流行的 LLM 应用框架之一,GitHub 星数超过 90k。但 Octomind 团队在使用 LangChain 12 个月后,决定将其从生产环境中移除。
本文将深入分析 LangChain 的问题,以及团队为什么做出这个决定。
评测背景
团队背景:Octomind,使用 AI Agent 自动生成和修复 Playwright 端到端测试。
使用周期:2023 年初至 2024 年,超过 12 个月。
使用场景:
- 测试用例发现
- Playwright 测试生成
- 自动修复
初始选择 LangChain 的原因:
- 组件丰富
- 社区活跃
- 承诺”一个下午从想法到代码”
评测维度
本次评测从以下维度评估 LangChain:
- 抽象设计:抽象是否合理
- 代码复杂度:是否简化还是增加复杂度
- 灵活性:定制能力
- 开发体验:调试、维护成本
- 生产适用性:生产环境的可靠性
核心问题:抽象设计
问题 1:过度抽象
LangChain 的设计理念是”用更少的代码做更多的事”,但实现方式是通过多层抽象。
示例:简单翻译任务
使用 OpenAI SDK:
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create( model="gpt-4", messages=[{"role": "user", "content": "Translate 'hello' to Italian"}])
print(response.choices[0].message.content)使用 LangChain:
from langchain.prompts import PromptTemplatefrom langchain.llms import OpenAIfrom langchain.output_parsers import StrOutputParser
prompt = PromptTemplate.from_template("Translate '{word}' to Italian")model = OpenAI()parser = StrOutputParser()
chain = prompt | model | parser
result = chain.invoke({"word": "hello"})print(result)对比分析:
| 维度 | OpenAI SDK | LangChain |
|---|---|---|
| 类数量 | 1 | 3 |
| 函数调用 | 1 | 4 |
| 新概念 | 0 | 3(Prompt Template、Output Parser、Chain) |
| 代码行数 | 6 | 9 |
LangChain 引入了 3 个新抽象,但没有带来明显好处。
问题 2:抽象堆叠
LangChain 经常在抽象上叠加抽象:
Prompt Template → Output Parser → Chain → Agent → Agent Executor每一层都增加理解成本,调试时需要追溯多层。
问题 3:抽象与实际需求脱节
LLM 领域变化极快,LangChain 在 2023 年设计的抽象,到 2024 年可能已经过时。
示例:Agent 架构
- 2023 年:单 Agent 顺序执行
- 2024 年:多 Agent 协作、动态工具切换
LangChain 的 Agent 抽象难以支持新模式。
对开发团队的影响
影响 1:理解成本 > 开发成本
团队花费大量时间理解 LangChain 内部实现:
问题:Agent 为什么重复调用同一个工具?排查:阅读 LangChain 源码 → 发现是 State Manager 的 bug解决:升级版本 / 修改源码时间分配变化:
| 阶段 | 使用 LangChain | 不使用框架 |
|---|---|---|
| 理解框架 | 40% | 0% |
| 调试框架 | 30% | 5% |
| 实现功能 | 30% | 95% |
影响 2:功能实现受限于框架
案例 1:动态工具切换
需求:根据业务逻辑动态启用/禁用 Agent 工具。
LangChain:不支持。Agent 的工具列表在初始化时固定。
案例 2:Agent 状态观察
需求:外部监控 Agent 执行状态。
LangChain:不支持。没有提供外部观察 Agent 状态的接口。
案例 3:多 Agent 协作
需求:多个 Agent 互相通信、协作完成任务。
LangChain:有限支持。需要大量自定义代码,违背”少写代码”的初衷。
影响 3:调试体验差
问题:Stack Trace 深度通常超过 50 层。
File "langchain/agents/agent.py", line 234File "langchain/chains/base.py", line 189File "langchain/llms/openai.py", line 156...File "langchain/prompts/base.py", line 78调试流程:
- 阅读错误信息
- 定位到 LangChain 源码
- 理解框架内部逻辑
- 修改应用代码或框架代码
这违背了”框架简化开发”的初衷。
性能评测
Token 消耗
LangChain 的抽象会增加 Token 消耗:
示例:Prompt Template
# LangChainprompt = PromptTemplate.from_template("Translate '{word}' to Italian")
# 实际发送给 LLM 的内容# 包含模板元数据、变量占位符等# Token 数量可能增加 10-20%响应速度
LangChain 的多层抽象增加处理时间:
| 操作 | 直接调用 | LangChain |
|---|---|---|
| 单次 LLM 调用 | 100ms | 150ms |
| Agent 执行(5 步) | 2s | 2.5s |
差异来源:
- Prompt 模板处理
- Output Parser 解析
- Chain 状态管理
什么时候不需要框架?
LangChain 提供的核心能力
LangChain 给人”LLM 应用很复杂”的印象,但核心组件通常是:
- LLM 客户端:与 LLM 通信
- 函数/工具:Function Calling
- 向量数据库:RAG
- 可观测性平台:追踪、评估
这些都是独立组件,不需要框架来”粘合”。
不使用框架的代码示例
简单的 Agent:
from anthropic import Anthropic
client = Anthropic()
def run_agent(user_input): messages = [{"role": "user", "content": user_input}]
while True: response = client.messages.create( model="claude-opus-4-20250514", messages=messages, tools=[get_weather_tool, send_email_tool] )
if response.stop_reason == "end_turn": return response.content[0].text
# 处理工具调用 for block in response.content: if block.type == "tool_use": result = execute_tool(block.name, block.input) messages.append({"role": "user", "content": result})代码量:约 30 行。
LangChain 同等功能:需要理解 Chain、Agent、Tool、OutputParser 等概念,代码量类似。
什么时候需要框架?
需要框架的场景:
- 快速原型验证
- 不熟悉 LLM 开发
- 需求简单,与框架预设一致
不需要框架的场景:
- 生产环境
- 需求复杂或定制化
- 团队有 LLM 开发经验
替代方案
方案 1:直接使用 LLM SDK
优点:
- 完全控制
- 代码简洁
- 易于调试
缺点:
- 需要自己实现通用功能(如 Memory、工具调用)
推荐:
- OpenAI SDK
- Anthropic SDK
- Google Gemini SDK
方案 2:模块化组件
推荐库:
- tiktoken:Token 计算
- chromadb:向量数据库
- pydantic:结构化输出
优点:
- 每个组件职责单一
- 可以灵活组合
- 易于理解和调试
方案 3:轻量级框架
如果确实需要框架,考虑:
- AutoChain:轻量级 LangChain 替代
- LlamaIndex:专注于数据索引和查询
- Haystack:专注于 RAG 和搜索
评测总结
评分:2/5 星
| 维度 | 评分 | 说明 |
|---|---|---|
| 抽象设计 | 1/5 | 过度抽象,增加复杂度 |
| 代码复杂度 | 2/5 | 代码量减少,但理解成本高 |
| 灵活性 | 2/5 | 受限于框架设计 |
| 开发体验 | 2/5 | 调试困难,Stack Trace 深 |
| 生产适用性 | 2/5 | 不适合复杂生产环境 |
适用场景
推荐使用:
- 原型验证
- 学习 LLM 开发
- 简单场景(Prompt + LLM)
不推荐使用:
- 生产环境
- 复杂 Agent 架构
- 需要底层控制
最终建议
LangChain 的定位应该是”入门学习工具”,而不是”生产级框架”。
如果你正在开发生产级 AI Agent:
- 直接使用 LLM SDK
- 根据需求选择模块化组件
- 避免引入不必要的抽象
相关阅读
更新时间:2026-04-25 02:40 来源:Octomind 团队博客、Hacker News 讨论