跳到主要内容

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。