idea · 仅 crs13 预览环境显示,正式站不会发布

AI 可观测 AI 可观测AI 监控LLM ObservabilityAI Gateway质量评估

我要设计一个 AI 监控平台,第一张图应该怎么画

核心判断

AI 监控平台不能只是在传统监控上多加几个 token 指标。

真正要解决的问题是:一次 AI 调用从请求进入、模型调用、Prompt 拼装、RAG 召回、Tool 执行、业务结果、质量评估到安全审计,能不能被同一条链路串起来。

没有贯穿全链路的 trace_id,AI 监控平台最后会变成几块互不相认的看板。

传统监控能告诉你服务有没有挂、接口有没有报错、延迟有没有升高。AI 系统更麻烦的地方在于,很多问题没有 error。接口 200,延迟正常,成本正常,模型也正常返回,但业务结果已经错了。

所以 AI 监控的分层,不应该按组织分,也不应该按工具分。它应该按故障从“有声”到“无声”的路径分。

分层架构

L5  安全审计层
    谁在用、有没有被注入、有没有泄露、留痕全不全

L4  质量评估层
    这次输出到底好不好,和基线比有没有退化

L3  业务结果层
    任务有没有完成,字段全不全,业务规则有没有遵守

L2  Prompt / RAG / Tool 层
    Prompt 用了哪版,召回了什么,工具调用成功没有

L1  模型调用层
    token、延迟、缓存、模型版本、成本、finish_reason

L0  基础可用性层
    endpoint 存活、GPU/显存、配额、排队深度、探活到首 token

L0 和 L1 是有声故障层。它们通常会带来错误码、延迟突增、429、重试、fallback、成本异常。

L2 是半无声层。Tool 超时可能有错误,但召回内容变差、context 被截断、Prompt 版本不一致,往往不会直接报错。

L3 和 L4 是无声退化层。系统全是 200,用户看到的结果却越来越差。

L5 是竖切所有层的安全审计轴。它不应该单独躲在另一个系统里,只在出事后查日志。它需要消费 L1 的输入输出、L2 的召回文档和工具调用、L3 的业务动作,给每条 trace 打安全标签。

L0 基础可用性层

这一层回答的问题很朴素:模型服务是不是真的能工作。

传统探活只看 HTTP 或进程状态,对 AI 不够。一个 endpoint 可以返回 200,但模型排队很深、配额快满、GPU OOM 后吞吐下降,用户体感已经很差。

需要采集的字段:

{
  "endpoint": "provider-a-shanghai-1",
  "region": "cn-east",
  "provider": "provider_a",
  "gpu_util": 0.82,
  "vram_used": 0.91,
  "queue_depth": 128,
  "rate_limit_remaining": 3200,
  "health_token_latency_ms": 850
}

核心指标:

典型异常:

这一层和上一代基础设施监控最像,但探活方式要变。AI 的健康检查不能只问“接口在不在”,还要问“能不能在合理时间内吐出第一个 token”。

L1 模型调用层

这一层记录一次模型调用本身。

需要采集的字段:

{
  "trace_id": "trc_123",
  "model": "gpt-4o",
  "model_version": "gpt-4o-2024-08-06",
  "provider": "openai",
  "channel": "official",
  "prompt_tokens": 1800,
  "completion_tokens": 420,
  "cached_tokens": 900,
  "ttft_ms": 480,
  "tpot_ms": 28,
  "total_latency_ms": 3100,
  "http_status": 200,
  "finish_reason": "stop",
  "retry_count": 1,
  "fallback_path": ["anthropic", "openai"],
  "cost": 0.012
}

核心指标:

典型异常:

这一层是 AI 监控的地基。它告诉你模型调用有没有异常,但还不能告诉你输出有没有真的满足业务要求。

L2 Prompt / RAG / Tool 层

这一层进入 AI 应用自己的逻辑。

模型调用前,系统做了什么?用了哪版 Prompt?召回了哪些文档?context 有没有被截断?模型调用了哪个工具?工具入参对不对?

需要采集的字段:

{
  "trace_id": "trc_123",
  "prompt_template_id": "customer_refund_reply",
  "prompt_version": "v7",
  "rag_query": "退款政策",
  "retrieved_doc_ids": ["doc_18", "doc_22", "doc_31"],
  "retrieval_scores": [0.83, 0.79, 0.74],
  "recall_count": 3,
  "rerank_scores": [0.91, 0.87, 0.65],
  "context_tokens": 1200,
  "truncated_docs": ["doc_31"],
  "tool_name": "order_lookup",
  "tool_status": "success",
  "tool_latency_ms": 120
}

核心指标:

典型异常:

这一层是传统监控最难覆盖的地方。数据库查询成功,HTTP 也成功,但召回内容可能已经错了。

L3 业务结果层

这一层看 AI 输出有没有满足业务契约。

客服回复、合同摘要、销售线索提取、工单分类、代码生成,每个任务都应该有自己的业务校验。AI 输出不能只看“有没有文字”,还要看结构是否正确、字段是否完整、规则是否遵守、用户最后有没有采纳。

需要采集的字段:

{
  "trace_id": "trc_123",
  "task_type": "refund_reply",
  "business_id": "ticket_8891",
  "schema_valid": true,
  "required_fields_present": true,
  "format_valid": true,
  "business_rule_pass": true,
  "refused": false,
  "downstream_action": "sent",
  "user_action": "accepted"
}

