可观测性 - 如何看清 Agent 的生产行为? ​

一、第一性问题 ​

1.1 什么是 Agent Observability(Agent 可观测性)? ​

Observability(可观测性)解决的核心问题是:

Agent 在生产环境里执行以后,我们能不能基于系统留下的 Telemetry(遥测数据),完整重建“发生了什么、为什么发生、问题发生在哪一步、影响范围有多大”。

传统 Backend(后端服务)的执行路径通常主要由代码提前确定。

Agent(智能体)则不同。

用户往往只给一个 Goal(目标),后面的很多执行路径由 Agent(智能体)在 Runtime(运行时)动态决定:

text
User Goal(用户目标)
↓
Intent / Context(意图 / 上下文)
↓
Planning(规划)
↓
LLM Call(大语言模型调用)
↓
Tool Selection(工具选择)
↓
Tool Arguments(工具参数)
↓
Tool Result(工具结果)
↓
Replanning(重新规划)
↓
State / Memory(状态 / 记忆)
↓
Handoff(任务移交)
↓
Another Agent(其他智能体)
↓
Final Response(最终响应)
逐项注释(16)
User Goal
用户目标:用户真正希望系统完成的业务结果。
Intent
Intent:意图。
Context
Context:上下文。
Planning
Planning:规划。
LLM
LLM:大型语言模型。
Call
Call:调用。
Tool Selection
工具选择:判断当前步骤应调用哪个工具。
Tool Arguments
工具参数:传给工具执行的结构化输入。
Tool Result
工具结果:外部工具执行后返回的输出。
Replanning
Replanning:重新规划。
State
State:状态。
Memory
Memory:记忆。
Handoff
Handoff:移交。
Another
Another:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Agent
Agent:智能体。
Final Response
最终响应:系统完成任务后返回给用户的可见回复。

其中任何一步都可能产生问题。

更关键的是:

Agent Failure(智能体失败)不一定表现为传统系统 Error(错误)。

例如:

text
HTTP 200(HTTP 请求成功)
Tool API 200(工具接口请求成功)
LLM API 200(大语言模型接口请求成功)
逐项注释(4)
HTTP
HTTP:超文本传输协议。
Tool
Tool:工具。
API
API:应用程序编程接口。
LLM
LLM:大型语言模型。

从传统系统角度看:

一切正常。

但实际 Agent(智能体)可能已经:

  • 选择了错误的 Tool(工具)
  • 生成了错误 SQL(结构化查询语言)
  • Retrieval(检索)到了错误资料
  • 错误理解了 Tool Result(工具结果)
  • 出现 Agent Loop(智能体循环)
  • Handoff(任务移交)给了错误 Agent(智能体)
  • State(状态)被污染
  • Final Answer(最终答案)事实错误

传统 APM(Application Performance Monitoring,应用性能监控)可能认为:

系统健康。

但 Agent(智能体)已经发生业务失败。

因此,生产级 Agent Observability(Agent 可观测性)不能简单理解成:

“把日志打全。”

更准确的定义是:

把 Agent(智能体)的每一次行为转化成可重建、可关联、可度量、可诊断、并且最终可以采取行动的生产证据。

记忆点:

Observability(可观测性)的核心不是记录更多,而是出了任何问题之后,都有足够证据把事情完整还原出来。


1.2 Observability(可观测性)和 Monitoring(监控)有什么区别? ​

Monitoring(监控)更关注:

持续观察我们提前已经知道的问题。

例如:

  • Error Rate(错误率)超过 5%
  • P95 Latency(P95 延迟)超过 10 秒
  • Tool 429 Rate(工具限流率)超过 3%
  • Cost per Task(单任务成本)超过阈值

也就是说:

你已经知道自己想观察什么。

Observability(可观测性)更强调:

当一个事先没有预定义的问题发生时,系统是不是留下了足够的数据,让我们仍然可以推断系统内部发生了什么。

例如用户反馈:

“昨天 14:32,这个 Data Agent(数据智能体)给我的 GMV(商品交易总额)数字错了。”

你很可能没有提前建设一个:

“GMV(商品交易总额)回答错误 Dashboard(看板)”。

真正需要的是:

text
user_id(用户 ID)
↓
business_task_id(业务任务 ID)
↓
session_id(会话 ID)
↓
trace_id(追踪 ID)
↓
span_id(执行片段 ID)
↓
Tool Arguments(工具参数)
↓
Tool Result(工具结果)
↓
Agent Decision(智能体决策)
逐项注释(10)
user_id
user_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
ID
ID:唯一标识符。
business_task_id
business_task_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
session_id
session_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
trace_id
trace_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
span_id
span_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
Tool Arguments
工具参数:传给工具执行的结构化输入。
Tool Result
工具结果:外部工具执行后返回的输出。
Agent
Agent:智能体。
Decision
Decision:决策。

然后逐层还原事实。

所以:

Monitoring(监控)是 Observability(可观测性)的一种具体使用方式,但 Observability(可观测性)不等于 Monitoring(监控)。


1.3 Observability(可观测性)和 Evaluation(评测)有什么区别? ​

这一题必须和 Quality(质量)模块切清楚。

Observability(可观测性) ​

回答:

发生了什么?

它提供的是:

Evidence(证据)。

例如:

  • Agent(智能体)调用了哪个 Tool(工具)
  • Tool Arguments(工具参数)是什么
  • Tool Result(工具结果)是什么
  • 使用了哪个 Model(模型)
  • 消耗多少 Token(模型计算单位)
  • 发生了几次 Handoff(任务移交)

Evaluation(评测) ​

回答:

这样做到底好不好、对不对?

它提供:

Judgment(判断)。

例如:

  • Tool Selection Score(工具选择得分)为 0
  • Correctness(正确性)为 0.4
  • Trajectory Score(执行轨迹得分)为 0.6

所以可以记:

Observability(可观测性)提供 Evidence(证据),Evaluation(评测)提供 Judgment(判断)。

生产系统里二者会连接:

text
Trace(执行追踪)
↓
Evaluator(评测器)
↓
Score(评测得分)
↓
Monitoring / Alert(监控 / 告警)
↓
Bad Case(坏案例)
逐项注释(6)
Trace
Trace:调用轨迹。
Evaluator
Evaluator:评估器。
Score
Score:分数。
Monitoring
Monitoring:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Alert
Alert:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Bad Case
失败样本:线上或评测中表现不符合预期的具体案例。

但本章只讨论:

Eval Score(评测得分)如何作为一种 Semantic Signal(语义信号)被 Observability(可观测系统)消费。

至于:

  • Rubric(评测标准)
  • Judge Calibration(评测器校准)
  • Gold Set(黄金数据集)
  • Eval Leakage(评测泄漏)

仍然属于 Quality(质量)模块。


1.4 Agent Observability(Agent 可观测性)的核心模型是什么? ​

我建议把生产级 Agent Observability(Agent 可观测性)抽象成五个系统能力:

Reconstructability(可重建性) Correlatability(可关联性) Measurability(可度量性) Diagnosability(可诊断性) Actionability(可行动性)

Reconstructability(可重建性) ​

回答:

一次 Agent Run(智能体执行)到底经历了什么?

Correlatability(可关联性) ​

回答:

不同 Agent(智能体)、Worker(工作进程)、Tool(工具)、时间段产生的数据,能不能串回同一个业务任务?

Measurability(可度量性) ​

回答:

单次 Trace(追踪)能不能进一步聚合成系统级 Metrics(指标)?

Diagnosability(可诊断性) ​

回答:

出现问题以后,能不能找到 First Divergence(第一处偏离点)和 Root Cause(根因)?

Actionability(可行动性) ​

回答:

发现问题以后,能不能进一步触发 Alert(告警)、Bad Case(坏案例)、Evaluation(评测)、Fix(修复)和 Regression(回归验证)?

因此:

Agent Observability(Agent 可观测性) = 可重建 + 可关联 + 可度量 + 可诊断 + 可行动


1.5 Agent Observability(Agent 可观测性)的主链路是什么? ​

整个模块沿着下面这条生产链理解:

text
Model(建模)
↓
Instrument(采集 / 埋点)
↓
Correlate(关联)
↓
Aggregate(聚合)
↓
Monitor(监控)
↓
Detect(异常发现)
↓
Diagnose(诊断)
↓
Feedback(反馈)
逐项注释(8)
Model
Model:模型。
Instrument
Instrument:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Correlate
Correlate:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Aggregate
Aggregate:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Monitor
Monitor:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Detect
Detect:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Diagnose
Diagnose:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Feedback
Feedback:反馈。

中文压缩:

建模 → 采集 → 串联 → 聚合 → 监控 → 发现 → 诊断 → 反馈

为什么第一步是:

建模?

因为如果一开始:

  • Session(会话)边界设计错误
  • Trace(追踪)边界设计错误
  • Span(执行片段)粒度设计错误
  • Span Name(执行片段名称)不稳定
  • Business ID(业务 ID)没有建立关联

那么即使数据大量采集:

真正出现线上问题时依然可能无法定位。


1.6 阶段总结 ​

Observability(可观测性)的第一性问题不是:

我们有没有日志平台?

而是:

生产环境中出现任何 Agent(智能体)异常时,我们有没有能力完整重建执行过程,并最终解释为什么。


二、Telemetry(遥测)基础理论 ​

2.1 Logs(日志)、Metrics(指标)、Traces(追踪)、Events(事件)有什么区别? ​

这是基础面试题。

Signal(遥测信号) 核心问题 Agent(智能体)示例
Logs(日志) 某个具体事件发生了什么? Tool(工具)调用失败,错误码为 429
Metrics(指标) 某类行为整体发生得怎么样? Tool Error Rate(工具错误率)为 3%
Traces(追踪) 一次完整任务经历了什么? Agent(智能体)→ Model(模型)→ Tool(工具)→ Model(模型)
Events(事件) 某一时间点发生了什么事实? Handoff triggered(触发任务移交)

这四种信号不是:

四选一。

而是:

互补的 Telemetry Signals(遥测信号)。


2.2 Span(执行片段)和 Event(事件)有什么区别? ​

Span(执行片段)更适合:

有开始时间、结束时间以及 Duration(持续时间)的 Operation(操作)。

例如:

text
execute_sql(执行 SQL)
start_time(开始时间)
↓
SQL Execution(SQL 执行过程)
↓
end_time(结束时间)
逐项注释(5)
execute_sql
函数或工具名:执行传入的 SQL 语句。
SQL
SQL:结构化查询语言。
start_time
start_time:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
Execution
Execution:执行。
end_time
end_time:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

Event(事件)更适合:

某一个时间点发生的离散事实。

例如:

text
retry_triggered(触发重试)
approval_received(收到审批)
handoff_triggered(触发任务移交)
budget_exhausted(预算耗尽)
逐项注释(4)
retry_triggered
retry_triggered:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
approval_received
approval_received:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
handoff_triggered
handoff_triggered:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
budget_exhausted
budget_exhausted:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

所以:

有生命周期的操作适合用 Span(执行片段)。

瞬时事实适合用 Event(事件)。


2.3 为什么 Agent(智能体)还需要 AI Semantic Signal(AI 语义信号)? ​

传统 Telemetry(遥测)可能显示:

