想象一位从未读过菜谱、甚至被蒙上双眼的大厨。他看不见食材名称,也不知道锅里的反应规律,只能靠一次次下锅尝试,观察颜色、气味、气泡这些表面信号,慢慢在脑中形成一套“如果现在加盐,等下会变咸”的预测能力。凭着这套脑内模拟,他能在真正动手前,先在脑子里把整桌菜试做一遍,选出最稳妥的步骤。MuZero 就是这样一个“蒙眼大厨”:它不需要被告知游戏规则,只要不断和环境交手,就能学会预测未来,并用“脑内试菜”来规划下一步行动。这个故事里的三种能力——看懂食材、模拟反应、挑选动作——正好对应 MuZero 的三大网络和 MCTS 搜索。本文就用这个比喻,把这位大厨的后厨秘方一层层拆开给你看。

岗位关联

MuZero 把“规则未知”的规划做到极致,是未来决策 AI 的重要基石。理解它,你就能明白如何让智能体在陌生环境中自主学习与规划,而不是为每个环境手工编写规则或模型。

目录
  1. 可视化演示
  2. MuZero初印象
  3. 表示网络
  4. 动态网络
  5. 预测网络
  6. MCTS规划
  7. 训练与损失
  8. 对比AlphaZero
  9. 局限与拓展
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示K-means聚类算法的迭代过程:随机初始化质心、分配数据点到最近质心、更新质心位置,直到收敛。

本节配有交互动效(进入视口后自动加载,约 3KB)。

阶段1:初始化质心 随机选择3个点作为初始质心位置 所有数据点尚未分配到任何簇,显示为灰色 μ_k=random K-means对初始质心位置敏感,不同初始化可能得到不同结果

MuZero初印象

蒙眼大厨第一次走进厨房时,手边没有菜谱,甚至看不清食材标签。他唯一能做的,就是把东西扔进锅里,看它的反应,再记住这些反应。MuZero 遇到的也是这样一间“黑盒厨房”:它只知道当前观察,不知道环境的转移规则,更不知道每一步会带来什么奖励。

AlphaZero 之所以惊艳,是因为它精通棋类规则,能在脑中依据规则推演每一步。但规则不是每次都写在你手里。MuZero 的野心更进一层:把规则也交给神经网络去“嗅”。它不再依赖任何规则模拟器,而是通过与环境的无数次互动,悄悄构建一个“隐式世界模型”——这个模型藏在网络参数里,外人看不见,但它能回答“如果我在这个状态下做这个动作,接下来大概会发生什么”。

这种“边学边规划”的思路,让 MuZero 成为通用强化学习的重要里程碑。它不只是会下棋,还能玩雅达利游戏、控制机械臂,甚至被推广到更广的决策问题。对读者来说,理解 MuZero,就是理解智能体如何在没有上帝视角的世界里站稳脚跟。

表示网络

大厨的嗅觉和触觉是他的第一道过滤器。面对一整块未知食材,他不会记住每一根纹理,而会提取“软硬、气味、湿度”这些做菜有用的线索,形成一张小纸条。这就是表示网络的工作。

在 MuZero 中,表示网络是一个编码器 \( h_\theta \)。它接收原始观察 \( o \),比如棋盘的像素或游戏画面,然后输出一个紧凑的隐状态 \( s^0 \)。这个隐状态不是照片,而是一组抽象特征,专门保留对决策有用的信息,丢掉背景噪声。

有了这张便签,大厨就不必被食材表面的花纹干扰。表示网络越是善于抽象,MuZero 的后续预测就越干净——这就像大厨闭上眼睛,只凭手感就知道这块肉大概几成熟。

s0=hθ(o)s^0 = h_\theta(o)
  1. 观察输入原始观察 \( o \) 是智能体当前看到的一切,可能是一帧画面、一张棋盘照片。
    oo
  2. 编码变换\( h_\theta \) 是带参数 \( \theta \) 的神经网络,负责把观察压缩成特征。
    hθ(⋅)h_\theta(\cdot)
  3. 隐状态输出\( s^0 \) 是压缩后的初始隐状态,相当于大厨手里的“做菜便签”。
    s0s^0

动态网络

