EnvScaler: Scaling Tool-Interactive Environments for LLM Agent via Programmatic Synthesis
速读卡片 (TL;DR)
一句话: RUC NLPIR 提出 EnvScaler —— 一条由 LLM "反向挖主题 → 规划状态空间 → 生成 Python class" 的程序化合成流水线,把 environment 直接落成一个有 state-as-attribute、tool-as-method 的可执行 Python 文件,并配合一个 "checker-agent + tester-agent 互相对打 100 轮" 的 dual-agent 质量门把不合格 env 筛掉。最终产出 191 个 env / ~7K scenarios / ~9K SFT trajectory,在 Qwen3-Thinking 1.7B/4B/8B 上跑 SFT + Reinforce++,BFCL-v3 Multi-Turn / τ-Bench / ACEBench-Agent 上 8B 比 base 全面 +6 ~ +13 分。代码、权重、数据全 MIT 开源 —— 这一点上比 #18 AWM 走得更彻底。
立场: 这是合成 env 这条线时间最早、最完整开源的一篇之一(2026-01,与 Snowflake AWM #18 同期),也是后续 Agent-World (#03) 和 AWM (#18) 都把它列作"程序化合成 baseline"的原因。EnvScaler 选了"Python class 即 environment"这个最简范式 —— state 就是 class 属性,tool 就是 class method,verifier 就是 K 个返回 True/False 的函数,reward 就是通过率 1/K · Σ。简洁但有代价:验证代码本身是 LLM 生成,AWM 报告 EnvScaler 在 code-only 验证下 46.8% 的 task 因 verifier bug 永远不可通过 —— 这是该范式最大的暗礁。
1 · 背景 — 程序化合成 env 在 agentic RL 光谱里的位置
1.1 为什么"合成 tool-interactive env"是 2026 上半年的核心战场
过去一年里 agentic RL 已经过了"有 reward 就能训"的初级阶段,瓶颈整体上移到了"没有足够多样的可执行环境"。现在主流四条获取 env 的路线 —— 见 #03 Agent-World §1.2 那张表 —— 大致是:
| 路线 | 代表 | 痛点 |
|---|---|---|
| ① 真实 service 抓取 | WebArena, OS-World, Agent-World (#03) | 真实但贵 / 受 rate limit / 状态不可重置 |
| ② LLM 当 simulator | Simulator-8B, GenEnv | 幻觉,transition 不一致 → RL signal 崩 |
| ③ 程序化合成 (本文路线) | EnvScaler (本篇), AWM (#18), AgentScaler, AutoForge, WorldCoder | 脱离真实工作流,但确定性 + 可重置 + 可大规模并发 |
| ④ Docker per task | SETA (#20) | 真实工具但任务粒度小,scale 上靠 Docker 编排 |
EnvScaler 站在第 ③ 行的最早开源版本之一。它和 AWM 是同期同路线(EnvScaler v1 2026-01-09,AWM 2026-02),后续 Agent-World 的 §1.2 表格里就把这两篇并列写作"程序化 FSM/sandbox"。
1.2 EnvScaler 的关键差异化论断
paper 在 related work 里把自己跟更早的同路线工作做了三点划界:
"AgentScaler and AutoForge rely on pre-collected toolsets or tool documentation, and lack an automated mechanism for assessing environment quality."
"WorldCoder ... inevitably depends on access to pre-existing environments."
—— EnvScaler 的差异点 = 不依赖 tool 文档先验 + 不依赖既有 env 模板 + 有自动质量门。
翻译: 它声称是首个能从"仅有 task 集"这一最小先验下,反推出 env 结构 + tool 接口 + verifier 的全自动 pipeline,并且每个 env 都要先通过 dual-agent 100 轮对打才能入库。这是该 paper 给自己留的护城河 —— 不过这个护城河被 AWM 在比较时戳穿过(后面 §5 表里详谈)。
2 · 核心方法 · SkelBuilder + ScenGenerator 双阶段流水线
EnvScaler 把整条 pipeline 拆成两阶段,中间用 Python class 文件作为接口契约。下图是把 paper §3 的 Figure 2 重画成更直观的流程图:
2.1 与同类 pipeline 的 inline 对比
把同期三条路线的 pipeline 一一对位 —— 三家做的是同一件事,但分歧点很有意思:
| 阶段 | EnvScaler (本篇) | AWM (#18) | Agent-World (#03) |
|---|---|---|---|
| env 起点 | 已有 task 集(反向推) | 100 seed scenario(扩到 1,000) | 真实 MCP registry + web 抓取 |
| logic 规划 | state + rule + tool blueprint (NL) | 5 阶段: scenario→schema→tool→verify→reset | 无规划,直接 mining + 适配 |
| env 物理形态 | 单个 Python class(state=attr, tool=method) | SQLite + Python tool functions(分离) | 真实 MCP server(Docker / API 调用) |
| verifier | K 个独立 Python 函数 (LLM 生成) | LLM-augmented verify (有 LLM-judge 兜底) | 自动 unit-test + LLM-judge 混合 |
| 质量门 | Dual-agent 100 轮(本篇护城河) | Self-correct 平均 1.13 次 / blocked 11.5% | "Browse" agent 自动跑通可达性测试 |
| 产物规模 | 191 env / ~7K scen / ~9K traj | 1,000 env / 10K task / 35,062 tool | 1,978 env / 19,822 tool / 33,409 task |
| cost | ~$650 全量(超便宜) | 未公开美元数 | 很贵(deep-research agent 调用 + 自动 verify) |
结构差异要点: EnvScaler 把整个 env 塞进一个 Python class —— "state 是 attribute,tool 是 method";AWM 把 state 和 tool 物理分离(SQLite 在一边,Python tool functions 在另一边)。前者优雅但耦合,后者解耦但工程量更大。
3 · 关键设计 — "程序"具体指什么 / tool 池 / reward / 失败处理
3.1 "程序化"= LLM 生 Python class + AST 校验,并非 DSL / JSON Schema
这是 paper 容易被误读的点 —— "programmatic synthesis" 不是说有一个 DSL 或 JSON Schema 模板,而是LLM 直接生成 Python 类,再用 AST 做语法 sanity check。具体步骤:
"LLM first converts the planned state space into class attribute definitions ... then generates the corresponding class-method implementation."
- State 表达: Python 类的 attribute(可能是 list / dict / 自定义对象)。论文报告平均一个 env 有 21.38 个 state category。
- Tool 表达: Python 类的 method。method 签名 + docstring 后续会被 AST + 正则抽取出来,形成tool 接口集 Σ_tool,这就是 agent 看到的 tool definition。平均一个 env 有 18.58 个 tool。
- Rule 表达: 自然语言约束,在 task 生成阶段灌进 prompt。平均 4.58 个 rule / env。
- 校验: AST parse 通过 + 能 import 成功 + 能被 dual-agent 测试通过 → 入库。
这种"Python class 即 environment"的范式好处是极致简单 —— 不用维护任何 DSL,任何 LLM 都能写;坏处是 state 全在内存,无法跨进程持久化,也不易做差分快照(对比 AWM 用 SQLite 后,reset 一行 SQL 就行)。
3.2 工具池 — per-env 私有,无共享
EnvScaler 的工具是per-env 私有的(因为 tool 就是 env class 的 method),没有跨 env 复用的"shared tool registry"。这点和 AWM 一致 —— AWM 的 35,062 个工具也是各 env 私有的。对比 Agent-World 那边 19,822 个工具是从真实 MCP registry mining 来的共享池(很多 env 共享同一些工具如 Notion / Slack),EnvScaler 这种范式更适合 stateful 业务而非真实 SaaS 模拟。
3.3 Reward · 部分信用 + LLM 生成 verifier
奖励就是验证函数通过比例 —— paper 原话:
"Decomposing the task into multiple validation functions not only captures partial completion, but also is easier for the LLM to generate."
这是个典型 execution-based + rule-based 混合的 reward —— 验证代码本身是 LLM 一次性生成的(rule-based 的形式),但是真正跑在 final state 上(execution-based 的执行)。没有 LLM-judge 兜底,这是 EnvScaler 和 AWM 的最关键区别。AWM 之所以在论文里专门 ablate "code-only verify",就是为了讨这个便宜 —— 后面 §5 表里详谈。
3.4 Dual-Agent 质量门(本篇真正的护城河)
这是 EnvScaler 在合成 env 这条线上最有原创性的设计。具体做法:
"The testing and checking agents form a closed loop, iterating for N rounds to cover diverse situations. The average judging pass rate serves as the quantitative metric for the environment's quality."
—— Tester agent 假装是用户,在 env 里调 tool 做事;Checker agent 看 tool 的源码 + 返回值 + 调用前后的 state diff,判断"tool 行为是否符合 docstring 承诺"。100 轮跑完看 pass rate,低于阈值的 env 直接丢掉 —— 最终 266 个候选 env 里 75 个被丢了(28.2% rejection)。
这个机制的核心价值是filter 出"自洽"的 env —— 因为 logic / class / verifier 都是 LLM 一次性生的,中间有 bug 几乎是必然,通过 dual-agent 反复触发能查出来。但它查不出"verifier 系统性偏差"(verifier 永远把某类正确答案判错),这是后面 AWM 抓住的痛点。
3.5 失败 trajectory 怎么处理
SFT 阶段用 Qwen3-30B-A3B-Thinking-2507 当教师生成 ~9K 条 trajectory。判定"成功"的 trajectory 才被纳入 SFT 数据 —— 这跟 AWM 的 V=0 丢弃失败样本是一样的(参见 #18 §3)。RL 阶段不丢失败 trajectory,而是直接喂 reward ∈ [0,1] 进 Reinforce++ —— 这一点比 AWM 的 GRPO 更宽容,因为 GRPO 必须有相对 baseline,而 Reinforce++ 直接吃绝对 reward。
4 · 训练 recipe + 主表(Qwen3 三档 · 三 benchmark)
4.1 训练配方
教师: Qwen3-30B-A3B-Thinking-2507
SFT: 140 envs / ~9K trajectories / 3 epochs / lr 1e-6
RL: Reinforce++ 算法(非 GRPO,非 PPO),51 envs / 64 task × 8 rollout per step / ≤200 step
训练数据规模: SFT scenarios 4.7K / RL scenarios 2.5K(开源在 HF)
注: paper 提到的 Reinforce++ 是 OpenRLHF 提供的一种 RL 算法变种(REINFORCE + advantage normalization + token-level KL),不是 GRPO 系。值得对比 —— 同时期 AWM 用 GRPO,Agent-World 用 GRPO,SETA 用 GRPO,EnvScaler 是这 4 篇里唯一一个用 Reinforce++ 的。
4.2 主表 — Qwen3-Thinking 三档 × 三 benchmark
从 paper Table 4 抄,base / +SFT / +SFT&RL 三档,数字是绝对分 + (相对 base 涨幅):
| 模型 size | 阶段 | BFCL-v3 MT | ACEBench-Agent | τ-Bench |
|---|---|---|---|---|
| Qwen3-1.7B | Base | 9.75 | 12.50 | 31.95 |
| +SFT | 18.13 (+8.38) | 17.44 (+4.94) | 43.61 (+11.66) | |
| +SFT&RL | 23.00 (+13.25) | 16.28 (+3.78) | 50.00 (+18.05) | |
| Qwen3-4B | Base | 25.38 | 33.44 | 55.28 |
| +SFT | 34.88 (+9.50) | 38.20 (+4.76) | 66.67 (+11.39) | |
| +SFT&RL | 38.00 (+12.62) | 41.06 (+7.62) | 70.55 (+15.27) | |
| Qwen3-8B | Base | 28.88 | 38.19 | 60.00 |
| +SFT | 37.00 (+8.12) | 41.35 (+3.16) | 71.67 (+11.67) | |
| +SFT&RL | 41.88 (+13.00) | 44.81 (+6.62) | 72.50 (+12.50) | |
| 对照 frontier | ||||
| GPT-4.1 | 40.00 | 57.48 | 77.50 | |
| Qwen3-235B-Thinking | 45.75 | 56.90 | 74.17 | |
| Kimi-K2-Instruct | 45.88 | 61.94 | 79.17 | |
关键观察: (a) Qwen3-8B + EnvScaler 在 BFCL-MT 上 41.88 已经超过 GPT-4.1 (40.00) —— 是这张表里最亮眼的数字; (b) τ-Bench 72.50 落后 GPT-4.1 5 分,落后 Kimi-K2 6.67 分,差距相对小; (c) ACEBench-Agent 44.81 落后 GPT-4.1 12.67 分,差距最大 —— 这个 benchmark 强调 agent 的 long-horizon 能力,合成 env 给不了足够长 horizon 的训练; (d) SFT 自己已经吃掉大部分 gain(8B 上 SFT 占 +8.12 / 13.00 = 62% BFCL 涨幅),RL 只是锦上添花。
4.3 关键 ablation
| Ablation | 结果 | 含义 |
|---|---|---|
| 训环境与测试环境的相似性 (Table 5) | top 50% similar ≈ bottom 50% similar (~32 综合分) | 性能涨幅不依赖训练 env 与测试 env 的直接相似性 —— 学到的是通用 tool-use能力 |
| 纯 RL no SFT (Table 7) | Qwen3-8B 直接 RL +8.74 (BFCL-MT) | cold-start SFT 仍然贡献了相当一部分增益; 小模型尤其需要先 SFT |
| Conv / Non-Conv 训练混合 (Table 6) | Full > Non-Conv > Conv | 对话型 task 和单轮 task 都要保留 |
5 · 🔍 开源现状 — repo 实地清点 + 与 4 篇横向对比
5.1 EnvScaler 单家清点
这一点 EnvScaler 做得相当干净 —— MIT 协议,模型 / 数据集 / 代码全开:
六大模块: skel_builder/(env 骨架构造) · scen_generator/(scenario 生成) · interact_with_env/(agent ↔ env 交互) · sft/(SFT 训练) · rl/(RL 训练) · evaluation/(评测)。Demo 入口: python interact_with_env/app.py + python skel_builder/env_build_demo.py。
(注: paper 没有训练 14B; 外面有些文献写 "EnvScaler-8B / 14B" 其实是把 EnvScaler 当 baseline 跑在 Qwen3-14B 上)
- EnvScaler-191-Env — 191 个 env metadata
- EnvScaler-SFT-Scenario — 4.7K SFT scenario
- EnvScaler-RL-Scenario — 2.5K RL scenario
- EnvScaler-SFT-Traj-9K — 9K SFT trajectories
5.2 与 4 篇横向 5 项对比
| 维度 | EnvScaler (本篇) | AWM (#18) | Agent-World (#03) | SETA (#20) | Toolathlon-Gym |
|---|---|---|---|---|---|
| 团队 | RUC NLPIR | Snowflake AI Research | RUC + ByteDance | CAMEL-AI + Eigent.AI | Toolathlon (CMU+...) |
| 规模 | 191 env / ~7K task | 1,000 env / 10K task | 1,978 env / 33K task | ~400 task | (per-task Docker) |
| realism 来源 | LLM 反推 | LLM 生(seed scenario) | 真实 MCP registry | 真实 terminal CLI | 真实 MCP server |
| verifier | K 个 Python 函数 (LLM 生) | LLM-aug + code 混合 | auto unit-test + LLM-judge | RLVR rule + LLM-judge | per-task 自定义 |
| 训练值 | SFT + Reinforce++ | GRPO | SFT + GRPO + 多轮 self-evolve | AReaL GRPO | (主要 eval) |
| License | MIT(全开) | 全开源 | 部分开 | Apache 2.0 | Apache 2.0 |
| 权重发布 | 1.7B / 4B / 8B 全开 | 4B / 8B / 14B 全开 | 8B / 14B 开 | 8B 开 | 无(eval only) |
5.3 AWM 视角的 EnvScaler 对照(本系列 #18 § 4 自报)
AWM paper 把 EnvScaler 作为主要 baseline之一,他们的对比对 EnvScaler 是不太友善的:
| 指标 | EnvScaler | AWM | 来源 |
|---|---|---|---|
| LLM-judge Task Feasibility | 2.94 | 3.68 | AWM paper |
| Blocked tasks (code-only verify) | 46.8% | 11.5% | AWM paper |
"Blocked task" = verifier 永远不可能输出 True,无论 agent 怎么做。AWM 报 EnvScaler 在 code-only 验证下 46.8% 的 task 是 blocked(自家是 11.5%) —— 这是个挺尖的指控,但要谨慎理解: 这数字是 AWM 自己跑 EnvScaler 数据时算的,EnvScaler paper 没自报。可能性: (a) EnvScaler 实际跑训练时有 dual-agent 兜着,所以这个静态指标不是真实瓶颈; (b) AWM 选的评测协议对 EnvScaler 不利。但无论如何,它定位了"verifier 代码本身就是 LLM 生的"是 EnvScaler 范式的真痛点。
5.4 EnvScaler 作为 Agent-World baseline 的表现(#03 §4 自报)
Agent-World 把 EnvScaler-8B 拿来在自家 self-evolve 框架里跑("证明 self-evolve 范式无关 base model"),记下了 EnvScaler-8B 在三个 frontier benchmark 上的基线表现:
| EnvScaler-8B 基线 | τ²-Bench | BFCL V4 | MCP-Mark |
|---|---|---|---|
| base | 37.9 | 47.6 | 9.5 |
| +1 round self-evolve | 40.2 | 49.1 | 13.9 (+4.4) |
| +2 rounds | 41.6 | 50.0 | 15.1 |
注意这里的 BFCL V4 47.6 跟 EnvScaler 自报的 BFCL v3 Multi-Turn 41.88 不是同一指标。但 MCP-Mark 9.5 直观印证了 EnvScaler 范式的天花板 —— 合成 env 训出来的 agent 在真实 MCP server上几乎过不了关。这也正是 Agent-World 路线 (从真实 MCP 来的 env) 给自己留的差异化论据。
6 · 在 agent-env 生态里的定位
6.1 时间线 — EnvScaler 是这条路线的"开门人"
| 日期 | 论文 | 位置 |
|---|---|---|
| 2026-01-09 | EnvScaler v1 (本篇) | 程序化合成最早完整开源版本 |
| 2026-01 (CAMEL blog) | SETA | Docker per task (不同路线) |
| 2026-02 | MCP-Atlas | 纯 eval,真实 MCP |
| 2026-02 | AWM | 同路线,更大规模(1,000 env),更好 verifier |
| 2026-04 | Agent-World | 从真实 MCP 抓,把 EnvScaler 列为 baseline |
| 2026-04-17 | EnvScaler v2 | 反向更新,部分回应 AWM 的指控 |
6.2 设计哲学三角 — EnvScaler / AWM / Agent-World
6.3 它与 AWM 哪一面更近、哪一面更远
| 维度 | 更近 AWM | 更远 AWM |
|---|---|---|
| 哲学 | 都是"全合成 + code-driven" | |
| env 物理形态 | EnvScaler 用 Python class 一体化; AWM 用 SQLite + Python tool 解耦 | |
| verifier | 都用 LLM 生 Python 验证函数 | AWM 加了 LLM-judge 兜底,EnvScaler 没 |
| 质量门 | EnvScaler 自己设计了 dual-agent 100 轮 (本篇独有); AWM 靠 self-correct 循环 | |
| RL 算法 | EnvScaler 用 Reinforce++; AWM 用 GRPO | |
| 基座 | 都是 Qwen3-Thinking 系列 | EnvScaler 上限 8B,没训 14B; AWM 上限 14B |
| 开源 | 都开源 | EnvScaler 是 MIT,AWM 协议未细查 |
7 · 局限 / 个人 take
7.1 paper 自报的局限
- LLM 偏差: env 结构是 LLM 凭空生的,跟真实系统有 gap (paper 原话: "LLM-based construction may introduce biases versus real systems")
- 不支持 open env: web search / browser 类无法封装到 Python class 里
- 无 real-world noise: 网络延迟、API 限流、超时等 simulated 不出来
- 纯文本: 不支持多模态 tool
- scale 200 / 7K 已是 ceiling: paper 说"current scale limited to ~200 environments and 7K scenarios due to resource constraints"
7.2 我的额外 take
- 程序化合成的天花板: EnvScaler / AWM 都没能在 真实 benchmark(MCP-Mark, MCP-Universe)上做到 30%+,而 frontier model (Claude Opus 4.7 / GPT-5) 在这些 benchmark 上能到 70%+。说明"合成 env 的训练信号"和"真实工作流的能力需求"之间存在系统性 gap。这个 gap 不是 scale 191 → 1,000 → 10,000 能直接补上的 —— 训练 distribution 本身就偏。Agent-World 路线的存在意义,正是承认这个 gap 后选择硬磕真实分布。
- "程序"= Python class 是不是最优形态: 把 state 和 tool 塞进同一个 class 是编程优雅的,但工程上反模式: state 没有 schema 化,无法跨进程序列化,reset 要重新 instantiate。AWM 用 SQLite + 独立 tool function 看起来啰嗦,但跨进程 / checkpoint / reset 都更稳。等 RL pipeline 跑大规模并发时,EnvScaler 这套范式的 OPS 痛点会暴露。
- Dual-agent quality gate 的实证价值: 这是 EnvScaler 最有原创性的设计,值得后续工作 borrow。但 paper 没做一个"有 vs 无 dual-agent"的端到端 ablation —— 我们只知道它筛掉了 28.2% 的 env,但如果不筛,直接全 266 个 env 训会怎样?paper 没回答。这是该范式可推广性的关键空缺。
- EnvScaler-8B 自己作为 base model 的实用价值有多大: Agent-World 论文里 EnvScaler-8B 在 MCP-Mark 上 base 9.5,self-evolve 后 15.1 —— 这数字对工程产品而言用不了。更现实的用法: 把 EnvScaler 的数据集和 pipeline 当原材料(MIT 协议,191 env / 9K traj 都现成),而不要直接用它的模型 checkpoint。这跟 Agent-World 自己得出的"EnvScaler-8B 是个合格 base 但需后续 self-evolve"结论一致。
- vs SFT 的 RL 增量比较少 —— 是 Reinforce++ 的锅吗? 在 Qwen3-8B 上 SFT 已经吃了 62% 的 BFCL-MT 涨幅(8.12 / 13.00),RL 只贡献 38%。这个比例比 AWM (GRPO) 报的 RL 增量低,但 paper 没对比 Reinforce++ vs GRPO vs PPO。如果 RL 算法本身有改进空间,EnvScaler 当前数据下还能涨。
7.3 一句话立场
EnvScaler 是合成 env 这条线"论文以外的全套素材开源得最干净"的一篇 —— MIT + 9K trajectory + 191 env + 三档模型 + pipeline 代码 —— 论文里的数字反而不是它真正的贡献,数据+代码才是。当你需要在自家 8B Qwen 模型上加 tool-use 能力做 baseline 时,先克隆 EnvScaler repo 跑 demo,基本就能起个底。但不要相信合成 env 的训练就能推进真实 MCP 工作流的能力 —— 在 MCP-Mark / MCP-Universe 这些真实分布 benchmark 上,EnvScaler / AWM 都还在 10% 区段挣扎,真实 MCP 抓取的 Agent-World 才是这一波的赢家。
关联笔记: #03 Agent-World · #06 AgentGym-RL · #18 AWM · #19 MCP-Atlas · #20 SETA · #21 MCP Bench 横评