你的微信里有没有一个对话窗?它很久都没有弹出新消息,但你却常常在深夜里点开反反复复地翻着。
如果现在,你可以用这些聊天记录克隆出对方的"数字分身",保存下 TA 说话的语气、风格、独特的口头禅,甚至还能给你发来语音,你会怎么选?
最近,GitHub 上新开源了一个项目 WeClone——让你记忆里的那个 TA 在数字世界里永生,已不再是不可能。
WeClone 通过个人微信聊天记录对大语言模型( LLM )进行微调,打造个性化的数字分身。
它提供从文本生成到语音克隆、从训练到部署的全链路解决方案。让数字分身不仅替 TA 说话,还听起来像 TA 本人。
除了留住记忆里的 TA,你也可以创造自己的数字分身。 你有没有想过,和自己聊天会是什么样的体验?你会喜欢和自己聊天吗?
数字人技术的可玩性确实很高,一经推出,内网和外网上都引来了一大波网友的关注。许多网友也是纷纷脑洞大开。
项目指路: https://github.com/xming521/weclone
我们先一起来了解一下WeClone的核心功能。
核心功能
使用微信聊天记录微调LLM
WeClone 支持导出微信聊天记录,并进行格式化处理成问答格式,用于模型微调。
在模型微调方面,WeClone 基于 LoRA 支持对主流 0.5B–7B 规模模型进行低资源微调,包括 ChatGLM3-6B、Qwen2.5-7B 等模型。有效捕捉用户的语言习惯和表达方式。
模型训练需要约 16GB 显存,显存需求可控,训练效率高,满足小样本低资源场景。
需要的显存估算值如下:
使用微信语音消息 + Spark-TTS 模型实现高质量声音克隆
项目配套子模块 WeClone - audio (https://github.com/xming521/WeClone/tree/master/WeClone-audio)基于轻量级 Tacotron 或 WavLM 模型,用 0.5B 参数模型和 5 秒语音样本,就可以克隆出相似度高达95%的声音,进一步增强数字分身的真实感。
多平台部署
通过 AstrBot 框架,将数字分身部署到微信、QQ、Telegram、企业微信、飞书等多个聊天平台。一行命令即可快速启动,即可与数字分身实时对话。
可能的应用场景
个人助理定制:在你忙碌时,数字分身可以代替你回复消息,处理日常事务,例如写邮件、回复评论等。
内容创作:快速产出特定风格的个性化文本内容,帮助你运营多个风格一致的小号。例如写推文、写脚本、写解说等。
数字永生:创建自己或者他人的数字分身,实现永存。
核心模块介绍
WeClone 的数字分身全链路核心模块包括了三部分:
数据导出与预处理 → LoRA模型微调 → 多平台部署
接下来,我们分模块看看各部分的技术亮点。
1. 数据导出与预处理
WeClone 首先将微信导出的 CSV/SQLite 文件转为标准的 JSON 文件。 然后进行文本清洗,主要是为了去除噪声,以及过滤掉敏感信息。最后分割对话信息,对聊天记录进行分段标注,并保留时间戳、
WeClone 使用 ChatGLM3-6B 为基础模型,基于 LoRA 框架进行 SFT(Supervised Fine-Tuning)阶段的微调。
关键的亮点点包括:
使用低秩适配器,显著减少可训练参数。
单机/分布式训练兼容,支持多卡训练加速。
WeClone 使用 FastAPI/Flask 打包微调后的模型,支持 GPU/CPU 混合部署、多平台登录,并且支持自定义参数。
安装部署教程
环境搭建
建议使用 uv ,这是一个非常快速的 Python 环境管理器。安装uv后,您可以使用以下命令创建一个新的Python环境并安装依赖项,注意这不包含xcodec(音频克隆)功能的依赖:
git clone https://github.com/xming521/WeClone.git
cd WeClone
uv venv .venv --python=3.9
source .venv/bin/activate
uv pip install --group main -e .
Note
训练以及推理相关配置统一在文件 settings.json。
数据准备
请使用 PyWxDump 提取微信聊天记录。下载软件并解密数据库后,点击聊天备份,导出类型为 CSV ,可以导出多个联系人或群聊,然后将导出的位于 wxdump_tmp/export
的 csv 文件夹放在 ./data
目录即可,也就是不同人聊天记录的文件夹一起放在 ./data/csv
。 示例数据位于 data/example_chat.csv
。
数据预处理
项目默认去除了数据中的手机号、身份证号、邮箱、网址。还提供了一个禁用词词库 blocked_words ,可以自行添加需要过滤的词句(会默认去掉包括禁用词的整句)。 执行 ./make_dataset/csv_to_json.py
脚本对数据进行处理。
在同一人连续回答多句的情况下,有三种处理方式:
模型下载
首选在 Hugging Face 下载 ChatGLM3 模型。如果在 Hugging Face 模型的下载中遇到了问题,可以通过下述方法使用魔搭社区,后续训练推理都需要先执行 export USE_MODELSCOPE_HUB=1
来使用魔搭社区的模型。
由于模型较大,下载过程比较漫长请耐心等待。
export USE_MODELSCOPE_HUB=1 # Windows 使用 `set USE_MODELSCOPE_HUB=1`
git lfs install
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git
魔搭社区的 modeling_chatglm.py
文件需要更换为 Hugging Face 的。
配置参数并微调模型
(可选) 修改 settings.json 选择本地下载好的其他模型。
修改
per_device_train_batch_size
以及gradient_accumulation_steps
来调整显存占用。可以根据自己数据集的数量和质量修改
num_train_epochs
、lora_rank
、lora_dropout
等参数。
单卡训练
运行 src/train_sft.py
进行sft阶段微调,本人loss只降到了3.5左右,降低过多可能会过拟合,我使用了大概2万条整合后的有效数据。
python src/train_sft.py
多卡训练
uv pip install deepspeed
deepspeed --num_gpus=使用显卡数量 src/train_sft.py
使用浏览器demo简单推理
python ./src/web_demo.py
使用接口进行推理
python ./src/api_service.py
使用常见聊天问题测试
python ./src/api_service.py
python ./src/test_model.py
部署到聊天机器人
AstrBot方案
AstrBot 是易上手的多平台 LLM 聊天机器人及开发框架。
使用步骤:
部署 AstrBot 在 AstrBot 中部署消息平台 执行 python ./src/api_service.py
,启动api服务在 AstrBot 中新增服务提供商,类型选择OpenAI,API Base URL 根据AstrBot部署方式填写(例如docker部署可能为http://172.17.0.1:8005/v1) ,模型填写gpt-3.5-turbo 微调后不支持工具调用,请先关掉默认的工具,消息平台发送指令: /tool off reminder
,否则会没有微调后的效果。根据微调时使用的 default_system ,在 AstrBot 中设置系统提示词。
>/ 本期作者:Tashi & JackCui
>/ JackCui:AI领域从业者,毕业于东北大学,大厂算法工程师,热爱技术分享。
没有评论:
发表评论