Trace与Span
1. 定义与边界
Trace(链路追踪)表示一次 Agent 任务的完整执行过程。Span(跟踪片段)表示其中一个可观测步骤,例如一次模型调用、一次工具调用、一次检索、一次护栏检查。Trace 与 Span 解决的是跨组件定位问题,不是替代业务日志。
2. 为什么重要
生产问题常常跨系统:用户请求进入网关,Agent 调模型,模型选择工具,工具查数据库,数据库超时,Agent 重试并给出错误回答。没有 trace/span,团队很难知道慢在哪里、错在哪里、谁触发了动作。
3. 核心机制
Span 应包含:
- parent_span_id:还原调用树。
- start/end time:计算耗时和瓶颈。
- attributes:模型、工具、任务类型、风险等级。
- events:重试、异常、流式输出、人工确认。
- status:ok、error、cancelled、denied。
4. 工程实现
{
"trace_id": "tr_refund_001",
"span_id": "sp_tool_002",
"parent_span_id": "sp_agent_loop_001",
"name": "tool.refund_payment",
"kind": "client",
"start_time": "2026-05-09T10:00:01Z",
"end_time": "2026-05-09T10:00:03Z",
"attributes": {
"agent.version": "3.1.0",
"gen_ai.operation.name": "tool_call",
"tool.name": "refund_payment",
"tool.risk": "payment"
},
"status": {"code": "ERROR", "message": "policy_denied"}
}
5. 生产实践
- trace_id 要通过 HTTP header、消息队列 metadata、工具调用上下文传递。
- Span 命名要稳定,例如
model.plan、retrieval.search、tool.get_order。 - 不要把高基数字段无限塞入 attributes,例如完整 prompt、完整文档内容。
- 采样策略要区分普通任务和高风险任务;错误和安全事件应优先保留。
6. 常见反模式
- 每个组件各自生成 id,无法串起来。
- 所有步骤都记录成同一种 span,无法区分模型、检索、工具。
- 只采样成功请求,导致事故分析缺证据。
- Trace 中包含未脱敏原文,扩大数据泄漏面。
7. 评测方法
| 指标 | 用途 |
|---|---|
| Trace Completeness | 关键 span 是否完整 |
| Parent-child Validity | 调用树是否可还原 |
| Error Span Coverage | 错误是否带状态、错误码和原因 |
| Cross-service Propagation | 跨服务 trace_id 是否连续 |
8. 安全与治理
Trace 是审计材料,也是敏感数据集合。要限制查看权限,按环境隔离,设置保留周期,并对高风险工具参数做摘要或脱敏。
9. 权威资料
- OpenTelemetry traces: https://opentelemetry.io/docs/concepts/signals/traces/ (核对日期:2026-05-09)
- W3C Trace Context: https://www.w3.org/TR/trace-context/ (核对日期:2026-05-09)
- OpenAI Agents SDK tracing: https://openai.github.io/openai-agents-python/tracing/ (核对日期:2026-05-09)
- LangSmith tracing docs: https://docs.langchain.com/langsmith/observability (核对日期:2026-05-09)
15. 主控验收清单
- 是否有统一 root span:
agent.run。 - 是否每次模型调用都有
model.callspan。 - 是否每次工具调用都有
tool.callspan。 - 是否审批和策略检查有独立 span。
- 是否跨 API、worker、工具服务传播 trace context。
- 是否失败 span 带 error code 和可读 reason。
- 是否记录 prompt、model、tool、policy 版本。
- 是否能从 trace 生成回放证据包。
- 是否对高危和失败 trace 全量保留。
- 是否对普通成功 trace 做合理采样。
- 是否避免保存完整工具参数和隐私输入。
- 是否有 trace export drop 告警。
- 是否能按租户和环境控制访问。
- 是否把 trace 字段完整率接入仪表盘。
- 是否在 SDK 升级后复查 GenAI 语义字段变化。
- 是否兼容 OpenTelemetry 语义约定仍处于发展中的字段调整。
- 是否定义供应商字段到内部字段的映射表。
- 是否记录 span 采样决策,便于解释缺失数据。
- 是否对长任务跨 worker 续接 trace。
- 是否在回放时能复用原 trace 的关键上下文。
- 是否对审批等待时间使用独立 span,避免误算模型延迟。
- 是否把 queue wait time 和 execution time 分开。
- 是否能追踪异步 webhook 回调。
- 是否为安全审计保留关键 trace 的不可变副本。
- 是否定期用合成任务验证 trace 完整性。
10. 二次精修:Agent Trace 结构
Trace 要还原一次 Agent run 的控制流。OpenTelemetry GenAI 语义约定截至 2026-05-09 仍标记为 Development,生产落地时应保留自定义字段的兼容层。
{
"name": "agent.tool_call",
"trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"span_id": "00f067aa0ba902b7",
"parent_span_id": "b7ad6b7169203331",
"attributes": {
"gen_ai.system": "openai",
"gen_ai.request.model": "gpt-5",
"agent.id": "refund_agent",
"agent.version": "1.8.2",
"tool.name": "search_order",
"tool.args_hash": "sha256:abc",
"policy.decision": "allow",
"cost.usd": 0.04
},
"status": {"code": "OK"}
}
11. Span 命名与属性表
| Span | Parent | 必须属性 |
|---|---|---|
agent.run | API request | run_id、agent_version、session_id |
model.call | agent.run | model、tokens、latency、prompt_version |
tool.call | agent.run | tool.name、args_hash、status、duration |
policy.check | agent.run | policy.version、decision、risk_level |
state.update | agent.run | state.version、status_from、status_to |
approval.wait | agent.run | approval_id、approver_role、result |
12. Trace 质量指标
| 指标 | 目标 |
|---|---|
| Trace Completeness | 关键 span 覆盖率高于 99% |
| Span Error Coverage | 失败 span 必须有 error code |
| Context Propagation | 跨服务 trace_id 连续 |
| Sensitive Attribute Leak | 目标为 0 |
| Cost Attribution Coverage | 模型和工具成本可归因 |
| Replay Readiness | trace 足以生成回放证据包 |
13. 运维与安全
- trace 采样要基于风险:失败、高成本、安全事件、高危工具全量保留。
- 跨服务调用必须传播 W3C Trace Context,避免工具链路断裂。
- trace 属性里保存 hash、引用和枚举,不保存完整敏感 payload。
- trace 后端访问需要按租户、环境、角色分级。
- 观测 SDK 故障时不能影响主链路;导出失败要计数告警。
14. 补充权威资料
- OpenTelemetry traces: https://opentelemetry.io/docs/concepts/signals/traces/ (核对日期:2026-05-09)
- OpenTelemetry GenAI semantic conventions: https://opentelemetry.io/docs/specs/semconv/gen-ai/ (核对日期:2026-05-09)
- W3C Trace Context: https://www.w3.org/TR/trace-context/ (核对日期:2026-05-09)