Agent 开发实战 · 第 8 篇

Agent 的测试、安全、成本与上线

建立评测、安全场景、预算、监控、灰度和回滚门槛。

42 分钟上线实战

学完能做什么

你会为 Agent 建立分层测试、攻击与失败场景、成本预算、线上监控和分阶段发布方案,并用明确指标决定是否上线或回滚。

“演示成功一次”离上线很远

Agent 同时依赖模型、提示词、工具、数据、权限和外部服务。任何一层变化都可能改变结果。上线标准不能是“我试了几个问题感觉不错”,而要有可重复的评测和运行护栏。

建立分层测试金字塔

层级测什么是否访问真实外部服务
单元测试参数校验、权限、状态转换、幂等
合同测试模型和工具请求响应结构通常用模拟服务
场景评测一组真实任务的完成质量可使用受控测试环境
安全测试注入、越权、泄露、破坏性动作隔离环境
小流量运行延迟、成本、稳定性、人工反馈是,限制范围

确定性代码应尽量用传统断言。不要让另一个模型替代所有测试。

为任务建立评测集

评测集至少包含:

  • 常见正常任务;
  • 信息缺失,需要追问;
  • 没有证据,应该拒答;
  • 工具超时、返回错误或格式变化;
  • 相互冲突的材料;
  • 用户取消和重复请求;
  • 越权、提示注入和敏感数据诱导;
  • 成本或步骤超限。

每个案例定义输入、允许工具、关键检查点、可接受结果、禁止结果和最大预算。

yaml
id: support-missing-order-id
input: "帮我查一下昨天那笔订单"
expected:
  status: waiting_for_user
  must_ask_for: order_id
  forbidden_tools: [lookup_all_orders]
budget:
  model_calls: 2
  tool_calls: 0

结果评估拆成多个维度

不要只给一个模糊总分。分别衡量:

  • 任务是否真正完成;
  • 工具选择和参数是否正确;
  • 关键结论是否有证据;
  • 不确定时是否追问或拒绝;
  • 权限和确认是否被遵守;
  • 是否产生重复或不可逆副作用;
  • 延迟、调用次数和成本是否超标;
  • 用户是否需要大量返工。

自动检查结构和规则,人工抽检内容质量,高风险场景必须人工审查。

安全测试要主动制造坏输入

至少测试:

  1. 文档中包含要求忽略系统规则的文字;
  2. 工具返回伪造的下一步指令;
  3. 参数包含路径穿越、超长文本和非法枚举;
  4. 用户要求读取他人数据或绕过审批;
  5. 模型请求未注册工具;
  6. 写操作在网络超时后被重复提交;
  7. 日志、报错和监控是否泄露密钥;
  8. 权限在任务暂停期间被撤销。

测试环境使用假账号和假数据,不用真实客户资料验证攻击路径。

成本预算要在运行前和运行中生效

一次任务的成本不只有模型 Token:

text
总成本 = 模型输入输出 + 检索与重排 + 工具服务
       + 存储与日志 + 重试 + 人工审核

为任务设置硬限制:最大模型调用、工具调用、输入输出量、并发、总耗时和金额。达到软阈值时缩小检索或请求确认,达到硬阈值时安全结束。

成本日志关联到任务、用户、模型、工具和版本,才能找到异常增长原因。

可观测性围绕一次任务组织

核心指标包括:

  • 任务成功、失败、取消和等待确认比例;
  • 各状态与工具的延迟分布;
  • 每任务的模型调用、工具调用和费用;
  • 429、超时、权限拒绝和参数错误;
  • 触发步骤上限、重复检测和预算上限的次数;
  • 人工接管、修改和投诉比例。

使用贯穿模型和工具的任务 ID、步骤 ID 与调用 ID。监控面板只展示必要摘要,原始敏感输入单独受控。

分阶段上线

推荐顺序:

  1. 离线回放历史案例,不产生外部动作;
  2. 影子运行,与现有流程对比但不影响结果;
  3. 内部测试账号,只开放只读工具;
  4. 小比例真实流量,写操作仍需人工确认;
  5. 按指标逐步扩大,并保留快速停用开关。

每一阶段都写清进入条件、观察时间、停止条件和责任人。

回滚不是只换回旧代码

发布包应固定:代码版本、提示词版本、模型配置、工具定义、知识库索引版本和数据库迁移状态。回滚时考虑:

  • 新版本是否已产生不能撤销的外部动作;
  • 任务快照能否被旧版本读取;
  • 新旧索引和缓存是否兼容;
  • 正在等待确认的任务如何处理;
  • 已轮换的凭据是否还能安全恢复。

当风险指标异常时,优先禁用高风险工具或切到只读模式,不必等待完整回滚。

上线门槛示例

text
质量:关键任务成功率达到目标,且无证据回答低于阈值
安全:越权和绕过确认测试必须 100% 阻断
稳定:长尾延迟、超时和错误率在目标范围
成本:每任务成本和每日总预算有硬限制
运维:监控、告警、停用开关和恢复手册已演练
合规:数据范围、保留、删除和审计经过确认

指标应根据业务风险设定,不要复制别人的数字。

发布前演练

在隔离环境完成一次完整演练:

  1. 运行全部单元、合同、场景和安全测试;
  2. 模拟模型超时、工具 500、限流和数据库故障;
  3. 触发步骤与预算上限,确认任务安全结束;
  4. 模拟一次写入超时,验证幂等不会重复执行;
  5. 发布新版本,再回滚到前一版本;
  6. 撤销一个用户权限,恢复暂停任务并确认被阻断;
  7. 由不参与开发的人根据手册处理一次告警。

完成检查清单

  • 评测集覆盖正常、缺信息、无证据、失败和攻击场景。
  • 权限、确认、幂等和预算有确定性测试。
  • 线上指标能按任务、版本、模型和工具定位问题。
  • 发布分阶段进行,并有明确停止条件。
  • 高风险工具有独立停用开关和只读降级模式。
  • 回滚、权限撤销和故障恢复已经演练。

路线完成

现在你已经走完从 AI 基础、工具与知识库到 Agent 开发上线的完整路线。真正可靠的 Agent 不以“能调用多少工具”衡量,而以目标清楚、证据可查、权限受控、失败可恢复和结果可验收衡量。