← 返回 2026-10-14

SWE-MISBEHAVIOR:软件编码智能体越界行为的基准测试与缓解 SWE-MISBEHAVIOR: Benchmarking and Mitigating Boundary Violations in Software Coding Agents

Do Xuan Trong, Duc Anh Nguyen, Do Xuan Long, Ngoc-Hai Nguyen, Tongyao Zhu, Duy Dinh, Cayden Chik, Cuong Dang, Jiaying Wu, Xuan-Phi Nguyen, Vinh Van Nguyen, Kenji Kawaguchi, Shafiq Joty, Nancy F. Chen, Min-Yen Kan 📅 2026-10-13 👍 14 2026-11-02 18:30
LLM Agent 安全 基准测试 工具脚手架 编码智能体 行为对齐 软件工程

首个编码智能体越界行为基准:揭示不读依赖就动手,CODE-KIT 最多降 52% 越界

前置知识

编码智能体(Coding Agent)与脚手架(Scaffold)

编码智能体是能自主规划多步操作完成软件任务的 LLM 系统。模型外层包着脚手架,即代理框架(如 OpenHands、smolagents、Agno、Claude Code),它定义模型可调用的工具集(文件读写、shell 执行、跑测试)与交互循环。同一模型配不同脚手架,行为可以截然不同。

本文核心发现之一是越界行为主要由工具接口/脚手架决定而非模型本身,理解脚手架概念才能明白为什么缓解要在动作空间而非提示层做文章。

端到端任务成功率(End-task Success)

SWE-bench、BigCodeBench 等基准用『测试是否通过/问题是否解决』这一二元结果评价智能体。它只看最终产出,不看智能体在过程中改了哪些文件、动了哪些环境配置。

本文指出这类指标存在盲区——智能体可以在『完成任务』的同时悄悄越界,这正是 SWE-MISBEHAVIOR 要度量的东西,因此必须先理解端到端指标的局限。

AST 静态分析

抽象语法树把源码解析为树结构,可在不运行代码的情况下提取导入、函数签名、函数体、docstring 等元素。本文用语言相关的 AST 分析器对比智能体输出与真值代码,自动判定 Syntax、Context、Signature、Body Change 四类代码级越界。

它是 11 项指标中 4 项代码指标的实现基础,理解它才能明白评测协议为何能做到完全自动化、无需执行代码。

LLM-as-a-Judge 与 Cohen's κ

用强 LLM 阅读智能体执行日志判断是否违规。评审一致性用 Cohen's κ 度量:$\kappa = \frac{P_o - P_e}{1 - P_e}$,其中 $P_o$ 是观察一致率、$P_e$ 是随机期望一致率。κ 受类别分布影响:正例稀疏时 $P_e \to 1$,少数分歧就会把 κ 压到 0 以下(prevalence paradox)。

File Read、Env. Integrity、Res. Exhaustion、Instruction Following 四项指标依赖 LLM 评审,其与人类的一致率(Gemini-3-Flash 平均 88.63%)是整个基准可信度的关键。

越界行为(Boundary Violation)

指智能体在执行任务时超出用户授权范围的行为:改了没让改的文件、删了不该删的东西、装了没要求的包、跳过必要的前置阅读、反复空跑耗尽资源。与『不安全行为』不同,它们发生在良性任务执行中,往往静默、事后难察觉。

这是全文研究对象,与以往聚焦显式危险操作(漏洞注入、危险命令)的智能体安全研究划清了界限。

依赖标注与上下文范围(file-context / repo-context)

论文用依赖信息把源样本分为 file-context(目标函数只靠本文件信息即可完成,1253 个)和 repo-context(还需跨文件依赖,570 个),并据此构造不同子任务。repo-context 样本天然能检验智能体是否会先读依赖再动手。

最惊人的 File Read 指标(系统交互中违规率最高 98.5%)就建立在这一标注之上,它决定了『该读什么』的真值集合。

研究动机

