跳转至

生产可靠性

生产可靠性不是某个离线 benchmark 的分数,而是模型、检索、工具、服务和观测共同满足服务目标的能力。

失效面

request
  -> routing and policy
  -> context / retrieval
  -> model inference
  -> tools and external services
  -> validation
  -> response / side effect

每一层都可能独立失败,也可能返回“成功”却产生语义错误。

SLI 与 SLO

至少区分:

类别 SLI
可用性 成功响应率、工具成功率
时延 TTFT、TPOT、端到端 p95/p99
质量 任务成功、事实性、约束满足
安全 越权率、敏感数据暴露、拒绝质量
成本 每成功任务 token、GPU 秒、外部调用
新鲜度 检索索引或知识更新时间

单请求错误预算可写成

\[ E_{\text{total}} \le E_{\text{infra}}+E_{\text{model}}+ E_{\text{retrieval}}+E_{\text{tool}}+E_{\text{policy}}, \]

这是运维分解,不假设错误独立。

防线分层

输入

  • schema 与长度验证;
  • 恶意文件、链接和 prompt injection 检测;
  • 用户、租户与数据权限;
  • 可接受任务与拒绝策略。

上下文

  • 来源、版本、时间和 ACL 随 chunk 传播;
  • 防止跨租户缓存和检索;
  • 截断时优先保留权限与任务约束;
  • 不可信内容与控制指令分层。

生成

  • 选择适合任务的模型、温度和预算;
  • 结构化输出使用 grammar/schema;
  • 高风险主张先检索或调用工具;
  • 需要时允许 abstention 与人工升级。

输出与动作

  • parser、事实检查、代码测试和业务规则;
  • 外部写操作的对象确认与幂等键;
  • 敏感字段脱敏;
  • 写后重新读取目标状态。

降级与回退

可靠降级不是静默换一个能力未知的模型。回退策略应明确:

  • 哪些任务可换较小模型;
  • 哪些任务在检索不可用时必须停止;
  • 工具超时能否重试或使用缓存;
  • 长上下文被缩短时保留哪些约束;
  • 服务端更新后如何 canary 与回滚。

对同一请求无限重试会放大成本与副作用。重试必须有界、幂等,并区分确定性错误与瞬态错误。

可观测性

日志需要支持诊断,但不应默认保存完整敏感输入。结构化事件可记录:

  • request/trace ID;
  • 模型与模板版本;
  • 检索索引版本和文档标识;
  • 工具名、状态码、延迟和重试;
  • token、缓存、finish reason;
  • verifier 结果和策略决策;
  • 最终状态与成本。

采样保存内容时需经过权限、脱敏和保留期治理。

评测到生产

离线评测、shadow、canary 和线上监控形成连续管线:

  1. 固定回归集覆盖主要能力与安全边界;
  2. shadow 比较新旧版本,不产生外部副作用;
  3. 小流量 canary 监控质量、时延和成本;
  4. 设自动停止与人工回滚条件;
  5. 将真实失败整理为去敏感、可复现的回归样本。

线上接受率或用户点赞容易受位置、延迟和交互设计影响,不能直接等同于模型正确性。

供应商声明

供应商页面适合确认产品接口、版本和公开方法,但不能代替独立验证。采用某项方法前应追问:

  • 声明对应哪个模型和日期;
  • 是默认行为还是可选功能;
  • 评测是否使用检索、工具或额外推理预算;
  • 是否有公开数据、脚本或系统卡;
  • 未披露的部分是否被错误补全。

维护时把供应商事实写成带版本的证据卡,而不是永久能力标签。

事故复盘

复盘聚焦系统条件:

impact and detection
timeline
trigger
contributing conditions
why defenses did not catch it
recovery
corrective actions
new regression tests

避免把根因简化为“模型幻觉”。如果检索提供了过期文档、工具返回错误状态而验证层未检查,修复点就在整条链路。

具体错误类型见幻觉与事实性与指令遵循,服务性能见调度与服务。

Reference