
想在自己的电脑上搭建一个能听、能说、有口型,能和你对话的 AI 数字人,并不用任何 AI 工具,或者花费昂贵的订阅费。把语音识别、本地大模型、声音合成和口型同步串起来,就能得到一套在本机运行的实时交互系统。
本文从硬件准备开始,带你在 Windows + WSL2 环境中完成整套部署。最终效果是:网页显示自定义的数字人,我们通过麦克风和AI数字人对话,AI 数字人会用你克隆的音色回答。
一、整套系统工作流程
这套方案不是由一个模型单独完成,而是部署多个组件:

其中,llama.cpp 负责运行本地语言模型;faster-whisper 把用户语音转成文字;Qwen3-TTS 根据参考音频生成回复声音;LiveTalking 与 Wav2Lip 则把声音变成与之匹配的嘴部动作。
二、硬件要求与显存预算
最低配置:
NVIDIA 显卡:8GB 显存
内存:16GB
可用硬盘:至少 60GB
系统:Windows 10/11,并支持 WSL2
推荐配置:
NVIDIA 显卡:16GB 显存或更高
内存:32GB 或更高
建议使用 SSD 存放模型和 WSL 文件
以 Qwen3 14B 量化模型为例,显存大致会分配为:
组件|参考显存占用
Qwen3-14B Q4_K_M|约 9GB
faster-whisper large-v3|约 3GB
Qwen3-TTS 1.7B|约 4GB
Wav2Lip 256|约 1.3GB
合计|约 17GB
24GB 显存的显卡运行这套组合会更从容。16GB 显存可以换用 8B 模型并降低上下文长度;8GB 左右则建议从 4B 模型和中型语音识别模型起步。
三、配置 WSL2 网络与内存
1. 先在 Windows 用户目录创建 .wslconfig 文件:
C:\Users\你的用户名\.wslconfig2. 填入以下内容:
[wsl2]
memory=32GB
networkingMode=mirrored
[experimental]
hostAddressLoopback=truememory 可以按实际内存修改,通常分配物理内存的一半到四分之三即可。hostAddressLoopback=true 对本机 Windows 与 WSL 之间的 WebRTC 通信尤其重要,缺少它时,后面的 WebRTC 连接会永远失败,而且报错完全看不出原因,浏览器显示 JSON 解析错误,ICE 候选列表是空的。
3. 修改后,在 PowerShell 中执行:
wsl --shutdown重新进入 WSL 后配置才会生效。
四、在 Windows 端启动本地大模型
1. 准备 llama.cpp
下载适用于 Windows 的 llama.cpp,并解压到固定目录,例如:
E:\llama.cpp稳定版本下载地址:https://pan.quark.cn/s/0073852e4042
2. 按显存选择模型
显存范围|建议模型|下载地址
16GB 以上|Qwen3-14B-Instruct Q4_K_M|https://pan.quark.cn/s/f48c2144ac71
8–16GB|Qwen3-8B GGUF Q4_K_M|https://pan.quark.cn/s/78b8643f1be3
8GB 以下|Qwen3-4B GGUF|https://pan.quark.cn/s/fd588898ccbf
把下载好的 .gguf 文件放进:
E:\llama.cpp\models3. 启动推理服务
在 Windows 命令提示符中运行:
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 --top-p 0.95 ^
--host 0.0.0.0 --port 8090几个参数的作用:
host 0.0.0.0 :允许 WSL 访问 Windows 端的模型服务;
c 8192 :设置上下文长度,短对话已经足够;
temp 1.0 :让回复不那么刻板;
port 8090 :指定服务端口。
这个命令窗口需要一直保持运行。如果提示端口被占用,但常规检查又看不到进程,可以查看 Hyper-V 是否预留了该端口:
netsh interface ipv4 show excludedportrange protocol=tcp发现冲突时,最省事的办法是同时修改模型服务和调用脚本中的端口。
五、制作数字人底图与数字人视频
1. 先设计一张自己喜欢的数字人图片
数字人图片不能只追求“好看”,还要为后续网页布局与嘴型生成留空间。比较稳妥的构图是:
画面比例使用 16:9;
人物位于右侧三分之一处;
左侧保留较大暗色留白,方便放交互光球与字幕;
嘴唇自然闭合,不露齿;
手不要挡住嘴、下巴和脸部轮廓;
使用偏暗的侧光,降低口型区域轻微模糊带来的违和感。
可参考下面的提示词思路,自行替换人物、服装和场景:
电影感低照度侧面人像,一位成年女性坐在画面右侧,柔和轮廓光,
左侧保留大面积深色负空间,表情自然,嘴唇闭合,镜头固定,
真实皮肤质感,16:9 横向构图。负面提示词可加入:张嘴、露齿、人物居中、明亮杂乱背景、手遮住嘴部、文字、水印、塑料皮肤、卡通风格。
2. 用 ComfyUI + Wan2.2 生成 5 秒数字人视频
下载安装 ComfyUI ,打开后选择 Wan2.2 的图生视频工作流,把底图作为首帧。建议第一次使用下面的保守参数:
参数|建议值
分辨率|以底图比例为准;原教程示例为 704 × 896
时长|5 秒
帧率|25 fps
Prompt Enhance|关闭
ComfyUI 下载地址:https://pan.quark.cn/s/bb9d21f1e724
提示词只描述动作,不要再次描述人物长相。例如:
人物保持原位,只有轻微呼吸,缓慢眨眼一次,头部做极小幅度自然移动后回到起始姿势,
嘴唇始终闭合,固定机位,无推拉摇移。导出文件并命名为:idle.mp4
因为真正的说话口型会由 Wav2Lip 实时生成,所以不需要再额外制作“正在说话”、“正在倾听”等多套视频。