大厨脑中最神奇的部分,是一台“虚拟反应锅”。他把便签上的信息放进锅里,再倒入一勺动作,心里立刻浮现出下一道菜的样子和会不会烧糊。这就是动态网络,MuZero 的脑内模拟器。

动态网络 \( g_\theta \) 的输入是当前隐状态 \( s^{k-1} \) 和一个候选动作 \( a^k \),输出是预测的下一步隐状态 \( s^k \) 和即时奖励 \( r^k \)。它不直接生成像素,而是在抽象空间里推演未来;在带终止判断的扩展版本中,它还会给出回合结束的信号,告诉大厨“这锅菜到此为止”。

动态网络承担了原本属于真实规则引擎的重任。对蒙眼大厨来说,这台虚拟反应锅越准,他脑内试菜的效果就越接近真实后厨。

(sk,rk)=gθ(sk−1,ak)(s^k, r^k) = g_\theta(s^{k-1}, a^k)
  1. 上一步状态\( s^{k-1} \) 是第 \( k-1 \) 步的隐状态,表示“目前锅里的大致情况”。
    sk−1s^{k-1}
  2. 候选动作\( a^k \) 是第 \( k \) 步打算做的动作,比如“加一勺盐”。
    aka^k
  3. 状态预测\( s^k \) 是预测出的下一步隐状态,对应“加盐后的味道走向”。
    sks^k
  4. 奖励预测\( r^k \) 是即时奖励的估计,对应“这一口尝起来是加分还是翻车”。
    rkr^k

预测网络

大厨对着便签,很快就能说出两件事:这道菜客人可能喜欢到什么程度,以及下一勺是该放糖还是放盐。预测网络就是干这个的——它从隐状态出发,同时给出策略和价值。

预测网络 \( f_\theta \) 接收隐状态 \( s^t \),输出动作偏好 \( p^t \) 和价值估计 \( v^t \)。动作偏好是一个概率分布,表示每个动作有多少胜算;价值估计是一个标量,表示从当前局面走到最后,大概能赢多少。

预测网络让 MCTS 不再盲目瞎试。大厨在脑内试菜时,每试一个分支,都能从预测网络得到“这道分支大概赢面多少”的信号,从而把精力集中在最有希望的几条路径上。

(pt,vt)=fθ(st)(p^t, v^t) = f_\theta(s^t)
  1. 隐状态输入\( s^t \) 是当前步骤的隐状态,好比大厨手里的便签。
    sts^t
  2. 策略输出\( p^t \) 是对各动作的偏好分布,指导“下一步该偏向哪个动作”。
    ptp^t
  3. 价值输出\( v^t \) 是对最终回报的预测,回答“这条路走下去值不值”。
    vtv^t

MCTS规划

蒙眼大厨真正的大招,是在脑内开出一棵巨大的“菜品决策树”。他会从当前状态出发,反复问:如果放盐会怎样?放糖又会怎样?每一种选择都继续往下展开,最后根据“哪条分支的味道累计最好”决定实际下锅动作。这个过程叫蒙特卡洛树搜索(MCTS)。

MCTS 每轮包含四步:选择、扩展、模拟、回传。在选择阶段,它要平衡“已经验证的好动作”和“还没怎么试过的动作”,这个平衡由 PUCT 公式控制:

大厨靠这个公式在“保守”和“好奇”之间找到平衡:既不会永远只做同一道菜,也不会每次都在厨房里瞎折腾。

ak=arg⁡max⁡a[Q(s,a)+c⋅P(s,a)⋅∑bN(s,b)1+N(s,a)]a^k = \arg\max_a \left[ Q(s,a) + c \cdot P(s,a) \cdot \frac{\sqrt{\sum_{b} N(s,b)}}{1+N(s,a)} \right]
  1. 平均回报\( Q(s,a) \) 是状态 \( s \) 下执行动作 \( a \) 的历史平均回报,代表“这条路以往的结果”。
    Q(s,a)Q(s,a)
  2. 先验偏好\( P(s,a) \) 是预测网络给出的策略先验,代表“大厨直觉上觉得这步怎么样”。
    P(s,a)P(s,a)
  3. 探索权重\( c \cdot P(s,a) \cdot \frac{\sqrt{\sum_{b} N(s,b)}}{1+N(s,a)} \) 是给少试过但直觉不错的动作的加分,鼓励探索。
    c⋅P(s,a)⋅∑bN(s,b)1+N(s,a)c \cdot P(s,a) \cdot \frac{\sqrt{\sum_{b} N(s,b)}}{1+N(s,a)}
  4. 取最大值\( \arg\max_a[\cdots] \) 表示在所有动作中挑出得分最高的那一个。
    arg⁡max⁡a[⋯ ]\arg\max_a[\cdots]