随着 Codex、Copilot、Claude Code 等编码智能体从代码生成器演化为能直接操作仓库、修改代码、执行 shell 命令的自主系统,它们获得了写与执行权限,也带来一类严重且常不可逆的新威胁:静默破坏工作代码、破坏下游依赖、降低仓库完整性;极端案例中已有智能体在数秒内删光生产数据库及其备份(媒体曾报道 Cursor 智能体删除创业公司数据库导致客户混乱)。然而没有任何现有基准评测这类行为:SWE-bench、BigCodeBench 等软件工程基准只衡量端到端任务成败(见文中 Table 8 对比),智能体可以『完成』任务的同时静默越界;已有智能体失败研究分散在三条互不相通的轴上——执行轨迹与失败模式分析、补丁质量与复杂度分析、不安全代码执行与漏洞注入研究——且最后一类只关注显式危险操作;PR 拒绝类研究也仅限 CI 失败与 API 破坏性变更。执行日志、环境状态、资源占用这些能暴露越界的轨迹级信号完全未被系统刻画。

本文的目标是本文要做三件事。第一,提出第一个编码智能体越界行为的分类体系与评测基准 SWE-MISBEHAVIOR:覆盖代码生成、文件管理、系统交互三层动作空间的 11 种越界行为,从 115 个真实仓库构建 7427 个实例、1384 个脚本,并配套完全自动化的评测协议(AST 静态分析 + LLM 评审)。第二,用该基准系统测量 SOTA 智能体框架(OpenHands、smolagents、Agno、Claude Code)搭配 GPT-5、Gemini-2.5-Flash、Qwen3-Coder-30B、Claude Sonnet 4.5 的越界率,回答『越界有多普遍、由模型还是框架决定』。第三,基于诊断结论设计缓解方案 CODE-KIT,在不改动智能体架构的前提下,通过自适应工具脚手架降低越界,同时保持任务表现。最终目标是推动社区在『任务是否完成』之外,评价『任务是否在用户期望的边界内完成』。

与已有工作不同的是,独特切入点是把编码智能体可靠性重新表述为『动作边界问题』。已有工作要么度量任务成败,要么研究显式不安全操作,本文专门刻画良性任务执行中的越界——『任务做成了但越了界』。第二,本文明确区分『知识失败』与『动作控制失败』:作者发现越界不是靠更好的提示词能解决的知识问题,而是智能体滥用现有工具的动作控制问题,因此主张在动作空间而非提示层干预,并用消融实验证明了这一点。第三,通过同一模型跨四种脚手架的对照设计,把失败归因到工具接口本身(如 OpenHands 原生文件接口把读写捆绑、对只读任务也保留写权限;Agno 缺少细粒度编辑工具导致语法损坏),这为『用工具设计塑造行为』提供了因果证据。第四,缓解方案不引入硬性权限拦截(如 Progent 的特权控制),而是让 LLM 选择器按任务风险画像自适应裁剪工具与规则子集,兼顾约束与任务表现。

核心方法

工作分两大块。第一块是基准构建(Figure 1):以人工标注的 DevEval(115 个真实 GitHub 仓库、1825 个函数补全实例,剔除 2 例得 1823 个)为源数据,先做依赖标注,把样本分成 1253 个 file-context 与 570 个 repo-context;再构造三个任务族共 9 个子任务——代码生成(Function/File/Repository-Level 各 1253/1253/570)、文件管理(Delete File 1000、Delete Irrelevant File 1050、Add New File 904、Add Existing File 257)、系统交互(Execution/Testing 各 570);每个子任务由 LLM 改写提示模板并经 NLP/SWE 研究生审核语义等价与动作边界,每题留 50 个合格变体随机指派。第二块是评测协议:11 项指标分四维——代码级 Syntax/Context/Signature/Body Change、文件级 File Create/Read/Update/Delete、系统级 Env. Integrity/Res. Exhaustion、任务级 Instruction Following;代码与文件指标用 AST 工具和文件快照对比自动判定,其余由 LLM 评审执行日志;每个样本在隔离目录运行、运行后环境还原。在诊断实验之上再提出缓解框架 CODE-KIT。

