AI 基建
0%
第十一部分 · 实践与运营 · 第 93 章

运营契约:SLO、成本、事故与多租户

作者Changkun Ou
阅读时长约 12 分钟

一套技术栈只有在能说清它承诺什么、花费什么、怎样失败、由谁共享、失败后相信哪份记录时,才真正成为基础设施。前面的实践章已经搭出了这份答案的各个部件:第 88 章 给出了接缝,第 89 章 把发布变成统计意义上的提升问题,第 90 章 把可靠性从精确回复转到被评判的分布,第 91 章 把人工批准放进运行时循环,第 92 章 则把生产轨迹变成下一轮证据。这里缺的是把这些部件扣在一起的运营契约。

2026-06-23T06:34:43.934473 image/svg+xml Matplotlib v3.11.0, https://matplotlib.org/ 0 1 2 3 4 5 契约覆盖度 0.2 0.3 0.4 0.5 0.6 0.7 0.8 未定价风险 受治理的栈 临时拼接栈
图 93.1. 运营契约的风险曲线示意图。受治理的栈会随着 SLO、成本、事故、多租户和证据契约覆盖更多表面而降低未定价风险;临时拼接的栈则让大部分风险留在控制面之外。理想化曲线,非实测数据。

旧的生产运维方法仍然有效。服务水平指标和服务水平目标让服务拥有可度量的承诺 (Beyer et al. 2016);事故指挥把决策、实际修复、沟通和规划分开,避免系统承压时各自为战 (Beyer et al. 2016);FinOps 把成本变成工程、财务和产品共同承担的运营纪律,而不是月底才看的账单 (FinOps Foundation 2026);多租户把公平性、隔离和分摊计费变成平台设计问题 (Kubernetes 2026)。AI 改变的是这些纪律承载的对象。服务不只是可达或变慢,也可能流畅但错误;成本不只是 CPU 小时,而是词元、GPU 秒、评判调用、检索、重排和人工审查;事故也不只是宕机,还可能是质量退化、策略失败、成本失控、溯源失败或租户泄漏。运营契约必须覆盖这些表面。

契约表面

一个 AI 产品至少有五份契约。它们都应当写下来、接入仪表,并在路由流量的同一批接缝上执行。

契约 承诺 度量 执行点
服务水平 系统在延迟、可用性和质量边界内作答。 可用性、p95/p99 延迟、评判通过率、任务成功率。 网关、服务层、评测闸门、回退链。
成本 工作负载留在预算内,并有明确归属。 词元、缓存词元、GPU 秒、评判调用、审查分钟、存储。 网关预算、配额服务、调度器、FinOps 账本。
事故 实时故障有角色、状态、缓解措施和学习路径。 严重级别、受影响租户、燃烧成本、失败评测切片、缓解时间。 事故指挥、运行手册、特性开关、回滚、复盘。
租户 一个租户不能拿走另一个租户的容量、数据、工具或预算。 配额、优先级、缓存分区、索引命名空间、沙箱边界、审计日志。 网关虚拟密钥、调度器、向量库、沙箱、策略层。
证据 发布和修复由可复现记录决定。 数据集版本、提示和配置哈希、轨迹 ID、评判者版本、同意依据。 评测库、轨迹库、数据引擎、模型注册表。

图 93.2 把契约表面画成一个控制面,而不是一份文档。请求从网关进入,网关不只是转发请求,还附上租户身份、预算、路由策略、轨迹 ID 和服务目标。智能体运行时、检索层、沙箱、评测框架和模型服务都继承这个信封。出事时,操作者要回答的头几个问题也从这个信封里来:谁受影响,什么发生了变化,花了多少钱,哪条边界被跨过,哪条轨迹能复现。