训练与损失

晚上打烊后,大厨会复盘白天的每一道菜:猜对了没有?客人满意吗?哪一步的实际味道和脑内预测差得最远?MuZero 的训练也做同样的事。它把真实环境产生的奖励和最终胜负,当成标准答案,回头修正三大网络的预测。

MuZero 的损失由三部分组成:策略损失 \( \ell_p \)、价值损失 \( \ell_v \)、奖励损失 \( \ell_r \)。它会对搜索轨迹上的每一步 \( k=0,\dots,K \) 计算这些损失,再加起来联合优化整个模型。

这就像大厨每晚对着美食评论逐条修改自己的直觉。练得越久,脑内试菜的“咸淡”就越准,真正下锅时的失误也就越少。

ℓt(θ)=∑k=0K[ℓp(pt+k,πt+k)+ℓv(vt+k,zt+k)+ℓr(rt+k,ut+k−1)]\ell_t(\theta) = \sum_{k=0}^{K} \left[ \ell_p(p^{t+k}, \pi_{t+k}) + \ell_v(v^{t+k}, z_{t+k}) + \ell_r(r^{t+k}, u_{t+k-1}) \right]
  1. 策略损失\( \ell_p(p^{t+k}, \pi_{t+k}) \) 让预测网络的策略输出尽量靠近 MCTS 搜索出的目标策略 \( \pi \)。
    ℓp(pt+k,πt+k)\ell_p(p^{t+k}, \pi_{t+k})
  2. 价值损失\( \ell_v(v^{t+k}, z_{t+k}) \) 让价值输出尽量接近真实的最终回报 \( z \)。
    ℓv(vt+k,zt+k)\ell_v(v^{t+k}, z_{t+k})
  3. 奖励损失\( \ell_r(r^{t+k}, u_{t+k-1}) \) 让预测的即时奖励尽量接近环境实际给出的奖励 \( u \)。
    ℓr(rt+k,ut+k−1)\ell_r(r^{t+k}, u_{t+k-1})
  4. 全部累加\( \sum_{k=0}^{K}[\cdots] \) 表示把一条展开轨迹上的所有步骤误差都加起来,让网络越练越准。
    ∑k=0K[⋯ ]\sum_{k=0}^{K}[\cdots]

对比AlphaZero

如果把 AlphaZero 比作一位熟读菜谱的老厨师,那么 MuZero 就是那位始终蒙着眼、却靠试错摸清厨房门道的天才小厨。两者都会用 MCTS 做规划,但根本区别在于:规则从哪来?

AlphaZero 在下棋时,每一步模拟都必须调用真实的游戏规则引擎;它能准确知道“马走日、象走田”,是因为规则被直接写进了模拟器。MuZero 则完全抛弃了规则引擎,改用动态网络在隐空间里预测下一步。它不知道什么是马、什么是象,只知道“这样做下去的胜率会更高”。

因此,MuZero 的状态表示更抽象,模拟行为也更接近人类“凭感觉多想几步”的方式。它不需要为每种游戏单独写规则,只要给它足够多的自对弈数据,它就能自己学会“隐藏规则”。这让 MuZero 从棋盘走向了电子游戏、机器人控制等更开放的环境,通用性比 AlphaZero 高出一大截。

局限与拓展

蒙眼大厨的魔法再神奇,也有翻车的时候。他脑内的虚拟反应锅是学出来的,不是真实世界本身,预测得越远,误差就会像滚雪球一样越滚越大。MuZero 同样面临“模型误差累积”的困境:在搜索树中展开很多步后,早期的小偏差可能让整条分支失真。

除此之外,MuZero 面对超大动作空间时,搜索代价会急剧上升;训练实现也远比普通强化学习复杂。但它的思路为“世界模型”指明了方向:让智能体在抽象表征中提前预演未来,而不是凡事都依赖真实环境试错。这盏蒙眼大厨的灯,正照亮通用决策 AI 的下一程。

