什么是 Trace
Trace,中文通常叫“执行轨迹”或“链路追踪”,是记录一次请求从开始到结束所经过的全部可观测步骤,并用父子关系把这些步骤串联起来的数据结构。

在 AI 应用里,一条 Trace 可以记录问题改写、知识检索、提示词构建、模型调用、工具调用、输出校验和最终回复。每个步骤的输入、输出、耗时、状态与资源消耗,都可以作为现场信息保存下来。
简单说,Trace 就像装在 AI 后台的一台全程执法记录仪。最终答案只告诉你“车到了哪里”,Trace 则告诉你走了哪条路、在哪里等待、何时变道,以及哪一步发生了异常。
需要先澄清一个边界:Trace 记录的是应用能够观测到的执行过程,不等于读取大模型内部不可见的神经网络推理,也不应被理解为完整暴露模型的私有思维链。
一句话总结:Trace 不是只保存 AI 的答案,而是保存这份答案是怎样被系统一步步生产出来的。
为什么可以把 Trace 理解成行车记录仪
一次 AI 请求很像一段导航行程。系统收到用户问题是起点,返回答案是终点,中间的检索、模型调用和工具执行则是转弯、等待与临时改道。
复盘一趟行程时,只看终点没有意义。真正有用的信息是:哪段路拥堵、在哪里走错、为什么绕路,以及每一段分别花了多久。Trace 正是把这些信息按照时间和调用关系保存下来。

传统日志更像路边摄像头偶尔拍到的照片。不同服务各写一行文字,开发者还要靠时间戳、请求 ID 和经验手动拼图。Trace 则像一段带时间轴的完整视频,可以从根请求一路展开到某次具体的模型或数据库调用。
| 维度 | 日志 Log | Trace 执行轨迹 |
|---|---|---|
| 记录重点 | 单个事件或文本消息 | 一次请求的完整调用链 |
| 数据关系 | 默认彼此独立 | 通过 Trace ID、Span ID 和父子关系连接 |
| 排障方式 | 搜索关键词并人工还原上下文 | 沿时间轴和调用树定位异常步骤 |
| 耗时分析 | 需要自行对齐时间戳 | 每个 Span 直接记录开始、结束和耗时 |
| 适合回答 | “发生过什么事件?” | “这次请求为什么慢、贵或答错?” |
日志和 Trace 不是替代关系。日志适合保存离散事件,Trace 适合还原一次请求的端到端路径,两者结合才能提供完整上下文。
为什么 AI 应用尤其需要 Trace
AI 的最终回答通常不是一次模型调用直接产生的,而是一条由检索、生成、工具与规则共同组成的执行链。链路越长,结果出错时越难只凭最终文本定位原因。

以一个知识库助手为例,用户只问了一句话,后台却可能依次完成七个动作:
- 接收用户问题。
- 把口语问题改写成适合检索的查询。
- 从向量数据库召回相关文档。
- 把文档、历史对话和系统规则组合成提示词。
- 调用大模型生成初步答案。
- 发现信息不足后,再调用搜索或业务工具。
- 汇总结果、校验格式并返回最终回复。
这条链路中的任一步都可能让结果偏离预期:改写丢失了限定条件、检索返回了过期文档、工具参数格式错误、模型选错工具、上下文被截断,或者输出校验失败后触发了多次重试。

没有 Trace,开发者只能看到“回答错了”或“等了 12 秒”;有了 Trace,问题可以被改写为一个可验证的判断,例如“检索 Span 返回的前三篇文档都不相关”或“第二次模型调用占用了总耗时的 74%”。
因此,Trace 在 AI 时代变得重要,不是因为传统软件不需要追踪,而是因为 AI 应用把更多概率性步骤和外部依赖放进了同一次请求。
一条 Trace 为什么由多个 Span 组成
Span 是 Trace 中最小的独立执行单元。一条 Trace 通常由一个根 Span 和多个子 Span 构成,子 Span 还可以继续包含更细的嵌套 Span。

假设系统要“回答用户关于退款政策的问题”,它的 Span 结构可以写成:
Trace: 回答退款政策问题
└── Root Span: 处理用户请求
├── Span: 改写检索问题
├── Span: 检索知识库
│ ├── Span: 生成 Embedding
│ └── Span: 查询向量数据库
├── Span: 调用大模型
│ ├── Span: 构建提示词
│ └── Span: 流式生成回答
└── Span: 校验并格式化输出
这种结构像套娃,也像一棵调用树。根 Span 表示整个用户请求;子 Span 表示改写、检索和生成等独立步骤;更深一层的 Span 则描述数据库查询、HTTP 请求或流式输出。

父子结构让开发者同时看到两种信息:一是调用顺序,二是谁触发了谁。仅仅知道“向量数据库查询耗时 2 秒”还不够,Trace 还能说明这次查询属于哪位用户的哪次请求,以及它的上游输入是什么。
每个 Span 应该记录哪些现场信息
一个有诊断价值的 Span,至少应记录身份、时间、输入输出、状态与关键配置。只记录步骤名称而没有上下文,仍然无法解释问题。