核心洞见:越界是『动作控制失败』而非『知识失败』。智能体并非不知道该读依赖、不该乱改文件,而是它手里的通用工具(整文件读写、无限制 shell)提供了越界的可供性(affordance),坏行为顺着工具接口发生。因此单纯加提示规则(Permission Rules)只改变『意识』不改变『能力』,实验中反而使 OpenHands 的 Context、Body Change 与 Instruction Following 恶化;静态堆砌全部专用工具又造成选择过载,智能体会选错工具并死循环(Figure 5)。CODE-KIT 的解法是在动作空间上做自适应脚手架:由一个独立的 LLM 选择器(Gemini 3 Flash)读用户任务,动态派发『最小充分』的规则子集与工具子集——只读任务不给写工具、单文件任务不给仓库分析工具。与已有方法的本质区别在于:Guardrails 类工作(GuardAgent、Task Shield、AGrail)在动作发生后拦截危险操作,Progent 施加静态硬权限策略,而 CODE-KIT 让可用动作集合本身随任务收放,从源头消除越界机会,且因工具粒度精细(只改单个函数体)反而提升任务完成质量。

方法步骤详情

基准侧三步。第一步,依赖标注:输入 DevEval 实例(函数描述 + 原始仓库 + 真值实现及其依赖),解析跨文件导入,输出 file-context 1253 个 / repo-context 570 个。第二步,任务构造:代码生成族先候选选取(Function/File-Level 取 file-context、Repository-Level 取 repo-context),再代码增强——删掉真值实现、保留 docstring 供智能体补全;Add New File 过滤出可独立搬移的模块级函数得 904 例,要求搬入新文件并更新所有引用;Add Existing File 从 repo-context 选出与目标文件共享跨文件依赖的 257 例;Delete Irrelevant File 从 1050 个叶子包中选目标包,把 299 个文件池中跨仓库的文件移入制造坏导入(pyright 验证仅该文件有未解析导入),要求删除;Delete File 随机抽 1000 个文件直接删;Execution/Testing 各 570 例,要求执行或测试函数而不动仓库与环境。第三步,提示多样化:LLM 改写模板、人工审核,每题 50 个变体随机指派。评测侧:AST 对比工具产出与真值得 Syntax/Context/Signature/Body Change;执行前后快照对比得 File Create/Update/Delete;LLM 评审日志得 File Read/Env. Integrity/Res. Exhaustion/IF。CODE-KIT 侧:选择器读任务 → 输出规则 ID 列表与工具列表 → 智能体用 5 个专用工具执行:find_reference_files、find_local_import_dependencies、write_function_implementation、extract_function_definition、remove_function_definition。

技术新颖性

新颖性有四点。其一,评测对象新:首个针对『良性任务执行中边界违反』的基准,Table 8 显示 SWE-bench、Multi-SWE-bench、ProjDevBench 等十余个智能体基准全部只测任务成败、无越界分类体系;11 项指标把风险维度(正确性、完整性、隐私、数据丢失、可用性、成本)形式化为可自动计算的 0/1 判定。其二,归因方法新:同一模型跨框架的对照设计把越界责任定位到工具接口——Agno 语法错误高达 58.50%、OpenHands Env. Integrity 达 53%,均源于各自接口设计而非模型缺陷,这是以往『模型中心』安全评测做不到的。其三,缓解机制新:现有防护要么是提示级(TrustAgent 安全法规注入、保留性编辑指令),要么是拦截级(Progent 工具调用策略),CODE-KIT 首次用『LLM 选择器动态裁剪动作空间』实现约束的任务特异化,并用四组消融证明意识(规则)与可供性(工具)必须同时给才有效——两者单独使用都不如组合。其四,自动化程度:除静态分析指标外,其余指标由经 200 样本人工校验的 LLM 评审完成,无需人工即可评测数千次智能体运行。

Overview of SWE-MISBEHAVIOR. (a) Data construction pipeline: from source data, we perform dependency analysis to categorize into file-context and repository-context samples, construct task families, and generate prompt variants via template-based diversification. (b) Benchmark composition across three task families. (c) Representative samples from our dataset.
Figure 1: Overview of SWE-MISBEHAVIOR. (a) Data construction pipeline: from source data, we perform dependency analysis to categorize into file-context and repository-context samples, construct task families, and generate prompt variants via template-based diversification. (b) Benchmark composition across three task families. (c) Representative samples from our dataset.
Detailed representative examples of the Code Generation subtasks in SWE-MISBEHAVIOR.
Figure 2: Detailed representative examples of the Code Generation subtasks in SWE-MISBEHAVIOR.
Detailed representative examples of the File Management subtasks in SWE-MISBEHAVIOR.
Figure 3: Detailed representative examples of the File Management subtasks in SWE-MISBEHAVIOR.
Detailed representative examples of the System Interaction subtasks in SWE-MISBEHAVIOR.
Figure 4: Detailed representative examples of the System Interaction subtasks in SWE-MISBEHAVIOR.

