我把 Qwen 的「世界模型」塞进了 LlamaFactory,然后它教会了 AI 预知未来

0 阅读14分钟

上周二晚上刷 GitHub trending 的时候,看到 Qwen 发了个新项目。

名字叫 Qwen-AgentWorld。

点进去看了一眼,我整个人愣了好一会儿。

不是因为这是个新模型,而是因为这个模型做的事情,跟所有现有模型都不一样

它不是聊天模型。不是推理模型。不是代码模型。不是 Agent 模型。

它是一个 Language World Model,语言世界模型

翻译成大白话就是,你给它一个智能体的当前状态和一个动作,它会预测环境下一步会返回什么

你给它「在 Terminal 里敲了 ls」,它告诉你终端会输出什么。你给它「搜索了某个关键词」,它告诉你搜索引擎会返回哪几条结果、URL 长什么样、排名怎么排。你给它「在 Android 上点击了某个按钮」,它告诉你 UI 层级树会怎么变。

它在模拟世界。

看完之后我第一个念头就是,这东西能不能在 LlamaFactory 里直接跑起来?

于是我提了个 PR。


一个只有 13 行的 PR

PR #10615 在 LlamaFactory 里做的事情,非常非常简单。

就是在 constants.py 里加了一个模型注册:

# Qwen-AgentWorld,基于 Qwen3.5-35B-A3B 构建的语言世界模型
# MoE 架构,总参数 35B,激活参数仅 3B,支持 256K 上下文
# 参考仓库,https,//github.com/QwenLM/Qwen-AgentWorld
register_model_group(
    models={
        # 模型名称,后缀 -Thinking 会自动绑定推理模板
        "Qwen-AgentWorld-35B-A3B-Thinking", {
            # 支持 HuggingFace 和 ModelScope 两个下载源
            DownloadSource.DEFAULT, "Qwen/Qwen-AgentWorld-35B-A3B",
            DownloadSource.MODELSCOPE, "Qwen/Qwen-AgentWorld-35B-A3B",
        },
    },
    # 复用已有的 qwen3 聊天模板,推理时用 --reasoning-parser qwen3
    # 不需要新增模板,因为模型共享 Qwen3 的标准聊天格式
    template="qwen3",
)

13 行代码,加了一个模型。

但你想想,这 13 行代码背后是什么?

它意味着你现在可以在 LlamaFactory 里,一键微调一个能模拟七个智能体交互领域的 AI 世界模型。

而且最离谱的是,它只有 3B 激活参数。3B。我笔记本上的 GPU 都能跑。

但这还不是最让我震撼的。

最让我震撼的是,我仔细读了一遍论文之后发现,这个模型在模拟环境这件事上,干掉了 GPT-5.4


什么是语言世界模型?AI 学会了「预知未来」

在往下聊之前,我得先把「语言世界模型」这个概念讲清楚。

你想想传统的 AI 模型是怎么训练的。

大语言模型,训练目标是「预测下一个 token」。你给它前半句话,它预测后半句。

Agent 模型,训练目标是「给定状态,选择正确的动作」。你给它一个环境状态,它决定下一步该做什么。

但没有任何一个语言模型,被训练成去预测「环境接下来会怎样」。

这就是 Qwen-AgentWorld 做的事情。

它的训练目标是一个数学公式,论文里是这么写的。

o^t+1=fθ(c,ot,at)\hat{o}_{t+1} = f_\theta(c, o_{\leq t}, a_{\leq t})

每一项拆开来看。

  • o^t+1\hat{o}_{t+1},模型预测的第 t+1t+1 轮环境观察。比如终端输出了什么、搜索引擎返回了什么结果、UI 界面变成了什么样子。
  • fθf_\theta,参数为 θ\theta 的语言世界模型。就是你训练出来的这个模型本身。
  • cc,系统提示词。包含五个组件,任务描述(告诉模型你现在在模拟什么环境)、动作空间(你可以用什么工具)、初始状态(环境一开始是什么样)、演示样例(给几个少样本示例)、模拟指令(可控模拟条件,比如「隐藏搜索结果中的答案」)。
  • oto_{\leq t},截止到第 tt 轮的完整交互历史。所有的环境观察记录。
  • ata_{\leq t},截止到第 tt 轮的所有智能体动作。

