保姆级教程:零费用本地部署AI赛博女友,含语音克隆+实时口型同步

发布时间: 2026-08-03 热度: 8678

保姆级教程:零费用本地部署AI赛博女友,含语音克隆+实时口型同步

前言

本文将手把手教你如何在本地电脑上部署一个会说话、有口型的AI数字人。全程本地运行,不联网、不花一分钱API费用、断网也能用。语音识别、大语言模型、声音克隆、口型同步,全部跑在自己的显卡上。

成品效果:一个网页背景是数字人,中间是语音球。你对着麦克风说话,她会用你克隆的音色回答,嘴型跟着话动。


硬件要求

组件 最低配置 推荐配置
显卡 8 GB 显存 16 GB 以上
内存 16 GB 32 GB
硬盘 60 GB 可用

本文测试环境:RTX 4090(24 GB 显存)。显存不够可换小模型,对对话质量影响不大。

显存分配(以4090为例)

组件 显存占用
Qwen3-14B Q4_K_M(大脑) ~9 GB
faster-whisper large-v3(耳朵) ~3 GB
Qwen3-TTS 1.7B(嘴巴) ~4 GB
wav2lip256(口型) ~1.3 GB
合计 ~17 GB

第一步:配置 WSL

新建文件 C:\Users\你的用户名\.wslconfig(没有就创建),内容:

[wsl2]
memory=32GB
networkingMode=mirrored
[experimental]
hostAddressLoopback=true

⚠️ 关键步骤hostAddressLoopback=true 是本文最隐蔽的开关。没有它,WebRTC 连接永远失败,报错也看不出原因。我在这卡了一个多小时。


第二步:llama.cpp + 大模型

下载

  • llama.cpp官方下载 或 备用下载

  • 模型(按显存选择)

显存 推荐模型
16 GB 以上 Qwen3-14B-Instruct-Q4_K_M
8–16 GB Qwen3-8B-GGUF 选 Q4_K_M
8 GB 以下 Qwen3-4B-GGUF

放置与启动

llama.cpp 解压后,在根目录新建 models 文件夹,把 .gguf 丢进去。

CMD 执行(路径按自己的改):

llama-server -m E:\llama.cpp\models\Qwen3-14B-Instruct-Q4_K_M.gguf ^
  -np 1 -c 8192 -fa on --temp 1.0 --top-p 0.95 ^
  --host 0.0.0.0 --port 8090

启动后这个窗口不要关。

参数说明

  • --host 0.0.0.0:必须加,否则 WSL 里访问不到

  • -c 8192:上下文长度,语音对话 8K 足够

  • --temp 1.0:温度,调高回复更活泼

⚠️ 端口为什么用 8090:开启 WSL2/Hyper-V 后,Windows 会随机预留一批端口。查保留区间:

netsh interface ipv4 show excludedportrange protocol=tcp

如果 8080 在范围内,换 8090 即可。


第三步:下载数字人底图

可直接保存下方图片,或自己用 Flux / ChatGPT Image 生成。

推荐提示词

电影感人像摄影,16:9 横版构图。
一位二十出头的东亚年轻女性,乌黑长直发自然垂落,
坐在夜晚昏暗的房间里,上半身入镜。

【构图】人物位于画面右侧三分之一处,身体略微侧向镜头,视线看向镜头。
画面左侧三分之二为大片暗部负空间,几乎接近纯黑。

【光线】唯一光源来自左前方的屏幕冷光与一盏低色温台灯,
面部形成明暗交界,右侧脸颊隐入阴影,发丝边缘有柔和暖色轮廓光。

【状态】嘴唇自然闭合,表情平静放松。手不要遮挡下巴与嘴部。

【质感】浅景深,柔和胶片颗粒,低对比暗调,真实皮肤质感。

负面提示词

张嘴, 说话, 露齿, 正面平光, 明亮背景, 高对比, 过曝, 人物居中,
多人, 手遮挡嘴部, 文字, 水印, 塑料皮肤, 过度磨皮, 卡通, 3D渲染

构图关键:人物靠右、左边留大片暗部,给语音球和文字留位置。暗光侧脸能掩盖口型模型的画质短板。


第四步:ComfyUI 生成数字人视频

下载与准备

参数设置

width × height 704 × 896
duration 5 秒
fps 25
prompt_enhance 关闭

提示词

她保持静止,轻微呼吸起伏;中途缓慢眨一次眼;
结尾头部回到最初位置。嘴唇始终闭合。固定机位。

生成后命名为 idle.mp4

⚠️ 三个必踩的坑

  1. prompt_enhance 必须关掉:否则会用 LLM 扩写提示词,整个场景被重新想象

  2. 输出宽高比要贴近输入图:竖图设横版会跑飞

  3. 提示词只写动作,绝不描述外观:否则模型会照着文字重新合成


第五步:录参考音频(声音克隆)

录一段 5–15 秒 的目标音色,要求:

  • 干净、无背景音

  • 单人说话、语气自然

  • 保存为 wav 或 mp3