这里有几个常见误区:
不要打开提示词增强,关闭 prompt_enhance ,否则模型可能重新设计人物或场景;
输出比例必须与输入图片的比例保持一致。如果使用 16:9 横版底图,应换成工作流支持的横向尺寸,避免拉伸或裁掉人物;
提示词只写动作,重复描述外貌反而容易让人物漂移;
5 秒视频足够做循环待机,盲目拉长视频更容易出现重复或形变。
六、录制参考声音(声音克隆)
Qwen3-TTS 会根据参考音频模仿音色与说话状态。建议录制一段 5–15 秒的声音,要求如下:
只有一个人说话;
环境安静,无音乐和明显混响;
语速自然,情绪与希望克隆出来的风格一致;
同时保存完全准确的逐字稿。
录完后的文件导出来( wav 或 mp3格式),放到桌面的 AI 文件夹,将文件命名为:ref.wav 。录音说的原话逐字记下来,后面要填进配置里。要注意的是,情绪也会被克隆,所以在录音的时候可以使用自己想要的语气。
参考音频,请下载“一键部署包”。这些脚本用于安装语音对话环境、启动各项服务并处理音画同步。由于脚本可能随项目版本调整,使用前最好快速检查其中的下载地址、端口和模型名称。包括文件:
文件|用途
install-voice.sh|语音对话部分一键安装
start-voice.sh|语音服务启动 / 停止 / 日志
start-livetalking.sh|口型服务启动 / 停止
avatar-sync.js|音频转发 + 数字人背景层
wav2lip256.pth|口型模型权重
wav2lip256_avatar1.tar.gz|官方示例形象(用来验证链路)
一键部署包下载地址:https://pan.quark.cn/s/d4fc5bfc88eb
七、整理文件
最后,把5 秒数字人视频文件 idle.mp4, 和 音频文件 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 (Ubuntu 24.04 与 GPU 支持)
以管理员身份打开 PowerShell:
wsl --update
wsl --install -d Ubuntu-24.04安装完成后重启电脑,让第一步的 .wslconfig 生效。重启后打开 Ubuntu 终端,设置用户名和密码,验证显卡直通:
nvidia-smi如果能看到显卡型号和驱动信息,说明 GPU 透传正常。
不要在 WSL 内重复安装显卡驱动。显卡驱动只安装在 Windows 里,WSL 使用主机提供的 CUDA 透传;在WSL内再次安装显卡驱动会覆盖 libcuda.so,导致 GPU 不可用。
九、把安装包复制进 WSL
在 Ubuntu 终端,将路径换成自己的 Windows 用户名:
#拷贝(把路径换成自己的用户名):
mkdir -p ~/setup
cp -r "/mnt/c/Users/你的用户名/Desktop/AI/." ~/setup/
cd ~/setup
ls -la
#转换行尾:
sudo apt update
sudo apt install -y dos2unix
dos2unix *.sh
#加执行权限:
chmod +x *.sh为什么要转行尾:Windows 文本文件常用 CRLF 换行,不转换可能出现 bash^M 或 bad interpreter 错误,很多人卡在这里。
直接在 /mnt/c中运行大量 Python 文件通常更慢,也容易遇到权限问题,复制到 Linux 主目录会更稳定。
十、安装并测试语音对话模块
1. 执行安装脚本
cd ~/setup
./install-voice.sh安装过程会创建 Python 环境,并准备语音活动检测、faster-whisper、Qwen3-TTS 和前端组件。根据网络和硬盘速度,可能需要十几分钟。
2. 统一参考音频格式
ffmpeg -i ~/setup/ref.wav -ac 1 -ar 16000 -c:a pcm_s16le ~/s2s/ref.wav
#确认格式:必须是 pcm_s16le / 16000 / 1 声道:
ffprobe -v error \
-show_entries stream=sample_rate,channels,codec_name \
-show_entries format=duration \
-of default=nw=1 ~/s2s/ref.wav检查结果应满足:
编码:pcm_s16le
采样率:16000
声道:单声道
3. 写入参考音频逐字稿
把下面的文字换成录音中实际说出的内容:
sed -i 's|^REF_TEXT=.*|REF_TEXT="这里填写与录音完全一致的逐字稿"|' ~/setup/start-voice.sh
grep -n "^REF_TEXT=" ~/setup/start-voice.sh逐字稿漏字、错字或标点差异过大,都会降低克隆效果。
4. 首次启动
cd ~/setup
./start-voice.sh然后在 Windows 浏览器打开:
http://localhost:7860/允许浏览器使用麦克风,点击页面中的交互按钮进行测试。第一次建议进入设置,把 NOISE GATE 调到最左侧或直接关闭,否则正常说话也可能被当作背景噪声过滤掉。