训练的目标很简单,让预测的 o^t+1\hat{o}_{t+1} 尽可能接近真实环境中的 ot+1o_{t+1}

你想想这有多难。

不是「写一首诗」或「翻译一段话」那种开放式的生成。是精确预测,预测一个真实的、有状态的、因果关系复杂的环境在接收到某个动作之后的确切反应

如果你在 Terminal 里先 cd /tmptouch a.txtls,模型必须输出 a.txt 出现在文件列表中。它不能输出 b.txt,不能输出「文件夹是空的」,必须是对的。

这就是世界模型。

而且 Qwen 把它做成了原生的。不是在一个通用 LLM 上面贴一层皮,而是从预训练阶段就把环境建模当作训练目标。


七个领域,一个模型

Qwen-AgentWorld 覆盖了七个智能体交互领域,在一个模型里。

文本领域(4 个)

领域模拟什么典型预测
Terminal命令行环境,shell 输出、文件系统状态、进程行为多步命令管道的完整输出
Search搜索引擎结果,URL、摘要、排名、页面内容真实的 URL 标识符和源排序
MCPAPI 服务器响应,工具调用结果、数据库状态跨 9 次连续 Notion API 调用的模式一致性
SWEIDE/代码编辑环境,git diff、测试结果、编译错误代码修改后的文件状态和测试输出

GUI 领域(3 个)

领域模拟什么典型预测
Web浏览器 DOM 状态变化HTML + 无障碍树更新
Android触摸/手势后的 UI 层级变化UI 层级 XML 标记
OS桌面操作系统状态,文件系统、窗口管理无障碍树 XML 更新

等等,你说 GUI?一个纯文本模型怎么模拟 GUI?

这个问题问得好。论文里的做法非常聪明:三个 GUI 领域的环境观察不是像素帧,而是可渲染代码。无障碍树 XML、HTML、UI 层级标记。这些东西是以文本形式存在的,一个语言模型完全可以处理。

这就是为什么 Qwen-AgentWorld 能在 3B 激活参数下覆盖 GUI 领域。它不处理像素,它处理结构化的文本表示。


三阶段训练,CPT → SFT → RL

论文里把训练管道总结成一句话:CPT injects, SFT activates, RL sharpens

CPT 注入环境知识,SFT 激活下一状态预测推理,RL 精炼模拟保真度。

我一个个拆开讲。

Stage 1,CPT(持续预训练),注入环境知识

这一步的数据来自三个渠道:

  1. 专用智能体基础设施,部署了容器化执行沙箱、MCP 服务器、持久终端会话、Android/浏览器/桌面 OS 环境,自动合成任务查询让智能体执行,收集真实交互轨迹。
  2. 开放环境交互痕迹,公开的终端会话录制、开源智能体工具调用日志、代码仓库执行痕迹。
  3. 专门领域世界知识语料,工业控制、网络安全、法律、医疗、金融、时事百科。 这个很重要。如果你要模拟一个医疗信息系统,模型得先知道医院是怎么运转的。如果你要模拟法律法规合规平台,模型得懂法律。纯靠环境轨迹学不到这些事实性的世界知识。

总量超过一千万条真实环境交互轨迹。

但这里有一个非常巧妙的设计,叫轮次级信息论损失掩码

什么意思呢?

在多轮环境交互中,有很多轮次是样板式的。比如你调了一个 API,API 把你的请求参数直接回显了。这种轮次几乎没信息量,对训练来说就是噪声。

论文设计了四个统计量来量化每个轮次的信息量:

