news 2026/5/8 2:46:30

对比 LangChain Agent / Deep Agents / LangGraph 的真实代码差异

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
对比 LangChain Agent / Deep Agents / LangGraph 的真实代码差异

LangChain Agent vs Deep Agents vs LangGraph 真实代码对比

下面用同一个业务场景(“研究助手:搜索资料 + 写报告”)三种实现方式对比,让你一眼看出差异。


一、对比总览(先看结论)

维度LangChain AgentDeep AgentsLangGraph
定位标准 ReAct Agent开箱即用"豪华版"Agent底层流程编排框架
代码量(最小可用)~10 行~5 行~30-50 行
控制流模型自己决定(隐式循环)模型自己决定(带规划)你来定义节点和边
上下文管理全部塞进 messages自动压缩 + 虚拟文件系统自定义 State
子 Agent不原生支持原生支持subagents手动嵌套 graph
适合场景单一任务、工具调用长程任务、复杂研究确定性流程、审批流、多分支
学习曲线极低
灵活度中(高层抽象)极高

二、场景设定

任务:用户问一个问题,Agent 要:

  1. 搜索网络
  2. 读取/写入文件做笔记
  3. 最后输出一份报告
defweb_search(query:str)->str:"""Search the web for the given query."""returnf"results for{query}..."defwrite_note(filename:str,content:str)->str:"""Write content to a file."""withopen(filename,"w")asf:f.write(content)returnf"saved{filename}"

三、方案 A:LangChain Agent(标准做法)

fromlangchain.agentsimportcreate_agent agent=create_agent(model="openai:gpt-5.4",tools=[web_search,write_note],system_prompt="You are a research assistant. Search, take notes, then summarize.",)result=agent.invoke({"messages":[{"role":"user","content":"Research LangGraph and write a report."}]})print(result["messages"][-1].content_blocks)

特点

  • 一个函数搞定create_agent把"模型 + 工具 + 提示词"打包成 ReAct 循环
  • 隐式循环:模型自己决定调几次工具、何时停止
  • 上下文 = messages 数组:所有工具调用结果都堆在 messages 里,长任务容易爆 context

局限

  • 不能控制"先搜索再总结"这种顺序
  • 工具调用结果太多 → token 爆炸 → 模型遗忘前面的内容
  • 没法做"审批"、“分支”、“多 Agent 协作”

四、方案 B:Deep Agents(开箱即用豪华版)

fromdeepagentsimportcreate_deep_agent agent=create_deep_agent(tools=[web_search],instructions="You are a research assistant. Plan, research, and write a report.",)result=agent.invoke({"messages":[{"role":"user","content":"Research LangGraph and write a report."}]})

它"白送"给你什么

Deep Agents 在create_agent基础上自动注入了 4 个内置能力

内置能力解决的痛点
规划工具(write_todos)Agent 先列计划再执行,不再"想到啥做啥"
虚拟文件系统(ls/read_file/write_file/edit_file)长结果存到"文件"里,主对话只保留摘要 → 不爆 context
子 Agent 派生(task)主 Agent 可以让子 Agent 干脏活,结果只回传摘要
专门优化的系统提示词内置 Anthropic Claude Code 风格的 prompt

典型用法(带子 Agent 配置)

fromdeepagentsimportcreate_deep_agent research_subagent={"name":"research-agent","description":"Used to do deep research on a topic.","prompt":"You are a research expert. Search thoroughly and return findings.","tools":["web_search"],}agent=create_deep_agent(tools=[web_search],instructions="You are the lead researcher. Delegate deep research to subagents.",subagents=[research_subagent],)

何时选 Deep Agents

  • 长程任务(要跑几十轮工具调用)
  • 研究/编码类(结果体量大,需要"暂存"到文件)
  • 想要Claude Code / Manus 那种体验,但又不想自己造轮子

五、方案 C:LangGraph(底层流程控制)

LangGraph 是最底层的——你自己画状态机:节点 + 边 + 状态。

fromtypingimportAnnotated,TypedDictfromlanggraph.graphimportStateGraph,START,ENDfromlanggraph.graph.messageimportadd_messagesfromlangchain.chat_modelsimportinit_chat_modelfromlanggraph.prebuiltimportToolNode,tools_conditionclassState(TypedDict):messages:Annotated[list,add_messages]notes:strllm=init_chat_model("openai:gpt-5.4")tools=[web_search,write_note]llm_with_tools=llm.bind_tools(tools)defplanner(state:State):return{"messages":[llm.invoke([{"role":"system","content":"Make a plan first."}]+state["messages"])]}defresearcher(state:State):return{"messages":[llm_with_tools.invoke(state["messages"])]}defsummarizer(state:State):summary=llm.invoke([{"role":"system","content":"Summarize all findings into a report."}]+state["messages"])return{"messages":[summary],"notes":summary.content}graph=StateGraph(State)graph.add_node("planner",planner)graph.add_node("researcher",researcher)graph.add_node("tools",ToolNode(tools))graph.add_node("summarizer",summarizer)graph.add_edge(START,"planner")graph.add_edge("planner","researcher")graph.add_conditional_edges("researcher",tools_condition,{"tools":"tools",END:"summarizer",})graph.add_edge("tools","researcher")graph.add_edge("summarizer",END)app=graph.compile()result=app.invoke({"messages":[{"role":"user","content":"Research LangGraph and write a report."}],"notes":"",})

特点

  • 流程是写死的planner → researcher ↔ tools → summarizer → END
  • State 自定义:除了 messages 还能挂notesstep_count、任何业务字段
  • 可加人工审批:在某条边上interrupt(),等人工 approve 再继续
  • 天然可持久化:用 checkpointer 一行配好,崩了能续跑

