AdaMARP:一种面向通用沉浸式角色扮演的自适应多智能体交互框架

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

arXiv:2601.11007
👤 Zhenhua Xu, Dongsheng Chen, Shuo Wang et al.
📅 2026-01-19
🏷️ cs.AI, cs.CL

💡 这篇论文在研究什么?

这篇论文做的事情可以理解成三层:先设计“怎么玩”、再造“训练素材”、最后建“测评场地”。

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 框架,并围绕“框架设计—数据构建—模型训练—轨迹级评估”形成一套完整方法:

  1. 框架设计
  2. 角色层面:
  3. 设计 7 维结构化人物档案(身份外貌、性格心理、说话风格、能力兴趣成就、社会历史背景、个人成长弧线、关系),保证角色塑造信息充分。
  4. 统一输出格式:在同一轮消息中允许交织四种成分:
    • [Thought] 内心独白(第一人称、只自己可见);
    • (Action) 可见动作;
    • <Environment> 环境状态/变化;
    • 以及未标注的自然语言对话 Speech。
  5. 多智能体交互:
  6. 三类 agent:Actor Model(扮演所有非用户角色)、User Model(可模拟真实用户)、Scene Manager(高层控制)。
  7. Scene Manager 的离散动作空间:{init_scene, pick_speaker, switch_scene, add_role, end},每一步都输出 action + rationale;init_scene 必为首个动作。通过这些操作实现:选择发言人、切换场景、即席加入新角色、结束剧情。

  8. 数据构建

  9. AdaRPSet(用于训练 Actor):两部分组成。
  10. AdaRPSet-Extracted(从书中抽取):
    • 选 81 本 Goodreads“Best Books Ever”,利用规则切章节并合并为不超过 8192 token 的 chunk。
    • 用强 LLM(GPT-5-Chat 等)做结构化抽取:识别情节单元、给出摘要与关键角色,再按统一格式生成对话轨迹(Speech + Thought + Action + Environment),尽量把原文描写补入动作/环境标签。
    • 按角色聚合跨情节证据,再由 LLM 生成 7 维人物档案与关系描述,严格要求“不得幻觉,宁缺勿滥”。
  11. AdaRPSet-Synthesis(合成覆盖动态能力):

    • 预设 20 个主题(Adventure, Mystery, Romance, Apocalypse 等),每个主题生成 50 条剧情(45 训练 / 5 测试)。
    • LLM 生成:初始场景、主角与多配角档案+动机、多轮对话(统一消息格式),以及嵌入的 scene_manager 控制信息(add_role, switch_scene, end),强制每条轨迹至少一次场景切换、一次角色加入。
    • 对姓名/设定做去重和人工抽查,保证多样性与质量。
  12. AdaSMSet(用于训练 Scene Manager):

  13. 基于 AdaRPSet-Synthesis 的轨迹:已有 init_scene / add_role / switch_scene / end 监督。
  14. 在任意两个角色发言之间插入 pick_speaker 动作:
    • speaker 由下一轮真实发言者决定;
    • 用强指令模型(GPT-5-Chat)根据全局上下文生成单句 Reason,避免模板化描述。
  15. 格式标准化为 JSON 风格动作对象,包含 action, reason, new_scene, new_role_*, speaker 等字段。

  16. 模型训练

  17. Actor Model:
  18. 在 AdaRPSet(Extracted + Synthesis)上做全参数 Supervised Fine-tuning。
  19. 每条样本为“指定一个主角”,其余角色 + scene_manager 输出都作为 user 上下文;主角的发言为 assistant,仅对 assistant token 计算 loss。
  20. 最大上下文长度 16K,左截断;8 epoch,LR=1e-6,warmup 5%。
  21. Scene Manager:
  22. 在 AdaSMSet 上 SFT,输入为 profile 集、动机、对话历史,输出下一个 JSON 动作对象。
  23. 学习联合预测 action 类型及其参数(理由、场景描述、新角色信息或发言人)。

  24. AdaptiveBench 评估框架

  25. 轨迹模拟:
  26. 选自 AdaRPSet-Synthesis 测试集的 100 个种子(20 主题×5),固定初始场景和角色设定。
  27. 模拟过程:Scene Manager 每步选 action → 若 pick_speaker 则 Actor / User 生成一轮对话;switch_scene 生成新场景;add_role 添加新角色;直到产生 20 轮对话(不含管理消息)。
  28. Actor 评估:
  29. LLM-as-judge(默认 GPT-5-Chat)基于全轨迹、角色档案、初始场景进行 0–10 打分,5 为“勉强合格”。
  30. 五大维度 12 个子项:
    • Character Consistency:内在一致、说话风格、流畅/类人、身份 & 档案契合、动机 & 价值稳定;
    • Environmental Grounding:环境感知、环境利用;
    • Interpersonal Interaction:上下文响应、关系意识;
    • Narrative Progression:叙事吸引力、稳定性;
    • Instruction Compliance:格式与指令遵守。
  31. Scene Manager 评估:
  32. 同样由 LLM-as-judge,对每条轨迹评 4 项:Scene Understanding, Speaker Discipline, Role Introduction Judgment, Overall Assessment(均为 0–10)。
  33. 判分 rubric 强调:避免过早/滥用切场景、发言轮换中不能冷落用户、角色引入需功能和时机合理。

  34. 对比基线与扩展评估

  35. 模型:多个闭源(GPT-4o-mini, GPT-5-Chat, Gemini-2.5-Pro, Claude Sonnet 4.5, Doubao-1.5-Pro-Character)和开源(Qwen2.5, Llama-3.1, Qwen3, QwQ 等),再加上角色专向模型(Index-1.9B-Character)和已有数据方法(BeyondDialogue, Crab, CoSER)。
  36. 提供 Basic / Enhance 两套 system prompt,分别用于 Actor 和 Scene Manager,并做提示词消融。
  37. 外部评测:CharacterArena(对战胜率)、CharacterBench(单轮人物一致性等 13 指标)+ 人类偏好实验,对 AI 判分做交叉验证与偏差分析(多个 judge 模型对同一轨迹打分一致性)。

整体方法论特点:以“统一消息格式 + 显式调度 agent + 专门训练/评估数据集”的方式,把沉浸式、多角色、动态场景 role-playing 从 prompt 工程问题升级为一个系统建模问题,并用轨迹级评估替代单轮指标。

关键发现

局限性

未来工作方向

整体评价

AdaMARP 这篇工作不是在“再做一个角色 LLM”,而是在“重新定义角色扮演系统的架构”:以环境感知的统一消息格式为底座,用显式 Scene Manager 做编排,再配套有针对性的训练数据和轨迹级评测框架。实验结果表明,这种系统化思路确实能让中等尺寸开源模型在沉浸度、角色一致性、环境利用和多角色协调上达到甚至超越部分闭源大模型的水准。其主要价值体现在三点:
1)方法论层面为“多智能体沉浸式交互”提供了一套可复现的设计范式;
2)数据与评测层面给出了细粒度、可扩展的开源资源(AdaRPSet、AdaSMSet、AdaptiveBench);
3)经验上揭示了“数据匹配任务”的重要性:不合适的 role-play 数据会拉低自适应场景表现,而专门设计的数据可以显著放大小模型的能力。局限在于:高度依赖闭源 LLM 作为 teacher、裁判和数据生成器,且目前仍主要停留在文本和模拟环境层面。但总体而言,这是近年来在“LLM 角色扮演/agent 化交互”方向上,非常有系统性和工程可落地性的一篇工作。