s^k=g^(s^k−1,a^k)+ϵ\hat{s}^k = \hat{g}(\hat{s}^{k-1}, \hat{a}^k) + \epsilon
  1. 递归预测\( \hat{s}^k = \hat{g}(\hat{s}^{k-1}, \hat{a}^k) \) 表示用上一步的预测状态继续预测下一步。
    s^k=g^(s^k−1,a^k)\hat{s}^k = \hat{g}(\hat{s}^{k-1}, \hat{a}^k)
  2. 误差项\( \epsilon \) 是每次预测引入的误差,代表脑内模拟和真实锅况的偏差。
    ϵ\epsilon
  3. 累积风险因为每一步都用预测结果当输入,小误差会随深度不断放大。
    s^k−1→s^k\hat{s}^{k-1} \to \hat{s}^k

AI 应用场景

不公开规则的游戏 AI

阶段:环境建模与规划决策

解决的问题:很多游戏和商业模拟器并不提供可调用的规则接口,传统方法要么人工写模型,要么只能靠大量在线试错,成本极高。MuZero 直接用隐式模型替代规则模拟器,在未知环境中完成从观察、学习到规划的闭环。

具体案例:某游戏公司在开发自动对战 AI 时,只能拿到游戏画面和胜负信号,拿不到内部逻辑。工程师把 MuZero 接入游戏,先让它随机游玩数百局收集经验,再通过动态网络在脑内模拟对手反应;最终 AI 不仅能打赢普通玩家,还能在规则悄悄更新的版本中快速适应。

无模型机器人操控

阶段:策略学习与动作规划

解决的问题:机器人抓取、拧瓶盖等操作常涉及复杂的接触物理,很难写出精确规则。MuZero 的“边学边规划”让机器人先通过少量真实动作建立隐式动力学模型,再用 MCTS 做精细规划。

具体案例:科研团队用 MuZero 训练机械臂摆放积木。机械臂不知道摩擦系数和重力模型,只通过视觉观察和触觉信号逐步学习;在碰到从未见过的异形积木时,它靠脑内模拟提前试出稳定抓取路径。

未知工业流程控制

阶段:动态预测与参数规划

解决的问题:化工、制药等流程中,反应釜内的变化往往没有精确解析解,传统控制依赖人工经验调参。MuZero 可以学习反应过程中的隐状态转移和奖励信号,帮助系统在参数空间里寻找更优策略。

具体案例:某工厂希望优化反应温度与加料速度。MuZero 基于历史传感器数据学习“温度调整后产率会怎么变化”,再在脑内模拟多种控制序列,选出一组预测收益最高的参数组合,既减少了试错成本,也提高了良品率。

Python 演示

python95 行
import randomfrom collections import defaultdict  class HiddenEnv:    """1x5 网格世界,规则对智能体完全隐藏"""    def __init__(self):        self.goal = (4, 4)        self.pos = (0, 0)     def reset(self):        self.pos = (0, 0)        return self.pos     def step(self, action):        moves = [(-1, 0), (1, 0), (0, -1), (0, 1)]        dx, dy = moves[action]        nx, ny = self.pos[0] + dx, self.pos[1] + dy        if 0 <= nx < 5 and 0 <= ny < 5:            self.pos = (nx, ny)        reward = 1.0 if self.pos == self.goal else 0.0        done = self.pos == self.goal        return self.pos, reward, done  class TransitionModel:    """学习到的隐式动态模型"""    def __init__(self):        self.next_map = {}        self.reward_map = {}     def record(self, state, action, next_state, reward):        self.next_map[(state, action)] = next_state        self.reward_map[(state, action)] = reward     def predict(self, state, action):        if (state, action) in self.next_map:            return self.next_map[(state, action)], self.reward_map[(state, action)]        return state, 0.0  class Planner:    """简化版 MCTS,用已学模型做脑内推演"""    def __init__(self, model):        self.model = model        self.counts = defaultdict(int)        self.values = defaultdict(float)     def search(self, state, depth=6):        if depth == 0:            return 0.0        best_action = 0        best_score = -1e9        for action in range(4):            value = self.values[(state, action)]            bonus = 1.0 / (1 + self.counts[(state, action)])            score = value + bonus            if score > best_score:                best_score = score                best_action = action        key = (state, best_action)        next_state, reward = self.model.predict(state, best_action)        self.counts[key] += 1        self.values[key] += (reward + self.search(next_state, depth - 1) - self.values[key]) / self.counts[key]        return self.values[key]  def main():    env = HiddenEnv()    model = TransitionModel()    for episode in range(200):        state = env.reset()        for step in range(20):            action = random.randrange(4)            next_state, reward, done = env.step(action)            model.record(state, action, next_state, reward)            state = next_state            if done:                break     planner = Planner(model)    state = env.reset()    for epoch in range(4):        planner.search(state, depth=6)        values = [planner.values[(state, a)] for a in range(4)]        best = values.index(max(values))        print("state:", state, "values:", [round(v, 3) for v in values], "choose:", best)        state, _, done = env.step(best)        if done:            print("reached goal!")            break  if __name__ == "__main__":    main()
目的:用一个小网格世界演示“先学模型、再脑内规划”的 MuZero 式思路,智能体在完全不知道规则的情况下也能走向目标。
  1. model.record(state, action, next_state, reward)像大厨记下“这勺盐下锅后的反应”一样,把真实经验存入模型。
  2. model.predict(state, action)对没见过的组合给出保守预测,避免规划时直接崩溃。
  3. bonus = 1.0 / (1 + self.counts[(state, action)])给尝试次数少的动作加分,对应 PUCT 中的探索项。
  4. self.values[key] += (reward + self.search(...) - self.values[key]) / self.counts[key]用增量平均更新动作价值,相当于把脑内试菜的结果回传。
  5. values.index(max(values))从四个动作中选价值最高的一个,对应真实下锅时的最终决策。

