Part 5:Agent智能体架构 - AI不仅能回答,还能"主动完成任务"
学习目标:理解Agent与普通聊天机器人的本质区别,掌握Planning/Memory/Tool/Reflection四大核心组件,能开发具备"规划-执行-反思"能力的实用Agent
一、Agent vs Bot:本质区别是什么?
1.1 一个生动的比喻
Bot(聊天机器人):
用户:"北京天气如何?"
Bot:"北京今天晴天,22度。" ← 单轮问答,结束
Agent(智能体):
用户:"帮我规划一个周末北京三日游"
Agent:
1. 规划(Planning):拆解任务
- 订机票/酒店
- 安排景点
- 控制预算
↓
2. 执行(Tool Use):
- 调用天气API:"周末北京天气?"
- 调用酒店API:"王府井附近酒店价格?"
- 调用地图API:"故宫到颐和园距离?"
↓
3. 反思(Reflection):
- "预算3000够吗?" → 计算总费用
- "景点时间冲突?" → 调整行程
↓
4. 输出:
"行程已规划好,总预算2800元,包含..."
核心差异:
| 维度 | Bot(普通对话) | Agent(智能体) |
|---|---|---|
| 主动性 | 被动响应(你问→我答) | 主动达成(你给目标→我拆解→执行) |
| 任务复杂度 | 单轮/简单对话 | 多步骤、需要工具 |
| 记忆 | 短期(对话历史) | 长期(用户偏好、历史数据) |
| 工具 | 不能用工具 | 能调用API/代码/外部系统 |
| 循环 | 一次交互结束 | 规划→执行→反思→迭代 |
类比:
- Bot = 知识库查询器(你问,它从记忆里找答案)
- Agent = 项目经理 + 执行团队(你给目标,它能拆解、协调资源、完成任务)
1.2 Agent的三要素
Agent = LLM(大脑) + 规划(思考) + 工具(手脚) + 记忆(经验)
缺一不可:
- 只有LLM → 只是ChatGPT,不能行动
- 无规划 → 想到哪做到哪,效率低
- 无工具 → 只能纯聊天,不能联网/查数据/操作软件
- 无记忆 → 每次都是"新青年",记不住用户偏好
二、四大核心组件详解
2.1 Planning(规划能力):先想清楚再动手
问题:用户说"帮我订个周末去上海的行程",AI直接订票?
- 不行!需要先拆解:什么时候?预算?偏好?几个人?
规划的核心:大目标 → 可执行子任务
场景1:旅行规划
目标:周末上海三日游
↓ 拆解
子任务1:确定出发/返回时间(周五晚 vs 周六早)
子任务2:确定预算(经济/舒适/豪华)
子任务3:查询往返机票/火车票
子任务4:查询酒店(位置、价格)
子任务5:安排景点日程(时间不冲突)
子任务6:汇总总费用,生成行程单
场景2:自动化周报
目标:自动生成本周工作周报
↓ 拆解
子任务1:从日历读取本周会议
子任务2:从GitLab拉取代码提交记录
子任务3:从邮箱提取关键邮件
子任务4:从JIRA获取任务进度
子任务5:整合信息,生成结构化文本
subtask6:发送给主管审批
策略选择:
| 策略 | 适合场景 | 优点 | 缺点 |
|---|---|---|---|
| 单步规划 | 简单任务,3-5步 | 快、简单 | 无法处理复杂依赖 |
| 树搜索 | 复杂决策,多路径 | 能找到最优解 | 慢,需要评估函数 |
| 动态调整 | 环境变化,需适应 | 灵活,能处理异常 | 实现复杂,需反馈闭环 |
实现技巧:
- 用JSON Schema约束输出格式:
{ "plan": [ {"step": 1, "description": "查询机票", "tool": "flight_api"}, {"step": 2, "description": "查询酒店", "tool": "hotel_api"} ] } - 让AI输出步骤 + 预期工具,便于执行
2.2 Memory(记忆系统):记住上下文和个人偏好
为什么需要记忆?
- 用户多次交互,Agent应该"认识"用户
- 长期偏好:"我记得你上次说喜欢靠窗座位"
- 历史数据:"你上周咨询过A产品,这次要看B吗?"
记忆类型:
| 类型 | 说明 | 存储方式 | 例子 |
|---|---|---|---|
| 短期记忆 | 当前对话的上下文 | 滑动窗口/对话历史 | "刚才你说预算5000" |
| 长期记忆 | 用户历史、偏好、事实 | 向量数据库/KV存储 | "用户A喜欢安静酒店" |
| 工作记忆 | 当前任务的中间状态 | 临时变量/状态机 | "正在执行Step 3/5" |
短期记忆管理:
方案A:滑动窗口
对话历史保留最近10轮
超过10轮,丢弃最早的
↓
简单,但会丢失重要信息
方案B:关键信息提取(推荐)
每3轮对话,用AI总结关键信息:
"用户想规划北京游,预算3000,喜欢历史景点,上次提到怕热"
↓
压缩存储,只保留精华
长期记忆设计:
存储结构:
{
"user_id": "123",
"preferences": ["喜欢安静", "常出行时间是周末", "偏好经济型酒店"],
"history": [
{"date": "2024-01", "query": "上海旅游咨询"},
{"date": "2024-02", "query": "订酒店"}
]
}
检索方式:
- 向量检索:语义搜索"用户喜欢什么?"
- 关键词检索:精确查找历史订单号
- 时间过滤:最近3个月的数据
记忆更新策略:
- 新信息 vs 旧信息冲突 → 以最新为准(或按置信度)
- 记忆过期 → 时间衰减权重(久了就忘)
2.3 Tool Use(工具调用):会用手和脚
核心理念:LLM不能干所有事(不能实时查天气、不能订票、不能操作软件),需要外部工具。
工具定义:
{
"name": "get_weather",
"description": "查询指定城市未来3天的天气预报",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称"},
"date": {"type": "string", "description": "日期,格式YYYY-MM-DD"}
},
"required": ["city"]
}
}
调用流程:
用户问:"明天北京天气?"
↓
LLM分析:需要调用天气工具
↓
生成调用参数(JSON):
{
"tool": "get_weather",
"arguments": {"city": "北京", "date": "2024-03-20"}
}
↓
系统执行工具:
调用 weather_api("北京", "2024-03-20")
返回 {"temp": 22, "condition": "晴"}
↓
结果喂给LLM
LLM生成自然语言回答:
"明天北京晴天,22度,适宜出行。"
常见工具类型:
| 工具类别 | 例子 | 实现方式 |
|---|---|---|
| 搜索 | 网络搜索、知识库检索 | API调用(Google/百度/自建) |
| 计算 | 数学计算、单位转换 | Python代码执行 |
| 日历 | 查询日程、创建会议 | Google Calendar API |
| 邮件 | 发送邮件、读取收件箱 | SMTP/IMAP |
| 数据库 | 查询订单、用户信息 | SQL执行 |
| 业务系统 | CRM、ERP、内部系统 | REST API/GraphQL |
工具设计的魔鬼细节:
- 参数校验:必填字段缺失 → AI重新生成(不要抛出异常)
- 错误处理:API超时、返回错误码 → AI重试 or 换工具
- 权限控制:敏感操作(删数据)需要用户确认
- 可解释性:记录"AI为什么调用某工具",便于调试
2.4 Reflection(反思能力):会复盘优化
场景:Agent生成一份旅游方案,但总预算超支了怎么办?
反思机制:
方案A:自我检查
Agent内部流程:
1. 生成初步方案(机票2000+酒店1500+景点500=4000元)
2. 反思:"预算3000,超了1000,不合理"
3. 修正:降低酒店档次 → 酒店改为1000元
4. 输出最终方案(总3000元)
方案B:多Agent辩论
Agent A(乐观派):"方案可行!增加预算到5000"
Agent B(谨慎派):"超预算了,必须压缩"
↓ 投票
最终采纳 Agent B 的方案(多数决)
方案C:外部反馈
方案生成 → 提交给用户
用户:"酒店太贵了,换便宜点的"
Agent:收到反馈,重新规划酒店部分
错误恢复策略:
| 失败类型 | 恢复策略 |
|---|---|
| 工具调用失败(API超时) | 重试1-2次,或换备用工具 |
| 检索无结果 | 扩大检索范围(K值调大),或换搜索词 |
| 用户否定 | 道歉 + 询问具体问题 + 重新执行 |
| 生成内容违规 | 检测到后立即停止,重新Clean Prompt |
三、开发框架对比:装修工具包选哪个?
3.1 四大主流框架
| 框架 | 类比 | 核心优势 | 适合场景 | 学习曲线 |
|---|---|---|---|---|
| LangChain | 全能工具箱 | 组件全、生态大、文档多 | 系统学习、复杂应用 | ⭐⭐⭐⭐(陡) |
| LlamaIndex | 专业收纳系统 | RAG强、API简洁 | 专注知识库问答 | ⭐⭐⭐(中) |
| LangGraph | 电路设计器 | 可视化编排、支持循环 | 复杂工作流、多Agent | ⭐⭐⭐⭐(陡) |
| 低代码平台 | 精装样板间 | 5分钟上线、拖拽式 | 快速验证、非技术 | ⭐(平易) |
3.2 详细对比
LangChain —— 最流行,组件丰富
优点:
- ✅ Chain/Agent/Tool/RAG全覆盖
- ✅ 社区大,问题容易找到答案
- ✅ 集成100+模型和工具
缺点:
- ❌ 抽象层多,初学者晕
- ❌ 文档虽然多但不系统
- ❌ API有时变动大
适合:
- 想系统学习Agent开发的
- 需要高度定制的复杂项目
代码示例(ReAct Agent):
from langchain.agents import AgentExecutor, create_react_agent
from langchain import hub
# 1. 定义工具
tools = [get_weather, search_web, calculate]
# 2. 加载Prompt模板(ReAct)
prompt = hub.pull("hwchase17/react")
# 3. 创建Agent
agent = create_react_agent(llm, tools, prompt)
# 4. 执行
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
result = agent_executor.invoke({"input": "明天北京天气,然后打包行李清单"})
LlamaIndex —— RAG专项冠军
优点:
- ✅ 数据连接器丰富(PDF、DB、API)
- ✅ 检索优化强(混合检索、 reranker)
- ✅ 使用简单,学习曲线平缓
缺点:
- ❌ Agent能力弱(不如LangChain灵活)
- ❌ 社区相对小
适合:
- 主要做知识库问答
- 对RAG效果要求极高
代码示例(RAG):
from llama_index import VectorStoreIndex, SimpleDirectoryReader
# 加载文档
documents = SimpleDirectoryReader("./data").load_data()
# 创建索引(自动Embedding+存储)
index = VectorStoreIndex.from_documents(documents)
# 查询
query_engine = index.as_query_engine()
response = query_engine.query("差旅报销标准?")
LangGraph —— 状态机/工作流编排(🌟2026重点)
核心:把Agent流程画成图(节点+边),支持循环、条件分支、并行。
优势:
- ✅ 复杂流程可视化(画个图就能实现)
- ✅ 支持循环(反思 → 重新规划)
- ✅ 状态持久化(中断后可恢复)
适合:
- 多步骤、有条件的复杂Agent
- 需要人机协作(人类审批节点)
可视化示例:
[开始] → [规划] → [执行工具] → [检查结果]
↓
[OK?] → No → [反思修正] → [执行工具]
↓ Yes
[生成回答] → [结束]
代码示例:
from langgraph.graph import StateGraph, END
# 定义状态
class AgentState(TypedDict):
task: str
plan: list
current_step: int
result: str
# 定义节点函数
def plan_node(state: AgentState):
return {"plan": llm.generate_plan(state["task"])}
def execute_node(state: AgentState):
return {"result": tool_call(state["plan"][state["current_step"]])}
# 建图
workflow = StateGraph(AgentState)
workflow.add_node("plan", plan_node)
workflow.add_node("execute", execute_node)
workflow.set_entry_point("plan")
workflow.add_edge("plan", "execute")
workflow.add_edge("execute", END)
app = workflow.compile()
低代码平台(Coze/Dify) —— 快速验证
优点:
- ✅ 拖拽式,5分钟上线
- ✅ 内置插件市场(天气、搜索等)
- ✅ 可视化调试
缺点:
- ❌ 深度定制难
- ❌ 受平台限制(不能自定义复杂逻辑)
- ❌ 迁移成本高(绑定平台)
适合:
- 快速Demo验证想法
- 非技术背景但想用AI
- 简单客服机器人
四、多Agent协作:团队作战
4.1 为什么需要多Agent?
单Agent的局限:
- 能力有限,一个Agent做所有事 → 角色混乱
- 复杂项目需要分工(研究、分析、写作、审核)
类比:
- 单Agent = 一个人完成整个项目
- 多Agent = 项目组(研究员→分析师→写手→审核)
4.2 协作模式
模式1:流水线(Pipeline)
用户需求
↓
Agent 1(研究员):搜索资料,整理要点
↓ 传给 Agent 2
Agent 2(分析师):分析数据,提炼洞察
↓ 传给 Agent 3
Agent 3(写手):撰写文章
↓ 传给 Agent 4
Agent 4(审核):检查错误,润色
↓
最终输出
优点:
- ✅ 职责清晰,质量可控
- ✅ 容易调试(定位哪个Agent出问题)
- ✅ 可并行流水线化
缺点:
- ❌ 传递延迟(串行)
- ❌ 前Agent错误会传递到后Agent
适用:标准化流程,如内容生产、数据分析报告
模式2:辩论(Debate)
问题:是否应该投资A项目?
↓
Agent 1(乐观派):列举投资理由,市场潜力...
Agent 2(谨慎派):列举风险,现金流压力...
↓
二者互相辩驳(多轮)
↓
Agent 3(裁判):综合双方观点,给出最终决策
优点:
- ✅ 减少偏见(单一视角局限)
- ✅ 多角度思考,质量高
缺点:
- ❌ 速度慢(多轮辩论)
- ❌ 成本高(多次LLM调用)
适用:决策类任务、风险评估
模式3:动态协作(Manager-Worker)
Agent Manager(项目经理):
1. 接收用户需求
2. 拆解任务,分发给合适的Worker
3. 监控Worker进度
4. 整合结果
Agent Worker 1(搜索专家)
Agent Worker 2(写作专家)
Agent Worker 3(代码专家)
...
优点:
- ✅ 动态调度,负载均衡
- ✅ 故障转移(某个Worker挂了换一个)
缺点:
- ❌ Manager设计复杂(需要评估Worker能力)
- ❌ 调试困难(调度逻辑隐藏深)
适用:复杂客服场景、大规模任务分发
五、关键基础设施:MCP协议
5.1 问题:工具不统一
- LangChain工具用自己格式
- LlamaIndex工具用另一种格式
- 每个框架都有自己的"工具定义语言"
痛点:写一个工具,想在不同框架复用 → 得重写适配!
5.2 MCP(Model Context Protocol)—— 统一的工具通信标准
类比:USB接口
- 电脑(LLM应用)通过USB接口
- 可以插U盘、键盘、鼠标(各种工具)
- 无需关心U盘内部怎么工作
MCP三要素:
| Elements | 是什么 | 例子 |
|---|---|---|
| Resources | 只读数据源(文件、数据库记录) | 读取用户档案、查询知识库 |
| Tools | 可执行的操作(写文件、调用API) | 发送邮件、创建订单 |
| Prompts | 可复用的Prompt模板(带参数) | "写一篇关于{topic}的文章" |
工作流程:
Client(IDE/Agent框架) ↔ MCP协议(JSON-RPC) ↔ Server(工具提供方)
│ │
"我要调用get_weather" 执行天气API
│ │
"结果:北京22度" 返回数据
优势:
- ✅ 解耦:LLM应用只需对接MCP标准,不用了解每个工具实现
- ✅ 复用:一个工具(如邮件发送)可以被多个应用共享
- ✅ 安全:工具在独立沙箱运行,权限可控
应用场景:
- IDE插件(Claude Code支持MCP)
- 多个Agent共享工具池
- 企业内部工具标准化
详细内容:见Part 6
六、实践任务
任务1:用Coze快速搭建客服Agent(拖拽式体验)
步骤:
- 注册Coze(https://coze.com)
- 创建Bot,设置角色(客服)、指令
- 添加插件:天气、搜索、知识库
- 配置多轮对话流程
- 测试并优化Prompt
交付物:一个可用的客服Agent链接 + 设计文档
任务2:用LangChain实现ReAct框架的迷你Agent
功能:
- 工具:计算器、搜索(可以用DuckDuckGo免费API)
- 任务:回答需要计算+搜索的问题(如"微软市值多少?相当于几个苹果?")
代码要求:
# 至少包含:
# 1. 工具定义(Tool对象)
# 2. ReAct Prompt模板
# 3. Agent循环(Thought→Action→Observation)
# 4. 结果解析
任务3:设计"双Agent辩论"的决策辅助模板
场景:是否要上线一个新功能?
两个Agent:
- Agent Pro(支持派):列举收益、市场机会
- Agent Con(谨慎派):列举技术风险、成本
模板要求:
- 两个Agent的Role Prompt设计
- 辩论多轮规则(各自反驳对方论点)
- 裁判Agent的决策逻辑
- 输出格式(结构化,含"支持/反对/建议")
交付:完整的Prompt模板 + 示例对话(模拟)
✅ 学习检查点
完成Part 5后,您应该能:
-
解释Agent与普通Bot的核心差异
- 主动规划 vs 被动响应
- 工具调用 vs 纯聊天
- 多轮迭代 vs 单轮结束
-
描述四大核心组件(Planning/Memory/Tool/Reflection)
- 每个组件解决什么问题?
- 至少说出2种实现方案
-
根据任务复杂度选择开发框架
- 快速验证 → Coze/Dify
- 知识库为主 → LlamaIndex
- 复杂Agent → LangChain/LangGraph
- 判断依据:任务复杂度、团队技术栈、时间预算
-
设计多Agent协作模式
- 流水线 vs 辩论 vs 动态调度
- 根据场景选合适模式
- 能画出协作流程图
-
理解MCP协议的价值
- 为什么需要"解耦"?
- MCP三要素(Resources/Tools/Prompts)的区别
- 如何设计一个可复用的MCP工具
📚 延伸阅读
- ReAct论文:"ReAct: Synergizing Reasoning and Acting in Language Models"
- LangChain文档:https://python.langchain.com/docs/tutorials/(官方教程)
- LangGraph官方:https://langchain-ai.github.io/langgraph/
- AutoGPT:第一个出圈的Agent项目(GitHub)
- MCP规范:https://github.com/context-labs/mcp(GitHub)
- OpenAI Assistant API:官方Agent托管服务
Part 5 结束!
Agent让AI从"回答问题"进化到"完成任务",是当前AI应用最热门的架构。
下一部分 Part 6:MCP协议与Skills系统 —— 如何设计标准化的工具系统,让AI能统一调用各种外部能力。学习节奏:Part 5建议2周,必须动手实现至少一个ReAct Agent(哪怕是最简版的聊天+搜索),理解"循环"的本质。
系列进度:
- ✅ Part 1:Transformer原理大白话
- ✅ Part 2:分词与词向量详解
- ✅ Part 3:提示词工程实战
- ✅ Part 4:RAG检索增强生成
- ✅ Part 5:Agent智能体架构(当前)
- 🔄 Part 6:MCP协议与Skills系统
- 🔄 Part 7:微调技术通俗解析
- 🔄 Part 8:推理优化与工程部署
- 🔄 Part 9:综合项目实战与职业发展
关键洞察:Part 1-3是基础(原理层),Part 4-5是核心应用层(企业80%需求),Part 6-8是工程化层(上线部署优化),Part 9是综合与职业。学习时可按此结构自检"我缺哪一块"?
评论区