Appearance
2.3 Agent 设计模式
Agent 是能够自主执行多步骤任务、使用工具的 AI 程序。这一节介绍几个核心设计模式。
什么是 Agentic Loop(Agent 循环)
普通的 AI 对话是"你问一次,AI 答一次"。Agent 则是:
接收任务
↓
思考:接下来应该做什么?
↓
行动:调用工具或执行操作
↓
观察:看看结果如何
↓
再次思考:任务完成了吗?还需要做什么?
↓
(循环,直到任务完成)这个"思考-行动-观察"的循环就是 Agentic Loop,也叫 ReAct(Reasoning + Acting) 模式。
ReAct 模式
ReAct 是最基础的 Agent 模式,让 AI 交替进行"思考"和"行动":
用户: 帮我查一下北京今天的天气,然后告诉我适不适合户外活动
AI 思考: 我需要查天气。调用 get_weather 工具。
AI 行动: get_weather("北京")
工具结果: 气温 25°C,晴天,UV 指数 6
AI 思考: 天气不错,我现在可以给出建议了。
AI 回答: 北京今天晴天 25°C,非常适合户外活动,但要注意防晒。Planning(规划)模式
对于复杂任务,先让 AI 制定一个完整计划,然后再执行。
用户: 帮我分析我们的用户增长数据,写一份报告
步骤1(规划):
AI 输出完整计划:
1. 从数据库查询过去 3 个月的新用户数量
2. 按渠道分类统计
3. 计算环比增长率
4. 找出增长最快的渠道
5. 生成折线图
6. 撰写分析报告
步骤2(你确认计划)→ 步骤3(AI 执行)优点:你可以在执行前检查计划是否正确,避免 AI 理解偏差后做了大量无用功。
Multi-Agent(多 Agent 协作)
把复杂任务分给多个专门的 Agent,各自负责一部分,由一个 Orchestrator(协调者)统筹。
用户任务: 开发一个新功能
Orchestrator(总协调者)
├── Code Agent → 写代码
├── Review Agent → 代码审查
├── Test Agent → 写测试
└── Doc Agent → 写文档你已经在用的工具里:Claude Code 的 subagent 功能就是这个——主 Agent 把子任务委派给 Subagent 执行。
适合的场景:
- 任务可以并行执行
- 不同部分需要不同的专业能力
- 单个 Agent 上下文不够用
风险:
- 协调成本高
- 子 Agent 之间的信息传递可能丢失细节
- 调试更复杂
Handoff(移交)
一个 Agent 完成它的部分后,把任务和上下文移交给下一个 Agent。
Agent A(负责收集信息)
→ 完成信息收集,整理成结构化数据
→ 把数据和任务说明移交给 Agent B
Agent B(负责分析)
→ 接收 Agent A 的输出
→ 进行分析,输出报告关键:移交时要传递足够的上下文,让下一个 Agent 能直接开始工作,不需要重新理解整个任务。
Guardrails(护栏)
在 Agent 的输入和输出上加检查层,防止问题内容进入或危险操作被执行。
用户输入
↓
[输入 Guardrail] 检查:是否包含敏感信息?是否有 Prompt Injection?
↓
Agent 处理
↓
[输出 Guardrail] 检查:输出是否合规?是否泄露了不该泄露的信息?
↓
返回给用户常见的 Guardrail 实现:
- 用另一个 AI 模型来检查(便宜的模型就够)
- 规则检查(正则表达式、关键词过滤)
- 人工审核(高风险操作)
🛠️ 实战练习:写一个最小 ReAct Agent
基于 1.4 Tool Use 的循环,做一个能自主多步调用工具的 Agent。给它两个工具,让它回答"北京今天适不适合户外活动"——它需要先查天气,再据此判断:
javascript
// 复用 1.4 节的 client / MODEL / 工具调用循环
const tools = [
{
type: "function",
function: {
name: "get_weather",
description: "查询某个城市当前天气",
parameters: {
type: "object",
properties: { city: { type: "string" } },
required: ["city"]
}
}
}
]
function getWeather(city) {
// 模拟数据,真实项目接天气 API
return { city, temp: 25, condition: "晴", uv: 6 }
}
// Agent 循环:模型自己决定 何时调工具、何时给最终答案
// (把 1.4 节 chat() 里的 get_user 换成 get_weather 即可)
const answer = await chat("北京今天适不适合户外活动?")
console.log(answer)观察要点:
- 模型是不是先调用了
get_weather,拿到结果后才给建议?(这就是"思考-行动-观察"循环) - 打印每一轮的
messages,看历史是怎么一步步增长的。
进阶挑战:再加一个 get_air_quality 工具,问一个需要连续调用两个工具的问题(先查天气再查空气质量),观察 Agent 如何自主决定调用顺序。
📌 关键结论
- Agentic Loop(ReAct)是 Agent 的基本模式:思考-行动-观察循环
- 复杂任务先规划再执行,给自己机会在执行前纠错
- Multi-Agent 增加了并行能力,但也增加了复杂度,不是所有任务都需要
- Guardrails 是生产环境 Agent 的必备保险