Reliability and Routing2026年8月4日Flatkey Team

AI 可观测性实施清单:20 个生产步骤

一份面向生产环境的 AI 可观测性实施清单,包含 20 个上线步骤、遥测契约、代码模式、告警运行手册、验收测试和责任交接。

AI 可观测性实施清单:20 个生产步骤

AI 可观测性实施清单:20 个生产步骤

AI 可观测性实施清单应该回答一个比“API 是否在线?”更难的问题。生产环境中的 AI 功能即使返回 HTTP 200,也可能给出错误答案、使用过时的检索上下文、调用错误的工具、通过昂贵的回退重试、将敏感提示数据泄露到日志中,或者耗时过长而失去价值。

实际目标是将每个用户可见结果与产生该结果的模型尝试、检索步骤、工具调用、策略决策、延迟、token 使用量和成本关联起来。这需要传统应用遥测,再加上 AI 特有的上下文和评估信号。

本指南为 LLM 应用、智能体、检索增强生成系统和多模型网关提供分阶段实施计划。它保持供应商中立,并在可能的情况下使用 OpenTelemetry 概念。它还包含信号到决策映射、验收测试矩阵、七天上线计划、遥测契约、仪表化模式、告警运行手册和供应商评分卡,以便团队能够从需求推进到正式上线。

一句话理解 AI 可观测性

AI 可观测性是指:通过一组相关联的 trace、指标、日志、评估和用户结果,解释 AI 工作流的行为、质量、可靠性、安全性和成本的能力。

监控告诉你阈值发生了变化。可观测性帮助你确定为什么会变化,以及涉及了哪些请求、模型、提示、检索结果、工具、租户或发布版本。

将本指南中的 AI 可观测性实施清单用作发布门禁,而不是一次性的文档工作。每当你更换模型、提示、检索索引、工具 schema、路由策略或评估器时,都要重新执行一遍。

对于一个 AI 应用,一次请求可能包含多个不同的尝试:

用户操作
  └─ 应用工作流
      ├─ 检索查询
      ├─ 模型尝试 1
      ├─ 工具调用
      ├─ 模型尝试 2
      └─ 验证和用户可见结果

如果这些步骤无法在同一个 trace 或请求标识下关联起来,调试就只能靠猜测。

最小 AI 可观测性数据模型

数据模型是 AI 可观测性实施清单的基础,因为每个仪表板、告警、评估和事故查询都依赖一致的关联字段。

从一个工作流级别的 trace 开始,并为每个关键操作设置子 span。OpenTelemetry 将 trace、指标、日志和 baggage 定义为核心信号。其生成式 AI 语义约定为模型和智能体操作提供了不断发展的词汇,并且截至 2026 年 8 月 4 日,这些约定维护在专门的 OpenTelemetry 语义约定仓库中。由于这些约定可能会演进,请固定你实现时使用的版本,并保留一个小型内部兼容层,而不要把供应商特定的字段名散落在代码各处。

至少要捕获以下字段组。

字段组 记录内容 重要原因
关联 trace_idrequest_id、会话 ID、工作流、环境、版本 串联完整请求路径
路由 提供商、请求的模型、解析后的模型、区域、端点或路由别名 说明请求实际运行的位置
尝试 尝试次数、重试原因、回退来源和目标 将单个用户请求与多个可计费调用区分开来
性能 排队时间、首个 token 时间、总延迟、工具和检索延迟 定位慢速阶段
使用量 输入、缓存输入、输出、推理或提供商特定的使用字段 说明容量和成本
结果 状态、标准化错误类别、结束原因、验证结果 区分传输成功与任务成功
质量 评估器版本、评分、通过/失败、用户反馈、已接受结果 跟踪响应是否有用
治理 租户、策略决策、脱敏状态、保留类别 支持隐私和审计控制

避免将原始提示和响应视为必填字段。在许多系统中,它们应默认禁用,或仅存储在单独受控的评估数据集中。

将每个信号映射到一个运营决策

更多遥测数据并不一定更好。在添加属性、指标或仪表板之前,先明确它所支持的决策以及该决策的负责人。

