05 工程化与 LLMOps
速览卡
| 项 | 内容 |
|---|---|
| 一句话定位 | 从"跑通 Demo"到"稳定上线"之间的鸿沟,决定了 AI 项目是玩具还是产品 |
| 核心内容 | 评测体系、可观测性、成本与性能、网关与容灾、从 POC 到生产的四个跨越 |
| 现状判断 | 这一层是当前 AI 落地失败最集中的地方,也是最容易被低估投入的部分 |
| 读完能回答 | 怎么知道我的 AI 系统变好还是变坏了?上线前该准备什么?成本怎么控? |
| 相关板块 | 02 增强技术 | 03 Agent | 08 行业落地 |
一、为什么需要 LLMOps
传统软件 vs LLM 系统的根本差异
| 维度 | 传统软件 | LLM 系统 |
|---|---|---|
| 行为依据 | 确定性逻辑 | 概率分布 |
| 相同输入 | 相同输出 | 可能不同输出 |
| 正确性 | 可证明 | 只能评估 |
| 失败表现 | 崩溃、报错 | 看似正常地输出错误(最危险) |
| 变更来源 | 只有你的代码 | 你的代码 + 提示词 + 模型版本 + 外部数据 |
| 测试方式 | 单元/集成测试 | 评测集 + 打分器 + 回归基线 |
由此产生的三大难题
1. 无法用测试证明正确,只能评估
你需要一个可重复、可量化的评测机制,否则任何改动都是盲改。
2. 失败是静默的
模型不会抛异常,它会自信地给出错误答案。没有监控就无法发现。
3. 变更来源多且互相耦合
改了提示词、换了模型、更新了知识库、调整了检索参数——任何一个都可能让效果变化,且难以归因。
LLMOps 就是围绕这三个难题建立的工程体系。
二、评测体系(最核心的一环)
如果没有评测,你对系统的所有判断都是猜测。
评测的三个层次
| 层次 | 做法 | 成本 | 可靠性 | 适用 |
|---|---|---|---|---|
| 确定性检查 | 格式校验、正则、Schema 验证、代码执行 | 极低 | 高 | 结构化输出场景,优先使用 |
| 程序化指标 | 与标准答案比对(精确匹配、BLEU、ROUGE、语义相似度) | 低 | 中 | 有参考答案的场景 |
| 模型评判(LLM-as-Judge) | 用更强的模型按评分标准打分 | 中 | 中 | 开放式生成,无标准答案 |
建立评测集的步骤
1. 收集真实样本 从线上日志、用户反馈、业务专家处收集 50~200 条
2. 标注期望输出 人工给出标准答案或评分标准
3. 覆盖边界情况 包括难例、易错例、需要拒答的例
4. 自动化运行 每次改动后自动跑全量
5. 建立基线 记录当前分数作为比较基准
6. 持续扩充 线上发现的新失败案例补充进评测集关键:评测集必须来自真实业务分布,而不是自己想象的用例。线上 bad case 是扩充评测集的最佳来源。
LLM-as-Judge 的正确用法
| 要点 | 说明 |
|---|---|
| 给明确的评分标准 | 模糊的"判断好不好"不可靠,要有具体的评分维度与锚点 |
| 用强模型评判弱模型 | 评判模型应强于被评模型 |
| 做人工校准 | 抽样人工复核,验证评判与人工的一致性 |
| 注意位置偏差 | 模型常偏好第一个选项,A/B 对比要交换顺序 |
| 多次取平均 | 降低单次评判的随机性 |
[有争议] LLM-as-Judge 的可靠性仍有争议,尤其是对细微质量差异的判别。它适合发现大幅退化,不适合做精细排序。
回归评测(最重要)
每次以下改动前,都必须跑回归:
- 换模型或模型版本
- 改提示词
- 改 RAG 的检索/分块/重排配置
- 更新知识库
- 微调后上线新版本
没有回归评测就上线,等于闭着眼睛改生产系统。
三、可观测性
需要记录什么
| 层次 | 内容 | 用途 |
|---|---|---|
| 请求层 | 输入、输出、耗时、Token 数、成本、模型版本 | 成本分析、性能优化 |
| 链路层 | RAG 检索了哪些片段、Agent 调用了哪些工具、每步结果 | 定位问题出在哪个环节 |
| 提示层 | 最终发给模型的完整上下文 | 复现问题(最重要) |
| 用户层 | 用户反馈、点赞点踩、重试率、人工接管率 | 真实质量信号 |
Trace(链路追踪)是必需品:尤其对 Agent 与 RAG 系统,出问题时没有 trace 就无法定位是检索错了、上下文组装错了,还是模型生成错了。
关键指标
| 类别 | 指标 |
|---|---|
| 质量 | 用户满意度、人工接管率、重试率、拒答率、评测集分数 |
| 性能 | 首 Token 延迟(TTFT)、总耗时、P95/P99 延迟 |
| 成本 | 日均 Token、单次请求成本、单位业务量成本 |
| 稳定性 | 错误率、超时率、供应商可用性、降级触发次数 |
| 安全 | 敏感内容拦截率、提示注入检测数、越权尝试 |
用户反馈闭环
最重要的质量信号来源是真实用户反馈,而不是评测集。
用户反馈(点踩 / 投诉 / 人工接管)
↓
人工分析归类
↓
补充进评测集(作为回归用例)
↓
针对性优化(提示词 / 检索 / 微调 / 规则)
↓
回归评测验证
↓
上线并持续观察这个闭环跑起来,系统才会持续变好。
四、成本管理
成本的构成
| 部分 | 说明 |
|---|---|
| 输入 Token | 长上下文、大量检索片段会推高 |
| 输出 Token | 通常单价高于输入 |
| 重试与循环 | Agent 的成本大头,容易失控 |
| 缓存未命中 | 重复计算 |
| 工程与人力 | 常被忽略,实际往往超过 API 费用 |
| 人工审核 | 人工兜底的人力成本 |
降本手段(按性价比排序)
| 手段 | 收益 | 风险 |
|---|---|---|
| 模型路由 | 高(可降 50%+) | 需要任务分类机制 |
| 提示词精简 | 中高 | 需验证不损失效果 |
| 缓存 | 高(前缀缓存、语义缓存) | 需处理缓存一致性 |
| 控制上下文长度 | 中高 | 需平衡信息完整性 |
| 减少 Agent 步数 | 高 | 需优化规划质量 |
| 批量处理 | 中(部分 API 有折扣) | 牺牲实时性 |
| 小模型替代 | 高 | 需验证质量达标 |
| 输出长度约束 | 中 | 可能影响完整性 |
成本监控
必须做到:
- 按业务线/功能/用户维度统计成本(而非只有一个总数)
- 设置预算告警
- 单次请求与单用户级别的硬上限(防止被刷或死循环)
五、性能与延迟优化
| 手段 | 说明 | 适用 |
|---|---|---|
| 流式输出 | 边生成边显示,大幅降低感知延迟 | 几乎所有交互场景,强烈建议 |
| 前缀缓存 | 复用固定提示部分的 KV Cache | 系统提示长的场景 |
| 选更小的模型 | 直接降低延迟 | 任务简单时 |
| 并行化 | 多路检索、多工具并行调用 | Agent、RAG |
| 减少上下文 | 直接影响 TTFT | 通用 |
| 预计算 | 常见查询预先生成 | 高频固定查询 |
| 边缘部署 | 靠近用户 | 对延迟极敏感 |
感知延迟往往比真实延迟更重要:流式输出 + 进度提示,能让用户容忍更长的等待。
六、网关与稳定性
LLM 网关的价值
在应用与多个模型供应商之间加一层,统一处理:
| 能力 | 说明 |
|---|---|
| 统一接口 | 屏蔽不同供应商的 API 差异 |
| 路由与降级 | 主模型不可用时自动切备用 |
| 限流与配额 | 按用户/业务线控制用量 |
| 缓存 | 减少重复调用 |
| 成本归因 | 统一计量 |
| 审计日志 | 合规与追溯必需 |
| 敏感信息过滤 | 统一的输入输出护栏 |
在多模型并存的生产系统里,网关几乎是必需品。
稳定性设计
| 风险 | 应对 |
|---|---|
| 供应商故障 | 多供应商备份 + 自动切换 |
| 限流 | 排队、退避重试、降级 |
| 超时 | 设置超时、部分结果返回 |
| 模型行为突变 | 锁定版本 + 灰度发布 |
| 成本异常 | 硬上限 + 实时告警 |
| 提示注入攻击 | 输入输出过滤 |
七、从 POC 到生产的四个跨越
这是 AI 项目最容易卡住的地方。
跨越一:从"能用"到"稳定可用"
| POC 阶段 | 生产要求 |
|---|---|
| 挑几个样例跑通 | 全量分布上的稳定表现 |
| 人工挑好的输入 | 容忍用户的各种奇怪输入 |
| 慢一点没关系 | 有延迟预算与 SLA |
| 出错重跑就行 | 有错误处理与降级 |
关键动作:用真实全量数据测试,而不是精选样例。
跨越二:从"单次调用"到"长时任务"
Agent 类应用特有:
| 挑战 | 应对 |
|---|---|
| 上下文爆炸 | 摘要压缩、状态外置 |
| 错误累积 | 关键步骤校验、可回滚 |
| 成本失控 | 硬性预算与步数上限 |
| 中途失败 | 断点续跑、幂等设计 |
跨越三:从"单实例"到"规模化"
| 挑战 | 应对 |
|---|---|
| 并发与限流 | 队列、退避、配额管理 |
| 成本线性增长 | 缓存、路由、批处理 |
| 弹性伸缩 | 尤其是自部署场景的 GPU 调度 |
| 多租户隔离 | 数据与权限隔离 |
跨越四:从"能用"到"可维护"
| 挑战 | 应对 |
|---|---|
| 无法判断改动是好是坏 | 评测体系 |
| 出问题无法定位 | 全链路 trace |
| 知识过期 | 知识库更新流程与责任人 |
| 人员依赖 | 文档化、自动化 |
八、上线前检查清单
| 类别 | 检查项 |
|---|---|
| 质量 | 有评测集与基线分数;边界情况已覆盖;有拒答机制 |
| 评测 | 回归评测已自动化;改动有验证流程 |
| 可观测 | 完整 trace;关键指标有监控与告警 |
| 成本 | 成本可归因;有预算告警;有硬上限 |
| 性能 | 延迟达标(关注 P95/P99);已启用流式输出 |
| 稳定性 | 有降级方案;供应商故障有备份;超时已配置 |
| 安全 | 输入输出过滤;提示注入防护;敏感数据处理符合政策 |
| 合规 | 已确认数据出网合规;用户告知到位;日志留存符合规定 |
| 人工兜底 | 有转人工通道;有人工审核机制 |
| 回滚 | 能快速回滚到上一版本 |
九、常见误区
| 误区 | 事实 |
|---|---|
| "Demo 跑通了,上线就是工作量问题" | 从 POC 到生产的工程量通常是 POC 的 5~10 倍 |
| "先上线,评测以后补" | 没有评测就无法迭代,系统会停滞在初始水平 |
| "监控就是看有没有报错" | LLM 系统失败是静默的,需要质量指标而非仅技术指标 |
| "成本就是 API 账单" | 人力、审核、重试、工程投入常常超过 API 费用 |
| "上线后就不用管了" | 数据分布漂移、知识过期、模型更新都需要持续维护 |
| "评测集分数高 = 用户满意" | 评测集只是代理指标,必须结合真实用户反馈 |
十、延伸方向
- RAG 与提示词的评测方法 → 02-模型能力增强技术
- Agent 的可观测性 → 03-Agent智能体与协议生态
- 自部署的成本与硬件 → 07-算力与硬件底座
- 合规与审计要求 → 09-安全治理与合规
- 落地失败模式 → 08-应用形态与行业落地