当前位置:首页 > 编程开发 > 正文

同一个模型自问自答有用吗:写代码测 Role-Agent 的收益

约 5384 字 · 预计阅读 14 分钟
一句话总结:Role-Agent 让同一个模型扮演学生和老师,在自问自答中变强。我按它的逻辑写了个模拟:双角色带来的准确率提升,约等于「老师比学生强多少」的一半。同一个模型换个角色,能力没变,所以收益接近零。它真正起作用的地方不是角色扮演,是让两个角色看到不同的信息。

阿里 AMAP 研究院的 Role-Agent 论文,我读第一遍时觉得挺聪明,读第二遍开始怀疑。

它说的事很简单:一个模型,既当学生又当老师。学生做题,老师看结果分析错在哪,学生改进,循环。

听起来很顺。但有个问题一直卡着我:

老师和学生是同一个模型,它凭什么能指出学生错在哪?

如果它会做这道题,一开始就该做对;如果它不会,那它凭什么判断学生做错了?

这个问题不解决,"自问自答"就是自己夸自己。

一、Role-Agent 到底做了什么

先说清楚它的机制,再谈我的怀疑。

它有两个模块。

WIA(World-In-Agent) 要求 Agent 每做一步,额外预测"接下来几步环境会变成什么样"。预测和实际对比,得到一个"预测奖励",用乘法合进任务奖励。

乘法的意思是:预测不准,任务奖励再高也会被压下去。这样防止 Agent 靠运气完成任务还拿满分。

AIW(Agent-In-World) 管失败分析。任务失败后,模型回头找出错在哪一步,把这段分析变成下一轮的输入。

两个模块合起来,就是"边做边预测,错了就复盘"。

论文给的数据说这套东西有效。但它对局限性的描述,比它的效果更值得看。

论文自己列了三条:

  1. 如果用更强的冻结模型来做失败分析,效果会更好,但那样就引入了外部知识,破坏了"同等基准公平比较"的前提
  2. 状态分组依赖一个相似度阈值 0.9,这个值是从前人工作沿用的,不同任务间可能要调
  3. 整个框架只在纯文本环境验证过,多模态和实时具身场景没测

第一条最有意思。它等于承认了:失败分析的质量取决于分析者的能力。 用同一个模型分析,分析质量就是它自己的水平。

这正是我怀疑的地方。

二、先问一个更基本的问题:老师凭什么比学生强

同一个模型自问自答有用吗:写代码测 Role-Agent 的收益

图 1:横轴是老师比学生强多少,纵轴是双角色带来的提升。几乎就是一条斜率 0.5 的直线

我把这个问题写成了代码。

建模很简单:学生做一批判断题,准确率 58.3%(12 个用例对一个 7 个)。老师看学生的答案,同意就保留,反对就改成自己的。

关键在于老师和学生的错误相关性。同一个模型的两次调用,看到相似的信息、用相似的方式推理,出错的题大概率也是同一批。

def correlated(base, acc, same_rate, rng):
    """生成一个与 base 相关的判断:same_rate 概率沿用 base"""
    out = judge(acc, rng)
    return [base[i] if rng.random() < same_rate else out[i]
            for i in range(len(base))]

same_rate 就是相关性。0.9 意味着九成题目上老师和学生想法一样,0.3 意味着大部分题目上它们独立判断。

跑 8000 次蒙特卡洛,固定相关性 0.5,只改老师的准确率:

学生 老师 单角色 双角色 提升 改判率 改错率
58.3%58.3%58.3%58.2%-0.1pt24.3%50.2%
58.3%66.7%58.3%62.4%+4.1pt23.6%41.4%
58.3%75.0%58.3%66.6%+8.2pt22.8%31.9%
58.3%83.3%58.3%70.7%+12.4pt22.1%22.0%
58.3%100%58.3%79.0%+20.7pt20.7%0%

第一行是重点。老师等于学生的时候,改判率 24.3%,改错率 50.2%,净收益是零。

一半的改动是把对的改成错的,另一半是把错的改对。两个方向抵消,白折腾。

而且看末尾两列:老师越弱,改错率越高。老师等于学生时改错率 50%,老师全对时改错率 0%。

这就是"同一个模型自问自答"的数学困境:它假定第二次调用比第一次强,但没有任何理由支持这个假定。

三、实测:准确率提升约等于能力差的一半

把六行数据画出来,规律非常干净:提升 ≈ 能力差 × 0.5。

老师强 8.3 个百分点,提升 4.1。强 16.7,提升 8.2。强 33.3,提升 16.5。强 41.7,提升 20.7。

几乎是一条过原点的直线。

这个 0.5 不是巧合。老师只在"不同意"时改判,而不同意的那些题里,老师对的概率约等于它自己的准确率。所以改判的净收益 ≈ (老师准确率 - 50%) × 改判率。老师 58.3% 时,(58.3-50) × 24.3% ≈ 2 个点,但反过来学生改对的概率也在抵消,净效果归零。

换句话说:双角色只在你请了一个明显更强的老师时才有用。 同模型两次调用,请不动更强的老师。

四、同模型换角色,准确率为什么不动

再换个角度测:老师固定等于学生,只改错误相关性。

错误相关性 单角色 双角色 提升 三角色 提升
0.3058.3%58.2%-0.2pt60.2%+1.9pt
0.5058.3%58.2%-0.1pt59.2%+0.9pt
0.7058.3%58.2%-0.2pt58.6%+0.3pt
0.9558.3%58.3%-0.0pt58.3%0.0pt

双角色在所有相关性下都没有提升——因为老师不强,改判就是随机。