text
status(执行状态) = success(成功)
latency(延迟) = 3 seconds(3 秒)
error(系统错误) = false(无系统错误)
逐项注释(6)
status
status:状态。
success
success:成功。
latency
latency:延迟。
seconds
seconds:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
error
error:错误。
false
false:错误的或假阳性的。

但是:

这些并不能告诉你最终答案是否正确。

所以 Agent Observability(Agent 可观测性)通常还需要:

AI Semantic Signals(AI 语义信号)

例如:

  • Online Eval Score(在线评测得分)
  • User Feedback(用户反馈)
  • Human Annotation(人工标注)
  • Task Success(任务成功率)
  • Escalation Rate(升级 / 转人工率)

但要注意:

这些只是 Observability(可观测性)消费的信号。

至于:

Score(得分)具体如何产生,

仍然属于 Quality(质量)。


2.4 阶段总结 ​

传统 Observability(可观测性)更多回答:

系统有没有正常运行?

Agent Observability(Agent 可观测性)进一步要回答:

Agent(智能体)有没有以异常方式运行,以及这些异常是否正在影响真实业务结果。


三、Session(会话)、Trace(追踪)与 Span(执行片段) ​

3.1 Session(会话)、Trace(追踪)、Span(执行片段)分别是什么? ​

最重要的基础记忆:

Session(会话) = 长期业务上下文

Trace(追踪) = 一次完整逻辑执行

Span(执行片段) = 一次完整执行中的一个具体步骤

Session(会话 / 任务上下文) ​

Session(会话)解决:

哪些 Trace(追踪)属于同一段长期交互?

例如企业客服 Agent(智能体):

text
Session(会话): customer_case_123(客户案例 123)

├─ Trace 1(第 1 次完整执行)
│  用户:为什么重复扣费?
│
├─ Trace 2(第 2 次完整执行)
│  用户:帮我退掉重复的一笔
│
└─ Trace 3(第 3 次完整执行)
   用户:退款多久到账?
逐项注释(3)
Session
Session:会话。
customer_case_123
customer_case_123:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
Trace
Trace:调用轨迹。

有了 Session(会话),可以分析:

  • 整个问题经历多少轮才解决
  • Agent(智能体)是否遗忘前文
  • Session Total Token(会话总 Token)
  • Session Total Cost(会话总成本)
  • 是否发生 Handoff(任务移交)
  • Resolution Status(问题解决状态)

一句话:

Session(会话)看完整用户 / 业务 Journey(交互旅程)。


Trace(追踪) ​

Trace(追踪)表示:

一个自包含、可以独立 Debug(调试 / 排障)、Evaluation(评测)和归因的逻辑执行单元。

例如 Data Agent(数据智能体):

text
Trace(追踪): diagnose_gmv_drop(诊断 GMV 下跌)

User Query(用户问题)
↓
Intent Parse(意图解析)
↓
Metric Retrieval(指标检索)
↓
SQL Generation(SQL 生成)
↓
SQL Execution(SQL 执行)
↓
Result Analysis(结果分析)
↓
Final Answer(最终回答)
逐项注释(14)
Trace
Trace:调用轨迹。
diagnose_gmv_drop
diagnose_gmv_drop:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
GMV
GMV:商品交易总额。
User
User:用户。
Query
Query:查询。
Intent
Intent:意图。
Parse
Parse:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Metric Retrieval
指标检索:找到任务需要使用的指标定义。
SQL
SQL:结构化查询语言。
Generation
Generation:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Execution
Execution:执行。
Result
Result:结果。
Analysis
Analysis:分析。
Final Answer
最终答案:智能体完成执行后呈现给用户的最终输出。

一句话:

Trace(追踪)看一次完整执行。


Span(执行片段) ​

Span(执行片段)表示 Trace(追踪)中的某个具体 Operation(操作)。

例如:

text
Trace(完整追踪): Data Agent Run(数据智能体执行)

├─ Span(执行片段): parse_intent(解析意图)
├─ Span(执行片段): retrieve_metric(检索指标)
├─ Span(执行片段): generate_sql(生成 SQL)
├─ Span(执行片段): execute_sql(执行 SQL)
└─ Span(执行片段): generate_answer(生成答案)
逐项注释(11)
Trace
Trace:调用轨迹。
Data
Data:数据。
Agent
Agent:智能体。
Run
Run:单次运行。
Span
Span:调用链中的操作区间。
parse_intent
parse_intent:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
retrieve_metric
retrieve_metric:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
generate_sql
generate_sql:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
SQL
SQL:结构化查询语言。
execute_sql
函数或工具名:执行传入的 SQL 语句。
generate_answer
generate_answer:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

一句话:

Span(执行片段)看具体一步发生了什么。


3.2 Session(会话)、Trace(追踪)、Span(执行片段)怎么落到真实 Telemetry Schema(遥测数据模型)? ​

例如 Data Agent(数据智能体)的一个 Tool Span(工具执行片段):

text
session_id(会话 ID) = analysis_123(分析会话 123)
trace_id(追踪 ID) = trace_456(追踪 456)
span_id(执行片段 ID) = span_789(执行片段 789)
parent_span_id(父执行片段 ID) = span_001(父执行片段 001)

task_id(业务任务 ID) = gmv_drop_analysis(GMV 下跌分析任务)

agent_name(智能体名称) = data_agent(数据智能体)
agent_version(智能体版本) = v2.7(版本 2.7)

operation_type(操作类型) = tool(工具操作)
operation_name(操作名称) = execute_sql(执行 SQL)

resource(访问资源) = analytics_database(分析数据库)
status(执行状态) = success(成功)
latency_ms(延迟毫秒数) = 1820(1820 毫秒)

prompt_version(Prompt 版本) = p31(Prompt 版本 31)
tool_version(工具版本) = sql_v4(SQL 工具版本 4)
逐项注释(31)
session_id
session_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
ID
ID:唯一标识符。
analysis_123
analysis_123:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
trace_id
trace_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
trace_456
trace_456:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
span_id
span_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
span_789
span_789:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
parent_span_id
parent_span_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
span_001
span_001:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
task_id
字段或变量名:任务的唯一标识。
gmv_drop_analysis
gmv_drop_analysis:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
GMV
GMV:商品交易总额。
agent_name
agent_name:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
data_agent
data_agent:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
agent_version
字段名:智能体版本。
v2
v2:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
operation_type
operation_type:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
tool
tool:工具。
operation_name
operation_name:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
execute_sql
函数或工具名:执行传入的 SQL 语句。
SQL
SQL:结构化查询语言。
resource
resource:资源。
analytics_database
analytics_database:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
status
status:状态。
success
success:成功。
latency_ms
latency_ms:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
prompt_version
字段名:提示词版本。
Prompt
Prompt:提示词。
p31
p31:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
tool_version
字段名:工具版本。
sql_v4
sql_v4:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

重点不在于背字段。

重点在于:

Session(会话)、Trace(追踪)、Span(执行片段)、Business ID(业务 ID)、Agent Version(智能体版本)、Prompt Version(提示词版本)最终都必须变成可查询、可过滤、可关联的数据。


3.3 一个 Trace(追踪)应该多大? ​

可以记住一个很重要的原则:

一个能够独立 Debug(调试)、Evaluation(评测)和归因的逻辑执行单元,通常适合作为一个 Trace(追踪)。

典型错误:

一个完整 Conversation(对话)全塞进一个巨大 Trace(追踪)。

例如:

text
Trace(巨大追踪)
├─ Turn 1(第 1 轮对话)
├─ Turn 2(第 2 轮对话)
├─ Turn 3(第 3 轮对话)
├─ ...
└─ Turn 100(第 100 轮对话)
逐项注释(2)
Trace
Trace:调用轨迹。
Turn
Turn:轮次。

结果:

  • Trace Tree(追踪树)巨大
  • 单轮 Debug(调试)困难
  • UI(用户界面)导航困难
  • Evaluation(评测)难挂载
  • Payload(业务负载)巨大
  • 查询性能下降

因此 Chat Agent(对话智能体)通常更适合:

一个 Turn(对话轮次)一个 Trace(追踪)。

整个 Conversation(对话)由 Session(会话)进行关联。


3.4 Data Agent(数据智能体)应该怎么切 Trace(追踪)? ​

用户第一次问:

最近 30 天 GMV 为什么下降?

随后追问:

华东地区呢?

可以设计:

text
Session(分析会话): analysis_session_123(分析会话 123)

├─ Trace 1(第 1 次完整执行): overall_gmv_analysis(整体 GMV 分析)
│  ├─ parse_intent(解析意图)
│  ├─ metric_lookup(指标检索)
│  ├─ generate_sql(生成 SQL)
│  ├─ execute_sql(执行 SQL)
│  └─ answer(生成答案)
│
└─ Trace 2(第 2 次完整执行): east_china_followup(华东区域追问)
   ├─ resolve_context(解析上下文)
   ├─ execute_sql(执行 SQL)
   └─ answer(生成答案)
逐项注释(13)
Session
Session:会话。
analysis_session_123
analysis_session_123:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
Trace
Trace:调用轨迹。
overall_gmv_analysis
overall_gmv_analysis:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
GMV
GMV:商品交易总额。
parse_intent
parse_intent:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
metric_lookup
函数或步骤名:查询指标定义。
generate_sql
generate_sql:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
SQL
SQL:结构化查询语言。
execute_sql
函数或工具名:执行传入的 SQL 语句。
answer
answer:答案。
east_china_followup
east_china_followup:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
resolve_context
resolve_context:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

这样同时支持:

  • 单轮排障
  • 多轮上下文分析
  • Session Cost Analysis(会话成本分析)
  • User Journey Analysis(用户交互旅程分析)

3.5 Coding Agent(代码智能体)应该怎么切 Trace(追踪)? ​

Coding Agent(代码智能体)的一个真实常见坑:

长任务全部塞进一个巨大 Trace。

例如复杂 Bug(程序缺陷)修复:

text
Read Repo(读取代码仓库)
→ Search(搜索代码)
→ Edit(修改代码)
→ Test(执行测试)
→ Edit(再次修改)
→ Test(再次测试)
→ Shell(执行终端命令)
→ ...
逐项注释(6)
Read
Read:读取。
Repo
Repo:代码仓库。
Search
Search:搜索。
Edit
Edit:编辑。
Test
Test:测试。
Shell
Shell:确定性控制外壳。

如果运行几个小时,最终可能出现数百甚至数千个 Span(执行片段)。

更合理:

text
Session / Task(会话 / 任务): fix_bug_123(修复 Bug 123)

├─ Trace 1(追踪 1): investigate(问题调查)
├─ Trace 2(追踪 2): implement_patch(实现补丁)
├─ Trace 3(追踪 3): test_and_diagnose(测试和诊断)
└─ Trace 4(追踪 4): final_verify(最终验证)
逐项注释(9)
Session
Session:会话。
Task
Task:任务。
fix_bug_123
fix_bug_123:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
Bug
Bug:软件缺陷。
Trace
Trace:调用轨迹。
investigate
investigate:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
implement_patch
implement_patch:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
test_and_diagnose
test_and_diagnose:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
final_verify
final_verify:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

