← 返回题目列表

RAG 链路 Trace 应该记录哪些信息?

中等 第 21 / 29 题 更新于 2026/09/18
RAG可观测性TraceLLMOps

简化版

RAG Trace 要串起一次请求的查询处理、过滤、召回、重排、上下文组装、模型生成、引用校验和最终反馈。每段记录版本、耗时、Token、候选/淘汰的文档 ID 与分数、权限决策和错误,但对原文、Prompt 和用户数据默认脱敏;用统一 trace_id 才能分层定位“没入库、没召回、没装入还是没用对”。

详细版

入口记录匿名主体/租户、query hash、语言与路由;检索记录 index/embedding/chunker 版本、filter AST、Top-k、chunk ID 和分数;rerank 记录模型与前后排名;packing 记录最终 source ID、Token 和截断原因;生成记录 Prompt/模型/参数版本、输入输出 Token、首 Token/P95、状态和 citations。

安全上不把敏感正文直接写普通日志,使用 ID、hash、长度与分类标签,受控短期 payload store 仅供授权回放。指标由 trace 聚合:分阶段延迟、零召回、证据 Recall、引用失败、无答案、缓存命中和成本。采样策略对普通成功请求低比例,对错误/高风险全采,并保证跨服务时钟和 span 父子关系正确。

request span
 ├─ rewrite/router
 ├─ retrieve/filter
 ├─ rerank
 ├─ pack
 ├─ generate
 └─ validate/citation/tool

完整版教学

一、为什么只有最终答案日志不够

用户看到错答,可能是文档未入库、过滤过严、召回排序差、上下文截断或模型没依据证据。只保存问题与答案无法区分这些层,团队会盲目改 Prompt。Trace 让每个中间决策可关联和重放。

可观测性不等于全量记录隐私原文。目标是保存足够的结构、版本和 ID,在有权限时可回源;默认日志应最小化内容。

二、Span 结构如何设计

一个请求为 root span,各阶段为 child span,工具/模型外部调用继续嵌套。每个 span 统一记录 start/end、status、retry、service 和 version。并行多查询检索可有多个 sibling span,随后 fusion span 汇总。

{"trace_id":"t1","span":"retrieve","parent":"root",
 "index_version":"idx-42","top_k":20,"latency_ms":83,
 "result_ids":["c17","c93"],"status":"ok"}

记忆钩子:Trace 要记录“做了什么选择、基于哪个版本、花了多久”,内容本身只在必要和授权时回放。

三、检索阶段记录哪些字段

保存原查询 hash、规范化/扩展 query 的 ID、filter AST、index snapshot、embedding 模型、ANN 参数和候选 chunk/document ID、raw/rerank 分数。权限过滤前后的数量要记录,但无权文档 ID 也需按安全策略限制可见。

阶段关键字段可诊断问题
入库doc/chunker/embed版本旧索引、切块错误
召回query、filter、Top-k漏召回、过严过滤
重排输入/输出排名真证据被降权
Packing选中ID、Token、截断证据被丢
生成模型/Prompt、Token忽略证据、成本
校验claim/citation状态不支持声明

候选与最终上下文必须都记,才能知道证据在哪一步消失。

四、生成与验证怎样记录

记录模型精确版本、Prompt manifest、temperature、max tokens、输入/输出 Token、TTFT、总延迟、finish_reason 和重试。最终渲染 Prompt 可保存加密短期快照或 hash+依赖,以满足复现与隐私平衡。

引用校验记录每个 claim 的 source_ids、validity、entailment 与权限结果。无答案应有 reason code,例如 no_retrieval_hit、insufficient_support、conflicting_sources,而不是统一 success=false。

五、隐私与安全边界

日志本身可能聚合用户问题、合同和模型答案,成为高价值敏感库。默认记录稳定 ID、hash、长度、分类和数值指标;正文进入权限隔离、加密、有保留期的 payload store,并对访问审计。密钥和凭据永不记录。

跨租户 dashboard 做聚合,不能显示单条文档标识给无权运维人员。用户删除请求要覆盖日志和 payload;采样也不能把高风险正文以“调试”为由永久保存。

六、从 Trace 聚合哪些指标

系统指标包括各 span P50/P95/P99、错误率、重试和队列时间;RAG 指标包括零结果、过滤后候选数、rerank 提升、context Token、无答案、citation failure;成本包括 embedding/LLM Token 与 cache hit。质量标签通过 feedback_id 回连 trace。

假设总 P95 2.4秒,其中 retrieval 0.1、rerank 0.8、generate 1.3、其他 0.2,优化向量库收益有限。若真证据候选中出现但最终 context 没有,重点修 packing。Trace 使性能和质量优化都有证据。

七、采样与回放

全量详细 payload 成本与隐私压力高。可全量保留轻量 metadata,对成功请求 1% 保存详细 trace,对错误、低置信、权限拒绝和高延迟全采样。采样决定应尽量在结果后做 tail-based sampling,否则事前不知道哪些是异常。

回放环境固定索引快照、Prompt/模型版本和候选 ID。外部模型可能不可完全复现,仍可比较结构输出和阶段行为。生产 payload 回放到测试环境前先脱敏,禁止意外调用真实写工具。

八、常见误区与追问

  • 误区:记录最终 Prompt 和答案就叫可观测。 缺候选、过滤和版本,无法定位链路故障。
  • 误区:为了调试应永久全量保存原文。 会制造严重隐私与合规风险,metadata 与受控 payload 分层。
  • 误区:平均延迟足够。 尾延迟和各 span 分解才指向瓶颈。
  • 追问:最关键的关联字段是什么? trace_id 加不可变版本 manifest,贯穿请求和反馈。
  • 追问:如何定位真证据在哪里丢失? 比较召回候选、rerank 排名和最终 packing ID。
  • 追问:怎样控制日志成本? 轻量字段全量,异常 tail sampling,正文短期受控存储。

九、加强记忆

RAG Trace 可记成“链路全、版本全、正文少、异常多采、反馈可回连”。从 query 到 validation 每步都有 span,记录候选与淘汰决策、Token 和延迟;用 ID/hash 保护隐私,异常详细采样;把用户反馈连回当时版本。这样错答才可分层、慢请求才可归因、事故才可重放。