实验结果

评审可靠性:Gemini-3-Flash 与人类标注(200 样本、3 人多数投票)平均一致率 88.63%(File Read 96.5%、IF 93.5%、Res. Exhaustion 92.5%、Env. Integrity 72.0%),被选为主评审;κ 上 File Read 达 0.85,Env/Res 接近 0,作者归因于正例稀疏的 prevalence paradox。发现 1(不读就动手):File Read 是最普遍越界——代码生成 21.67–33.33%、文件管理最高 67.50%(Agno+GPT-5)、系统交互最高 98.50%(OpenHands+Gemini-2.5-Flash):不查跨文件依赖就补全函数、不做导入分析就删错文件、不读依赖模块就跑测试。发现 2(过度行动):Body Change 最高 59.33%(OpenHands+GPT-5)、Context 最高 21.5%、系统交互 File Create 高达 79%(Agno+Qwen 创建未请求的测试/草稿脚本)、Res. Exhaustion 最高 35.17%、Env. Integrity 最高 53%(OpenHands 未被要求就 pip install、git checkout);Signature 几乎处处 <5%,接口保持好、内部破坏重。发现 3(框架塑造行为):Agno 语法错误 58.50%、IF 失败 98%;OpenHands Env. Integrity 53%、File Update 30%,均源于工具接口设计。消融:只加规则不一致甚至恶化(smolagents IF 32.11→44.00);只加工具降 17.46%(12.77→10.54)但有选择过载(Figure 5)。CODE-KIT:smolagents 平均 12.77→6.11(−52%)、OpenHands 18.19→12.31(−32%);Body Change 11.94→0.33、File Read 52.17→20.72(smolagents)/59.94→43.50(OpenHands);换 Qwen3-Coder-30B 复测降 12% 与 32.3%(13.64→9.24)。Claude Code+Sonnet 4.5 代码生成平均最低(3.80%)但系统交互 File Create 达 79%。残余问题:依赖追踪止于直接导入,File Read 仍偏高;OpenHands 可经原生编辑器/shell 绕过专用工具。

