Amazon发布Turnstile:在智能体交互中捕获token ID以改进强化学习
Turnstile是一个用Rust编写的小型代理,位于智能体框架与推理后端之间,记录生成时刻的精确token级历史,用于更可靠的RL训练。
AI解读:强化学习训练语言模型完成多步任务时,需要一个精确的记录:模型到底生成了哪些token,而不是一份看起来完整但可能丢失细节的文本记录。Amazon Science发布的Turnstile是一个用Rust编写的小型代理,它放在智能体框架(如OpenHands)和推理后端之间,在生成那一刻捕获token ID、对数概率、损失掩码和权重版本边界。这解决了训练数据不准确的问题——比如框架重写上下文、tokenizer的细微格式变化,或混合专家模型中的路由差异,都可能导致训练信号退化。对使用RL训练智能体(如编码或计算机操作代理)的开发者来说,Turnstile允许他们不改动现有框架,就能获得训练所需的精确数据;内部闭环的专有框架也可以黑盒方式接入。目前Turnstile支持SGLang后端,vLLM后端在计划中,并提供Python绑定,但尚处早期阶段,未来会扩展更多训练框架适配器和多模态模型支持。
Amazon Science今日发布Turnstile——一个用Rust编写的小型代理,位于任何智能体框架(harness)与运行模型的推理后端之间。Turnstile在生成发生的时刻记录每个请求的精确token级历史,并导出框架无关的轨迹,可直接接入现有RL训练栈。
Turnstile解决的问题:文本转录可能掩盖token级差异
强化学习(RL)中,模型被包装在称为harness的软件中,以调用工具、观察结果并决定下一步行动。为了用RL改进模型,需要让模型在harness中尝试许多任务,根据每次尝试的得分调整参数。挑战在于记录:要将得分转化为参数更新,训练器需要模型实际生成内容的精确记录,而非摘要或看似完整但遗漏关键信息的转录。
模型内部将文本视为编号单元序列,即token;每个token由tokenizer分配整数ID。两个在转录中看似相同的字符串,经过格式微调后可能映射到不同的token ID,这种差异足以让训练器针对与模型实际经历的略有不同的过去进行优化。tokenizer是不可妥协的:多余的空格、工具调用JSON格式的变化或聊天模板的差异都可能改变token ID,即使渲染出的文本对人类看起来相同。
智能体harness会加剧此问题:在单次rollout中,harness可能压缩较旧消息以节省上下文、重试格式错误的工具调用、分支到子代理或合并历史。每次重写都可能使下一请求的token序列偏离模型上一轮实际生成的内容。harness产生的转录是对话的忠实记录,但通常不是token的忠实记录,而训练器需要的是token。
Turnstile的设计:在代理边界捕获token,而非事后重建
Turnstile的核心设计选择是在生成时刻捕获token状态,而不是在rollout结束后从文本重建。代理使用标准的OpenAI Chat Completions API——事实上的智能体框架标准接口。harness通过Turnstile创建rollout组,将其Chat Completions客户端指向Turnstile地址而非真实后端,其余运行不变。每个请求流经Turnstile到推理后端(目前为SGLang,vLLM计划中),记录模型采样的精确token ID、每个token的对数概率(模型置信度,训练器计算更新所需),以及一个损失掩码,标记哪些token由模型生成(参与训练)与哪些来自用户、工具或系统提示(不参与)。
当rollout完成时,harness向Turnstile请求记录的轨迹。每个轨迹是包含token ID、对数概率、全序列损失掩码和权重版本边界的TrainingSequence对象(训练器需要后者以了解模型参数是否因异步更新而中途改变)。适配器将其转换为训练器期望的批次形状:附加奖励、扩展掩码并交接即可。
- 代理(如OpenHands、Codex、Terminus)无需修改即可作为黑盒,不记录训练数据。
- Turnstile将多轮rollout存储为单个增长的token路径——如果新请求在token级别是前一个请求的忠实扩展,则合并;否则开始新序列,确保训练token串确实是行为策略所见的。
- 当启用MoE捕获时,Turnstile从推理后端请求路由跟踪并记录;若共享前缀的路由不匹配,则分割轨迹。
- 对于多模态输入,Turnstile将图像处理作为rollout的一部分,记录原始字节及处理后的像素特征,与token ID一同导出。
验证与未来方向
Amazon Science报告了真实RL训练运行中的验证:一个纯文本编码代理和一个多模态计算机使用代理在RL运行中持续改进。纯文本示例使用Qwen3-1.7B在MBPP数据集上通过OpenHands训练;多模态示例使用Qwen3-VL-8B在OSWorld计算机使用任务上,由PromptAgent驱动,平均奖励从约0.2升至约0.71,约165个rollout步骤。两个场景中harness保持未修改,Turnstile数据直接流入训练栈,产生了预期的学习信号。
Turnstile处于早期阶段,当前实现包括Rust核心、SGLang后端、用于进程内训练脚本的Python绑定、前缀感知多轮捕获、可选的MoE路由捕获和多模态支持。近期工作包括vLLM后端、更多训练框架适配器和多模态模型覆盖。长期目标是使harness无需成为RL数据管道。
Turnstile已在GitHub上可用。相关参考包括OSWorld、OpenHands、THUDM/slime、Prime Intellect渲染器、prime-rl算法、Polar、NVIDIA-NeMo/ProRL-Agent-Server等。