常见误区

误区“MuZero 不需要知道规则,那它是不是看一眼游戏画面就能直接学会规划,根本不用试错?”

正解MuZero 虽然不需要规则,但非常需要数据。它必须在真实环境里做大量自对弈或互动,才能一点点更新动态网络。简单说,它可以不读菜谱,但必须把食材扔进锅里无数次,才能学会预测味道。

为何常见:因为“不需要规则”太反直觉,大家容易把它理解成“什么都不用做就能学会”,忽略了训练阶段的大量交互成本。

误区“动态网络既然模拟环境,它应该像视频预测模型一样,直接输出下一帧画面吧?”

正解MuZero 的动态网络在隐空间工作,输出的是抽象隐状态,不是像素图。它不关心视觉细节,只预测对决策有用的特征。就像大厨在脑中粗略估计“这锅会变咸”,而不是精细想象出每一粒盐的形状。

为何常见:“预测环境”这个词听起来接近“预测画面”,加上很多视频预测模型很出名,容易混淆。

误区“MuZero 的搜索树不还是和 AlphaZero 一样,用规则引擎一步步模拟的吗?”

正解这是最大的差别。AlphaZero 的模拟依赖明确规则,MuZero 的 MCTS 每走一步都调用动态网络“脑补”后续状态和奖励。规则被神经网络替代了,这才是 MuZero 的核心创新。

为何常见:因为 MuZero 的搜索流程与 AlphaZero 太像,很多人只看到“蒙特卡洛树搜索”这个共同点,忽略了底层的模拟器已经改变。

误区“表示网络、动态网络、预测网络各有分工,应该像流水线一样分别训练再组装吧?”

正解它们共享参数,通过联合损失一起训练。一次反向传播会同时更新三个网络的权重,让它们互相配合。就像大厨的嗅觉、记忆和手劲是配合练出来的,不是分开练习再组合的。

为何常见:模块化设计的直觉让人认为各部分可以独立训练,但强化学习的联合优化恰恰是难点所在。

误区“MuZero 这么强,是不是以后所有决策问题都可以交给它?”

正解它仍有明显局限:模型误差会随搜索深度累积,超大动作空间会让搜索开销爆炸,训练实现也非常复杂。它确立了方向,但远不是终点。

为何常见:媒体喜欢渲染“AI 通吃游戏”的故事,容易让人忽略论文中同样强调的假设条件和失败场景。

面试题

Q1. MuZero 最核心的突破是什么?

单选题 · easy

  • A.使用更深的神经网络
  • B.不需要规则也能规划← 正确答案
  • C.能直接生成游戏画面
  • D.完全不需要真实交互