信号 它回答的问题 典型决策 主要负责人
已接受完成率 工作流是否解决了客户任务? 回滚、更改提示词/模型,或调查下游故障 产品和 AI 工程
p95 端到端延迟 完整体验是否足够快? 更改路由、降低检索/工具延迟,或调整流式输出 平台工程
首个 token 时间 流式输出是否感觉响应及时? 调整排队、提供商路由或提示词大小 平台工程
回退率 主路由是否健康且经济? 调查提供商健康状况、容量或路由策略 可靠性工程
每个已接受结果的成本 重试和低质量结果是否抵消了节省? 更改模型组合、缓存、提示词大小或验证 工程和 FinOps
检索依据通过率 答案是否使用了授权且相关的上下文? 重建索引、过滤器、重排器或引用验证 搜索/RAG 负责人
工具对账失败 外部副作用是否安全完成? 暂停工具、对账状态,或修复幂等性 应用负责人
脱敏失败次数 敏感数据是否到达导出器? 停止导出、隔离遥测数据,或更新策略 安全/隐私

此表可防止一种常见失效模式:仪表板上有数十个图表,但没人知道某个变化应该触发什么操作。

一个实用的 Trace 形状

为用户可见的工作流使用一条 trace,而不是为每个提供方调用单独创建一条无关的 trace。根 span 应描述客户任务,而子 span 应描述促成结果的各项操作。

workflow: answer_support_question
  attributes: tenant_class, release, accepted_outcome, final_status
  ├─ retrieval.search
  │    attributes: index_version, top_k, authorization_result
  ├─ gen_ai.attempt
  │    attributes: provider, requested_model, resolved_model, attempt=1
  ├─ tool.lookup_order
  │    attributes: tool_schema_version, idempotency_key, result
  ├─ gen_ai.attempt
  │    attributes: provider, resolved_model, attempt=2, fallback_reason
  └─ evaluation.validate_answer
       attributes: evaluator_version, pass, score_band

OpenTelemetry 的生成式 AI 语义约定仍在演进中。把它们当作共享词汇表,但要固定约定版本,记录任何本地扩展,并在预生产环境中测试升级。将 accepted_outcome 之类的业务结果保留在你自己的稳定应用命名空间中,这样语义约定的变更就不会破坏产品报表。

阶段 1:在添加仪表板之前定义结果

1. 命名工作流和可接受结果

不要从全局的提供方 token 图表开始。先从某个客户任务开始,例如:

  • 支持答复被接受且无需升级处理;
  • 代码补丁通过测试;
  • 抽取结果匹配所需的 schema;
  • 代理在无需人工恢复的情况下完成请求的操作;
  • 生成的媒体通过产品审核门禁。

创建一个机器可读的 workflow 名称和一个 accepted_outcome 或等效结果。这将成为质量、成本和可靠性指标的分母。

2. 定义失败分类法

至少区分以下几类:

  • 传输失败:超时、连接错误或上游 5xx;
  • 容量失败:速率限制、配额、队列饱和或上下文限制;
  • 契约失败:无效 JSON、缺失字段、不受支持的工具 schema 或流中断;
  • 质量失败:答案无关、错误、不完整或缺乏依据;
  • 安全失败:策略违规、提示注入成功或不安全的工具执行;
  • 业务失败:技术上有效但用户拒绝或放弃的输出。

单一的 error=true 维度远远不够。它会掩盖你究竟需要基础设施改进、提示词变更、模型变更,还是产品变更。

3. 选择初始服务级指标

从一组能反映用户体验的小指标开始:

workflow availability = accepted workflow completions / eligible workflow starts

quality pass rate = evaluator-passing completions / evaluated completions

p95 end-to-end latency = p95(workflow completed - workflow started)

cost per accepted outcome = total workflow cost / accepted outcomes

将提供商可用性保留为诊断指标,而不是产品 SLI。即使提供商运行正常,如果检索、工具、验证或路由出现故障,你的工作流也可能失败。

阶段 2:为完整请求路径添加埋点

4. 为每个用户可见的工作流创建一个根 span

