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_agent | OpenAI 函数调用 |
create_react_agent | ReAct 代理(已弃用) |
create_sql_agent | SQL 数据库查询 |
create_structured_chat_agent | 结构化对话 |
create_json_agent | JSON 处理 |
适用场景:仅用于迁移旧代码,不推荐新项目。
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 | 遗留 Agent | LangGraph | Deep Agent |
|---|---|---|---|---|
| 推荐度 | ⭐⭐⭐⭐⭐ | ⭐(仅迁移) | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐(复杂任务) |
| 复杂度 | 简单 | 中等 | 高 | 中等 |
| 工具调用 | ✅ | ✅ | ✅ | ✅ + 文件系统 |
| 任务规划 | ❌ | ❌ | 手动 | ✅ 自动 todo |
| 长期记忆 | 基础 | 基础 | 自定义 | ✅ 文件系统 |
| 子代理 | 手动 | ❌ | 手动 | ✅ 内置 |
| 中间件 | ✅ 基础 | ❌ | 手动 | ✅ 高级 3 个 |
| 适用场景 | 通用 | 迁移 | 自定义 | 复杂工程 |
6. 选择指南
┌─────────────────────────────┐
│ 简单工具调用(90% 场景) │ → **create_agent()**
├─────────────────────────────┤
│ 复杂工程任务(规划+文件+子代)│ → **create_deep_agent()**
├─────────────────────────────┤
│ 完全自定义控制流 │ → **LangGraph**
└─────────────────────────────┘结论
- 新项目首选:
create_agent()- 简单强大,覆盖 90% 场景 - 复杂工程任务:
create_deep_agent()- 自动规划+内存+子代理 - 完全自定义:LangGraph - 底层控制,无限可能
- 旧代码迁移:
@langchain/classic- 保持兼容
Deep Agent 是未来趋势,专门解决复杂多步任务,是标准 Agent 的"升级版"。
参考文档
掌握这三种方式,你就能应对 99% 的 Agent 开发需求!