然后通过:

  • task_id(任务 ID)
  • session_id(会话 ID)
  • repo_id(代码仓库 ID)

统一关联。

生产经验:

Long-running Task(长时间任务)不等于一个巨大 Trace(追踪)。


3.6 Long-running Agent(长时间运行智能体)怎么做跨时间关联? ​

例如:

text
Day 1(第 1 天)
Agent Run(智能体执行)
↓
Approval Required(需要人工审批)
↓
Pause(暂停)

Day 2(第 2 天)
Another Worker(另一工作进程)
↓
Resume(恢复执行)
逐项注释(9)
Day
Day:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Agent
Agent:智能体。
Run
Run:单次运行。
Approval
Approval:审批。
Required
Required:必填或强制。
Pause
Pause:暂停。
Another
Another:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Worker
Worker:执行子智能体。
Resume
Resume:恢复。

这种情况不能只依赖:

进程内 Trace Context(追踪上下文)。

需要持久化:

  • task_id(任务 ID)
  • session_id(会话 ID)
  • previous_trace_id(前序追踪 ID)
  • checkpoint_id(检查点 ID)
  • business_id(业务 ID)
  • resume_from(恢复位置)

可以设计成:

text
Session / Task(长期会话 / 任务)

├─ Trace 1(追踪 1)
│  pre_approval_execution(审批前执行)
│
└─ Trace 2(追踪 2)
   post_approval_resume(审批后恢复)
逐项注释(5)
Session
Session:会话。
Task
Task:任务。
Trace
Trace:调用轨迹。
pre_approval_execution
pre_approval_execution:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
post_approval_resume
post_approval_resume:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

两次 Trace(追踪)通过:

Session ID(会话 ID)、Task ID(任务 ID)或者 Span Link(执行片段链接)

进行关联。

通常没有必要强行做一个:

持续几十个小时的巨大 Trace(追踪)。


Parent-child(父子 Span 关系)更适合:

明确的嵌套执行生命周期。

Agent(智能体)系统还常见:

  • Async Tool(异步工具)
  • Queue(任务队列)
  • Background Job(后台任务)
  • Parallel Calls(并行调用)
  • Retry(重试)
  • Handoff(任务移交)
  • Resume(恢复执行)

例如:

text
Agent(智能体)
↓
Queue(任务队列)
↓
Worker after 5 min(5 分钟后的工作进程)
逐项注释(5)
Agent
Agent:智能体。
Queue
Queue:队列。
Worker
Worker:执行子智能体。
after
after:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
min
min:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。

这里并不是严格同步嵌套关系。

可以通过:

  • Span Link(执行片段链接)
  • Correlation ID(关联 ID)
  • Business ID(业务 ID)

表达:

有因果 / 业务关联,但不是严格父子生命周期。


3.8 阶段总结 ​

Session(会话)、Trace(追踪)、Span(执行片段)不是三个简单 ID。

它们定义了三个不同观察尺度:

Session(会话)看长期 Journey(交互旅程)。

Trace(追踪)看一次完整执行。

Span(执行片段)看具体一步。

真正工程难点不是:

会背定义。

而是:

边界怎么切得稳定、可读、可查、可聚合。


四、Trace Schema(追踪模型)与产品设计 ​

4.1 一个好的 Agent Trace(智能体追踪)应该长什么样? ​

好的 Trace Schema(追踪数据模型)不应该只是一条:

技术调用链。

而应该成为:

Agent(智能体)的可解释执行语言。

例如:

text
Trace(完整执行): answer_business_question(回答业务问题)

├─ Agent(智能体操作): understand_intent(理解意图)
├─ Retriever(检索操作): retrieve_metric_definition(检索指标定义)
├─ Tool(工具操作): schema_lookup(查询数据结构)
├─ Generation(模型生成): generate_sql(生成 SQL)
├─ Tool(工具操作): execute_sql(执行 SQL)
├─ Agent(智能体操作): analyze_result(分析结果)
└─ Generation(模型生成): generate_answer(生成答案)
逐项注释(14)
Trace
Trace:调用轨迹。
answer_business_question
answer_business_question:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
Agent
Agent:智能体。
understand_intent
understand_intent:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
Retriever
Retriever:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
retrieve_metric_definition
retrieve_metric_definition:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
Tool
Tool:工具。
schema_lookup
函数或步骤名:查询数据结构定义。
Generation
Generation:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
generate_sql
generate_sql:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
SQL
SQL:结构化查询语言。
execute_sql
函数或工具名:执行传入的 SQL 语句。
analyze_result
analyze_result:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
generate_answer
generate_answer:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

如果所有节点都只是:

Generic Span(通用执行片段)

人虽然能看到 Trace(追踪):

但读不懂 Agent(智能体)到底做了什么。


4.2 Span(执行片段)粒度怎么设计? ​

Span(执行片段)太粗:

text
agent_run(智能体整体执行) = 10 seconds(10 秒)
逐项注释(2)
agent_run
agent_run:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
seconds
seconds:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。

无法知道:

哪一步慢、哪一步错。

Span(执行片段)太细:

JSON Parsing(JSON 解析)、Dictionary Lookup(字典查询)、Framework Internal Node(框架内部节点)全部变成 Span。

又会导致:

  • 噪声过多
  • 存储量增加
  • UI(用户界面)难读
  • Root Cause Analysis(根因分析)更复杂

适合作为 Span(执行片段)的 Operation(操作)一般满足:

有独立业务语义 + 有独立故障边界 + 有性能意义 + 有诊断价值

例如:

  • Agent Turn(智能体执行轮次)
  • Model Call(模型调用)
  • Retrieval(检索)
  • Tool Call(工具调用)
  • Handoff(任务移交)
  • State Transition(状态转换)
  • Guardrail(护栏检查)
  • Business Validation(业务校验)

4.3 Span Name(执行片段名称)怎么设计? ​

这是非常典型的生产踩坑。

错误:

text
span_name(执行片段名称) = gpt_5_call(GPT-5 调用)
span_name(执行片段名称) = model_x_v3_call(模型 X V3 调用)
span_name(执行片段名称) = retry_2(第 2 次重试)
逐项注释(7)
span_name
span_name:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
gpt_5_call
gpt_5_call:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
GPT-5
GPT-5:该纯文本块中的状态、决策或错误枚举值。
model_x_v3_call
model_x_v3_call:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
X
X:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
V3
V3:该纯文本块中的状态、决策或错误枚举值。
retry_2
retry_2:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

问题是:

模型、版本变化以后:

  • Dashboard(看板)统计断裂
  • Saved Filter(已保存过滤条件)失效
  • Evaluator Selector(评测器筛选条件)失效
  • Historical Comparison(历史对比)困难

更合理:

text
span_name(执行片段名称) = generate_answer(生成答案)
model(模型) = model_x(模型 X)
prompt_version(Prompt 版本) = v23(版本 23)
retry_count(重试次数) = 2(重试 2 次)
逐项注释(9)
span_name
span_name:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
generate_answer
generate_answer:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
model
model:模型。
model_x
model_x:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
X
X:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
prompt_version
字段名:提示词版本。
Prompt
Prompt:提示词。
v23
v23:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
retry_count
retry_count:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

所以:

Span Name(执行片段名称)应该像一个稳定 API(应用程序接口),而不是一次执行的动态描述。


4.4 为什么 Instrumentation(埋点)应该 Semantic-first(语义优先)? ​

Instrumentation(埋点)不应该跟着 Framework(框架)的内部实现结构变化。

错误:

text
RunnableSequence(框架执行序列)
Node_3(框架节点 3)
ExecutorStep_4(执行器步骤 4)
逐项注释(3)
RunnableSequence
RunnableSequence:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
Node_3
Node_3:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
ExecutorStep_4
ExecutorStep_4:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

如果以后换框架:

整个 Trace Schema(追踪模型)都会变化。

更稳定:

text
resolve_metric(解析指标)
generate_sql(生成 SQL)
execute_query(执行查询)
validate_result(验证结果)
generate_answer(生成答案)
逐项注释(6)
resolve_metric
resolve_metric:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
generate_sql
generate_sql:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
SQL
SQL:结构化查询语言。
execute_query
execute_query:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
validate_result
validate_result:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
generate_answer
generate_answer:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

所以:

Instrumentation should be semantic-first, not framework-first(埋点应该语义优先,而不是框架优先)。


4.5 为什么 Auto Instrumentation(自动埋点)不够? ​

Auto Instrumentation(自动埋点)通常可以看到:

  • HTTP(超文本传输协议)调用
  • Database(数据库)调用
  • LLM(大语言模型)调用
  • RPC(远程过程调用)

但是未必知道:

每一个步骤在业务语义上到底是什么。

例如:

text
generation_1(第 1 次模型生成)
tool_2(第 2 个工具调用)
span_3(第 3 个执行片段)
逐项注释(3)
generation_1
generation_1:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
tool_2
tool_2:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
span_3
span_3:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

看不出:

  • 哪一步是 Metric Resolution(指标解析)
  • 哪一步是 Result Validation(结果校验)

因此企业级 Agent(智能体)通常采用:

Auto Instrumentation(自动埋点) + Domain Instrumentation(领域语义埋点)


4.6 Observability Product(可观测产品)应该有哪些核心视图? ​

至少需要四类。

Session View(会话视图) ​

适合看:

完整用户 / 任务 Journey(交互旅程)。

关注:

  • 多轮 Trace(追踪)
  • Total Tokens(总 Token)
  • Total Cost(总成本)
  • Handoff(任务移交)
  • Feedback(反馈)
  • Resolution Status(问题解决状态)

Trace Tree(追踪树) ​

适合看:

调用关系和 Agent(智能体)执行语义。

Timeline / Waterfall(时间线 / 瀑布图) ​

适合看:

  • 哪一个 Span(执行片段)最慢
  • 是否存在并行执行
  • Queue Wait(队列等待)
  • Tool Wait(工具等待)
  • LLM Wait(模型等待)

Agent Graph(智能体协作图) ​

适合看:

Multi-Agent(多智能体)整体协作拓扑。

例如:

text
Supervisor(主管智能体)
├─ Research Agent(研究智能体)
├─ SQL Agent(SQL 智能体)
└─ Writer Agent(写作智能体)
逐项注释(5)
Supervisor
Supervisor:监督者智能体。
Research
Research:研究。
Agent
Agent:智能体。
SQL
SQL:结构化查询语言。
Writer
Writer:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。

需要区分:

Trace Tree(追踪树)看这一次执行怎么走。

Agent Graph(智能体协作图)看整个系统中 Agent(智能体)之间如何协作。


4.7 阶段总结 ​

好的 Trace Schema(追踪模型)本质上是在定义:

Agent(智能体)的可解释执行语言。

它必须做到:

  • 人能读懂
  • 机器能查询
  • Metrics(指标)能聚合
  • Evaluator(评测器)能消费
  • 版本变化以后结构仍然稳定

五、Telemetry Schema(遥测模型)与数据治理 ​

5.1 Agent(智能体)应该记录哪些数据? ​

建议至少分六类。

Identity(身份信息) ​

  • trace_id(追踪 ID)
  • span_id(执行片段 ID)
  • parent_span_id(父执行片段 ID)
  • session_id(会话 ID)
  • task_id(任务 ID)