在应用边界生成根 trace,先于检索或模型路由开始。将该上下文贯穿于队列、worker、网关、工具服务和回调之中。

对子 span 使用以下场景:

  • 检索和重排序;
  • 每次模型尝试;
  • 每次工具调用;
  • 护栏或策略检查;
  • 输出解析和验证;
  • 回退选择;
  • 持久化和下游交付。

5. 记录请求的路由和解析后的路由

客户端指定的模型不一定就是实际处理请求的模型。两者都要记录:

{
  "ai.requested_model": "support-balanced",
  "ai.resolved_provider": "provider-b",
  "ai.resolved_model": "model-version-2026-07",
  "ai.route_reason": "primary_rate_limited",
  "ai.attempt": 2
}

这对于多提供商系统至关重要。它也让 模型回退策略 具备可审计性,而不再是不可见的。

6. 单独衡量流式传输

仅有总延迟并不能描述流式体验。需要捕获:

  • 排队时长;
  • 连接和提供商延迟;
  • 首个 token 或首个有用事件的时间;
  • 生成时长;
  • 端到端完成时间;
  • 客户端取消时间。

一次请求的总延迟可能可接受,但首个 token 的时间却很差。它也可能很快生成首个 token,然后卡住。

7. 让重试和回退成为一等尝试

永远不要用最终成功覆盖第一次失败的尝试。一个工作流 span 应该包含或关联每一次计费尝试,包括:

  • 重试次数;
  • 触发原因;
  • 退避时长;
  • 提供商和模型;
  • token 数和成本;
  • 部分输出状态;
  • 最终处理结果。

这可以防止重试风暴被显示为“100% 成功”。

阶段 3:添加 AI 特定的质量上下文

8. 为提示词、工具、策略和评估器做版本管理

存储稳定标识符,而不仅仅是原始内容:

prompt_version
tool_schema_version
retrieval_index_version
policy_version
evaluator_version
route_policy_version

这些维度让你能够在变更前后比较一次发布。没有版本管理,质量下降就很难归因。

9. 追踪检索质量

对于检索增强生成,记录:

  • 查询版本和过滤条件;
  • 检索延迟;
  • 文档或 chunk ID;
  • 来源新鲜度;
  • top-k 和重排序器版本;
  • 空结果率;
  • 访问控制决策;
  • 引用或 grounding 验证结果。

不要将完整的私有文档放入通用 trace 存储中。除非调试策略明确允许内容采集,否则应存储受控引用或哈希。

10. 追踪工具调用和副作用

每个工具跨度都应包含工具名称、schema 版本、授权决策、延迟、规范化结果,以及它是否产生了外部副作用。

对于会产生副作用的工具,还应记录幂等性键和对账状态。当模型调用在工具已完成后超时,这一点尤为重要。

11. 结合在线和离线评估

在线信号很快,但噪声也大:点赞、放弃、重生成、纠正、升级人工处理或任务完成。离线评估更慢,但更可控:精心筛选的测试集、评分标准打分器、可执行测试和人工审查。

将这两类评估连接到相同的工作流和版本标识符。不要在未标注变更的情况下,把不同评估器版本的分数混合到同一条趋势线上。

第 4 阶段:控制隐私、安全与保留

12. 在收集前对遥测数据分类

定义三个级别:

  1. 元数据:路由、时间、token、状态、版本和 ID。
  2. 派生内容信号:长度、语言、安全类别、评估器分数或哈希。
  3. 原始内容:提示、响应、检索到的文本、工具参数和工具结果。

广泛收集元数据。只有在用例、用户告知、访问控制和保留策略支持时,才收集原始内容。

13. 在采集边界进行脱敏

只要可能,脱敏应在导出之前完成。覆盖以下内容:

  • API 密钥、bearer token、cookie 和授权头;
  • 电子邮件地址、电话号码、账号和政府身份证明标识;
  • 工具参数或检索文档中的机密信息;
  • 签名 URL 和数据库连接字符串;
  • 共享可观测性存储中被禁止包含的租户特定内容。

