LLMNotes

第 28 章:灰度与回滚

zjc 于 2026-01-28 发布

这是《LLM 应用开发 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 LLM 应用的变更包括代码、Prompt、模型、索引、工具策略、护栏和数据集。任何一项变化都可能引起质量漂移,因此需要组合版本、灰度、对比和快速回滚。

28.1 发布对象

对象 风险
Prompt 格式和风格变化
模型 能力和安全差异
Embedding 必须重建索引
切块策略 召回变化
Rerank 排序变化
工具 schema 参数兼容性
护栏规则 误报和漏报
工作流 状态兼容
数据集 指标不可比

28.2 发布单元

release-id: rag-v12
  app_version: 2026.08.25-1
  prompt_version: answer-v8
  model: chat-v5
  embedding_model: emb-v2
  index_version: idx-20260825
  rerank_model: rerank-v1
  tool_policy: policy-v4
  guardrail: guard-v6

配置中心保存组合,trace 中记录 release-id。

28.3 发布流程

变更
  -> 单元测试
     -> 离线评测
        -> 安全回归
           -> 预发验证
              -> 小流量灰度
                 -> 指标观察
                    -> 全量

阻断条件:

  1. 正确率下降超过阈值;
  2. 幻觉率上升;
  3. 引用失败率上升;
  4. 安全用例失败;
  5. 权限测试失败;
  6. p95 延迟超 SLO;
  7. 成本超预算;
  8. 转人工率异常上升。

28.4 灰度策略

策略 适用
内部用户 首轮验证
1% 用户 小流量
按租户 企业客户独立控制
按场景 先低风险场景
按问题类型 分类路由类
按风险等级 高风险不动
新旧双跑 质量对比

分流必须稳定,同一用户不要随机跳版本,否则体验不可复现。

28.5 指标观察

类型 指标
质量 正确率、解决率、引用准确率
安全 拦截率、越权测试、注入测试
性能 TTFT、p95、错误率
成本 token、重试、单请求成本
用户 点赞、重问、转人工、投诉

观察期要覆盖业务高峰和不同用户群,不能只看低峰流量。

28.6 回滚设计

告警 / 人工决策
  -> freeze rollout
     -> switch config to previous release
        -> restore index pointer if needed
           -> stop workers
              -> notify users
                 -> incident review

回滚要求:

  1. 旧配置可用;
  2. 旧索引未删除;
  3. 数据库 schema 兼容;
  4. 队列任务可停止;
  5. 缓存可失效;
  6. 工具协议可降级;
  7. 回滚操作可审计。

28.7 索引切换

build index-v2
  -> validate recall
     -> shadow traffic
        -> switch alias
           -> keep index-v1
              -> delete after retention

不要原地重建唯一索引。用别名或指针切换,失败时立即指回旧版本。

28.8 数据库与状态兼容

发布前检查:

  1. 新旧字段兼容;
  2. 状态机可回滚;
  3. 工具消息可解析;
  4. 审计记录可读;
  5. 定时任务不重复执行;
  6. 缓存键可识别版本;
  7. 外部系统支持旧参数。

高风险 schema 变更采用扩展和迁移,不做一次破坏性替换。

28.9 应急预案

故障 动作
模型服务商不可用 切备用模型或模板
疯狂重试 熔断并降并发
输出违规 开启严格护栏
工具越权 禁用工具
检索泄露 下线索引并回滚
成本暴涨 全局限流
任务队列堆积 暂停批处理

预案要有负责人、触发条件、执行步骤和用户通知模板。

本章小结

灰度发布要把代码、Prompt、模型、索引、工具和护栏作为整体版本管理。通过离线评测、安全回归、小流量和指标观察控制风险,保留旧索引和旧配置支持快速回滚。

思考题

  1. 哪些变更不能原地发布?
  2. 灰度分流为什么要稳定?
  3. 发布时必须观察哪些质量指标?
  4. 索引切换如何做到可回滚?
  5. 模型服务商故障时的降级链是什么?