contracts user 租户请求 gw 网关 租户、模型、预算、SLO user->gw app 智能体 / 应用运行时 轨迹信封 gw->app obs 可观测性 span + 花费 gw->obs rag 检索 命名空间 + 重排 app->rag sbx 沙箱 工具边界 app->sbx model 模型服务 延迟 + 回退 app->model app->obs eval 实时评测 采样 + 评判 obs->eval 采样 inc 事故状态 角色 + 缓解 obs->inc 告警 data 证据库 轨迹、配置、评测、同意 eval->data inc->data data->gw 新护栏
图 93.2. 作为控制面的运营契约。租户身份、SLO 目标、成本预算、事故状态和证据 ID 随请求同行,而不是留在彼此分离的表格里。
下层约束

运营契约是一条反向箭头:生产承诺会向下改写它下面的每个技术层。99.9% 可用性承诺会改变模型路由与回退;租户预算上限会改变网关策略和调度优先级;隐私边界会改变检索命名空间、沙箱出站和轨迹保留;事故复盘会改变评测集和后训练数据。契约不是系统建完后的说明文字,而是用运营语言写出的下层设计约束。

语义系统的 SLO

传统 SRE 先问哪些用户可见行为重要,以及如何度量它们 (Beyer et al. 2016)。模型系统里,答案至少有三类。前两类很熟悉:服务必须可用,也必须足够快。第三类是语义质量。一个回复可以很快抵达,同时仍然违背产品承诺。

质量 SLI 是一条被采样、被评判的通过率。这里 nn 表示一个窗口内采样到的生产事件数,若回复通过任务准则,则 si=1s_i = 1,否则 si=0s_i = 0

q^=1ni=1nsi.\hat q = \frac{1}{n}\sum_{i=1}^{n}s_i .

其中,q^\hat q 表示这个窗口里的质量通过率,nn 是采样事件数,每个 sis_i 表示单个事件的评判结果。由于样本有限,运营决策应该看置信下界,而不是只看点估计。给定目标 qq^\star,只有当下界仍高于 qq^\star 时,某个发布或路由才算健康。这条规则能防止系统把一个幸运的小样本误当成证据。第 48 章 提供度量纪律,第 90 章 提供非确定服务模型;契约把它们接到告警规则和发布闸门上。

交互曲线展示这项权衡。横轴是额外评测、回退或审查花费,纵轴是残余线上风险。滑块控制风险下降的半衰期。脆弱系统的半衰期很长:多花一块钱也去不掉多少风险。被充分仪器化的系统半衰期较短:有针对性的评测切片、有效验证器和回退能快速拿掉用户实际遇到的失败。

图 93.3. 运营花费应当消除线上风险,而不只是增加流程。拖动半衰期:半衰期越短,说明团队拥有更贴近用户失败的评测切片、验证器与回退路径。
import math

def wilson_lower(passes, n, z=1.96):
    if n == 0:
        return 0.0
    phat = passes / n
    denom = 1 + z * z / n
    center = phat + z * z / (2 * n)
    margin = z * math.sqrt(phat * (1 - phat) / n + z * z / (4 * n * n))
    return (center - margin) / denom

target = 0.92
for n, passes in [(50, 48), (200, 188), (1000, 935)]:
    point = passes / n
    lower = wilson_lower(passes, n)
    decision = "ship" if lower >= target else "hold"
    print(f"n={n:4d}, point={point:.3f}, lower95={lower:.3f}, target={target:.2f}, decision={decision}")

这样的写法也能防止 SLO 变成口号。「回答有帮助」不是 SLO;「滚动一天内,客服回答的采样样本至少 92% 通过有依据的解决准则,95% 置信下界高于 90%,同时 p95 延迟低于 4 秒」才是系统能执行的 SLO。具体数字是产品选择,结构不是。

成本治理是运行时控制

成本治理必须坐在请求路径上。月底报表来得太晚,拦不住失控智能体、误路由评判者,或者悄悄把输出长度翻三倍的提示模板。FinOps 在这里有用,是因为它把成本定义为工程、财务和产品共同参与的运营纪律,明确地在速度、成本和质量之间做权衡 (FinOps Foundation 2026)。FOCUS 是 FinOps 的成本与用量数据开放规范,它也有用,因为统一后的成本数据能让 AI 花费与云、SaaS、数据中心账单放在同一张表里,而不是困在某个供应商导出里 (FinOps Open Cost and Usage Specification 2026)。下文的词元计量已经写进了这套规范:FOCUS 的虚拟货币列承载词元的购入与消耗进度(burn-down),2026 年 6 月批准的 1.4 版则把按模型统计的词元消耗划入了下一版的范围。