核心指标:

典型异常:

AI 应用最常见的线上问题,通常不是接口报错。更常见的情况是,结果还能用,但越来越不好用。这一层就是把这种退化变成指标。

L4 质量评估层

这一层把“好不好”变成可监控的数字。

评估可以来自规则、LLM judge、人工标注、用户反馈,也可以来自固定回归测试集。它既用于上线前的发布门禁,也用于上线后的持续抽样。

需要采集的字段:

{
  "eval_id": "eval_456",
  "trace_id": "trc_123",
  "eval_type": "judge",
  "reference_set_id": "refund_reply_baseline_v3",
  "score": 0.89,
  "dimension_scores": {
    "factuality": 0.92,
    "relevance": 0.88,
    "style": 0.90,
    "safety": 0.95
  },
  "baseline_score": 0.88,
  "delta": 0.01,
  "regression_flag": false,
  "human_label": null
}

核心指标:

典型异常:

这层既是监控,也是测试。上线前跑回归,上线后按 trace_id 抽样持续评估。

L5 安全审计层

安全审计不应该是单独的孤岛。它要竖切所有层。

输入里有没有敏感信息?Prompt 有没有注入风险?RAG 召回的文档用户有没有权限?Tool 有没有越权执行?输出有没有泄露字段?出事后能不能顺着 trace 查回来?

需要采集的字段:

{
  "trace_id": "trc_123",
  "user_id": "u_001",
  "tenant_id": "tenant_acme",
  "pii_detected": true,
  "redaction_applied": true,
  "injection_detected": false,
  "jailbreak_score": 0.12,
  "retrieved_doc_permission_ok": true,
  "tool_permission_ok": true,
  "output_leak_flag": false,
  "policy_id": "policy_customer_data_v2",
  "audit_log_id": "audit_789"
}

核心指标:

典型异常:

安全审计层消费的是全链路数据。它不只是多加一张“安全看板”,还要给每一次 AI 调用补上身份、权限、策略和留痕。

一条完整调用怎么串起来

以客服工单自动回复为例。

① L0
网关选择 endpoint-A,配额够,探活到首 token 正常。

② L1
生成 trace_id=T1。
调用 model=X,version=2026-05。
prompt_tokens=1800,其中 1200 是 RAG context。
ttft=400ms,finish_reason=stop,cost=0.012。

③ L2
prompt_version=v7。
rag_query=“退款政策”。
召回 5 篇文档,最终引用 doc_18 / doc_22。
调用 order_lookup 工具成功。

④ L3
task_type=refund_reply。
必填字段:金额、时效、凭证,全部存在。
business_rule_pass=true。
客服未编辑,直接采纳。

⑤ L4
近线抽样评估。
事实分 0.92,相关性 0.88,风格 0.90。
相对基线 delta=+0.01,没有退化。

⑥ L5
输入包含订单号,已脱敏。
召回文档权限通过。
工具调用权限通过。
审计链完整。

如果某天质量分下降,顺着 trace_id 查:

症状可能出现在顶层,根因经常藏在底层。

这就是分层设计的价值。

架构图

flowchart TB
    REQ[一次请求 trace_id = T1]

    subgraph L0[L0 基础可用性层]
        A0["endpoint 存活 / GPU 显存 / 配额 / 排队深度<br/>探活到首 token 延迟"]
    end

    subgraph L1[L1 模型调用层]
        A1["model_version / token / cache<br/>TTFT / TPOT / finish_reason / cost"]
    end

    subgraph L2[L2 Prompt · RAG · Tool 层]
        A2["prompt_version / 召回文档与分数<br/>引用命中率 / tool 成功率 / context 截断"]
    end

    subgraph L3[L3 业务结果层]
        A3["schema 校验 / 字段完整 / 规则遵守<br/>拒答率 / 用户采纳 / 编辑 / 转人工"]
    end

    subgraph L4[L4 质量评估层]
        A4["judge / 规则 / 人工<br/>维度分 / vs 基线 delta / 漂移 / 回归门禁"]
    end

    subgraph L5[L5 安全审计层]
        A5["注入 / PII / 越权 tool / 数据驻留<br/>审计链完整率"]
    end

    REQ --> L0 --> L1 --> L2 --> L3
    L3 -. trace_id join .-> L4

    L5 -. 读输入输出并打安全标签 .-> L1
    L5 -. 检查召回文档权限 .-> L2
    L5 -. 检查敏感输出和业务动作 .-> L3

    L4 == 反哺发布门禁 ==> L2
    A4 -. 症状常在顶层可见 .-> A1
    A1 -. 根因常在底层发生 .-> A4

后续拆篇方向

这篇可以作为总览篇,先把全路径立住。

后面再拆:

  1. L0 + L1:基础可用性和模型调用层,讲 token、延迟、缓存、版本、成本、截断、fallback。
  2. L2:Prompt / RAG / Tool 可观测,重点讲召回漂移和工具调用。
  3. L3 + L4:业务结果和质量评估,讲如何把“变差”变成指标。
  4. L5:安全审计如何竖切所有层。

写作前需要查证的点

正式成文前,需要查证:

这些会影响后续 L1 和 L2 的细节。总览篇可以先讲架构,正式深入单层时再逐项核对。

如果你正在建设企业 AI Gateway、多模型管理、可观测、评估或安全审计体系,欢迎交流。