Agent Context(智能体上下文) ​

  • agent_name(智能体名称)
  • agent_version(智能体版本)
  • workflow_name(工作流名称)
  • prompt_version(Prompt 版本)
  • model(模型)
  • tool_version(工具版本)

Runtime Telemetry(运行时遥测) ​

  • latency(延迟)
  • token(Token 使用量)
  • cost(成本)
  • error(错误)
  • retry(重试)
  • status(执行状态)
  • cache_usage(缓存使用情况)

Semantic Data(语义数据) ​

  • input(输入)
  • output(输出)
  • tool_arguments(工具参数)
  • tool_result(工具结果)
  • state_transition(状态转换)
  • handoff_target(移交目标)

Business Metadata(业务元数据) ​

  • user_id(用户 ID)
  • tenant_id(租户 ID)
  • order_id(订单 ID)
  • repo_id(代码仓库 ID)
  • ticket_id(工单 ID)
  • release_version(发布版本)

Semantic Signal(语义信号) ​

  • quality_score(质量得分)
  • feedback(反馈)
  • annotation(人工标注)

5.2 Business ID(业务 ID)和 Observability ID(可观测 ID)怎么关联? ​

例如 Enterprise Refund Agent(企业退款智能体):

text
customer_id(客户 ID)
case_id(售后案例 ID)
order_id(订单 ID)
session_id(会话 ID)
trace_id(追踪 ID)
span_id(执行片段 ID)
逐项注释(7)
customer_id
customer_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
ID
ID:唯一标识符。
case_id
case_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
order_id
字段或变量名:订单的唯一标识。
session_id
session_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
trace_id
trace_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
span_id
span_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

其中:

case_id(售后案例 ID)

可能跨:

  • 多个 Session(会话)
  • 多天
  • Agent(智能体)与人工流程
  • Async Task(异步任务)

所以:

Observability ID(可观测 ID)不能替代 Business ID(业务 ID)。

更合理:

text
Business Identity(业务身份)
↓
Session(会话)
↓
Trace(完整执行)
↓
Span(具体执行片段)
逐项注释(5)
Business
Business:业务领域或业务规则。
Identity
Identity:身份。
Session
Session:会话。
Trace
Trace:调用轨迹。
Span
Span:调用链中的操作区间。

5.3 为什么 session_id(会话 ID)不能直接等于 user_id(用户 ID)? ​

错误设计:

text
session_id(会话 ID) = user_id(用户 ID)
逐项注释(3)
session_id
session_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
ID
ID:唯一标识符。
user_id
user_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

结果:

一个用户半年所有行为都成为一个 Session(会话)。

导致:

  • Session Replay(会话回放)失真
  • Cost Aggregation(成本聚合)错误
  • Conversation Analytics(对话分析)失真
  • Session(会话)无限膨胀

正确理解:

user_id(用户 ID) = 谁

session_id(会话 ID) = 哪一段会话 / 任务周期

trace_id(追踪 ID) = 哪一次完整执行

span_id(执行片段 ID) = 哪一步


5.4 High Cardinality(高基数)怎么处理? ​

Metrics(指标)系统非常怕:

High Cardinality(高基数)。

错误:

text
trace_id(追踪 ID) = xxx(动态追踪值)
user_id(用户 ID) = xxx(动态用户值)
user_query(用户问题) = xxx(动态问题内容)
逐项注释(5)
trace_id
trace_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
ID
ID:唯一标识符。
xxx
xxx:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
user_id
user_id:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
user_query
user_query:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。

全部作为 Metrics Label(指标标签)。

最终会造成:

Cardinality Explosion(基数爆炸)。

更适合做 Metrics Label(指标标签)的字段:

text
agent_type(智能体类型) = data_agent(数据智能体)
tool_name(工具名称) = sql_tool(SQL 工具)
environment(环境) = production(生产环境)
status(执行状态) = success(成功)
逐项注释(9)
agent_type
agent_type:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
data_agent
data_agent:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
tool_name
tool_name:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
sql_tool
sql_tool:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
SQL
SQL:结构化查询语言。
environment
environment:环境。
production
production:生产环境。
status
status:状态。
success
success:成功。

而:

  • user_id(用户 ID)
  • trace_id(追踪 ID)
  • session_id(会话 ID)
  • query(查询内容)

更适合放:

Trace Attribute(追踪属性)或者 Log Attribute(日 志属性)。


5.5 Metadata(元数据)和 Payload(业务负载)应该怎么分? ​

Metadata(元数据)例如:

  • model(模型)
  • latency(延迟)
  • token(Token)
  • tool_name(工具名称)
  • status(状态)
  • version(版本)

通常风险比较低。

Payload(业务负载)例如:

  • Prompt(提示词)
  • Conversation(对话内容)
  • Tool Arguments(工具参数)
  • SQL(结构化查询语言)
  • Tool Result(工具结果)
  • Document Content(文档内容)

通常更敏感。

所以生产系统更合理的默认策略:

Metadata default-on(元数据默认采集)。

Payload controlled-capture(业务负载受控采集)。


5.6 Sensitive Data(敏感数据)怎么治理? ​

Agent Trace(智能体追踪)里可能出现:

  • PII(Personally Identifiable Information,个人身份信息)
  • 财务数据
  • 内部 SQL(结构化查询语言)
  • Tool Result(工具结果)
  • Credential(凭证)片段
  • 用户对话

因此至少需要:

  • Redaction(脱敏)
  • Field Filtering(字段过滤)
  • Sampling(采样)
  • Data Retention(数据保留周期)
  • Access Control(访问控制)
  • Environment Separation(环境隔离)

5.7 阶段总结 ​

Telemetry(遥测)设计不是:

采集越多越好。

而是:

在诊断价值、存储成本、Cardinality(基数)、隐私和可运营性之间做工程平衡。


六、Sampling(采样)与 Storage(存储) ​

6.1 为什么不能永久保存 100% Full Trace(全量完整追踪)? ​

Agent Trace(智能体追踪)通常具有:

  • Span(执行片段)多
  • Prompt(提示词)大
  • Tool Result(工具结果)大
  • Long-running Task(长时间任务)多
  • 并发量大
  • 敏感数据多

如果永久全量保存:

  • Storage Cost(存储成本)高
  • Network Cost(网络成本)高
  • Collector Pressure(采集器压力)高
  • Query Cost(查询成本)高
  • Privacy Risk(隐私风险)高

6.2 Head Sampling(头部采样)是什么? ​

Head Sampling(头部采样):

在请求开始时决定是否采集。

优点:

  • 简单
  • 成本可预测

缺点:

无法提前知道这个请求最终是不是 Bad Case(坏案例)。


6.3 Tail Sampling(尾部采样)是什么? ​

Tail Sampling(尾部采样):

执行结束后,根据最终结果决定是否保留。

例如:

text
Error(系统错误)
→ Retain 100%(全部保留)

High Latency(高延迟)
→ Retain 100%(全部保留)

High Cost(高成本)
→ Retain 100%(全部保留)

Low Eval Score(低评测得分)
→ Retain 100%(全部保留)

Normal Traffic(普通正常流量)
→ Retain 5%(保留 5%)
逐项注释(10)
Error
Error:错误。
Retain
Retain:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
High
High:高等级。
Latency
Latency:延迟。
Cost
Cost:成本。
Low
Low:低等级。
Eval
Eval:评测。
Score
Score:分数。
Normal
Normal:正常状态。
Traffic
Traffic:流量。

这非常适合 Agent(智能体):

很多 Bad Case(坏案例)只有执行结束以后才能识别。


6.4 Tail Sampling(尾部采样)有什么代价? ​

Tail Sampling(尾部采样)需要:

请求结束前先暂存 Trace(追踪)。

因此增加:

  • Buffer Memory(缓冲内存)
  • Collector Complexity(采集器复杂度)
  • Processing Delay(处理延迟)
  • Infrastructure Cost(基础设施成本)

所以成熟系统经常采用:

Hybrid Sampling(混合采样)。

例如:

text
High-risk Action(高风险动作)
→ Head Sampling 100%(开始时全部采集)

Normal Traffic(普通流量)
→ Head Sampling 10%(开始时采集 10%)

Error / Low Score(错误 / 低评分)
→ Tail Retain 100%(执行结束后全部保留)
逐项注释(12)
High
High:高等级。
risk
risk:风险。
Action
Action:动作。
Head
Head:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Sampling
Sampling:采样。
Normal
Normal:正常状态。
Traffic
Traffic:流量。
Error
Error:错误。
Low
Low:低等级。
Score
Score:分数。
Tail
Tail:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Retain
Retain:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。

6.5 Trace Storage(追踪存储)怎么设计? ​

大型 Agent Observability Platform(智能体可观测平台)通常不会:

把所有数据塞进一个日志数据库。

更合理的数据 Pipeline(数据管道):

text
Agent Runtime(智能体运行时)
↓
Telemetry SDK(遥测软件开发工具包)
↓
OpenTelemetry Collector / Event Bus(OpenTelemetry 采集器 / 事件总线)
↓
Redaction / Sampling / Processing(脱敏 / 采样 / 数据处理)
↓
Trace Store(追踪存储)
+ Metrics Store(指标存储)
+ Object Storage(对象存储)
+ Data Warehouse(数据仓库)
逐项注释(18)
Agent
Agent:智能体。
Runtime
Runtime:运行时系统。
Telemetry
Telemetry:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
SDK
SDK:该纯文本块中的状态、决策或错误枚举值。
OpenTelemetry
OpenTelemetry:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
Collector
Collector:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Event
Event:事件。
Bus
Bus:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Redaction
Redaction:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Sampling
Sampling:采样。
Processing
Processing:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Trace
Trace:调用轨迹。
Store
Store:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Metrics
Metrics:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Object
Object:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Storage
Storage:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Data
Data:数据。
Warehouse
Warehouse:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。

例如:

  • Span Metadata(执行片段元数据)→ Columnar Store(列式存储)
  • Metrics(指标)→ TSDB(Time-series Database,时序数据库)
  • Large Payload(大型业务负载)→ Object Storage(对象存储)

重点不是:

一定选择哪个数据库。

而是:

不同数据按不同访问模式进行分层存储。


6.6 阶段总结 ​

Sampling(采样)和 Storage(存储)本质上解决:

哪些数据值得长期保存,以及规模扩大以后如何仍然存得起、查得动。


七、Metrics(指标)与 Monitoring(监控) ​

7.1 Agent Metrics(智能体指标)应该怎么分层? ​

建议至少四层。

System Metrics(系统指标) ​

  • QPS(Queries Per Second,每秒请求量)
  • Error Rate(错误率)
  • Timeout Rate(超时率)
  • Infrastructure Latency(基础设施延迟)

Model Metrics(模型指标) ​

  • Input Tokens(输入 Token)
  • Output Tokens(输出 Token)
  • Cached Tokens(缓存 Token)
  • TTFT(Time To First Token,首 Token 延迟)
  • Generation Latency(生成延迟)
  • Context Size(上下文长度)
  • Model Error Rate(模型错误率)