统计量公式含义
OL (Overlap)$\frac{W_{act} \cap W_{obs}}{W_{act}}$观察回显了多少动作词汇,越高越样板化
Nov (Novelty)$\frac{W_{obs} \setminus W_{act}}{W_{obs}}$观察中真正新信息的比例,越高越有价值
Jac (Jaccard)$\frac{W_{act} \cap W_{obs}}{W_{act} \cup W_{obs}}$对称词集相似度
R (Length ratio)$\frac{\text{obs}}{\text{act}}$字符级观察/动作长度比

基于这四个统计量,每个轮次被分配到七个语义类别之一,不同类别有不同的保留比例:

# 轮次分类与损失保留策略
# retrieval,nov >= 0.6 and R > 1,典型场景 read_file 返回内容
# keep_ratio = 1.0(完全保留)
# expansion,ol >= 0.5 and nov >= 0.5 and R > 1.5,典型场景 fetch 返回页面+元数据
# keep_ratio = 1.0(完全保留)
# action,nov >= 0.5 and R <= 1,典型场景 send_email 返回 "sent"
# keep_ratio = 1.0(完全保留)
# transform,nov < 0.5 and R < 1,典型场景 长输入 → 简短状态词
# keep_ratio = 0.5(保留一半)
# boilerplate,ol >= 0.5 and nov < 0.5,典型场景 API 回显
# keep_ratio = 0.1(仅保留 10%)
# echo,ol >= 0.7 and nov < 0.3,典型场景 think(x) → {thought, x}
# keep_ratio = 0.05(几乎完全掩码)
# other,未分类轮次
# keep_ratio = 1.0(保留)

被掩码的轮次从损失计算中排除,但它们的 token 仍作为后续轮次的上下文保留。

这个设计的精妙之处在于,它解耦了「学习下一状态」和「学习下一 token」。模型不会浪费算力去学习「把输入回显一遍」这种毫无意义的模式,但它仍然保留了这些轮次作为上下文,让模型知道之前发生了什么。

Stage 2,SFT(监督微调),激活推理

CPT 阶段模型是没有思考痕迹的,直接输出环境观察。

SFT 阶段的目标是让模型在 <think>......</think> 块里显式推理「下一步应该是什么样的」。

论文用了拒绝采样来筛选高质量推理轨迹:

  • 对每个查询,从通用推理模型生成 3 个 rollout
  • 独立评判模型两两比较,选最高质量的
  • 如果获胜轨迹的分数低于最低阈值,整条查询丢弃

最终筛出了 7,094 条高质量 SFT 样本。筛掉了将近 30% 的候选。

Stage 3,RL(强化学习),精炼保真度

这一步是整个训练管道最核心的一环。

奖励设计

RL 的奖励来自两种互补信号,按 9:1 的比例混合:

reward=0.9×rubric_score+0.1×rule_score\text{reward} = 0.9 \times \text{rubric\_score} + 0.1 \times \text{rule\_score}

其中:

  • rubric_score:LLM 评判在五个维度上评分(1-5 分制),取均值后缩放到 [5, 25]。五个维度分别是格式(Format)、事实性(Factuality)、一致性(Consistency)、真实性(Realism)、质量(Quality)。
  • rule_score:基于规则的验证器,产出一值 0/1 正确性信号,缩放到 [0, 25]。

为什么需要规则验证器?

因为 LLM 评判再强也是主观的。尤其在环境模拟这种开放式任务里,评判模型很容易被预测观察的表面合理性骗过去。比如模型在输出里嵌了一句「operation completed successfully」,评判可能就觉得不错然后打高分,但实际上文件内容完全错了。

规则验证器是一个客观锚点。它不看文采,不看表面合理性,只看对不对。二值信号,对就是对,错就是错。 这个锚点有效缓解了「奖励黑客」行为。

训练稳定性

论文里还提到了三种 RL 训练中的失败模式,每一种都很有意思:

  1. 多轮展开导致的奖励坍塌:如果一条轨迹展开成多个训练样本,这些样本共享同一个长前缀,训练会快速坍塌。解决方案很简单,每条轨迹只保留一个轮次作为训练样本。

  2. 奖励塑造失败:论文试了两种常见的奖励设计都没用。Reference-Reward(给评判看真实观察做 A/B 测试)收敛太慢。Turing-Test Reward(问评判「这个能通过图灵测试吗」)几乎不收敛,因为假阴性率太高。

  3. 自赞奖励黑客:模型学会在预测里嵌入自赞短语来提高分数。解决方案是内容类型分类+规则锚定+严格标签提取,确保思考块从不暴露给评判。

