跳到主要内容

Agent系统设计

核对日期:2026-05-13。

不稳定项:Agent SDK、工具调用协议、MCP 生态、浏览器/电脑操作能力、长期记忆方案和多 Agent 框架变化较快;生产项目必须以目标 SDK、模型能力和安全评测结果为准。

专题文件索引

本阶段已拆分为 5 个专题文件。README.md 仍保留完整阶段讲义和练习入口;专题文件用于深入学习、后续扩写和站点导航。

专题重点
01-agent-loop与控制流.mdAgent 与 Workflow 边界、最小 loop、停止条件、计划漂移
02-工具调用与权限模型.md工具 schema、权限分级、幂等性、审批、MCP 工具治理
03-状态记忆与任务恢复.md结构化状态、长期记忆、事实冲突、任务恢复、上下文压缩
04-HITL与失败处理.md人类在环、审批卡片、失败类型、降级、撤销和事故复盘
05-Agent轨迹评测.md轨迹 eval、工具选择评分、失败样例库、规则评分与 judge

生产闭环交叉引用

Agent 系统设计要和评测、安全、生产化一起读:

当前问题继续阅读
如何证明 Agent 轨迹可靠../10-评测体系/04-Agent轨迹评测.md
工具权限、scoped credential 和审批../11-安全与治理/04-工具权限审计与人类审批.md
Prompt injection、间接注入和工具诱导../11-安全与治理/02-Prompt注入与间接注入防护.md
Agent trace、成本和线上观测../12-LLMOps与生产化/04-可观测性与Trace.md
Agent 变更如何灰度、回滚和止损../12-LLMOps与生产化/05-灰度发布回滚与供应商治理.md

1. 阶段目标

本阶段目标是掌握 AI Agent 的工程设计方法。Agent 不是“更聪明的聊天机器人”,而是一个由模型、工具、状态、控制流、权限、评测和人类在环组成的执行系统。

学完本阶段,你应该能做到:

  • 区分普通 LLM 调用、Workflow、Agent 和多 Agent 系统。
  • 设计 Agent loop:观察、决策、工具调用、状态更新、终止和交接。
  • 为工具设计 schema、权限等级、错误处理、幂等性和审计字段。
  • 设计短期状态、长期记忆、任务日志和恢复机制。
  • 识别计划漂移、循环、工具误用、上下文污染和权限越界。
  • 设计人类在环:确认、审批、升级、复核和撤销。
  • 使用 trace 记录 Agent 轨迹,并为任务成功率、工具准确率、成本和失败原因建立评测。
  • 判断什么时候应该用固定 Workflow,什么时候才值得引入 Agent。

本阶段的核心产出是:

  • 一个只读 Agent 设计。
  • 一个受控写入 Agent 设计。
  • 一份工具 schema 和权限分级表。
  • 一份 Agent 轨迹评测 Rubric。

2. 学习前置条件

建议已完成:

  • 05-Transformer与大模型原理,理解模型生成和推理边界。
  • 06-Prompt与上下文工程,能组织上下文包和结构化输出。
  • 07-RAG与知识系统,理解检索、引用和权限过滤。
  • 08-AI应用工程,理解 streaming、异步任务、成本账本和可观测性。

不要求:

  • 一开始就使用复杂 Agent 框架。
  • 自研工具协议或 MCP 服务器。
  • 让 Agent 自动执行高风险写操作。

3. 核心知识地图

4. 详细讲义

4.1 什么是 Agent

工程上可以把 Agent 定义为:模型在一个受控循环中,根据目标、状态和环境反馈,动态选择工具、更新状态并推进任务的系统。

它至少包含:

  • 目标:用户要完成什么。
  • 状态:当前进展、已知事实、待办和约束。
  • 模型决策:下一步做什么。
  • 工具:搜索、读取、写入、执行、调用业务系统。
  • 观察:工具返回和环境反馈。
  • 控制流:循环、停止、重试、升级。
  • 权限:哪些动作允许,哪些需要审批。
  • 评测:任务是否真的成功。

如果一个系统只是固定调用 3 个步骤,它更像 Workflow;如果模型能根据观察结果动态选择下一步,它才更接近 Agent。

4.2 Agent 和 Workflow 的区别