Agent Metrics(智能体行为指标) ​

  • Steps per Task(单任务步骤数)
  • Tool Calls per Task(单任务工具调用数)
  • Retry Rate(重试率)
  • Handoff Rate(任务移交率)
  • Loop Rate(循环率)
  • Agent Turns(智能体执行轮次)
  • Completion Rate(完成率)

Business / Semantic Metrics(业务 / 语义指标) ​

  • Task Success(任务成功率)
  • Online Eval Score(在线评测得分)
  • User Feedback(用户反馈)
  • Escalation Rate(转人工率)
  • Autonomous Completion Rate(自动完成率)

7.2 为什么不能只看 Average(平均值)? ​

例如:

Avg Task Latency(平均任务延迟)为 8 秒。

看起来还可以。

但可能:

  • P50(50 分位)为 3 秒
  • P95(95 分位)为 18 秒
  • P99(99 分位)为 50 秒

说明:

Long Tail(长尾)非常严重。

Agent Steps(智能体步骤数)同样如此。

平均:

5 步。

实际可能:

  • 90% 请求为 3 步
  • 10% 请求为 25 步

这通常意味着:

一部分任务正在 Agent Loop(智能体循环)或者严重绕路。

因此必须关注:

  • Distribution(分布)
  • P50 / P95 / P99(分位数)
  • Long Tail(长尾)
  • Segment Breakdown(分群分析)

7.3 为什么 Agent Metrics(智能体指标)比传统指标更特殊? ​

可能出现:

Task Success(任务成功率)基本没有变化。

但:

  • Avg Steps(平均步骤数)从 5 增加到 11
  • Tool Calls(工具调用数)从 3 增加到 9
  • Cost(成本)上涨 150%

说明:

Agent(智能体)行为已经退化。

但传统 Error Rate(错误率)可能仍然正常。

所以:

Agent 行为本身也必须成为 Metrics(指标)。


7.4 Release / Version Correlation(发布 / 版本关联)为什么重要? ​

真实线上问题经常表现为:

“昨天 17:00 以后 Avg Steps(平均步骤数)突然增加 40%。”

第一反应往往不是:

阅读每条模型输出。

而是:

17:00 上了哪个 Release(发布版本)?

例如:

text
agent_version(智能体版本) = v21(版本 21)
avg_steps(平均步骤数) = 5.1(平均 5.1 步)

agent_version(智能体版本) = v22(版本 22)
avg_steps(平均步骤数) = 9.7(平均 9.7 步)
逐项注释(4)
agent_version
字段名:智能体版本。
v21
v21:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
avg_steps
avg_steps:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
v22
v22:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。

然后继续:

比较 v21(版本 21)和 v22(版本 22)的 Trace(追踪)。

因此必须关联:

  • agent_version(智能体版本)
  • prompt_version(Prompt 版本)
  • tool_version(工具版本)
  • model(模型)
  • feature_flag(功能开关)
  • release_version(发布版本)

7.5 Long-running Agent(长时间智能体)的 Latency(延迟)怎么算? ​

例如:

text
Trace 1(追踪 1) = 2 minutes(2 分钟)
Human Wait(人工等待) = 20 hours(20 小时)
Trace 2(追踪 2) = 3 minutes(3 分钟)
逐项注释(5)
Trace
Trace:调用轨迹。
minutes
minutes:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Human
Human:人工或人类。
Wait
Wait:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
hours
hours:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。

Task Latency(任务延迟)到底是:

20 小时 5 分钟?

还是:

5 分钟?

真实系统应该区分:

  • Wall-clock Duration(墙钟总时长)
  • Active Execution Time(活跃执行时长)
  • Human Wait Time(人工等待时长)
  • Queue Wait Time(队列等待时长)
  • Tool Wait Time(工具等待时长)

否则:

P95 Agent Latency(智能体 P95 延迟)

会失去可解释性。


7.6 Dashboard(看板)应该怎么设计? ​

Dashboard(看板)不是最终 Root Cause Analysis(根因分析)工具。

它主要负责:

Detect(发现异常) + Triage(初步分流)。

Product View(产品视图) ​

关注:

  • Task Volume(任务量)
  • Task Success(任务成功率)
  • Cost(成本)
  • Feedback(反馈)
  • Autonomous Completion(自动完成)

Agent Runtime View(智能体运行时视图) ​

关注:

  • Steps(步骤数)
  • Tool Calls(工具调用数)
  • Retry(重试)
  • Loop(循环)
  • Handoff(任务移交)

Model View(模型视图) ​

关注:

  • Token(Token 使用量)
  • TTFT(首 Token 延迟)
  • Cost(成本)
  • Generation Latency(生成延迟)
  • Model Mix(模型使用分布)

Tool View(工具视图) ​

关注:

  • Tool Volume(工具调用量)
  • Error Rate(错误率)
  • Latency(延迟)
  • 429 Rate(限流率)
  • Timeout Rate(超时率)

发现异常以后:

必须可以 Drill Down(逐层下钻)到具体 Trace(追踪)。


7.7 阶段总结 ​

Metrics(指标)的意义是:

让 Observability(可观测性)从“这个 Case(案例)为什么错”提升成“整个系统正在发生什么变化”。


八、异常发现与 Alerting(告警) ​

8.1 Agent(智能体)应该对哪些问题告警? ​

Infrastructure Alert(基础设施告警) ​

  • 5xx(服务器错误)
  • 429(限流)
  • Timeout(超时)
  • Latency Spike(延迟突增)

Agent Behavior Alert(智能体行为告警) ​

  • Steps Spike(步骤数突增)
  • Tool Calls Spike(工具调用数突增)
  • Loop Rate Spike(循环率突增)
  • Handoff Rate Spike(移交率突增)

Semantic / Quality Alert(语义 / 质量告警) ​

  • Online Eval Score(在线评测得分)下降
  • Negative Feedback(负反馈)增加
  • Task Success(任务成功率)下降

Cost Alert(成本告警) ​

  • Token Spike(Token 使用量突增)
  • Cost per Task Spike(单任务成本突增)
  • Model Mix(模型使用分布)异常

8.2 为什么 Agent Alert(智能体告警)更难? ​

因为可能:

text
HTTP Status(HTTP 状态) = 200(成功)
System Error(系统错误) = false(无错误)
Latency(延迟) = normal(正常)
逐项注释(7)
HTTP
HTTP:超文本传输协议。
Status
Status:状态。
System
System:系统。
Error
Error:错误。
false
false:错误的或假阳性的。
Latency
Latency:延迟。
normal
normal:正常状态。

但:

Quality Score(质量得分)已经从 0.9 降到 0.5。

所以 Agent Alert(智能体告警)不能只依赖:

Infrastructure Signal(基础设施信号)。

还必须结合:

Behavior Signal(行为信号) + Semantic Signal(语义信号)。


8.3 Threshold Alert(阈值告警)和 Anomaly Detection(异常检测)怎么选? ​

Threshold Alert(阈值告警)适合:

有明确业务边界。

例如:

Tool Error Rate(工具错误率)超过 5%。

Anomaly Detection(异常检测)适合:

没有固定阈值,但明显偏离历史分布。

例如:

Avg Steps(平均步骤数)从 5.3 突然增加到 9.8。


8.4 怎么避免 Alert Fatigue(告警疲劳)? ​

不能:

所有指标都告警。

需要结合:

  • User Impact(用户影响)
  • Risk Level(风险等级)
  • Duration(持续时间)
  • Rate(发生比例)
  • Correlation(关联异常)

还需要:

  • Deduplication(去重)
  • Grouping(分组)
  • Severity(告警级别)
  • Suppression(告警抑制)
  • Cooldown(冷却时间)

更好的生产实践是:

告警直接绑定 Trace Query(追踪查询条件)、Dashboard(看板)以及 Runbook(故障处理手册)。

这样 On-call Engineer(值班工程师)收到告警后:

text
Alert(告警)
↓
Trace Query(追踪查询)
↓
Bad Trace List(异常追踪列表)
↓
Root Cause Analysis(根因分析)
逐项注释(6)
Alert
Alert:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Trace
Trace:调用轨迹。
Query
Query:查询。
Bad Trace
异常轨迹:包含错误、低效或违规行为的执行轨迹。
List
List:列表。
Root Cause Analysis
根因分析:基于证据定位问题底层机制并制定防复发措施,常缩写为 RCA。

而不是重新从零搜索。


8.5 阶段总结 ​

好的 Alerting(告警体系)不是:

告警数量更多。

而是:

发现得准、入口清楚,并且能够直接进入 Trace(追踪)和 Root Cause(根因)。


九、Root Cause Analysis(根因分析)与 Failure Attribution(失败归因) ​

9.1 Agent(智能体)出错怎么做 Root Cause Analysis(根因分析)? ​

Observability(可观测性)的最终目标不是:

Dashboard(看板)。

而是:

Root Cause Analysis(根因分析)。

例如 Data Agent(数据智能体)最终答案错误:

text
User Intent(用户意图)
↓
Context / Retrieval(上下文 / 检索)
↓
Metric Resolution(指标解析)
↓
Planning(规划)
↓
Tool Selection(工具选择)
↓
Arguments(工具参数)
↓
Tool Result(工具结果)
↓
State(状态)
↓
Interpretation(结果解释)
↓
Final Answer(最终回答)
逐项注释(13)
User
User:用户。
Intent
Intent:意图。
Context
Context:上下文。
Retrieval
Retrieval:检索。
Metric
Metric:指标。
Resolution
Resolution:解决方案或分辨率,依上下文确定。
Planning
Planning:规划。
Tool Selection
工具选择:判断当前步骤应调用哪个工具。
Arguments
Arguments:参数集合。
Tool Result
工具结果:外部工具执行后返回的输出。
State
State:状态。
Interpretation
Interpretation:解释。
Final Answer
最终答案:智能体完成执行后呈现给用户的最终输出。

然后沿 Trace(追踪)寻找:

First Divergence(第一处偏离点)。


9.2 Observability(可观测性)和 First Divergence(第一处偏离点)的关系是什么? ​

Quality(质量)负责:

判断哪一步开始出错。

Observability(可观测性)负责:

有没有留下足够 Evidence(证据)让它可以被发现。

例如:

text
Metric Retrieval(指标检索) ✅
SQL Generation(SQL 生成) ✅
SQL Result(SQL 结果) ✅
Result Interpretation(结果解释) ❌
Final Answer(最终回答) ❌
逐项注释(6)
Metric Retrieval
指标检索:找到任务需要使用的指标定义。
SQL
SQL:结构化查询语言。
Generation
Generation:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Result
Result:结果。
Interpretation
Interpretation:解释。
Final Answer
最终答案:智能体完成执行后呈现给用户的最终输出。

Root Cause(根因)是:

Result Interpretation(结果解释错误)。

如果只保存:

Input(输入) + Final Output(最终输出)

就无法真正定位。


9.3 为什么要做 Good Trace vs Bad Trace Diff(正常追踪与异常追踪差异对比)? ​

只盯一个 Bad Trace(异常追踪)有时很难找到问题。

更高效的方法:

Good Trace vs Bad Trace Diff(正常追踪 / 异常追踪差异对比)。

可以比较:

  • Prompt Version(Prompt 版本)
  • Agent Version(智能体版本)
  • Model(模型)
  • Retrieved Context(检索上下文)
  • Tool Arguments(工具参数)
  • Tool Result(工具结果)
  • State(状态)
  • Step Count(步骤数量)
  • Latency(延迟)