这些工程细节才是真正「做过的人才知道」的东西。


AgentWorldBench,评估语言世界模型的全新基准

怎么评估一个世界模型好不好?

论文做了个全新的基准,叫 AgentWorldBench

构建原则很有意思:

  1. 所有任务查询来自已有的高质量智能体基准(Terminal-Bench、Tool Decathlon、OSWorld 等 9 个),不自建任务
  2. 所有轨迹由前沿模型智能体生成,不是人写的
  3. 每条轨迹配有真实环境中执行得到的 ground-truth 观察
  4. 训练数据和基准查询在数据源级别分区,测试泛化能力

最终产生了 2,170 个评估样本,覆盖 7 个领域,平均上下文长度从 Terminal 的 12,900 到 MCP 的 59,300 token。

评估方式很精细,五个维度:

  • 格式 (Format):输出是否遵守领域的结构约定
  • 事实性 (Factuality):陈述的事实是否正确
  • 一致性 (Consistency):与历史交互是否一致
  • 真实性 (Realism):模拟是否匹配真实环境的行为特征
  • 质量 (Quality):相对于 ground truth 的完整性和简洁性

评判模型选的是 GPT-5.2,因为在双盲图灵测试中准确率最高。

另外还有一个非常聪明的设计,差异化匹配标准。不是所有内容都需要精确匹配。

# AgentWorldBench 对三类内容采用不同的评判标准
# 类型1,确定性内容(回显输出、文件读取、计算结果)
#   → 必须精确匹配,cat 返回了错误文件内容就判定为错
# 类型2,预存环境内容(预装软件版本、非轨迹创建的文件内容)
#   → 仅需格式和合理性验证,不要求与具体版本号精确一致
# 类型3,运行时元数据(时间戳、PID、内存地址、会话token)
#   → 仅需格式和范围验证,模拟 PID 42731 与真实 PID 18204 同样可接受

这个分类的设计避免了很多假阴性,不会因为模型预测的进程 ID 跟真实环境不一样就扣分,因为那是随机的。


结果,小模型干掉了 GPT-5.4

说结果之前,我先给你列一张表。

这是 AgentWorldBench 上所有模型的排名:

模型MCPSearchTerminalSWEAndroidWebOS总体
Qwen-AgentWorld-397B68.2437.8257.7368.4960.2050.9867.8958.71
GPT-5.470.1037.2653.6966.2960.0051.8068.5858.25
Claude Opus 4.669.9029.3057.5164.5561.7451.4270.2057.80
Claude Opus 4.854.9335.1459.1864.1061.5054.6666.6256.59
Qwen-AgentWorld-35B64.7936.6953.9665.6358.1749.5565.9256.39
Claude Sonnet 4.670.0028.7956.9864.5258.0350.7863.1756.04
Qwen3.5-397B-A17B68.3130.8155.3064.4454.9048.5560.8554.74
Gemini 3.1 Pro59.0730.2152.4759.0761.4052.8366.9254.57
Kimi K2.665.2327.4852.5458.7758.9350.2060.8053.42
DeepSeek-V4-Pro63.2727.6151.2659.4455.1750.3263.7052.97

看几个关键数字。

397B 版本总分 58.71,超越了 GPT-5.4 的 58.25。

我知道这个差距不大。但你仔细看分项。Terminal 上 57.73 vs 53.69,SWE 上 68.49 vs 66.29。这两个领域的共同特征是什么?都需要精确的代码执行状态建模和工具 API 行为预测。 这是世界模型的天然优势,语言模型擅长的「泛化模糊回答」在这两个领域最不灵。

35B 版本总分 56.39,超越了 Claude Sonnet 4.6 的 56.04。

