AI 应用可观测:LLM 调用的追踪与评估

传统可观测管的是"系统没挂",AI 应用要管的更多:“回答变差了” 这种问题,日志里根本没有——它不是报错,是质量退化。LLM 应用的可观测是三层:追踪(调用链)→ 成本(token 审计)→ 质量(回答评估)

一、先看传统监控为什么不够

A I t P o r k o e m 5 n p 0 t 0 / 2 s " / " " "

AI 可观测的核心:把"LLM 的每一次调用"变成可回放、可评估、可对比的数据。

二、第一层:追踪(Trace)

记录什么

每个 LLM 调用记录完整链路:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
{
  "trace_id": "abc123",
  "timestamp": "...",
  "agent": "interviewer",
  "model": "gpt-4o",
  "prompt": {            // 完整 Prompt(System + User + 预填)
    "system": "...",
    "user": "...",
    "prefill": "..."
  },
  "response": "...",
  "usage": { "prompt_tokens": 1200, "completion_tokens": 350 },
  "latency_ms": 1800,
  "metadata": { "session_id": "s-001", "user_id": "u-1" }
}

为什么必须存完整 Prompt 和 Response:AI 问题是"改了 Prompt 效果变差",没有历史 Prompt 就没法对比。LLM 调用的日志不是日志,是实验数据。

工具

  • 开源:Langfuse、LangSmith、Phoenix(Arize)
  • 自建:Prometheus + 自定义维度(轻量)
  • 我们的做法:记录进 ClickHouse(检索快),核心调用全量存

三、第二层:成本审计

token 是钱,要有账本

/ = Σ / ( A g e n × t t o k e n )

关键指标

指标 含义 异常信号
单次调用成本 每请求 token 花费 突然翻倍 = Prompt 膨胀
token/回答比 输入 vs 输出 输入暴涨 = 上下文泄漏
重试率 调用失败的占比 模型侧/网络问题
缓存命中率 Prompt 缓存的占比 命中低 = 浪费

最值得盯的单用户会话成本——一个用户聊 50 轮,上下文越滚越长,每轮 token 都在涨,最后的对话可能比前面全部还贵。会话成本失控是 AI 应用亏损的头号原因

四、第三层:质量评估(最难的)

自动评估

1 2 3 . . . L L M - a s A - I J u d g e [ S T A T E ] / R / A G

人工标注

5 %

线上指标

三层结合:规则兜底(格式)、LLM 评分(质量)、人工校准(趋势)、业务指标(最终效果)。

五、A/B:可观测的终极形态

AI 应用的优化全靠 A/B——改 Prompt、换模型、调参数,都要有数据对比:

线 1 - 2 P r o m / p t v s / o r P / r o m p t

前提:第一层的 Trace 要带版本号(Prompt 版本、模型版本)——没有版本的可观测,A/B 无从谈起

六、落地清单

T r a P c r e o / + m / P p r L t o / L / m A M p g - t e a / n s R t - / e J s u T p d r o g a n e c s e e + / u s a A g / e B /

总结

AI 应用可观测的核心认知:

  1. 传统监控管"挂没挂",AI 可观测管"好不好、贵不贵"
  2. Trace 是实验数据:存完整 Prompt/Response/版本,才有对比和 A/B
  3. 成本是第二战场:token 是钱,会话成本失控是隐形亏损
  4. 质量评估是闭环:规则 + LLM 评分 + 业务指标三层

AI 应用不可观测 = 在黑暗里调参。有了追踪、成本、评估三层,每次优化都是"数据说话",不是"感觉对了"。