维度WorkflowAgent
控制流代码预定义路径模型动态决定路径
步骤数量通常固定可能变化
可预测性较低
成本和延迟更可控更高且波动
适合任务流程稳定、规则明确开放、多步、难预先枚举
风险灵活性不足循环、漂移、越权、成本失控

经验判断:

  • 能用单次 LLM 调用解决,就不要做 Agent。
  • 能用固定 Workflow 解决,就不要做自主 Agent。
  • 只有当任务路径难以预定义,且工具反馈能帮助模型逐步推进时,Agent 才有必要。

4.3 常见 Agentic 模式

模式机制适用风险
Prompt chaining多个 LLM 调用串联可分解的固定任务延迟增加
Routing根据输入路由到不同处理器客服、分类、模型路由路由错导致后续全错
Parallelization并行处理再汇总多维审查、批量分析聚合标准不清
Orchestrator-workers中央模型拆任务给 worker复杂研究、代码修改子任务边界混乱
Evaluator-optimizer生成-评价-修复循环写作、代码、检索循环成本高
ReAct推理、行动、观察交替工具使用和搜索思考漂移、工具误用
Plan-and-Execute先计划再执行多步骤任务计划过早失效
Supervisor监督者调度多个 specialist多能力系统架构过度复杂

不要为了“看起来高级”上多 Agent。多 Agent 的主要价值是分离职责和并行,不是让多个模型互相聊天。

4.4 Agent Loop 的最小结构

一个只读 Agent loop 可以这样设计:

state = init(task)
for step in 1..max_steps:
decision = model.decide(state, tools)
if decision.type == "final":
return decision.answer
if !policy.allowed(decision.tool, decision.args):
return escalate("tool not allowed")
observation = tool.run(decision.args)
state = update_state(state, decision, observation)
if budget.exceeded() or state.stuck():
return escalate("needs human")

必须有:

  • max_steps:防止无限循环。
  • budget:控制 token、工具成本和时间。
  • policy.allowed:系统层权限,不交给模型。
  • state.stuck:识别重复行动。
  • trace:记录每一步。

4.5 工具设计:Agent-Computer Interface

工具不是随便暴露一个 API 给模型。工具定义就是 Agent 的“操作界面”。

好的工具 schema 包含:

  • 清晰名称。
  • 具体描述。
  • 参数类型和约束。
  • 示例输入。
  • 返回结构。
  • 错误码。
  • 权限级别。
  • 是否幂等。
  • 是否需要审批。
  • 是否会产生外部副作用。

示例:

{
"name": "create_refund_draft",
"description": "创建退款申请草稿,不会直接退款。必须由人工审批后才能提交。",
"permission": "write_draft",
"requires_approval": true,
"input_schema": {
"type": "object",
"required": ["order_id", "amount", "reason"],
"properties": {
"order_id": {"type": "string"},
"amount": {"type": "number", "minimum": 0},
"reason": {"type": "string", "maxLength": 200}
}
}
}

工具设计原则:

  • 参数越明确越好。
  • 写操作优先做成“草稿”或“申请单”。
  • 相似工具要用清晰命名区分。
  • 返回值要结构化,避免大段无关文本。
  • 失败要返回可行动错误,而不是只返回异常字符串。

4.6 工具权限分级

等级能力示例策略
L0无外部访问纯文本总结无需特殊审批
L1只读公开信息Web 搜索、公开文档读取记录来源
L2只读内部信息CRM 查询、代码库读取鉴权、最小权限、脱敏
L3创建草稿创建工单草稿、退款申请草稿人工确认
L4低风险写入打标签、更新非关键字段审计、可撤销
L5高风险写入付款、退款、删除、发邮件强审批、双人复核、回滚
L6执行代码/系统命令shell、浏览器、数据库写入沙箱、最小权限、人工批准

模型可以建议工具调用,但系统必须决定是否允许。

4.7 状态管理

Agent 状态不是聊天历史。状态应该是可读、可恢复、可验证的任务对象。

推荐状态字段:

字段说明
task_id任务 ID
goal当前目标
constraints用户和系统约束
facts已确认事实
open_questions未确认问题
plan当前计划
completed_steps已完成步骤
pending_actions待执行动作
tool_results关键工具返回摘要
approvals审批状态
errors错误和恢复记录
budgettoken、时间、工具调用预算

