☰
LangChain create_agent 与 LangGraph 底层原理及实战对比
2026/10/29 2:17:06 网站建设 项目流程

一、概述

新版 LangChain 已经废弃旧版initialize_agent、create_react_agent,推荐使用create_agent构建智能体。LangChain 1.0 的智能体运行时已经可以直接用于生产:多步工具调用、结构化输出、流式返回、中间件、状态持久化和人工确认都在这一层完成。

核心结论:create_agent底层就是基于 LangGraph 封装的标准工具调用图,这张图本身就是生产级 Agent 的运行时。

  • create_agent:LangChain 1.0 推荐的智能体入口。图结构是标准工具循环,通过中间件、checkpointer、interrupt扩展重试、摘要、调用上限、人工审核和会话续跑,开发速度快,也能承担生产级复杂智能体
  • 原生 LangGraph:同一套底层图编排框架。节点、边、条件分支、终止逻辑全部自定义,适合流程拓扑本身必须定制的场景,例如多分支工作流、子图和并行编排

二、环境依赖

pipinstalllangchain langgraph langchain-openai python-dotenv

.env配置文件:

OPENAI_API_KEY=你的阿里百炼密钥 OPENAI_BASE_URL=你的阿里百炼命名空间)

三、create_agent 封装版 Agent

3.1 实现原理

内部自动构建LLM 节点 -> Tool 节点的循环图,内置工具调用判断、消息流转、循环终止逻辑,开发者不需要手动定义 StateGraph、节点与条件边。需要持久化、重试、限流或人工确认时,在create_agent上加 checkpointer 和中间件即可,不必先手写一张图。

3.2 完整可运行代码

fromdotenvimportload_dotenvimportos load_dotenv()fromlangchain.agentsimportcreate_agentfromlangchain_openaiimportChatOpenAIfromlangchain.toolsimporttool# 初始化大模型llm=ChatOpenAI(model="qwen3.5-flash",api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_BASE_URL"),temperature=0)# 自定义工具@tooldefadd_num(a:int,b:int)->int:"""计算两个整数相加"""returna+b@tooldefget_current_time():"""获取当前时间"""importdatetimereturndatetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")# 一键构建智能体,底层自动生成 LangGraphagent=create_agent(model=llm,tools=[add_num,get_current_time])# 可视化png=agent.get_graph().draw_mermaid_png()#保存图path=os.path.join(os.path.dirname(__file__),"agent_create.png")withopen(path,"wb+")asf:f.write(png)if__name__=="__main__":result=agent.invoke({"messages":[{"role":"user","content":"计算 77 + 23"}]})print(result["messages"][-1].content)print("="*50)result=agent.invoke({"messages":[{"role":"user","content":"现在是什么时间?"}]})print(result["messages"][-1].content)

3.3 特点

✅ 优点:代码简洁,开箱即用,自动处理工具调用循环。中间件可加上下文摘要、工具重试、报错兜底和调用次数上限;配合 checkpointer 持久化状态,配合interrupt做人工确认,足以支撑生产级复杂智能体
❌ 缺点:默认拓扑是标准工具循环。业务要改成完全不同的节点和路由时,再落到原生 LangGraph

四、原生 LangGraph 自定义图

4.1 实现原理

手动复刻标准 ReAct Agent 闭环:

START -> model 节点 -> 条件路由(调用工具 / 结束) -> tools 节点 -> 回到 model 节点

使用MessagesState维护消息状态,ToolNode执行工具,tools_condition做条件分支判断。

4.2 完整可运行代码

fromdotenvimportload_dotenvimportos load_dotenv()fromlanggraph.graphimportStateGraph,START,ENDfromlanggraph.graph.messageimportMessagesStatefromlanggraph.prebuiltimportToolNode,tools_conditionfromlangchain_openaiimportChatOpenAIfromlangchain.toolsimporttool# 初始化大模型llm=ChatOpenAI(model="qwen3.5-flash",api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("OPENAI_BASE_URL"),temperature=0)# 自定义工具@tooldefadd_num(a:int,b:int)->int:"""计算两个整数相加"""returna+b@tooldefget_current_time():"""获取当前时间"""importdatetimereturndatetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")# 工具列表tools=[add_num,get_current_time]# 绑定工具llm_with_tools=llm.bind_tools(tools)# 大模型推理节点defmodel_node(state:MessagesState):response=llm_with_tools.invoke(state["messages"])return{"messages":[response]}# 构建状态图workflow=StateGraph(MessagesState)# 注册节点workflow.add_node("model",model_node)workflow.add_node("tools",ToolNode(tools))# 图流转逻辑workflow.add_edge(START,"model")# 条件分支:有工具调用进入工具节点,否则结束workflow.add_conditional_edges("model",tools_condition,{"tools":"tools",END:END},)# 工具执行完成后,重新回到模型节点继续推理workflow.add_edge("tools","model")# 编译图graph=workflow.compile()png=graph.get_graph().draw_mermaid_png()#保存图path=os.path.join(os.path.dirname(__file__),"agent_langgraph.png")withopen(path,"wb+")asf:f.write(png)if__name__=="__main__":res=graph.invoke({"messages":[("user","计算 77 + 23")]})print(res["messages"][-1].content)print("="*50)res=graph.invoke({"messages":[("user","现在是什么时间?")]})print(res["messages"][-1].content)

4.3 特点

✅ 优点:节点、分支、状态、终止条件完全可控,流程拓扑可以按业务重画
❌ 缺点:需要理解图编排概念,代码量略多。标准工具循环用create_agent就能覆盖,手写这张图主要是为了看清底层,或在拓扑必须定制时使用

五、技术对比

对比项create_agent原生 LangGraph
底层实现封装好的 LangGraph手动构建 StateGraph
图结构标准工具循环,可挂中间件与持久化完全自定义
节点与分支循环固定,行为用中间件扩展自由新增、自定义路由
适用场景生产级工具智能体、多步调用、需重试/审核/续跑的 Agent自定义流程拓扑、子图、并行和多分支工作流
可控性高,控制点在中间件、状态和中断高,控制点在图本身

六、总结

  1. create_agent本质就是官方封装好的 LangGraph 标准 Agent 图,LangChain 1.0 推荐用它做智能体
  2. 工具调用类智能体,包括要上线的复杂场景,优先使用create_agent,再用中间件、checkpointer 和interrupt补齐重试、限流、持久化和人工确认
  3. 只有流程拓扑本身要改成自定义节点和路由时,再用原生 LangGraph 手动编排
  4. 手写 LangGraph 图有助于看清create_agent的底层循环,但上线并不依赖先手写这张图

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询