PersonaPlex 离线推理完整教程:用 WAV 文件批量生成全双工语音对话
【免费下载链接】personaplexPersonaPlex code.项目地址: https://gitcode.com/GitHub_Trending/pe/personaplex
PersonaPlex 是 NVIDIA 推出的实时全双工语音对话模型,支持文本角色提示(Role Prompt)+ 音频音色条件(Voice Prompt)双通道角色控制,基于 Moshi 架构训练而来。除了浏览器实时对话之外,它还提供了一条离线推理通道:你只需准备一批 WAV 录音,脚本就会为每条录音生成等时长的模型回复音频 + 对应文本 JSON,全程无需麦克风、无需浏览器,非常适合新手做批量测试与复现。
离线推理和实时交互有什么区别?
PersonaPlex 有两种使用方式:
| 对比项 | 实时交互 | 离线推理 |
|---|---|---|
| 入口 | server.py + Web UI(端口 8998) | offline.py 命令行 |
| 输入 | 浏览器麦克风实时音频流 | 任意 WAV 文件 |
| 输出 | 耳机实时听到回复 | 输出 WAV(模型音频)+ JSON(文本流) |
| 适用场景 | 人工体验对话 | 批量测试、评估、复现 |
离线脚本的运行逻辑在 moshi/moshi/offline.py 中写得很清楚:加载 Mimi 音频编解码器与 Moshi 语言模型 → 预热 CUDA 图 → 注入文本提示与音色提示 →逐帧把用户 WAV 送入输入通道,自回归采样文本和模型音频 → 拼接后写出与输入等时长的 WAV 和文本 JSON。
它最大的三个优势:
- 🧪可批量:一个 shell 循环就能处理整目录录音;
- 🔁可复现:固定
--seed后多次运行结果一致; - 📄可审计:生成的每一帧文本 token 都会记录,方便检查角色是否"跑偏"。
快速安装:离线推理环境怎么搭?
只需三步装好环境。
① 安装 Opus 音频编解码库(Ubuntu/Debian):
sudo apt install libopus-dev② 从仓库安装 Python 包:
pip install moshi/.💡 使用 Blackwell 架构 GPU 的机器,建议按 README.md 的说明额外安装 cu130 版本的 PyTorch。
③ 配置 HuggingFace 令牌:先在 Hugging Face 上接受nvidia/personaplex-7b-v1的模型许可,然后设置环境变量:
export HF_TOKEN=<YOUR_HUGGINGFACE_TOKEN>验证脚本是否就绪:
python -m moshi.offline --help看到参数列表说明安装成功。模型权重、分词器与音色库(voices.tgz)都会由脚本自动从 Hugging Face 下载并缓存,无需手动搬运。
快速上手:用仓库自带 WAV 跑通第一条命令
仓库内置了两段测试录音,正好覆盖官方演示的两种角色,拿来即用:
- 用户音频:assets/test/input_assistant.wav(提问场景)、assets/test/input_service.wav(客服场景)
- 角色提示词:assets/test/prompt_service.txt
示例 1:教师助手(Assistant)角色
不带--text-prompt时,脚本默认使用内置的教师提示词("You are a wise and friendly teacher..."):
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"运行结束后你会得到两个文件:output.wav(模型说出的音频,时长与输入完全一致)和output.json(模型回复的文本 token 列表)。
示例 2:客服(Customer Service)角色
官方演示中的客服示例,用$(cat ...)把角色提示词文件作为参数传入,音色换成男声:
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"这段示例的角色设定是"家电维修公司客服 Farhod"(工单信息:洗碗机配件缺货、可用替代件延迟 3 天、人工费 $60/小时)。你可以把自己的业务信息按同样格式写进提示词,模型会围绕这些信息作答。
读懂离线推理的常用参数
| 参数 | 默认值 | 说明 |
|---|---|---|
--input-wav/--output-wav | 必填 | 用户输入录音 / 模型回复音频(等时长) |
--output-text | 必填 | 模型回复文本的 JSON 输出路径 |
--voice-prompt | 必填 | 音色提示文件名,如NATF2.pt(也支持 WAV 文件) |
--voice-prompt-dir | 自动下载 voices.tgz | 音色文件目录,省略时自动从 HF 下载解压 |
--text-prompt | 教师角色提示词 | 角色设定,自动包裹<system>标签 |
--temp-audio/--temp-text | 0.8 / 0.7 | 音频/文本采样温度 |
--topk-audio/--topk-text | 250 / 25 | top-k 采样范围 |
--greedy | 关 | 贪心解码(关闭随机采样) |
--seed | -1(关闭) | 随机种子,固定后可复现 |
--device | cuda | 运行设备,CPU 机器设为cpu |
--cpu-offload | 关 | 显存不足时把 LM 层卸载到 CPU(需pip install accelerate) |
音色库怎么选?
预打包音色分两大类(完整列表见 README.md):
Natural(female): NATF0 ~ NATF3 自然对话女声 Natural(male): NATM0 ~ NATM3 自然对话男声 Variety(female): VARF0 ~ VARF4 多样化女声 Variety(male): VARM0 ~ VARM4 多样化男声经验法则:客服 / 助手场景选NAT 系更稳,闲聊实验可以试试VAR 系更有个性。
角色提示词怎么改?
README.md 的 Prompting Guide 给了三类范例:
- 助手角色:固定提示词 "You are a wise and friendly teacher...";
- 客服角色:公司名 + 你的名字 + 业务信息,例如垃圾清运、餐厅点餐、无人机租赁;
- 日常闲聊:以 "You enjoy having a good conversation." 开头,再附加话题与人设,甚至可以让它扮演"火星任务中抢修反应堆的宇航员"。
批量生成:一个循环搞定整目录 WAV
批量生成只是把上面的命令放进 shell 循环。核心思路:输入文件变化,输出文件名跟着变,seed 统一固定:
SEED=42424242 for f in assets/test/*.wav; do name=$(basename "$f" .wav) HF_TOKEN=$HF_TOKEN python -m moshi.offline \ --voice-prompt "NATF2.pt" \ --text-prompt "You are a wise and friendly teacher. Answer questions or provide advice in a clear and engaging way." \ --input-wav "$f" \ --seed $SEED \ --output-wav "out_${name}.wav" \ --output-text "out_${name}.json" done几个实用建议:
- 批量评估时锁定
--seed:同一批录音、同一提示词、同一 seed,多次运行结果一致,便于横向对比不同提示词或音色的差异; - 输出文件名带上输入名(如
out_${name}.wav),避免互相覆盖; - 文本 JSON 是免费的"字幕轨":批量跑完后不用逐条听音频,直接扫一遍 JSON 就能判断角色设定是否生效;
- 想换角色只需改
--text-prompt:同一组录音可快速产出"助手版 / 客服版 / 闲聊版"三套对照结果。
另外,如果你更倾向于容器化部署,项目根目录的 Dockerfile 与 docker-compose.yaml 可直接拉起实时服务端,与离线脚本共用同一套代码库(moshi/)。
常见问题排查(FAQ)
Q1:启动报错找不到libopus?→ 第 1 步的libopus-dev没装。安装后重试即可。
Q2:GPU 显存不够,报 OOM?→ 加--cpu-offload参数(需pip install accelerate)把 LM 层卸载到 CPU;或者按 README 安装纯 CPU 版 PyTorch,再配合--device cpu完全用 CPU 跑离线推理。
Q3:下载权重时报 401 / 权限错误?→ 你还没有在 Hugging Face 上接受模型许可,或HF_TOKEN未设置。
Q4:输出音频和输入一样长吗?→ 是。脚本会把生成帧裁剪/补齐到与输入完全相同的时长,并以 24kHz 单声道 WAV 写出。
Q5:输入只能是 WAV 吗?→ 离线脚本面向 WAV 文件设计(--input-wav)。其他格式请先转码为 WAV 再喂入。
小结
用一句话总结本教程:装好 libopus 和moshi/.,设好HF_TOKEN,把 WAV 丢给 moshi/moshi/offline.py,就能批量产出全双工对话音频与文本。接下来不妨:
- 用 assets/test/ 的两段录音复现官方示例;
- 固定 seed,对比 NATF2 与 VARM0 两种音色;
- 把客服提示词换成自己的业务,看看模型能接住多少戏 🎙️
【免费下载链接】personaplexPersonaPlex code.项目地址: https://gitcode.com/GitHub_Trending/pe/personaplex
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考