状态更新要遵循:

  • 新事实必须有来源。
  • 过期事实要标注。
  • 冲突事实不能静默覆盖。
  • 大段原始工具输出应摘要后入状态。
  • 关键状态变更写入 trace。

4.8 记忆设计

Agent 记忆分几类:

类型内容风险
短期记忆当前任务上下文上下文膨胀
长期用户记忆用户偏好、历史设置隐私和陈旧
项目记忆代码库约定、业务规则过时和冲突
操作记忆历史工具调用和结果敏感信息泄露
失败记忆失败案例和修复经验误泛化

记忆写入必须比读取更严格:

  • 明确写入条件。
  • 记录来源和时间。
  • 支持删除和过期。
  • 不保存敏感数据。
  • 用户偏好和事实分开。
  • 不把模型猜测写成记忆。

4.9 规划和计划漂移

计划是 Agent 对任务的临时路线,不是合同。

计划漂移常见表现:

  • 忘记原始目标。
  • 做无关子任务。
  • 重复搜索相同信息。
  • 工具结果不支持下一步却继续推进。
  • 修改计划但不解释原因。

缓解方式:

  • 每步显式对齐目标。
  • 状态中保留成功标准。
  • 最大步数和重复检测。
  • 关键节点让模型复述当前计划。
  • 对高风险步骤进入人工确认。
  • 用 trace 评测计划和行动是否一致。

4.10 人类在环

人类在环不是形式化弹窗,而是在系统不确定、高风险或缺权限时,把足够上下文交给人决策。

需要人类介入的情况:

  • 高风险写操作。
  • 证据冲突。
  • 预算超限。
  • 工具失败超过阈值。
  • 模型低置信度。
  • 涉及法律、财务、医疗、人事等敏感判断。
  • 用户明确要求人工确认。

审批界面必须展示:

  • Agent 想做什么。
  • 为什么做。
  • 使用了哪些证据。
  • 影响范围。
  • 可撤销方式。
  • 替代选项。
  • 审计记录。

只给“确认/取消”按钮是不够的。

4.11 单 Agent 与多 Agent

多 Agent 适合:

  • 子任务可并行。
  • 角色职责明确。
  • 每个子任务有独立验收标准。
  • 聚合器能处理冲突。
  • trace 能回放每个 Agent 的贡献。

不适合:

  • 任务本身很简单。
  • 只是想让多个模型互相讨论。
  • 没有预算和最大轮数。
  • 没有聚合标准。
  • 权限边界不清。

多 Agent 的工程难点不是“让它们说话”,而是任务分解、上下文隔离、结果合并、冲突处理和责任追踪。

4.12 MCP 和工具生态

MCP 是一种让模型应用连接外部工具、数据源和服务的协议思路。它的价值在于把工具暴露方式标准化,让客户端和工具服务器之间有更清晰的边界。

采用 MCP 或类似工具协议时要关注:

  • 工具发现是否可控。
  • 工具描述是否可信。
  • 权限是否按用户和任务授权。
  • 参数和返回是否可审计。
  • 服务器是否可能泄露敏感信息。
  • 工具调用是否有速率限制和预算。

不要把“能接 MCP”理解成“所有工具都能安全给 Agent 用”。协议解决连接问题,安全仍要系统设计。

4.13 Agent 失败条件

Agent 常见失败不是单点错误,而是多步复合错误。

失败类型表现预防
无限循环反复调用同一工具最大步数、重复检测
工具误用参数错、工具选错工具 schema 和 eval
计划漂移偏离目标目标对齐检查
上下文污染工具返回噪声影响决策摘要和过滤
越权操作调用无权限工具系统权限控制
成本失控多轮长上下文预算和中止策略
幻觉行动基于猜测执行证据要求和人工确认
错误累积前一步错导致后续全错中间校验和回滚

4.14 Agent 评测

Agent 评测不能只看最终回答。必须看轨迹。

核心指标:

  • 任务成功率。
  • 工具选择准确率。
  • 工具参数正确率。
  • 平均步骤数。
  • 平均成本。
  • 平均延迟。
  • 人类介入率。
  • 失败恢复率。
  • 越权拦截率。
  • 最终输出质量。

