把代码执行环境包装成 RL 接口,让 Agent 策略的对比有了统一的基础

背景

前几篇讨论的 Self-Debugging、Reflexion、LATS 等方法都涉及"执行-反馈-修正"的循环,但各自用的测试环境不同,评价标准不统一,很难做横向对比。

InterCode(Yang et al., 2023)的出发点是提供一个标准化的框架:把交互式代码执行环境包装成一个强化学习(RL)接口,让不同的 Agent 策略可以在相同的条件下比较。


框架设计

InterCode 把交互式编程任务定义为一个部分可观测的马尔可夫决策过程(POMDP):

状态(State):当前环境状态
              = 任务描述 + 历史动作序列 + 历史执行结果

动作(Action):Agent 生成的一段代码(一行或多行)

转移(Transition):执行代码后环境状态的变化

奖励(Reward):
  - 任务完成:+1
  - 中间步骤:根据执行结果部分给分(可选)
  - 超时或错误:0 或负分

观测(Observation):执行结果(标准输出 + 错误信息)

这个定义的好处是:任何符合这个接口的代码执行环境都可以插进来,不同的环境对应不同的任务类型。


两个具体环境

InterCode 论文里提供了两个环境:

InterCode-SQL

Agent 需要通过写 SQL 查询来回答数据库问题。每次执行返回查询结果,Agent 可以根据结果判断查询是否正确,再调整。

任务:找出销售额最高的前 3 名销售员的姓名和销售额

Step 1: SELECT name, SUM(amount) FROM sales GROUP BY name
→ 返回所有销售员的汇总,没有排序和限制

Step 2: SELECT name, SUM(amount) as total FROM sales
        GROUP BY name ORDER BY total DESC LIMIT 3
→ 返回正确结果

相比一次性生成 SQL,交互式调整的成功率更高,因为 Agent 可以先看部分结果,再决定怎么修改。

InterCode-Bash

Agent 需要通过写 bash 命令完成文件操作、数据处理等任务。执行环境是一个受控的 Linux shell。

任务:统计当前目录下所有 .py 文件里包含 "import" 的行数

Step 1: ls *.py
→ 列出所有 py 文件,确认文件存在

Step 2: grep -c "import" *.py
→ 每个文件的包含 import 的行数

Step 3: grep -c "import" *.py | awk -F: '{sum += $2} END {print sum}'
→ 汇总总行数

用 InterCode 对比不同策略

InterCode 的主要贡献不是一个新的 Agent 算法,而是一个对比平台。论文在这两个环境里对比了几种策略:

策略描述
直接生成一次性输出完整代码,不使用执行反馈
重试(Retry)执行失败后随机重试
ReAct交替生成推理步骤和代码动作
Reflexion失败后生成反思,带入下一轮

在 InterCode-SQL 上的结果:

策略成功率
直接生成43.0%
重试47.2%
ReAct55.4%
Reflexion61.3%

在 InterCode-Bash 上:

策略成功率
直接生成22.1%
ReAct28.3%
Reflexion34.7%

两个环境上的结论一致:使用执行反馈的策略优于不使用的,有反思机制的策略优于纯重试。这个结论本身不意外,但 InterCode 提供了一个统一的测量方式,让数字有了可比性。


奖励设计的细节

InterCode 的奖励函数设计是其中一个有价值的部分。不同任务对"成功"的定义不同:

SQL 任务:查询结果和标准答案完全一致才算成功。部分正确(比如结果集里有额外的行)不给分,避免 Agent 学会"输出更多来碰运气"。

Bash 任务:任务完成后的文件系统状态和预期状态一致才算成功。中间步骤不打分,只看最终结果。

这种结果导向的奖励设计比过程奖励更简洁,但也有问题:Agent 看不到"方向对不对",只知道最终有没有成功。对于步骤较多的任务,这会让学习信号变得稀疏。


InterCode 的局限

环境覆盖范围有限:SQL 和 Bash 只是编程任务的一小部分,不能代表所有 Code Agent 的场景。

奖励函数难以扩展:设计一个能准确衡量任务完成程度的奖励函数,本身就是一个难题。InterCode 的两个环境奖励设计相对简单,复杂任务上可能需要更精细的设计。

和真实任务仍有距离:受控环境里的 bash 任务,和真实开发环境里的操作有差距。真实环境里的状态更复杂,不确定因素更多。


标准化框架的价值

InterCode 的意义主要在于提供了一个统一的测量基础。在此之前,不同论文用不同的环境和评价指标,结论很难横向比较。

有了统一框架之后:

  • 新提出的 Agent 策略可以在 InterCode 上验证,结果和已有方法直接可比
  • 可以系统地研究不同设计决策对结果的影响(奖励设计、动作空间定义、观测范围等)
  • 可以把 RL 训练方法引进来,用 InterCode 作为训练环境

这种"提供基础设施"的论文在研究社区里往往比具体算法更有持续影响力。

版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:13. InterCode:把交互式编程环境变成强化学习的训练场

本文链接:https://www.sshipanoo.com/blog/ai/code-agent-harness/13-InterCode/

本文最后一次更新为 天前,文章中的某些内容可能已过时!