十一、安装 LiveTalking(口型同步) 与 Wav2Lip
新开一个 Ubuntu 终端,进入 WSL,依次运行:
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如果系统还没有 uv,先根据 uv 官方安装说明完成安装,再重新执行上面的命令。
放置口型模型和默认数字人:
cd ~/livetalking/LiveTalking
# 注意要改名为:wav2lip.pth
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,因为项目默认按这个文件名寻找权重。
先测试官方示例数字人:
cd ~/livetalking/LiveTalking
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左右或更高;若 inferfps 明显不足,就需要降低模型负载或更换更轻的配置。
网上教程多推荐 MuseTalk ,画质虽然更好,但是此次 AI 数字人的画面要求并不高,但显存占用只有约 1.3GB,对于暗光、侧脸和人物这种占比不大的画面,我们能以较低成本达到可接受效果,而 MuseTalk 则占用12G的显存。同时,纯本地化部署也不需要 stun,但不要传空字符串,否则 WebRTC 可能因 STUN 地址格式错误而启动失败。
十二、把视频转换成自己的数字人形象
在 LiveTalking 运行时打开:
http://localhost:8010/avatar.html按下面的方式提交生成任务:
算法:Wav2Lip
Avatar ID:wav2lip256_myavatar(保留 wav2lip256_前缀)
视频文件:前面生成的 idle.mp4
等待状态变成 COMPLETED 后,再启动自己的数字人:
cd ~/setup
AVATAR_ID=wav2lip256_myavatar ./start-livetalking.sh如果希望以后默认启动它,可以修改脚本中的 Avatar ID:
sed -i 's/wav2lip256_lingdu/wav2lip256_myavatar/' ~/setup/start-livetalking.sh若生成后嘴部附近出现明显撕裂,优先检查待机视频中是否有手、头发或衣领频繁遮挡嘴和下巴,而不是急着更换模型。
十三、按正确顺序启动完整系统
整套服务需要三个终端窗口。

