Esc
输入关键词开始搜索
News

AdaMARP: An Adaptive Multi-Agent Interaction Framework for General Immersive Role-Playing

AdaMARP: An Adaptive Multi-Agent Interaction Framework for General Immersive Role-Playing

原文链接:https://arxiv.org/abs/2601.11007 作者:Zhenhua Xu, Dongsheng Chen, Shuo Wang, Jian Li, Chengjie Wang, Meng Han, Yabiao Wang 机构:浙江大学、腾讯优图实验室 发布日期:2026-01-16

速查卡

项目内容
一句话总结用“演员模型 + 场景管理器”把角色扮演从单角色聊天升级为可切场景、可加角色、可调度发言顺序的多智能体叙事系统。
大白话版以前很多“AI 角色扮演”只是让模型学一个人设去接话;AdaMARP 想做的是“导演系统”:谁先说、场景何时切、有没有新人进场,都交给单独的管理器决定。
核心数字AdaRPSet 共 22,425 个会话、450,235 条 utterance;Qwen2.5-7B 经全量训练后平均分 8.72,较基线 8.37 提升 +0.35;Qwen2.5-14B 场景管理器 8.37,超过 Claude Sonnet 4.5 的 8.17。
评级A — 不是“把 prompt 写花”,而是把沉浸式角色扮演拆成可训练的协议层、控制层和评测层。
代码论文页未给出公开代码链接
关键词immersive role-playing, multi-agent, scene manager, structured messaging, adaptive bench, narrative agents

核心 Insight

这篇论文最重要的地方,不是“角色扮演效果更像人”,而是它明确指出:沉浸式叙事失败,往往不是某一句台词写得不够像,而是系统根本没有“导演层”。

过去常见做法,是把角色 profile 塞进 system prompt,然后让模型一轮一轮往下接。这样做的上限很低:角色能说像自己,但很难稳定处理场景变化、多人互动、临时新角色加入,以及长轨迹里动机不漂移。AdaMARP 的判断是,角色扮演至少要拆成两个能力:一类是“演员”能力,负责在既定角色/场景下生成带状态感的回复;另一类是“调度”能力,负责决定什么时候切场景、让谁发言、何时引入新角色、何时结束剧情。

所以它没有继续在单模型 prompt 上死磕,而是把系统拆成 Actor Model、User Model 和 Scene Manager 三个主体。这里最关键的是 Scene Manager:它不直接生成角色对白,但决定整段叙事怎么流动。这个分层让角色扮演第一次更像一个可控的多智能体系统,而不是“一个模型扮很多人”。

为什么这个想法 work?

因为叙事的难点本来就不止“语言像不像”,而在于“状态有没有被维护”。

单模型角色扮演容易崩的根因,是它把内部心理、外显动作、环境变化和说话内容混在一条文本流里,模型只要上下文一长,就会开始丢状态。AdaMARP 通过统一消息协议,把每轮交互拆成四个通道:Thought、Action、Environment、Speech。这样一来,模型不再只是吐一段对话,而是在显式维护“我在想什么、我做了什么、环境发生了什么、我说了什么”。

更进一步,Scene Manager 用离散动作空间来控制剧情,这比“让模型自己想想接下来该怎么演”更稳,因为它先把高层决策离散化,再让下游模型执行。也就是说,AdaMARP 的改进不是玄学 prompt,而是把叙事问题结构化。

方法详解

整体架构

AdaMARP 的整体 pipeline 可以写成:

初始角色集合 + 角色档案 + 初始场景

        Scene Manager 生成控制动作

  如果动作是 pick_speaker → Actor/User 生成一轮消息
  如果动作是 switch_scene → 更新场景描述
  如果动作是 add_role      → 注入新角色档案与动机
  如果动作是 end           → 结束轨迹

         写回历史,进入下一轮

论文把交互状态写成:

Gt=(Rt,Ht)\mathcal{G}_t = (\mathcal{R}_t, \mathcal{H}_t)

其中:

  • Rt\mathcal{R}_t 是时刻 tt 的角色集合
  • Ht\mathcal{H}_t 是到当前为止的完整交互历史

Scene Manager 的动作空间是:

