作者:AgentGrade(LX AI)

离线评估与在线监控的区别

离线评估是在发布前根据固定的轨迹集对代理进行评分,而在线监控则是在生产环境中观察代理的实际行为。前者可以捕获可重现的回归,而后者可以捕获那些没有被测试到的失败。

定义离线评估

轨迹组成

轨迹是代理在接收特定输入时应遵循的有序步骤列表。每个步骤包含:

- 触发代理的用户语句或系统事件

- 代理应产生的思维或推理(如果记录了推理链)

- 代理应调用的工具或API请求

- 预期的工具响应或环境反馈

- 应该显示给用户或下游系统的最终代理输出

当您收集轨迹时,通常从一小组代表性的用户故事开始,然后通过添加日志或需求文档中可以想象的边缘情况来扩展它们。

评分标准

离线评估使用评分标准比较代理的实际轨迹和黄金轨迹,评分标准可以包含多个独立的维度:

- 精确匹配 - 代理是否产生相同的工具调用和响应序列?

- 语义相似性 - 代理的输出是否在含义上等同,尽管措辞不同?

- 忠实度 - 代理的推理是否保持在提供的工具输出中?

- 任务成功 - 最终输出是否满足故事定义的成功标准?

每个维度的评分在0到1之间。离线评分通常是加权平均,但也可以将每个维度作为单独的门槛。

在CI中运行离线评估

由于轨迹集是静态的,评分标准是确定性的,因此可以在持续集成管道中运行评估。步骤通常:

- 检出代理代码和轨迹固定

- 安装所需的依赖项

- 执行代理对每个轨迹,捕获实际跟踪

- 应用评分标准并写入JSON报告

- 如果任何评分低于预定义阈值,则构建失败

这为您提供了快速的反馈,关于可以重现的回归。

定义在线监控

生产环境中的观察

在线监控不比较预先编写的脚本。相反,它从运行的代理流式传输实时信号,并寻找与已建立的基线的偏差。典型的信号包括:

- 用户语句长度或令牌计数的分布

- 每个工具调用的频率

- 外部API返回的错误率

- 代理循环中每个步骤的延迟

- 回退或重试行为的速率

- 最终输出的语义漂移(使用嵌入距离测量到最近的参考集)

由于生产流量是无限的,因此您会在时间窗口(例如,五分钟滑动窗口)中收集这些信号,并将其与历史分位数进行比较。

仪表点

为了获取所需的数据,您需要在代理的几个关键位置进行仪表:

- 在入口点 - 捕获原始用户请求和时间戳

- 在每个工具调用之前 - 记录预期的调用和参数

- 在每个工具响应之后 - 记录成功标志、错误代码和有效负载大小

- 在代理产生最终输出之后 - 记录输出文本和任何安全评分

- 在定期间隔 - 发出包含内存使用和CPU负载的心跳

这些日志被发送到可观察性后端(Prometheus、Loki或自定义时间序列),在那里您可以创建仪表板和警报。

示例警报规则

一个有用的规则是,当特定外部API的5xx错误返回的比例超过过去两周的99分位数,持续三个连续窗口时,触发警报。这可以捕获依赖项的突然降级,这种故障模式在离线集中没有被覆盖,因为它只出现在实际负载下。

仅依赖一个层的常见陷阱

- 仅使用离线评分发布 - 您可能会通过门槛,但仍然发布一个代理,它在罕见的用户措辞或仅在高并发下出现的工具行为下失败。

- 仅使用仪表板发布 - 您可能会在问题被合并并影响用户之后的几天才注意到问题,使回滚更加困难,增加用户影响。

- 比较生产环境中的数字跨不同时间段,当模型、提示或工具列表也发生了变化 - 观察到的漂移可能是由于故意升级而不是回归,导致虚假警报。

- 使用相同的阈值进行离线和在线信号 - 离线评分通常很严格(您期望几乎完美的匹配),而在线指标是嘈杂的;应用单一截止值可能会导致过多的假阳性或漏检。

- 忽略对轨迹集的版本控制 - 如果您更新黄金轨迹而不记录更改,可能会导致评分不一致。

在CI中构建回归门

以下是如何为使用语言模型、检索工具和票据创建API的客户支持代理结构回归门的具体示例。

步骤 | 工具或脚本 | 输出 | 频率

检出代码和固定 | git clone + git checkout | 清洁工作空间 | 每次管道运行一次

安装依赖项 | pip install -r requirements.txt | 隔离环境 | 每次管道运行一次

在每个轨迹上运行代理 | python run_agent.py --trajectories data/trajectories.jsonl | JSONL文件,包含实际跟踪 | 每次管道运行一次

应用评分标准 | python score_traces.py --rubric config/rubric.yaml | 每个维度和总体评分 | 每次管道运行一次

检查阈值 | python gate_check.py --min-overall 0.92 --min-faithfulness 0.88 | 通过/失败状态 | 每次管道运行一次

发布报告 | curl -X POST -d @report.json https://metrics.example.com/ingest | 时间序列记录 | 每次管道运行一次

每个步骤都故意保持幂等,以便重新运行管道会产生相同的结果。如果任何步骤失败,管道将停止,合并请求将被阻止。

设置有意义的生产警报