常见字段包括:
| 字段 | 作用 | AI 场景示例 |
|---|---|---|
trace_id | 标识整条请求轨迹 | 同一次问答中的所有 Span 共享一个 Trace ID |
span_id | 标识当前执行单元 | 某次向量检索或模型调用的唯一 ID |
parent_span_id | 建立父子调用关系 | 模型调用属于“生成回答”这个父步骤 |
| 开始与结束时间 | 计算耗时和先后顺序 | 检索耗时 820 ms,模型生成耗时 2.4 s |
| 输入与输出 | 回放该步骤的数据现场 | 检索词、命中文档、提示词、模型原始回复 |
| 状态与错误 | 判断成功、失败或重试 | 超时、限流、解析失败、工具参数不合法 |
| 模型与参数 | 复现模型调用配置 | 模型版本、temperature、最大输出 Token |
| 用量数据 | 分析成本和容量 | 输入 Token、输出 Token、缓存命中量 |
一个简化后的模型调用 Span 可以表示为:
{
"trace_id": "tr_01J...",
"span_id": "sp_7F...",
"parent_span_id": "sp_2A...",
"name": "llm.generate",
"start_time": "2026-08-12T10:00:02.500Z",
"duration_ms": 2380,
"attributes": {
"model": "example-model-v3",
"temperature": 0.2,
"input_tokens": 1840,
"output_tokens": 326
},
"status": "ok"
}
不同平台的字段名可能不同,但核心原则一致:每个 Span 都要能回答“谁在什么时候,用什么输入和配置做了什么,产生了什么结果”。
如何用 Trace 回放一次 AI 故障
Trace 排障的核心方法是先找到失败请求,再沿 Span 树回放执行路径,最后把异常定位到一个可验证的步骤。

例如,一个客服助手突然给出了与退款无关的回答。开发者可以按下面的顺序检查:
- 用用户 ID、会话 ID、时间范围或反馈记录找到对应 Trace。
- 查看根 Span 的总耗时、最终状态和输出。
- 沿时间线检查问题改写、检索、模型和工具 Span。
- 对比每一步的输入与输出,找出第一次出现偏差的位置。
- 检查错误、重试、模型版本与参数是否发生变化。
- 修复后用相同输入重放,确认轨迹和答案是否恢复正常。
如果检索结果正确,而构建后的提示词混入乱码,那么问题属于提示词组装;如果提示词正确,但工具 Span 返回旧数据,那么问题属于工具或数据源;如果所有输入都正确,模型输出仍偏题,则需要进一步评估模型、提示策略与输出约束。
这种排障方式把“模型今天好像不稳定”变成了具体证据。Trace 的价值不是让问题自动消失,而是缩短从异常现象到根因假设的距离。
Trace 在生产环境能解决哪些问题
在生产环境中,Trace 最直接的价值是把质量、延迟、成本和可靠性落到具体步骤,而不是只看整个系统的平均值。
如何用 Trace 定位慢请求
先筛选慢 Trace,再比较每个 Span 对总耗时的贡献,就能找到瓶颈来自检索、模型、工具还是重试。

例如,监控面板显示 P95 延迟从 3 秒升到 6 秒。展开最慢的一批 Trace 后,如果“向量查询”Span 从 0.8 秒升到 5.9 秒,而模型 Span 没有明显变化,就应优先检查向量数据库容量、索引或网络,而不是盲目更换模型。
如何用 Trace 控制 Token 成本
按模型调用 Span 汇总输入和输出 Token,再按提示词组成、用户场景和模型版本分组,可以定位预算花在哪里。