对导出的属性使用白名单。黑名单最终总会漏掉一个新的含密字段。请遵循这份AI API 密钥管理指南中描述的同样原则。

14. 按数据类别设置保留和访问权限

原始内容不应继承与低风险指标相同的保留策略。应定义独立的存储、加密、访问角色、审计日志和删除流程。要测试删除,而不是假定一份策略文档就足够了。

NIST AI 风险管理框架及其生成式 AI 配置文件强调在整个系统生命周期内持续测量、文档化和风险管理。可观测性有助于提供证据,但不加区分的日志记录会带来新的隐私和安全风险。

15. 控制高基数维度

不要把用户 ID、trace ID、提示文本、文档 ID 或原始错误消息变成指标标签。将高基数数据保留在 trace 或日志中,然后再派生出有边界的指标,例如工作流、模型家族、错误类别、环境和区域。

第 5 阶段:构建指向行动的告警

16. 围绕影响用户的症状告警

针对以下症状触发页面告警:

  • 已接受完成率低于目标;
  • 质量通过率跌破发布护栏;
  • p95 延迟或首 token 时间消耗了错误预算;
  • 每个已接受结果的成本超过其上限;
  • 不安全的副作用或策略失败;
  • 回退率升至正常区间之上。

除非它们直接威胁面向用户的目标,否则将提供方错误、token 峰值和检索缺失用作诊断告警或仪表盘信号。

17. 使用燃尽率窗口进行 SLO 告警

静态阈值可能会产生噪声。错误预算燃尽率告警会询问服务消耗允许失败预算的速度有多快。Google 的 SRE 指南建议将更快的窗口与更慢的确认窗口结合起来,这样严重事故就能快速触发页面告警,而不会让每次短暂峰值都变得可操作。

18. 添加发布和路由注释

每个仪表盘都应显示 prompt、应用、路由、模型和评估器的发布信息。添加部署注释并比较 canary 与 control 群组。否则,团队只会看到曲线变化,却看不到到底是什么变了。

第 6 阶段:在全面推出前验证

19. 运行故障演练

至少测试以下内容:

  • 上游超时;
  • 速率限制和配额耗尽;
  • 结构化输出格式错误;
  • 部分流式传输中断;
  • 检索未返回任何授权上下文;
  • 工具成功但响应丢失;
  • fallback 改变模型行为;
  • 遥测导出器不可用;
  • 脱敏规则收到未知字段。

确认工作流会安全失败,trace 保持连贯,并且告警能识别正确的负责人。

20. 分四个阶段推出

  1. Shadow: 在不改变路由或用户行为的情况下发出遥测。
  2. Canary: 对一小部分流量启用,并比较开销、基数和数据质量。
  3. 受控生产: 附加发布阈值和回滚规则。
  4. 全面生产: 在通过隐私、可靠性和成本检查后扩大范围。

OpenTelemetry 支持头采样和尾采样模式。在可行的情况下保留所有错误和稀有失败类别,然后对常规成功流量进行采样以控制成本。采样规则必须不会移除用于解释事故所需的那些精确 trace。

生产验收测试矩阵

验收测试证明 AI 可观测性实施清单 能在故障、隐私和遥测丢失场景下正常工作,而不只是对成功请求有效。

不要因为 spans 出现在 trace 查看器中就宣布可观测性已经完成。请运行受控测试,并为每个发布门保存证据。

