崎岖前沿:评估代码代理对语义保持转换的鲁棒性

arXiv cs.AI 论文

摘要

本文评估了当代码库受到语义保持转换干扰时,AI代码代理的鲁棒性,揭示了一个崎岖的前沿,其中模型性能在不同的框架和基准测试中不可预测地变化。

arXiv:2608.18389v1 公告类型:新 摘要:AI代码代理越来越多地被部署以解决实际软件问题,但其在表面代码变化下的可靠性仍然知之甚少。我们评估了修复仓库级问题的编码代理在周围代码库被重写为语义等价形式时是否保持可靠。我们引入了一个随机变体采样器,该采样器应用常见的语义保持转换(SPTs)——包括控制流重写、死代码注入和标识符重命名——以生成受干扰的变体。我们评估了两个智能体框架(mini-SWE agent和OpenCode),每个框架都由四个前沿模型之一(Claude Opus 4.5、Kimi K2.5、MiniMax M2.5和Qwen 3.6-27B)支持,使用来自SWE-bench Verified和SWE-bench Pro的实例。对于每个实例,代理在未受干扰和受干扰的变体上运行多次,产生配对的解决率估计,将干扰效应与内在随机性隔离开来。我们发现大多数配置中性能下降较小:在最受影响的配置中,平均解决率下降高达6.7个百分点,在16个配置中有6个具有统计显著性的下降。关键的是,没有一个模型在鲁棒性排名上在所有框架中保持一致——Qwen在SWE-bench Verified上使用mini-SWE agent时是最鲁棒的之一,但在OpenCode下却是最脆弱的——揭示了一个崎岖的鲁棒性前沿。更简单的框架(mini-SWE agent)对干扰更鲁棒。我们的结果表明,即使是顶级前沿模型也容易受到语义保持干扰,尽管效果并不均匀,这引发了对AI代码代理在多样化实际代码库中部署可靠性的担忧。
查看原文
查看缓存全文

缓存时间: 2026/08/20 10:10

# 参差的前沿:评估代码智能体在语义保持转换下的鲁棒性
来源:https://arxiv.org/html/2608.18389  
Shreya Gupta, Isha Chaudhary, Nathaniel Enis, Ravi Mangal, Gagandeep Singh, Corina Pasareanu

###### 摘要
人工智能代码智能体正被越来越多地部署用于解决实际软件问题,然而其在代码表面变化下的可靠性仍鲜为人知。我们评估了在修复代码仓库级问题时,当周围的代码库被重写为语义等效形式后,编码智能体是否仍能保持可靠。我们引入了一个随机变体采样器,该采样器应用常见的语义保持转换——包括控制流重写、死代码注入和标识符重命名——来生成扰动变体。我们评估了两种智能体框架(mini-SWE agent 和 OpenCode),每种框架均由四种前沿模型之一(Claude Opus 4.5、Kimi K2.5、MiniMax M2.5 和 Qwen 3.6-27B)支持,测试实例来自 SWE-bench Verified 和 SWE-bench Pro。对于每个实例,智能体在未扰动和已扰动的变体上多次运行,得出成对的解决率估计值,从而将扰动效应与内在随机性区分开来。我们发现大多数配置下仅有微小退化:在受影响最严重的配置中,平均解决率下降最多达6.7个百分点,在16种模型、框架和数据集的配置中有6种表现出统计上显著的退化。至关重要的是,没有单一模型的鲁棒性排名能在所有框架下保持一致——例如,Qwen 在 SWE-bench Verified 上使用 mini-SWE agent 时最为鲁棒,但在使用 OpenCode 时却最为脆弱——揭示了一个参差的鲁棒性前沿。更简单的框架(mini-SWE agent)对扰动更具鲁棒性。我们的结果表明,即使是顶尖的前沿模型也容易受到语义保持扰动的影响,尽管这种影响并不均匀,这对人工智能代码智能体在多样化现实代码库中部署的可靠性提出了担忧。  
代码——https://github.com/CSU-TrustLab/jagged-frontier

