跳到主要内容

AI 系统的数据溯源:追踪答案来源已成为工程必修课

· 阅读需 11 分钟
Tian Pan
Software Engineer

生产环境中的 LLM 给出了一个错误的答案。一张支持工单到来。你翻查日志,只看到提示词、补全内容和延迟指标——却没有任何信息说明检索系统到底拉取了哪些文档哪些块进入了上下文窗口,或者模型在综合答案时最依赖的是哪段内容。你只能像做考古一样:重新对一个已经更新过的语料库跑一次查询,祈祷结果还和之前一样,同时不知道问题究竟出在检索、分块、文档本身还是模型推理上。

这就是数据溯源的缺口,而大多数 AI 团队直到掉进去才意识到它的存在。

溯源——记录输出结果的完整来源链——在数据工程领域并不是新概念。数据管道多年来一直在追踪数据血缘,因为下游消费者需要知道数字的来源,才能信任和调试它们。同样的逻辑适用于 AI 系统,但故障模式更为严重:数据库返回一个过期值令人恼火;而语言模型从过期或相互矛盾的来源中自信地综合出一个答案,则是一次信任危机事件。

三个需要溯源来解决的核心问题

工程师往往把数据溯源视为合规话题——某个法律团队在产品出货到欧洲之前才会提的需求。这种定位过于狭窄。溯源实际上解决三类截然不同的问题,而其中只有一类是监管要求。

调试:当基于 RAG 的功能给出错误答案时,故障可能潜伏在任何地方。检索模型可能拉取了无关的块;这些块可能被正确检索,但来自一个本身就有误或已过时的文档;模型可能忽略了好的证据,却依赖了较弱的检索文本。如果不知道每个响应对应的具体情况——检索了哪些源文档、哪些块实际进入了上下文窗口、模型生成答案时在关注什么——你就无法区分这些故障模式。没有这条链,调试就是猜谜。

合规:《欧盟人工智能法案》第 10 条对高风险系统的要求将于 2026 年 8 月生效,明确要求记录 AI 训练数据的溯源文档。GDPR 的透明度义务覆盖范围更广:对于任何处理个人数据的 AI 系统,组织必须能够回应数据主体访问请求,具体说明系统接触了哪些数据、何时接触、用于何种目的。对于自主调用工具、在一个会话中跨步骤摄取数据的智能体系统,监管机构现在要求提供执行轨迹——涵盖每个被观察的数据类别、每次工具调用、每次状态更新的持久化、可检索记录。"我们运行一个 LLM"不是能回答第 15 条问题的答案。

信任:AI 功能用户采纳率的实际天花板,往往不是整体准确率——而是用户第一次发现一个自信表述的幻觉的那一刻。带引用的响应直接解决了这一问题,给用户提供了验证声明的途径。但引用只有在准确的前提下才有帮助:引用一个并不包含所声称信息的文档,比没有引用更糟糕,因为它制造了接地的表象,却没有实质。溯源基础设施使得在向用户展示引用之前先验证其准确性成为可能,而不是信任模型自我报告。

推理时溯源的真正含义

训练数据血缘(追踪哪些来源构成了模型权重)和推理时溯源(追踪哪些来源促成了特定响应)之间存在重要区别。两者都重要,但它们存在于不同的系统中,需要不同的埋点方式。

训练数据血缘是模型治理问题。它涉及来源注册表、转换日志和数据集版本控制——与模型构建者以及需要证明训练数据依法获取、准确记录的受监管行业相关。大多数部署第三方基础模型的产品团队在这里的可见性有限,只能依赖模型提供商的披露信息。

推理时溯源是产品工程问题。每个在 LLM 之上构建的团队——无论通过 RAG、工具调用还是多步骤智能体——都可以且应该拥有这一层。它需要对每个面向用户的响应追踪:

  • 哪些文档或数据源是候选项(已检索但不一定被使用)
  • 哪些块被包含在上下文窗口中
  • 哪些源标识符出现在模型输出中或影响了最终答案
  • 每个来源在检索时的时间戳和版本

这一层是团队可以掌控的,也是调试和信任问题真正得以解决的地方。

血缘标记模式

推理时溯源的基础是随每个块在管道中流动的元数据。当你索引一个文档时,每个块至少应携带:

  • 一个稳定的来源 ID(与文档绑定的哈希值或标识符,而非其位置)
  • 一个版本或时间戳,表明文档最后修改的时间
  • 一个位置引用——URL、文件路径或数据库记录 ID
  • 一个块跨度——在源文档中的字符或章节偏移量

当检索查询运行时,系统记录返回了哪些源 ID、排名顺序,以及哪些被包含在最终上下文中。当模型生成响应时,系统记录哪些源 ID 存在于它被给予的上下文中。

这种模式不要求模型引用任何东西。它在基础设施层面被动记录溯源,无论模型说什么都会执行。这是关键洞察:你不希望溯源依赖模型的自我报告,因为模型会误归因。你希望管道维护一条监管链,能够在不重新运行推理的情况下重建"这个答案生成时哪些内容在范围内"。

