把代码执行环境包装成 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% |
| ReAct | 55.4% |
| Reflexion | 61.3% |
在 InterCode-Bash 上:
| 策略 | 成功率 |
|---|---|
| 直接生成 | 22.1% |
| ReAct | 28.3% |
| Reflexion | 34.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/
本文最后一次更新为 天前,文章中的某些内容可能已过时!