科学技术是生产力,而且是第一生产力。——邓小平

PersonaPlex:让语音模型“会说话”只是起点,它还要会“扮演”、会“换嗓音”,并且能全双工实时对话

PersonaPlex 有点像一位舞台总监,站在后台对着一群全双工语音模型拍手叫停:

“你不要只会把字念成声音。你要有角色。你要有声音。你要在对话里能抢话、能接话、能打断、能继续,像人一样。”

它的定位写得很直白:

PersonaPlex: Voice and Role Control for Full Duplex Conversational Speech Models

而 NVIDIA 给这个仓库的描述也很简洁:PersonaPlex code.
干净利落,像一句“人到工位,活到嘴边”。


PersonaPlex 到底是什么:一位“实时全双工”的语音对话演员

PersonaPlex 是一个 real-time、full-duplex、speech-to-speech 的对话模型。

它不满足于“听你说完再回答”的礼貌,它更像真实交流里的那种节奏:
你说着它能接;你停顿它能补;你插话它能扛;你打断它能转。

更关键的是,它不仅会“对话”,还会“演”:

  • persona control(角色控制):通过 text-based role prompts(文本角色提示)控制它扮演什么身份、什么口吻、什么背景、什么任务
  • voice conditioning(声音条件控制):通过 audio-based voice conditioning(基于音频的声音条件)控制它“用什么嗓音说话”

你给它一句角色设定,它就换上对应的“人格外套”;
你给它一个 voice prompt,它就换上对应的“声纹外衣”。

它不是一台播音器,它是一位可控的“语音角色演员”。


你能立刻抓住它的入口:权重、论文、Demo、社区

PersonaPlex 在 README 里把入口摆得像一排舞台指示灯:

  • 🤗 Weights:nvidia/personaplex-7b-v1
  • 📄 Paper:https://arxiv.org/abs/2602.06053
  • 🎮 Demo:https://research.nvidia.com/labs/adlr/personaplex/
  • Discord:https://discord.gg/5jAXrrbwRb

它的态度很像:
“别光看我简历,直接上台看我演。”


使用 PersonaPlex:先把它的“发声器官”装好,再让它开口

PersonaPlex 对环境很诚实:要让语音跑得顺,基础设施要到位。

Prerequisites:安装 Opus 音频编解码库(开发库)

它先要求你安装 Opus audio codec development library

1
2
3
4
5
# Ubuntu/Debian
sudo apt install libopus-dev

# Fedora/RHEL
sudo dnf install opus-devel

Opus 像 PersonaPlex 的“喉咙和声带接口”。
没有它,声音就算想出来,也���不了地。


安装:把代码请进来,把依赖穿上身

README 给出的安装方式很直接:下载仓库,然后用 pip 安装:

1
pip install moshi/.

这里的 PersonaPlex 像是“住在 moshi 这套运行架构里”,你把 moshi 装好,它就能在里面走动、说话、完成一整套对话流程。

Blackwell GPU 的额外一步(建议)

针对 Blackwell 架构 GPU(README 引用了 issue 讨论):

1
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu130

像是给 PersonaPlex 的“肌肉系统”换上更适配的力量来源,让它在新一代 GPU 上跑得更顺。


接受模型协议:它要先确认你“有资格上台”

PersonaPlex 的权重在 Hugging Face 上,需要你登录并接受 license:

  • nvidia/personaplex-7b-v1 页面接受 license
  • 然后设置 Hugging Face token:
1
export HF_TOKEN=<YOUR_HUGGINGFACE_TOKEN>

这一步很像剧场入口的检票:
票在你手上,它才愿意让你进场开演。


启动服务:让 PersonaPlex 站上台,开启实时互动(带临时 SSL)

PersonaPlex 提供了一个用于实时交互的 server,并且会生成临时 SSL 证书用于 https:

1
SSL_DIR=$(mktemp -d); python -m moshi.server --ssl "$SSL_DIR"

启动后,你可以在浏览器里打开 Web UI:

  • 本地运行:localhost:8998
  • 否则就看脚本输出的访问链接,例如:
    • https://11.54.401.33:8998

它像一位刚开机的“舞台主持人”:
“观众请入座,入口在这里。”

CPU Offload:显存不够?它愿意把一部分重担交给 CPU

如果 GPU 显存不足,PersonaPlex 允许你使用 --cpu-offload 把部分模型层卸载到 CPU(需要 accelerate):

先装加速组件:

1
pip install accelerate

再启动:

1
SSL_DIR=$(mktemp -d); python -m moshi.server --ssl "$SSL_DIR" --cpu-offload

它的姿态很像:
“你 GPU 扛不住没关系,我可以把行李分一些给 CPU,别让对话停下来。”


离线评测:给它一段 wav,让它回你一段 wav(同长度)

如果你不想实时交互,PersonaPlex 也提供离线脚本:输入 wav,输出 wav,并写出输出文本 json。输出音频将与输入音频 同样时长

同样,如果显存不足,README 提醒你:任何命令都可以加 --cpu-offload;或者直接装 CPU-only PyTorch 在纯 CPU 上跑离线评测。

Assistant 示例:让它以“助理”身份开口

1
2
3
4
5
6
7
HF_TOKEN=<TOKEN> \
python -m moshi.offline \
--voice-prompt "NATF2.pt" \
--input-wav "assets/test/input_assistant.wav" \
--seed 42424242 \
--output-wav "output.wav" \
--output-text "output.json"

