从ProvenanceGuard理解多源RAG的claim-to-source验证

AI 说"根据账户记录,你有 30 天退款期",这句话可能事实正确,引用却错了:30 天来自通用政策,账户记录里根本没有。读完本文,你会理解多源 RAG 为什么要保留来源身份,并能用一段 Python 检查"每个声明是否真的由它声称的来源支持"。

最新事件:事实正确,也可能没有通过验证

Multiverse Computing 团队 9 月 29 日介绍了 ProvenanceGuard。它面向通过 MCP(Model Context Protocol,模型上下文协议)调用多个工具的 Agent,在答案生成后读取完整工具轨迹,把回答拆成声明,再逐条寻找支持来源、检查证据和归因,最后允许、阻断或进入修复。

团队报告的医学场景测试包含 281 条真实轨迹;在留出的 40 个回答、361 个声明中,专家认为 139 条不该通过,系统拦下 138 条,同时也把 67 条专家认为有支持的声明送去复核。这个结果说明它偏保守,也说明"拦得多"不等于"判断完美"。相似来源压力测试里,精确找对来源的比例只有 50.3%,边界必须说清。

它解决什么问题

把多源 RAG 想成写论文:图书馆里确实有一句话,不代表你能把它脚注到任意一本书。类比的边界是,真实 Agent 的来源不只是文档,还可能是数据库记录、搜索结果、API 返回和用户私密数据;这些来源的权限、时效和可信等级并不相同。

去掉类比,来源感知验证是维护"声明---证据---来源标识"的映射,而不是先把所有工具输出拼成匿名上下文,再只问句子是否有支持。它要同时回答三个问题:声明是什么、哪份原始输出支持它、回答明示或暗示的来源是否与支持来源一致。

flowchart LR A[MCP工具输出] --> B[保留来源ID] B --> C[生成回答] C --> D[拆分原子声明] D --> E[匹配候选来源] E --> F[检查证据支持] F --> G[核对答案归因] G --> H{允许或阻断} H --> I[修复或安全回退]

最小实践:抓住"事实对、出处错"

下面的教学版不用模型,只用关键词交集展示核心数据结构。生产系统应换成嵌入检索和自然语言推断(NLI),但仍要保留来源 ID。

python 复制代码
import re

sources = {
    "account": "用户方案为专业版,账户状态正常。",
    "policy": "专业版购买后30天内可以申请退款。",
}
claims = [
    {"text": "用户是专业版", "named_source": "account"},
    {"text": "退款窗口是30天", "named_source": "account"},
]

def tokens(text):
    return set(re.findall(r"[\u4e00-\u9fff]+|\d+", text))

def support_score(claim, source):
    ct = tokens(claim)
    st = tokens(source)
    numbers_ok = re.findall(r"\d+", claim) == re.findall(r"\d+", source)
    overlap = len(ct & st) / max(1, len(ct))
    return overlap + (0.5 if numbers_ok else -1.0)

for item in claims:
    ranked = sorted(
        sources,
        key=lambda sid: support_score(item["text"], sources[sid]),
        reverse=True,
    )
    best = ranked[0]
    verdict = "ALLOW" if best == item["named_source"] else "BLOCK"
    print(item["text"], "support=", best, "verdict=", verdict)

assert support_score("退款窗口是30天", sources["policy"]) > 0
assert claims[1]["named_source"] != "policy"

无需第三方依赖,保存为 provenance_gate.py,运行 python provenance_gate.py。本次在 Python 3.9.6 实际运行,第二条声明被识别为应由 policy 支持,因此对错误标注的 account 归因执行阻断。它只验证流程,不复现论文模型与医学数据结果。

常见误区

第一,认为有 URL 就有证据。链接可能只与主题相关,并不支持具体数字。第二,把所有工具结果合并后做一次"忠实度"评分;这样会丢掉来源身份。第三,把来源匹配当成真实性证明;原始来源本身也可能过期或错误。第四,见到 138/139 就认为可以无人审核;论文同时出现明显的保守误拦与相似来源识别下降。

适用与不适用

它适合医疗、金融、客服、合规研究等需要解释"依据来自哪里"的多工具工作流,也适合把引用检查变成发布门禁。不适合只靠这一层解决知识库污染、恶意工具输出和权限越界;来源感知不是内容可信、授权合法和数据新鲜的替代品。

我的判断是,多源 RAG 的下一个基础设施不是更长上下文,而是可追溯的证据链。开发者应从数据结构开始改:每段工具输出带不可变来源 ID、采集时间和权限域;每个回答声明保存候选证据与判定,而不是只留下最终文本。

5分钟实践题

给 sources 增加一份同样包含"30天"、但描述试用期的文档,观察简单关键词为何会选错。然后为来源增加 document_type,规定退款声明只能由政策类文档支持。

你的 RAG 验收现在只检查答案正确,还是也能指出每句话究竟来自哪个数据源?

关注「蜗牛聊AI」,一起看懂技术变化背后的真正机会。


本文首发于 java4u.cn,转载请注明出处。

相关推荐
爱喝雪碧的可乐1 小时前
CSDN|爆火哑巴AI Jev模型深度实战|技术博客
人工智能·大模型·jev
RoboWizard1 小时前
2026年企业级NVMe SSD推荐哪些品牌?
大数据·人工智能
Gu_WenYun1 小时前
半导体产业供需再平衡,新一轮扩产周期下如何用基金布局半导体?
人工智能·金融·业界资讯
段一凡-华北理工大学1 小时前
大模型与智能体在工业的应用~系列文章10:可靠性篇:大模型的“幻觉“与工业安全,如何让 AI 可信
大数据·人工智能·安全·大模型幻觉·工业智能化·高炉炼铁智能化·ai可信度
A7bert7771 小时前
【SAM3部署至AGX Orin】环境配置→模型部署→问题记录
c++·人工智能·深度学习·ubuntu
I'm a winner1 小时前
《AI 赋能嵌入式开发:从 0 到全栈工程师》模块1|第3课时
人工智能·嵌入式硬件
周凡1231 小时前
从文档生成到可靠交付:基于 Dify 的流程化实践
人工智能
数据堂官方账号2 小时前
数据堂联合华为共筑 AI 数据价值新引擎
人工智能·华为·数据采集·具身智能·数据标注
Xuantong_902 小时前
拆解 Claude Sonnet5.5 底层设计:自适应思考、子智能体协同,Anthropic 如何重构中端大模型推理范式
人工智能·语言模型·重构