跳转至

第 12 章:智能体系统的 SLO

1. 为什么普通 uptime 对智能体来说不够

一旦系统变成 agentic,传统的“服务是在线还是离线”这种图景就不够用了。

即使所有组件都技术上可用,agent system 仍然可能是不健康的:

  • run 完成得太慢;
  • 单次请求成本悄悄上升;
  • tool calls 更频繁地失败;
  • 有用回答的比例下降;
  • 系统过于频繁地升级给人;
  • policy gate 过度阻断正常场景。

这就是为什么单纯的 99.9% uptime 几乎不够。你需要衡量的不只是组件可用性,还要衡量完整 run 的质量。

2. Agent 的 SLO 应描述系统行为,而不是库的健康度

一个很常见的错误是拿各个子组件的指标,当成整个平台的健康度。

例如:

  • 模型 latency;
  • vector store uptime;
  • 某个 API 的 p95;
  • adapter 的错误数。

这些都很有用,但它们并没有回答最核心的问题:“用户是否以合理速度、在安全前提下获得了好的结果?”

因此,智能体系统的 SLO 更适合围绕 run-level outcomes 来构建。

3. 哪些 SLO 真的有意义

对 production-grade agent system 来说,至少四组 SLO 通常最有价值:

  • success SLO;
  • latency SLO;
  • safety SLO;
  • cost SLO。

有时还会补充:

  • escalation SLO;
  • retrieval 的 freshness SLO;
  • 对关键 capability 的 tool success SLO。

重点不是一次性测量所有东西,而是挑出那些真正影响用户结果和 operational stability 的指标。

4. Success SLO 应该贴近任务,而不是贴近 HTTP 200

最危险的陷阱之一就是:只要 run “没崩”,就算成功。

但用户体验并不是这样定义的。一个 run 可能:

  • 形式上成功结束,但给了无用回答;
  • 没有 exception,却违反了 policy;
  • 应该执行动作,却只返回了一段文字;
  • 产生了部分 side effect,却没把任务做完。

所以 success SLO 更应该和这些东西绑定:

  • task completed;
  • expected artifact produced;
  • approved action completed;
  • answer accepted without escalation。

这才更接近系统真正的质量。

5. Agent 的 latency SLO 应按阶段拆开

整体 run 的 p95 很有用,但它远远不够。看不到阶段分布,你就不知道到底哪里变差了:

  • retrieval;
  • model inference;
  • tool execution;
  • approval wait;
  • background queue pressure。

所以成熟系统通常会跟踪:

  • end-to-end run latency;
  • model spans 的 p95/p99;
  • tool execution latency;
  • queue wait time;
  • approval delay(如果 approval 是产品的一部分)。

这样 latency SLO 就不只是一个漂亮数字,而是实际诊断工具。

6. Safety SLO 往往比纯速度更重要

对 agent systems 来说,安全不只是 policy engine 里的规则,它还是一个可观察的质量目标。

Safety SLO 可以包括:

  • 没有 policy violations 的 runs 比例;
  • 没有 cross-tenant retrieval 的 runs 比例;
  • 没有 sensitive egress incidents 的 runs 比例;
  • 没有 unknown side effect 的 write-actions 比例;
  • high-risk 操作的 approval coverage。

这尤其重要,因为团队很容易过度关注“更快更便宜”,然后在不知不觉中把 guardrails 磨薄。

智能体系统的 SLO 几乎总是同时存在于多个维度

flowchart LR
    A["Agent system health"] --> B["Success"]
    A --> C["Latency"]
    A --> D["Safety"]
    A --> E["Cost"]
    A --> F["Escalation"]

7. Cost SLO 能阻止静默退化

Agent system 有一个很不舒服的特点:成本可能在没有明显故障的情况下悄悄上涨。

例如:

  • retrieval 返回了太多上下文;
  • planner 多走了几步;
  • 模型更频繁地调用 tools;
  • retries 把 run 悄悄放大了;
  • memory 把过多 summaries 带进 prompt。

因此,cost SLO 至少应该关注:

  • cost per successful run;
  • tokens per run;
  • tool calls per run;
  • expensive model usage rate。

否则系统可能依然“能工作”,但已经不再经济。

8. Escalation SLO 能避免把人拖垮

如果系统里有 human-in-the-loop,这并不是一个免费的 fallback。

一个系统如果:

  • 过于频繁地请求 approval;
  • 过于频繁地落入 manual reconciliation;
  • 过于频繁地把决策交给人,

看上去也许很安全,但实际上只是在把混乱搬给运营或审核人员。

因此,最好追踪:

  • escalation rate;
  • high-risk flows 的 approval rate;
  • median time to human decision;
  • 无需人工干预即可完成的 runs 比例。

9. 一个 agent platform 的 SLO policy 示例

slo:
  success:
    successful_run_rate: ">= 97%"
  latency:
    run_p95_ms: "<= 12000"
    tool_span_p95_ms: "<= 2500"
  safety:
    policy_violation_rate: "< 0.2%"
    unknown_side_effect_rate: "< 0.05%"
  cost:
    avg_tokens_per_run: "<= 18000"
    avg_cost_per_successful_run_usd: "<= 0.12"
  escalation:
    manual_intervention_rate: "< 8%"

这里最重要的不是具体数字,而是 discipline 本身:团队必须对“什么算系统健康”达成明确共识。

10. 一个简单的 health classification 示例

这个小 skeleton 展示了:一个 run 应该按多个维度判断,而不是只看一项指标。

from dataclasses import dataclass


@dataclass
class RunHealth:
    successful: bool
    latency_ms: int
    policy_violated: bool
    cost_usd: float


def classify_run_health(run: RunHealth) -> str:
    if run.policy_violated:
        return "safety_failure"
    if not run.successful:
        return "task_failure"
    if run.latency_ms > 12_000:
        return "slow_success"
    if run.cost_usd > 0.12:
        return "expensive_success"
    return "healthy"

它的想法很简单,但非常有用:一个 run 可以形式上成功,却在 operational 上很差。

11. 智能体系统的 SLO 最常见的崩坏点

典型问题总是重复出现:

  • success 用 HTTP status 计算;
  • latency 只看 model call;
  • cost 根本不进入 health model;
  • safety 被放到 reliability 体系之外;
  • human escalation 没被算作 system health 的一部分;
  • SLO 写出来了,但 rollout 根本不受其约束。

一旦如此,SLO 就会变成 dashboard 装饰,而不是平台控制手段。

12. 实用检查清单

如果你想快速检查自己的 SLO,可以问:

  • 你是否有 run-level 的 success 定义?
  • 你是否能看到按阶段拆开的 latency,而不仅仅是总耗时?
  • 你是否有 safety SLO,而不只是 availability?
  • 你是否衡量 cost per useful outcome?
  • 你是否能看到实际有多少负担落到了人身上?
  • rollout decisions 是否真的绑定到了 SLO,而不是只靠直觉?

如果连续几个答案都是否,那说明平台也许已经“可观察”,但还没有通过质量目标被真正管理。

13. 接下来读什么

SLO 之后,下一个自然步骤就是 eval loop:offline evals、online evals、trace grading 和 regression gates。也正是在那里,observability 变成持续改进闭环。