M={init_scene, pick_speaker, switch_scene, add_role, end}\mathcal{M}=\{\texttt{init\_scene},\ \texttt{pick\_speaker},\ \texttt{switch\_scene},\ \texttt{add\_role},\ \texttt{end}\}

这组动作设计得很克制,但正好覆盖了叙事里最关键的导演操作:开场、点名发言、换景、加人、收尾。

关键技术组件

组件 1:七维角色档案

做什么: 给角色建立足够细的、能跨长剧情维持一致性的 profile。

怎么做: AdaMARP 不满足于“姓名 + 性格”这种薄 profile,而是给主角色定义七个维度:

  1. Identity & Appearance
  2. Personality & Psychology
  3. Speaking Style
  4. Abilities, Interests & Achievements
  5. Social & Historical Context
  6. Personal History Arc
  7. Relationships

直觉解释: 这其实是在解决“角色一致性为什么老崩”。如果只有性格标签,模型很容易在长对话后忘记身份关系、历史负担和说话习惯;而七维档案同时编码了内在人格、外部关系和叙事弧线,所以角色在切场景、换话题时更不容易漂。

组件 2:四通道沉浸式消息格式

做什么: 把“角色扮演消息”从单一对白升级成带内部状态的复合消息。

怎么做: 每轮消息显式交织四类信息:

  • [Thought]:内部想法
  • (Action):可观察动作
  • <Environment>:环境状态或变化
  • Speech:真正说出口的话

关键机制: 环境被提升为一等公民,而不是旁白噪音。论文强调环境有两层作用:

  • 提供氛围 grounding,帮助情绪成立
  • 作为因果变量,让动作反过来改变场景,场景再影响后续回复

数值例子: 假设一段剧情是“深夜医院走廊,两人争执,门后突然有声音”:

  • Thought:角色对风险的主观判断
  • Action:后退、停顿、靠墙
  • Environment:走廊灯光、门后脚步声、门把手抖动
  • Speech:真正说出的句子

过去很多系统只保留最后一层 Speech,结果“剧情感”全靠模型脑补;AdaMARP 则把前三层显式化,所以后续每一步都能继承状态。

组件 3:Scene Manager 场景管理器

做什么: 负责高层 orchestration,而不是代替演员说台词。

怎么做: Scene Manager 在每一步都基于当前状态 Gt\mathcal{G}_t 选择动作 mtMm_t \in \mathcal{M},并输出理由。不同动作携带不同参数:

  • switch_scene:输出新场景描述
  • add_role:输出新角色名、档案、动机
  • pick_speaker:指定下一位说话者

直觉解释: 这是本文最像“系统论文”的部分。它承认:多人叙事的问题,本质上有一个 scheduler。谁说话、什么时候换场、什么时候拉第三人进来,并不是自然会从下一句对白里“长出来”的,而应该成为可监督的决策。

组件 4:两套训练集

做什么: 分别教会系统“怎么演”和“怎么调度”。

怎么做:

  1. AdaRPSet:训练 Actor Model

    • AdaRPSet-Extracted:从 81 本 Goodreads 热门书籍中抽取互动片段,构建 12,525 个会话、177,157 条 utterance
    • AdaRPSet-Synthesis:用强模型生成动态剧情数据,覆盖切场景、加角色等 extracted 数据稀缺的行为,9,900 个会话、273,078 条 utterance
    • 总计:22,425 个会话、450,235 条 utterance
  2. AdaSMSet:训练 Scene Manager

    • 建在 AdaRPSet-Synthesis 之上
    • 补上 pick_speaker 等控制标签与理由字段

为什么要双数据源:

  • Extracted 数据更像真实文学对话,强在“像人”
  • Synthesis 数据更像控制工程样本,强在“会切场、会换人、会调度”

论文的核心判断很清楚:光靠真实文本抽取,动态行为覆盖不够;光靠合成数据,语言质感又可能发飘。两者是互补关系。

训练策略