如果输入 Token 持续增长,可以继续检查是系统提示词膨胀、对话历史过长,还是检索塞入了太多文档。与“每月模型费用上涨”相比,这些结论更容易转化为压缩提示词、限制 top-k 或启用缓存等工程动作。
如何用 Trace 改进回答质量
将用户采纳、人工评分、任务成功率或引用准确率关联到 Trace,可以比较成功与失败轨迹的差异。高质量 Trace 还可以成为评估集或训练数据的候选来源。
但生产轨迹不能未经处理就直接用于训练。团队必须先获得合法授权,删除敏感信息,处理版权和数据保留要求,并过滤错误答案、提示词注入和低质量反馈。
Trace、Metrics 和 Logs 应该怎样配合
Metrics、Logs 和 Traces 解决的问题不同:指标负责发现异常,Trace 负责定位异常路径,日志负责补充具体事件细节。
| 可观测数据 | 最适合回答的问题 | 典型例子 |
|---|---|---|
| Metrics 指标 | 系统整体是否异常? | P95 延迟、错误率、Token 成本、请求量 |
| Logs 日志 | 某个组件报告了什么事件? | 解析异常、数据库错误、重试原因 |
| Traces 轨迹 | 某次请求为什么异常? | 哪个 Span 最慢、哪个输入开始跑偏 |
一个常见排障流程是:先从指标发现 P95 延迟上升,再打开对应时间段的慢 Trace 定位 Span,最后查看该 Span 关联的日志确认数据库错误或限流详情。
因此,Trace 不是完整可观测性的唯一答案。它是把跨组件的一次请求连接起来的骨架。
实施 AI Trace 时有哪些限制和风险
Trace 提高了透明度,也会引入隐私、成本、性能和解释边界。生产系统不能默认把所有输入输出永久、明文、全量保存。
| 风险 | 具体表现 | 建议措施 |
|---|---|---|
| 敏感数据泄露 | 提示词可能包含姓名、订单、密钥或内部文档 | 字段白名单、脱敏、加密、访问控制和保留期限 |
| 存储成本增长 | 流式输出、长上下文和高请求量产生大量数据 | 采样、分层存储、压缩和自动过期 |
| 性能开销 | 同步上报大字段增加请求延迟 | 异步批量导出,并限制单个 Span 大小 |
| 数据不完整 | 采样或异常退出导致轨迹缺失 | 明确采样策略,监控导出失败率 |
| 误读“推理过程” | 应用步骤被误认为模型内部真实思维 | 将可观测调用链与不可见内部计算分开表述 |
| 数据滥用 | 未经授权把用户轨迹用于评估或训练 | 建立同意、用途限制、审计和删除机制 |
还要注意,生产环境通常不需要记录原始密钥、认证头、完整用户文档或所有模型输出。可观测性系统本身也属于高敏感基础设施,必须执行最小权限原则。
如何为 AI 应用设计一条有用的 Trace
一条有用的 Trace 应该围绕用户任务设计,而不是围绕代码函数数量设计。每个 Span 都应对应一个可独立衡量、可能失败或值得优化的步骤。
可以从下面的最小方案开始:
- 为每次用户请求创建根 Span,并传播统一的 Trace ID。
- 为检索、模型调用、工具调用和输出校验创建子 Span。
- 记录耗时、状态、模型版本、Token 和重试次数。
- 对提示词、文档与用户数据执行脱敏或摘要化记录。
- 把用户反馈、任务成功状态和业务结果关联到 Trace。
- 为慢请求、高成本和错误状态建立筛选视图。
- 定期检查采样率、存储期限和访问权限。
在跨服务环境中,可以采用 OpenTelemetry 的 Trace 与 Span 概念统一上下文传播和数据模型,再把 AI 特有的模型、Token、提示词模板、检索结果与工具信息作为属性或事件补充进去。
最小可用的 Trace 不需要记录一切,但必须足以回答三个问题:这次请求走了哪些步骤,时间和成本花在哪里,第一次偏差发生在哪一步。
常见问题
Trace 能看到大模型真正的思考过程吗
不能直接看到。Trace 能记录应用显式执行的步骤、模型请求与响应、工具调用和公开的中间结果,但不能自动读取模型内部神经网络的真实计算过程或隐藏思维链。更准确的说法是:Trace 让 AI 应用的执行链透明,而不是让模型内部机制完全透明。
Trace 和日志有什么区别
日志记录离散事件,Trace 用父子 Span 和统一 Trace ID 还原一次请求的完整路径。日志适合回答某个组件报告了什么,Trace 适合回答一份结果经过哪些步骤、为什么慢或从哪里开始出错。
Span 是什么
Span 是 Trace 中一个独立的执行单元,通常包含名称、开始时间、结束时间、状态、输入输出和属性。例如,一次向量数据库查询、一次模型调用或一次工具执行都可以是一个 Span。
AI Agent 和 RAG 都需要 Trace 吗
需要,尤其是包含多步决策的系统。RAG 需要追踪查询改写、召回文档、重排序和答案生成;AI Agent 还需要追踪工具选择、参数、执行结果、重试与循环终止条件。
Trace 会不会泄露用户隐私
会有这种风险。提示词、检索文档和工具结果可能包含个人信息、业务数据或密钥,因此应在采集前脱敏,限制字段、访问权限和保存期限,并避免默认记录认证信息与完整敏感内容。
是否应该保存每一条 Trace
不一定。低流量或调试环境可以提高采样率,高流量生产环境通常需要按错误、延迟、用户反馈或随机比例采样。采样策略应同时覆盖典型请求和异常请求,否则分析结果会产生偏差。
总结:先看见,才谈得上改进
Trace 是一次 AI 请求从输入到输出的完整执行轨迹。它以根 Span 和子 Span 组织检索、模型、工具与校验步骤,并记录耗时、Token、状态、输入输出和关键配置。

它让开发者不再只面对一个好或坏的最终答案,而是能回答:结果从哪里开始偏离、时间花在哪一步、成本为什么上涨,以及哪次工具调用真正失败。
Trace 不是模型内部思维的读取器,也不能替代指标、日志、安全控制和人工评估。它的真正角色,是给复杂 AI 系统提供一条可回放、可度量、可审计的证据链。
无论使用 LangChain、其他 Agent 框架,还是直接调用模型 API,原则都一样:先让每个关键执行步骤留下可靠轨迹,再根据真实证据调试和优化。因为只有先看见,才谈得上改进。

