本地跑"赛博 AI 女友":四个开源模型串成流水线,15G 显存、断网也能聊
拔了网线,它照样能跟你聊天。
这句话是这套"赛博 AI 女友"方案最值钱的地方。市面上一堆所谓的 AI 女友教程,本质是调云端 API——你说的每句话都被发到别人服务器。而零度博客这套,是把四个开源模型拼成一条本地流水线,全程不联网、不用任何 API Key。我把它通读了一遍,把值得记的、容易踩的坑都摊开讲。
这东西到底是什么,值不值得折腾
先说清楚它不是什么:不是一个装上就用的软件。它是把语音识别、大模型、语音合成三样东西,在一台家用电脑上串成一条实时对话的流水线。
你最终能得到什么?
- 对着麦克风说话,它听懂(不用打字)
- 用你指定的音色回应——3 秒音频就能克隆一个音色
- 可以随时打断,像跟真人说话
- 完全离线,断网可用,无数据外传
- 随时热切换人格和音色,不用重启
作者原话里有个判断我很认同:很多人卡在"怎么本地部署",其实没必要自己硬想,直接把流程丢给 Claude,让 AI 帮你部署就行。文末还放了一键安装包。所以门槛没想象中高,关键是理解它怎么跑。
四层流水线:别把它想成"一个 AI"
小白最容易犯的错,是把它当成"一个 AI"。其实是四个各司其职的模型接力:
你说话
↓
① VAD 判断"你说完了没" ← Silero VAD v5
↓
② STT 语音转成文字 ← Whisper
↓
③ LLM 理解 + 生成回复文字 ← llama.cpp 跑本地大模型
↓
④ TTS 文字变成语音 ← Qwen3-TTS
↓
你听到声音理解这四层特别重要。出问题的时候,你才知道去查哪一环——后面的排错表就是严格按这个顺序排的。
各模块为什么这么选:
- VAD 用 Silero VAD v5:轻、快,专门干"这句话说完了没"这一件事,决定什么时候把音频喂给 STT
- STT 用 Whisper:开源语音识别的老面孔,本地跑不依赖云服务
- LLM 用 llama.cpp:把本地大模型量化后吃进显存,回复的"脑子"在这
- TTS 用 Qwen3-TTS:把文字合成成指定音色的语音,3 秒参考音频就能克隆
显存怎么压进 15G
四个模型同时驻留显存,作者实测压进 15G。吃的不是均匀的四份,大头在 LLM 和 TTS。
我的经验(也呼应评论区里 RTX 4060 笔记本 8G 显存用户的疑问):8G 是真吃紧。建议 12G 以上才舒服。不够的话两条路:
- LLM 降一档量化——比如从 Q4 降到 Q3,显存立刻松一截,质量掉一点但对话够用
- TTS 换 0.6B 小模型——Qwen3-TTS 有不同尺寸,小模型省显存、音色稍弱但能跑
底座项目是 huggingface/speech-to-speech,本地大模型切换靠 llama-swap(作者特意在排错里让你回第 8 步 curl 验证它通没通)。模型下载国内推荐 ModelScope,比从 HuggingFace 直连稳。
最阴险的坑:LLM 回复不限制,语音就崩
这是我读完整篇最想拍桌子的一条经验。
大模型默认会输出 Markdown、编号列表、emoji、(轻轻笑了笑) 这种动作描写。而 TTS 是逐字朗读的——你会听到你的"女友"一本正经念:"一、点、我很开心、括号、轻轻笑了笑、括号"。
更要命的是长度。不限制的话,模型吐一大段,TTS 一读就是三十秒,对话节奏直接报废。所以 system prompt 里这几条必须焊死:
- 每次回复不超两句话,总共不超 40 字
- 用日常口语,禁 markdown、列表、编号
- 禁任何 emoji、颜文字、括号内的动作描写
- 不复述我的问题,直接回应
- 数字用中文写(说"三点"不说"3点"),否则语音合成读错
第 1 条尤其关键。不卡长度,体验崩掉的头号原因就是它。
排错表:按流水线顺序一查一个准
照四层顺序查,基本一查一个准:
| 现象 | 大概率原因 | 怎么修 |
| 说话完全没反应,日志无输出 | VAD 阈值太高 | --thresh 从 0.4 降到 0.3 |
| 环境噪音也能触发 | VAD 阈值太低 | --thresh 升到 0.5 |
| 有识别文字但没回复 | llama-swap 没通 | 回第 8 步 curl 验证 |
| 有回复文字但没声音 | 参考音频路径错 / qwen_tts 没装 | 查路径;pip list | findstr qwen |
| 声音尖锐像 1.5 倍速 | 重采样没生效 | 确认装了 scipy |
| 说完一句再也不理你 | 麦克风没被交还 | 看日志有无异常报错 |
| CUDA out of memory | 显存不够 | LLM 降量化,或 TTS 换 0.6B |
| 第一句话卡 3 秒 | 预热没跑完 | 正常,第二句起就快 |
| IndentationError | 第 6 步缩进改错 | 用 4 空格,别用 Tab |
| 各种 ModuleNotFoundError | 依赖没装全 | 重跑第 2 步 |
调 VAD 的建议:--thresh 在 0.35–0.45 之间试,--min_silence_ms 500 左右。一定要在自己麦克风上实测——每个人收音环境差很大,抄别人的参数不一定灵。
一点清醒:它是玩具,不是感情
作者自己写了段话,我觉得该原样保留态度:技术很有意思,能把语音识别、大模型、语音合成在一台家用电脑串起来,几年前不可想象。但也提醒一句——它终究是个概率模型在生成文字,别把它当成真实的情感关系去投入。当个有趣的技术玩具,或者本地 AI 部署的实战项目,才是最合适的位置。
合规上:所用模型均为开源协议可自由使用;声音克隆请在获得授权前提下进行。代码层面,Qwen3-TTS 开源才半年、官方 API 还在迭代,作者特意把推理调用隔离在 qwen3_tts_handler.py 的 _synth() 一个方法里——哪天官方接口变了,你只改那几行,不用动别处。
资源下载
- 改造文件包(含
qwen3_tts_handler.py、voice_registry.py、characters.json):见下方下载链接 - 底座项目:https://github.com/huggingface/speech-to-speech
- Qwen3-TTS:https://github.com/QwenLM/Qwen3-TTS
- llama-swap:https://github.com/mostlygeek/llama-swap
- 模型下载(国内推荐):https://modelscope.cn
部署过程遇到问题,欢迎在视频的评论区留言,把报错的完整日志贴出来,我看到会回复。

评论(0)