引言
想象一下,你正与哈利·波特讨论他的第一场魁地奇比赛,紧接着,在无需切换应用程序或重新加载模型的情况下,你转身与伏地魔探讨黑魔法。虽然像 ChatGPT 这样的大型语言模型 (LLM) 已经掌握了开放域聊天,但让它们真正“保持角色设定”——尤其是同时扮演多个不同的角色——仍然是一个巨大的障碍。
当前的角色扮演代理 (RPAs) 通常面临两难境地。它们要么依赖提示工程 (告诉模型“像某某一样行事”) ,这在长对话中经常会导致角色崩坏;要么需要为每一个角色训练一个完全独立的模型,这在计算上极其昂贵且效率低下。此外,当你想要添加一个新角色时会发生什么?通常,你必须重新训练整个系统,这不仅麻烦,还通过冒着“灾难性遗忘”的风险——即模型学会了新角色,却忘记了如何扮演旧角色。
Neeko 应运而生。Neeko 以《英雄联盟》中的变身英雄妮蔻命名,是一个旨在解决多角色扮演 (MCRP) 问题的新颖框架。通过利用对低秩适配器 (LoRA) 的巧妙修改,Neeko 可以在单个模型中容纳多种截然不同的个性,在它们之间动态切换,甚至可以在不丢失旧知识的情况下即时学习新角色。
在这篇文章中,我们将剖析 Neeko 及其背后的研究论文,探索它如何使用动态架构成为终极的数字“方法派演员”。
背景: 数字表演的挑战
要理解为什么需要 Neeko,我们首先需要了解目前 AI 是如何处理角色扮演的。
三种传统方法
- 上下文学习 (In-Context Learning, ICL) : 这是最常见的方法。你只需提示模型: “你是夏洛克·福尔摩斯。” 虽然简单,但在长聊天中模型经常会偏离角色,因为“人设”只是临时上下文的一部分,而不是模型权重的一部分。
- 检索增强生成 (Retrieval Augmented Generation, RAG) : 模型从数据库中检索角色的台词或简介信息来增强其回答。这有助于提高事实准确性 (例如,知道夏洛克的地址) ,但往往无法捕捉特定的语气或说话模式 (比如夏洛克连珠炮似的推理风格) 。
- 微调 (Fine-Tuning, FT) : 你在特定的角色对话数据集上专门训练模型。这能产生最好的效果,但非常僵化。如果你想要 50 个角色,实际上就需要 50 个模型 (或者在一个包含所有角色的大模型上训练,这会混淆不同的个性) 。
效率的关键: LoRA
Neeko 建立在一种名为 LoRA (低秩适配器) 的技术之上。对于大多数研究人员来说,为每个角色训练整个 LLM (数十亿个参数) 是不可能的。LoRA 冻结了巨大的预训练模型权重 (\(W_0\)) ,并向网络中注入成对的小型可训练低秩矩阵 (\(B\) 和 \(A\)) 。
从数学上讲,对模型前向传播的修改如下所示:

这里,\(\Delta W = BA\) 代表适应新任务 (或角色) 所需的具体变化。由于 \(r\) (秩) 非常小,我们只训练了一小部分参数。
然而,标准 LoRA 有一个局限性: 它是静态的。你通常为一个任务训练一个 LoRA 适配器。Neeko 提出的问题是: 如果我们能切分 LoRA 适配器,并将不同的切片分配给不同的角色,会发生什么?
Neeko 框架
Neeko 将 MCRP 任务视为由三个阶段组成的生命周期: 代理预微调、多角色扮演 (推理) 和增量学习 。

如上图 1 所示,该架构旨在让角色数据在同一个模型中保持独特且可访问。让我们分解每个阶段的技术创新。
1. 代理预微调: 分配“块”
在标准方法中,如果我们想让模型学习哈利·波特、伏地魔和多比,我们会将它们所有的对话一次性输入模型。结果会怎样?一个困惑的模型,可能会让伏地魔像多比一样礼貌地道歉。
Neeko 使用 动态 LoRA 解决了这个问题。Neeko 不是让所有人共享一个矩阵,而是将低秩矩阵 \(B\) 和 \(A\) 分割成互不重叠的“块”。
如果我们有 \(M\) 个角色,矩阵会被切分,使得每个角色 \(k\) 拥有一特定范围的参数。角色 \(k\) 的训练更新只触及他们特定的块:

通过只更新特定的索引 (\(W_B^k\) 和 \(W_A^k\)) ,一个角色的梯度下降不会干扰另一个角色的参数。这确保了哈利·波特的勇敢语气不会渗透进伏地魔的恶意说话模式中。

2. 推理: 门控机制
一旦模型在多个角色上进行了训练,它在对话过程中如何知道该使用哪个“块”呢?
Neeko 采用了一个门控网络 (Gating Network) , 其灵感来自于*专家混合 (Mixture of Experts, MoE) *架构。在训练期间,系统会根据角色档案创建一个全局角色嵌入矩阵 (\(\mathbf{E}_{\text{global}}\)) 。
当用户与 Neeko 交互时,系统会查看输入 (或指定的角色) ,并计算与可用角色嵌入的相似度分数。这会生成一组权重 (\(w_k\)) ,决定激活哪些 LoRA 块。

