首页 关于我 项目 博客 图谱 简历 联系 English
返回列表
2026年8月21日

WhisperaPet

在 Whispera 的实时语音框架上换掉本地模型,接入 DeepSeek 与 GPT-SoVITS,做成能切换人格的语音桌宠。

#Electron#Python#WebSocket#ASR#TTS#LLM

对话的主逻辑我自己已经写好了,缺的是一个能跑起来的实时语音框架。WhisperaPet 就是把这两半拼起来的产物。

思路

借用 Whispera 的实时语音能力(Electron 前端、Silero VAD 打断、WebSocket 协议、流式播放),换掉它自带的本地大模型和本地 TTS:

  • 本地 llama-server + GGUF → DeepSeek API
  • 本地 VoxCPM 流式 TTS → GPT-SoVITS api_v2 服务
  • ASR 从 SenseVoiceSmall → 复用 GPT-SoVITS 自带的 paraformer 快照

做了什么

  • 人格系统:新增 personas/<id>/ 目录,每个人格一个 SKILL.md(人格技能)加一个 voice.json(参考音频、提示文本、可选微调权重)。加新人格只要建目录放文件,不用改代码。
  • 一键切换:切换人格时同时更新 LLM 的 system prompt、TTS 的参考音频,以及 GPT-SoVITS 的微调权重,切换完前端会提示已生效。
  • 权重缓存:GPT-SoVITS 的权重是服务端全局状态,所以给已加载的组合做了缓存,避免每次合成都重载;微调人格和零样本人格来回切也不会串音色。
  • 一键启动脚本:把 Python 解释器复用、TTS 服务拉起、模型校验和 Electron 启动串成一条命令。

踩过的两个坑

  1. Python 3.9 类型注解墙:GPT-SoVITS 的便携 runtime 自带 Python 3.9,而后端路由用了 3.10+ 的 X | Y 联合类型注解,FastAPI 注册路由时直接崩。
  2. ASR 与 funasr 版本不兼容:SenseVoiceSmall 的快照不带 funasr 1.0.27 需要的 dims 元数据,加载时报缺 10 个必填参数。最后改成复用 GPT-SoVITS 自带、日常在用的 paraformer 中文快照。

两个问题的现象、根因和验证方式都记在了项目文档里。