例如:

text
Good Trace(正常追踪)
prompt_version(Prompt 版本) = v21(版本 21)
generate_sql(生成 SQL) = SQL_A(正常 SQL A)

Bad Trace(异常追踪)
prompt_version(Prompt 版本) = v22(版本 22)
generate_sql(生成 SQL) = SQL_B(异常 SQL B)
逐项注释(13)
Good
Good:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Trace
Trace:调用轨迹。
prompt_version
字段名:提示词版本。
Prompt
Prompt:提示词。
v21
v21:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
generate_sql
generate_sql:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
SQL
SQL:结构化查询语言。
SQL_A
SQL_A:该纯文本块中的状态、决策或错误枚举值。
A
A:示例标识 A。
Bad Trace
异常轨迹:包含错误、低效或违规行为的执行轨迹。
v22
v22:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
SQL_B
SQL_B:该纯文本块中的状态、决策或错误枚举值。
B
B:示例标识 B。

很快就可以怀疑:

Release v22(发布版本 22)可能引入 Regression(回归问题)。

成熟 Root Cause Analysis(根因分析)通常结合:

Single Trace RCA(单追踪根因分析)

Good / Bad Trace Diff(正常 / 异常追踪差异对比)

Version / Segment Comparison(版本 / 分群对比)


9.4 Failure Attribution(失败归因)怎么分类? ​

常见 Root Cause(根因)包括:

  • Prompt Problem(Prompt 问题)
  • Model Problem(模型问题)
  • Tool Problem(工具问题)
  • Data Problem(数据问题)
  • Retrieval Problem(检索问题)
  • State Problem(状态问题)
  • Runtime Problem(运行时问题)
  • Routing / Handoff Problem(路由 / 移交问题)

9.5 Multi-Agent(多智能体)怎么做 Responsibility Attribution(责任归因)? ​

例如:

text
Supervisor(主管智能体)
↓
Research Agent(研究智能体)
↓
SQL Agent(SQL 智能体)
↓
Database Tool(数据库工具)
逐项注释(6)
Supervisor
Supervisor:监督者智能体。
Research
Research:研究。
Agent
Agent:智能体。
SQL
SQL:结构化查询语言。
Database
Database:数据库。
Tool
Tool:工具。

结果错误。

必须知道:

  • 谁创建了 Subtask(子任务)
  • 谁选择了 Worker Agent(执行智能体)
  • 谁生成 SQL(结构化查询语言)
  • 谁解释 Tool Result(工具结果)
  • 谁聚合最终答案

因此至少应该记录:

  • source_agent(来源智能体)
  • target_agent(目标智能体)
  • task_id(任务 ID)
  • parent_task_id(父任务 ID)
  • delegation_reason(委派原因)
  • agent_version(智能体版本)
  • handoff_event(任务移交事件)

这样才能支持:

Cross-Agent Responsibility Attribution(跨智能体责任归因)。


9.6 阶段总结 ​

Observability(可观测性)真正的高潮不是:

“我有 Trace(追踪)。”

而是:

我能够基于 Trace(追踪)找到 First Divergence(第一处偏离点),解释 Root Cause(根因),并证明问题和哪个 Version(版本)、Agent(智能体)、Tool(工具)或者 Data(数据)变化有关。


十、生产反馈闭环 ​

10.1 线上问题怎么进入改进闭环? ​

一个成熟的生产闭环:

text
Alert / User Complaint(告警 / 用户投诉)
↓
Trace Investigation(追踪调查)
↓
Root Cause(根因)
↓
Bad Case(坏案例)
↓
Eval Dataset(评测数据集)
↓
Fix(修复)
↓
Regression Validation(回归验证)
↓
Production(重新上线生产环境)
逐项注释(12)
Alert
Alert:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
User
User:用户。
Complaint
Complaint:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Trace
Trace:调用轨迹。
Investigation
Investigation:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Root Cause
根因:能够解释问题发生机制并指导永久修复的底层原因。
Bad Case
失败样本:线上或评测中表现不符合预期的具体案例。
Eval Dataset
评测数据集:用于系统化验证模型或智能体能力的一组输入与期望。
Fix
Fix:修复。
Regression
Regression:回归。
Validation
Validation:验证。
Production
Production:生产环境。

Observability(可观测性)负责:

捕获和还原线上 Failure(失败)。

Quality(质量)负责:

把 Failure(失败)转化成可以重复执行的 Evaluation(评测)和 Regression(回归测试)。


10.2 为什么 Online Eval Score(在线评测得分)属于 Observability Signal(可观测信号)? ​

可能:

  • Error Rate(错误率)正常
  • Latency(延迟)正常
  • Tool(工具)正常

但:

Online Eval Score(在线评测得分)从 0.85 降到了 0.55。

Observability(可观测平台)应该:

发现这个 Semantic Regression(语义回归)。

但是:

Score(得分)怎么计算

仍然属于 Quality(质量)。


10.3 阶段总结 ​

Observability(可观测性)的终点不是:

数据展示。

而是:

让线上失败能够被捕获、被解释,并进入下一轮系统改进。


十一、真实产品设计与生产踩坑 ​

11.1 平台应该支持哪两种 Debug(排障)入口? ​

Top-down(自上而下) ​

从:

Dashboard(看板) / Alert(告警)

开始:

text
Metric(指标)
↓
Trace List(追踪列表)
↓
Trace(完整追踪)
↓
Span(具体执行片段)
逐项注释(4)
Metric
Metric:指标。
Trace
Trace:调用轨迹。
List
List:列表。
Span
Span:调用链中的操作区间。

例如:

SQL Tool Error Rate(SQL 工具错误率)突然升高。

Bottom-up(自下而上) ​

客服反馈:

Order 123(订单 123)有问题。

通过:

text
order_id(订单 ID)
↓
Business Task(业务任务)
↓
Session(会话)
↓
Trace(完整追踪)
↓
Span(具体步骤)
逐项注释(7)
order_id
字段或变量名:订单的唯一标识。
ID
ID:唯一标识符。
Business
Business:业务领域或业务规则。
Task
Task:任务。
Session
Session:会话。
Trace
Trace:调用轨迹。
Span
Span:调用链中的操作区间。

所以企业级平台必须同时支持:

Aggregate → Trace(聚合指标下钻到追踪)

以及:

Business ID → Trace(业务 ID 定位到追踪)


11.2 最常见的生产踩坑有哪些? ​

坑一:一个 Conversation(对话)一个巨大 Trace(追踪) ​

结果:

Trace Tree(追踪树)爆炸。

坑二:session_id(会话 ID)直接使用 user_id(用户 ID) ​

结果:

一个用户半年变成一个 Session(会话)。

坑三:Span(执行片段)太粗 ​

只能看到:

Agent Run(智能体执行)耗时 10 秒。

无法 Root Cause Analysis(根因分析)。

坑四:Span(执行片段)太细 ​

Framework Internal Detail(框架内部细节)全部进入 Trace。

最终噪声大于价值。

坑五:Span Name(执行片段名称)绑定 Model(模型) ​

换模型以后:

Dashboard(看板)、Evaluation(评测)、Saved Filter(保存过滤条件)全部失效。

坑六:没有 Version Metadata(版本元数据) ​

线上出现问题以后:

不知道哪个 Release(发布版本)引入。

坑七:High Cardinality(高基数)字段成为 Metrics Label(指标标签) ​

导致:

Metrics Storage(指标存储)膨胀。

坑八:全量永久保存 Prompt(提示词)与 Result(结果) ​

产生:

Privacy / Compliance(隐私 / 合规)风险。

坑九:只有 Auto Instrumentation(自动埋点) ​

看到技术调用:

看不到 Agent(智能体)业务语义。

坑十:跨 Worker(工作进程)没有传播 Trace Context(追踪上下文) ​

Long-running Agent(长时间智能体)恢复以后:

链路断裂。

坑十一:所有异步关系都强行使用 Parent-child(父子关系) ​

导致:

Trace(追踪)的真实因果关系失真。

坑十二:Dashboard(看板)很多,但是不能 Drill Down(逐层下钻)到 Trace(追踪) ​

最后只能知道:

系统有问题。

却不知道:

为什么。


11.3 阶段总结 ​

真实 Observability(可观测性)项目最容易失败的地方通常不是:

没有接 SDK(软件开发工具包)。

而是:

数据模型不稳定、语义埋点不足、Correlation(关联)设计错误,导致真正线上排障时数据根本用不起来。


十二、行业平台与技术路线 ​

12.1 真实平台的数据模型有什么共同点? ​

不同平台名称不同,但底层抽象非常接近。

平台 长期上下文 一次执行 单步骤
Langfuse Session(会话) Trace(追踪) Observation(观测单元)
LangSmith Thread(对话线程) Trace(追踪) Run(执行单元)
Phoenix Session(会话) Trace(追踪) Span(执行片段)
OpenAI Agents SDK Group / Conversation(分组 / 对话) Trace(追踪) Span(执行片段)
OpenTelemetry Business Correlation(业务关联) Trace(追踪) Span(执行片段)

本质都是:

Long-lived Context(长期上下文) → Execution(一次执行) → Operation(具体操作)


12.2 行业方案可以分成哪三类? ​

SDK-native(SDK 原生路线) ​

例如:

OpenAI Agents SDK Tracing(OpenAI 智能体 SDK 原生追踪)

优势:

  • Agent(智能体)语义深
  • 接入成本低
  • 原生理解 Tool(工具)、Handoff(任务移交)、Generation(模型生成)

Standards-first(标准优先路线) ​

例如:

OpenTelemetry(开放遥测标准) + 企业传统 APM(应用性能监控)

优势:

  • 跨语言
  • 跨框架
  • 容易和企业已有基础设施融合
  • Vendor Lock-in(厂商绑定)较低

AI-native Platform(AI 原生平台路线) ​

例如:

  • LangSmith
  • Langfuse
  • Phoenix
  • Braintrust

更强调:

Trace(追踪) + Evaluation(评测) + Feedback(反馈) + Dataset(数据集) + Experiment(实验) + Monitoring(监控)


12.3 Traditional APM(传统 APM)和 AI-native Observability(AI 原生可观测性)是二选一吗? ​

通常不是。

Traditional APM(传统应用性能监控)擅长:

  • Infrastructure(基础设施)
  • Service Trace(服务链路追踪)
  • Error(错误)
  • Latency(延迟)
  • Database / RPC(数据库 / 远程过程调用)

AI-native Observability(AI 原生可观测性)补充:

  • Prompt / Completion(提示词 / 模型完成结果)
  • Session(会话)
  • Agent / Tool Semantic(智能体 / 工具语义)
  • Generation(模型生成)
  • Handoff(任务移交)
  • Eval Score(评测得分)
  • Feedback(反馈)
  • Dataset(数据集)
  • Experiment(实验)

更成熟的架构通常是:

