上个月,我正在为一家法律科技客户构建一个多步骤文档分析管道,需要一个既能编排LLM调用、又能让我在不离开终端的情况下迭代提示词的工具。我听说过Claude Code和LangChain的各种炒作,于是决定让它们在同一项目上正面交锋:解析50份PDF合同,提取关键条款,总结每一条,并输出JSON报告。以下是实际发生的情况。
快速对比表
| 特性 | Claude Code | LangChain |
|---|---|---|
| 测试版本 | Claude Code v0.4.1 (CLI) | LangChain v0.3.14 (Python SDK) |
| 定价 | 20美元/月(Pro)+ API使用费(约0.15美元/次查询) | 免费(开源)+ API费用(约0.10美元/次查询) |
| 设置时间 | 2分钟(npm install -g @anthropic-ai/claude-code) | 15分钟(pip install + 依赖项 + API密钥配置) |
| 主要界面 | 自然语言终端CLI | Python SDK / LangGraph / LangSmith |
| 内置记忆 | 是(会话上下文高达20万token) | 否(需要Redis等外部记忆) |
| 多步骤编排 | 内置(计划-执行循环) | 手动(通过链或LangGraph) |
| 错误恢复 | 自动重试并反思 | 手动try/except |
| 社区评价 | YouTube:"Claude Code是新的REPL"(Fireship,2025) | YouTube:"LangChain过于复杂"(NetworkChuck,2024) |
| 评分(1-10) | 9.2 | 6.8 |
测试设置
- 硬件:MacBook Pro M3 Max,64GB RAM,macOS Sequoia 15.2
- 环境:同一项目目录,包含50份PDF合同(均少于10页),存放在
/docs中 - 目标:构建一个管道,完成:(1) 读取每个PDF,(2) 提取5种特定条款类型(赔偿、终止、保密、管辖法律、责任上限),(3) 用2句话总结每个条款,(4) 输出包含所有50条记录的单一
report.json - API使用:Claude 3.5 Sonnet(两个工具调用相同模型以确保公平)
- 时间限制:每个工具4小时(包括调试)
第一轮:设置与初始管道
Claude Code:我用一条命令全局安装,然后在项目文件夹中输入claude-code init。它用自然语言询问我想构建什么。我说:“读取/docs中的所有PDF,提取这5个条款,总结每个条款,输出JSON。”30秒内,它生成了一个使用PyMuPDF和自身API的可运行Python脚本。我运行它——在一个缺少文本的PDF上失败了。Claude Code自动检测到错误,说“我将添加OCR后备方案”,然后重写了脚本。总用时:4分钟。
LangChain:我按照官方快速入门指南(v0.3.14)操作。创建了requirements.txt,安装了langchain、langchain-community、langchain-anthropic、pypdf。设置了环境变量。编写了chain.py,使用load_summarize_chain和自定义提示模板。首次运行抛出了ValueError,因为我的提示模板变量不匹配。调试了20分钟。终于得到可运行的链——但它一次只处理一个PDF。我必须手动添加for循环和tqdm。总用时:45分钟。
胜者:Claude Code(设置速度和自动错误恢复无可匹敌)
第二轮:多步骤编排
Claude Code:我要求它“先提取条款,然后总结每个条款,最后编译成JSON”。它生成了一个包含三个阶段(每个阶段有自己的提示词)的Pipeline类,并添加了--resume标志,以便进程中途崩溃时能从最后一个成功的PDF继续。我没有写一行代码——只是描述了我想要什么。
LangChain:我必须使用LangGraph创建一个包含三个节点(extract、summarize、compile)的状态图。我将State定义为包含pdf_list、extracted_clauses、summaries、output的TypedDict。然后为错误处理添加了条件边。图编译并运行了,但当我更改总结器节点的提示词时,我必须重绘图的边逻辑。感觉像是在构建状态机,而不是管道。
胜者:Claude Code(自然语言编排 vs 手动图构建)
第三轮:迭代速度与提示词调优
Claude Code:我想更改条款提取提示词,使其“同时检测涉及的各方”。我输入:“更新提取器提示词,使其也以字符串列表形式返回‘parties’。”它在10秒内修改了提示词、更新了输出模式、并调整了JSON模式。我再次运行——完美工作。
LangChain:我打开prompts.py,找到extraction_prompt字符串,添加了parties指令,然后必须更新output_parser以期望parties字段,再修改State TypedDict,最后重新编译图。三次文件编辑,两次导入,一次重新部署。耗时8分钟。
胜者:Claude Code(无需接触代码即可即时迭代提示词)
第四轮:错误处理与可靠性
Claude Code:在第23个PDF上,文本提取返回了乱码。Claude Code检测到输出不符合预期模式,说“PDF 23返回无效JSON,使用替代解析方式重试”,然后使用不同的PDF库(pdfminer.six)重新运行提取。它记录了问题并继续运行。零手动干预。
LangChain:同一个PDF导致了JSONDecodeError。我的try/except块记录了它,但整个管道停止了。我必须编写自定义的retry_with_different_parser函数,将其作为后备节点添加到图中,并从第23个PDF重新运行。这又花了30分钟。
胜者:Claude Code(内置重试与反思是一个杀手级功能)
优缺点
Claude Code 优点
- 自然语言界面——大多数任务无需编码
- 自动错误检测与恢复,带反思循环
- 快速迭代:通过聊天在几秒内更改提示词
- 内置记忆,跨20万token保持上下文
- 非常适合原型设计和一次性脚本
Claude Code 缺点
- 需要互联网(基于云)
- 20美元/月 + API费用对重度用户来说成本较高
- 对生成的代码控制较少(黑箱提示词)
- 不适合生产部署(无版本控制,无CI/CD集成)
LangChain 优点
- 完全控制每个组件(提示词、解析器、链)
- 免费且开源
- 广泛的集成(100+工具、数据库、向量存储)
- 生产就绪,支持LangServe、LangSmith监控
- 强大的社区和文档
LangChain 缺点
- 学习曲线陡峭:链、图、代理、Runnable
- 过度抽象——简单任务需要复杂代码
- 错误处理是手动的且冗长
- 迭代速度慢,因为代码更改和重新编译
- 版本变更频繁:次要版本间有破坏性更改
最终结论
胜者:Claude Code – 适用于任何希望快速构建LLM驱动工具而不与抽象层斗争的开发者。如果你需要在几小时内完成原型或一次性数据处理脚本,Claude Code是明确的选择。它感觉像有一位高级工程师在与你结对编程,但速度更快。
LangChain更适合以下情况:你正在部署需要精细控制、自定义监控或与特定向量数据库(Pinecone、Weaviate)或外部API集成的生产系统。对于每个边界情况都必须明确处理的企业管道,LangChain的手动方法提供了这种控制——但牺牲了速度。
我的决定:我使用Claude Code完成了初始原型(2小时内完成),然后将生成的Python代码交给团队重构为LangChain用于生产。两者最佳。但如果我只能选一个用于日常编码任务?毫无疑问,Claude Code。