测试 注入条件 所需遥测证据 通过条件
上游超时 强制主模型路由超过其截止时间 首次尝试 span、超时类别、重试或回退决策、最终结果 没有孤立 span;最终处置和总成本可见
速率限制 返回提供方 429 或耗尽测试配额 原始提供方代码、标准化容量类别、退避时长、路由变更 重试预算受限,告警指向路由负责人
无效结构化输出 返回格式错误的 JSON 或缺少必需字段 契约验证 span、验证器版本、修复尝试、最终通过/失败 HTTP 成功不被计为已接受的成功
流中断 在第一个 token 后中断输出 首个 token 时间、部分输出标志、可计费用量、重试决策 防止重复内容和双重工具执行
空检索 不返回任何已授权文档 检索过滤条件、授权结果、空结果原因、回答策略 系统遵循已批准的无上下文行为
工具歧义 让工具完成,而模型请求超时 幂等键、副作用状态、协调结果 工具不会被执行两次,且状态可恢复
脱敏哨兵 在测试字段中插入合成密钥 本地检测事件,未导出密钥值 导出在离开边界前被阻止或脱敏
导出器故障 停止遥测目标端 导出器队列/丢弃指标和应用健康状况 用户流量仍保持在其可靠性预算内
采样检查 在高成功率流量中生成少量罕见错误 错误 traces 被保留;常规成功按配置采样 采样后,事故示例仍可搜索
发布回归 部署一个已知存在延迟或质量退化的金丝雀 发布注释、金丝雀 cohort、对照 cohort、SLI 比较 回滚阈值触发,并且可识别变更负责人

对于每项测试,记录负责人、测试日期、trace ID、预期告警、实际告警以及整改工单。这会把可观测性变成可重复的发布控制,而不是一次性的埋点项目。

七天实施计划

对于一个聚焦的团队,AI 可观测性实施清单可以作为一个为期七天的序列来实施,并且每天结束时都留下可审查的证据。

这个序列是刻意收窄的。它会在团队扩大覆盖范围之前,先交付一个值得信赖的纵向切片。

  1. 第 1 天 — 结果契约:选择一个高价值工作流,定义符合条件的启动、可接受的结果、失败类别和 SLI 公式。
  2. 第 2 天 — Trace 骨架:创建根工作流 span,并在应用程序、队列、网关、检索层和工具之间传播上下文。
  3. 第 3 天 — 模型尝试:捕获请求和解析后的路由、尝试、延迟、结束原因、提供商用量、重试和回退。
  4. 第 4 天 — 质量和成本:关联验证器结果、评估器版本、用户结果和归一化后的工作流成本。
  5. 第 5 天 — 隐私控制:对字段进行分类,实施允许列表导出,测试脱敏,设置保留期,并验证访问边界。
  6. 第 6 天 — SLO 和仪表板:构建最小仪表板,添加发布注释,定义燃尽率告警,并分配负责人。
  7. 第 7 天 — 故障演练:运行验收矩阵,修复缺口,开始金丝雀发布,并记录回滚条件。

在第七天结束时,目标不是实现全局仪表化。目标是一个生产工作流,其行为、质量、可靠性、安全性和成本都可以从头到尾被解释清楚。

发布所需的最小仪表板

仪表板是 AI 可观测性实施清单 的运营视图。它应当优先展示客户结果,其次才是基础设施细节。

保持首个运营视图足够小,以便在事故期间使用:

  • 结果行:符合条件的启动、已接受完成、质量通过率,以及放弃或升级处理。
  • 可靠性行:归一化错误、回退率、重试放大,以及错误预算消耗。
  • 延迟行:端到端 p50/p95/p99、队列时间、首个 token 时间、检索延迟和工具延迟。
  • 经济性行:输入/输出/缓存 token、总工作流成本,以及每个已接受结果的成本。
  • 变更行:应用程序、提示、路由策略、模型、检索索引、工具 schema 和评估器发布。
  • 调查链接:每种失败类别、发布、路由和受影响工作流的代表性 traces。

仪表板应支持从症状到 trace 的路径。如果某个告警显示质量下降,但团队无法在几次点击内访问受影响的工作流 traces,那么调查闭环就是不完整的。

AI 可观测性平台评估记分卡

商业评估应测试平台是否支持你的运营模型,而不是测试它是否拥有最长的功能列表。使用同一个已加仪表的试点工作负载对候选方案进行评分。

标准 权重 在试点中验证什么
工作流关联 20% 一条 trace 连接模型尝试、检索、工具、验证和用户结果
OpenTelemetry 互操作性 15% 标准导入/导出可用;本地扩展仍可查询;数据可移植
质量和评估关联 15% 在线反馈和带版本的离线评估与生产 traces 关联
隐私与治理 15% 字段允许列表、脱敏、区域控制、访问角色、审计日志和删除测试
可靠性运维 15% SLO、燃尽率告警、采样控制、发布注释以及事故演练支持
成本归因 10% 提供商使用量、重试、回退、缓存 tokens 和已接受结果的单位成本可对账
Agent/RAG/工具覆盖 5% 检索和产生副作用的工具操作具有一等 span 和过滤器
运营成本 5% 摄取、存储、查询、保留和工程开销符合预期规模

