观测 · OBSERVABILITY

先能看见,才谈改进

业务系统和 AI Agent 都适用同一套方法论:埋点 → 指标 → 看板 → 告警 → 复盘。差别只在观测对象——业务流程看漏斗,Agent 看链路与质量。这一页把 Agent 观测的概念体系补全。

跨行业通用 · 不属于外贸资料库 · 与 /define、/skills 互通

PART A

A · 理解:为什么需要观测

看完你能判断:自己现在有没有真的观测,还是只有一堆漂亮的图。

A1共用方法论:五步闭环

业务观测和 Agent 观测用的是同一套骨架,只是观测对象不同。

1埋点

先定义事件字典:哪些动作值得记。不要只记页面浏览——要记关键动作(CTA 点击、表单提交、Agent 调用)。

2指标

把事件换成可比的口子:转化率、成功率、P95 延迟、单次成本。**口径必须先写死**,否则每周的数都对不上。

3看板

一屏看健康度。看板只放你每天真会看的 5–8 个数,多了就没人看。

4告警

只在异常时打扰人。告警必须有阈值和负责人,否则告警疲劳 = 等于没有告警。

5复盘

周期回看并把结论反哺:更新事件字典、补评测集、改护栏。**不复盘的观测只是仪表盘装饰。**

铁律:没有数据就不许改。改完无法证明有效还是无效,等于白改。

A2两条线

同一套骨架,两种对象。先看差别,再进入 Agent 部分。

业务观测

对象:用户行为与业务流程

看什么:漏斗、转化、流失点

典型指标:UV / CTA 点击率 / 提交率 / 收到率

判断标准:数值可比对、可归因

Agent 观测

对象:一次调用的全链路与输出质量

看什么:每一步 tool call、prompt 版本、成本、延迟、错在哪

典型指标:任务成功率 / 幻觉率 / P95 延迟 / 单次成本 / 评测集得分

判断标准:不只是「通不通」,而是「好不好」

A3为什么 Agent 需要另一套观测

传统监控看「通不通」,Agent 还要看「好不好」——这是本质差别。

01

输出不确定

同一个输入两次可能给不同结果。所以不能只测「有没有返回」,必须测「质量稳不稳定」。

02

多步链路

一次请求往往是一棵树:检索 → 工具调用 → 重试 → 模型 → 汇总。只看见最终输出,你永远不知道错在哪一步。

03

成本与延迟随链路变化

多一轮重试、多一次检索,成本和耗时就翻倍。必须把 token / cost / latency 记进链路。

04

改动影响面大

改一句 prompt,可能修好一类问题又坏掉三类。所以必须有回归门禁,不能凭感觉上线。

PART B

B · 概念:核心术语

查术语用。11 个概念覆盖从一次调用到一套评测。

B1Agent 观测核心概念(11 个)

从一次调用到一套评测,把术语和它们解决什么问题一次讲清。

概念
解决什么

Trace

一次完整调用的全链路(含每一步的输入输出、耗时、成本、错误)。

定位「到底错在哪一步」,而不是只知道结果错了。

Span

链路中的一步:一次检索、一次工具调用、一次分支判断。

把耗时和成本拆到步骤级,才知道该优化哪里。

Generation

一次模型调用的完整记录:prompt、输出、模型、token、成本、耗时。

回答「这次回答到底是哪个 prompt 的哪个版本产出的」。

Session / Thread

多轮会话的容器,把同一用户的多次调用串起来。

评估真实体验(用户是按会话感知的,不是按单次调用)。

Score

对一次输出的质量打分:人工评、规则评、模型评、或用户反馈(点踩)。

把「好不好」变成可比的数字,才能做趋势和对比。

Dataset(评测集)

一组固定用例,每条带期望输出或评分标准。

让改动有可复现的对照组——这是回归的前提。

Evaluation(评测)

在评测集上跑一遍,产出成功率、幻觉率等聚合指标。

回答「这次改动整体是变好还是变坏」。

Badcase

失败或低分的真实样例,是评测集最重要的原料。

把线上真实问题固化下来,防止重复踩坑。

Regression(回归)

改动后重跑同一评测集,与基线对比。

拦住「修好一个、坏掉三个」——上线的最后一道门。

Prompt 版本

每次改 prompt 都打版本号,和 trace 绑定。

指标变化能归因到具体改动;改坏了能立刻回滚。

在线指标 vs 离线评测

在线看真实分布(用户实际怎么问),离线看可复现对比(同一批用例)。

两者都要:只有在线无法归因,只有离线会脱离真实分布。
PART C

C · 实操:评测集与 badcase

照着做就能跑起来:先建 20 条评测集,再让每条 badcase 变成永久用例。

C1评测集怎么建

没有评测集,你对 Agent 的所有判断都是 anecdote(轶事),不是证据。

1

从哪来:四类来源

① 真实日志抽样(最重要,代表真实分布)② 边界/极端输入(超长、空、乱码、多语言)③ 已知 badcase ④ 对抗/注入(诱导越权、套取 prompt)。

2

规模:20 条起步

20 条就能发现大部分明显退化;100 条左右才有统计意义。**别一上来追求 1000 条**——维护不动的评测集等于没有。

3

标什么:能判定优先

优先标「有标准答案」的(可做准确率);没标准答案就标**评分维度**(相关性/完整性/语气/是否幻觉),每条写清「什么叫通过」。

4

谁标:先自己标一批

先自己标一批建立标准,再考虑外包/众包。**标注指南必须写下来**,否则多人标注标准会漂移,评测集就废了。

C2badcase 回流闭环

