生产可靠性¶
生产可靠性不是某个离线 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 和线上监控形成连续管线:
- 固定回归集覆盖主要能力与安全边界;
- shadow 比较新旧版本,不产生外部副作用;
- 小流量 canary 监控质量、时延和成本;
- 设自动停止与人工回滚条件;
- 将真实失败整理为去敏感、可复现的回归样本。
线上接受率或用户点赞容易受位置、延迟和交互设计影响,不能直接等同于模型正确性。
供应商声明¶
供应商页面适合确认产品接口、版本和公开方法,但不能代替独立验证。采用某项方法前应追问:
- 声明对应哪个模型和日期;
- 是默认行为还是可选功能;
- 评测是否使用检索、工具或额外推理预算;
- 是否有公开数据、脚本或系统卡;
- 未披露的部分是否被错误补全。
维护时把供应商事实写成带版本的证据卡,而不是永久能力标签。
事故复盘¶
复盘聚焦系统条件:
impact and detection
timeline
trigger
contributing conditions
why defenses did not catch it
recovery
corrective actions
new regression tests
避免把根因简化为“模型幻觉”。如果检索提供了过期文档、工具返回错误状态而验证层未检查,修复点就在整条链路。
具体错误类型见幻觉与事实性与指令遵循,服务性能见调度与服务。