论文给出了比较完整的训练细节:

  • 验证集:从训练数据中 hold out 5%
  • 训练轮数:8 epochs
  • 学习率:固定 1×1061\times 10^{-6}
  • warmup:前 5% steps,从 1×1071\times 10^{-7} 线性升到目标学习率
  • 最大长度:16K tokens
  • 截断:left truncation
  • 并行策略:
    • 7B/8B 单卡训练
    • 14B 用 4 张 GPU
    • 70B/72B 用 8 张 GPU
  • batch:
    • 7B/8B 与 14B:micro batch 24,global batch 48
    • 70B/72B:micro batch 1,global batch 32

这套设定有个隐含信息:AdaMARP 不是靠“神秘大规模 RL”赢的,而是靠更对路的数据与任务拆分,在常规 SFT 框架里把系统做对了。

与现有方法的关键区别

维度之前的方法本文方法为什么更好
角色表示薄 profile 或单 prompt 人设七维结构化角色档案更适合长轨迹一致性
消息格式单一对白为主Thought + Action + Environment + Speech显式保留状态与环境因果
系统结构单模型扮多角Actor + User + Scene Manager把“演”和“导演”拆开
动态叙事很少支持切场/加角色通过离散控制动作原生支持更接近真正剧情流
评测静态问答式角色评测100 条完整轨迹的 trajectory-level 评测更能测长程稳定性

实验结果

主实验

AdaptiveBench 的设置是:从 AdaRPSet-Synthesis 测试集抽 100 个 seed,每条轨迹固定运行 20 轮对话,再用 GPT-5-Chat 做 judge,对角色一致性、环境 grounding、人际互动、叙事推进和指令遵循等维度打分。

Actor Model 主结果

方法平均分Character ConsistencyEnvironmental GroundingNarrative Progression备注
GPT-4o-mini8.788.998.198.17商业闭源基线
GPT-5-Chat9.109.098.848.90最强闭源之一
Gemini-2.5-Pro8.077.977.578.27环境与一致性偏弱
Claude Sonnet 4.59.279.358.979.23Actor 侧最强闭源
Doubao-1.5-Pro-Character8.428.657.827.91国内角色模型基线
Qwen2.5-7B-Instruct8.378.617.707.73开源底座基线
Qwen2.5-7B-Instruct-Ours8.728.868.288.38全量 AdaRPSet 训练
Llama-3.1-8B + AdaRPSet8.899.008.398.528B 模型超过多个商业模型

解读:

  • 7B Qwen 经 AdaRPSet 训练后,从 8.37 提到 8.72,提升 +0.35。
  • Llama-3.1-8B 加全量训练后到 8.89,超过 GPT-4o-mini(8.78)、Gemini-2.5-Pro(8.07)和 Doubao(8.42)。
  • 闭源最强依旧是 Claude Sonnet 4.5(9.27)与 GPT-5-Chat(9.10),说明 AdaMARP 解决了结构问题,但模型上限仍受底座能力约束。

Scene Manager 主结果

方法Scene UnderstandingSpeaker DisciplineRole Introduction JudgmentOverall
GPT-4o-mini7.648.557.187.64
GPT-5-Chat8.038.157.787.90
Claude Sonnet 4.58.218.628.058.17
Qwen2.5-14B-Instruct7.658.427.347.63
Qwen2.5-14B-Instruct-Ours8.238.258.648.37
QwQ-32B8.488.927.978.41

解读:

  • Qwen2.5-14B 加 AdaSMSet 后,Overall 从 7.63 到 8.37,提升 +0.74,约 +9.7%。
  • 它超过 Claude Sonnet 4.5 的 8.17,非常关键:说明“导演层”能力比通用 instruction tuning 更依赖专门数据与控制 supervision。
  • QwQ-32B 8.41 仍是开源推理型上限之一,说明场景管理本质上是 reasoning-heavy 任务。

消融实验(Ablation Study)

变体平均分与完整方法差距说明
Qwen2.5-7B Base8.37-0.35原始基线
+ Extracted8.49-0.23真实文学抽取数据改善格式与稳定性
+ Extracted + Synthesis8.72动态剧情泛化最强
Llama-3.1-8B + Extracted7.70-1.19只学格式,不够应对动态轨迹
Llama-3.1-8B + Extracted + Synthesis8.89合成动态数据贡献巨大