运行时账本应该记录一项任务的单位经济,而不只是总账单:

C=r(pinmin,r+poutmout,r+cgputgpu,r+cjudgejr+creviewhr+cstoregr).C = \sum_r \left( p_{\text{in}}m_{\text{in},r} + p_{\text{out}}m_{\text{out},r} + c_{\text{gpu}}t_{\text{gpu},r} + c_{\text{judge}}j_r + c_{\text{review}}h_r + c_{\text{store}}g_r \right).

换句话说,每个请求 rr 都贡献输入词元、输出词元、GPU 时间、评判调用、人工审查和存储这些项;系数则分别是这些仪表的外部价格或内部单位成本。重点不是每一项都能精确已知,而是契约要命名仪表:输入词元、输出词元、GPU 时间、评判调用、人工审查分钟和存储。一旦仪表被命名,网关就能在账单抵达之前执行预算:

  • 把简单任务路由到便宜模型,把困难任务路由到更强模型;
  • 按任务类别和租户限制工具循环;
  • 预算耗尽时拒绝或延迟流量;
  • 把缓存输入折扣和自托管容量分配给实际制造需求的租户;
  • 把评测、评判和人工审查计入产品成本,而不是藏成平台开销。

难点更多是组织性的,而不是数学性的。模型团队可能想用更多测试时算力换质量;产品团队可能想要更低延迟;财务团队可能要求硬成本上限。运营契约把这种冲突显式写出来:什么情况下哪个目标优先,以及谁可以改阈值。

事故类别

事故管理之所以存在,是因为人在压力下容易各自行动、重复劳动并丢失状态。Google SRE 的实践把这个一般问题说得很清楚:区分事故指挥、实际操作、沟通和规划,并维护一份实时事故状态文档 (Beyer et al. 2016)。AI 系统需要同样的角色,只是事故分类比「服务挂了」更宽。

类别 症状 快速缓解 必须保留的证据
可用性 / 延迟 错误、超时、p99 抖升、队列增长 削峰、路由到小模型、关闭可选工具 请求 ID、队列指标、模型路由、部署哈希
质量退化 实时评判通过率或投诉切片下降 回滚模型、提示或索引,提高回退阈值 采样轨迹、评判者版本、评测切片、配置变化
溯源失败 引文错误、文档过期、检索缺失 固定索引版本,收窄来源,标记不确定性 检索片段、语料版本、重排路线
安全 / 策略 不允许内容、提示注入成功、不安全动作 关闭工具、要求批准、阻断路由 完整轨迹、策略版本、沙箱日志
成本失控 花费燃烧或输出词元激增 限制租户、杀掉循环、切换路由、关闭评判扇出 预算账本、提示哈希、循环次数
租户边界 数据、缓存、索引或工具访问跨界 隔离租户、吊销密钥、冻结受影响轨迹 命名空间、虚拟密钥、ACL 差异、审计日志

图 93.4 画出事故循环。检测只是第一步。操作者还要指挥、缓解、沟通、保存证据,并把失败变成回归测试或已接受风险。Sculley 等人关于机器学习系统隐性技术债的警告在这里很贴切:未声明消费者、反馈循环和胶水代码会制造直到生产中才显形的故障 (Sculley et al. 2015)。事故循环就是把这些隐藏依赖变成明示依赖的机制。

incident detect 检测 告警、投诉、评测 command 指挥 角色 + 状态文档 detect->command mitigate 缓解 回滚、路由、限额、加门 command->mitigate communicate 沟通 干系人与租户 mitigate->communicate evidence 保存证据 轨迹、配置、数据、同意 communicate->evidence learn 学习 回归评测或接受风险 evidence->learn learn->detect 新护栏
图 93.4. AI 事故循环。只有当线上失败变成回归评测、策略改动、数据引擎样本或被明确接受的风险时,循环才真正闭合。

