AI能实现真正的沉浸式扮演了。
大语言模型在角色扮演任务上进展迅速,但现有系统往往缺乏沉浸感和适应性:
环境信息未被充分建模,场景与角色也多为静态,难以支撑多角色调度、场景切换、动态引入新人等复杂叙事需求。
现在,浙江大学联合腾讯优图实验室提出
AdaMARP
(Adaptive Multi-Agent Interaction Framework for General Immersive Role-Playing)——
一种面向通用沉浸式角色扮演的自适应多智能体交互框架。
该框架通过四通道消息格式和场景管理器,让AI不仅会「说」,还会「想」、会「动」、会「感知环境」,并在复杂叙事中灵活切换场景、动态引入新角色。
目前该工作已被ACL 2026接收。
从跟AI聊天到和角色共处
大语言模型在角色扮演任务上的应用正快速普及:
用户可以设定任意角色(历史人物、小说角色、原创人设),与AI进行持续的叙事互动。
理想状态下,AI应当能够代入这个角色,在情境中保持人设一致、对环境敏感、对他人话语做出贴合关系的回应。
但现实中,大多数系统更像是会说话的聊天机器人:对话虽流畅,却缺少情境感和叙事张力。
以探案为例,故事往往在一个固定场景、固定人物之间反复进行,无法四处搜证、无法与不同证人轮番对质、无法让环境线索真正参与推理,缺乏真正的剧情推进和世界变化。
现有方法缺了环境信号,也缺了“组织者”
研究团队指出,当前角色扮演系统主要存在两类局限。
一、沉浸感不足:环境被当成「背景板」
不少工作只建模角色的台词(Speech);后来有研究加入了动作(Action)或内心独白(Thought),但在叙事中,环境并非可有可无的装饰。
它会塑造氛围、推动因果,连接角色的行动、世界的变化与后续对话。
例如:案发现场地毯上的蜡痕、煤气灯照出的阴影角度、证人住所门口未干的泥渍……
这些环境信号既能支撑推理(蜡痕指向婚礼蜡烛,泥渍暗示来客方向),也能成为剧情转折的契机(换一个场景,就换一批证人和线索)。
若系统不把环境当作与台词、动作同等重要的信号来建模,角色就容易像是在一个空房间里自言自语,探案也就失去了「搜证」的实感。
二、互动结构过于静态:缺一个「会调度的导演」
多数系统假定:场景不变、人物不变、用户与某个固定角色一问一答。
但探案恰恰需要四处搜证:从案发现场到苏格兰场,从房东太太的公寓到嫌疑人的宅邸,每个场景都有不同的环境和证人。
谁来接下一句?是先问管家还是先问马车夫?何时换场景、何时引入新证人?
现有框架很少系统性地回答这些问题。
没有这些能力,故事就很难自然地「演下去」,更像是在一个封闭的聊天室里重复对话,而非一场真正的调查。
AdaMARP:四通道消息格式+场景管理器
AdaMARP从两个方向回应上述问题。
沉浸式消息格式: Thought–Action–Environment–Speech
AdaMARP 为每一轮交互定义了一种四通道交织的消息格式:
这样,一个完整的回应可以同时包含思考、动作、环境感知和言语,且顺序可灵活交织。
例如,福尔摩斯在讯问证人时: [他在回避具体时间,那段时间他不在场](用烟斗轻轻敲了敲桌面)案发当晚八点到九点,您究竟在哪里?
环境线索 → 内心推理 → 施压动作 → 追问话语,四者形成一条清晰的因果链,更贴近真实探案的节奏。
同时,环境不再只是点缀。
案发现场的物证摆放会支撑角色的推理链条;证人住所的布置(凌乱的书桌、未拆的信件)可以暗示性格与行踪;场景切换则自然引入新的证人与线索。
环境既参与氛围营造,也参与推理与叙事的因果。
自适应框架:三智能体+场景管理器的五种动作
AdaMARP将角色扮演建模为三个智能体的协作:
Actor模型:扮演所有非用户角色;
User模型:代表用户方(可由 LLM 模拟或真人替代);
场景管理器(Scene Manager):负责高层调度与控制。
场景管理器通过一组离散动作来驱动整场「演出」:
init_scene:初始化场景(如:贝克街 221B,或某起凶案现场);
pick_speaker:选择下一句由谁来说——是福尔摩斯追问、华生补充,还是证人陈述?并给出理由;
switch_scene:切换场景(从案发现场到证人公寓,从苏格兰场到嫌疑人宅邸);
add_role:在叙事中动态引入新角色(新发现的证人、突然登门的访客,含人设与动机);
end:结束本场互动。
每一步决策都会输出对应的理由,使调度过程可解释、可约束。这样,系统既能决定「谁来接话」,也能决定「何时换场景搜证」「何时引入新证人」,从而支持更复杂、更开放的多角色探案叙事。
上述设计在实践中如何运转?不妨看一段福尔摩斯探案叙事的拆解。
各环节均由场景管理器调度,需要注意的是本案例仅仅用于理解,省略了部分细节例如详细的角色档案、角色动机场景管理器的原始输出等
完整示例:探案叙事中的AdaMARP
角色:福尔摩斯、华生。
初始场景:伦敦东区某寓所三层,案发后的深夜。厚重的窗帘半掩,煤气灯在风中摇曳,在墙面上投下晃动的影子。壁炉已熄,余烬旁的地毯上有一小块凝固的蜡痕,不远处散落着几根烧尽的火柴。福尔摩斯与华生立于现场中央,窗外隐约传来泰晤士河上的汽笛声。
场景管理器
选择的动作为:pick_speaker(speaker: 福尔摩斯)
理由:侦探应先勘察现场并给出初步推理
福尔摩斯: [烛泪的位置和形状……婚礼蜡烛,而且是左手持烛](蹲下身捻起碎屑嗅了嗅,站起身)华生,去查查最近三个月内举办过婚礼、且家中有人左撇子的家庭。
场景管理器
选择的动作为:pick_speaker(speaker: 华生)
理由:福尔摩斯已下达指令,助手应领命执行
华生:(点点头)明白(推门而出)
场景管理器
选择的动作为:switch_scene
理由:华生已前往调查,需切换至下一个搜证地点——案发地邻居的住所
新场景:白教堂附近一栋老式公寓,房东太太的住处。狭窄的木楼梯吱呀作响,扶手蒙着一层油腻。二楼的走廊昏暗,炖菜的气味从尽头的厨房飘来。门厅狭小,壁炉上摆着一只廉价的瓷钟,墙角堆着未拆的信件。
场景管理器
选择的动作为:add_role(new_role: 房东太太,案发现场的邻居,这栋公寓的房东)
理由:作为案发地邻居,可能掌握关键证词,需引入讯问
场景管理器
选择的动作为:pick_speaker(speaker: 福尔摩斯)
理由:讯问应由侦探主导开场
福尔摩斯:(摘下礼帽,微微颔首)夫人,案发当晚八点到九点,您是否听见三楼有任何异常声响?
场景管理器
选择的动作为:pick_speaker(speaker: 房东太太)
理由:需听取证人对时间线的陈述。
房东太太:
场景管理器
选择的动作为:pick_speaker(speaker: 福尔摩斯)
理由:证人出现回避迹象,应继续追问施压
福尔摩斯:[她在回避具体时间](用烟斗轻轻敲了敲桌面)那段时间,您究竟在哪里?
场景管理器
选择的动作为:pick_speaker(speaker: 房东太太)