# WeClone **Repository Path**: hxsilence/WeClone ## Basic Information - **Project Name**: WeClone - **Description**: 欢迎star⭐。使用微信聊天记录微调大语言模型,并绑定到聊天机器人,实现自己的数字分身。 数字克隆/数字分身/数字永生/声音克隆/LLM/大语言模型/微信聊天机器人/LoRA - **Primary Language**: Python - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 18 - **Created**: 2025-06-06 - **Last Updated**: 2025-06-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 
项目主页 | 项目文档 | Windows部署指南 | Linux部署指南【保姆级】
> [!IMPORTANT] > ### WhatsApp and Telegram chat logs integration for digital avatar creation is coming ! ## ✨核心功能 - 💫 涵盖打造数字分身的全链路方案,包括聊天数据导出、预处理、模型训练、部署 - 💬 使用微信聊天记录微调LLM,让大模型有"那味儿" - 🔗 绑定到微信、QQ、Telegram、企微、飞书机器人,实现自己的数字分身 - 🛡️ 隐私信息过滤,本地化微调部署,数据安全可控 ## 📋特性与说明 > [!IMPORTANT] > ### WeClone现在支持图片模态数据微调了!并且包含了更全的上下文,记得拉取最新代码并更新依赖。 > [!IMPORTANT] > - WeClone仍在快速迭代期,当前效果不代表最终效果。 > - 微调LLM效果很大程度取决于模型大小、聊天数据的数量和质量,理论上模型越大,数据越多,效果越好。 > - Windows环境未进行严格测试,可以使用WSL作为运行环境。详细教程可点击[Windows部署指南](https://blog.051088.xyz/2025/05/14/WeClone-%E7%94%A8%E5%BE%AE%E4%BF%A1%E8%81%8A%E5%A4%A9%E8%AE%B0%E5%BD%95%E6%89%93%E9%80%A0%E8%87%AA%E5%B7%B1%E7%9A%84AI%E6%95%B0%E5%AD%97%E5%88%86%E8%BA%AB/)查看。 ### 硬件要求 项目默认使用Qwen2.5-7B-Instruct模型,LoRA方法对sft阶段微调,大约需要16GB显存。也可以使用[LLaMA Factory](https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md#%E6%A8%A1%E5%9E%8B)支持的其他模型和方法。 需要显存的估算值: | 方法 | 精度 | 7B | 14B | 30B | 70B | `x`B | | ------------------------------- | ---- | ----- | ----- | ----- | ------ | ------- | | Full (`bf16` or `fp16`) | 32 | 120GB | 240GB | 600GB | 1200GB | `18x`GB | | Full (`pure_bf16`) | 16 | 60GB | 120GB | 300GB | 600GB | `8x`GB | | Freeze/LoRA/GaLore/APOLLO/BAdam | 16 | 16GB | 32GB | 64GB | 160GB | `2x`GB | | QLoRA | 8 | 10GB | 20GB | 40GB | 80GB | `x`GB | | QLoRA | 4 | 6GB | 12GB | 24GB | 48GB | `x/2`GB | | QLoRA | 2 | 4GB | 8GB | 16GB | 24GB | `x/4`GB | ## 环境搭建 1.cuda安装(已安装可跳过,**要求版本12.4及以上**):[LLaMA Factory](https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/installation.html#cuda) 2.建议使用 [uv](https://docs.astral.sh/uv/)安装依赖,这是一个非常快速的 Python 环境管理器。安装uv后,您可以使用以下命令创建一个新的Python环境并安装依赖项,注意这不包含音频克隆功能的依赖: ```bash git clone https://github.com/xming521/WeClone.git cd WeClone uv venv .venv --python=3.10 source .venv/bin/activate # windows下执行 .venv\Scripts\activate uv pip install --group main -e . ``` > [!TIP] > 如果要使用最新的模型进行微调,需要手动安装最新版LLaMA Factory:`uv pip install --upgrade git+https://github.com/hiyouga/LLaMA-Factory.git`,同时其他依赖版本也可能需要修改,例如vllm pytorch transforms 3.将配置文件模板复制一份并重命名为`settings.jsonc`,后续配置修改在此文件进行: ```bash cp settings.template.jsonc settings.jsonc ``` - 微调**多模态模型**时,请使用[examples/mllm.template.jsonc](https://github.com/xming521/WeClone/blob/master/examples/mllm.template.jsonc)作为配置文件。 > [!NOTE] > 训练以及推理相关配置统一在文件`settings.jsonc` 4.使用以下命令测试CUDA环境是否正确配置并可被PyTorch识别,Mac不需要: ```bash python -c "import torch; print('CUDA是否可用:', torch.cuda.is_available());" ``` 5.(可选)安装FlashAttention,加速训练和推理:`uv pip install flash-attn --no-build-isolation` ## 模型下载 ```bash git lfs install git clone https://www.modelscope.cn/Qwen/Qwen2.5-7B-Instruct.git ``` 下载有问题使用其他方式下载:[模型的下载](https://www.modelscope.cn/docs/models/download) ## 数据准备 请使用[PyWxDump](https://github.com/xaoyaoo/PyWxDump)提取微信聊天记录(不支持4.0版本微信)。可以先将手机的聊天记录迁移(备份)到电脑,数据量更多一些。下载软件并解密数据库后,点击聊天备份,导出类型为CSV,可以导出多个联系人(不建议使用群聊记录),然后将导出的位于`wxdump_tmp/export` 的 `csv` 文件夹放在`./dataset`目录即可,也就是不同人聊天记录的文件夹一起放在 `./dataset/csv`。 ### 图片数据准备 在能进入微信个人文件夹的环境执行,如果没有环境创建环境并安装基础依赖即可(`uv pip install -e .`),然后执行以下命令,将微信图片数据保存到`./dataset/wechat/dat`目录下。 ```bash python weclone/data/chat_parsers/wechat_parser.py --wechat-data-dir "微信个人文件夹路径 例如 C:\Users\user\Documents\WeChat Files\wxid_d68wiru2zseo22" ``` 之后使用[微信图片解密工具](https://github.com/Evil0ctal/WeChat-image-decryption)解密图片数据,解密后的图片数据保存到`dataset/media/images`目录下。 ## 数据预处理 - 项目默认去除了数据中的手机号、身份证号、邮箱、网址。还在`settings.jsonc`中提供了一个禁用词词库`blocked_words`,可以自行添加需要过滤的词句(会默认去掉包括禁用词的整句)。 > [!IMPORTANT] > 🚨 请一定注意保护个人隐私,不要泄露个人信息! - 执行以下命令对数据进行处理,可以根据自己的聊天风格修改settings.jsonc的`make_dataset_args`。 ```bash weclone-cli make-dataset ``` - 目前仅支持时间窗口策略,根据`single_combine_time_window`将单人连续消息通过逗号连接合并为一句,根据`qa_match_time_window`匹配问答对。 - 多模态数据可以通过`image_max_pixels`和`max_image_num`参数控制图片数量和大小,减少显存占用。 - 可以启用`clean_dataset`中的`enable_clean`选项,对数据进行清洗,以达到更好效果(多模态数据暂不支持)。* 当前系统支持使用 `llm judge` 对聊天记录进行打分,提供 **vllm 离线推理** 和 **API 在线推理** 两种方式。可通过将 `settings.jsonc` 文件中的 `"online_llm_clear": false` 修改为 `true` 来启用 API 在线推理模式,并配置相应的 `base_url`、`llm_api_key`、`model_name` 等参数。所有兼容 OpenAI 接口的模型均可接入。 - 在获得 `llm 打分分数分布情况` 后,可通过设置 `accept_score` 参数筛选可接受的分数区间,同时可适当降低 `train_sft_args` 中的 `lora_dropout` 参数,以提升模型的拟合效果。 ## 配置参数并微调模型 - (可选)修改 `settings.jsonc` 的 `model_name_or_path` 和 `template` 选择本地下载好的其他模型。 - 修改`per_device_train_batch_size`以及`gradient_accumulation_steps`来调整显存占用。 - 可以根据自己数据集的数量和质量修改`train_sft_args`的`num_train_epochs`、`lora_rank`、`lora_dropout`等参数。 ### 单卡训练 ```bash weclone-cli train-sft ``` 多卡环境单卡训练,需要先执行 `export CUDA_VISIBLE_DEVICES=0` ### 多卡训练 取消`settings.jsonc`中`deepspeed`行代码注释,使用以下命令多卡训练: ```bash uv pip install deepspeed deepspeed --num_gpus=使用显卡数量 weclone/train/train_sft.py ``` ### 使用浏览器demo简单推理 可以在这一步测试出合适的temperature、top_p值,修改settings.jsonc的`infer_args`后,供后续推理时使用。 ```bash weclone-cli webchat-demo ``` ### 使用接口进行推理 ```bash weclone-cli server ``` ### 使用常见聊天问题测试 不包含询问个人信息的问题,仅有日常聊天。测试结果在test_result-my.txt。 ```bash weclone-cli server weclone-cli test-model ``` ## 🖼️ 微调效果 使用Qwen2.5-14B-Instruct模型,大概3万条处理后的有效数据,loss降到了3.5左右的效果。