## 引言
在短短几年内,人工智能驱动的编码工具已从研究原型步入主流软件开发,开发者调查报告显示,现在大多数专业开发者定期使用这些工具(31 (https://arxiv.org/html/2608.18389#bib.bib37); 11 (https://arxiv.org/html/2608.18389#bib.bib38); 14 (https://arxiv.org/html/2608.18389#bib.bib39); 12 (https://arxiv.org/html/2608.18389#bib.bib40))。它们的进展在具有挑战性的编码基准测试中得到了体现,如 SWE-bench Verified(24 (https://arxiv.org/html/2608.18389#bib.bib6)) 和 SWE-bench Pro(7 (https://arxiv.org/html/2608.18389#bib.bib5)),几乎所有新模型和智能体的发布都会用这些基准来衡量。虽然这些基准上的性能数据具有参考价值,但它们没有考虑到一个现象:神经网络模型通常会学习捷径(10 (https://arxiv.org/html/2608.18389#bib.bib29)),因此容易受到微小输入扰动的影响。由此产生了两个担忧。首先,如果智能体的行为随着周围代码的表面变化而改变,那么基准测试数据可能会高估其部署可靠性。其次,这种变化意味着底层模型依赖于浅层的语法模式,而非对程序语义的理解。先前的工作已在单轮、非智能体场景下评估了代码大语言模型对语义保持扰动的鲁棒性(38 (https://arxiv.org/html/2608.18389#bib.bib13); 28 (https://arxiv.org/html/2608.18389#bib.bib17); 35 (https://arxiv.org/html/2608.18389#bib.bib20))。然而,对于与大语言模型进行多轮交互的仓库级代码智能体的鲁棒性,系统性的研究还很少。

据我们所知,我们提出了首次此类评估,并发现鲁棒性不是模型的固定属性,而是一个*参差的前沿*:一个在某种框架或代码库下表现稳健的模型,在另一种下可能最为脆弱,因此基准测试排名并不能直接转化到部署环境中。

在鲁棒性评估方面,我们将智能体在未扰动代码仓库上的性能与*语义等效*的扰动变体进行比较。扰动是通过代码的局部、语义保持转换注入的。我们开发了一个语义保持转换库,这些转换要么模仿开发者可能常规执行的重构操作,要么旨在对智能体进行压力测试。我们使用该库构建了一个随机算法,即一个*采样器*,用于从基础仓库中抽取扰动变体。我们的采样器随机选择应用哪些语义保持转换以及在何处应用。每个变体是独立构建的,并且与旨在寻找对抗性样例的算法不同(30 (https://arxiv.org/html/2608.18389#bib.bib16)),该采样过程并非由模型结果反馈引导。这种非对抗性设计是有意为之。我们在本研究中的目标是计算语义保持转换对代码智能体影响的*下界*。一个由反馈引导的对手只能造成更大的破坏。这些下界可以为开发者选择是否以及使用哪种代码智能体进行部署提供依据。它们还可以帮助指导训练模型和构建智能体框架的工程师朝向增强鲁棒性的设计。

基于大语言模型的智能体的随机性使得鲁棒性评估具有挑战性。如果一个智能体在扰动变体上运行失败但在未扰动仓库上运行成功,仅凭这一观察不足以断定扰动是原因;该观察可能仅仅是智能体随机性的产物。实验设计还受到每次智能体运行成本的制约。因此,我们设计了实验方法,以将扰动效应与内在的运行间变异性分离开来,同时在实验声明的统计有效性和实验成本之间取得平衡。我们通过让智能体在未扰动的种子库及其变体上重复运行,并配对其结果来实现这一点。

我们评估了两种智能体框架(mini-SWE agent 和 OpenCode),每种框架均由四种前沿模型之一(Claude Opus 4.5、Kimi K2.5、MiniMax M2.5 和 Qwen 3.6-27B)支持,总共跨越了来自 SWE-bench Verified 和 SWE-bench Pro 的 54 个实例。在整个过程中,我们研究的是代码仓库级的问题解决:每个*任务实例*将一个处于基础提交状态的仓库与问题描述、一个被接受的补丁必须满足的测试用例,以及一个*金标准补丁*(解决问题的参考编辑)配对在一起。我们衡量了仓库未扰动版本和扰动版本之间问题解决率的退化,以及智能体运行步骤数和成本的变化。

我们的实验揭示了以下见解:
(1) 以简单的、非反馈引导的方式应用的局部扰动,在大多数配置下会导致小幅退化——在受影响最严重的配置中最多达6.7个百分点,16种配置中有6种表现出统计上显著的退化;
(2) 扰动增加了智能体的投入(即使在解决率基本不变的配置中,步骤数和令牌成本也分别增加了最多9.9%和22.9%),因此仅关注结果会低估其影响;
(3) 在同一框架内比较模型时,在未扰动版本上能力更高的模型(如 Claude Opus 4.5)可能比低能力模型受到扰动的影响更大;而跨框架比较时,更简单的框架往往更具鲁棒性;
(4) 智能体框架和基准测试改变了模型的鲁棒性排名,例如,Qwen 在 SWE-bench Verified 上使用 mini-SWE agent 时是最鲁棒的之一,但在使用 OpenCode 时却最为脆弱;
(5) 扰动的影响在不同仓库间差异巨大,集中在少数实例上,而对其他实例则没有影响。

这些观察结果共同表明,鲁棒性是模型、框架和工作负载的联合属性,而非模型的单独属性,揭示了一个*参差的鲁棒性前沿*。

## 语义保持转换
### 定义
一个转换 \(T\) 是语义保持的,如果转换后的程序 \(T(P)\) 在所有可能的程序输入上产生的可观察行为与原程序 \(P\) 相同。具体来说,在任何输入下,\(P\) 和 \(T(P)\) 必须(i)返回相同的值或抛出相同的异常,以及(ii)产生相同的外部可观察效应。如果其中一个停止运行,另一个也必须如此。在评估编码智能体的背景下,我们通过功能测试套件等效性来*操作化*这个定义。具体而言,一个转换被认为是语义保持的,如果 \(T(P)\) 在项目的测试套件上产生与 \(P\) 相同的逐测试结果。

### 转换目录
表1 (https://arxiv.org/html/2608.18389#Sx2.T1) 列出了我们实现的14种语义保持转换。我们使用符号 \(\mathcal{T}\) 表示此目录。该目录包含了混合的语义保持转换,这些转换要么模仿开发者可能常规执行的重构操作(例如,重新排列可交换的操作数、交换 if 和 else 分支),要么通过引入不自然或行为上惰性的代码片段(例如,拆分字符串字面量、死代码/死方法注入)来对智能体进行压力测试。

每种语义保持转换由需要匹配的结构模式(以便应用该转换)和一条重写规则指定。我们称文件中语义保持转换模式匹配的位置为*候选位置*。两种语义保持转换,即“死字符串赋值”和“死方法注入”,必须在重写前绑定到一个目标关键字(一个字符串字面量或方法名)。给定这样一个关键字,前者注入该字符串的一个未读赋值,后者则附加一个同名的死方法。两者都放置了一个*诱饵*:包含该关键字的死代码,因此每当智能体在代码库中搜索该术语时,它就会出现。一个通过关键字定位的智能体必须将诱饵与真正的关注点区分开来。我们将此关键字绑定的目录子集记为 \(\mathcal{T}_{\text{kw}} \subset \mathcal{T}\)。语义保持转换的完整实现细节见附录 A (https://arxiv.org/html/2608.18389#S1)。

### 验证
我们通过差分测试(19 (https://arxiv.org/html/2608.18389#bib.bib4))经验性地验证了我们的语义保持转换是语义保持的,测试使用了来自我们实验基准 SWE-bench(16 (https://arxiv.org/html/2608.18389#bib.bib1))的三个项目的测试套件,这三个项目跨越不同领域:SymPy(符号数学;12,994个测试)、sqlfluff(SQL 语法检查;10,060个测试)和 xarray(标记的 N 维数组;19,917个测试)。每个转换都是单独验证的:对于给定的转换,我们在每个可用位置应用该转换,运行完整的测试套件,并将每个测试的结果与未修改的基准进行比较。一次只验证一个转换,使得任何行为差异都可归因于单一的转换类型。在所有三个项目中,每个测试在所有14种转换下都保留了其结果。这个证据受限于底层测试套件的覆盖范围,因此不是等效性的证明。由于每种转换都独立验证为保持语义,我们依赖于这一特性,而不是为每个扰动任务实例重新验证测试结果。

表1:语义保持转换目录。

### 组合与范围
单个转换作用于单个文件内的候选位置,而评估智能体在代码修复任务上的表现需要扰动整个代码仓库。因此,我们对一个代码仓库的源文件(不包括测试套件文件)应用一个有限的转换序列 \(\langle t_1, \dots, t_m \rangle\)。每个 \(t_j\) 单独是语义保持的,并且由于观察等效性具有传递性,它们的组合也是语义保持的。因此,扰动后的代码库在观察上与原始代码库等效。排除测试套件文件使得这样的扰动后的代码库可以作为评估目标使用。定义任务成功的预言机在扰动前后是相同的,因此智能体得分的任何变化都不能归因于目标移动。

## 采样语义保持变体
给定与任务实例相关联的种子代码仓库,*变体采样器*(算法1 (https://arxiv.org/html/2608.18389#alg1);其子程序 AssignTargetNames 在附录 B (https://arxiv.org/html/2608.18389#S2)中作为算法2给出)在随机选择的文件中,在随机选择的位置应用一系列语义保持转换,并返回一组*变体*:这些仓库根据前一节的组合论证,在语义上等同于种子库。每个变体成为一个用于评估智能体的独立任务实例。对于每个变体,采样器做出四个随机决策:
算法1 随机变体采样器
1: 种子代码仓库 \(C_{\text{seed}}\),样本数量 \(N\),转换列表 \(\mathcal{T}\),金标准补丁修改的文件 \(\mathcal{F}_{\text{gold}}\),问题描述 \(I\),要应用的转换数量 \(N_t\),要选择的关键字最大数量 \(N_k\),要转换的候选位置比例 \(\phi\),每个关键字绑定转换的最大文件数 \(N_f\)
2: 变体群 \(\mathcal{V}\)
3:
4: 过程 GenerateVariants(\(C_{\text{seed}}\), \(N\), \(\mathcal{T}\), \(\mathcal{F}_{\text{gold}}\), \(I\), \(N_t\), \(N_k\), \(\phi\), \(N_f\))
5:  \(\mathcal{V} \leftarrow \emptyset\)
6:  \(\mathcal{K} \leftarrow \textsc{None}\)
7:  for \(j \leftarrow 1\) to \(N\) do
8:      \(C_{\text{mut}} \leftarrow \textsc{Clone}(C_{\text{seed}})\)
9:      \(\mathcal{T}_{\text{selected}} \leftarrow \textsc{RandomSelect}(\mathcal{T}, N_t)\)
10:     for each \(t \in \mathcal{T}_{\text{selected}}\) do
11:         \(p_{\text{file}}(t) \sim U(0,1)\)
12:     if \(\mathcal{T}_{\text{selected}} \cap \mathcal{T}_{\text{kw}} \neq \emptyset\) and \(\mathcal{K} = \textsc{None}\) then
13:         \(\mathcal{K} \leftarrow \textsc{ExtractKeywords}(I)\) \(\triangleright\) LLM 调用;已缓存
14:     \(\mathcal{B} \leftarrow \textsc{AssignTargetNames}(\mathcal{T}_{\text{selected}}, \mathcal{K}, N_k)\)
15:     for each \((t, \tau) \in \mathcal{B}\) do
16:         \(c \leftarrow 0\)
17:         for each \(f \in \textsc{SourceFiles}(C_{\text{mut}})\) do
18:             if \(f \notin \mathcal{F}_{\text{gold}}\) and \((\textsc{Random} > p_{\text{file}}(t)\) or
19:             \((t \in \mathcal{T}_{\text{kw}}\) and \(c \geq N_f)\)) then
20:                 continue
21:             \(c \leftarrow c + 1\)
22:             \(S \leftarrow \textsc{GetCandidates}(f, t, \tau)\)
23:             if \(S = \emptyset\) then continue
24:             \(S' \leftarrow \textsc{RandomSelect}(S, \lceil \phi |S| \rceil)\)
25:             \(C_{\text{mut}}[f] \leftarrow \textsc{ApplyTransform}(f, S', t, \tau)\)
26:     \(\mathcal{V}.\text{append}(C_{\text{mut}})\)
27:  return \(\mathcal{V}\)
28: end procedure

1.  选择哪些转换?从转换列表 \(\mathcal{T}\) 中均匀抽取一个大小为 \(N_t\) 的子集。
2.  选择哪些文件?对于每个选定的转换,抽取一个包含概率 \(p_{\text{file}} \sim U(0,1)\),然后每个文件(不包括测试套件文件)根据此概率被包含...

相似文章

@SuJinyan6: https://x.com/SuJinyan6/status/2073955240349770069

X AI KOLs Timeline

这篇由SuJinyan6撰写的博文探讨了AI Agent从简单的LLM加工具使用,向上下文工程和长时间运行框架的演变。文中引用了Anthropic的最新研究,讨论了Agent能力如何成为一种系统级属性,涉及多个组件。

编程示例中的固定集鲁棒性:示例损坏与语义分区恢复

arXiv cs.LG

本文研究了编程示例系统中的对抗鲁棒性,其中攻击者通过破坏输入输出示例来误导合成器。它引入了版本空间分区聚合(VPA)作为防御方法,并在多个基准上进行了评估,发现低间隔任务容易受到攻击,且仅当分区投票间隔得以保留时VPA才有帮助。