最后一条边是许多组织失败的地方。复盘开完了,系统却没有改变。在 AI 基础设施里,如果一份复盘没有增加评测样本、预算护栏、路由规则、租户隔离控制、数据质量检查或人工批准门,它就只是文字,还没有改动机器。

多租户与噪声邻居

AI 多租户不只是 Kubernetes 命名空间。一个租户会共享 GPU、KV 缓存、批处理槽位、向量索引、评判容量、工具服务器、沙箱,有时还共享人工审查队列。Kubernetes 文档列出了熟悉的隔离工具:命名空间、访问控制、配额、沙箱、节点隔离、API 优先级和 QoS (Kubernetes 2026)。AI 继承这些工具,又增加了语义边界。

租户契约必须回答四个问题。

  1. **容量:**一个租户的长上下文或智能体负载,能不能把另一个租户推过延迟 SLO?
  2. **数据:**一个租户的提示、检索片段、缓存前缀(服务引擎为共享提示前缀保留并重放、以省去重算的键值缓存)、轨迹或标签,能不能进入另一个租户的上下文或训练流?
  3. **权限:**一个租户的智能体,能不能触达另一个租户的工具、凭据或出站路径?
  4. **账务:**平台能不能解释谁消耗了词元、缓存词元、GPU 秒、评判调用、审查分钟和存储?

隔离强度应当跟影响半径匹配。低风险内部助手也许只需要命名空间和配额边界;会运行不受信代码的客户侧智能体则应该使用沙箱或租户专用节点池;受监管客户可能需要单独索引、单独加密密钥、单独模型路线和单独保留策略。错误做法是把多租户当成一个平台开关。它其实是一组隔离选择,每一种都有不同价格。

治理不应另起一本书

治理在书的其他地方表现为法律、安全、来源和监督。运营契约把它变成可执行机制。NIST AI Risk Management Framework 把 AI 风险管理描述为贯穿设计、开发、使用和评估的可信度流程 (National Institute of Standards and Technology 2023),其生成式 AI profile 又列出生成式系统特有的风险 (National Institute of Standards and Technology 2024)。运营上的翻译非常具体:

  • 一条策略要求变成网关规则或批准门;
  • 一条数据要求变成轨迹里的来源和保留字段;
  • 一条透明度要求变成引用、不确定性或披露界面;
  • 一条安全要求变成评测切片、沙箱边界或工具白名单;
  • 一条问责要求变成事故角色、审计记录和责任人。

Microsoft 的 GenAIOps 指南从工作负载角度提出了同样的实务判断:AI 工作负载具有非确定性,需要围绕漂移、监控、治理、部署和持续运营建立流程 (Microsoft 2024)。按本书的说法,治理不是漂浮在技术栈上方的审查会,而是一组编译进路由、评测、数据、事故和租户机制的约束。

权衡

运营契约会带来开销。它给每个请求增加元数据,给每起事故增加状态,给每条路线增加仪表,给每次发布增加证据要求。团队也可能做过头:一个小原型会被面向受监管多租户平台的控制淹没。契约应当随影响半径增长。第一份契约可以很简单:固定模型、预算上限、轨迹 ID、回滚规则和一套质量评测。不能推迟的是决定契约住在哪里。如果它只住在聊天记录和表格里,系统就无法执行它。