为每项标准使用 1–5 分评分,乘以权重,并要求提供试点中的书面证据。即使仪表板看起来很精致,如果平台无法保留你的遥测契约或导出你的数据,也会造成运营锁定。

可复制的遥测契约

AI 可观测性实施清单 迅速落地的最快方式,是将其转化为一个带版本的遥测契约。该契约定义每个工作流和模型尝试必须发出的内容、哪些字段是可选的、哪些值是允许的,以及哪些字段禁止进入高流量索引。

下面的示例使用内部命名空间。将其映射到固定版本的 OpenTelemetry GenAI 约定中,只需通过一个适配器完成,而不是让应用代码暴露在约定变更之下。

telemetry_contract:
  version: "2026-08-04"
  workflow_span:
    required:
      - ai.workflow.name
      - ai.workflow.version
      - ai.request.id
      - deployment.environment
      - service.version
      - ai.outcome.status
      - ai.outcome.accepted
      - ai.latency.total_ms
    optional:
      - ai.tenant.tier
      - ai.experiment.id
      - ai.user.feedback
    prohibited:
      - end_user.email
      - end_user.name
      - raw.authorization_header

  model_attempt_span:
    required:
      - ai.attempt.number
      - ai.route.requested_model
      - ai.route.resolved_provider
      - ai.route.resolved_model
      - ai.result.status
      - ai.usage.input_tokens
      - ai.usage.output_tokens
      - ai.latency.first_token_ms
      - ai.latency.total_ms
    conditional:
      - ai.fallback.reason
      - ai.error.class
      - ai.error.provider_code
      - ai.usage.cached_input_tokens

  content_capture:
    default: "off"
    allowed_when:
      - approved_evaluation_dataset
      - explicit_debug_session
    controls:
      - redact_before_export
      - access_logged
      - retention_approved

在代码审查中审查这份合同,就像审查一个 API schema 一样。新的模型提供商、agent 工具、fallback 策略或 evaluator 在其 telemetry 字段映射到该合同并通过相同的验收测试之前,不应上线。

单个 AI 工作流的埋点模式

不要让每个团队独立发明 span 名称和属性。提供一个小型封装器,用于创建根工作流 span、记录子尝试、捕获标准化结果,并在导出前应用脱敏。

这个 Python 示例是有意与提供商无关的。内部属性名称应在封装器或 collector 层转换为你固定的 OpenTelemetry 语义约定版本。

from opentelemetry import trace

tracer = trace.get_tracer("checkout-assistant")


def run_ai_workflow(request, router, evaluator):
    with tracer.start_as_current_span("ai.workflow.checkout_help") as workflow_span:
        workflow_span.set_attribute("ai.workflow.name", "checkout_help")
        workflow_span.set_attribute("ai.workflow.version", "2026-08-04")
        workflow_span.set_attribute("ai.request.id", request.request_id)

        result = None
        for attempt_number in range(1, 3):
            with tracer.start_as_current_span("ai.model.attempt") as attempt_span:
                route = router.resolve(request, attempt_number)
                attempt_span.set_attribute("ai.attempt.number", attempt_number)
                attempt_span.set_attribute("ai.route.requested_model", request.model)
                attempt_span.set_attribute("ai.route.resolved_provider", route.provider)
                attempt_span.set_attribute("ai.route.resolved_model", route.model)

                result = route.generate(request)
                attempt_span.set_attribute("ai.result.status", result.status)
                attempt_span.set_attribute("ai.usage.input_tokens", result.input_tokens)
                attempt_span.set_attribute("ai.usage.output_tokens", result.output_tokens)

                if result.status == "ok":
                    break

                attempt_span.set_attribute("ai.error.class", result.error_class)

        evaluation = evaluator.score(request, result)
        workflow_span.set_attribute("ai.outcome.status", result.status)
        workflow_span.set_attribute("ai.outcome.accepted", evaluation.accepted)
        workflow_span.set_attribute("ai.evaluator.version", evaluation.version)
        workflow_span.set_attribute("ai.quality.score", evaluation.score)
        return result