轨迹 Rubric 示例:

维度通过标准
目标保持每步行动都能解释如何服务目标
工具选择工具与子任务匹配
参数质量参数完整、合法、最小必要
证据使用关键结论有来源
安全边界高风险动作被拦截或审批
终止判断完成、失败或升级时机合理

5. 关键概念表

概念含义工程意义常见问题
Agent Loop观察、决策、行动、更新的循环支撑多步任务无限循环
Workflow代码预定义流程稳定可控灵活性不足
ToolAgent 可调用外部能力连接系统和环境越权、误操作
Tool Schema工具参数和返回定义降低误用描述模糊
State任务进展对象可恢复、可审计当成聊天历史
Memory跨步骤或跨任务信息个性化和连续性隐私、陈旧
Plan Drift计划偏离目标多步任务主要风险无目标检查
HITL人类在环控制高风险动作只做形式确认
TraceAgent 轨迹记录调试和评测只记录最终答案
Guardrail规则、权限和预算控制降低风险只写在 Prompt

6. 工程案例

6.1 只读代码库分析 Agent

目标:回答“这个功能在哪里实现,风险点是什么?”

工具:

  • 文件搜索。
  • 文件读取。
  • 代码符号搜索。
  • 测试结果读取。

边界:

  • 不允许写文件。
  • 不允许执行破坏性命令。
  • 输出必须引用文件路径和行号。

评测:

  • 是否定位正确文件。
  • 是否遗漏关键调用链。
  • 是否引用真实代码。
  • 是否提出可验证风险。

6.2 研究资料整理 Agent

目标:围绕主题收集资料并生成简报。

工具:

  • Web 搜索。
  • 网页读取。
  • 资料去重。
  • 引用管理。

边界:

  • 快速变化信息必须标注核对日期。
  • 不可访问 paywall 或私有资料。
  • 不能把未核实推测写成事实。

评测:

  • 来源权威性。
  • 引用覆盖。
  • 信息时效性。
  • 观点和事实分离。

6.3 工单辅助处理 Agent

目标:读取用户工单、查询订单状态、生成处理建议。

工具:

  • 工单读取。
  • 订单查询。
  • 知识库检索。
  • 创建处理草稿。

边界:

  • 只创建草稿,不直接发送。
  • 退款和赔付必须人工审批。
  • 日志脱敏。

评测:

  • 分类是否正确。
  • 建议是否符合政策。
  • 是否正确升级高风险工单。

6.4 受控退款申请 Agent

目标:根据用户投诉创建退款申请草稿。

工具:

  • 查询订单。
  • 查询退款政策。
  • 创建退款草稿。
  • 提交审批。

边界:

  • 不允许直接退款。
  • 退款金额必须由规则引擎校验。
  • 用户身份和订单归属必须由系统校验。

评测:

  • 是否正确识别退款资格。
  • 是否创建完整草稿。
  • 是否在证据不足时拒绝或升级。

6.5 数据分析 Agent

目标:根据业务问题查询数据并生成分析结论。

工具:

  • 指标字典读取。
  • SQL 草稿生成。
  • SQL 只读执行。
  • 图表草稿生成。

边界:

  • SQL 只能只读。
  • 大查询需要预算限制。
  • 结论必须包含查询条件和时间范围。

评测:

  • SQL 是否正确。
  • 指标口径是否一致。
  • 结论是否被数据支持。

7. 常见误区与反模式

反模式表现后果修正
一上来多 Agent简单任务拆很多角色成本高、难调试从单调用或 workflow 开始
高权限工具裸奔模型可直接退款、删除、发邮件事故不可控分级权限和审批
无最大步数Agent 一直搜索和尝试成本失控max steps 和预算
状态靠聊天历史历史越来越长遗忘和污染结构化状态
工具描述含糊参数靠模型猜调用失败schema、示例、错误码
不记录轨迹只保存最终答案无法复盘trace 每一步
人类审批太薄只显示“是否确认”人无法判断展示证据和影响
让模型判断权限Prompt 里写“不要越权”仍可能越权系统层鉴权
记忆无限写入什么都存隐私和过时写入策略和过期
工具返回全塞上下文大段噪声进入模型决策变差摘要、过滤、引用

