AdaMARP: An Adaptive Multi-Agent Interaction Framework for General Immersive Role-Playing
这篇论文做的事情可以理解成三层:先设计“怎么玩”、再造“训练素材”、最后建“测评场地”。
1)怎么玩(框架层)
- 他们把角色扮演拆成三个智能体:
- Actor:负责演所有非用户角色;
- User:模拟真人用户,也可以被真人替换;
- Scene Manager:像导演一样,控制“谁说话、在哪儿说、要不要加新角色、什么时候结束”。
- 每一句话不再只是“说了什么”,而是统一写成一个“电影镜头”:
- 角色脑子里想什么 → [Thought];
- 身体在干什么 → (Action);
- 环境发生了什么变化 → <Environment>;
- 嘴上说的话就是普通文本。
这样一来,对话就不只是聊天,而是“带场景、带动作、带心理活动”的故事片。
2)素材从哪里来(数据层)
- 现实世界里几乎没有现成的“Thought+Action+Environment+Speech”数据,于是他们自己造:
- 从 81 本名著里抽剧情、抽对话,请强模型帮忙把人物对话改写成这种统一格式,同时自动生成人物小传;
- 再让模型“编原创故事”,强制包含:场景切换、新角色加入、多角色互动,保证能教会模型这些“动态能力”。
- 对于 Scene Manager,则在这些故事里自动插入“下一轮由谁说话”的标记,并用强模型为每次选择写一条简短理由,这就变成了导演模型的监督数据。
3)怎么训练、怎么测
- 训练:
- Actor:在上述 AdaRPSet 数据上做有监督微调,只学习“主角自己的那几句”该怎么写。
- Scene Manager:在 AdaSMSet 上学习如何在完整对话上下文里选择 action(选谁说话、要不要切场景/加角色等)。
- 测评:
- 搭一个“模拟舞台”:给定初始角色设定和场景,Scene Manager 开始发指令,Actor/用户轮流演,直到 20 轮对话;
- 然后用大模型当裁判,从角色一致、环境利用、人际互动、故事推进、格式遵守等多个维度打分;
- 再专门评估 Scene Manager:它有没有乱切场景、有没有公平轮换发言人、有没有在合适时机引入新角色。
总结一下:作者不是只调 prompt,而是从“输入输出格式”、“调度机制”、“训练数据”、“自动打分体系”四个维度,一起系统化重构了 LLM 角色扮演这个任务。
1)框架上的突破
传统角色扮演大多只是“一个模型+一段 persona prompt+轮流对话”,默认一个场景、两三个人,说到底是变体的聊天机器人。AdaMARP 把这件事拆成:
- 一个专门演人的 Actor;
- 一个像 DM/导演一样的 Scene Manager;
- 外加一个可能是真人的 User。
再配合 Thought/Action/Environment 的统一标注,角色不再只是“说话”,而是带着内心和环境一起演戏。这对于做真正沉浸式、剧情连贯的游戏/互动小说很重要——你可以追踪“门是否被撞开过”“天色是否已黑”“某人其实心里在想反话”等长期状态。
2)数据和反馈回路的意义
以前大多方法只关心“对话内容好不好听”,而不去显式教模型“何时切场景、何时让谁说话、何时介绍新角色”。AdaMARP 的两套数据:
- AdaRPSet 教会 Actor:在给定角色档案与场景下如何自然地写 Thought/Action/Environment+Speech;
- AdaSMSet 教会 Scene Manager:对同一段故事,合理的 orchestration 长什么样。
再用 AdaptiveBench 让三个 agent 一起跑完整轨迹,然后由 judge 模型看“整体表现如何”,形成闭环。这样,模型学到的是“如何运转一个故事”,而不是“单轮说一句漂亮话”。
3)为什么别的 role-play 数据微调会变差?
论文一个重要发现是:拿强的 Qwen2.5-7B-Instruct,直接用 BeyondDialogue、Crab、CoSER 数据去 finetune,反而在 AdaptiveBench 上变差。这其实说明:
- 这些数据多是“2 人静态聊天 + 只关注说话”,缺少思想/环境、缺少多角色、多场景;
- 数据分布与这里的任务(多角色、多场景、自适应调度)不匹配;
- 很容易让原本已经较通用的对话能力被局限在某种“固定格式/错位格式”的习惯里。
换句话说:role-play 不是“随便喂点角色扮演数据都会好”,而是非常依赖“任务匹配”的数据设计。
4)小模型超过大模型说明什么?
在 AdaptiveBench 上:
- 他们用 Llama-3.1-8B + AdaRPSet 就能打平甚至超越 GPT-4o-mini、Gemini-2.5-Pro、Qwen3-14B;
- Scene Manager 用 Qwen2.5-14B + AdaSMSet 就能在 orchestrating 维度超 Claude Sonnet 4.5,逼近 QwQ-32B。
这说明,对于这种“高结构、高约束”的任务,
- 配套框架 + 好数据 的收益,可以部分替代模型规模;
- 尤其是 orchestrator 这种元层 Agent,不一定需要超大模型,只要有针对性训练和清晰动作空间就能表现很好。
这对开源社区或不想依赖闭源 API 的产品方来说,成本意义很大。
5)Prompt 设计上“松管 Actor、严管 Manager”
- 对 Actor:太细的 Enhance prompt 反而把模型绑死,让它在动态局面下无法自由发挥,表现略差于 Basic prompt。
- 对 Scene Manager:相反,写清楚“什么时候才能 switch_scene、什么时候才应该 add_role、不能连续切场景”等详细规则,会明显提升表现。
反映出一个启示:
- 负责创造内容的 Agent,应该给“规则+自由度”;
- 负责执行规则/调度的 Agent,更适合被“写死成严格的有限状态机+LLM 决策”。
整体来看,这篇工作最重要的价值不只是“某个指标超 GPT-4o-mini/Claude”,而是提出了一条设计沉浸式、多角色、长期互动系统的工程路线:明确拆分“演技”和“导演”,给各自合适的数据与规则,并用轨迹级评测闭环验证。
从应用角度,这篇论文的影响可以拆成两块:
1)对“AI 角色/AI NPC/互动小说”等产品的启示
- 传统人格机器人往往是:一个大模型 + 一堆 persona 文本 + 系统 prompt,结果是:
- 角色一会儿忘词、一会儿性格跑偏;
- 多角色场景中经常乱抢话、不知道什么时候结束;
- 场景切换和人物登场都要靠硬 prompt 或人工脚本。
- AdaMARP 展示了一条更工程化的路线:
- 用 Actor 专心“演好一个人”,用 Scene Manager 专心“导好一场戏”;
- 明确把 Thought/Action/Environment 变成输出协议,便于下游系统解析和驱动游戏/虚拟世界;
- 再用 AdaptiveBench 这种轨迹级评测,直接衡量“整场体验好不好”,而不是只看单轮回复。
这对游戏公司、虚拟直播平台、故事生成平台来说,都提供了一种可移植的架构蓝图——你可以替换底层模型,但保留这套调度与格式,就能更容易搭出可控的多角色体验。
2)对“多智能体系统和 Agent 编排”的启示
- 现在很多 agent 系统都是“多个 LLM 并行聊天 + 一个 orchestrator prompt”,逻辑比较 ad-hoc。AdaMARP 则把 orchestrator 显式建模成一个可训练的 Scene Manager,有离散动作空间、有监督数据、有专门评测,这实质上是在做“可学习的多智能体调度器”。
- 这类思路未来可扩展到:
- 协作式工具调用(哪个 agent 什么时候调哪个工具);
- 多机器人/多子任务的分工协调;
- 教学/客服场景下,动态安排“讲师式 agent”和“助教式 agent”的出场与收场。
总体来说,这篇工作把“会演戏的模型”和“会导戏的模型”分开建模,并通过精细数据和评测闭环验证其价值。这不仅改善了角色扮演体验,也为更大范围的多智能体交互系统提供了一个可借鉴的设计范式。
论文提出 AdaMARP 框架,并围绕“框架设计—数据构建—模型训练—轨迹级评估”形成一套完整方法:
[Thought] 内心独白(第一人称、只自己可见);(Action) 可见动作;<Environment> 环境状态/变化;Scene Manager 的离散动作空间:{init_scene, pick_speaker, switch_scene, add_role, end},每一步都输出 action + rationale;init_scene 必为首个动作。通过这些操作实现:选择发言人、切换场景、即席加入新角色、结束剧情。
数据构建
AdaRPSet-Synthesis(合成覆盖动态能力):
add_role, switch_scene, end),强制每条轨迹至少一次场景切换、一次角色加入。AdaSMSet(用于训练 Scene Manager):
init_scene / add_role / switch_scene / end 监督。pick_speaker 动作:格式标准化为 JSON 风格动作对象,包含 action, reason, new_scene, new_role_*, speaker 等字段。
模型训练
学习联合预测 action 类型及其参数(理由、场景描述、新角色信息或发言人)。
AdaptiveBench 评估框架
pick_speaker 则 Actor / User 生成一轮对话;switch_scene 生成新场景;add_role 添加新角色;直到产生 20 轮对话(不含管理消息)。判分 rubric 强调:避免过早/滥用切场景、发言轮换中不能冷落用户、角色引入需功能和时机合理。
对比基线与扩展评估
整体方法论特点:以“统一消息格式 + 显式调度 agent + 专门训练/评估数据集”的方式,把沉浸式、多角色、动态场景 role-playing 从 prompt 工程问题升级为一个系统建模问题,并用轨迹级评估替代单轮指标。
<Environment> 从纯文本升级为可读写的世界状态(如游戏引擎、知识图谱),让 Action/Environment 能真实驱动物理或逻辑世界变化,而非仅叙事描述。AdaMARP 这篇工作不是在“再做一个角色 LLM”,而是在“重新定义角色扮演系统的架构”:以环境感知的统一消息格式为底座,用显式 Scene Manager 做编排,再配套有针对性的训练数据和轨迹级评测框架。实验结果表明,这种系统化思路确实能让中等尺寸开源模型在沉浸度、角色一致性、环境利用和多角色协调上达到甚至超越部分闭源大模型的水准。其主要价值体现在三点:
1)方法论层面为“多智能体沉浸式交互”提供了一套可复现的设计范式;
2)数据与评测层面给出了细粒度、可扩展的开源资源(AdaRPSet、AdaSMSet、AdaptiveBench);
3)经验上揭示了“数据匹配任务”的重要性:不合适的 role-play 数据会拉低自适应场景表现,而专门设计的数据可以显著放大小模型的能力。局限在于:高度依赖闭源 LLM 作为 teacher、裁判和数据生成器,且目前仍主要停留在文本和模拟环境层面。但总体而言,这是近年来在“LLM 角色扮演/agent 化交互”方向上,非常有系统性和工程可落地性的一篇工作。