答案:B。MuZero 用学习到的隐式动态模型替代规则模拟器,所以不需要规则也能规划。A 是技术进步但不是核心,C 是误解,D 错误,因为训练仍需要大量真实环境交互。

Q2. 表示网络的主要作用是什么?

单选题 · easy

  • A.预测下一步奖励
  • B.把观察压缩成隐状态← 正确答案
  • C.直接选择最终动作
  • D.计算训练损失函数

答案:B。表示网络 \( h_\theta \) 的核心任务是把原始观察编码成紧凑隐状态。预测奖励是动态网络的事,选动作是 MCTS 的事,计算损失是训练阶段的事。

Q3. 动态网络接收的输入是什么?

单选题 · mid

  • A.原始观察和动作
  • B.隐状态和动作← 正确答案
  • C.策略输出和价值
  • D.上一步奖励和完成

答案:B。动态网络 \( g_\theta \) 在上一步隐状态 \( s^{k-1} \) 的基础上,输入候选动作 \( a^k \),输出新的隐状态和即时奖励。它不直接读原始观察,也不输出策略价值。

Q4. MuZero 联合优化哪些损失?

多选题 · mid

  • A.策略损失← 正确答案
  • B.价值损失← 正确答案
  • C.奖励损失← 正确答案
  • D.图像重建损失

答案:ABC。MuZero 的损失包含策略、价值和奖励三部分,三者共同修正三大网络。图像重建损失不是 MuZero 的组成部分,它不在隐空间生成像素画面。

Q5. PUCT 公式中主要负责探索的是哪一项?

单选题 · mid

  • A.Q 函数值
  • B.先验概率加成项← 正确答案
  • C.根节点访问次数
  • D.当前规划深度

答案:B。\( Q(s,a) \) 负责利用已有经验,而 \( c \cdot P(s,a) \cdot \frac{\sqrt{N}}{1+N} \) 让访问次数少但先验不错的动作有机会被选中。根节点访问次数和规划深度都不直接控制探索力度。

Q6. 与 AlphaZero 相比,MuZero 的改进体现在哪些方面?

多选题 · hard

  • A.不再需要规则模拟器← 正确答案
  • B.在隐空间学习动态← 正确答案
  • C.用学到的模型代替规则← 正确答案
  • D.完全不需要与环境交互

答案:ABC。MuZero 的核心改进是用学到的隐式模型代替规则模拟器,在隐空间推演未来。但它并没有摆脱环境交互,训练阶段依然需要大量真实数据,因此 D 错误。

Q7. MuZero 训练时的目标策略通常来自哪里?

单选题 · hard

  • A.专家人工标注← 正确答案
  • B.规则数据库
  • C.MCTS 搜索访问计数
  • D.均匀随机采样

答案:A。MuZero 像 AlphaZero 一样,用 MCTS 搜索根节点的动作访问次数构造目标策略,让预测网络模仿“更聪明的自己”。专家数据、规则库和纯随机采样都不是它的学习目标来源。

Q8. MuZero 的一个主要局限是什么?

单选题 · hard

  • A.模型误差会随深度累积← 正确答案
  • B.网络参数数量太多
  • C.只能处理棋盘游戏
  • D.不需要大量算力资源

答案:A。由于动态网络是学出来的,递归预测时误差会逐步放大,搜索越深越容易失真。C 错误,MuZero 已用于雅达利等游戏;B、D 不是关键局限。

Q9. 预测网络同时输出什么?

单选题 · easy

  • A.策略和价值← 正确答案
  • B.状态和奖励
  • C.动作和回报
  • D.观察和误差

答案:A。预测网络 \( f_\theta \) 接收隐状态,同时输出动作偏好 \( p^t \) 和价值 \( v^t \)。状态、奖励由动态网络负责,观察由表示网络编码。

Q10. 关于 MuZero 的隐式世界模型,下列说法正确的是?

多选题 · extreme

  • A.它不显式预测像素← 正确答案
  • B.它在隐空间做多步预测← 正确答案
  • C.它取代全部真实环境交互
  • D.它帮助 MCTS 模拟多种未来← 正确答案

答案:ABD。隐式世界模型在抽象特征空间预测未来,不生成图像,因此 A 对、B 对。MCTS 用它在脑中展开多条分支,D 对。但训练阶段仍需真实交互数据,C 错。