EnvScaler: Scaling Tool-Interactive Environments for LLM Agent via Programmatic Synthesis

人大 (RUC) Gaoling 高瓴 · Xiaoshuai Song, Haofei Chang, Guanting Dong, Yutao Zhu, Zhicheng Dou, Ji-Rong Wen · 2026-01-09 (v1) · 2026-04-17 (v2)
arXiv:2601.05808 · HTML v2 · GitHub: RUC-NLPIR/EnvScaler · HF: XXHStudyHard
关键词: tool-use agent · environment synthesis · Python class as env · dual-agent quality check · SFT + RL · Qwen3-Thinking

速读卡片 (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 走得更彻底。

191
合成 env 总数 (266 → 191,28.2% rejection)
~7K / ~9K
scenarios / SFT trajectories
Qwen3-Thinking 1.7B / 4B / 8B
基座三档,SFT + Reinforce++ RL
+13.0 / +12.5 / +6.6
Qwen3-8B SFT&RL 后 BFCL-MT / τ-Bench / ACEBench 涨幅

立场: 这是合成 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 当 simulatorSimulator-8B, GenEnv幻觉,transition 不一致 → RL signal 崩
③ 程序化合成 (本文路线)EnvScaler (本篇), AWM (#18), AgentScaler, AutoForge, WorldCoder脱离真实工作流,但确定性 + 可重置 + 可大规模并发
④ Docker per taskSETA (#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 重画成更直观的流程图:

EnvScaler · 程序化合成流水线 (双阶段) 阶段 A · SkelBuilder — 从 task 集反推 env 骨架 ① Topic Mining 已有 task set → LLM 反向推 env 主题/domain ② Logic Planning states / rules / tools 三件套 blueprint (自然语言) ③ Program Modeling blueprint → Python class state = attribute tool = method ④ Program Assembly AST 合法性验证 → 完整 .py 文件 → Σ_tool 接口集 ⑤ Dual-Agent 质量门 · 100 轮闭环 Tester · 调 tool 撒 task Checker · 看源码 / 返回 / state-diff 判合理性 .py ↘ reject 28.2% ↗ pass 191/266 阶段 B · ScenGenerator — 同一 env 上扩多个 scenario ① Init State LLM 生成具体 database/state 数据 (env 实例化) ② Task Generation 基于 init state + Σ_tool + rules 生成挑战 性 task 描述 ③ Validator Code task → K 个 check 每个 f_k^c(S_final) → True/False ④ Trajectory + Reward teacher 模型 rollout r = 1/K · Σ 通过 ∈ [0, 1] 部分信用 入库 · 191 envs · ~7K scenarios · ~9K SFT traj → 进入 SFT (140 envs) + RL (51 envs) 论文报价(GPT-4.1 / GPT-4.1-mini): · 每个 env: ~$1.02 · 每个 scenario: ~$0.064 → 全数据集成本约 ~$650 · Env 内统计: 平均 18.58 tools / 21.38 state categories / 4.58 rules
EnvScaler 的两阶段流水线: SkelBuilder 从 task 集反推出 env 骨架(Python class)并经 dual-agent 100 轮筛掉 28.2%; ScenGenerator 在同一 env 上扩出多个 scenario,每个 scenario 配套一个 K-check validator。reward = 通过 check 的比例,允许部分信用。

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 调用)
verifierK 个独立 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 traj1,000 env / 10K task / 35,062 tool1,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."

这种"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."
r = (1/K) · Σk=1..K 𝟙[fkc(Sfinal) = True]

这是个典型 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-Thinking 1.7B / 4B / 8B 三个 size(没有 14B)
教师: 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 MTACEBench-Agentτ-Bench
Qwen3-1.7BBase9.7512.5031.95
+SFT18.13 (+8.38)17.44 (+4.94)43.61 (+11.66)
+SFT&RL23.00 (+13.25)16.28 (+3.78)50.00 (+18.05)
Qwen3-4BBase25.3833.4455.28
+SFT34.88 (+9.50)38.20 (+4.76)66.67 (+11.39)
+SFT&RL38.00 (+12.62)41.06 (+7.62)70.55 (+15.27)
Qwen3-8BBase28.8838.1960.00
+SFT37.00 (+8.12)41.35 (+3.16)71.67 (+11.67)
+SFT&RL41.88 (+13.00)44.81 (+6.62)72.50 (+12.50)
对照 frontier
GPT-4.140.0057.4877.50
Qwen3-235B-Thinking45.7556.9074.17
Kimi-K2-Instruct45.8861.9479.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

HuggingFace 模型(3 个)

(注: paper 没有训练 14B; 外面有些文献写 "EnvScaler-8B / 14B" 其实是把 EnvScaler 当 baseline 跑在 Qwen3-14B 上)

HuggingFace 数据集(4 个)
可复现性自评: pipeline 代码 + 中间数据 + 最终权重三件套齐全; 想本地全量重建只需要一个 GPT-4.1/mini API key(全数据集约 $650)。这是本系列(#01–#22)所有 agent-env 类论文里复现门槛最低的一篇

5.2 与 4 篇横向 5 项对比

维度EnvScaler (本篇)AWM (#18)Agent-World (#03)SETA (#20)Toolathlon-Gym
团队RUC NLPIRSnowflake AI ResearchRUC + ByteDanceCAMEL-AI + Eigent.AIToolathlon (CMU+...)
规模191 env / ~7K task1,000 env / 10K task1,978 env / 33K task~400 task(per-task Docker)
realism 来源LLM 反推LLM 生(seed scenario)真实 MCP registry真实 terminal CLI真实 MCP server
verifierK 个 Python 函数
(LLM 生)
LLM-aug + code 混合auto unit-test + LLM-judgeRLVR rule + LLM-judgeper-task 自定义
训练值SFT + Reinforce++GRPOSFT + GRPO + 多轮 self-evolveAReaL GRPO(主要 eval)
LicenseMIT(全开)全开源部分开Apache 2.0Apache 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 是不太友善的:

指标EnvScalerAWM来源
LLM-judge Task Feasibility2.943.68AWM 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 基线τ²-BenchBFCL V4MCP-Mark
base37.947.69.5
+1 round self-evolve40.249.113.9 (+4.4)
+2 rounds41.650.015.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-09EnvScaler v1 (本篇)程序化合成最早完整开源版本
2026-01 (CAMEL blog)SETADocker per task (不同路线)
2026-02MCP-Atlas纯 eval,真实 MCP
2026-02AWM同路线,更大规模(1,000 env),更好 verifier
2026-04Agent-World从真实 MCP 抓,把 EnvScaler 列为 baseline
2026-04-17EnvScaler v2反向更新,部分回应 AWM 的指控

6.2 设计哲学三角 — EnvScaler / AWM / Agent-World

合成 env 三家设计哲学 EnvScaler 极简优雅 Python class = env dual-agent 100 轮筛 AWM 解耦稳健 SQLite + Python tool Agent-World 真实优先 真实 MCP 抓 + verify verifier 可靠性 ↑ 真实分布 ↑ scale / cost ↓ ↓ AWM 的 critique: verifier 不够稳 (blocked 46.8% vs 11.5%) ↑ EnvScaler 优势: cost 最低 ($650) + 开源最齐 三家共享痛点: MCP-Universe / MCP-Mark 等真实 bench 上还是 ~10%
三家在"verifier 可靠性 / 真实分布 / scale·cost" 三角上的取舍。EnvScaler 牺牲 verifier 稳健性换 cost 最低; AWM 稍贵但 verifier 加 LLM-judge 兜底; Agent-World 砸钱买真实分布。在真实 MCP-Universe / MCP-Mark 上三家都很拉胯,说明合成 env 类整条线在 ~10% 处碰到天花板。

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 自报的局限

7.2 我的额外 take

  1. 程序化合成的天花板: 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 后选择硬磕真实分布。
  2. "程序"= Python class 是不是最优形态: 把 state 和 tool 塞进同一个 class 是编程优雅的,但工程上反模式: state 没有 schema 化,无法跨进程序列化,reset 要重新 instantiate。AWM 用 SQLite + 独立 tool function 看起来啰嗦,但跨进程 / checkpoint / reset 都更稳。等 RL pipeline 跑大规模并发时,EnvScaler 这套范式的 OPS 痛点会暴露。
  3. Dual-agent quality gate 的实证价值: 这是 EnvScaler 最有原创性的设计,值得后续工作 borrow。但 paper 没做一个"有 vs 无 dual-agent"的端到端 ablation —— 我们只知道它筛掉了 28.2% 的 env,但如果不筛,直接全 266 个 env 训会怎样?paper 没回答。这是该范式可推广性的关键空缺。
  4. 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"结论一致。
  5. 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 横评