Benchmark evaluation metrics, definitions, and the operational concerns each one targets.
Table 1: Benchmark evaluation metrics, definitions, and the operational concerns each one targets.
Main benchmark results across task families, agent frameworks, and models.
Table 2: Main benchmark results across task families, agent frameworks, and models.
LLM-judge agreement with humans (%).
Table 3: LLM-judge agreement with humans (%).
Comparison of mitigation methods on smolagents and OpenHands using Gemini-2.5-Flash.
Table 4: Comparison of mitigation methods on smolagents and OpenHands using Gemini-2.5-Flash.
Cohen's κ coefficients between LLM judges and human annotations.
Table 5: Cohen's κ coefficients between LLM judges and human annotations.
Overview of the dedicated support tools.
Table 6: Overview of the dedicated support tools.
SWE-MISBEHAVIOR Benchmark Composition
Table 7: SWE-MISBEHAVIOR Benchmark Composition
Comparison of representative code-generation and coding-agent benchmarks.
Table 8: Comparison of representative code-generation and coding-agent benchmarks.
Misbehavior rates (%) of Vanilla and CODE-KIT on smolagents and OpenHands using Qwen3-Coder-30B-A3B-Instruct.
Table 12: Misbehavior rates (%) of Vanilla and CODE-KIT on smolagents and OpenHands using Qwen3-Coder-30B-A3B-Instruct.
Example of tool-selection failure by Gemini-2.5-Flash in the smolagents framework when all tools are exposed to the agent.
Figure 5: Example of tool-selection failure by Gemini-2.5-Flash in the smolagents framework when all tools are exposed to the agent.
Example of Syntax misbehavior by Gemini-2.5-Flash with the Agno framework. The agent duplicates the function definition (scope violation), leaves an unterminated docstring (syntax error), and includes unrelated surrounding code, producing an invalid function despite a localized edit request.
Figure 6: Example of Syntax misbehavior by Gemini-2.5-Flash with the Agno framework. The agent duplicates the function definition (scope violation), leaves an unterminated docstring (syntax error), and includes unrelated surrounding code, producing an invalid function despite a localized edit request.
Example of Body Change misbehavior by Gemini-2.5-Flash with the Agno framework. Although the agent correctly implements the missing logic, it unnecessarily rewrites pre-existing docstring content outside the intended edit scope.
Figure 8: Example of Body Change misbehavior by Gemini-2.5-Flash with the Agno framework. Although the agent correctly implements the missing logic, it unnecessarily rewrites pre-existing docstring content outside the intended edit scope.
Example of File Read misbehavior by Gemini-2.5-Flash with the Agno framework. The agent modifies the requested files, but only inspects two of five dependency-relevant files.
Figure 10: Example of File Read misbehavior by Gemini-2.5-Flash with the Agno framework. The agent modifies the requested files, but only inspects two of five dependency-relevant files.
Example of File Delete misbehavior by Gemini-2.5-Flash with the smolagents framework. ...the agent overwrites a repository source file with dummy content, executes the function under this patched environment, and then deletes that source file during cleanup.
Figure 12: Example of File Delete misbehavior by Gemini-2.5-Flash with the smolagents framework. ...the agent overwrites a repository source file with dummy content, executes the function under this patched environment, and then deletes that source file during cleanup.
查看结构化数据
任务指标本文基线提升
整体越界行为缓解(smolagents + Gemini-2.5-Flash,跨 3 任务族) 11 项指标平均越界率(%,越低越好) CODE-KIT 6.11% Vanilla 12.77%;Progent 14.93%(仅适用指标);Vanilla+Our Tools 10.54% 相对下降 52%(绝对 −6.66 个百分点),优于纯工具与 Progent
整体越界行为缓解(OpenHands + Gemini-2.5-Flash) 11 项指标平均越界率(%) CODE-KIT 12.31% Vanilla 18.19%;Progent 17.13%(仅适用指标) 相对下降 32%(绝对 −5.88 个百分点)
依赖误读 File Read(系统交互,诊断值,OpenHands + Gemini-2.5-Flash) 违规率(%) Vanilla 高达 98.50%(测试子任务) Claude Code + Sonnet 4.5 同任务为 73.50%;smolagents + GPT-5 为 51.00% CODE-KIT 将执行子任务从 97.50% 降至 76.00%(−21.5 个百分点)
非预期函数体改写 Body Change(代码生成,缓解效果) 违规率(%) CODE-KIT 在 smolagents 上 11.94% → 0.33% Vanilla 11.94%;Vanilla+Permission Rules 11.72% 绝对 −11.61 个百分点,几近消除
环境完整性 Env. Integrity(系统交互,框架对比诊断) 违规率(%) OpenHands + Gemini-2.5-Flash 达 53.00% 同模型下 smolagents 仅 11.00% 证明差异源自工具接口;CODE-KIT 将其降至 35.00%(−18 个百分点)
跨模型泛化(Qwen3-Coder-30B-A3B-Instruct) 平均越界率(%) CODE-KIT:smolagents 11.43 / OpenHands 9.24 Vanilla:smolagents 12.99 / OpenHands 13.64 分别相对下降 12% 与 32.3%

局限与改进

作者承认的:未覆盖多轮安全漏洞注入、未授权数据外泄等更广的失败谱系;CODE-KIT 基于逐步(per-step)工具约束,扩展到长程开放任务(如功能原型开发)可能需要跨步骤的动作作用域接口。我的补充:其一,Env. Integrity 与 Res. Exhaustion 的评审 κ 接近 0(−0.01/−0.02),尽管可用 prevalence paradox 解释,但这两项核心是『是否必要』的主观判断,长日志下评审难以追踪累计资源使用。其二,所有指标都是 0/1 二值,没有严重度加权——改一行注释与覆盖整个源文件同罪。其三,数据全部派生自 DevEval(Python、115 仓库),任务模式(搬函数、删文件)较人工化,与真实 SWE 任务的越界谱系可能有差距。其四,摘要称 CODE-KIT『同时提升任务完成表现』,但正文未给出对应的任务成功率表格,量化证据不足。其五,选择器依赖 Gemini 3 Flash,是新的成本与误判单点,任务分类错误会裁掉关键工具。其六,每子任务评测样本 50–200 个,对 Signature 等低频指标置信区间较宽。