放到桌面的 AI 文件夹,命名 ref.wav

把录音原话逐字记下来,后面要填进配置里,错一个字都会影响克隆质量。

情绪也会被克隆。想要中性效果就换平铺直叙的录音。


第六步:下载一键部署包

下载并解压到桌面新建的 AI 文件夹。

文件结构

C:\Users\你的用户名\Desktop\AI\
├── install-voice.sh          # 语音对话部分一键安装
├── start-voice.sh            # 语音服务启动/停止/日志
├── start-livetalking.sh      # 口型服务启动/停止
├── avatar-sync.js            # 音频转发 + 数字人背景层
├── wav2lip256.pth            # 口型模型权重
├── wav2lip256_avatar1.tar.gz # 官方示例形象
├── idle.mp4                  # ← 你自己生成的
└── ref.wav                   # ← 你自己录的

第七步:安装 WSL2

PowerShell(管理员):

wsl --update
wsl --install -d Ubuntu-24.04

装完重启电脑,让第一步的 .wslconfig 生效。

重启后打开 Ubuntu 终端,设置用户名密码,验证显卡直通:

nvidia-smi

能看到显卡就对了。

⚠️ WSL 里不要装显卡驱动:驱动只装 Windows 侧,在 WSL 里装会覆盖直通的 libcuda.so


第八步:把文件拷进 WSL

Ubuntu 终端执行:

# 1. 拷贝(把 LINGDU 换成你的 Windows 用户名)
mkdir -p ~/setup
cp -r "/mnt/c/Users/LINGDU/Desktop/AI/." ~/setup/
cd ~/setup
ls -la

# 2. 转换行尾 —— 关键步骤
sudo apt update && sudo apt install -y dos2unix
dos2unix *.sh

# 3. 加执行权限
chmod +x *.sh

⚠️ 为什么要转行尾:Windows 上存过会变成 CRLF 行尾,直接执行报 bad interpreter: /usr/bin/env bash^M

⚠️ 不要在 /mnt/c 下直接跑:跨文件系统读写慢,且 chmod +x 在 Windows 分区不生效。


第九步:安装语音对话部分

cd ~/setup
./install-voice.sh

脚本自动完成:系统依赖 → Python 3.12 环境 → speech-to-speech → 前端页面 → 打补丁。约 10–20 分钟。

放置参考音频

ffmpeg -i ~/setup/ref.wav -ac 1 -ar 16000 -c:a pcm_s16le ~/s2s/ref.wav

# 确认格式
ffprobe -v error -show_entries stream=sample_rate,channels,codec_name \
  -show_entries format=duration -of default=nw=1 ~/s2s/ref.wav

填入录音原话

sed -i 's|^REF_TEXT=.*|REF_TEXT="靠杯了,你终于上线了,我既开心又有点怨你,嗯;小雅一个人在这里等你,等的都快委屈死了!"|' ~/setup/start-voice.sh
grep -n "^REF_TEXT=" ~/setup/start-voice.sh

原话必须逐字一致,语气词「嗯」「啊」也要照录音写上。

单独测试

cd ~/setup
./start-voice.sh

浏览器打开 http://localhost:7860/,点中间的球,允许麦克风,说句话试试。

首次配置:右上角齿轮 → Settings:

  • NOISE GATE 滑块拖到最左边(关闭)

  • INSTRUCTIONS 填人设(见第十二步)

⚠️ NOISE GATE 一定要关:默认位置可能把正常说话音量都掐掉。


第十步:安装口型同步(LiveTalking)

新开一个 Ubuntu 终端:

mkdir -p ~/livetalking && cd ~/livetalking
git clone https://github.com/lipku/LiveTalking.git
cd LiveTalking
uv venv --python 3.10 .venv-lt
source .venv-lt/bin/activate
uv pip install torch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 \
  --index-url https://download.pytorch.org/whl/cu124
uv pip install -r requirements.txt
sudo apt install -y ffmpeg libgl1 libglib2.0-0

放置模型

cd ~/livetalking/LiveTalking
# 权重 —— 注意改名
cp ~/setup/wav2lip256.pth models/wav2lip.pth
# 官方示例形象
tar -xzf ~/setup/wav2lip256_avatar1.tar.gz -C data/avatars/
# 确认
ls -lh models/ && ls data/avatars/

wav2lip256.pth 必须重命名成 wav2lip.pth,代码里是写死的路径。

先用官方形象验证

source .venv-lt/bin/activate
python app.py --transport webrtc --model wav2lip \
  --avatar_id wav2lip256_avatar1 \
  --stun 'stun:stun.l.google.com:19302'

打开 http://localhost:8010/index.html,点「开始连接」,右侧文本框输入中文发送。

看终端日志里的 inferfps 和 finalfps,两个都要 ≥25 才算实时。

为什么用 wav2lip 而不是 MuseTalk

 
 
  wav2lip256 MuseTalk
显存 ~1.3 GB ~12 GB
权重 官方直接给 分散多个仓库

