如何魔改AI伴侣?ChatGLM2-Voice-Cloning替换LLM与TTS引擎的开发者进阶指南
【免费下载链接】ChatGLM2-Voice-CloningChat with any character you like: ChatGLM2+SadTalker+Voice Cloning | 和喜欢的角色沉浸式对话吧:ChatGLM2+声音克隆+视频对话项目地址: https://gitcode.com/gh_mirrors/ch/ChatGLM2-Voice-Cloning
ChatGLM2-Voice-Cloning 是一个将ChatGLM2-6B 大语言模型 + FreeVC 声音克隆 + SadTalker 视频对话整合在一起的开源 AI 伴侣项目:输入文字,它生成回复,再合成为你指定角色的音色,最后让一张静态照片"开口说话"。整个系统由多个可独立替换的模块组成,因此非常适合动手魔改。本指南带你完成两件最核心的改造:替换 LLM 引擎和替换 TTS 引擎,并附声音克隆与视频合成的进阶玩法 🛠️
一、动手前:看懂 AI 伴侣的四段式流水线
魔改的第一步是理解架构。项目把一次"沉浸式对话"拆成了 4 个串行模块,每个模块都有清晰的输入/输出边界:
| 模块 | 默认实现 | 输入 → 输出 | 核心位置 |
|---|---|---|---|
| 🧠 大语言模型 | ChatGLM2-6B-int4 | 文字问题 → 回复文本 | app.py |
| 🔊 语音合成 (TTS) | edge-tts(免费在线服务) | 回复文本 → mp3 音频 | app.py |
| 🎙️ 声音克隆 | FreeVC + 说话人编码器 | TTS 音频 + 参考音频 → 角色音色音频 | app.py |
| 📺 视频合成 | SadTalker | 图片 + 克隆音频 → 说话视频 | app.py |
💡 关键认知:模块之间只靠"文本"和"音频文件路径"传递数据,互不依赖。这意味着你可以只换其中一个模块,其余部分完全不用动。
项目提供两个入口版本:app_new.py是 v1 版(聊天 + TTS + 声音克隆),app.py是 v2 版(额外增加 SadTalker 视频聊天区)。以下改造均以 app.py 为例。
二、替换 LLM 引擎:给 AI 伴侣换个"大脑"
默认情况下,程序通过 Hugging Face 的AutoModel.from_pretrained加载THUDM/chatglm2-6b-int4(int4 量化版,显存占用约 3.9GB)。整个 LLM 加载逻辑集中在 app.py 的十几行代码里:
model_name = "THUDM/chatglm2-6b-int4" # ① 改这里即可换模型 tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True) model_glm = AutoModel.from_pretrained(model_name, trust_remote_code=True).cuda().half()替换 LLM 只需关注两个点:
- 改模型名称:把
model_name换成你喜欢的对话模型(如其他 ChatGLM 版本、量化版本),tokenizer 会自动跟随。 - 接口兼容性:对话主循环
predict()调用了model_glm.stream_chat(tokenizer, ...)流式生成(见 app.py)。如果你换成没有stream_chat的模型,需要把该函数改为调用对应模型的 chat/stream 接口并保留yield输出结构,网页界面才能逐字显示回复。
⚠️ 小贴士:显存紧张时优先选择 int4/int8 量化版本;GPU 不可用时程序会自动退回 CPU 的 float 模式(速度会明显变慢)。
三、替换 TTS 引擎:从 edge-tts 换成本地语音合成
默认的语音合成走的是免费的 edge-tts 在线服务,全部逻辑就一个异步函数text_to_speech_edge:接收文本,保存为临时 mp3 并返回文件路径(app.py)。界面上的"生成对应的音频吧"按钮通过tts_btn.click(...)绑定到它(app.py)。
想换成 CosyVoice、GPT-SoVITS、VITS 等本地 TTS 引擎?只要做到两点即可无缝接入:
- 函数签名不变:输入文本字符串,输出音频文件路径;
- 重绑定按钮:把
tts_btn.click的第一个参数换成你的新函数。
def my_local_tts(text, language_code): wav_path = my_tts_model.synthesize(text) # 你的本地 TTS 引擎 return wav_path tts_btn.click(my_local_tts, inputs=[test1, language], outputs=[output_audio])另外,界面下拉框中的 290+ 种语言音色来自 tts_voice.py 里的tts_order_voice字典(如"普通话 (中国大陆)-Xiaoxiao-女")。换成本地 TTS 后,这个字典可以换成你自定义的音色列表,让 AI 伴侣拥有全新的"声库" 🎧
四、进阶玩法:声音克隆与视频引擎的魔改路线
4.1 声音克隆(FreeVC)三件套
克隆环节的核心是convert()函数(app.py),它做了三件事:
- 用说话人编码器
SpeakerEncoder(权重在 speaker_encoder/ckpt/)从你上传的 5~10 秒参考音频中提取"音色"向量; - 用 WavLM(
microsoft/wavlm-large)提取 TTS 音频的"内容"特征; - 交给 FreeVC 主干网络
SynthesizerTrn推理出克隆音频。
三个可替换的"零件"分别是:checkpoint/freevc-24.pth(主干模型)、configs/freevc-24.json(超参数配置)和说话人编码器权重。想换采样率或实验不同模型,改动都围绕这三处展开,编码器训练代码在 speaker_encoder/train.py。
4.2 视频合成(SadTalker)
v2 版在 app.py 启动时自动下载 SadTalker 模型,并用SadTalker(lazy_load=True)懒加载实例;视频聊天区的"开始视频聊天吧"按钮最终调用sad_talker.test(...)(app.py),传入图片、克隆音频及一系列表情/姿态参数。由于 SadTalker 源码通过src/gradio_demo引入,替换视频引擎时只需保持"图片 + 音频 → 视频文件"的接口即可,比如换成 Hallo、EchoMimic 等新的数字人方案。
五、部署环境与常见坑位
一键克隆仓库并安装依赖(依赖清单见 requirements.txt,含 torch、transformers、gradio、edge_tts 等):
git clone https://gitcode.com/gh_mirrors/ch/ChatGLM2-Voice-Cloning cd ChatGLM2-Voice-Cloning pip install -r requirements.txt sudo apt install ffmpeg随后把freevc-24.pth放入checkpoint/、pretrained_bak_5805000.pt放入speaker_encoder/ckpt/,再运行python app.py(v2)或python app_new.py(v1)即可打开 Gradio 网页 🚀
常见排错清单:
- 显存不足:把
model_name换成 int4 量化版,或调低界面里的Maximum length; - ffmpeg 报错:视频/音频处理强依赖 ffmpeg,务必先安装;
- 换 TTS 后界面没声音:检查新函数是否返回了可访问的音频文件路径(Gradio
type="filepath"要求); - 克隆音色不像:参考音频质量直接决定效果,选 5~10 秒清晰无背景音的录音。
六、总结
ChatGLM2-Voice-Cloning 的模块化设计让"魔改 AI 伴侣"变得异常友好:🧠 换 LLM 只需改一行model_name并适配流式接口;🔊 换 TTS 只需写一个"文本进、音频路径出"的函数;🎙️📺 声音克隆与视频引擎则沿着"内容—音色—渲染"三条线分别替换。动手顺序建议是:先跑通原版 → 换 TTS 练手 → 再换 LLM → 最后挑战声音克隆与数字人。祝你的 AI 伴侣早日拥有独一无二的大脑与声音 💕
【免费下载链接】ChatGLM2-Voice-CloningChat with any character you like: ChatGLM2+SadTalker+Voice Cloning | 和喜欢的角色沉浸式对话吧:ChatGLM2+声音克隆+视频对话项目地址: https://gitcode.com/gh_mirrors/ch/ChatGLM2-Voice-Cloning
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考