LangChain create_agent 与 LangGraph 底层原理及实战对比

一、概述

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

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

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

二、环境依赖

bash 复制代码
pip install langchain langgraph langchain-openai python-dotenv

.env 配置文件:

env 复制代码
OPENAI_API_KEY=你的阿里百炼密钥
OPENAI_BASE_URL=你的阿里百炼命名空间)

三、create_agent 封装版 Agent

3.1 实现原理

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

3.2 完整可运行代码

python 复制代码
from dotenv import load_dotenv
import os
load_dotenv()

from langchain.agents import create_agent
from langchain_openai import ChatOpenAI
from langchain.tools import tool

# 初始化大模型
llm = ChatOpenAI(
    model="qwen3.5-flash",
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url=os.getenv("OPENAI_BASE_URL"),
    temperature=0
)

# 自定义工具
@tool
def add_num(a: int, b: int) -> int:
    """计算两个整数相加"""
    return a + b

@tool
def get_current_time():
    """获取当前时间"""
    import datetime
    return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")


# 一键构建智能体,底层自动生成 LangGraph
agent = 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")
with open(path, "wb+") as f:
    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 完整可运行代码

python 复制代码
from dotenv import load_dotenv
import os
load_dotenv()

from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import MessagesState
from langgraph.prebuilt import ToolNode, tools_condition
from langchain_openai import ChatOpenAI
from langchain.tools import tool

# 初始化大模型
llm = ChatOpenAI(
    model="qwen3.5-flash",
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url=os.getenv("OPENAI_BASE_URL"),
    temperature=0
)

# 自定义工具
@tool
def add_num(a: int, b: int) -> int:
    """计算两个整数相加"""
    return a + b

@tool
def get_current_time():
    """获取当前时间"""
    import datetime
    return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

# 工具列表
tools = [add_num, get_current_time]
# 绑定工具
llm_with_tools = llm.bind_tools(tools)

# 大模型推理节点
def model_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")
with open(path, "wb+") as f:
    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 的底层循环,但上线并不依赖先手写这张图
相关推荐
DigitalOcean6 小时前
WorkBuddy 接入自定义模型教程:配置 GPT、Claude 等大模型
llm·agent
杰克尼6 小时前
今日面试题总结
java·开发语言·人工智能·langchain
oscar9997 小时前
软件工厂:当AI代理站上软件交付流水线
人工智能·agent·软件工厂
郝学胜-神的一滴7 小时前
AI 编程智能体 16:从零基础搭建到精细化优化
人工智能·python·算法·语言模型·langchain·pip
找了一圈尾巴8 小时前
Agent 架构的记忆系统:从滑动窗口到离线整合,一套分层记忆设计
架构·agent
StarRocks_labs9 小时前
StarRocks + Paimon 多模态数据湖检索
starrocks·agent·数据湖·数据·paimon·mip
栈知见9 小时前
14-Context 上下文管理:支撑长期任务的机制
agent
Topskys9 小时前
DeepSeek 稀疏注意力
agent
小七-七牛开发者9 小时前
多 Agent 架构中的 Subagent 拆分与合并策略
agent·multiagent·subagent·agent架构·harness #工程实践