但三角色(多数表决)在低相关时有 1.9 个点的提升,而且随着相关性升高衰减到零。

这个对比很关键:

  • 双角色需要"有个更强的判断者"
  • 多数表决只需要"错误不重合"

同一个模型跑三次、取多数,为什么能纠错?因为它不需要某一次调用更强,只需要三次错误落在不同的题上。三次独立判断,单次错误概率 0.42,"至少两次同时错"的概率是 0.42³ + 3×0.42²×0.58 ≈ 0.38,折算成准确率约 62%,比单次高 4 个点。所以多数表决能纠一部分。

但前提是错误真的不重合。 相关性 0.85 时,三次调用错的是同一批题,多数表决也救不回来。

我把这两个结论凑一起,得到一句能记住的话:

自问自答的价值不在"角色",在"信息不对称"。两个角色看到的东西不一样,错误才会不重合。

五、Role-Agent 的真正贡献不在角色扮演

回到论文。

如果只是"同一个模型扮演学生和老师",按我的模拟,收益应该接近零。但论文报了效果。矛盾在哪?

我的解释是:它的两个模块制造了信息不对称。

WIA 让 Agent 预测"接下来环境会怎么变"。这是一个学生答题时不会做的动作——它强迫模型从"执行者"切换到"预测者",看到的是动作的后果,不是动作本身。

AIW 让它分析失败轨迹。这时模型看的是事后完整记录,而不是事中的局部信息。

两个角色拿到的输入不一样,所以它们的错误不会重合。

这解释了为什么论文强调"预测奖励用乘法合进任务奖励",而不是加法。加法的话,预测不准只是少拿一点奖励,任务成功照样满分。乘法的话,预测不准会直接压低总分,模型必须认真预测。

也就是说,Role-Agent 有效的机制可能是"强制换视角导致错误解耦",不是"角色扮演本身有魔力"。

这个区别在工程上很重要。如果你想复现它的效果,不需要搞一套复杂的角色切换框架,只需要保证两次判断的输入信息不同:

  • 一次看代码,一次看测试结果
  • 一次给全量上下文,一次只给摘要
  • 一次让它直接答,一次让它先列出三种可能再选

这些都比重型角色框架便宜。

六、Role-Agent 常见问题

Role-Agent 需要额外训练吗?

论文说法是不需要额外模型或额外标注数据。它靠的是推理时的角色切换和奖励设计,不改权重。

它和 Self-Refine 这类方法有什么区别?

Self-Refine 是"生成-批评-修改"的循环,批评者还是同一个模型。Role-Agent 多了环境预测这一环,而且把预测准确性直接乘进奖励。前者是文字层面的自我批评,后者要求模型对环境建模。

1.9 个点的提升值得做吗?

看场景。如果你的任务错一次代价很高(比如自动改数据库),1.9 个点可能值得。如果是内部工具,多跑两次的成本可能比收益高。

相似度阈值 0.9 是什么?

状态分组用的判据:两个状态相似度超过 0.9 就归为一类。论文说这个值沿用了前人工作,没做敏感性分析。这是我存疑的地方之一。

为什么只在纯文本上验证?

论文没解释。我的猜测是多模态场景下"状态"是图像,文本匹配方法直接失效,要重做一套。这属于框架的结构性限制,不是工程优化能补的。

七、边界

这是模拟,不是实测 Role-Agent。 我用的是"准确率 + 错误相关性"的抽象模型,没有真的跑它的代码。所以我能说的只是"在这个抽象下,双角色的收益上限是多少",不能说"Role-Agent 实际提升了多少"。

12 个用例的粒度很粗。 准确率只能取 1/12 的整数倍,所以 58.3%、66.7% 这些数看着精确,实际是离散的。换更大的用例集,曲线会更平滑,结论方向不变。

改判规则我简化成了"老师反对就改"。 真实系统里老师可能只给意见、由学生决定改不改,也可能加权投票。规则不同,收益曲线会变。但"老师不强就没收益"这个结论不会变。

论文的效果我没复现,也没找到第三方复现。 这类"同一模型自问自答"的方法,最需要的就是独立验证,因为它太容易在特定测试集上调出好看的数字。

这套思路和反解 10.87 倍那篇是同一类:把宣传数字拆成可验证的约束,看它在什么范围内成立。那篇拆的是加速比,这篇拆的是准确率。

站内之前写过 决策模型的打分接口,那篇的结论能对上:给解析器加规则去修错判,准确率反而从 10 掉到 9。 加一层机制不等于加一分准确率,得看这层机制是否真的引入了新信息。

参考资料

目录导航
  • 一、Role-Agent 到底做了什么
  • 二、先问一个更基本的问题:老师凭什么比学生强
  • 三、实测:准确率提升约等于能力差的一半
  • 四、同模型换角色,准确率为什么不动
  • 五、Role-Agent 的真正贡献不在角色扮演
  • 六、Role-Agent 常见问题
  • 七、边界
    • 参考资料
  • 相关文章:

  • 多模型成本路由:省 42% 的钱,掉 3.9 个点准确率
  • Agent 的命令执行靠不靠谱:我用 20 条命令测了一次
  • PenguinHarness:把 Agent 拆成文件,我写了个最小版
  • 跨任务保持上下文:和 message threads 不是一回事
  • Computer Use 的通过率怎么算:三层条件,一个判定器
  • 上下文压缩三种策略实测:省到 100 token,就得接受会漏
  • 腾讯混元 Hyra 2.0:三层 Agent 做科研,从解题变成造工具
  • DeepSeek 的 Creator Mode:说一句话,生成一个能用的插件
  • 发表评论

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。