AdaMARP:把「会演戏」和「会导戏」分开的多智能体角色扮演框架
arXiv:2601.11007
AdaMARP: An Adaptive Multi-Agent Interaction Framework for General Immersive Role-Playing
AI Interpretation
近两年,LLM 角色扮演(Role-Playing)已经从「好玩」逐渐走向「可用」:AI NPC、互动小说、虚拟陪伴、AI DM……
但如果你真的做过相关系统,就会发现一个核心问题始终没解决:
模型会说话,但不会“演一场戏”。
这篇 AdaMARP 的论文,并不是再教模型“怎么说一句更像角色的话”,而是系统性地重构了角色扮演这个任务本身:
谁负责演?谁负责调度?如何训练?如何评测?
一、问题在哪?为什么传统 Role-Play 容易崩
主流做法通常是:
- 一个大模型
- 一段 persona prompt
- 多轮对话
这种方式在短对话里还凑合,但一旦变复杂就会出问题:
- 多角色抢话、不知道该谁说
- 场景切换靠硬 prompt,很容易乱
- 角色性格、动机在长对话中漂移
- 模型“只会聊天”,不会管理剧情节奏
本质原因是:
“演戏”和“导演”被塞进了同一个模型、同一个 prompt。
二、AdaMARP 的核心思想:演戏的只管演,导演只管导
AdaMARP 做了一件很“工程化”的事:明确拆分角色。
1️⃣ 三类智能体,而不是一个大模型
- Actor
只负责扮演角色(所有非用户角色),专心“演好一个人”。 - User
可以是真人,也可以是用户模拟模型。 - Scene Manager(导演)
不参与表演,只负责高层决策:- 谁该说话?
- 要不要切场景?
- 该不该引入新角色?
- 什么时候结束?
这一步,直接把「内容生成」和「流程控制」解耦了。
三、统一消息格式:对话不只是“说了什么”
AdaMARP 另一个非常关键的设计,是统一输出协议。
每一轮角色输出,不再只是自然语言,而是允许混合四种成分:
- [Thought]:角色内心想法(第一人称、不可见)
- (Action):角色的可见动作
- <Environment>:环境状态或变化
- Speech:真正说出口的话
这带来的变化是:
- 角色有“心理活动”,而不是只会说台词
- 环境状态可以被追踪(门是否打开、天是否黑)
- 后续系统(游戏引擎 / 状态机)可以直接解析这些结构化信息
从“聊天机器人”,升级为“可驱动世界状态的角色”。
四、数据从哪来?现实世界根本没有现成答案
现实中几乎不存在大规模的Thought + Action + Environment + Speech 数据。
于是作者自己造了两套数据。
AdaRPSet:教 Actor 怎么“演”
分两部分:
① 从文学作品中抽取
- 选 81 本名著
- 用强 LLM 抽剧情、对话
- 把原本的描写拆解成 Thought / Action / Environment
- 聚合角色跨章节证据,生成 7 维人物档案(性格、动机、关系等)
② 合成原创故事
- 强制包含:
- 场景切换
- 新角色加入
- 多角色互动
- 覆盖模型在真实互动中会遇到的“动态能力”
AdaSMSet:教 Scene Manager 怎么“导”
Scene Manager 不是生成文本,而是做离散决策:
{ init_scene, pick_speaker, switch_scene, add_role, end }
训练数据的构造方式也很巧:
- 从合成故事中“反推”每一步合理的调度行为
- 插入 pick_speaker 动作
- 用强模型为每次决策生成一句简短理由(Reason)
这让 Scene Manager 变成了一个可训练的调度器,而不是 prompt 里的一堆规则。
五、评测不再看“一句话”,而是看“一整场戏”
AdaMARP 提出了一个轨迹级评测框架:AdaptiveBench。
怎么评?
- 固定初始场景 + 角色设定
- Scene Manager 控制全流程
- Actor / User 轮流演 20 轮
- 用 LLM-as-Judge 从“整条轨迹”打分
评测维度包括:
- 角色一致性
- 环境利用
- 人际互动
- 剧情推进
- 格式与指令遵守
也单独评 Scene Manager 是否:
- 乱切场景
- 冷落用户
- 乱加角色
这比传统单轮指标要严格得多,也真实得多。
六、关键结果:小模型 + 好架构,真的能赢
一些非常值得注意的结果:
- Llama-3.1-8B + AdaRPSet
- 在 AdaptiveBench 上超过 GPT-4o-mini、Gemini-2.5-Pro
- Qwen2.5-14B Scene Manager
- 在调度维度超过 Claude Sonnet 4.5
- 接近 QwQ-32B
更重要的是一个反直觉发现:
直接用现成 role-play 数据微调,反而会变差。
原因很简单:
- 大多数数据是“2 人静态聊天”
- 不包含多角色 / 场景切换 / 调度
- 分布与真实沉浸式任务不匹配
这再次说明:
数据是否“对任务”,比数据多不多更重要。
七、Prompt 层面的一个重要启示
论文还做了 prompt 消融,结论非常有意思:
- Actor
👉 约束太多反而表现更差,需要“规则 + 自由度” - Scene Manager
👉 越明确、越严格,表现越好
一句话总结:
创造内容的 Agent 要松,执行规则的 Agent 要严。
这对所有 agent 系统设计都非常有参考价值。
八、这篇论文真正的价值是什么?
AdaMARP 的意义不在于“某个指标超过了谁”,而在于:
- 提供了一套可复用的系统架构
- 把 role-play 从 prompt 工程升级为系统建模问题
- 展示了「小模型 + 对的数据 + 清晰分工」的巨大潜力
如果你在做:
- AI NPC / AI 角色
- 互动小说 / 剧情生成
- 多智能体协作系统
- Agent orchestration
这篇论文的“Actor + Scene Manager”范式,都非常值得借鉴。
九、一些局限与未来方向
当然,AdaMARP 也并非完美:
- 数据和评测高度依赖强闭源 LLM
- 场景与角色仍是文本级模拟
- Scene Manager 还不是真正的长程规划器
但它已经清楚地指明了一条路:
想做沉浸式、多角色、长期互动系统,不能只靠一个“会聊天的模型”。
总结一句话
AdaMARP 把“会演戏的模型”和“会导戏的模型”分开建模,用统一格式、专用数据和轨迹级评测,系统性地提升了沉浸式角色扮演的可控性与稳定性。
这不是一个“更会聊天的模型”,而是一种更像系统工程的角色扮演范式。