生产代码还应记录持续时间、首 token 时间、fallback 原因、取消、流式传输错误和异常。关键的设计选择是层级结构:一个客户工作流包含一个或多个可计费尝试,而工作流记录最终被接受的结果。

告警策略与首次响应运行手册

如果仪表板没有响应规则,AI 可观测性实施清单 就是不完整的。每个上线指标都需要一个触发条件、一个负责人和一个首个诊断查询。

告警 示例触发条件 首要问题 立即行动
Accepted-outcome burn 快速和缓慢的错误预算消耗 哪个工作流、发布、路由或租户发生了变化? 暂停发布或回滚相关发布
Latency regression p95 工作流延迟突破 SLO 队列、检索、模型还是工具延迟发生了变化? 绕过较慢的阶段或降低负载
Fallback surge 回退率超过其正常区间 主提供方是否发生故障、限流或超时? 检查规范化和原始提供方错误
Cost-per-outcome spike 成本上升而接受率保持平稳或下降 重试次数、输出长度或高成本路由是否在增加? 限制重试并恢复之前的路由策略
Quality-score drop 在线或抽样评估器通过率下降 提示词、检索、模型或评估器版本是否发生变化? 将发布批次与上一个健康批次进行比较
Tool uncertainty 副作用结果无法核对 工具是在超时或取消之前完成的吗? 停止自动重试并进入核对流程
Telemetry loss 预期的 span 或用量完整性下降 是仪表化出问题,还是导出背压在上升? 将缺失的遥测视为一次运行事件

值班视图应当能从告警直接链接到按工作流、发布、请求的模型、已解析路由和错误类别过滤后的 traces。若响应人员在事故期间必须手动重建这些过滤条件,则系统尚未具备上线就绪状态。

所有权与生产交接

在上线前将清单分配给明确命名的角色。没有明确决策人的共同所有制,通常会产生人人都能查看、却无人维护的仪表板。

职责 负责角色 所需交接证据
工作流结果定义 产品或 AI 功能负责人 接受结果规则和拒绝示例
Span 和指标模式 平台或可观测性负责人 版本化遥测契约和模式测试
路由和回退字段 网关或可靠性负责人 请求/解析路由和尝试验证
质量评估器 AI 工程负责人 评估器版本、数据集、阈值、已知限制
隐私和保留 安全或隐私负责人 数据分类、脱敏测试、保留审批
SLO 和告警 服务负责人 SLO 文档、值班规则、仪表板、运行手册
成本分摊 工程财务负责人 用量完整性和每个结果成本的核对
发布就绪度 工程负责人 已完成的验收矩阵和回滚触发条件

在上线后安排一次 30 天复盘。移除未使用的字段,将反复有用的调试查询提升为仪表盘视图,审查基数和存储成本,并在工作流行为发生变化时更新契约。

可复制的 AI 可观测性实施清单

