论文

检索很便宜,给我看代码:面向检索增强生成的可执行多跳推理

Retrieval is Cheap, Show Me the Code: Executable Multi-Hop Reasoning for Retrieval-Augmented Generation

上下文与知识检索增强

摘要

检索增强生成(RAG)已成为知识密集型问答的标准方法,但现有系统在多跳问题上依然脆弱,解答这类问题需要串联多个检索与推理步骤。关键挑战在于:当前方法以自由形式的自然语言表示推理,中间状态是隐式的,检索查询可能偏离预期实体,而错误由产生错误的同一模型来检测,使自我反思成为不可靠、无根据的信号。我们观察到,多跳问答是逐步计算的典型形式,而这种结构化过程与代码专精语言模型被训练的运作方式高度一致。受此启发,我们提出PyRAG,一个将多跳RAG重新表述为程序合成与执行的框架。PyRAG不使用自由形式的推理轨迹,而是将推理过程表示为在检索与问答工具之上的可执行Python程序,将中间状态暴露为变量,通过执行产生确定性反馈,并给出整个推理过程的可检查轨迹。这种表述还支持基于编译器的自修复和执行驱动的自适应检索,无需任何额外训练。在五个问答基准(PopQA、HotpotQA、2WikiMultihopQA、MuSiQue和Bamboogle)上的实验表明,PyRAG在免训练和RL训练两种设置下都持续优于强基线,在组合性多跳数据集上收益尤其显著。我们的代码、数据和模型已在https://github.com/GasolSun36/PyRAG公开。

检索很便宜,给我看代码:面向检索增强生成的可执行多跳推理:论文配图
图 1:Vanilla RAG、搜索代理和 PyRAG(我们的)之间的比较。考虑到多跳问题“谁更年长,Jed Hoyer 还是 John William Henry II?”,(a) Vanilla RAG 执行单次检索,并且容易出现不完整或有噪声的证据; (b) 搜索代理遵循非结构化迭代轨迹,其中模糊查询和实体漂移(例如,检索“英格兰的亨利二世”而不是“约翰·威廉·亨利二世”)会在步骤中累积错误; (c) PyRAG 将问题分解为原子子查询,并生成可执行程序,通过显式变量检索、回答和组合中间结果,从而产生可控、可检查、准确的推理过程。