18.3 评估、缓存与生产运行
AI 系统的输出具有随机性,模型、提示、检索索引和工具都在变化。没有可重复的评估集和生产结果观测,团队无法区分真实改进、样本波动和隐藏回归。
从任务和失败分类开始
每个评估任务包含输入、环境、成功标准和允许的操作。数据集应覆盖:
- 高频正常请求;
- 业务关键但低频的场景;
- 边界、歧义、缺失信息和拒答;
- 已发生的生产事故与用户反馈;
- 权限越界、prompt injection 和危险工具调用;
- 长流程中的恢复、取消和重复执行。
评估集要有独立维护集,避免团队针对公开用例过拟合。
先评价结果,再评价轨迹
Agent 最终说“退款完成”,不代表退款记录真的存在。优先检查环境中的结果:数据库状态、生成文件、单元测试、发送记录或账户余额。
然后评价轨迹:
- 是否选择了合适工具;
- 是否违反权限和顺序约束;
- 是否产生多余或危险调用;
- 是否在结果未知时正确暂停;
- 是否满足步数、延迟和费用预算。
只匹配最终文本会漏掉“答案看似正确但执行错了”的问题。
组合不同 grader
优先级通常是:
- 确定性检查:schema、测试、状态查询、精确规则;
- 参考答案或结构化事实比较;
- 人工评分;
- 经人工校准的模型评分。
LLM judge 适合评价风格、覆盖度和部分开放质量,但需要清楚 rubric、盲化候选顺序、定期与人工一致性校准。不要让同一模糊提示同时生成答案和证明自己正确。
模型输出有方差,关键任务应运行多个 trial,并报告通过率和置信区间,而不是只挑一次最好结果。
回归评估与在线观测互补
离线评估用于比较候选版本,在线观测用于发现真实分布和环境问题。生产至少记录:
- 模型、提示、工具和索引版本;
- 总延迟、首 token 延迟、token 与费用;
- 工具调用、错误、审批、循环步数和停止原因;
- 检索来源、引用和权限过滤结果;
- 最终业务结果、用户纠正和升级人工比例。
日志需要脱敏和保留期限。完整 prompt、检索片段和工具结果可能包含个人信息与密钥。
区分四类缓存
| 缓存 | 复用什么 | 主要风险 |
|---|---|---|
| Prompt / prefix cache | 相同前缀的模型计算 | 供应商语义、命中不可控 |
| 精确响应缓存 | 完全相同请求的结果 | 模型/数据版本和随机性 |
| 语义响应缓存 | 相似请求的结果 | 相似不等于同权限、同意图 |
| 检索缓存 | 查询对应的候选片段 | 索引更新、删除和 ACL 变化 |
语义缓存不能只用向量距离决定复用。租户、用户权限、语言、时间范围、模型/提示版本、知识版本和工具可用性都可能进入缓存键或校验条件。
“上下文缓存”是计算优化,不是长期记忆;“语义响应缓存”也不等同于 Cache-Augmented Generation。术语必须对应真实机制,才能正确讨论一致性与失效。
缓存只服务于可接受的新鲜度
先定义数据新鲜度和错误复用成本:
- 静态产品说明可以缓存较久;
- 库存、价格和权限需要短 TTL 或不缓存;
- 医疗、法律、财务等高风险回答不应仅因语义相似直接复用;
- 源文档删除或权限变化应能主动失效相关缓存。
缓存命中也要进入评估和观测。否则成本下降可能掩盖陈旧答案上升。
发布门禁
一次模型、提示、工具或索引变更应经过:
text
离线回归 → 安全评估 → 影子流量 → 小比例发布 → 在线指标 → 扩大或回退回退必须包含模型/提示版本、工具 schema、索引和缓存,而不只是应用镜像。
参考资料
- OpenAI, Working with evals
- Anthropic, Demystifying evals for AI agents
- OpenAI, Agents SDK