而且你知道它的起点是多少吗?47.73。

三阶段训练让它涨了 8.66 分。

这不是微调带来的一点边际提升。这是把一个完全不做环境建模的模型,变成了一个能预测七个领域环境动态的模型。而且是在只有 3B 激活参数的条件下。

最难的领域是 Search。最高分只有 37.82,大概是 SWE 最高分的一半。为什么呢?因为搜索模拟需要大量事实性世界知识,模型不知道真实世界的搜索结果长什么样,就不可能模拟得准。这也解释了为什么 CPT 阶段要注入医疗、法律、金融、时事这些领域知识语料。


世界模型脑子里在想什么?

论文分析了一个我特别感兴趣的东西,模型的思考痕迹。

他们从四个文本领域的 129 条推理链中,发现了三种涌现的推理模式:

1. 审议性自我纠正

模型会在思考过程中用 Wait! 打断自己,修正刚才的预测。129 轮中出现了 1,347 次这种自我打断,平均每轮 10.4 次。

打断的内容包括事实错误修正(「不对,这个文件里不应该有这个变量」)、认识论限制(「我没有办法真的执行 np.random.seed(42),所以不能输出确切随机数」)、以及视角转换。

2. 信息泄露预防

在 Search 领域,模型手里握着一个参考答案。它的任务是在不泄露答案的前提下模拟搜索结果。当搜索查询跟答案无关时,模型会主动确保摘要不意外暴露目标。

这相当于世界模型版本的「心智理论」。

3. 多步因果推理

预测 curl -s localhost:3000 | python3 -m json.tool 的输出,需要六步推理链:Node.js 没装 → 服务器没起 → 3000 端口没监听 → curl 静默失败 → 空管道 → json.tool 抛 JSONDecodeError。

这不是背答案。是真的在推演因果关系


世界模型的两种用法

论文最有意思的部分,是第二章。不是怎么训练世界模型,而是世界模型能用来干什么

范式一,解耦式环境模拟器

在这种模式下,世界模型和策略智能体是分开的。世界模型替代真实环境,让智能体在上面做 RL 训练。

这种用法叫 Sim RL

论文做了个非常大胆的实验,拿 OpenClaw 这个完全不在训练数据里的开源智能体平台做测试。构造了 4000 个 OpenClaw 模拟环境,不做任何领域适配,直接让世界模型扮演环境。

结果:

模型Claw-EvalQwenClawBench
Qwen3.5-35B-A3B (基线)65.447.9
+ Sim RL (用 Qwen3.6-Plus 当模拟器)66.747.8
+ Sim RL (用 Qwen-AgentWorld-397B 当模拟器)69.755.0

用差模拟器的 Sim RL 几乎没有收益。用 Qwen-AgentWorld 的 Sim RL 涨了 4.3 和 7.1。

模拟器的质量是瓶颈。 智能体在垃圾模拟器上练再多也没用。

更有意思的是可控模拟

跟传统 Sim RL 不同,Qwen-AgentWorld 支持用自然语言指令控制模拟行为。比如在 MCP 领域,你可以注入定向扰动,间歇性 API 错误、需要多次调用的分页响应、不完整的中间结果,来系统性地暴露智能体的弱点。

可控 vs 不可控的结果对比一目了然:

基准SFT 基线Sim RL (不可控)Sim RL (可控)
Tool Decathlon32.431.536.1
MCPMark21.524.633.8

不可控 Sim RL 在 Tool Decathlon 上甚至是负收益。 因为模拟器没有足够的地基来产生忠实响应。加上可控指令之后,瞬间涨了 3.7 和 12.3。

而且最炸的是,可控 Sim RL 超越了在真实搜索引擎上训练的 Real RL。在 WideSearch 上,可控 Sim RL 的 F1 达到 50.3%,Real RL 只有 45.6%。

不是说虚拟比真实更强。而是说,可控模拟让你可以针对性地暴露弱点,而这种针对性在真实环境中做不到

范式二,智能体基础模型