text
OpenTelemetry / Unified Telemetry(OpenTelemetry / 统一遥测)
↓
Traditional APM(传统应用性能监控)
+
Agent-native Observability(智能体原生可观测平台)
+
Evaluation Platform(评测平台)
逐项注释(10)
OpenTelemetry
OpenTelemetry:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
Unified
Unified:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Telemetry
Telemetry:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Traditional
Traditional:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
APM
APM:该纯文本块中的状态、决策或错误枚举值。
Agent
Agent:智能体。
native
native:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Observability
Observability:可观测性。
Evaluation
Evaluation:评估。
Platform
Platform:平台。

而不是:

接了 AI-native Observability(AI 原生可观测平台)就不再需要传统 APM(应用性能监控)。


12.4 企业应该 Build vs Buy(自研还是采购)? ​

大型企业更合理的架构通常是:

text
Agent SDK / Runtime(智能体 SDK / 运行时)
↓
Unified Telemetry Schema(统一遥测模型)
↓
OpenTelemetry / Internal Pipeline(开放遥测 / 内部数据管道)
↓
Traditional APM(传统应用性能监控)
+ Agent Trace UI(智能体追踪界面)
+ Metrics / Alert(指标 / 告警)
+ Evaluation Platform(评测平台)
+ Data Warehouse(数据仓库)
逐项注释(19)
Agent
Agent:智能体。
SDK
SDK:该纯文本块中的状态、决策或错误枚举值。
Runtime
Runtime:运行时系统。
Unified
Unified:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Telemetry
Telemetry:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Schema
Schema:结构模式。
OpenTelemetry
OpenTelemetry:该示例中的变量、字段、函数或工具标识;其组成词描述了所承载的数据或执行动作。
Internal
Internal:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Pipeline
Pipeline:流水线。
Traditional
Traditional:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
APM
APM:该纯文本块中的状态、决策或错误枚举值。
Trace
Trace:调用轨迹。
UI
UI:User Interface,用户界面。
Metrics
Metrics:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Alert
Alert:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。
Evaluation
Evaluation:评估。
Platform
Platform:平台。
Data
Data:数据。
Warehouse
Warehouse:该纯文本块中的英文节点、参数、示例值或操作名称,具体语义由所在行及相邻流程共同确定。

关键原则:

Telemetry Standardization(遥测标准化)和 Observability Product(可观测产品)解耦。

避免 Agent Runtime(智能体运行时):

强绑定某一个第三方产品的专有数据结构。


12.5 企业选型真正应该比较什么? ​

应该比较:

  • Trace Data Model(追踪数据模型)
  • Session Support(会话支持)
  • Agent Semantic Type(智能体语义类型)
  • OpenTelemetry Compatibility(OpenTelemetry 兼容性)
  • Evaluation Integration(评测集成)
  • Alerting(告警能力)
  • Dataset / Experiment(数据集 / 实验)
  • Self-host(自托管能力)
  • Privacy(隐私)
  • Query / Scale(查询 / 规模能力)
  • Existing Infrastructure Integration(现有基础设施集成能力)

而不是:

谁的菜单功能最多。


12.6 阶段总结 ​

行业平台真正值得研究的不是:

产品功能列表。

而是:

它们如何定义 Session(会话)、Trace(追踪)、Span(执行片段)等数据模型,如何保留 Agent(智能体)语义,如何支持 Root Cause Analysis(根因分析),以及如何接入企业现有 Telemetry Infrastructure(遥测基础设施)。


十三、与其他模块的边界 ​

13.1 Observability(可观测性)和其他生产能力怎么区分? ​

用同一个 Data Agent(数据智能体)案例最容易理解。

用户问:

为什么昨天 GMV(商品交易总额)下降?

能力 核心问题 同一个案例中的职责
Quality(质量) 做对了吗? 判断 Result Interpretation(结果解释)是否错误
Reliability(稳定性) 失败以后还能稳定恢复吗? SQL Tool Timeout(SQL 工具超时)以后能否安全 Retry(重试)
Controllability(可控性) 行为能不能被约束? 高风险数据访问是否需要 Approval(审批)
Observability(可观测性) 发生了什么,为什么? 重建 Metric(指标)→ SQL(查询)→ Result(结果)→ Answer(答案)完整链路
Performance(性能) 为什么慢,怎么更快? 发现 Tool Span(工具执行片段)占总耗时 70%,进一步优化
Cost(成本) 为什么贵,怎么更省? 发现 Replanning(重新规划)过多导致 Token / Tool Cost(Token / 工具成本)过高

例如:

text
Observability(可观测性)
→ 发现两个 SQL Tool Call(SQL 工具调用)占总延迟 80%

Performance(性能)
→ 决定是否并行执行、缓存或者减少 Tool Call(工具调用)

Observability(可观测性)
→ 发现 Token Cost(Token 成本)异常升高

Cost(成本)
→ 决定如何压缩 Context(上下文)或者进行 Model Routing(模型路由)
逐项注释(10)
Observability
Observability:可观测性。
SQL
SQL:结构化查询语言。
Tool
Tool:工具。
Call
Call:调用。
Performance
Performance:性能。
Token
Token:模型处理文本的词元。
Cost
Cost:成本。
Context
Context:上下文。
Model
Model:模型。
Routing
Routing:路由:根据条件选择模型、工具或处理路径。

所以:

Observability(可观测性)负责建立事实和证据。

它不会代替:

  • Quality Judgment(质量判断)
  • Reliability Recovery(稳定性恢复)
  • Performance Optimization(性能优化)
  • Cost Optimization(成本优化)

13.2 阶段总结 ​

Observability(可观测性)是其他生产能力的重要信息基础。

但它自己的职责始终是:

看清、关联、度量、诊断。


十四、P0 / P1 / P2(面试优先级) ​

14.1 P0:必须掌握 ​

  1. 什么是 Agent Observability(Agent 可观测性)?
  2. Observability(可观测性)和 Monitoring(监控)有什么区别?
  3. Observability(可观测性)和 Evaluation(评测)有什么区别?
  4. 为什么 Traditional APM(传统应用性能监控)不够?
  5. Logs(日志)、Metrics(指标)、Traces(追踪)、Events(事件)有什么区别?
  6. Session(会话)、Trace(追踪)、Span(执行片段)分别是什么?
  7. 一个 Agent Trace(智能体追踪)应该怎么切?
  8. Span Granularity(执行片段粒度)怎么设计?
  9. Trace Schema(追踪模型)应该记录什么?
  10. Span Name(执行片段名称)怎么设计?
  11. 为什么 Auto Instrumentation(自动埋点)不够?
  12. Agent Metrics(智能体指标)怎么分层?
  13. High Cardinality(高基数)怎么处理?
  14. Sampling(采样)怎么设计?
  15. Sensitive Data(敏感数据)怎么治理?
  16. Agent(智能体)出错怎么做 Root Cause Analysis(根因分析)?
  17. First Divergence(第一处偏离点)怎么定位?
  18. Long-running Agent(长时间运行智能体)怎么关联 Trace(追踪)?
  19. Multi-Agent Trace(多智能体追踪)怎么设计?
  20. Observability Product(可观测产品)应该有哪些核心 View(视图)?
  21. Production Trace(生产追踪)怎么进入改进闭环?

14.2 P1:高级工程实践 ​

重点包括:

  • Session Boundary(会话边界)
  • Business ID Correlation(业务 ID 关联)
  • Parent-child vs Span Link(父子关系与执行片段链接)
  • Semantic-first Instrumentation(语义优先埋点)
  • Release / Version Correlation(发布 / 版本关联)
  • Good Trace vs Bad Trace Diff(正常 / 异常追踪差异对比)
  • Agent Graph vs Trace Tree(智能体协作图与追踪树)
  • Distribution / Long Tail(分布 / 长尾)
  • Wall-clock vs Active Execution Time(墙钟总时长与活跃执行时长)
  • Hybrid Sampling(混合采样)
  • Metadata / Payload Separation(元数据与业务负载分离)
  • Tail Sampling Infrastructure Cost(尾部采样基础设施成本)
  • Multi-Agent Responsibility Attribution(多智能体责任归因)
  • Context Propagation(上下文传播)
  • Trace Retention(追踪保留策略)
  • Top-down / Bottom-up Debug(自上而下 / 自下而上排障)

P1(高级优先级)的重点是:

体现是否真正做过 Agent Runtime(智能体运行时)或者 Observability Platform(可观测平台)。


14.3 P2:平台与架构 ​

重点包括:

  • OpenTelemetry(开放遥测标准)
  • GenAI Semantic Conventions(生成式 AI 语义约定)
  • Unified Telemetry Schema(统一遥测模型)
  • Trace Storage Architecture(追踪存储架构)
  • Columnar Trace Store(列式追踪存储)
  • Large Payload Storage(大型业务负载存储)
  • Sampling Pipeline(采样管道)
  • Multi-tenant Isolation(多租户隔离)
  • Query / Index Design(查询 / 索引设计)
  • Telemetry / Product Decoupling(遥测与产品解耦)
  • Build vs Buy(自研还是采购)
  • LangSmith / Langfuse / Phoenix / Braintrust 平台选型
  • Enterprise Agent Observability Platform Architecture(企业级智能体可观测平台架构)

十五、高价值追问链 ​

15.1 Session(会话)/ Trace(追踪)/ Span(执行片段) ​

Session、Trace、Span 是什么? ↓ 一个 Chat Turn(对话轮次)为什么通常一个 Trace? ↓ 为什么整个 Conversation(对话)不建议一个巨大 Trace? ↓ Coding Agent(代码智能体)运行 3 小时怎么办? ↓ HITL(Human-in-the-loop,人在回路中)第二天 Resume(恢复执行)怎么关联? ↓ Parent-child(父子关系)和 Span Link(执行片段链接)怎么选?


15.2 Trace Schema(追踪模型) ​

Trace 应该记录什么? ↓ 为什么不能只记录 Input(输入) / Output(输出)? ↓ Span Granularity(执行片段粒度)怎么定? ↓ Span Name(执行片段名称)怎么设计? ↓ 为什么不能把 Model Name(模型名称)作为业务 Span Name? ↓ Release Version(发布版本)为什么必须记录?


15.3 Metrics(指标) ​

Agent Metrics(智能体指标)看什么? ↓ Error(错误) / Latency(延迟)够吗? ↓ Steps(步骤数) / Tool Calls(工具调用数)为什么重要? ↓ 为什么不能只看 Average(平均值)? ↓ P95 / P99(95 / 99 分位数)说明什么? ↓ Version Regression(版本回归)怎么发现?


15.4 Sampling(采样) ​

为什么不能永久保存 100% Full Trace(全量完整追踪)? ↓ Head Sampling(头部采样)是什么? ↓ Tail Sampling(尾部采样)为什么适合 Agent? ↓ Tail Sampling 的代价是什么? ↓ Hybrid Sampling(混合采样)怎么设计?


15.5 Root Cause Analysis(根因分析) ​

Final Answer(最终答案)错了怎么查? ↓ First Divergence(第一处偏离点)怎么找? ↓ Model / Prompt / Tool / Data(模型 / Prompt / 工具 / 数据)怎么归因? ↓ 为什么要找 Good Trace(正常追踪)做对比? ↓ Multi-Agent(多智能体)怎么确定责任 Agent? ↓ 怎么把 Trace(追踪)变成 Regression Case(回归案例)?


