Skip to content

LangChain Agent:三种不同创建方式对比

引言

LangChain 1.x 提供了多种创建 Agent 的方式,从简单工具调用到复杂多代理系统。本文详细对比三种主要创建方式:标准 Agent@langchain/classic 遗留 Agent、LangGraph 自定义 Agent,并重点介绍新兴的 Deep Agent。每种方式适用于不同场景,我们将通过代码示例和使用场景对比,帮助你选择最适合的方案。

1. 标准 Agent:create_agent()(推荐方式)

langchain.agents.create_agent() 是 LangChain 1.x 的核心推荐方式**,取代了之前的 create_react_agent。它基于 LangGraph,提供 ReAct 循环 + 中间件系统,支持持久化、流式输出、人机交互等高级特性。**

核心特点

  • 统一接口:取代多种遗留 Agent 类型
  • 中间件系统:支持动态提示、总结、人工审核等
  • LangGraph 底层:内置持久化、流式、人机交互
  • 结构化输出:主循环内生成,无额外 LLM 调用

基础用法

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

@tool
def get_weather(city: str) -> str:
    """获取城市天气"""
    return f"{city} 天气:22°C,晴天"

model = ChatOpenAI(model="gpt-4o-mini")
tools = [get_weather]

# 创建标准 Agent
agent = create_agent(
    model=model,
    tools=tools,
    system_prompt="你是一个有天气工具的有帮助助手。"
)

# 调用
result = agent.invoke({
    "messages": [{"role": "user", "content": "上海天气如何?"}]
})
print(result["messages"][-1].content)

高级特性:中间件

python
from langchain.agents.middleware import (
    summarization_middleware,
    human_in_the_loop_middleware,
    pii_redaction_middleware
)

agent = create_agent(
    model=model,
    tools=tools,
    middleware=[
        # 自动总结长对话
        summarization_middleware({
            "model": "gpt-4o-mini",
            "max_tokens_before_summary": 500
        }),
        # 敏感工具需要人工审核
        human_in_the_loop_middleware({
            "interrupt_on": {
                "send_email": {"allowed_decisions": ["approve", "edit", "reject"]}
            }
        }),
        # PII 脱敏
        pii_redaction_middleware({"patterns": ["email", "phone"]})
    ]
)

适用场景:大多数工具调用场景,推荐新项目首选

2. 遗留 Agent:@langchain/classic(向后兼容)

LangChain 1.x 将遗留 Agent 移至 @langchain/classic 包,仅用于迁移旧代码。包含 6+ 种传统 Agent 类型。

安装和可用类型

bash
pip install "@langchain/classic"
python
from langchain_classic.agents import (
    create_openai_functions_agent,
    create_react_agent,
    create_sql_agent,
    create_structured_chat_agent,
    create_json_agent
)
from langchain_classic.agents import AgentExecutor

# OpenAI Functions Agent 示例
agent = create_openai_functions_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)

可用遗留类型

类型用途
create_openai_functions_agentOpenAI 函数调用
create_react_agentReAct 代理(已弃用)
create_sql_agentSQL 数据库查询
create_structured_chat_agent结构化对话
create_json_agentJSON 处理

适用场景仅用于迁移旧代码,不推荐新项目

3. LangGraph 自定义 Agent(高级灵活)

直接使用 LangGraph 构建,完全自定义控制流,适合复杂多代理系统。

基础 Graph Agent

python
from langgraph.graph import StateGraph, END
from typing_extensions import TypedDict
from langchain_openai import ChatOpenAI

class AgentState(TypedDict):
    messages: list

def agent_node(state: AgentState):
    """代理节点"""
    model = ChatOpenAI()
    return {"messages": [model.invoke(state["messages"])]}

# 构建图
graph = StateGraph(AgentState)
graph.add_node("agent", agent_node)
graph.add_edge("__start__", "agent")
graph.add_edge("agent", END)
app = graph.compile()

# 调用
result = app.invoke({"messages": [{"role": "user", "content": "你好"}]})