将此清单用作上线门槛:

  • [ ] 定义每个工作流和可接受的客户结果。
  • [ ] 定义传输、容量、契约、质量、安全和业务故障。
  • [ ] 选择可用性、质量、延迟和每次结果成本的 SLI。
  • [ ] 批准包含必需、可选和禁止字段的版本化遥测契约。
  • [ ] 为每个用户可见的工作流创建一个根 trace。
  • [ ] 让上下文在队列、工具、检索和网关之间传递。
  • [ ] 记录请求的和已解析的提供商/模型路由。
  • [ ] 为每次重试和回退尝试创建单独的 span。
  • [ ] 捕获队列时间、首 token 时间和总延迟。
  • [ ] 捕获提供商报告的 token 使用量和归一化成本。
  • [ ] 对 prompts、工具、检索索引、策略、路由和评估器进行版本管理。
  • [ ] 记录检索引用、新鲜度、授权和 grounding 结果。
  • [ ] 记录工具授权、幂等性、结果和副作用状态。
  • [ ] 将用户反馈和离线评估结果与 traces 关联。
  • [ ] 将遥测分类为元数据、派生信号或原始内容。
  • [ ] 在导出前对密钥和敏感字段进行脱敏。
  • [ ] 按数据类别应用单独的保留和访问策略。
  • [ ] 避免在指标标签中使用高基数值。
  • [ ] 针对影响用户的 SLO 和错误预算消耗设置告警。
  • [ ] 标注发布并比较金丝雀与对照组。
  • [ ] 运行故障、隐私、采样和导出器宕机场景演练。
  • [ ] 为发布门禁保存验收测试证据和 trace ID。
  • [ ] 使用一个加权试点评分卡比较可观测性平台。
  • [ ] 为结果、schema、隐私、SLO、质量和成本指定负责的所有者。
  • [ ] 将每个需要值班响应的告警链接到首响 runbook 和 trace 查询。

常见的 AI 可观测性错误

在没有数据策略的情况下记录 prompts

原始 prompts 在调试期间看起来很有用,但它们可能包含客户数据、密钥、受版权保护的材料或受监管信息。请从元数据开始,只在有正当理由时才启用受控内容捕获。

按每次请求而不是按结果来衡量成本

一个验证失败的廉价请求并不便宜。重试、回退和人工纠正都应计入工作流成本。同样的原则也适用于 prompt 缓存 ROI:优化被接受的任务,而不是孤立的 token 速率。

将每次模型调用都视为独立事件

Agent 和 RAG 系统是工作流。如果模型、检索和工具 spans 没有关联,团队就无法重建因果关系。

依赖单一提供商仪表盘

提供商仪表盘对于上游使用量和错误很有用,但它们看不到你的完整应用结果、检索系统、工具执行、用户反馈或跨提供商回退路径。

在定义决策之前就为一切埋点

遥测有运行成本。每个字段都应支持调试、告警、评估、治理或优化决策。删除没人使用的字段。

AI 网关在何处发挥作用

LLM 网关可以作为有用的关联与策略边界,因为多个应用和提供商都会经过这一个控制点。它可以在将遥测导出到可观测性栈之前,统一路由、尝试、用量、延迟和错误元数据。

网关并不是完整的解决方案。应用代码仍然负责工作流结果、检索上下文、工具语义、用户反馈和业务转化。最强的设计是将网关遥测与这些应用层信号结合起来。

Flatkey 为多个 AI 模型提供一个兼容 OpenAI 的访问层。如果你的团队正在整合提供商集成,了解 Flatkey,并使用这份清单来定义围绕你的应用和路由层的遥测契约。

常见问题

我应该先为 AI 可观测性实施什么?

先从AI 可观测性实施清单开始:为每个客户工作流设置一个根 trace、模型尝试子 span、请求和解析后的模型字段、延迟、用量、标准化错误,以及一个已接受结果信号。如果你的隐私政策允许,再添加原始提示词捕获。

OpenTelemetry 对 LLM 可观测性来说够用吗?

OpenTelemetry 为 traces、metrics 和 logs 提供了与传输无关的基础,以及不断演进的生成式 AI 语义约定。你仍然需要工作流定义、评估、隐私控制、SLO、仪表板和事件响应流程。

提示词和响应应该存储在 traces 中吗?

默认不应该。先使用元数据、版本、哈希和派生质量信号。只有在受控系统中、具备明确目的、访问策略、保留期限和删除流程时,才存储原始内容。

哪些 AI 可观测性指标最重要?

先从已接受完成率、质量通过率、端到端 p95 延迟、流式输出的首个 token 时间、回退率以及每个已接受结果的成本开始。等这些指标可信之后,再添加工作流特定指标。

我如何监控多个 AI 提供商?

在各提供商之间使用一套稳定的遥测 schema。记录每次尝试的请求路由和解析后的提供商/模型,在不丢弃原始提供商代码的情况下标准化错误,并将所有尝试关联到同一个工作流 trace 下。

权威参考