⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 JackCui 「Tashi & JackCui」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

你的微信里有没有一个对话窗?它很久都没有弹出新消息,但你却常常在深夜里点开反反复复地翻着。

如果现在,你可以用这些聊天记录克隆出对方的“数字分身”,保存下 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 文件。 然后进行文本清洗,主要是为了去除噪声,以及过滤掉敏感信息。最后分割对话信息,对聊天记录进行分段标注,并保留时间戳、

  1. 模型微调

WeClone 使用 ChatGLM3-6B 为基础模型,基于 LoRA 框架进行 SFT(Supervised Fine-Tuning)阶段的微调。

关键的亮点点包括:

  • 使用低秩适配器,显著减少可训练参数。
  • 单机/分布式训练兼容,支持多卡训练加速。
  1. 模型部署

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 聊天机器人及开发框架。

使用步骤:

  1. 部署 AstrBot
  2. 在 AstrBot 中部署消息平台
  3. 执行 python ./src/api_service.py,启动api服务
  4. 在 AstrBot 中新增服务提供商,类型选择OpenAI,API Base URL 根据AstrBot部署方式填写(例如docker部署可能为http://172.17.0.1:8005/v1) ,模型填写gpt-3.5-turbo
  5. 微调后不支持工具调用,请先关掉默认的工具,消息平台发送指令:/tool off reminder,否则会没有微调后的效果。
  6. 根据微调时使用的 default_system ,在 AstrBot 中设置系统提示词。
文章目录
  1. 1. 核心功能
  2. 2. 可能的应用场景
  3. 3. 核心模块介绍
  4. 4. 安装部署教程
    1. 4.1. 环境搭建
    2. 4.2. 数据准备
    3. 4.3. 数据预处理
    4. 4.4. 模型下载
    5. 4.5. 配置参数并微调模型
      1. 4.5.1. 单卡训练
      2. 4.5.2. 多卡训练
    6. 4.6. 使用浏览器demo简单推理
    7. 4.7. 使用接口进行推理
    8. 4.8. 使用常见聊天问题测试
    9. 4.9. 部署到聊天机器人
      1. 4.9.1. AstrBot方案