多代理 Supervisor 模式

python
# Supervisor 协调多个专家代理
supervisor = StateGraph(AgentState)
supervisor.add_node("researcher", researcher_node)
supervisor.add_node("coder", coder_node)
supervisor.add_conditional_edges("supervisor", route_to_worker)
app = supervisor.compile()

适用场景自定义控制流、多代理协作、复杂业务逻辑

4. Deep Agent:create_deep_agent()(复杂工程任务)

Deep Agent 是基于 create_agent() 的增强版,专为复杂多步任务设计,自动包含 3 个高级中间件。

安装

bash
pip install deepagents

核心优势:自动 3 个中间件

Deep Agent 自动包含:
├── TodoListMiddleware     # 任务规划 (write_todos)
├── FilesystemMiddleware   # 文件系统内存 (ls/read/write/edit)
└── SubAgentMiddleware     # 子代理 (task)

基础用法

python
from deepagents import create_deep_agent
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool

@tool
def search_web(query: str) -> str:
    """网页搜索"""
    return f"搜索 '{query}' 的结果..."

model = ChatOpenAI(model="claude-3-5-sonnet-20240620")
deep_agent = create_deep_agent(model, tools=[search_web])

# 复杂任务示例
result = deep_agent.invoke({
    "messages": [{"role": "user", "content": "帮我做一个完整的网站规划"}]
})

Deep Agent 独有特性

A. 自动任务规划

用户:帮我做一个完整的网站
Deep Agent:
1. ✅ 先写 todo 列表:
   - 设计数据库 schema
   - 创建 API 端点
   - 写前端页面
   - 测试部署
   
2. 按 todo 逐个执行...

B. 文件系统内存(避免 Context Window 溢出)

python
# 自动获得 4 个文件工具
deep_agent.tools  # [ls, read_file, write_file, edit_file, ...]

# Agent 可以:
# /memories/api-design.md    # 长期记忆
# /short-term/todo.md        # 临时 todo
# /research/web-results.md   # 研究结果

C. 子代理系统

python
# 定义专家子代理
weather_expert = {
    "name": "天气专家",
    "description": "专业的天气查询专家",
    "system_prompt": "使用 get_weather 工具回答天气问题",
    "tools": [get_weather],
    "model": "gpt-4o-mini"
}

deep_agent = create_deep_agent(
    model,
    tools=[search_web],
    subagents=[weather_expert]  # 主代理智能委派
)

Deep Agent = LangChain Agent + 规划 + 文件内存 + 子代理

5. 三种方式详细对比

特性标准 Agent遗留 AgentLangGraphDeep Agent
推荐度⭐⭐⭐⭐⭐⭐(仅迁移)⭐⭐⭐⭐⭐⭐⭐⭐⭐(复杂任务)
复杂度简单中等中等
工具调用✅ + 文件系统
任务规划手动✅ 自动 todo
长期记忆基础基础自定义✅ 文件系统
子代理手动手动✅ 内置
中间件✅ 基础手动✅ 高级 3 个
适用场景通用迁移自定义复杂工程

6. 选择指南

┌─────────────────────────────┐
│ 简单工具调用(90% 场景)    │ → **create_agent()**
├─────────────────────────────┤
│ 复杂工程任务(规划+文件+子代)│ → **create_deep_agent()**
├─────────────────────────────┤
│ 完全自定义控制流            │ → **LangGraph**
└─────────────────────────────┘

结论

  1. 新项目首选create_agent() - 简单强大,覆盖 90% 场景
  2. 复杂工程任务create_deep_agent() - 自动规划+内存+子代理
  3. 完全自定义:LangGraph - 底层控制,无限可能
  4. 旧代码迁移@langchain/classic - 保持兼容

Deep Agent 是未来趋势,专门解决复杂多步任务,是标准 Agent 的"升级版"。

参考文档

掌握这三种方式,你就能应对 99% 的 Agent 开发需求!

基于 MIT 许可证发布。内容版权归作者所有。