Agent 与 create_agent
一句话
Agent 是一个模型在循环中调用工具直到任务完成的系统,而 create_agent 是 LangChain 中用于构建 Agent 的高度可配置 harness。
什么时候翻这页
当你需要构建能够自主调用工具完成任务的智能体时,或者当你需要配置 Agent 的行为、添加中间件扩展功能时。
核心概念
- Agent: 一个模型在循环中调用工具直到任务完成的系统
- Harness: 围绕 Agent 循环的一切:模型、提示词、工具和任何塑造其行为的中间件
- create_agent: 高度可配置的 Agent 构建函数
- Middleware: 用于扩展 Agent 行为的组件,每个中间件处理一个关注点,在适当时机钩入 Agent 循环
- Tools: Agent 可以调用的函数或操作
- Model: Agent 使用的底层语言模型
- Retriever: 用于从知识库中检索相关信息
怎么做
创建基本 Agent
from langchain.agents import create_agent
agent = create_agent("openai:gpt-5.4", tools=tools)
配置核心组件
# 指定模型
agent = create_agent("openai:gpt-5.4", tools=tools)
# 设置系统提示
agent = create_agent(
"openai:gpt-5.4",
tools=tools,
system_prompt="You are a helpful assistant. Be concise and accurate.",
)
# 使用结构化输出
from pydantic import BaseModel
class Answer(BaseModel):
summary: str
confidence: float
agent = create_agent("openai:gpt-5.4", tools=tools, response_format=Answer)
# 指定名称
agent = create_agent("openai:gpt-5.4", tools=tools, name="research_assistant")
调用 Agent
from langchain_core.utils.uuid import uuid7
from langgraph.checkpoint.memory import InMemorySaver
agent = create_agent(
model="openai:gpt-5.4",
tools=[],
checkpointer=InMemorySaver(),
)
config = {"configurable": {"thread_id": str(uuid7())}}
# 初始调用
result = agent.invoke(
{"messages": [{"role": "user", "content": "What's the weather in San Francisco?"}]},
config=config,
)
# 后续对话(保持历史)
result = agent.invoke(
{"messages": [{"role": "user", "content": "What about tomorrow?"}]},
config=config,
)
流式处理
from langchain.messages import AIMessage, HumanMessage
for chunk in agent.stream({
"messages": [{"role": "user", "content": "Search for AI news and summarize the findings"}]
}, stream_mode="values"):
latest_message = chunk["messages"][-1]
if latest_message.content:
if isinstance(latest_message, HumanMessage):
print(f"User: {latest_message.content}")
elif isinstance(latest_message, AIMessage):
print(f"Agent: {latest_message.content}")
elif latest_message.tool_calls:
print(f"Calling tools: {[tc['name'] for tc in latest_message.tool_calls]}")
配置中间件
# 文件系统中间件
from deepagents.backends import StateBackend
from deepagents.middleware import FilesystemMiddleware
agent = create_agent(
model="anthropic:claude-sonnet-4-6",
tools=[search],
middleware=[FilesystemMiddleware(backend=StateBackend())],
)
# 上下文管理中间件
from deepagents.backends import StateBackend
from deepagents.middleware import FilesystemMiddleware, MemoryMiddleware, SkillsMiddleware, SummarizationMiddleware
backend = StateBackend()
model = "anthropic:claude-sonnet-4-6"
agent = create_agent(
model=model,
tools=[search],
middleware=[
FilesystemMiddleware(backend=backend),
SummarizationMiddleware(model=model, backend=backend),
MemoryMiddleware(backend=backend, sources=["./AGENTS.md"]),
SkillsMiddleware(backend=backend, sources=["./skills/"]),
],
)
# 规划和委托中间件
from deepagents.backends import StateBackend
from deepagents.middleware import FilesystemMiddleware
from deepagents.middleware.subagents import SubAgentMiddleware
from langchain.agents import create_agent
from langchain.agents.middleware import TodoListMiddleware
agent = create_agent(
model="openai:gpt-5.4",
tools=[search],
middleware=[
FilesystemMiddleware(backend=backend),
TodoListMiddleware(),
SubAgentMiddleware(
backend=backend,
subagents=[
{
"name": "researcher",
"description": "Searches and returns a structured summary.",
"system_prompt": "Use the search tool to research the question and summarize key points.",
"tools": [search],
"model": "anthropic:claude-sonnet-4-6",
"middleware": [],
}
],
),
],
)
# 容错中间件
from langchain.agents.middleware import ModelRetryMiddleware, ToolRetryMiddleware
agent = create_agent(
model="openai:gpt-5.4",
tools=[search],
middleware=[
ModelRetryMiddleware(max_retries=3),
ToolRetryMiddleware(max_retries=2),
],
)
# 护栏中间件
from langchain.agents.middleware import PIIMiddleware
agent = create_agent(
model="openai:gpt-5.4",
tools=[search],
middleware=[PIIMiddleware("email")],
)
# 转向中间件
from langchain.agents.middleware import HumanInTheLoopMiddleware
agent = create_agent(
model="openai:gpt-5.4",
tools=[search],
middleware=[HumanInTheLoopMiddleware(interrupt_on={"write_file": True})],
)
命令 / API 速查
create_agent(model, tools, system_prompt=None, response_format=None, name=None, middleware=None): 创建 Agentagent.invoke(messages, config=None, context=None): 调用 Agentagent.stream(messages, config=None, stream_mode="values"): 流式调用 AgentFilesystemMiddleware(backend): 文件系统中间件SummarizationMiddleware(model, backend): 摘要中间件MemoryMiddleware(backend, sources): 记忆中间件SkillsMiddleware(backend, sources): 技能中间件SubAgentMiddleware(backend, subagents): 子代理中间件ModelRetryMiddleware(max_retries): 模型重试中间件ToolRetryMiddleware(max_retries): 工具重试中间件PIIMiddleware(types): PII 中间件HumanInTheLoopMiddleware(interrupt_on): 人在循环中间件
与 LangGraph / RAG 手册的联系
- LangGraph 提供了 Agent 的底层运行时编排,而 LangChain 的 create_agent 是更高层次的封装
- RAG 可以作为 Agent 的工具使用,通过 retriever 增强 Agent 的知识获取能力
- LangGraph 的状态管理概念与 Agent 的 thread_id 和上下文管理有相似之处
初学者易错点
- 忘记配置 checkpointer 导致无法保持对话历史
- 没有正确传递 thread_id 导致不同对话之间历史混乱
- 中间件配置顺序不当导致行为不符合预期
- 工具函数定义不清晰导致 Agent 无法正确调用
- 系统提示词过于复杂或模糊导致 Agent 行为不一致
相关词条
- Tools: 工具定义和使用
- Models: 模型选择和配置
- Structured output: 结构化输出策略
- Middleware: 中间件概述和自定义
- Memory: 长期记忆管理
- Multi-agent: 多代理系统