Gistify: Codebase-Level Understanding via Runtime Execution¶
会议: ICLR 2026
OpenReview: https://openreview.net/forum?id=nmdDgo4OXC
代码: https://github.com/microsoft/gistify
领域: 代码智能 / 编程智能体评测
关键词: 代码库级理解, 运行时执行, 编程智能体, 自动化评测, 最小可复现文件
一句话总结¶
提出 GISTIFY 任务——让编程智能体把整个代码库中某条命令的功能压缩成一个单文件、自包含、最小化、忠实复现运行时行为的"精华文件",从而真正考验模型对代码库结构与执行流的理解,并发现当前 SOTA 模型在长执行轨迹上普遍翻车。
研究背景与动机¶
领域现状:LLM 越来越多地被部署到大型真实代码库中做调试、智能体式代码生成,要求模型能跨文件、跨模块地推理整个执行流程,而不只是处理孤立片段。
现有痛点:主流仓库级基准(SWE-bench、RepoBench)被证明并不真正要求对整条执行轨迹做推理——很多任务可以靠启发式捷径或局部 patch 检索蒙混过关;而且它们依赖 GitHub issue / PR 构造数据,无法泛化到任意(尤其是私有)仓库。
核心矛盾:智能体在真实大代码库里的部署需求在涨,但"自动化构造、广泛适用、真正考验整库理解"的评测却严重滞后。
本文目标:设计一个轻量、可对任意有测试套件的仓库自动构造、且必须沿执行路径推理才能解的挑战性任务。
核心 idea:【运行时复现即理解】 模仿开发者理解陌生仓库的方式——不是孤立读文件,而是从一个具体入口(如 pytest 命令)出发,沿运行时行为追依赖、跟控制流。GISTIFY 把这一实践形式化为:给定代码库 + 入口命令,要求生成一个能独立运行、且输出与原库完全一致的最小自包含文件。
方法详解¶
整体框架¶
GISTIFY 不是一个模型,而是一个任务 + 评测协议 + 三维度量。输入是一个装有目标代码库的 Docker 镜像和一个入口命令(如某个测试),智能体在 50 步预算内、128K 上下文约束下,通过搜索/读文件/编辑等工具生成一个 gistified 文件;评测时把原始测试函数注入该文件后执行,程序化比对输出是否一致,杜绝"改测试作弊"。
flowchart LR
A[代码库 Docker 镜像] --> C[编程智能体<br/>搜索/读取/编辑/可选执行]
B[入口命令<br/>如 pytest test::case] --> C
C --> D[gistified 单文件]
D --> E{注入原始测试后执行}
E --> F[执行保真度<br/>输出是否一致]
E --> G[行执行率<br/>最小性]
E --> H[行存在率<br/>忠实性]
关键设计¶
1. 四要求任务定义:把"理解"拆成可验证的属性。 一个合格的 gistified 文件必须同时满足四点:自包含(把所有依赖模块内联进来,能脱离原库独立跑,考验对跨文件关系的理解);执行保真(运行输出与原库一致,逼模型抓动态执行而非静态模式);最小化(只保留实际被执行、对任务必要的代码,剪掉无关函数对象);忠实保留(所有代码必须直接来自原库,不许幻觉编造)。这四点把抽象的"代码库理解"翻译成可程序化打分的硬指标。
2. 三维度量对齐四要求。 执行保真度(Execution Fidelity)是二元指标,仅当文件能跑通且输出/错误轨迹与原库一致才记 1:\(\mathbf{1}\big[\mathrm{runs}(c,G)\wedge \mathrm{out}(c,G)=\mathrm{out}(c,C)\big]\)。行执行率(Line Execution Rate)衡量最小性,即文件里可执行行中真正被执行的比例 \(\frac{1}{|L_{\mathrm{exec}}(G)|}\sum_{\ell}\mathbf{1}[\ell\text{ 被执行}]\),越接近 100% 说明越精炼;它只对能跑通的文件计算。行存在率(Line Existence Rate)衡量忠实度,把代码按类/函数/顶层块分组、逐块匹配(并对缩进、多行语句、import 做归一化以避免误匹配),统计有多少行确实来自原库,100% 即零幻觉。
3. 评测协议防作弊。 由于生成的文件可能偷偷改测试来骗过比对,协议规定:模型生成 gistified 文件后,用原库中的原始测试代码替换文件里的测试部分再执行。这样保证评测衡量的是"功能是否被正确复现",而非模型重写测试的花招。也正因如此,论文进一步发现"忠实复现测试函数"本身是成功的强先导信号(见实验)。
4. 难度可控的 GISTIFY-hard 子集。 任务难度可由执行轨迹复杂度刻画:轨迹长度(执行的函数调用数)与触及的唯一文件数。按这两个轴各取最难的 30 例,得到 57 个 GISTIFY-hard 数据点,性能从 43% 跌到 21%,提供了一条"自动设计更难评测"的可扩展路径。
实验关键数据¶
设置:3 个智能体框架(mini-SWE-agent、SWE-agent、Copilot)× 4 个模型(GPT-5-mini、GPT-5、Claude-3.7-Sonnet、Claude-Sonnet-4),128K 上下文、50 步上限;数据为 5 个 SWE-Bench 仓库(requests/pylint/flask/scikit-learn/seaborn)+ 1 个新仓库 debug-gym,各 25 个测试。
主实验表格¶
执行保真度(无执行工具 / 有执行工具),行存在率与行执行率为两设置均值:
| 框架 | 模型 | 执行保真(wo/w exec) | 行存在率 | 行执行率 |
|---|---|---|---|---|
| mini-SWE-agent | GPT-5-mini | 17.1 / 24.0 | 44.9 | 61.2 |
| mini-SWE-agent | GPT-5 | 51.0 / 54.0 | 56.8 | 83.1 |
| mini-SWE-agent | Claude-4 | 54.0 / 55.3 | 67.0 | 75.7 |
| SWE-agent | Claude-4 | 56.7 / 57.3 | 66.3 | 72.9 |
| Copilot | GPT-5 | 58.7 / 60.7 | 66.9 | 81.4 |
| Copilot | Claude-4 | 58.7 / 61.3 | 69.6 | 80.3 |
最佳模型 Claude-4 在所有框架下也仅约 54–61% 求解率;GPT-5 输出最精炼(行执行率最高)。
消融实验表格¶
SWE-Agent + Claude-4,pylint 50 个测试,分析不同策略/工具:
| 类别 | 设置 | 执行保真 | 行存在率 | 行执行率 | 触顶步数% |
|---|---|---|---|---|---|
| — | Base GISTIFY | 42.0 | 65.0 | 58.3 | 14.6 |
| 提示策略 | Tracing | 48.0 | 75.4 | 62.8 | 0.0 |
| 提示策略 | Reading | 50.0 | 77.6 | 62.6 | 3.9 |
| 全局信息工具 | RepoGraph | 52.0 | 76.1 | 60.1 | 6.0 |
| 全局信息工具 | Tracing(金标轨迹) | 56.0 | 75.1 | 65.1 | 0.0 |
| 执行工具 | Bash | 52.0 | 73.1 | 64.2 | 16.0 |
| 执行工具 | Edit-and-Execute | 56.0 | 74.3 | 64.2 | 10.0 |
关键发现¶
- 测试函数忠实度是成败先导:Test F1 与执行保真度强相关(corr=0.76, p=0.01);直接把正确测试体喂进 prompt 后,Test F1 从 68.4 升到 85.3,执行保真度从 42% 升到 60%。
- 执行工具不是银弹:开/关执行工具大多只带来小幅提升,前沿模型也没涌现出"用 debugger 做运行时分析"的能力;反而工具更少(Edit-and-Execute)比放开 Bash 表现更好——开放 Bash 会让模型乱探索、轨迹拉长、触顶步数。
- 金标 Tracing 工具增益最大(56%),说明全局执行轨迹信息能显著强化运行时推理。
- 错误归因因模型而异:GPT-5 系列主要错在"缺失测试函数"(76–78%),Claude 系列主要错在 import 错误与 pytest 运行时错误;最强的 Claude-4 反而最常误用
import requests这类本应内联的导入。 - 智能体 > 静态:即便把所有相关 gold 文件一次性喂给静态 LLM,其执行保真度仍低于智能体——动态多步选文件比一次性灌入更有效;静态模型只在行存在率上最高(因可直接复制输入)。
- 高覆盖测试更难:轨迹越长、触及文件越多,求解率单调下降,GISTIFY-hard 子集仅 21%。
亮点与洞察¶
- 用"运行时复现"作为理解的可验证代理:把模糊的"代码库理解"落地成"能不能复现这条命令的运行时行为",比 QA 式或局部 patch 式基准更难被捷径绕过。
- 自动化、可泛化、零 issue 依赖:只需仓库 + 测试套件即可对任意(含私有)仓库自动造题,摆脱对 GitHub issue/PR 的依赖。
- 产物本身有用:gistified 文件把大系统某功能压成紧凑可执行单文件,可服务于下游调试、错误定位、最小实现分享——评测产物即工具。
- 诊断性强:三维度量 + 错误分类 + 难度轴让人能精确看出"模型卡在哪一步",而非只给一个总分。
局限与展望¶
- 依赖现有测试套件:当前入口主要是 pytest 测试,尚未覆盖任意入口;扩展到任意 entrypoint 需处理非确定性执行问题。
- 评测规模:主实验每库 25 测试、5–6 个仓库,覆盖面有限(虽附录有更大集佐证一致性)。
- 只比对 stdout/stderr 与测试通过性:对有副作用、随机性或外部 IO 的功能复现尚未深入。
- 未给训练方案:论文聚焦评测与分析,如何用 GISTIFY 信号训练出更强的运行时推理模型留待后续。
相关工作与启发¶
- 代码库级理解基准:QA 类(CodeQA 系列)、跨文件代码合成(RepoBench、CrossCodeEval)、自然语言→整库映射等,GISTIFY 的差异在于强制沿完整执行轨迹推理。
- 运行时执行推理:CRUXEval 等预测执行轨迹/中间状态的工作;GISTIFY 更进一步要求模型不仅追踪执行、还要把代码压缩重组成连贯文件。
- 全局上下文工具:RepoGraph 等把代码库建成图供检索,本文证实其与金标 tracing 能显著助力。
- 启发:对编程智能体而言,"能否复现运行时行为"或许是比"能否改对一个 patch"更本质的理解度量;同时"工具越多未必越好"提醒智能体设计要克制工具暴露面。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ — "把功能压成最小可复现单文件"作为代码库理解度量是全新且优雅的设定,绕开了既有基准的捷径漏洞。
- 实验充分度: ⭐⭐⭐⭐ — 3 框架×4 模型×6 仓库的矩阵 + 详尽错误归因 + 策略/工具消融 + 难度轴分析,覆盖较全;规模偏小、入口仅限测试是短板。
- 写作质量: ⭐⭐⭐⭐ — 任务动机、四要求、三度量、防作弊协议层层递进,公式与表格清晰,结论可操作。
- 价值: ⭐⭐⭐⭐⭐ — 提供可对任意仓库自动构造的硬基准,且产物本身可用于下游调试/分享,对评测与工程双向有用。