这里的 --voice-prompt 像是它的“嗓音选择器”,--seed 像是它的“演出随机性锁”。

Service 示例:让它以“客服角色”进入工作状态(带文本角色设定)

1
2
3
4
5
6
7
8
HF_TOKEN=<TOKEN> \
python -m moshi.offline \
--voice-prompt "NATM1.pt" \
--text-prompt "$(cat assets/test/prompt_service.txt)" \
--input-wav "assets/test/input_service.wav" \
--seed 42424242 \
--output-wav "output.wav" \
--output-text "output.json"

这段命令特别像在给它下达两条指令:

  • “用这个嗓音说”
  • “用这个角色做事”

PersonaPlex 听懂后,就会把语音对话“演”出来。


Voices:它的声线衣柜(NAT / VAR)

PersonaPlex 支持大量声音,README 里说他们预打包了两类 embedding:

  • NAT(Natural):更自然、更像日常对话
  • VAR(Variety):更丰富、更有变化

固定声线集合如下:

1
2
3
4
Natural(female): NATF0, NATF1, NATF2, NATF3
Natural(male): NATM0, NATM1, NATM2, NATM3
Variety(female): VARF0, VARF1, VARF2, VARF3, VARF4
Variety(male): VARM0, VARM1, VARM2, VARM3, VARM4

它像一个随身化妆间:
你今天想自然亲切,就换 NAT;
你今天想更戏剧化一点,就换 VAR。


Prompting Guide:它的“角色剧本”怎么写,它才会演得像

PersonaPlex 的训练背景很明确:
它在固定 assistant 角色与多变的 customer service 角色上,使用合成对话数据训练;同时也包含来自 Fisher English Corpus 的真实对话,并通过 LLM 标注 prompt。

也就是说,它不只是“能说”,它是“按角色说”,并且知道自然对话的节奏和气口。

Assistant Role:智慧友善的老师

README 给出了 assistant role 的 prompt:

1
You are a wise and friendly teacher. Answer questions or provide advice in a clear and engaging way.

它像在对 PersonaPlex 说:
“你现在不是模型,你是一位老师。别端着,讲清楚,讲好听。”

并且建议该 prompt 用于 FullDuplexBench 中 QA assistant 的 “User Interruption” 评测类别。

Customer Service Roles:客服角色可以写得很具体、很“有设定感”

README 给了多个例子(这里是片段式展示,保持原意):

  • 你在某个公司、你的名字、要核验客户、当前排班、下一次上门……
  • 你在某个餐厅、菜单、价格、口味……
  • 你在某个无人机租赁公司、档期、价目表……

这些 prompt 像是把 PersonaPlex 直接塞进一个可运行的“服务现场”,它就会用相应的身份去说话、去应答。

Casual Conversations:轻松聊天也有“底层提示”

README 给了一个基础 prompt,并指出在 FullDuplexBench 的某些评测类别里推荐使用:

1
You enjoy having a good conversation.

这句像是给它一个很人类的心理暗示:
“你不是为了回答而回答,你是真的喜欢聊天。”


Generalization:它不止会演客服,还能聊太空反应堆

README 提到:Personaplex finetunes Moshi,并受益于底层 Helium LLM 的泛化能力(并附了 Helium 的链接��。

于是你甚至可以把它扔到一个极端场景里:比如“去火星的飞船上修反应堆”,它也能按照 prompt 的要求进入状态。

它像一个训练有素的演员:
剧本换了也不慌,场景再离谱也能接住。


前端 client:moshi-client(Demo 的前台)

仓库里还有 client/README.md,它明确说:

  • moshi-client:Frontend for the demo.

运行 client 的流程偏前端工程化:

  • 需要 Node(推荐用 NVM 管理版本)
  • 生成 cert.pemkey.pem 放到该 package 根目录
  • 创建 env.local,配置 VITE_QUEUE_API_PATH(默认 /api
  • 安装依赖:npm install
  • 开发运行:npm run dev
  • 构建:npm run build

并且还支持 “Skipping the queue” 的独立使用方式:
项目运行后访问:

  • /?worker_addr={WORKER_ADDR}

例如:

  • https://localhost:5173/?worker_addr=0.0.0.0:8088

它像一个懂得“插队走捷径”的前台:
“你想单机直连 worker?我给你开个后门入口。”


License:代码 MIT,权重 NVIDIA Open Model License

README 明确写了两层 license:

  • 代码(code):MIT license
  • 模型权重(weights):NVIDIA Open Model license

PersonaPlex 像一个把规则写在门口的剧场:
舞台(代码)开放,演员(权重)有自己的演出合同。


Citation:如果它帮你写论文,它也想在参考文献里留个名字

README 给出了引用格式(BibTeX):

1
2
3
4
5
6
7
8
9
@misc{roy2026personaplexvoicerolecontrol,
title={PersonaPlex: Voice and Role Control for Full Duplex Conversational Speech Models},
author={Rajarshi Roy and Jonathan Raiman and Sang-gil Lee and Teodor-Dumitru Ene and Robert Kirby and Sungwon Kim and Jaehyeon Kim and Bryan Catanzaro},
year={2026},
eprint={2602.06053},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2602.06053},
}

它的语气像是演出结束后的谢幕:
“如果我这场表演对你有用,记得在论文里也让我上台鞠一躬。”