Agent 项目的进步速度,取决于 badcase 变成用例的速度。

1

收集

触发来源:用户点踩 / 低分 / 异常(报错、超时、超预算)/ 人工巡检抽样。

2

归类

分到问题类型:检索不准 / 工具用错 / 格式不符 / 幻觉 / 该拒答没拒。分类才能看出系统性问题。

3

入集

把这条 badcase 固化成一条永久用例(这是最关键的一步)。

4

定位

打开 trace,找出是哪一步出的问题——别靠猜,看链路。

5

修

对应手段:改 prompt / 换或补工具 / 改检索 / 加兜底。改完打 prompt 版本号。

6

回归

重跑全量评测集,对比基线:整体得分、新增失败项、成本与延迟变化。

7

复盘

更新标注指南、补护栏(如「必须拒答 X」)、把结论写进反模式清单。

铁律:每个 badcase 必须沉淀成一条评测用例。不沉淀 = 同一个坑你会反复踩。

C3badcase 分类体系(5 类)

先会分类,才能看出系统性问题而不是零散救火。

类别
典型信号
常见修法
检索类
答非所问、引用了错的文档、该知道的不知道
补文档、改切分、加召回重排;检索未命中必须有兜底
工具类
调错工具、参数错、该调没调、不该调乱调
收紧工具描述、加参数校验、补 few-shot 示例
生成类
幻觉、越权承诺(价格/交期)、语气不对、格式不符
加硬约束、要求引用来源、改输出模板与降级话术
拒答类
该拒没拒(越权/注入)/不该拒却拒(正常问题被挡)
明确拒答白名单与话术,两边各补边界用例
工程类
超时、超预算、解析失败、重试风暴
加超时与重试上限、降级兜底、成本告警

可直接复制的模板

把这两段贴进你的仓库,从第一条开始填。

评测集用例 + badcase 档案
## 评测集用例模板
- id: E-001
- 来源: 真实日志 / 边界 / 对抗 / badcase
- 输入: <买家原话>
- 类型: 可判定 / 评分维度 / 硬约束
- 期望: <期望输出或行为>
- 判定标准: <什么叫通过,写死,不留解释空间>
- 关联 badcase: B-014(若来自 badcase)
- 备注: <为什么收录这条>

## badcase 档案模板
- id: B-014
- 日期: 2026-10-15
- 触发: 用户点踩 / 低分 / 异常 / 人工巡检
- 输入: <原始输入>
- Agent 输出: <实际输出>
- 期望: <应该是什么>
- trace 定位: <错在第几步>
- 归类: 检索 / 工具 / 生成 / 拒答 / 工程
- 严重度: 高 / 中 / 低
- 用例化: E-021(必须关联一条评测用例,否则这条白记了)

C4回归怎么跑(门禁)

改 prompt / 换模型 / 改工具之后,必须重跑评测集再上线。

01

改前:存基线

记录当前评测集得分、P95 延迟、单次成本。没有基线就无法判断变化。

02

改后:同集重跑

同一批用例、同一套评分标准。改了评分标准就等于换了一把尺子,不可比。

03

看三件事

① 整体得分是否提升 ② **是否新增失败项**(修好一个坏三个是常态)③ 成本与延迟变化。

04

门禁

任一关键指标下降超过阈值 → 不许上线。阈值先粗后细(例如:成功率降 >5% 即拦)。

PART D

D · 落地:工具与起步

选型、避坑、以及一个下午能做完的起步动作。

D1工具选型

选型的四个维度:能否自托管(数据合规)、有没有评测集与评分、能否接现有栈、成本。

Vercel Analytics

业务侧零配置统计,托管在 Vercel 时直接可用。只覆盖基础流量,不含自定义漏斗事件。

Umami / Plausible

隐私友好、可自托管的轻量统计。适合要自有数据或合规要求高的场景。

PostHog

产品分析向,漏斗/留存/会话回放能力强,可自托管。业务观测要做得深时选它。

Langfuse

Agent 侧:trace + span + generation + score + 评测集,开源可自托管。是「一套走完方法论」最贴近的选择。

LangSmith

Agent 侧托管方案,评测与调试体验成熟;数据出境与成本需评估。

自研(日志 + 表 + 看板)

最朴素但可控:把 trace 写进表,用现成 BI 出图。适合数据不能出境、或要深度定制。

D2反模式:这些坑很常见

出现这些情况,说明你的观测是假的。

只记录最终输出,不看 trace
结果错了却不知道错在哪一步,只能瞎改 prompt。
只看成功率,不看成本与延迟
上线后账单和体验一起爆炸,才发现多出来的重试。
评测集只有 happy path
离线分数很好看,一上真实输入就露馅。
badcase 不回流
同一个坑反复踩,团队一直在救火。
没有 prompt 版本就改
改坏了无法回滚、指标变化无法归因。
一上来就要做「数据中台」
做不完,且做的过程里没有产生任何判断。先从三个问题开始。

D3最小起步

别一上来做中台。先做到能回答三个问题:从哪来?卡在哪?错了几次?

1

接上 trace

目标:任何一次调用,你都能看到它走了哪几步、花了多少钱、错在哪。

2

建 20 条评测集

从真实日志抽样,覆盖你最常遇到的 3–5 类问题。先小,先能用。

3

每天收 badcase

哪怕一天只收 1 条,每条都变成永久用例。坚持两周就有 10+ 条真实护栏。

4

改前后各跑一次

形成习惯:任何 prompt/模型/工具改动,都必须有改前基线和改后对比。

需求定义

先把问题定义清楚

FDE 实战

交付循环与能力地图