关键发现:

  1. Extracted 数据的主要贡献是让模型学会统一协议和角色一致性。
  2. Synthesis 数据的主要贡献是让模型学会动态剧情:切场景、重分配角色、叙事推进。
  3. 对 Llama-3.1-8B 来说,只有 Extracted 明显不够;加入 Synthesis 后暴涨 +1.19,说明动态监督不是锦上添花,而是决定系统是否“会演剧情”的核心。

数据规模与可扩展性线索

数据集来源PlotsRoles会话数Utterances平均轮数
AdaRPSet-Extracted81 本图书4,4432,60812,525177,15714.14
AdaRPSet-Synthesis20 个主题9,90029,7019,900273,07827.58
AdaRPSet 总计14,34332,30922,425450,23520.08

这里能看出作者的工程判断:真实文本负责“质量”,合成数据负责“覆盖”。这也是为什么它更像一个系统数据工程项目,而不是单纯模型 fine-tune。

复现评估

维度评分(1-5)详细说明
数据可得性⭐⭐论文描述了 Goodreads 81 本书抽取与合成数据流程,但原始数据集未随文开放。
代码可得性论文页未提供公开仓库,复现者需要自行重建抽取、场景管理和评测流水线。
算力需求⭐⭐⭐7B/8B 可单卡训练,14B 需 4 卡,70B/72B 需 8 卡;训练门槛中等偏上。
工程复杂度⭐⭐⭐⭐难点不是 SFT 本身,而是双数据集构建、Scene Manager 监督以及 trajectory 级评测。
预期收益⭐⭐⭐⭐对角色扮演、NPC、互动叙事、陪伴型 Agent 很有直接价值。

复现建议: 最务实的路径,不是先追最强底座,而是先复刻最小版协议层:七维 profile + 四通道消息 + pick_speaker/switch_scene/add_role 三个关键动作,再做一个小型轨迹评测集。把导演层做出来,比盲目换更大模型更值。

批判性分析

局限性(论文承认的 + 我们发现的)

论文自带的边界很明确:

  1. 主要评测仍然依赖 LLM-as-Judge,因此最终分数会受 judge 偏好影响。
  2. 数据里大量动态剧情来自合成,天然存在 synthetic bias。

我们额外看到三个问题:

  1. 评测仍偏主观。 虽然 AdaptiveBench 比静态 benchmark 强很多,但角色一致性、叙事吸引力这类指标仍主要是 judge 打分,不是可验证任务。
  2. Scene Manager 的动作空间仍偏小。 五个动作已经解决了“有没有导演层”,但离真正复杂剧情系统还远,比如冲突升级、伏笔回收、多线程剧情并发都还没建模。
  3. 成本问题没有真正解决。 论文附录有 token 成本分析,但系统本质上把一次对话拆成多个 agent 协作,生产环境里 token/延迟压力不会小。

改进方向

  1. 引入显式世界状态机: 现在 Environment 还是文本化描述,下一步应把空间、物体、事件因果做成结构化状态。
  2. 把 Scene Manager 训练成规划器: 当前更像局部调度器,未来可接长期 plot planning 与目标约束。
  3. 加入真人偏好评测: 让用户对“沉浸感”和“剧情自然度”打分,和 LLM judge 做双轨验证。

独立观察

  • 这篇论文和 Agent 领域最近的“planner/executor”分层是同一趋势:复杂任务开始从单体模型走向角色分工。
  • 它其实不只适用于二次元陪伴或 RPG,对教育模拟、销售演练、心理辅导、企业培训都很有迁移价值。
  • 中国团队这次做对的一点,是没有只卷“角色像不像”,而是卷“系统能不能稳定跑长剧情”。这比继续刷单轮 character benchmark 更有产业意义。

对领域的影响

短期看,AdaMARP 会推动“角色扮演”从 prompt skill 变成系统工程:角色协议、场景状态、调度器、轨迹评测都会成为必修课。

中期看,它会让 NPC、陪伴 Agent、AI 剧本互动和教育模拟这些场景的技术栈开始收敛:大家都得回答同一个问题——你的系统里,到底有没有一个独立的导演层。

长期看,这篇论文真正重要的启发是:沉浸式智能体不该只被当作“会说话的角色”,而该被当作“在动态世界里持续行动和协作的叙事系统”。AdaMARP 还不是终点,但它把问题拆对了。