何时必须用 LangGraph

  • 需要确定性流程(必须先 A 再 B 再 C)
  • 需要人工介入(审批、修改、确认)
  • 需要多 Agent 协作但流程要可控(不放心让 LLM 自己调度)
  • 需要可恢复执行(任务跑一半 crash 了能续上)

六、三者关系图(一图流)

┌─────────────────────────────────────────────────────┐ │ Deep Agents │ ← 最高层封装 │ (内置规划 + 虚拟FS + 子Agent + 优化prompt) │ ├─────────────────────────────────────────────────────┤ │ LangChain create_agent │ ← 标准 ReAct │ (模型 + 工具 + 循环) │ ├─────────────────────────────────────────────────────┤ │ LangGraph │ ← 底层引擎 │ (StateGraph / Node / Edge / Checkpoint) │ └─────────────────────────────────────────────────────┘

关键事实:上面两层都是基于 LangGraph 实现的
create_agent内部其实就是一个预定义好的 LangGraph:agent_node ↔ tool_node的循环。
Deep Agents 又在create_agent之上注入了文件系统工具和子 Agent 工具。


七、关键差异对照(同一行为)

1. 添加"工具"

# LangChain Agentcreate_agent(model=...,tools=[fn1,fn2])# Deep Agentscreate_deep_agent(tools=[fn1,fn2],instructions=...)# 自动多送你: write_todos / read_file / write_file / edit_file / ls / task# LangGraphToolNode([fn1,fn2])# 还要自己接到图上

2. 控制"必须先做 A 再做 B"

# LangChain Agent# ❌ 做不到,只能在 system_prompt 里"求"模型先做 A# Deep Agents# ⚠️ 同上,靠 prompt 引导,但因为有 todo 工具会更稳# LangGraphgraph.add_edge("step_a","step_b")# ✅ 硬约束

3. 加"人工审批"

# LangChain Agent / Deep Agents# ❌ 原生不支持(要 hack)# LangGraphfromlanggraph.typesimportinterruptdefapproval_node(state):decision=interrupt({"question":"approve?"})return{"approved":decision}

4. 处理"工具结果超长"

# LangChain Agent# ❌ 全塞 messages → 直接爆 context# Deep Agents# ✅ 自动写入虚拟文件系统,messages 里只留 "已保存到 results.md"# LangGraph# ✅ 自己定 State:把长结果存到 state["files"],messages 只放摘要

八、怎么选?(决策树)

你的任务是什么? │ ├─ 简单问答 + 几个工具调用就够? │ └─→ LangChain Agent ✅ │ ├─ 长程研究/写代码/写文档,怕爆 context? │ └─→ Deep Agents ✅ │ ├─ 流程必须可控?要审批/分支/可恢复?多 Agent 编排? │ └─→ LangGraph ✅ │ └─ 我全都要? └─→ LangGraph 打底 + create_agent 当节点 + Deep Agents 思路引入虚拟FS

九、实战建议

  1. 从 LangChain Agent 开始练手——先理解工具调用循环
  2. 遇到 context 爆炸 → 升级到 Deep Agents——白送一堆能力
  3. 遇到流程失控 / 要上生产 → 落到 LangGraph——用 State + 节点把控
  4. 三者可以混用:LangGraph 的某个节点内部完全可以跑create_agent或 Deep Agent

参考文档:

  • LangChain Overview
  • LangChain Agents
  • Deep Agents
  • LangGraph
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 2:44:28

Gitee SCA:重新定义开源组件安全治理范式

在数字化转型浪潮席卷全球的当下,开源组件已成为现代软件开发的"基础设施"。然而,随着Log4j、Spring4Shell等重大漏洞事件的爆发,开源组件的安全问题正从技术隐患演变为企业级风险。Gitee作为国内领先的代码托管平台,其…

作者头像 李华
网站建设 2026/5/8 2:41:15

并发编程之阻塞队列

一、阻塞队列介绍 1 队列 是限定在一端进行插入,另一端进行删除的特殊线性表。先进先出(FIFO)线性表。允许出队的一端称为队头,允许入队的一端称为队尾。 数据结构演示网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.htm…

作者头像 李华
网站建设 2026/5/8 2:40:30

实战篇:基于 ET 框架实现 CDKEY 礼包

实战篇:基于 ET 框架实现 CDKEY 礼包 礼包码系统是游戏运营侧最高频的需求之一,看似简单,实际上暗坑不少。本文从为什么做、怎么设计、怎么防护三个维度展开,最后用 ET 框架落地一套伪代码实现。 一、为什么需要 CDKEY 礼包 CDKEY(兑换码)礼包是运营与玩家之间最轻量的物…

作者头像 李华
网站建设 2026/5/8 2:38:59

BepInEx终极指南:从零开始掌握游戏插件框架的完整秘籍

BepInEx终极指南:从零开始掌握游戏插件框架的完整秘籍 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 想象一下,你正玩着一款心爱的游戏,突然灵…

作者头像 李华
网站建设 2026/5/8 2:25:29

2026年,昆明性价比高且技术强的代运营公司究竟哪家值得推荐?

在竞争激烈的商业环境中,选择一家靠谱的代运营公司对于企业的发展至关重要。特别是在2026年的昆明,市场上各类代运营公司层出不穷,如何挑选出性价比高且技术强的公司成为了众多企业关注的焦点。今天,就为大家重点推荐云南古汶传媒…

作者头像 李华
网站建设 2026/5/8 2:22:28

【一图看懂】Docker容器是什么(二) | 服务器篇2

Docker容器化如今已是企业云端部署、业务上线的主流标配,但动态启停、秒级销毁、分层存储、内核共享这些特性,也让传统物理机、虚拟机取证办法直接失效。上篇Docker容器是什么(一) | 服务器篇我们讲清了Docker基础架构&#xff0c…

作者头像 李华