争议所在
  • 开放式质量能不能成为 SLO? 一种立场认为可以,只要任务范围足够窄、样本被评判且带不确定性,并且连到用户可见结果。另一种立场认为语义质量太依赖上下文,不适合 SLO 算术,只能做参考指标。务实折中是:只对具名任务类别使用质量 SLO,并配置信区间和周期性人工校准。
  • 成本闸门能不能阻断产品行为? 财务希望硬上限,产品希望优雅降级,研究希望在有帮助时多花算力。运营契约必须决定预算接近耗尽时,哪类流量被拒绝、降级、延迟或升级。
  • 多强的租户隔离才够? 强隔离降低风险并提高成本;弱隔离降低成本并提高缓存、索引、工具或轨迹边界失效的概率。正确位置取决于租户数据、工具权限和监管暴露。
  • 事故响应该自动化到什么程度? 自动回滚和路由切换能缩短缓解时间,也可能擦掉证据或掩盖语义失败。成熟运维会自动化可逆缓解,把指挥、沟通和风险接受留给人。

基础设施意味着被运营

本书标题里的基础设施,是一个要求更高的词。基础设施不只是一套能搭出来的栈;它还必须能被承诺、被计量、被共享、被修复、被审计,并在失败后继续改进。运营契约就是把这些动词放进系统里的机制。

能力是契约交付的产品:系统能否在真实用户带来的条件下完成任务。效率是契约里的预算:系统有没有把词元、GPU 秒、评判调用和人的注意力花在能改变结果的地方。信任是契约里的证据:团队能不能解释为什么发布、影响了谁、花了什么、在哪里失败,以及失败之后改了什么。没有这些答案的技术栈也许很强,但还不是基础设施。

延伸阅读

  • Beyer, Betsy; Jones, Chris; Petoff, Jennifer; Murphy, Niall Richard. Site Reliability Engineering: How Google Runs Production Systems (SLI、SLO、错误预算、事故管理与复盘). O'Reilly Media, 2016. sre.google
    Google SRE 一书提供了本章改造到 AI 系统上的运营词汇:服务承诺、错误预算、事故指挥以及从失败中学习。
  • Sculley et al., “Hidden Technical Debt in Machine Learning Systems” (为什么运维胶水和隐藏反馈回路会变成真正的系统), 2015. papers.nips.cc
    Sculley 等人说明,生产机器学习系统会通过胶水代码、未声明消费者、数据依赖、反馈回路和配置复杂性积累技术债。
  • FinOps Foundation, “What is FinOps?” (作为跨职能运营纪律的成本治理), 2026. finops.org
    FinOps 把技术成本管理定义为工程、财务、产品和业务团队共同参与的协作式运营模型。
  • FinOps Open Cost and Usage Specification, “FOCUS: FinOps Open Cost and Usage Specification” (跨 AI、云、SaaS 和数据中心供应商的统一账单数据;1.4 版于 2026 年 6 月批准), 2026. focus.finops.org
    FOCUS 提供供应商中立的成本与用量数据格式,让 AI 花费可以与其他技术花费放在一起分析;其虚拟货币列覆盖词元购入与消耗进度,按模型统计词元消耗则列入 1.4 之后版本的范围。
  • Kubernetes, “Multi-tenancy” (命名空间、配额、沙箱、节点隔离与 QoS), 2026. kubernetes.io
    Kubernetes 文档列出了 AI 平台在模型、缓存、索引和工具边界上继承并扩展的隔离与公平性工具。
  • Microsoft, “MLOps and GenAIOps for AI Workloads on Azure” (非确定 AI 工作负载的运营流程), 2024. learn.microsoft.com
    Microsoft 的工作负载指南把 AI 运营视为非确定系统的生命周期管理,覆盖监控、漂移、部署、治理和自动化。
  • National Institute of Standards and Technology, “Artificial Intelligence Risk Management Framework (AI RMF 1.0)” (可信 AI 的风险管理词汇), 2023. doi.org
    NIST AI RMF 为组织提供了贯穿设计、开发、部署和使用的 AI 可信度风险管理词汇。
  • National Institute of Standards and Technology, “Artificial Intelligence Risk Management Framework: Generative Artificial Intelligence Profile” (生成式 AI 特有风险与行动), 2024. doi.org
    NIST 生成式 AI profile 将 AI RMF 调整到生成式系统的特有风险,本章把这些风险翻译成运营控制。

评论

登录后评论