门控确保了如果你在和哈利·波特说话,“哈利·波特块”会被完全激活。有趣的是,这种机制也允许细微差别的存在。如果用户要求代理像一个与两个已知角色都有共同特征的角色行事,门控理论上可以激活块的混合体,尽管 Neeko 主要关注精确的角色选择。
3. 增量学习: 处理新角色
角色扮演代理的真正考验在于适应性。如果我们在模型训练好后想把德拉科·马尔福加入名单怎么办?重新训练整个系统太浪费了。Neeko 引入了两种策略来添加新角色,而不会发生“灾难性遗忘”。
策略 A: 融合 (针对数据有限的情况)
如果我们没有足够的对话数据从头开始训练新角色,Neeko 会通过融合现有角色来构建新角色。
它计算新角色与现有角色的相似度 (使用嵌入矩阵) ,并创建现有 LoRA 块的加权组合。例如,一个新的反派可能是由 60% 的伏地魔块和 40% 的另一个反派块构成的。

策略 B: 扩展 (针对数据充足的情况)
如果新角色有足够的数据,Neeko 只需扩展矩阵。它向 LoRA 适配器添加一个新的块。为了防止破坏以前的知识,Neeko 会冻结旧块和旧的门控参数,只训练新块和门控的扩展维度。

这在理论上允许 Neeko 随着时间的推移学习无限数量的角色,仅受限于内存。
实验与结果
为了验证 Neeko,研究人员使用了 Character-LLM-Data 数据集,并将 Neeko 与包括 LLaMA-2 (使用 ICL 和 RAG) 及标准 LoRA 微调在内的标准基线进行了比较。
他们提出了一套综合评估指标,分为三类:
- 角色一致性: 它的行为和说话方式像该角色吗?
- 知识一致性: 它是否了解角色的世界 (虚拟知识) 而不产生幻觉,同时保持现实世界知识?
- 对话一致性: 对话是否稳定且相关?
Neeko vs. 基线
如下表 1 所示的结果表明,微调 (FT) 方法通常优于基于提示的方法 (ICL/RAG) 。然而,即使在微调方法中,Neeko 也脱颖而出。

Neeko 取得了最高的稳定性得分。这证实了将角色参数分离成不同的块可以防止“个性流失”,这种现象在所有角色共享相同参数的标准 LoRA 模型中很常见。
增量挑战
研究人员随后测试了“未见过角色”的场景。他们让代理在 8 个角色上进行训练,然后引入第 9 个角色。

如上方的雷达图 (图 2) 所示,Neeko (橙色线) 始终包围着基线。
- Neeko vs. ICL/RAG: 提示方法在行为和话语风格上很吃力,因为它们并没有在深层“学会”角色。
- Neeko vs. 标准 LoRA: 标准 LoRA 在尝试增量学习新角色时表现糟糕,因为更新新角色的权重会搞乱旧角色的权重。Neeko 的独立块解决了这个问题。
人类评估
自动化指标虽然有用,但人类的判断才是对话的金标准。研究人员招募了人类评估员来对回复进行评分。

图 3 中的小提琴图直观地展示了 Neeko (红色) 的优势。与 ICL (蓝色) 、RAG (橙色) 和 LoRA (绿色) 相比,Neeko 的大部分分布都向高分 (6-7分) 偏移,特别是在避免幻觉和保持虚拟知识一致性方面。
资源效率
人们可能会认为,为角色维护单独的块会使 Neeko 变得臃肿。然而,研究表明 Neeko 仍然非常高效。

如表 5 所示,Neeko 的内存使用量 (13.55 GB) 几乎与标准 LoRA (13.49 GB) 相同,并且大大优于需要全量微调的 Character-LLM (107.84 GB) 。这使得 Neeko 成为消费级硬件的可行解决方案,而其他方法则需要大规模的服务器集群。
结论与启示
Neeko 代表了像个性化 AI 领域迈出的重要一步。通过将多角色扮演 (MCRP) 任务形式化,并利用动态 LoRA 解决该问题,作者创建了一个既通用又高效的框架。
这项研究的主要收获是:
- 模块化行之有效: 将神经网络适配器分解为特定于角色的块可以防止干扰并保留独特的个性。
- 适应性是关键: 融合现有知识或扩展架构的能力使 AI 能够随着时间的推移而成长,而不是保持静止。
- 效率很重要: Neeko 在实现这些结果的同时,与标准参数高效微调相比,并没有显著增加计算成本。
随着我们迈向 AI 代理充当伴侣、导师和游戏 NPC 的未来,像 Neeko 这样的架构对于确保这些数字实体以用户期望的一致性、深度和多样性行事至关重要。“一种人格适应所有”的聊天机器人时代可能很快就会成为过去。
](https://deep-paper.org/en/paper/2402.13717/images/cover.png)