有效的在线监控关注于快速变化的信号,而不是缓慢漂移的指标。

工具错误率

测量每个外部服务的失败工具调用与总工具调用的比率。突然的激增通常表明下游服务中断或代理未适应的服务合同更改。

循环重试计数

一些代理在收到模糊响应时会重试工具调用。跟踪每个用户请求的平均重试次数。增加可能意味着模型产生了更多不确定的输出,或者工具返回了模糊的错误。

输出嵌入漂移

计算每个最终代理输出的句子嵌入,并将其距离与上周稳定期的中位数嵌入进行比较。如果95分位数距离超过预设边界,则触发调查。

安全信号监控

如果您在代理输出上运行提示注入检测器或亵渎过滤器,请记录被标记的请求的分数。使用OWASP LLM提示注入防御备忘录(https://cheatsheetseries.owasp.org/cheatsheets/LLM_Prompt_Injection_Prevention_Cheat_Sheet.html)决定要监控哪些模式。被标记的请求的增加可能表明模型变得更容易受到越狱尝试。

所有这些警报都应路由到带有明确运行手册的值班轮换,该手册描述了如何回滚代理版本、如何热补丁工具包装器或如何为离线测试收集更多轨迹。

闭环:将监控结果转化为离线测试

拥有两个层的真正力量出现在您使用生产观察来改进测试套件时。

捕获新失败

当警报触发时,第一步是提取导致问题的确切请求-响应序列。大多数可观察性系统允许您下载包含:

- 原始用户语句

- 每个工具调用及其参数

- 每个工具响应

- 最终代理输出

将此跟踪保存为新的轨迹文件。

标记预期行为

与产品负责人或安全负责人合作,决定正确的行为应该是什么。如果失败是由于工具中的错误,则可能决定模拟修复后的工具响应。如果失败是由于模型的推理,则可能编写一个推理链,导致正确答案。

添加到离线集

将新轨迹放入版本控制的轨迹目录中。更新文档以注明来源(例如“从生产事件INC-2024-09-12-07添加”)。

如果需要调整评分标准

有时新的轨迹会揭示以前被忽略的维度。例如,您可能会发现代理有时会产生正确答案,但包含不必要的道歉短语,这会让用户感到烦躁。您可以将“简洁性”维度添加到评分标准中,并为其赋予权重。

重新运行门

再次运行CI管道。如果新的轨迹导致总体评分低于阈值,则意味着当前代码会在门前失败——这正是您想要在发布前捕获的。

重复此循环会创建一个反馈循环,其中生产环境教会测试套件应该测试什么,而测试套件则防止已知的回归到达用户。

什么不是

本讨论并不承诺离线评估会在发布前捕获每个可能的错误。它并不声称在线监控永远不会错过失败,或者两个层次一起提供100%的正确性保证。它并不声明使用这些方法会使代理无懈可击,或者可以跳过安全审查、红队演习或正式验证。它并不建议这些信号对于高风险领域的监管合规是足够的。它并不断言工作流程将消除对人类监督的需求,或者可以仅依赖自动评分来做出发布决定。它并不保证任何特定的阈值将适用于每个团队或每个模型架构。它并不断言上表是设置CI门的唯一方法,或者列出的警报规则是普遍最优的。

参考

- https://cheatsheetseries.owasp.org/cheatsheets/LLM_Prompt_Injection_Prevention_Cheat_Sheet.html

- https://docs.agents-squads.com/guides/config-files

常见问题

我们需要两个吗?

是的,如果代理触及任何用户或系统关心的东西。它们检测不同的故障类。

离线测试可以替代监控吗?

不,您的测试集无法包含您尚未想到的输入。

监控可以替代离线测试吗?

不,监控会告诉您在事实之后发生了什么变化;门槛会告诉您在发布前。

我们应该在生产中警告什么?

故障信号的变化率、工具错误率和异常循环或重试模式——不仅仅是数量。

我们如何使评分随时间保持可比性?

固定评分标准和轨迹,并在评分旁边记录模型、提示和工具的更改。

任一层是安全认证吗?

不,两者都是工程信号。安全审查是单独的练习。

参考

- NIST — AI风险管理框架

- Stanford CRFM — HELM(语言模型的整体评估)

尝试产品:AgentGrade

2026-09-20 · 仅主来源 · 无虚假流量指标 · 决策支持

相关文章

- 跨栈移动的代理评估标准

- 浏览完整的AI微SaaS主题矩阵 →

我们需要两个吗?

是的,如果代理触及任何用户或系统关心的东西。它们检测不同的故障类。

离线测试可以替代监控吗?

不,您的测试集无法包含您尚未想到的输入。

监控可以替代离线测试吗?

不,监控会告诉您在事实之后发生了什么变化;门槛会告诉您在发布前。

我们应该在生产中警告什么?

故障信号的变化率、工具错误率和异常循环或重试模式——不仅仅是数量。

我们如何使评分随时间保持可比性?

固定评分标准和轨迹,并在评分旁边记录模型、提示和工具的更改。

任一层是安全认证吗?

不,两者都是工程信号。安全审查是单独的练习。

仅供决策参考,不是认证或性能保证。

← 返回博客

这次结果有帮助吗?反馈