AI Agent 开发实战:从原理到生产级智能体构建
从零构建AI智能体的完整指南:Agent架构设计、工具调用(Function Calling)、记忆系统、规划推理(Plan-and-Execute)、多Agent协作。包含LangChain/LangGraph/AutoGen实战案例。
从 Copilot 到 Agent 的范式转变
2025-2026 年,AI 行业最大的叙事变化是什么?不是模型变得更强了——虽然确实更强了——而是 AI 从”助手”变成了”代理”。
Copilot 模式:你告诉 AI 每一步做什么,AI 帮你执行。 Agent 模式:你告诉 AI 目标,AI 自己规划步骤、调用工具、处理异常,直到完成。
这个区别就像:
- Copilot 是副驾驶,帮你操作方向盘,但路线还是你定
- Agent 是自动驾驶,你说”去机场”,它自己规划路线、避开拥堵、找到停车位
我们团队在 2025 年下半年开始构建内部 Agent 系统,踩了不少坑。这篇文章把核心经验整理出来。
Agent 的核心能力
一个真正的 Agent 需要具备四项核心能力:
1. 推理与规划
Agent 需要理解复杂任务,并将其拆解为可执行的子任务。
比如”帮我做竞品分析”这个需求:
- 人类大脑自动拆解:确定竞品列表 → 收集信息 → 分析对比 → 输出报告
- Agent 也需要同样的能力,但它依赖 LLM 的推理来拆解
关键技术:
- ReAct:Reasoning + Acting,交替进行思考和行动
- Plan-and-Execute:先制定完整计划,再逐步执行
- Tree of Thoughts:探索多个方案路径,选最优的
2. 工具使用
Agent 不能只靠”脑子”,还要有”手”——调用外部工具。
LLM 生成 → 工具调用请求 → 执行工具 → 结果返回 → LLM 继续推理
常见的工具类型:
- 搜索工具:Google Search API、企业内部搜索
- 代码执行:Python REPL、Shell 命令
- API 调用:Jira 创建工单、Slack 发消息、数据库查询
- 文件操作:读写文件、生成报告
3. 记忆系统
人类有短期记忆和长期记忆,Agent 也需要:
- 工作记忆:当前对话上下文,知道刚才说了什么
- 短期记忆:当前会话的历史,用于连贯的多轮交互
- 长期记忆:跨会话的知识积累,用户偏好、历史决策
实现方式:
- 工作记忆 → 上下文窗口
- 短期记忆 → 摘要压缩 + 滑动窗口
- 长期记忆 → 向量数据库 + 结构化存储
4. 反思与自我修正
好的 Agent 不是一次性输出结果,而是:
- 生成初步结果
- 自我审查:结果是否符合要求?是否有明显错误?
- 如果不符合,修正后重新输出
- 必要时向用户请求澄清
我们称之为”慢思考”模式——相比快速生成,多花几秒钟做自我审查,质量提升显著。
技术架构:LangGraph 实战
我们选择了 LangGraph 作为 Agent 框架,原因是它的**有状态图(StateGraph)**抽象非常适合 Agent 的决策流程。
基础结构
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator
class AgentState(TypedDict):
messages: Annotated[list, operator.add]
next_step: str
tool_results: dict
# 创建图
workflow = StateGraph(AgentState)
# 添加节点
workflow.add_node("agent", agent_node) # LLM 推理
workflow.add_node("tools", tool_node) # 工具执行
workflow.add_node("summarize", summarize_node) # 结果汇总
# 添加边
workflow.set_entry_point("agent")
workflow.add_conditional_edges(
"agent",
should_continue, # 决策函数
{
"continue": "tools",
"end": "summarize"
}
)
workflow.add_edge("tools", "agent")
workflow.add_edge("summarize", END)
# 编译执行
app = workflow.compile()
result = app.invoke({"messages": [HumanMessage(content="帮我分析最近一周的系统错误日志")]})
核心节点设计
agent_node — 推理决策:
def agent_node(state: AgentState):
"""LLM 推理节点,决定下一步行动"""
response = llm_with_tools.invoke(state["messages"])
# 检查是否需要调用工具
if response.tool_calls:
return {
"messages": [response],
"next_step": "tools"
}
else:
return {
"messages": [response],
"next_step": "summarize"
}
tool_node — 工具执行:
def tool_node(state: AgentState):
"""执行工具调用"""
last_message = state["messages"][-1]
tool_results = []
for tool_call in last_message.tool_calls:
tool = tools_by_name[tool_call["name"]]
result = tool.invoke(tool_call["args"])
tool_results.append(
ToolMessage(content=str(result), tool_call_id=tool_call["id"])
)
return {"messages": tool_results}
条件路由
Agent 最核心的能力是动态决策——根据当前状态决定下一步:
def should_continue(state: AgentState):
"""决定是继续调用工具还是结束"""
last_message = state["messages"][-1]
# 如果 LLM 要求调用工具
if hasattr(last_message, "tool_calls") and last_message.tool_calls:
return "continue"
# 如果已经调用过工具且 LLM 不再要求
return "end"
多 Agent 协作
单个 Agent 能力有限,复杂场景需要多个 Agent 协作。我们总结了三种协作模式:
模式一:顺序流水线
数据采集 Agent → 分析 Agent → 报告生成 Agent
适合流程固定的场景。每个 Agent 专注于一个环节,输出是下一个的输入。
模式二:主管-工人模式
主管 Agent(分配任务、汇总结果)
/ | \
工人A 工人B 工人C
(搜索) (分析) (编码)
主管 Agent 理解用户需求,将子任务分配给不同的专家 Agent,最后汇总结果。这是 AutoGen 框架的核心模式。
模式三:辩论模式
Agent A 观点 ←→ Agent B 观点
↘ ↙
评判 Agent
多个 Agent 针对同一问题给出不同答案,通过辩论达成一致。适合需要严谨推理的场景。
多 Agent 实战:AutoGen 示例
from autogen import AssistantAgent, UserProxyAgent, GroupChat, GroupChatManager
# 创建专业 Agent
researcher = AssistantAgent(
name="研究员",
system_message="你是技术研究员,擅长收集和分析技术信息。",
llm_config={"config_list": [gpt4_config]}
)
coder = AssistantAgent(
name="程序员",
system_message="你是高级程序员,擅长编写高质量代码。",
llm_config={"config_list": [gpt4_config]}
)
reviewer = AssistantAgent(
name="审查员",
system_message="你是代码审查专家,找出代码中的问题和改进点。",
llm_config={"config_list": [gpt4_config]}
)
# 创建用户代理
user_proxy = UserProxyAgent(
name="用户",
human_input_mode="NEVER",
code_execution_config={"work_dir": "coding"}
)
# 创建群聊
group_chat = GroupChat(
agents=[user_proxy, researcher, coder, reviewer],
messages=[],
max_round=10
)
manager = GroupChatManager(groupchat=group_chat)
# 启动任务
user_proxy.initiate_chat(
manager,
message="设计并实现一个分布式ID生成器,要求高性能、趋势递增"
)
生产级 Agent 的关键挑战
挑战一:可控性
Agent 的自由度越高,不可预测性越大。你没法保证它不会:
- 调用错误的工具
- 陷入死循环
- 产生不安全的操作
我们的解决方案:
- 操作分级:读操作自动执行,写操作需要确认,危险操作(删除、执行命令)必须人工审批
- 预算控制:设置最大步数、最大 Token 消耗、最大执行时间
- 人工介入点:在关键决策点插入人工确认
class SafeAgent:
def execute_action(self, action):
if action.risk_level == "LOW":
return self._auto_execute(action)
elif action.risk_level == "MEDIUM":
return self._confirm_and_execute(action)
elif action.risk_level == "HIGH":
return self._require_approval(action)
挑战二:可靠性
LLM 有时会产生不符合预期的输出格式,导致 Agent 流程中断。
我们的解决方案:
- 结构化输出:使用 Function Calling 或 JSON Mode 强制格式
- 重试机制:输出解析失败时自动重试(附带错误信息)
- 降级策略:多次失败后降级为简单模式或转人工
def safe_invoke_with_retry(llm, messages, max_retries=3):
for attempt in range(max_retries):
try:
response = llm.invoke(messages)
return parse_output(response)
except ParseError as e:
if attempt == max_retries - 1:
raise
messages.append({
"role": "user",
"content": f"输出格式错误:{e}。请按照正确格式重新输出。"
})
挑战三:成本控制
Agent 可能在一个任务上消耗大量 Token,尤其是需要多轮工具调用的场景。
优化策略:
- 模型分级:简单推理用小模型(GPT-4o-mini),复杂推理用大模型(GPT-4o / Claude 3.5)
- 缓存利用:相同的系统提示和工具定义缓存起来
- 早停机制:达到满意结果就停止,不追求”完美”
- 并发控制:限制同时运行的 Agent 数量
挑战四:评估与监控
Agent 不像传统软件有明确的正确/错误边界。如何知道 Agent 做得好不好?
我们的评估体系:
| 维度 | 指标 | 工具 |
|---|---|---|
| 任务完成率 | 是否达到用户目标 | 人工评估 + LLM-as-Judge |
| 效率 | 步数、时间、Token 消耗 | LangSmith / 自建监控 |
| 安全性 | 是否执行了危险操作 | 审计日志 |
| 用户满意度 | 用户反馈评分 | 内嵌评价 |
我们的实践经验
经验一:从简单场景开始
不要一上来就做全自动的复杂 Agent。我们的路径是:
- 单一工具 + 单轮对话:比如”搜索 + 回答”的客服 Agent
- 多工具 + 固定流程:比如”分析日志 → 生成报告”的运维 Agent
- 多 Agent + 动态流程:比如”需求分析 → 方案设计 → 代码生成 → 审查”的研发 Agent
每个阶段跑稳定了再进入下一阶段。
经验二:工具定义是门艺术
工具的描述直接影响 Agent 的决策质量。描述要包含:
- 功能:这个工具做什么
- 场景:什么时候该用它
- 参数说明:每个参数的含义和约束
- 反例:什么情况下不应该用它
# 好的工具描述
{
"name": "search_knowledge_base",
"description": "在企业知识库中搜索技术文档。当用户询问公司内部的技术规范、架构设计、运维手册时使用。不要用于搜索外部信息或通用知识。",
"parameters": {
"query": "搜索关键词,建议使用技术术语而不是自然语言问题",
"max_results": "返回结果数量,默认5,最多20"
}
}
经验三:记忆管理要分层
不要把什么信息都塞进上下文窗口:
- 频繁变化的(当前对话状态)→ 上下文窗口
- 会话内不变的(用户身份、偏好)→ 变量注入
- 跨会话的(历史决策、知识积累)→ 外部存储
总结
AI Agent 是 2026 年最值得投入学习的技术方向之一。核心要点:
- Agent = LLM + 规划 + 工具 + 记忆 + 反思
- LangGraph 提供了优雅的状态图抽象,适合复杂 Agent 流程
- 多 Agent 协作是解决复杂问题的关键
- 生产落地要关注可控性、可靠性、成本和评估
- 从简单场景开始迭代,不要追求一步到位
未来的软件架构中,Agent 不是一个可选的附加组件,而是一种新的编程范式。