跳到主要内容
版本:Next

Agent 评测与安全

Agent 的非确定性、多步性与环境依赖,使传统"单测 + 输出比对"的方法大面积失效。评测和安全要回答的是同一个问题的两面:凭什么相信这个系统,出了问题怎么兜住。

评测的三道难题​

  1. 非确定性:同一任务两次运行的轨迹不同,哪次算通过?
  2. 归因难:结果错了,是规划错、工具选错、参数错,还是观察被污染?
  3. 环境依赖:工具调用的是真实世界(网络、数据库),如何可重复地测?

对应的解法:轨迹级评测拆归因、沙箱环境保可重复、LLM-as-judge 处理开放式输出。

评测层次​

组件级评测​

把 Agent 拆开单独测,定位能力短板:

组件测什么形态
工具选择给定场景是否选对工具标注用例集,精确断言
参数生成参数是否合法、是否符合语义schema 校验 + 字段断言
规划子任务分解是否合理LLM 评审对照参考计划
单步推理给定状态选的下一步对不对状态快照 + 标注动作

组件级评测便宜、可高频跑,是迭代的日常反馈。

轨迹级评测​

对完整运行轨迹逐点检查:

轨迹 = [思考1 → 工具调用1 → 观察1 → 思考2 → ... → 最终输出]

检查点:
├── 步骤级:这一步该不该做?(对照参考轨迹 / 规则断言)
├── 顺序级:先后依赖是否满足?(如先查询再修改)
├── 效率级:有没有冗余步骤、重复调用?
└── 合规级:有没有触碰禁止操作?

轨迹评测能回答"过程对不对",避免"结果碰巧对了、过程一塌糊涂"的假阳性。LLM-as-judge 在这一层大量使用:让强模型对照任务目标与规则清单逐步打分,规则清单务必显式写在评审提示里。

端到端结果评测​

只看最终交付物(代码是否通过测试、答案与 Ground Truth 的语义一致度、任务环境最终状态)。开放式产出用 LLM 评审 + 少量精确断言的组合;精确断言优先,能用程序判定(测试通过、JSON schema、数值容差)的不要交给模型评审。

评测集的建设​

  • 从真实失败案例中捞任务入库,这是最有价值的样本来源;
  • 覆盖常规、边界、对抗(诱导越权、注入攻击)三类;
  • 每个样本固定环境快照(文件、数据库状态),保证可重复;
  • 指标同时看:成功率、平均轮数、平均 token 成本、护栏触发率。只优化成功率会把系统推向"多轮重试买通过率"的隐性失控。

安全:威胁模型​

Agent 引入了单轮 LLM 不存在的攻击面:

威胁机理缓解
提示注入工具返回的内容里夹带指令,劫持模型行为外部内容隔离标注、限制其可触发工具、输出过滤
越权工具调用模型被诱导调用高危工具白名单、参数校验、高危操作人工确认
敏感信息外流模型把上下文中的机密发到外部工具数据分级、出站内容扫描、脱敏
循环失控 / 成本爆炸自我反馈死循环步数与预算护栏、异常熔断
幻觉行动编造不存在的工具或参数工具结果校验、严格 schema

提示注入是其中最难的一类,因为它攻击的是"模型无法区分指令与数据"的固有缺陷,不能假设任何防御彻底可靠,工程对策是把高危能力放在注入者够不到的位置(权限层),而不是寄望于提示词防御。

权限与确认设计​

  • 分级授权:只读工具自动放行;可逆写操作记录后放行;不可逆操作(删除、外发、支付)必须人工确认;
  • 确认的交互成本:确认太频繁会被用户训练成无脑点通过,护栏形同虚设——按风险等级聚合确认,而不是每个动作打断一次;
  • 审计日志:谁、何时、什么目标、调用了什么、结果如何,全量落盘。出事后没有轨迹日志的 Agent 系统无法定责。

上线节奏​

离线评测集稳定通过
↓
影子运行(真实流量旁路,不影响用户)
↓
受控灰度(限定用户 + 高危操作全确认)
↓
逐步放宽(护栏按观察到的真实风险逐级放开)

评测不是上线前的关卡,而是持续运行的一部分:抽样线上轨迹做回归评审,失败样本回流评测集——与 RAG 评测一样,形成"评测 → 迭代 → 回流"的闭环。框架与基础设施的选择见框架选型。