这是《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 发布流程
变更
-> 单元测试
-> 离线评测
-> 安全回归
-> 预发验证
-> 小流量灰度
-> 指标观察
-> 全量
阻断条件:
- 正确率下降超过阈值;
- 幻觉率上升;
- 引用失败率上升;
- 安全用例失败;
- 权限测试失败;
- p95 延迟超 SLO;
- 成本超预算;
- 转人工率异常上升。
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
回滚要求:
- 旧配置可用;
- 旧索引未删除;
- 数据库 schema 兼容;
- 队列任务可停止;
- 缓存可失效;
- 工具协议可降级;
- 回滚操作可审计。
28.7 索引切换
build index-v2
-> validate recall
-> shadow traffic
-> switch alias
-> keep index-v1
-> delete after retention
不要原地重建唯一索引。用别名或指针切换,失败时立即指回旧版本。
28.8 数据库与状态兼容
发布前检查:
- 新旧字段兼容;
- 状态机可回滚;
- 工具消息可解析;
- 审计记录可读;
- 定时任务不重复执行;
- 缓存键可识别版本;
- 外部系统支持旧参数。
高风险 schema 变更采用扩展和迁移,不做一次破坏性替换。
28.9 应急预案
| 故障 | 动作 |
|---|---|
| 模型服务商不可用 | 切备用模型或模板 |
| 疯狂重试 | 熔断并降并发 |
| 输出违规 | 开启严格护栏 |
| 工具越权 | 禁用工具 |
| 检索泄露 | 下线索引并回滚 |
| 成本暴涨 | 全局限流 |
| 任务队列堆积 | 暂停批处理 |
预案要有负责人、触发条件、执行步骤和用户通知模板。
本章小结
灰度发布要把代码、Prompt、模型、索引、工具和护栏作为整体版本管理。通过离线评测、安全回归、小流量和指标观察控制风险,保留旧索引和旧配置支持快速回滚。
思考题
- 哪些变更不能原地发布?
- 灰度分流为什么要稳定?
- 发布时必须观察哪些质量指标?
- 索引切换如何做到可回滚?
- 模型服务商故障时的降级链是什么?