8. 阶段练习

8.1 工具 schema 练习

为以下工具写 schema:

  • 搜索知识库。
  • 读取订单。
  • 创建工单草稿。
  • 查询代码文件。
  • 发送审批请求。

每个 schema 必须包含权限等级、是否幂等、错误码和示例输入。

8.2 只读 Agent Loop

写一个只读 Agent 伪代码,要求:

  • 最大 8 步。
  • 只允许搜索和读取。
  • 每步记录 trace。
  • 引用来源。
  • 找不到证据时拒答。

8.3 写操作审批设计

为“退款申请 Agent”设计审批流程:

  • 哪些信息进入审批卡片。
  • 谁能审批。
  • 审批后如何执行。
  • 如何撤销。
  • 审计日志记录什么。

8.4 失败轨迹分析

构造一个 Agent 失败轨迹,并标注:

  • 哪一步偏离目标。
  • 哪个工具调用错误。
  • 哪个状态被污染。
  • 哪个 guardrail 应该拦截。
  • 如何加入 eval 防止复发。

8.5 Agent vs Workflow 判断

列出 5 个业务场景,判断用单次 LLM、Workflow、Agent 还是多 Agent,并说明成本、延迟、风险和评测方式。

9. 项目任务

9.1 项目要求

完成两个 Agent 设计或最小实现:

  1. 只读 Agent:能搜索、读取、汇总资料,输出带引用结论。
  2. 受控写入 Agent:只能创建草稿或申请单,必须人工确认后才进入真实写入流程。

必须包含:

  • Agent 目标和边界。
  • 工具列表和 schema。
  • 权限分级。
  • 状态对象设计。
  • Agent loop 伪代码。
  • Trace 字段设计。
  • 人类在环流程。
  • 10 条以上 eval 样例。
  • 失败模式和防护策略。

9.2 设计文档模板

# Agent 系统设计文档

## 1. 业务目标
## 2. 为什么需要 Agent
## 3. Agent / Workflow 边界
## 4. 工具清单与权限
## 5. 状态和记忆设计
## 6. Agent Loop
## 7. 人类在环
## 8. Trace 与日志
## 9. 评测集和评分标准
## 10. 失败模式与降级
## 11. 安全和合规边界

9.3 评分标准

维度分值标准
场景判断15能解释为什么需要 Agent,而不是普通 Workflow
工具设计20schema 清晰,权限、错误、幂等完整
状态设计15状态可恢复、可审计、不过度依赖聊天历史
控制流20有最大步数、预算、停止和升级条件
人类在环15高风险动作展示证据、影响和可撤销策略
评测与安全15有轨迹 eval、失败模式和 guardrail

10. 验收题

  1. Agent 和 Workflow 的核心区别是什么?
  2. 为什么很多场景不应该一开始就做 Agent?
  3. 一个 Agent loop 至少包含哪些步骤?
  4. 工具 schema 为什么比普通 API 文档更重要?
  5. 工具权限应该如何分级?
  6. Agent 状态和聊天历史有什么区别?
  7. 什么是计划漂移,如何发现?
  8. 人类在环审批卡片应该展示哪些信息?
  9. 多 Agent 什么时候值得引入,什么时候是反模式?
  10. Agent 评测为什么必须看轨迹而不是只看最终答案?

11. 延伸阅读

官方与权威资料

建议阅读方式

  • 先读 Anthropic 的 agentic patterns,理解什么时候不要用 Agent。
  • 再读 OpenAI Agents SDK 和 LangGraph,理解工具、状态和编排落到工程里的方式。
  • 最后读 MCP,把工具连接和权限边界放进系统设计,而不是只看 demo。

12. 本阶段总结

Agent 的价值不在于“更像人”,而在于能在受控边界内根据环境反馈推进多步任务。它的核心不是神秘智能,而是控制流、工具接口、状态管理、权限、人类在环和轨迹评测。

你应该形成一个判断:Agent 越自主,系统越要确定。模型可以负责判断下一步,但系统必须负责权限、预算、审计、终止、回滚和评测。

下一阶段进入评测体系。你会学习如何证明一个 LLM、RAG 或 Agent 系统真的可靠,而不是只靠几个好看的 demo。