这种模式下,同一个模型既负责选择动作,又负责预测环境状态。

论文的做法是,先在单轮、无工具调用的任务上做 LWM RL 热身,然后零样本评估多轮、带工具调用的智能体任务。

你换个角度想,世界模型的训练,被当作智能体训练的「热身运动」

结果让人震惊:

基准SFT 基线+ LWM RL提升
Terminal-Bench 2.033.339.6+6.3
SWE-Bench Verified64.567.9+3.4
SWE-Bench Pro42.247.4+5.2
WideSearch F1 Item33.446.2+12.8
Claw-Eval (域外)53.664.9+11.3
QwenClawBench (域外)39.849.4+9.7
BFCL v4 (域外)62.371.3+9.0

注意那三个「域外」基准。Claw-Eval、QwenClawBench、BFCL v4,这三个领域的训练数据完全没有进入 LWM 训练管道。但收益分别是 +11.3、+9.7、+9.0。

世界模型训练传递的不是领域特定的知识,而是一种可泛化的推理模式。 这个模式叫「在行动之前,先在脑子里模拟环境会怎么反应」。

这不就是人类做决策的方式吗?你在决定要不要闯红灯之前,大脑会自动模拟「如果我冲过去,可能有一辆车从左边过来」。这不是知识,是能力。


为什么这件事重要

我有时候觉得,AI 领域最容易被忽略的一个问题是:

我们一直在教 AI 怎么「做」,但从来没教它怎么「看」这个世界。

大语言模型训练的是 token 预测。Agent 模型训练的是动作选择。强化学习训练的是奖励最大化。

但没有任何一个训练目标,是「预测环境接下来会怎样」。

Qwen-AgentWorld 把这件事提到了训练的根本目标上。从 CPT 阶段,模型就在学习「如果我做了 X,世界会变成 Y」。

这跟之前所有的 AI 模型训练范式,都不一样。

而且它不是事后贴皮的。不是在一个通用 LLM 上微调几层让它能「模拟」。它是从预训练阶段就把环境建模作为目标。论文里有句话我很喜欢:

Environment modeling is the training objective from continual pre-training onward, not a post hoc adaptation on top of a general-purpose LLM.

环境建模是持续预训练阶段的训练目标,不是在通用 LLM 上贴一层皮。

这就是「原生」和「事后适配」的区别。就像你学中文和用翻译软件的区别。前者是思维方式,后者是工具。


最后

我那个 13 行的 PR,说到底就是帮 LlamaFactory 加了一个模型注册。

但我更想说的是,Qwen-AgentWorld 背后的思路,可能是 Agent AI 的下一个重要方向

过去一年我们在做的事情,特别是「Harness Engineering」那一拨,说到底是教 AI 怎么跟环境交互。怎么调用工具、怎么读文件、怎么写代码、怎么多步推理。

但所有这些的前提,都默认「AI 知道它做了某个动作之后环境会怎么变」。这个假设其实不成立。通用 LLM 在预测环境动态这件事上,并不好。

Qwen-AgentWorld 做的事,就是把「预测环境动态」变成训练目标本身

而且它证明了这条路走得通。

3B 激活参数的模型,在模拟 7 个领域的智能体环境这件事上,超过了 GPT-5.4。

可控模拟让 RL 训练超越真实环境训练的收益。

单轮世界模型热身可以迁移到多轮工具调用智能体任务,连完全不在训练数据里的领域都能涨。

这三件事,每一件单独拿出来都是值得写一篇文章的。它们合在一起,指向一个非常清晰的趋势:

我们正在从「教 AI 做动作」进入「教 AI 理解世界怎么运转」的阶段。

而 Qwen-AgentWorld,是这个方向上第一个正式开源的大规模尝试。


如果你对这个项目感兴趣:

LlamaFactory 里已经可以直接加载 Qwen-AgentWorld-35B-A3B,一条命令就能开始微调。想在特定领域训练自己的世界模型的,可以试试。

以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~

谢谢你看我的文章,我们,下次再见。