第一个窗口:Windows 本地大模型
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 --top-p 0.95 ^
--host 0.0.0.0 --port 8090第二个窗口:WSL 口型服务
cd ~/setup
./start-livetalking.sh第三个窗口:WSL 语音服务
cd ~/setup
./start-voice.sh最后打开 http://localhost:7860/,必要时按 Ctrl + F5 强制刷新。先点击页面让数字人建立连接,再点击语音交互按钮开始说话。
关闭服务时执行:
./start-voice.sh stop
./start-livetalking.sh stopWindows 端的 llama.cpp 窗口可以直接按 Ctrl + C 停止。
十四、设置自然、低延迟的人设
在网页的 Settings → INSTRUCTIONS 中写入人设。不要只堆“温柔、活泼、善解人意”之类的形容词,最好同时提供几组短对话示例,让模型学会回复节奏。
可以采用这样的约束:
你是一位自然、友善的虚拟伙伴。说话口语化,每次只回答两到三句话。
不要使用 Markdown、列表、编号、表情符号和舞台动作描写。
不要复述用户问题,直接回应。遇到不确定的信息,要坦率说明。
示例:
用户:今天有点累。
助手:那就先别逼自己满负荷运转。喝点水,休息十分钟,我们再慢慢处理。短回复不仅更像真实聊天,也能明显缩短等待合成完整语音的时间。禁用 Markdown 和表情符号,是为了避免 TTS 把符号或格式标记读出来。/no_think 用于关闭不必要的长推理输出,进一步减少首句延迟。
十五、减少抢话与误打断
实时语音系统最难调的往往不是模型,而是“什么时候认为用户说完了”。中文说话中间常有停顿,静音判断过短就会频繁抢话。
可以在 ~/setup/start-voice.sh 中尝试以下参数:
MIN_SILENCE_MS=1200
VAD_THRESH=0.6
MIN_SPEECH_MS=500
SPEECH_PAD_MS=300参数含义:
MIN_SILENCE_MS:沉默多久后判定一句话结束;建议先用 1200ms,觉得反应慢再降到 900ms;
VAD_THRESH:语音活动阈值;嘈杂环境可升到 0.7;
MIN_SPEECH_MS:过滤过短的声响;
SPEECH_PAD_MS:在语音前后保留一点缓冲,减少吞字。
观察日志:
tail -f ~/s2s/logs/s2s.log | grep -E "soft-ended|discard"如果修改参数后日志行为完全不变,通常不是参数无效,而是服务没有真正重启。
十六、显存不够时怎么减负
按收益从高到低,可以依次尝试:
将 Qwen3-14B 换成 Qwen3-8B,大约可省 3GB;
换成 Qwen3-4B,大约可省 6GB;
把语音识别模型改成 `medium`,约省 1.5GB;
把 llama.cpp 的上下文从 `-c 8192` 降到 `-c 4096`,还能节省约 1GB;
保留 Wav2Lip,不要在显存紧张时换成更重的口型模型。
语音聊天每轮通常只有两三句话,14B 与 8B 在“听感”上的差异,未必大过等待时间带来的体验差异。显存紧张时,优先追求稳定和低延迟。
十七、常见故障速查
现象|原因与处理办法
bad interpreter 或出现 ^M|脚本是 Windows 换行,执行 `dos2unix *.sh
WebRTC 一直连接不上|检查 `.wslconfig` 中的 `hostAddressLoopback=true`,再执行 `wsl --shutdown`
网页提示 JSON 解析失败|往往是后端返回了 500 错误,应查看启动终端中的真实报错
malformed/uri:invalid scheme|STUN 地址为空或格式不正确,传入有效的 `stun:` 地址
能打开网页但说话无反应|关闭或降低 NOISE GATE,确认浏览器已获得麦克风权限
数字人频繁抢话|提高 `MIN_SILENCE_MS`,建议从 1200ms 开始
回答与问题对不上|先处理错误断句,并确认没有同时开启互相冲突的实时转写流程
每次声音差异很大|检查是否使用 TTS Base 模型,并核对参考音频与逐字稿
声音像被变调|检查 `avatar-sync.js` 的采样率设置,通常应与 16000Hz 音频一致
端口绑定失败但查不到进程|查看 Hyper-V 保留端口范围,换一个未被保留的端口
GPU 占满但长时间没有进度|可能发生显存向系统内存回退;降低模型,或在 NVIDIA 控制面板检查 CUDA 系统内存回退策略
使用局域网 IP 时没有麦克风|浏览器通常要求 localhost 或 HTTPS 才允许麦克风访问
电脑睡眠唤醒后服务失效|执行 `wsl --shutdown` 后重新启动三个服务
再次启动提示端口占用|先运行两个 `stop` 命令,确认旧进程结束再重启
十八、可选:做一个一键启动脚本
确认三个服务都能独立稳定运行后,可以在Windows 新建 start-ai-avatar.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
start "voice" wsl -d Ubuntu-24.04 -- bash -lc "cd ~/setup && ./start-voice.sh"
timeout /t 10
start http://localhost:7860/等待时间要根据自己的电脑调整。第一次部署不要直接依赖批处理脚本,否则某一步失败时不容易判断是哪项服务出了问题。
十九、手机访问与外网开放的安全问题
浏览器麦克风属于敏感权限。使用普通局域网 IP 打开网页时,浏览器可能因为页面不是安全上下文而拒绝授权。技术上可以使用 Cloudflare Tunnel 等工具把本地页面映射到 HTTPS 地址,例如:
cloudflared tunnel --url http://localhost:7860但这也意味着本地服务可能被互联网访问。不要把无身份认证的临时地址公开传播,更不要把带有私人声音、对话记录和摄像素材的服务直接暴露出去。需要远程使用时,至少应增加访问控制,并在用完后及时关闭隧道。
二十、怎样判断部署真的成功
不要以“网页能打开”作为完成标准。建议按下面的顺序验收:
1. llama.cpp 的 8090 端口能正常生成中文回复;
2. 语音网页能识别麦克风输入并返回合成语音;
3. LiveTalking 示例人物能发声并生成匹配口型;
4. 自定义待机视频能成功转换为 Avatar;
5. 三个服务串联后,首句等待约为 1–2 秒,连续对话没有频繁抢话;
6. 长时间运行时显存没有持续上涨,服务重启和停止命令有效。
一次回复的延迟通常来自多段叠加:语音识别、语言模型首个 token、语音合成、口型推理,以及等待完整语音的缓冲。想优化体验,应先从日志判断最慢的是哪一段,而不是盲目更换所有模型。
结语:
这套方案真正有意思的地方,不只是“让一张照片开口”,而是把几个本地 AI 模块接成了完整的实时交互链路。它既能做虚拟伙伴,也可以改造成展厅讲解员、桌面语音助手、直播数字人或角色原型。
第一次部署时,最稳的策略是逐段验证:先跑语言模型,再测语音,接着检查口型,最后才换上自定义人物。只要每一步都有清晰的成功标准,复杂系统也能被拆成一组可定位、可复现的小问题。
最后再提醒一次:数字人形象和声音都可能涉及个人权益。用于公开展示或商业用途前,务必取得素材权利人的授权,并明确告知是被使用在 AI 系统里与人物进行交互对话。
