对比 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 要搜索网络读取/写入文件做笔记最后输出一份报告defweb_search(query:str)-str:Search the web for the given query.returnfresults for{query}...defwrite_note(filename:str,content:str)-str:Write content to a file.withopen(filename,w)asf:f.write(content)returnfsaved{filename}三、方案 ALangChain Agent标准做法fromlangchain.agentsimportcreate_agent agentcreate_agent(modelopenai:gpt-5.4,tools[web_search,write_note],system_promptYou are a research assistant. Search, take notes, then summarize.,)resultagent.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 协作”四、方案 BDeep Agents开箱即用豪华版fromdeepagentsimportcreate_deep_agent agentcreate_deep_agent(tools[web_search],instructionsYou are a research assistant. Plan, research, and write a report.,)resultagent.invoke({messages:[{role:user,content:Research LangGraph and write a report.}]})它白送给你什么Deep Agents 在create_agent基础上自动注入了 4 个内置能力内置能力解决的痛点规划工具write_todosAgent 先列计划再执行不再想到啥做啥虚拟文件系统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],}agentcreate_deep_agent(tools[web_search],instructionsYou are the lead researcher. Delegate deep research to subagents.,subagents[research_subagent],)何时选 Deep Agents长程任务要跑几十轮工具调用研究/编码类结果体量大需要暂存到文件想要Claude Code / Manus 那种体验但又不想自己造轮子五、方案 CLangGraph底层流程控制LangGraph 是最底层的——你自己画状态机节点 边 状态。fromtypingimportAnnotated,TypedDictfromlanggraph.graphimportStateGraph,START,ENDfromlanggraph.graph.messageimportadd_messagesfromlangchain.chat_modelsimportinit_chat_modelfromlanggraph.prebuiltimportToolNode,tools_conditionclassState(TypedDict):messages:Annotated[list,add_messages]notes:strllminit_chat_model(openai:gpt-5.4)tools[web_search,write_note]llm_with_toolsllm.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):summaryllm.invoke([{role:system,content:Summarize all findings into a report.}]state[messages])return{messages:[summary],notes:summary.content}graphStateGraph(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)appgraph.compile()resultapp.invoke({messages:[{role:user,content:Research LangGraph and write a report.}],notes:,})特点流程是写死的planner → researcher ↔ tools → summarizer → ENDState 自定义除了 messages 还能挂notes、step_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内部其实就是一个预定义好的 LangGraphagent_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):decisioninterrupt({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九、实战建议从 LangChain Agent 开始练手——先理解工具调用循环遇到 context 爆炸 → 升级到 Deep Agents——白送一堆能力遇到流程失控 / 要上生产 → 落到 LangGraph——用 State 节点把控三者可以混用LangGraph 的某个节点内部完全可以跑create_agent或 Deep Agent参考文档LangChain OverviewLangChain AgentsDeep AgentsLangGraph
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2593446.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!