Libra:面向智能体信息检索的环境训练
摘要
本文提出了Libra,一个自我演进的框架,通过在代码仓库中引入可变目录(层次化的Markdown文件,作为可导航索引)来提升LLM智能体的代码定位能力,实现了对数级别的改进以及在不同模型和问题集上的零样本迁移。
arXiv:2607.00016v1 公告类型:跨领域
摘要:在海量仓库中进行信息定位是智能体LLM系统的基石。尽管基于合成数据的优化在训练LLM方面已取得成功,但很少有研究关注以数据驱动的方式优化智能体的工作环境(即仓库本身)。为填补这一空白,我们提出了Libra,一个自我演进的框架,它在仓库中引入了可变的“目录”(即分层Markdown文件,作为可导航的索引)。Libra运行一个由LLM驱动的优化循环:其中Prompter生成合成查询,冻结的Solver通过浏览目录尝试解决这些查询,而Healer则根据Solver的定位失败重写目录。在12个SWE-bench Lite仓库上的评估表明,这种环境修复在代码定位准确性上带来了持续的、对数级别的提升。此外,这些环境改进可以零样本地迁移到不同的LLM和问题集上。尽管本文的重点是研究此类系统的通用行为,我们也展示了一个配备Libra优化目录的最小化编码智能体在性能上超越了最先进的基线模型。代码可在https://github.com/salesforce-misc/Libra获取,数据可在https://huggingface.co/datasets/Salesforce/Libra获取。
查看缓存全文
缓存时间: 2026/07/02 05:41
# Libra:训练智能体信息检索的环境
来源:https://arxiv.org/html/2607.00016
赵轩 xuan\.zhao@salesforce\.com & Andy Chiu andy\.chiu@salesforce\.com & 王耿宇 gengyu\.wang@columbia\.edu
###### 摘要
在海量存储库中进行信息定位是智能体大语言模型(LLM)系统的基石。虽然基于合成数据的优化在训练 LLM 方面已取得显著成功,但以数据驱动的方式优化智能体的工作环境(即存储库本身)却鲜有关注。为了弥补这一空白,我们提出 **Libra**,一个自我演化的框架,它将可变的“目录”(作为可导航索引的分层 Markdown 文件)引入存储库。Libra 运行一个由 LLM 驱动的优化循环:Prompter 生成合成查询,冻结的 Solver 通过导航目录尝试解决这些查询,而 Healer 则根据 Solver 的定位失败来重写目录。在 12 个 SWE-bench Lite 存储库上的评估表明,这种环境“治愈”机制带来了代码定位准确率的持续、对数级提升。此外,这些环境改进可以零样本转移至不同的 LLM 和问题集。尽管本文的重点是研究此类系统的通用行为,但我们同时也证明,一个配备了 Libra 优化目录的最小化编码智能体能够超越最先进的基线方法。代码可在 https://github.com/salesforce-misc/Libra 获取,数据可在 https://huggingface.co/datasets/Salesforce/Libra 获取。
## 1 引言
参考图标题
图 1:Libra 系统概览。三个冻结的智能体(Prompter、Solver、Healer)驱动一个对抗性循环,其中仅更新 Markdown 目录。Prompter 看到一个随机文件块并虚构一个以此为答案的问题;Solver 未看到该块,必须通过搜索存储库和目录来回答;Healer 每批次读取累积的失败报告,并编辑目录以修复路由信号。
在大型存储库中进行代码定位是自主编码智能体的一项基本能力 (Anthropic, 2024 (https://arxiv.org/html/2607.00016#bib.bib29); Anysphere, 2024 (https://arxiv.org/html/2607.00016#bib.bib30); Yang et al., 2024b (https://arxiv.org/html/2607.00016#bib.bib22); Wang and others, 2024 (https://arxiv.org/html/2607.00016#bib.bib4))。进一步研究表明,定位准确率与下游任务解决率密切相关 (Chen et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib2); Wang et al., 2026 (https://arxiv.org/html/2607.00016#bib.bib3)),使其成为端到端智能体性能的关键贡献者之一。更广泛地说,信息检索是智能体系统的基石,并因此成为广泛研究的主题 (Lewis et al., 2020 (https://arxiv.org/html/2607.00016#bib.bib5); Jin et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib8); Zhang et al., 2026 (https://arxiv.org/html/2607.00016#bib.bib9))。这些智能体系统通常建立在三个相互作用的支柱之上:底层基础**模型**、**智能体设计**(提示工程和工具使用)以及**环境**本身(存储库内容、搜索索引和文档)。为了提升智能体在特定环境中导航的能力,一种自然的方法是使用从存储库派生的数据对底层基础模型进行微调 (Jimenez et al., 2024 (https://arxiv.org/html/2607.00016#bib.bib35); Ma et al., 2024 (https://arxiv.org/html/2607.00016#bib.bib34); Pan et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib33); Wei et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib36))。虽然这允许模型使用成熟的优化技术将环境知识内化到其权重中,但这本质上将系统锁定到特定模型。因此,智能体可能会失去访问最先进商业 LLM 的卓越推理和语义能力的机会,使得这种方法对于实际的、不断发展的应用程序来说并非最优。或者,研究人员试图通过构建静态或反向索引 (Jin et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib8); Chen et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib2); Wang et al., 2026 (https://arxiv.org/html/2607.00016#bib.bib3); Zhang et al., 2026 (https://arxiv.org/html/2607.00016#bib.bib9)) 或层次化摘要 (Sarthi et al., 2024 (https://arxiv.org/html/2607.00016#bib.bib38); Edge et al., 2024 (https://arxiv.org/html/2607.00016#bib.bib39)) 来增强智能体的环境,并为智能体配备复杂的工具以与这些结构交互。虽然这些以环境为中心的方法在设计上是模型无关的,但它们仍然是静态的,缺乏一种机制来动态适应智能体特定的检索挑战,或利用数据(如人类反馈或合成交互轨迹)来持续改进系统。另一条独立的工作线利用交互轨迹数据,允许智能体通过对抗性微调 (Yue et al., 2026 (https://arxiv.org/html/2607.00016#bib.bib20)) 或通过在环境中维护持久记忆工件 (He and Roy, 2026 (https://arxiv.org/html/2607.00016#bib.bib10); Liu et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib81)) 从自身的失败中学习。尽管取得了这些进展,该领域仍然缺乏一个**模型无关**、**数据驱动**、能够为特定存储库**主动**演进智能体信息检索能力的框架。为了弥补这一空白,我们提出了 Libra,它代表了存储库索引的一个范式转变:从静态的外部嵌入转向一个主动演进、原生集成到存储库中的纯文本索引。Libra 构建了一个 Markdown 文件层次结构,称为 **目录**,作为导航地图。这些目录不是依赖预定义的启发式规则,而是通过一个对抗性的 LLM 驱动训练循环进行迭代优化。Prompter 智能体从随机代码块生成合成查询,而 Solver 则仅使用目录作为指导来尝试回答这些问题。Solver 的导航失败为 Healer 智能体提供了丰富、有针对性的训练信号,使其能够持续优化目录,使索引结构与语言模型实际搜索信息的方式保持一致。¹
¹ 在我们的实现中,我们分开执行 Prompter,预先生成完整的训练数据集。然后 Solver 批量处理这些问题,Healer 分析每批次的聚合失败信号来更新目录。
我们在 SWE-bench Lite 的 12 个 Python 存储库上评估 Libra。我们的实验证明了这种 LLM 优化方法的有效性:对合成查询的训练带来了导航准确率的显著提升,并且这些提升能够鲁棒地转移到解决真实世界的 SWE-bench Lite 问题上。此外,我们展示了经过充分训练的目录可以作为持久的、模型无关的资源,持续增强各种下游模型的定位性能。与最先进的基于索引的方法(如 LocAgent 和 RepoMem)相比,Libra 在取得相当性能的同时,还提供了可解释性和可移植性等独特优势。
## 2 相关工作
#### 代码定位与存储库索引。
在 SWE-bench 等基准测试上进行存储库规模定位的方法主要分为两类:基于智能体在源码树中搜索(SWE-agent (Yang et al., 2024b (https://arxiv.org/html/2607.00016#bib.bib22)), Agentless (Xia et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib23)), LocAgent (Chen et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib2)), RepoMem (Wang et al., 2026 (https://arxiv.org/html/2607.00016#bib.bib3)))以及使用在存储库数据上微调的检索器或模型 (Reddy et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib11); Xie et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib27); Jimenez et al., 2024 (https://arxiv.org/html/2607.00016#bib.bib35); Wei et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib36); Pan et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib33))。层次化或图结构检索器(RAPTOR (Sarthi et al., 2024 (https://arxiv.org/html/2607.00016#bib.bib38)), GraphRAG (Edge et al., 2024 (https://arxiv.org/html/2607.00016#bib.bib39)), HippoRAG (Gutiérrez et al., 2024 (https://arxiv.org/html/2607.00016#bib.bib40)))通过聚类或 LLM 提取在语料库上施加多分辨率结构。所有这些方法都只构建一次其索引、图或模型权重,并且从不根据查询时的失败进行修复;Libra 保留了智能体搜索的接口,但将索引转变为由 Solver 的失败更新、不断变化的状态变量。
#### 合成问答生成。
LLM 生成的查询作为训练数据有着悠久的历史,用于密集检索器(Doc2Query (Nogueira et al., 2019 (https://arxiv.org/html/2607.00016#bib.bib12)), InPars (Bonifacio et al., 2022 (https://arxiv.org/html/2607.00016#bib.bib13)), Promptagator (Dai et al., 2023 (https://arxiv.org/html/2607.00016#bib.bib14)), GPL (Wang et al., 2022 (https://arxiv.org/html/2607.00016#bib.bib15)))以及引导指令语料库(Self-Instruct (Wang et al., 2023b (https://arxiv.org/html/2607.00016#bib.bib16)), Evol-Instruct (Xu et al., 2024 (https://arxiv.org/html/2607.00016#bib.bib17)))。与我们的信息不对称框架最接近的先例是 Beat-the-AI (Bartolo et al., 2020 (https://arxiv.org/html/2607.00016#bib.bib19)),其中标注者利用 oracle 访问权限来编写困难问题。Libra 的 Prompter 遵循了这一脉络。
#### 自我改进智能体与持久记忆。
许多系统通过编辑其草稿板(Reflexion (Shinn et al., 2023 (https://arxiv.org/html/2607.00016#bib.bib7)), Self-Refine (Madaan et al., 2023 (https://arxiv.org/html/2607.00016#bib.bib70)), STaR (Zelikman et al., 2022 (https://arxiv.org/html/2607.00016#bib.bib72)))、通过扩展每个智能体的库或记忆存储(Voyager (Wang et al., 2023a (https://arxiv.org/html/2607.00016#bib.bib6)), MemGPT (Packer et al., 2024 (https://arxiv.org/html/2607.00016#bib.bib78)), A-MEM (Xu et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib80))),或者通过将自生成的轨迹反馈到模型权重中(AgentTuning (Zeng et al., 2024 (https://arxiv.org/html/2607.00016#bib.bib21)), Dr. Zero (Yue et al., 2026 (https://arxiv.org/html/2607.00016#bib.bib20)))来实现智能体的原地改进;具体到软件工程领域,ExpeRepair (Liu et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib81)) 和 SWE-Adept (He and Roy, 2026 (https://arxiv.org/html/2607.00016#bib.bib10)) 为问题解决智能体附加了双记忆或类似 git 的存储。在所有这些系统中,记忆存在于智能体内部,并且仅由智能体进行读写;Libra 将记忆外部化到纯文本环境中,使其可在不同智能体间共享。
#### LLM 作为文本工件的优化器。
越来越多的研究使用一个 LLM 来优化另一个 LLM 将消费的文本工件:通过直接搜索优化提示(APE (Zhou et al., 2023 (https://arxiv.org/html/2607.00016#bib.bib46)), PromptBreeder (Fernando et al., 2023 (https://arxiv.org/html/2607.00016#bib.bib47)))或通过“批评即梯度”方式(ProTeGi (Pryzant et al., 2023 (https://arxiv.org/html/2607.00016#bib.bib44)), TextGrad (Yuksekgonul et al., 2025 (https://arxiv.org/html/2607.00016#bib.bib43)));基于分数历史的条件解优化(OPRO (Yang et al., 2024a (https://arxiv.org/html/2607.00016#bib.bib45)));以及整个 LLM 流水线(DSPy (Khattab et al., 2024 (https://arxiv.org/html/2607.00016#bib.bib48)))。Libra 的 Healer 符合这一模板,并将其应用于存储库信息检索领域。
## 3 方法
Libra 系统由三个独立的、冻结的 LLM 智能体组成——Prompter、Solver 和 Healer——以及一个将它们组合成 LLM 优化循环的编排机制。令 \( R \) 表示源存储库。该系统产生三个产物:
1. 1. **合成问答对**。由 Prompter 生成,并分为不相交的训练集和测试集。训练对驱动 LLM 优化循环;测试对评估学习到的目录。
2. 2. **失败集 \(\mathcal{F}\)**。Solver 未能检索到正确答案的训练查询子集。这个中间产物作为 Healer 的学习信号。
3. 3. **Libra 目录 \(K\)**。一组可变的、纯文本的 Markdown 文件,编码了存储库路由信息。经过优化后,这些目录作为持久索引,帮助任何编码智能体在 \( R \) 中导航。
在本文中,我们在固定的存储库快照上评估系统。虽然目录的纯文本格式自然地支持随着存储库演进而增量更新,但我们将此扩展留待未来工作。
### 3.1 Libra 目录
Libra 目录是放置在存储库根目录和每个子模块目录中的一组 Markdown 文件。我们的假设——在第 4 节 (https://arxiv.org/html/2607.00016#S4) 中通过实验验证——是:通过迭代优化,一个 LLM 优化器可以将存储库路由信息编码到这些文件中,并且这些信息可以转移到其他编码智能体,提高它们的定位性能。Libra 目录是人类可读、可编辑的,并且在完全填充后大小通常在 100–1000 KB 之间。
### 3.2 三个冻结的智能体
现在我们定义构成 Libra 系统的三个智能体。所有三个智能体都是**冻结的**:它们的系统提示、工具配置和底层模型权重在所有轮次中保持不变。只有目录 \( K \) 是可变的。所有三个智能体都是使用工具的 LLM 智能体,它们在共享环境——源存储库 \( R \) 上运行。按照标准做法,我们将 \( R \) 作为每个智能体签名的输入,以表示通过工具中介的读取权限;角色特定的工具集(对于 Healer,还包括对 \( K \) 的额外写入权限)详见附录 G (https://arxiv.org/html/2607.00016#A7)。
#### Prompter(数据合成器)。
Prompter 生成合成问答对,用于探测 Solver 的检索能力。令 \(\mathcal{C}(R) = \{c_1, \ldots, c_N\}\) 表示存储库 \( R \) 中的代码块集合,并令 \(\pi(c)\) 表示包含代码块 \( c \) 的唯一文件路径。形式上:
\[
\textsc{Prompter}: (c, R) \mapsto (q, p^*),
\]
其中 \(c \sim \text{Uniform}(\mathcal{C}(R))\) 是均匀采样的一个块,\( q \) 是一个模拟真实用户查询的自然语言问题(可以从 \( c \) 回答),而 \( p^* = \pi(c) \) 是黄金文件路径。Prompter 对采样的代码块 \( c \) 具有完全访问权限,并可以通过其工具进一步探索 \( R \) 以收集周围上下文。由于问题是在已知答案的情况下设计的,黄金标签的正确性由构造保证。²
² 严格来说,正确性仅在 Prompter LLM 生成的问题确实能从给定代码块(而不是存储库中其他位置)回答的范围内成立。在实践中,我们观察到这一假设对于本研究的精度来说是足够可靠的。
#### Solver(查询解析器)。
Solver 是通过导航存储库来解决查询的编码智能体。它代表了目录的下游消费者。形式上:
\[
\textsc{Solver}: (q, K, R) \mapsto \hat{p},
\]
其中 \( q \) 是一个自然语言查询,\( K \) 是当前目录状态,而 \(\hat{p}\) 是预测的文件路径。虽然 Solver 可以通过其工具自由遍历 \( R \),但它**无法访问**黄金代码块或文件路径;它必须仅通过目录引导的存储库探索来定位答案。这是一个假设,我们……相似文章
理解环境感知信息检索的行为
本文首次系统分析了大型语言模型如何通过强化学习学习适应不同检索器的查询制定策略,揭示了不同的最优查询风格,并引入了一种基于分支的展开技术以提高多检索步训练稳定性。
面向地理空间数据检索的风险感知LLM代理:设计与初步对抗性评估
介绍了一种基于LLM的框架,通过自然语言查询从基于云的地理空间目录中检索遥感数据,重点关注安全性和对抗鲁棒性。该系统集成了三个代理,用于意图解释、API调用生成和风险管理。
从受训者到训练者:LLM为多智能体推理强化学习设计的训练环境
本文介绍了LLM-as-Environment-Engineer框架,该框架使LLM能够为多智能体推理任务中的强化学习设计自己的训练环境,实现自我改进训练,其性能超越更大的专有模型。
RL-Index: 强化学习的检索索引推理
RL-Index 提出了一种基于强化学习的智能索引框架,通过用LLM生成的解释来扩充文档,将推理从查询阶段转移到索引阶段,从而提升检索效果并降低在线延迟。
当规则学习:一种用于法律案例检索的自我进化智能体
本文介绍了一种自我进化框架,该框架利用基于LLM的智能体,为法律案例检索中的BM25迭代创建并优化查询重写规则,在无需任何参数训练的情况下,在LeCaRD-v2基准上优于非进化基线。