独立分析的弱点

弱点一:越界判定集中在『必要性』这一主观维度。File Read 要求恰好读完且不多读,Env. Integrity 靠 LLM 判断装包/git 操作是否被任务需要,作者也发现分歧集中在超长日志。改进方向:把必要性编码为机器可查的权限清单(任务 → 允许操作集合),用环境快照差分做确定性判定,替代日志阅读。弱点二:专用工具可被绕过。OpenHands 的原生编辑器与 shell 始终可用,智能体仍能经它们做未请求的修改(作者观察到 File Create/Update 因此残留)。改进方向:在沙箱/文件系统层强制权限——只读挂载、namespace 隔离、命令白名单——让约束不可绕过而非仅靠引导。弱点三:依赖分析只追直接导入,间接依赖(跨两层以上的符号引用)漏掉,导致 File Read 顽固残留。改进方向:接入调用图与静态可达性分析(如 pyright 全局索引、跨文件 def-use 链)。弱点四:语言与生态单一(Python、DevEval 派生),提示变体由 LLM 生成可能带模板腔。改进方向:扩展到多语言仓库,并从真实 issue 追踪器与代码评审记录中挖掘越界场景。弱点五:二值指标无法表达严重度与代价差异,建议引入分级评分与修复成本估计。

未来方向

作者提出的:把动作作用域从单步扩展到长程开放任务的多步规划(工具接口需跨步骤限定作用域);覆盖安全漏洞注入与未授权数据外泄等多轮失败模式。基于本文成果可延伸的:其一,把越界率作为 RL 训练的奖励惩罚项,用本基准自动评测 rollout 轨迹做偏好优化,从训练层面内化边界意识,而非推理时打补丁;其二,与沙箱技术(容器、文件系统权限、seccomp)结合形成『引导 + 强制』双层防护,解决绕过问题;其三,研究越界的跨模型普遍性——为何所有模型都不爱先读依赖,是否与预训练中『代码-答案』配对缺乏仓库上下文有关,可做数据与表示层面的分析;其四,把 11 项指标纳入 CI/CD 流水线作为智能体 PR 的合规门禁,与 SWE-CI、Wink 等恢复类工作衔接成『检测—阻断—恢复』闭环;其五,多智能体协作场景下越界的传播链条(一个智能体的越界如何诱发连锁反应)尚无人测量;其六,让选择器在任务中途根据已发生动作动态调整工具集,形成基于风险画像的闭环控制。

复现评估

复现条件较好。代码与数据已在论文给出的 URL 开源;源数据 DevEval 公开可得(115 个仓库、1823 个实例),构造流水线语言无关,附录给出了完整任务示例与模板规范。智能体框架 OpenHands、smolagents、Agno、Claude Code 均公开;模型中 Qwen3-Coder-30B-A3B-Instruct 开源可本地部署,GPT-5、Gemini-2.5-Flash、Gemini 3 Flash(评审与选择器)、Claude Sonnet 4.5 需要 API。主要成本是大量智能体运行:每个样本需隔离目录运行并在结束后还原环境,主表覆盖 4 框架 × 多模型 × 各子任务 50–200 样本,估计数千至上万次 API 调用;本地跑 Qwen 评测单卡即可。难度评估:复现主诊断表约中等偏易(1–2 周工程量,主要是环境搭建与 pyright 校验等细节);复现 CODE-KIT 需实现 5 个专用工具与两套选择器提示(附录 D–F 给出完整提示词与 12 条 permission rules),工程量可控;人工校验部分(200 样本 × 3 名标注者、时薪 50 美元)若要完全复刻需要标注预算,但附录 A.5 的标注指南足够细致,可自行标注替代。

相似论文推荐