南洋理工Trace2Env:不重建系统,用历史记录造AI训练环境
你有没有想过这样一个场景:你想训练一个AI助手帮你操作某个企业内部系统,比如报销审批平台。但这个系统压根不对外开放,你没法天天拿真实环境去跑测试,更别提让AI在里面反复试错撞南墙。你手里唯一能用的,是一堆历史操作记录,谁点了什么按钮,系统弹出了什么提示,谁的操作失败了又是为什么。这堆记录能不能变成一个"假...
设想你要教一个AI助手操作某家公司的内部系统,比如报销审批平台。这套系统并不对外开放,没法天天拿真实环境做测试,更谈不上让AI在里面反复试错。手上唯一能用的,是一批历史操作记录:谁点了哪个按钮、系统弹了什么提示、谁的操作失败、失败的原因又是什么。
这些记录能不能拼出一个“假的但管用”的系统,供AI练手?
新加坡南洋理工大学团队在论文里处理的正是这个问题,他们给这套思路取名Trace2Env,即“轨迹到环境”:不靠训练,只凭历史交互记录就能搭起模拟环境的框架。
听着不难,但里面藏着一个一般人想不到的坑。
当“复刻系统”行不通的时候
以往碰到这类问题,研究者的第一反应往往是硬着头皮把系统重建出来。前面提到的Terminal-Universe项目走的就是这条路:把智能体留下的操作轨迹“逆向工程”成一个真能跑的终端工作空间。听起来很酷,问题也摆在那儿——底层依赖、接口协议,甚至一些没写进轨迹的隐藏逻辑,你都得知道。这就像凭朋友朋友圈里晒的几张照片,还原他家整套水电管线布局:大概样子能摸出来,真要照着施工,八成要出事。
Trace2Env团队换了个思路:系统本身不去重建,改由一个语言模型去“扮演”它。这个扮演者有个专门的名字,叫语言世界模型(Language World Model,简称LWM),指的是用语言模型预测“智能体做了某个动作后,环境会返回什么反馈”的技术,本质上是把环境的行为模式用自然语言学出来。
这个思路本身不新鲜,之前已有团队在做。Trace2Env的关键创新在于,它不满足于让一个模型“看一眼提示词就猜答案”,而是让扮演环境的模型变成真正的智能体:主动翻资料、查记忆、做推理,然后才给出反馈。
这就引出论文标题里最核心的那句话:能不能让一个智能体充当另一个智能体的环境?
问题到底难在哪里
你也许觉得,让AI模仿环境反馈,不就是个“看图说话”的任务?把历史记录给它看看,照着学一下格式不就行了?事情没这么简单。
论文里举了个特别扎心的例子:假如智能体执行了删除文件的操作,比如 `rm report.txt`。这个操作在终端里几乎不会有任何输出——敲完命令,啥反应都没有,直接跳到下一行提示符。
问题来了。三轮对话之后,如果智能体又输入 `cat report.txt` 想读这个文件,真实环境此时必须报错:“文件不存在”。“文件已经被删了”这个事实,在删除那一刻几乎没有任何信号透露出来,但它必须被悄悄记住,然后在后面某个时间点“兑现”。
这就是论文反复强调的长程状态一致性(Long-horizon state continuity):模拟环境必须记住早期动作造成的隐性后果,哪怕这个后果当时没有在观测里直接体现出来,也要在未来的某个时刻准确地“兑现”它。
要是你把所有历史对话一股脑塞进提示词,指望模型自己从几千字的文字堆里反应过来“这个文件三轮前被删了”,那就很危险。模型很可能读着读着就把这个细节漏掉了,然后在你问 `cat report.txt` 的时候,一本正经地编出一段文件内容。
真正最危险的失败,是那种“胡说得一本正经、后续对话还照样顺畅”的情况。表面上没报错,实际上整段交互已经跑偏了。
打个比方:你问记性不太好的同事,上周三说的那份报告删了没。他老实回答“不记得,我查一下”,问题不大。可他要是为了显得可靠,随口来一句“删了删了,没事”,你后面真按“报告不存在”去安排事情,等哪天发现报告还躺在服务器上,整个流程就乱了套。“假装记得”比“老实说不记得”危险得多。
传统做法常在这里翻车:把环境知识和交互历史全塞进一个固定提示词里,指望模型读一遍就能抓住所有该记的细节。
### 把“环境的说明书”拆成三层知识
Trace2Env的思路,是先把大量历史轨迹“蒸馏”成一本结构化的参考书。论文给它起的名字是
**世界书**
*Worldbook:环境知识库,在离线构建阶段从历史轨迹里提炼而成,由三部分组成:动作接口的定义、具体的观测证据,以及从这些证据里归纳出的行为规则*
它更像一本“行为说明书”,而不是能直接跑的代码。全书分三个层次。
第一层叫
**模式**
*Schema:它规定这套环境能接受哪些动作、每个动作要带什么参数,也规定环境内部可以追踪哪些状态变量,等于把整个系统的骨架画了出来*
拿终端环境来说,模式会规定“文件系统”这个状态字段存在、类型是什么、谁有权改它;也会列出 `cat`、`ls`、`pip install` 各自要什么参数。这一层先把游乐场的地图摊开,告诉AI里面有哪些“积木”可用。
第二层叫
**接地证据**
*Grounded evidence:从历史轨迹中直接留存下来的具体操作记录,涵盖动作、真实的观测结果,以及从中提取的候选状态变化;这些证据的原始观测文本会逐字保留*
原始观测为什么必须逐字留?规则和总结难免丢信息。论文里有个典型例子:智能体执行了一条用heredoc写长脚本的命令(heredoc是让终端连续输入多行文本的技巧),真实终端会打出一种特殊的续行提示符,每行前面带个 `>`。只用抽象规则去描述,这种细枝末节的格式很容易漏;把原始记录完整留着,细节就跑不掉。
第三层叫
**归纳知识**
*Induced knowledge:从多条证据中归纳出的、可反复使用的规律,涵盖条件触发的效果、状态约束、观测格式的“契约”,还包括一些零散却重要的环境惯例*
这一层才算真正的“抽象升级”。比如对比多次成功和失败之后,系统可能总结出一条:“手里已经拿着东西时,再去拿一件物品,这个动作不会产生任何效果。”规则一旦被验证支持,就能反复套到新场景,不必每次回头翻原始记录。
三层知识叠起来,就是一本完整的“环境说明书”。而且每条规则、每条证据都带着
**溯源**
*Provenance:它记下每一条归纳规则或证据出自哪条历史轨迹、第几轮对话,系统因而能随时回溯,检查某个判断的依据靠不靠得住*
这就像去图书馆查资料:好的学术著作不会只丢结论,还会标出引用来源。你怀疑某个说法,顺着脚注就能找到原始文献,不用干瞪眼。少了这层溯源,系统归纳出的规则就成了“黑箱断言”,出了错都找不着源头。
### 让“扮演环境”的AI真正像个侦探一样工作
手里有说明书还不够,关键看怎么用。
Trace2Env设计了一个
世界模型智能体是这套系统里的关键角色。
它专门负责“扮演环境”,并非被动接收提示词然后给出答案,而是会主动调用工具查资料、翻记忆、测试效果,之后才给出最终反馈。
这个智能体手上配了一组工具,能列出全部已知动作、查某个动作对应的规则、全文搜索知识库、读取原始证据的具体内容、查看当前状态,甚至可以对某条规则做一次“空跑”看看效果。整套做法有点像新员工上岗前不把全公司规章打印出来让他硬背,而是给一个内部检索系统,碰到具体问题现场查、现场验证。
硬背的毛病在哪?把所有知识一次性塞进提示词,模型容易被无关信息淹没,真正该盯的细节反倒被冲淡。改成按需查询,等于把“记忆负担”换成了“检索能力”,长程任务里这一点尤其要紧。毕竟没人能把一本说明书倒背如流,但好的检索习惯能在需要时精准定位。
这里还埋了一个挺巧的设计,叫
适用性门控。
它的作用是给每一条从历史证据里检索出来的信息打标签,分清这条信息是可以直接套用的“支持型”证据,还是只能参考格式、不能照抄具体内容的“仅供格式参考”证据。
为什么要分这么细?历史轨迹来自别的任务场景,那些场景里的文件名、具体数值、路径,跟当前这局模拟任务毫无关系。不做区分的话,模型很容易把A任务里的文件名张冠李戴搬到B任务里。好比你去问一位修过很多台不同型号冰箱的师傅“我这台冰箱该怎么修”,他能告诉你“这类故障一般按这个流程检修”(格式参考),但绝不会说“上次我修的那台压缩机型号是XX”(具体内容),那是上一台冰箱的事,型号对不上,照抄只会越修越坏。
靠这套机制,世界模型智能体最后会产出一个
转移提案。
这是它对当前这一步“接下来会发生什么”的完整预判,涵盖状态会有哪些具体变化,以及环境会返回什么样的观测文本。
提案不会直接生效,得先过一道
验证闸门。
这道闸门由一套固定的校验代码把关,检查提案里的状态变化是否符合模式定义、有没有证据支持、是否违反已知的约束条件,只有通过检查的提案才会被真正提交。
这道闸门很关键,相当于给AI的“脑补”上了一道保险。假如提案说“我把文件改名了”,可状态变量里压根没有这个文件的记录,闸门就会拦下这次提交,退回去用一个“什么都没发生”的保守方案兜底。
把“知道什么”和“记得什么”分开存
Trace2Env还有一处很细腻的设计:把“跨场景通用的知识”和“这一局模拟里特有的事实”严格分开储存。
论文对此的解释很直白:世界书保存的是其他模拟任务里的通用行为知识,比如“猫看文件时会显示成什么终端格式”,可它不能让人以为“当前这个新开的模拟局里也存在该文件”。另一边,当前局中由智能体临时新建的文件,就算历史轨迹里从未出现过,也得被准确追踪到。
于是系统维护了一个
持久化episode工作空间。
它包含三块内容:固定不变的世界书、随着当前这局交互不断变化的状态记录,以及记录这一局里发生过什么的episode记忆。
这三样东西的存续方式各不相同:世界书相当于出厂配置,始终不动;状态记录是本局游戏运行过程中的实时存档;episode记忆则完整录下这一局的全过程。
这种思路很像你去新公司上班的头一天。公司的规章制度(世界书)是固定的,不会因为你今天加入就改变;你今天具体负责的项目进度(状态记录)随时在变;你今天跟谁开了会、聊了什么(episode记忆)则独属于你这一天,换个人入职,这段记忆完全不共享。三者混为一谈,比如把“公司规章”和“我今天的会议记录”揣进同一个文件夹不加区分,用的时候就很容易张冠李戴,把别人经历过的事错认成制度规定。
论文特别强调,状态记录是“有意保留不完整”的。某个字段没被记录过,系统会把它标成“未知”而不是“不存在”。这个细节看着微小,却避开了一个很严重的逻辑错误:缺失不等于否定。你没查到某个文件的记录,不代表这个文件一定不存在,它可能只是还没被观测过而已。
光设计思路漂亮没用,考试结果才算数。九个环境,两套考法,成绩单到底写了什么?
研究团队把测试铺在九个不同环境里:终端操作、软件开发、安卓应用、网页浏览都在其中,另有饮食管理、购物、员工福利平台,以及ALFWorld和SciWorld这两个经典文本交互游戏环境。
考试分两种。第一种叫
**单步下一观测预测**
*Next-observation prediction:给定历史交互前缀和当前要执行的动作,让模拟环境预测下一步会返回什么样的观测结果,然后用格式、事实性、一致性、真实感、整体质量这五个维度打分*
这套考法里,Trace2Env对上最朴素的直接提示方法(论文里叫Direct Prompting),骨干模型换成GPT-5.6-Sol时平均分从69.51升到
**75.94**
骨干模型换成DeepSeek-V4.1-Flash,平均分则从68.71升到
**75.75**
这个提升并非靠某一项指标硬撑。论文特意点明,事实性和一致性这两个维度,在全部十四种环境和模型组合里全部有提升,无一例外。
第二种考试更有意思,叫
**多轮交互一致性**
*Multi-turn interaction consistency:让一个任务智能体先在真实环境里完整跑一遍任务,再在模拟环境里跑一遍,然后把模拟环境里生成的那套动作,原封不动地拿到真实环境里重新执行一遍,看看成功率能保留多少*
这里引出一个关键指标,叫
**一致性比率**
*Consistency ratio,简称CR:用“模拟环境里的动作拿回真实环境执行的成功率”除以“直接在真实环境里跑的成功率”,这个值越接近1,说明模拟环境越靠得住*
结果出人意料。ALFWorld环境里,Direct Prompting方法在模拟环境里自己跑的成功率高达97%,看着很完美对不对?可把这批动作原封不动拿到真实环境里重跑,成功率骤降到只有
**3%**
CR值只有0.032。
Trace2Env在模拟环境里的自评成功率反倒略低一些,只有88%,但真实环境重跑的成功率高达
**85%**
CR值是0.914,几乎是前者的三十倍。
这组数据揪心的地方在于,它揭示了一个很容易被忽略的陷阱:模拟环境里跑得好看,不代表它真的靠得住。
模拟环境里好看的成绩,并不等于它真的靠得住。
一次没做成的放置动作,把整件事的来龙去脉带了出来。
论文里举了个很能说明问题的例子:任务要求找两个纸巾盒,搁到咖啡桌上。
智能体走到某一步时,发出了一个真实 ALFWorld 根本不支持的放置指令。真实环境对此的回应是“什么都没发生”。可换成 Direct Prompting 的模拟环境,却张口就来了一句“你把纸巾盒2放到咖啡桌1上了”,等于把一个从没真正发生过的动作认了下来。
有了这个假前提,智能体接着往下走,又去取第二个纸巾盒,再往桌上放,模拟环境随即判定任务完成。看上去挺顺,是不是?
可把这套动作原样搬到真实环境重跑,情况就变了:第一次放置照样什么都没发生,纸巾盒2其实还攥在智能体手里,压根没上桌。后面一连串操作全建立在一个错前提上,最终奖励是 0,任务彻底失败。
同样的失败动作,Trace2Env 又是怎么接的?它准确预判了“什么都没发生”,持久化状态也如实记着纸巾盒2还在智能体的背包里。智能体之后查库存,系统老老实实告诉它“你还拿着纸巾盒2呢”,还通过帮助菜单亮出一个真实可用的 `move` 命令。顺着这条线索,智能体把自己的策略纠正了过来,用对的命令把任务做完,真实环境重跑结果完全对得上,拿到满分奖励。
这个案例的意义,不在于“Trace2Env 猜对了一次反馈”,而在于它跑通了一整条链路:局部预测准了,状态追踪能持久化,世界书里又存着失败场景的处理知识,三样凑齐,智能体才真能从错误里爬出来,而不是踩着错误越走越远。
好比开车用导航,靠谱的系统不光在你走错那一刻提醒“此路不通”,还得记住你眼下实际停在哪个路口,再按真实位置重新规划路线,而不是假装你已经按原计划到了目的地,继续播报下一段早就作废的路线。要是导航为了让界面看着顺,硬说你走对了,那你接下来的每一步指引都建在谎话上,只会越走越偏。
拆开来看,到底哪一部分在真正起作用
研究团队做了一串消融实验,想搞清楚起作用的究竟是世界书,还是智能体主动查询的行为,抑或两样缺一不可。
在 Terminal 环境的实验里,他们把世界书拆成“归纳知识”(规则、契约、注释)和“接地证据”(具体观测记录和示范案例)两块,分开测。结果是:只加证据,提升很明显,涨了 +2.45 分;只加归纳知识,效果反倒比只用模式定义时略降,掉了 1.12 分。
这个结果乍看有点反常——总结出来的规则,怎么还帮了倒忙?
论文的解释是:归纳知识一旦没了具体证据托底,就容易变成空泛的抽象规则,模型拿着这些规则却没有案例去校准,场景一换就容易用错。可一旦把归纳知识和具体证据搭着用,效果马上翻过来:在证据之上再叠归纳知识,又能多涨 0.69 分;反过来在归纳知识之上叠证据,涨幅更大,达到 4.26 分。完整的世界书两层都用上,效果最好。
这个发现挺有启发。它说明“抽象规则”和“具体案例”不是谁主谁次,而是互相校验、互相支撑。规则告诉你“大概是这样”,证据告诉你“具体长这样”。只有规则没有案例,好比只背法条没读过判例,真碰上具体情况就容易生搬硬套;只有案例没有规则,又容易死记硬背,场景稍一变就懵。
另外,团队还分别测了去掉“自适应查询循环”和去掉“状态追踪”会怎样。去掉自适应循环,分数掉 1.79 分;去掉状态追踪,掉 0.97 分。两者都有贡献,但自适应查询循环的份量更重,这也印证了前面那句话——“按需检索”这个机制本身的价值,确实比单纯“把所有东西塞进提示词”更要紧。
要用多少条历史轨迹才够
还有个很实际的问题:搭这套世界书,究竟需要多少条历史轨迹?
论文做了轨迹数量的扫描实验,在 Terminal 环境上从 5 条一路加到 36 条构建轨迹。结果是:5 到 15 条时效果还不太稳,忽高忽低;从 20 条起稳步往上爬,到 36 条时分数达到 66.42,而且曲线到 36 条还在往上走,说明轨迹要是更多,效果应该还能继续涨。
代价也跟着涨。构建世界书的一次性成本大致随轨迹数量线性增加。算上性价比,团队最后把 20 条轨迹定为 Terminal 环境的默认配置,当作效果和成本之间的平衡点。
这个取舍很现实。不是轨迹越多就一味堆数量,而是要在“效果还能不能明显提升”和“构建成本值不值得”之间找个落脚点。就像囤货,囤十斤米能撑一个月,囤一百斤理论上是能撑更久,可仓库租金、腐坏风险都在涨,到底囤多少合适,得算账。
跨任务时到底管不管用
还有个关键问题:Trace2Env 的提升,会不会只是因为评测任务刚好跟构建世界书用的轨迹“撞脸”了?要是世界书见过的任务和评测任务是同一批,那提升可能只是死记硬背,并没学到能泛化的知识。
团队专门按“是否与构建轨迹任务重合”把评测数据分了层来测。结果显示,在 Web 和 SWE 环境上,哪怕评测任务跟构建轨迹完全不重合,提升依然清清楚楚;在 Terminal 环境上,GPT 骨干模型下这个模式依然清晰,DeepSeek 骨干模型下则略弱一些。
这说明世界书归纳出的知识确实能跨任务迁移,不是单纯记住了某几个具体任务的答案。不过论文也坦白指出,当评测任务跟构建轨迹里的任务确有关联覆盖时,效果还会再往上走——比如 Terminal 环境里,任务刚好在构建集里出现过的那些评测样本,提升幅度能到 17.86 分,远远超过没有重合那部分的 3.69 分。
换句话说,世界书有两样本事:一是把不同场景里通用的规律提炼出来,二是碰上相近任务时能匹配得更准。这两样本事并不冲突,是叠在一块儿起作用的。
Q&A
Q1:Trace2Env究竟解决了哪类难题?
A:遇到某个真实系统没法直接访问、也没法复现的情况,比如某家企业自己的内部软件或终端环境,Trace2Env可以拿历史交互记录搭出一个模拟该系统行为的"假环境"。AI智能体在这个模拟环境里就能训练和测试,不必去碰真实系统本身。
Q2:历史记录直接丢给AI当提示词,跟Trace2Env的做法差在哪?
A:差别不小。提示词一股脑堆上去,AI在长程交互里容易忘掉早先动作留下的隐性后果——文件删掉时没马上报错,可后面再查询就会报错。Trace2Env的做法是把知识整理成结构化的世界书,让AI主动去查,再用独立的状态记录跟踪变化。实验显示,这样生成的动作序列拿回真实环境重跑,成功保留率从3%提升到85%以上。
Q3:这套方法要不要重新训练AI模型?
A:不用。Trace2Env是一套学习无需训练的框架,模型参数一点不动。它在离线阶段把历史轨迹整理成结构化的世界书,运行时让现成的语言模型通过工具调用去查询、去推理,因此能直接套到不同的模型骨干上。