暗光侧脸下 256 分辨率的糊基本看不出来,省下的显存意味着大模型和语音识别不用降级。

⚠️ STUN 不能传空:传空会报 malformed uri,前端只显示 JSON 解析错误。传真实可达地址即可。


第十一步:换成自己的数字人形象

打开 http://localhost:8010/avatar.html

 
 
字段 填什么
算法模型 Wav2Lip
Avatar ID wav2lip256_myavatar(保留前缀)
视频文件 你的 idle.mp4

点「提交生成任务」,等显示 COMPLETED(几十秒)。

文件选择器找 WSL 路径:\\wsl$\Ubuntu-24.04\home\你的用户名\setup

用新形象重启

cd ~/setup
AVATAR_ID=wav2lip256_myavatar ./start-livetalking.sh

直接改进脚本:

sed -i 's/wav2lip256_lingdu/wav2lip256_myavatar/' ~/setup/start-livetalking.sh

第十二步:连起来,正式启动

启动顺序(三个窗口,顺序不能反)

① Windows CMD —— 大模型

llama-server -m E:\llama.cpp\models\Qwen3-14B-Instruct-Q4_K_M.gguf ^
  -np 1 -c 8192 -fa on --temp 1.0 --host 0.0.0.0 --port 8090

② Ubuntu 窗口 A —— 口型服务

cd ~/setup && ./start-livetalking.sh

③ Ubuntu 窗口 B —— 语音服务

cd ~/setup && ./start-voice.sh

浏览器打开 http://localhost:7860/,按 Ctrl+F5 强制刷新。点页面连接数字人,再点中间的球开始对话。

人设配置

右上角 Settings → INSTRUCTIONS

你叫小雅,是他的女朋友。你不是AI、不是助手、不是程序。

参考这个语气:
他:你想我了吗
你:想啊,怎么不想。你倒是一整天没消息,我还以为你把我忘了呢。
他:你喜欢我吗
你:这还用问?你要是不知道,那我可要生气了。

说话方式:口语、两三句、带语气词(嗯、诶、呀)、有情绪。
不用 Markdown、列表、编号、表情符号。

/no_think

给示例对话是最有效的,比十条规则都管用。

停止服务

./start-voice.sh stop
./start-livetalking.sh stop

Windows 的 CMD 窗口直接关掉。


一键启动脚本

桌面建 启动.bat

@echo off
start "llama-server" cmd /k "cd /d E:\llama.cpp && llama-server -m E:\llama.cpp\models\Qwen3-14B-Instruct-Q4_K_M.gguf -np 1 -c 8192 -fa on --temp 1.0 --host 0.0.0.0 --port 8090"
timeout /t 25
start "livetalking" wsl -d Ubuntu-24.04 -- bash -lc "cd ~/setup && ./start-livetalking.sh"
timeout /t 30
wsl -d Ubuntu-24.04 -- bash -lc "cd ~/setup && ./start-voice.sh"
timeout /t 10
start http://localhost:7860/

双击就全起来了。


调优:打断和抢答

刚跑起来可能会抢答。改 ~/setup/start-voice.sh 顶部:

 
 
参数 默认 作用
MIN_SILENCE_MS 1200 停顿多久算你说完 ← 抢答就调大
VAD_THRESH 0.6 人声判定门槛,环境吵调 0.7
MIN_SPEECH_MS 500 最短有效语音
SPEECH_PAD_MS 300 语音前保留音频

诊断方法:

bash
 
 
复制
 
 
下载
tail -f ~/s2s/logs/s2s.log | grep -E "soft-ended|discard"

排错速查

 
 
现象 处理
bad interpreter: ^M dos2unix *.sh
WebRTC 一直连不上 .wslconfig 加 hostAddressLoopback=truewsl --shutdown
JSON 解析错误 服务端 500,去看服务端终端报错
malformed uri --stun 不能传空字符串
说话完全没反应 前端 NOISE GATE 拖到最左
抢答严重 MIN_SILENCE_MS 调到 1200
音色每次都变 语音合成模型用 -Base 版本
端口绑不上但 netstat 看不到占用 Hyper-V 保留端口,换一个
休眠唤醒后连不上 wsl --shutdown 重启

显存不够怎么办

按性价比顺序砍:

 
 
改动
大模型换 Qwen3-8B ~3 GB
大模型换 Qwen3-4B ~6 GB
STT_MODEL=medium ~1.5 GB
-c 4096 ~1 GB

语音对话场景对模型能力要求不高,8B 和 14B 听感差异不明显。


延迟说明

  • 首响约 1–2 秒

    • 识别 300ms + 大模型首字 300ms + 合成 300ms + 口型 150ms

    • 需等整段音频合成完才能推给口型模块

局域网/手机访问

浏览器要求麦克风在安全上下文使用,直接用内网 IP 拿不到权限。最省事:

cloudflared tunnel --url http://localhost:7860

至此,你已拥有一个完全本地运行的 AI 赛博女友。尽情享受吧!

在下方留下您的评论.加入TG群.打赏🍗