十六、核心记忆点 ​

  1. Observability(可观测性)提供 Evidence(证据),Evaluation(评测)提供 Judgment(判断)。
  2. Session(会话)看长期 Journey(交互旅程),Trace(追踪)看一次执行,Span(执行片段)看具体步骤。
  3. Event(事件)表示瞬时事实,Span(执行片段)表示有生命周期的 Operation(操作)。
  4. 一个能独立 Debug(调试)和 Evaluation(评测)的逻辑单元通常适合作为一个 Trace(追踪)。
  5. 巨大 Trace(追踪)和巨大 Session(会话)都是常见生产坑。
  6. Span(执行片段)粒度应该围绕业务语义、故障边界和诊断价值设计。
  7. Span Name(执行片段名称)应保持稳定,Model(模型)和 Version(版本)放 Attribute(属性)。
  8. Instrumentation(埋点)应该 Semantic-first(语义优先),而不是 Framework-first(框架优先)。
  9. Auto Instrumentation(自动埋点)解决基础链路,Domain Instrumentation(领域埋点)补业务语义。
  10. Business ID(业务 ID)不等于 Observability ID(可观测 ID)。
  11. High Cardinality(高基数)数据适合 Trace(追踪)查询,不适合随便做 Metric Label(指标标签)。
  12. Metadata(元数据)可以默认采,Payload(业务负载)应该谨慎采。
  13. Tail Sampling(尾部采样)适合捕获 Error(错误)、High Cost(高成本)、Low Score(低评分)案例,但基础设施更复杂。
  14. HTTP 200(HTTP 成功)不代表 Agent(智能体)成功。
  15. Agent Metrics(智能体指标)不只看 Error(错误)和 Latency(延迟),还要看 Steps(步骤)、Tool Calls(工具调用)、Loop(循环)、Handoff(任务移交)。
  16. 不能只看 Average(平均值),还要看 Distribution(分布)和 Long Tail(长尾)。
  17. Release(发布版本)、Prompt(提示词)、Agent(智能体)、Tool Version(工具版本)必须与 Trace(追踪)关联。
  18. Long-running Agent(长时间智能体)要区分 Wall-clock Duration(墙钟总时长)和 Active Execution Time(活跃执行时长)。
  19. Dashboard(看板)是异常发现入口,不是 Root Cause Analysis(根因分析)终点。
  20. Good Trace vs Bad Trace Diff(正常 / 异常追踪对比)是非常有效的生产诊断方式。
  21. Quality(质量)判断 First Divergence(第一处偏离点),Observability(可观测性)提供找到它的 Evidence(证据)。
  22. Multi-Agent(多智能体)需要同时具备 Trace Tree(追踪树)和 Agent Graph(智能体协作图)视角。
  23. 平台必须同时支持 Aggregate → Trace(聚合指标下钻到追踪)和 Business ID → Trace(业务 ID 定位追踪)。
  24. Telemetry Schema(遥测模型)应该和具体 Observability Product(可观测产品)解耦。
  25. Observability(可观测性)的终点是 Root Cause(根因)和生产反馈闭环,而不是漂亮的 Trace Page(追踪页面)。

十七、2~3 分钟标准回答 ​

如果面试官问:

你怎么理解生产级 Agent Observability(Agent 可观测性)?

可以回答:

生产级 Agent Observability(Agent 可观测性)不能简单理解成打日志或者接传统 APM(应用性能监控)。Agent(智能体)和普通 Backend(后端服务)最大的区别,是执行路径部分由 Model(模型)在 Runtime(运行时)动态决定,而且很多失败属于 Semantic Failure(语义失败),例如 Tool(工具)选错、参数错误、Retrieval(检索)错误、Tool Result(工具结果)被错误解释或者 Multi-Agent Routing(多智能体路由)错误。这种情况下 HTTP(超文本传输协议)请求可能全部返回 200,所以传统 Error(错误)和 Latency(延迟)指标并不能告诉我们 Agent(智能体)是否真正工作正常。

我通常从五个能力理解 Agent Observability(Agent 可观测性):Reconstructability(可重建性),也就是能不能重建一次完整 Agent Run(智能体执行);Correlatability(可关联性),也就是 Session(会话)、Trace(追踪)、Span(执行片段)、Agent(智能体)、Tool(工具)、Worker(工作进程)和 Business ID(业务 ID)能不能串起来;Measurability(可度量性),也就是单次 Trace(追踪)能不能聚合成系统级 Metrics(指标);Diagnosability(可诊断性),也就是能不能定位 First Divergence(第一处偏离点)和 Root Cause(根因);以及 Actionability(可行动性),也就是发现问题以后能不能进入 Alert(告警)、Bad Case(坏案例)、Evaluation(评测)和 Regression(回归验证)。

数据模型上,我会明确区分 Session(会话)、Trace(追踪)、Span(执行片段)和 Event(事件)。Session(会话)表示长期 Conversation(对话)或者 Task Lifetime(任务生命周期);Trace(追踪)表示一个能够独立 Debug(调试)和 Evaluation(评测)的完整逻辑执行;Span(执行片段)表示 Trace(追踪)里的一个具体 Operation(操作);Event(事件)则适合表示 Retry(重试)、Handoff(任务移交)、Approval Received(收到审批)这种瞬时事实。

Trace(追踪)切分本身很重要。Chat Agent(对话智能体)一般适合一轮一个 Trace(追踪),多轮 Conversation(对话)用 Session(会话)关联。Coding Agent(代码智能体)运行几个小时,不建议全部塞到一个巨大 Trace(追踪),可以按照 Investigation(调查)、Implementation(实现)、Test(测试)、Verification(验证)切成多个 Trace(追踪),再通过 task_id(任务 ID)和 session_id(会话 ID)串起来。Long-running Agent(长时间运行智能体)跨 HITL(人在回路中)或者跨 Worker(工作进程)恢复执行时,也不能只依赖进程内 Trace Context(追踪上下文),而应该持久化业务关联 ID,并通过 Span Link(执行片段链接)或者 Correlation ID(关联 ID)建立后续关系。

Trace Schema(追踪模型)设计上,我会强调 Semantic-first(语义优先)。Span(执行片段)应该围绕 resolve_metric(解析指标)、generate_sql(生成 SQL)、execute_query(执行查询)、validate_result(验证结果)这些稳定业务语义设计,而不是围绕 Framework Node(框架节点)或者 Model Name(模型名称)设计。Model(模型)、Prompt Version(提示词版本)、Agent Version(智能体版本)、Tool Version(工具版本)应该作为 Attribute(属性),这样换模型或者 Release(发布版本)以后,Dashboard(看板)、Evaluator(评测器)和历史分析仍然稳定。

Instrumentation(埋点)一般采用 Auto Instrumentation(自动埋点)和 Domain Instrumentation(领域语义埋点)结合。自动埋点解决 HTTP(超文本传输协议)、LLM(大语言模型)、Database(数据库)等基础链路,业务埋点补 Agent(智能体)真正的语义步骤。Telemetry(遥测)还必须处理 High Cardinality(高基数)、Sensitive Data(敏感数据)和 Sampling(采样)。例如 trace_id(追踪 ID)和 user_id(用户 ID)不应该随便作为 Metrics Label(指标标签),Prompt(提示词)和 Tool Result(工具结果)属于敏感 Payload(业务负载),应该按需采集、脱敏和权限控制。

线上 Metrics(指标)也不能只看 Error(错误)和 Average Latency(平均延迟)。我会同时看 System Metrics(系统指标)、Model Metrics(模型指标)、Agent Metrics(智能体指标)和 Business Metrics(业务指标),尤其关注 Steps per Task(单任务步骤数)、Tool Calls per Task(单任务工具调用数)、Loop Rate(循环率)、Handoff Rate(任务移交率),以及 P50、P95、P99 等 Distribution(分布)和 Long Tail(长尾)。另外必须能够按照 agent_version(智能体版本)、prompt_version(提示词版本)、model(模型)、tool_version(工具版本)以及 release_version(发布版本)做 Correlation(关联),因为很多真实线上问题首先表现为某个版本上线以后 Agent(智能体)行为突然漂移。

出现 Bad Case(坏案例)以后,我会沿 Trace(追踪)从 Intent(意图)、Context(上下文)、Planning(规划)、Tool Selection(工具选择)、Arguments(工具参数)、Tool Result(工具结果)、State(状态)一路到 Final Answer(最终回答),寻找 First Divergence(第一处偏离点),同时找到一个 Good Trace(正常追踪)和 Bad Trace(异常追踪)做 Diff(差异对比),再结合 Release / Version Comparison(发布 / 版本对比)判断到底是 Prompt(提示词)、Model(模型)、Tool(工具)、Data(数据)、State(状态)还是 Routing(路由)问题。Multi-Agent(多智能体)还要记录 source_agent(来源智能体)、target_agent(目标智能体)、subtask(子任务)、handoff(任务移交)和 parent_task(父任务)信息,才能进行跨智能体责任归因。

平台层面,我不会让 Agent Runtime(智能体运行时)强绑定某一个 Observability Product(可观测产品)。我更倾向于先定义 Unified Telemetry Schema(统一遥测模型),尽量兼容 OpenTelemetry(开放遥测标准),然后分别接入 Traditional APM(传统应用性能监控)、Agent Trace UI(智能体追踪界面)、Metrics / Alert(指标 / 告警)、Evaluation Platform(评测平台)和 Data Warehouse(数据仓库)。这样 Telemetry Standardization(遥测标准化)和 Product Layer(产品层)解耦,未来切换平台或者同时接多个系统都会更容易。

所以我认为生产级 Agent Observability(Agent 可观测性)的本质是:

让 Agent(智能体)的每一次行为都能够被完整重建、跨上下文关联、系统化度量并最终定位 Root Cause(根因),然后把线上失败转化成真正可以推动系统改进的生产证据。


十八、最终记忆模型 ​

18.1 五个系统能力 ​

Reconstructability(可重建性) Correlatability(可关联性) Measurability(可度量性) Diagnosability(可诊断性) Actionability(可行动性)

18.2 三级数据模型 ​

Session(会话) → Trace(追踪) → Span(执行片段)

对应:

长期上下文 → 一次完整执行 → 一个具体操作

18.3 四类基础 Telemetry Signal(遥测信号) ​

Logs(日志) Metrics(指标) Traces(追踪) Events(事件)

18.4 两类观测信号 ​

Runtime Telemetry(运行时遥测):Logs(日志) / Metrics(指标) / Traces(追踪) / Events(事件)

AI Semantic Signals(AI 语义信号):Eval Score(评测得分) / Feedback(反馈) / Annotation(人工标注)

18.5 八步主链路 ​

建模 → 采集 → 串联 → 聚合 → 监控 → 发现 → 诊断 → 反馈

18.6 三个产品观察尺度 ​

Session View(会话视图):看完整用户 / 任务 Journey(交互旅程)

Trace Tree / Timeline(追踪树 / 时间线):看一次执行和性能路径

Agent Graph(智能体协作图):看 Multi-Agent(多智能体)协作关系

18.7 一句话 ​

Agent Observability(Agent 可观测性)的本质,是让每一次 Agent(智能体)行为都可重建、可关联、可度量、可诊断,并最终转化成可以采取行动的生产证据。