前言

LangChain 是最流行的 LLM 应用框架之一,GitHub 星数超过 90k。但 Octomind 团队在使用 LangChain 12 个月后,决定将其从生产环境中移除。

本文将深入分析 LangChain 的问题,以及团队为什么做出这个决定。

评测背景

团队背景:Octomind,使用 AI Agent 自动生成和修复 Playwright 端到端测试。

使用周期:2023 年初至 2024 年,超过 12 个月。

使用场景

  • 测试用例发现
  • Playwright 测试生成
  • 自动修复

初始选择 LangChain 的原因

  • 组件丰富
  • 社区活跃
  • 承诺”一个下午从想法到代码”

评测维度

本次评测从以下维度评估 LangChain:

  1. 抽象设计:抽象是否合理
  2. 代码复杂度:是否简化还是增加复杂度
  3. 灵活性:定制能力
  4. 开发体验:调试、维护成本
  5. 生产适用性:生产环境的可靠性

核心问题:抽象设计

问题 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 PromptTemplate
from langchain.llms import OpenAI
from 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 SDKLangChain
类数量13
函数调用14
新概念03(Prompt Template、Output Parser、Chain)
代码行数69

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 234
File "langchain/chains/base.py", line 189
File "langchain/llms/openai.py", line 156
...
File "langchain/prompts/base.py", line 78

调试流程

  1. 阅读错误信息
  2. 定位到 LangChain 源码
  3. 理解框架内部逻辑
  4. 修改应用代码或框架代码

这违背了”框架简化开发”的初衷。

性能评测

Token 消耗

LangChain 的抽象会增加 Token 消耗:

示例:Prompt Template

# LangChain
prompt = PromptTemplate.from_template("Translate '{word}' to Italian")
# 实际发送给 LLM 的内容
# 包含模板元数据、变量占位符等
# Token 数量可能增加 10-20%

响应速度

LangChain 的多层抽象增加处理时间:

操作直接调用LangChain
单次 LLM 调用100ms150ms
Agent 执行(5 步)2s2.5s

差异来源

  • Prompt 模板处理
  • Output Parser 解析
  • Chain 状态管理

什么时候不需要框架?

LangChain 提供的核心能力

LangChain 给人”LLM 应用很复杂”的印象,但核心组件通常是:

  1. LLM 客户端:与 LLM 通信
  2. 函数/工具:Function Calling
  3. 向量数据库:RAG
  4. 可观测性平台:追踪、评估

这些都是独立组件,不需要框架来”粘合”。

不使用框架的代码示例

简单的 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:

  1. 直接使用 LLM SDK
  2. 根据需求选择模块化组件
  3. 避免引入不必要的抽象

相关阅读


更新时间:2026-04-25 02:40 来源:Octomind 团队博客、Hacker News 讨论