personaplex
科学技术是生产力,而且是第一生产力。——邓小平
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 | # Ubuntu/Debian |
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 | HF_TOKEN=<TOKEN> \ |
这里的 --voice-prompt 像是它的“嗓音选择器”,--seed 像是它的“演出随机性锁”。
Service 示例:让它以“客服角色”进入工作状态(带文本角色设定)
1 | HF_TOKEN=<TOKEN> \ |
这段命令特别像在给它下达两条指令:
- “用这个嗓音说”
- “用这个角色做事”
PersonaPlex 听懂后,就会把语音对话“演”出来。
Voices:它的声线衣柜(NAT / VAR)
PersonaPlex 支持大量声音,README 里说他们预打包了两类 embedding:
- NAT(Natural):更自然、更像日常对话
- VAR(Variety):更丰富、更有变化
固定声线集合如下:
1 | Natural(female): NATF0, NATF1, NATF2, NATF3 |
它像一个随身化妆间:
你今天想自然亲切,就换 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.pem和key.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 | @misc{roy2026personaplexvoicerolecontrol, |
它的语气像是演出结束后的谢幕:
“如果我这场表演对你有用,记得在论文里也让我上台鞠一躬。”
