Agent:让 AI 围绕目标执行任务
章节目录第 6 章 / 共 12 章
Agent 是 AI 学习路线的第六章。
前面几章已经分别解决了表达、结构化、工具、知识和评估问题。Prompt 让 AI 理解任务,Structured Output 让结果可解析,Tool Calling 让 AI 可以调用外部能力,RAG 让 AI 可以使用私有知识,Eval 让我们能判断效果好不好。到了第六章,我们要把这些能力组合起来,让 AI 围绕一个目标连续执行任务。
在简单问答里,用户问一次,AI 回答一次就够了。但真实项目里,很多任务需要多步完成。例如分析启动失败原因,要读配置、跑命令、看日志、定位错误、提出修复方案、再验证结果。Agent 的价值,就是让 AI 可以在目标驱动下持续规划、行动、观察和修正。
这一章要解决的问题是:
如何把模型、工具、记忆和执行循环组合起来,让 AI 能完成多步骤任务。
学完这一章,你应该能做到三件事:
- 设计一个基础 Agent 执行循环
- 让 Agent 按目标规划步骤、调用工具、观察结果并继续推进
- 为 Agent 增加失败恢复、人工确认和质量评估机制
1. Agent 是什么
Agent 可以理解成具备目标、工具和执行循环的 AI 程序。
普通 AI 问答通常是:
用户输入
↓
模型回答
Agent 的流程更像这样:
用户给出目标
↓
Agent 制定计划
↓
Agent 调用工具执行动作
↓
Agent 观察工具结果
↓
Agent 根据结果调整下一步
↓
重复执行,直到任务完成或需要人工确认
一个基础 Agent 通常包含:
- 目标
- 模型
- 工具
- 状态
- 执行循环
- 观察结果
- 失败处理
- 人工确认
- 最终输出
Agent 的核心特点,是可以围绕目标进行多步骤执行。
2. 为什么需要 Agent
很多真实任务无法通过一次回答完成。
常见例子:
- 分析项目启动失败原因
- 根据需求生成测试点并补充缺口问题
- 读取代码后生成接口文档
- 检查部署状态并定位异常服务
- 根据日志找出错误来源
- 自动整理目录中的文件
- 对一组接口执行巡检
- 生成方案、执行验证、输出报告
这些任务通常具备几个特点:
- 需要多次读取信息
- 需要调用多个工具
- 中间结果会影响下一步
- 可能出现失败和重试
- 关键操作需要人工确认
- 最终结果需要汇总和解释
Agent 可以把这些步骤串起来,让 AI 从单次回答升级为连续执行。
3. Agent 的基本组成
一个可用 Agent 通常包含这些模块:
- planner:负责规划任务步骤
- tools:负责执行外部动作
- memory/state:负责保存上下文和进度
- executor:负责调度执行
- observer:负责读取工具返回和环境变化
- reflector:负责检查结果并调整策略
- guardrails:负责权限、安全和风险控制
- evaluator:负责判断任务是否完成
可以用一个简化结构表示:
目标
↓
Planner 生成计划
↓
Executor 选择动作
↓
Tool 执行动作
↓
Observer 读取结果
↓
Reflector 判断是否继续
↓
完成 / 重试 / 请求人工确认
Agent 由模型、工具、状态和执行循环共同组成,是一套围绕任务执行的控制流程。
4. planning
planning 指的是让 Agent 先拆解任务。
好的计划能减少盲目调用工具,也能让用户理解 Agent 准备怎么做。
示例任务:
帮我分析这个 Node.js 项目为什么启动失败。
可能计划:
1. 查看 package.json,确认启动脚本。
2. 查看项目依赖和配置文件。
3. 执行启动命令,收集错误日志。
4. 根据日志定位相关文件。
5. 给出原因和修复建议。
6. 必要时执行验证命令。
planning 常见形式:
- 先列计划,再执行
- 边执行边规划下一步
- 根据工具结果动态调整计划
- 对高风险操作先请求确认
计划不需要过度复杂,但要能指导行动。
4.1 计划粒度
计划太粗,Agent 容易乱走。计划太细,会消耗过多上下文和时间。
合适的计划通常满足:
- 每一步都能执行
- 每一步都有明确目的
- 每一步能产生可观察结果
- 后续步骤可以根据结果调整
问题计划:
1. 解决问题。
更清楚的计划:
1. 读取启动脚本。
2. 运行启动命令复现错误。
3. 根据错误栈定位文件。
4. 修改或给出修复建议。
5. 运行验证命令。
5. action
action 指的是 Agent 执行的具体动作。
常见 action 包括:
- 调用文件读取工具
- 调用搜索工具
- 调用命令执行工具
- 调用数据库查询工具
- 调用接口请求工具
- 写入文件
- 生成报告
- 请求用户确认
action 要尽量小而明确。
示例:
{
"action": "read_file",
"arguments": {
"path": "package.json"
},
"reason": "需要确认项目启动脚本"
}
每次 action 最好记录:
- 为什么执行
- 调用了什么工具
- 参数是什么
- 结果是什么
- 是否成功
- 下一步依据是什么
这些记录后续可以用于调试、审计和 Eval。
6. observation
observation 指的是 Agent 获取执行结果。
工具调用后,Agent 需要观察结果,再决定下一步。
示例:
Action:运行 npm run dev
Observation:
Error: Cannot find module '@hono/node-server'
Agent 根据 observation 可以判断:
- 缺少依赖
- 需要查看 package.json
- 需要检查 lockfile
- 需要运行安装命令或给出修复建议
observation 要尽量保留事实。
建议区分:
- 工具原始输出
- Agent 的解释
- 下一步推断
示例:
观察到的事实:启动命令报错 Cannot find module '@hono/node-server'。
初步判断:项目缺少该依赖,或依赖没有安装成功。
下一步:检查 package.json 中是否声明该依赖。
事实和推断分开,能降低误判风险。
7. reflection
reflection 指的是 Agent 对当前结果进行反思和校验。
常见 reflection 问题:
- 当前步骤是否完成了预期目标
- 工具结果是否可信
- 是否需要补充信息
- 是否出现了新的风险
- 是否需要调整计划
- 是否可以结束任务
- 是否需要人工确认
示例:
当前计划是定位启动失败原因。
已经复现错误,并确认缺少依赖声明。
还需要检查项目是否使用 pnpm、npm 或 yarn,避免给出错误安装命令。
reflection 的作用,是防止 Agent 一直机械执行原计划。
7.1 什么时候需要 reflection
适合加入 reflection 的节点:
- 工具失败后
- 计划执行到一半时
- 出现多种可能原因时
- 准备修改文件前
- 准备执行危险操作前
- 准备输出最终结论前
reflection 不需要每一步都很长。关键是让 Agent 停下来检查方向。
8. retry
retry 指的是失败后的重试策略。
工具调用和多步骤任务都可能失败。
常见失败原因:
- 网络超时
- 文件不存在
- 参数错误
- 权限不足
- 命令执行失败
- 外部 API 限流
- 检索结果为空
- 模型选择了错误工具
retry 不能简单无限重试,需要有规则。
建议设计:
- 最大重试次数
- 可重试错误类型
- 不可重试错误类型
- 重试间隔
- 重试前参数修正
- 失败后用户提示
示例:
重试策略:
1. 网络超时最多重试 2 次。
2. 参数校验失败不自动重试,先修正参数。
3. 权限不足不重试,提示用户授权。
4. 删除、发布、付款类操作不自动重试。
重试的目标是恢复临时失败,同时避免扩大风险。
9. task loop
task loop 是 Agent 的执行循环。
一个简化 task loop 可以这样表示:
while 任务未完成:
观察当前状态
判断下一步动作
调用工具
读取结果
更新状态
检查是否完成
伪代码:
while (!done && stepCount < maxSteps) {
const nextAction = await model.planNextAction({
goal,
state,
availableTools,
});
if (nextAction.requiresConfirmation) {
await requestHumanConfirmation(nextAction);
}
const observation = await executeTool(nextAction);
state = updateState(state, nextAction, observation);
done = await evaluateDone(goal, state);
}
task loop 需要几个保护:
- 最大步数
- 最大执行时间
- 最大工具调用次数
- 失败次数上限
- 上下文长度控制
- 危险操作确认
- 最终完成条件
没有这些保护,Agent 容易陷入重复调用、成本失控或风险操作。
10. human-in-the-loop
human-in-the-loop 指的是在关键节点让人参与判断。
Agent 可以自动执行很多步骤,但有些动作需要人工确认。
适合人工确认的场景:
- 修改文件
- 删除数据
- 执行部署
- 重启服务
- 修改生产配置
- 发送通知
- 调用付款接口
- 批量处理用户数据
- 访问敏感信息
确认前应该展示:
- 当前目标
- 已完成步骤
- 将要执行的动作
- 具体参数
- 影响范围
- 风险说明
- 可回滚方式
示例:
当前目标:修复项目启动失败。
已确认原因:缺少 @hono/node-server 依赖。
准备执行:npm install @hono/node-server
影响范围:修改 package.json 和 lockfile。
风险说明:会改变依赖树。
请确认是否继续。
human-in-the-loop 能让 Agent 在效率和安全之间取得平衡。
11. 多步骤任务执行
Agent 最适合处理多步骤任务。
11.1 日志分析 Agent
任务:
分析服务启动失败原因。
执行流程:
1. 读取启动命令。
2. 执行启动命令或读取日志文件。
3. 提取关键错误。
4. 搜索相关配置或源码。
5. 判断可能原因。
6. 给出验证方法。
7. 输出修复建议。
关键能力:
- 文件读取
- 命令执行
- 错误提取
- 代码搜索
- 结论自检
11.2 代码审查 Agent
任务:
审查某次代码改动。
执行流程:
1. 获取 diff。
2. 识别改动文件和风险模块。
3. 阅读关键代码。
4. 检查空值、权限、边界、事务、并发和错误处理。
5. 检查测试覆盖。
6. 输出按严重程度排序的问题。
关键能力:
- diff 分析
- 代码阅读
- 风险识别
- 测试检查
- 结构化输出
11.3 接口测试 Agent
任务:
根据接口文档生成测试点,并检查实际代码是否一致。
执行流程:
1. 读取接口文档。
2. 读取路由和 DTO。
3. 对比字段、状态码、鉴权和错误码。
4. 生成正常、异常、边界测试点。
5. 标出文档和代码不一致之处。
6. 输出待确认问题。
关键能力:
- 文档读取
- 代码检索
- 结构化测试设计
- 差异分析
11.4 部署巡检 Agent
任务:
检查线上服务是否正常。
执行流程:
1. 检查服务进程。
2. 检查健康接口。
3. 检查错误日志。
4. 检查磁盘、内存和 CPU。
5. 检查最近部署记录。
6. 汇总当前状态和风险。
关键能力:
- 命令执行
- 日志读取
- 健康检查
- 指标汇总
- 风险报告
12. 失败恢复
Agent 必须考虑失败恢复。
常见失败场景:
- 工具不可用
- 命令超时
- 检索无结果
- 文件读取失败
- 权限不足
- 用户拒绝确认
- 中间判断错误
- 外部系统返回异常
失败恢复策略包括:
- 换一种工具尝试
- 缩小问题范围
- 请求用户补充信息
- 输出已确认事实和未完成部分
- 回滚已执行动作
- 停止危险流程
- 记录失败原因
示例:
已完成:
1. 找到启动脚本。
2. 运行命令并复现错误。
失败点:
读取 .env 文件时权限不足。
当前可以确认:
启动失败与 DATABASE_URL 缺失有关。
需要用户补充:
是否允许读取当前环境变量配置。
失败恢复的重点,是保留已获得的信息,并清楚说明卡在哪里。
13. Agent 状态管理
Agent 执行多步骤任务时,需要管理状态。
常见状态包括:
- 用户目标
- 当前计划
- 已执行步骤
- 工具调用结果
- 中间结论
- 失败次数
- 用户确认记录
- 任务完成条件
示例状态:
{
"goal": "分析项目启动失败原因",
"plan": ["查看 package.json", "运行启动命令", "分析错误日志"],
"completed_steps": ["查看 package.json"],
"observations": [
{
"tool": "read_file",
"summary": "启动命令为 npm run dev"
}
],
"next_step": "运行启动命令",
"failure_count": 0,
"done": false
}
状态可以放在内存、数据库、文件或工作流引擎中。任务越长,状态管理越重要。
14. Agent 的完成条件
Agent 需要知道什么时候结束。
常见完成条件:
- 已回答用户问题
- 已完成所有计划步骤
- 已达到明确验收标准
- 已生成最终报告
- 已运行验证命令并通过
- 已遇到不可继续的阻塞点
- 已达到最大步数或最大时间
示例:
完成条件:
1. 找到启动失败的直接错误。
2. 给出最可能根因。
3. 给出验证命令。
4. 如果能修改,则修复后运行验证。
5. 如果不能修改,则说明缺少的信息。
完成条件越清楚,Agent 越不容易无意义循环。
15. Agent 的安全边界
Agent 能连续调用工具,风险也更高。
需要重点控制:
- 文件写入
- 文件删除
- 数据库修改
- 生产环境命令
- 付款和扣费接口
- 消息发送
- 敏感数据读取
- 外部网络请求
- token 和密钥处理
常见安全策略:
- 工具白名单
- 参数校验
- 路径限制
- 只读默认模式
- 高风险动作确认
- 最大执行步数
- 最大成本预算
- 审计日志
- 权限分级
- 沙箱执行
Agent 的安全边界要靠程序保证,不能只靠模型自觉。
16. Agent Eval
Agent 需要单独评估。
常见评估指标:
- 任务完成率
- 平均步骤数
- 工具调用成功率
- 错误恢复率
- 人工确认触发准确率
- 危险操作误调用率
- 最终回答正确率
- 平均成本
- 平均延迟
示例 Eval 样例:
{
"id": "agent-debug-001",
"goal": "分析项目启动失败原因",
"expected_steps": ["读取 package.json", "运行启动命令", "分析错误日志"],
"expected_findings": ["缺少依赖 @hono/node-server"],
"forbidden_actions": ["删除文件", "修改生产配置"]
}
评估时要看最终结果,也要看中间步骤。
17. Agent Prompt 示例
基础 Agent Prompt:
你是一个项目排障 Agent。
目标:
帮助用户定位项目启动失败原因,并给出可验证的修复建议。
可用工具:
1. read_file:读取工作区文件。
2. search_files:搜索文件名或文本内容。
3. run_command:执行允许列表中的命令。
执行规则:
1. 先制定简短计划。
2. 每次只执行一个明确动作。
3. 工具返回后,先总结观察到的事实。
4. 根据事实决定下一步。
5. 修改文件、删除文件、安装依赖、执行部署前必须请求用户确认。
6. 如果信息不足,请说明缺少哪些信息。
7. 最终输出直接原因、证据、修复建议和验证方法。
安全规则:
1. 不要执行删除、上传、发布、付款类操作。
2. 不要读取工作区外文件。
3. 不要输出密钥、token 或隐私数据。
这个 Prompt 明确了目标、工具、执行规则、安全边界和最终输出。
18. 常见 Agent 问题
18.1 计划太空
问题表现:
- 计划只有“分析问题”“解决问题”
- 每一步没有可执行动作
- 工具调用缺少依据
处理方式:
- 要求每一步有明确动作
- 要求说明每一步目的
- 要求每一步产生可观察结果
18.2 工具调用过多
问题表现:
- 重复读取同一个文件
- 重复执行相同命令
- 不断搜索相似关键词
- 成本和耗时升高
处理方式:
- 设置最大步骤数
- 记录已执行动作
- 禁止重复无收益调用
- 每次调用前说明目的
18.3 不会停止
问题表现:
- 已经得到答案仍继续查找
- 反复追加无关检查
- 任务边界不断扩大
处理方式:
- 设置完成条件
- 设置最大执行时间
- 要求达到目标后输出结论
- 把可选优化放到后续建议
18.4 失败后乱重试
问题表现:
- 权限不足仍重复执行
- 参数错误仍重复调用
- 高风险操作失败后自动重试
处理方式:
- 区分可重试和不可重试错误
- 限制重试次数
- 重试前必须改变参数或策略
- 高风险操作禁止自动重试
18.5 跳过人工确认
问题表现:
- 直接修改文件
- 直接删除数据
- 直接执行部署
- 直接发送通知
处理方式:
- 在工具层强制确认
- 给高风险工具加权限控制
- 记录确认日志
- Eval 中检查确认触发准确率
19. Agent 实战练习
可以按下面顺序练习:
- 文件整理 Agent
- 日志分析 Agent
- 代码审查 Agent
- 接口测试 Agent
- 部署巡检 Agent
- 给 Agent 增加最大步骤数
- 给 Agent 增加工具调用日志
- 给 Agent 增加失败恢复
- 给高风险动作增加人工确认
- 给 Agent 设计 Eval 测试集
每个练习都可以检查三个问题:
- Agent 是否能完成目标
- Agent 是否能解释每一步依据
- Agent 是否在风险动作前请求确认
20. 阶段验收标准
学完这一章,可以用下面的问题检查自己:
- 我能不能说明 Agent 和单次问答的差异?
- 我能不能设计一个基础 task loop?
- 我能不能让 Agent 先规划再行动?
- 我能不能让 Agent 根据 observation 调整下一步?
- 我能不能设计 retry 规则?
- 我能不能设置完成条件,避免无限循环?
- 我能不能在危险操作前加入 human-in-the-loop?
- 我能不能保存 Agent 的执行状态?
- 我能不能处理工具失败和权限不足?
- 我能不能评估 Agent 的任务完成率和工具调用成功率?
如果这些问题大多数都能做到,说明 Agent 阶段已经基本合格。
21. 本章总结
Agent 的核心是围绕目标进行持续执行。
一套可用的 Agent 设计,建议至少包含:
- 明确目标
- planning
- action
- observation
- reflection
- retry
- task loop
- human-in-the-loop
- 多步骤任务执行
- 失败恢复
- 状态管理
- 完成条件
- 安全边界
- Agent Eval
Agent 是 AI 工程化路线中的执行能力升级。它把模型、工具、知识、状态和评估组合起来,让 AI 可以连续完成任务。
这一章的目标很明确:让 AI 能围绕一个目标推进多步骤任务,同时让每一步都有依据、有边界、可恢复、可评估。