第 6 章 — AI 可观测性与追踪
《LLM Primer V: Building Real-World LLM Applications》 章节走读的第六篇。这一章把一次用户 query 当作一棵因果树,不是一条请求日志,再展示要让这棵树可读需要追踪什么。
这一章为什么存在
一个 LLM 系统里的一次用户 query,会散开成一棵树:一次 query 改写、针对两个索引的三次检索、一次重排、一次规划器调用、四次工具调用、一次汇总,以及最后的一次生成。把这棵树塌成 “请求收到、响应发出”,真相就没了。用户抱怨答错了的时候,团队说不上来是检索漏了对的 chunk、规划器挑了错的工具、工具返回了错的数据,还是生成器无视了给到它的东西。第 6 章围绕这个形状把可观测性重新搭起来。经典的分布式追踪是底座;OpenTelemetry 的 GenAI 语义约定是让模型调用成为一等公民的扩展;LLM 专有的指标 —— TTFT、TPOT、每次调用成本、法官打分 —— 是把一条 trace 变成团队能据以运营的东西的那部分。
6.1 从请求日志到因果 trace
要迈出的一步是从扁平请求日志走到嵌套 span。OpenTelemetry 加 GenAI 语义约定,给 LLM 调用、embedding、检索、工具调用一份可移植、供应商中立的 span 形状。智能体的循环成了根 span;每一次迭代成了子 span;每一次 LLM 调用、工具调用、检索都嵌套在下面。多轮会话变成树的树,由 span link 建模跨轮共享的状态 —— 第三轮的摘要在第七轮还在被依赖的那种。价值在第一次调试时就冒出来:“检索器给这个 query 出的是哪一块 chunk?生成器是不是真的引用了它?” —— 这个问题扁平日志除了考古一番否则答不了,现在只需要看一条 trace。span 的形状跨厂商可移植,因为它是 OpenTelemetry 标准,不是某种专有格式,从 LangSmith 换到 Langfuse 就是一次路由变更,不是一次重写。
6.2 真正重要的指标 —— TTFT、TPOT、成本、质量
总延迟不够。首 token 时间(TTFT)在流式响应里主宰用户感知的速度 —— 用户盯的是第一个字符,不是最后一个 —— TTFT 应该跟总延迟一起挂在 span 上。单输出 token 时间(TPOT)主宰长响应的手感,用户说 “到最后感觉很慢” 时,感知的就是它。成本作为一等属性挂在 span 上,由调用点根据一份带版本的价目表算出,这样即使日后价格变了,历史 trace 讲的仍是真相。质量信号 —— 用户的一次踩、评估管道的一次法官打分、外壳里一次回退触发 —— 作为属性挂在 trace 上,这就是团队把一个坏答案跟产出它的那次具体模型调用和检索关联起来的方式。这些指标能挂在看板上,但更高价值的收益是它们可以按 trace 查询,一次回归可以用 “高成本 + 低法官分” 过滤出来,肇事路径立刻浮上来。
6.3 平台与闭环
眼下的格局里有四家平台。LangSmith 是 LangChain 集成的选项,如果应用已经在 LangChain 里就摩擦最小。Langfuse 是开源可自托管的选项,适合受监管部署和需要把 trace 留在自己边界内的组织。Arize Phoenix 有强的 embedding 分析,当诊断问题是 “哪些 query 落在了向量空间里错的区域” 时,它是对的工具。Helicone 以代理的方式挡在供应商 API 前面,是最低介入的集成方式,但只能看到 LLM 调用那一层。选择是运营层面的,不是质量层面的 —— 多数平台暴露的核心形状是一样的。价值更高的活是导出管道:负反馈的 trace、低法官分、回退触发,都成了候选评估用例,精心整理进评估集,由下一次发布的 gate 卡住。这条闭环就是把生产变成开发的老师。
第 6 章为后面铺了什么
trace 也是安全事件浮上台面的地方。一次成功的 prompt 注入,在 trace 树里看起来就是一次预期之外的工具调用。数据外泄看起来就是一次检索 span,后面模型把它的 chunk 当指令服从了。一段被漏出去的 system prompt,在一次完成 span 里显示为文本跟上方 prompt 存在不合理的重合。第 7 章把同一层追踪基座对准安全学科 —— OWASP LLM Top 10 作为 2025 年中期的词汇表、这个词汇表想命名的直接与间接注入的分类,以及一份强制 “权限必须匹配来源信任度” 的四层缓解矩阵。
明天 — 第 7 章:LLM 安全与护栏。那份回答 “本来该发生什么、谁被允许让它发生” 的安全姿态 —— 而追踪那一层刚让这个问题变得可问。