这也意味着溯源在语料库更新后依然有效。如果一个文档在响应生成后发生了变化,你仍然拥有当时在范围内的源 ID 和版本——你可以回溯审计模型看到的那个特定版本的来源。

为什么朴素的引用方法会失败

许多团队的第一直觉是通过提示模型来解决溯源问题:"引用你的来源。"这在演示中效果足够好,但在生产环境中由于几个原因会急剧退化。

第一,模型的自我归因是不可靠的。研究表明,基于提示的引用指令在通用查询中的准确率约为 70–75%,在专业领域则更低——这意味着大约四分之一的引用要么是捏造的、错误归因给错误来源的,要么依据的来源实际上并不支持该声明。一个告诉用户"这是信息来源"却有 25% 概率出错的系统,比没有引用更快地侵蚀信任。

第二,引用幻觉与事实幻觉在性质上不同。编造事实的模型是错误的;编造引用并且听起来可信的模型是在主动误导——被引用的文档提供了虚假的确定感。研究已经证实,即使在最先进的 RAG 系统中,引用幻觉也很常见,它们的发生是因为模型在生成"听起来像"有依据的声明的文本,而没有机制来保证这一点。

第三,模型对影响其输出的因素没有可靠的内省能力。注意力权重不能干净地映射到"这段内容决定了答案"。当模型引用一个文档时,它是在猜测自己的推理过程——而这个猜测往往是错的。

更可靠的模式是维护基础设施级别的血缘,并使用生成后验证:在模型产生响应后,检查响应中的每个声明是否实际上得到了上下文中至少一个源块的支持。这比基于提示的引用成本更高,但它能捕获基于提示的方法所遗漏的故障模式。

智能体系统中的溯源

单轮 RAG 相对容易处理。智能体系统——模型协调多次工具调用、跨多个步骤检索数据、在会话中积累上下文——则复杂得多。

在智能体管道中,溯源问题变成了:哪些数据,来自哪个来源,在哪个步骤,促成了这个最终输出?答案可能跨越网络搜索、数据库查询、API 调用和中间模型生成的推理步骤——没有一个是自动记录的。

这里出现的模式是执行轨迹:会话中每次工具调用、数据访问和状态更新的结构化、仅追加记录。轨迹存储工具名称、输入参数、输出(或指向它的指针)、被触及的数据类别和时间戳。当会话完成时,轨迹就是溯源记录。

这种模式同时服务于多个目的。对于调试,它是重放日志——你可以准确理解智能体做了什么以及按什么顺序。对于合规,它是数据主体访问请求的审计轨迹。对于信任,它支持事后归因:给定输出中的一个特定声明,你可以通过轨迹向前追溯,找出哪次工具调用引入了支持它的数据。

从一开始就设计好的话,实施成本很低。事后改造则代价高昂。没有对智能体管道进行埋点的团队,往往在事故发生时才发现自己需要轨迹——而此时数据已经消失。

最快获得最大价值的起点

完整的溯源实现——涵盖训练血缘、推理时块追踪、跨度级归因、生成后验证和智能体执行轨迹——是一项重大工程投入。不是每个团队都需要在第一天就拥有全部功能。

杠杆率最高的起点是索引时的块级元数据。为每个块分配一个稳定的源 ID 和版本。将这些 ID 通过检索传递,并与响应一起记录。这让你能够回答"这个响应生成时哪些文档在范围内",解决最常见的调试问题并满足基本审计要求。

下一层是针对向用户展示引用的系统的生成后验证。如果你要向用户展示"这个响应基于文档 X",你应该在展示之前验证这一声明。这需要一次验证流程——检查被引用的来源是否实际包含每个归因声明的证据——这是一次额外的模型调用或基于规则的检查,但它能防止可见引用幻觉这种侵蚀信任的故障模式。

对于处理受 GDPR、HIPAA 或《欧盟人工智能法案》约束的用户数据的智能体工作流,执行轨迹是非可选项。及早构建它们,因为你无法事后重建。

正在发生的转变

溯源最初是受监管行业——医疗、金融、法律——的小众需求,在这些行业,能够将决策追溯到其数据来源在 AI 之前就已经是要求了。其余的产品工程界基本上忽视了它。

这正在改变。《欧盟人工智能法案》的文档要求今年就将对高风险系统生效。GDPR 执法机构已经将重点锁定在 AI 特定的数据流上。随着 AI 功能在产品中激增,可见故障的发生率——错误答案、引用错误、不一致的输出——创造了团队无法在盲目调试下承受的面向用户的信任事件。

现在将溯源嵌入管道的团队不是在做合规表演。他们在构建使 AI 功能可调试、可审计、可辩护的可观测性层。一年后,这将成为必备条件。在你自己的时间表上完成这件事,而非在事故发生后被迫应对的窗口,仍然还开着。


数据溯源不是给输出添加引用的问题。它是维护一条监管链——从源文档到检索块再到生成响应——在语料库更新、模型变更和来自用户或审计员不可避免的"它为什么这么说"中依然有效。构建这条链是一个基础设施决策,而像大多数基础设施决策一样,在你需要它之前做出要便宜得多。

References:Let's stay in touch and Follow me for more thoughts and updates