用2万条微信聊天记录微调出你的数字分身:WeClone完整实战
用2万条微信聊天记录微调出你的数字分身WeClone完整实战【免费下载链接】WeClone One-stop solution for creating your AI twin from chat history Fine-tune LLMs with your chat logs to capture your unique style, then bind to a chatbot to bring your digital self to life.项目地址: https://gitcode.com/GitHub_Trending/we/WeClone让通用大模型替你回消息对方只要听到一句您好我是AI助手就立刻出戏了。问题不在模型不够聪明而在它根本不会说你的话。WeClone 要解决的就是这件事把真实的微信聊天记录拿来微调大语言模型训出一个说话风格跟你几乎一样的数字分身再绑到微信机器人上让它替你接话、陪聊。作者在 README 里很实在他用大概 2 万条整合后的有效数据训练效果差强人意但有时候真的很搞笑。下图就是训练后的对话实录——对方问你叫什么名字啊分身回我叫小张你呢接着还会主动补一句我是95年的今年26了。这种松弛、前后自洽的人设感正是聊天数据喂出来的。整条链路数据、微调、机器人怎么串起来在动手之前先搞清楚这个项目在做什么避免中途迷路。WeClone 的链路很直接导出用 PyWxDump 之类的工具把微信聊天记录解密并导出成 CSV清洗跑 make_dataset/ 里的脚本把原始记录变成instruction/output问答对同时剥掉手机号、身份证号、邮箱、网址微调默认底座是 ChatGLM3-6B用 LoRA 方式做 SFT监督微调7B 模型大约需要 16GB 显存接入训练好的适配器可以走命令行、Web 界面或 OpenAI 兼容的对话 API微信机器人底层调的就是这个 API。有一个细节挺关键src/template.py里注册了自定义模板chatglm3-weclonesystem 提示词默认是请你扮演一名人类不要说自己是人工智能。这就是为什么分身不会动不动自报AI 身份。准备工作环境、依赖和模型底座克隆仓库、装依赖环境门槛不高Python 3.8 起步推荐 3.10git clone https://gitcode.com/GitHub_Trending/we/WeClone cd WeClone conda create -n weclone python3.10 conda activate weclone pip install -r requirements.txtrequirements.txt 里真正的核心只有两个llmtuner0.5.3LLaMA-Factory 微调框架和itchat-uos1.5.0.dev0微信机器人接口其余是 pandas、chromadb、langchain、openai0.28 这类配套工具。下载 ChatGLM3-6Bsettings.json中common_args的model_name_or_path指向./chatglm3-6b所以模型需要下载到仓库根目录。Hugging Face 下载 ChatGLM3-6B 即可如果网络不方便也可以用魔搭社区但之后每次训练、推理前都要先执行export USE_MODELSCOPE_HUB1来切换模型来源Windows 用set。模型文件较大下载过程比较磨耐心。清洗微信聊天记录从CSV到训练集导出记录用 PyWxDump 解密微信数据库后点击聊天备份、导出类型为 CSV可以把多个联系人或群聊的导出文件夹统一放进./data目录也就是./data/csv。数据量不是万能的但量太少一定有问题——README 里用加粗 IMPORTANT 强调了最终效果很大程度取决于聊天数据的数量和质量。跑预处理脚本数据放好后执行./make_dataset/csv_to_json.py产物是data/res_csv/sft/sft-my.json格式已经对齐 llmtuner 要求。脚本默认会删掉含手机号、身份证号、邮箱、网址的句子另外附带一个禁用词库 blocked_words.json可以自己往里加词命中即整句剔除——处理涉及隐私的聊天记录时这一步建议认真过一遍。遇到同一人连续回了好几句的情况目录下有三个脚本对应三种策略csv_to_json.py用逗号连成一句csv_to_json-单句回答.py已废弃只留最长那句csv_to_json-单句多轮.py则把前几句塞进提示词的history里。默认用逗号连接版就行。模型训练改完 settings.json 直接开跑训练与推理的全部参数收在 settings.json 一个文件里不用记命令行参数。SFT 阶段默认配置是lora_rank4、lora_dropout0.5、per_device_train_batch_size4、gradient_accumulation_steps8、num_train_epochs3、学习率 1e-4。显存吃紧就降 batch size 或加梯度累积数据多、想多训几轮调num_train_epochs即可。单卡训练一条命令python src/train_sft.py多卡走 DeepSpeed仓库根目录的ds_config.json已配好pip install deepspeed deepspeed --num_gpus2 src/train_sft.py作者自己训到 loss 3.5 左右就停了他提醒降得过低可能过拟合——分身要是把训练数据里的原话背得滚瓜烂熟反而像复读机。仓库也提供了src/train_pt.py的预训练PT路径和对应数据预处理但作者实测提升不明显第一次上手可以跳过。三种用法命令行、对话API和微信机器人命令行和 Web 快速验证训练完先别急着上微信用命令行把手感摸一遍python src/cli_demo.py直接输入问题开聊clear清空对话历史exit退出。想看得直观些python ./src/web_demo.py会起一个浏览器演示页而真正对外提供服务的是python ./src/api_service.py它在 8000 端口暴露 OpenAI 兼容接口http://127.0.0.1:8000/v1拿它就可以给任何应用搭建对话 API。不放心训练效果的话python ./src/test_model.py会用一批常见聊天问题帮你测一轮。部署微信机器人最后一步让分身真正住进微信。源码在 src/wechat_bot/启动顺序有讲究——先起 API 服务再跑机器人python ./src/api_service.py python ./src/wechat_bot/main.py终端会打出二维码扫码登录后私聊它、或者在群聊里 它都能触发回复。回复按拆成多条、间隔 2.2 秒逐条发出刻意模拟真人打字节奏。这里必须泼一盆冷水微信有封号风险README 明确建议用小号且账号必须绑定银行卡才能用。主号就别折腾了。几个容易忽略的提醒隐私聊天记录是典型的个人数据导出和处理时注意存储位置好在默认脚本已经会剔除手机号、证件号、邮箱、网址这类敏感字段禁用词库可以再兜一层。人设可调不想让它扮演人类改src/template.py里的default_prompt就行改完模板注册逻辑会自动带上。显存参考README 附了一张各模型、各训练方法的显存估算表7B 用 QLoRA 4bit 可以压到 6GB没有大卡也能玩只是需要自己改模板相关配置。模型导出src/export_model.py提供了导出入口想把 LoRA 适配器合并成独立模型时用得上。整体来看WeClone 的价值不在于训练过程多复杂而在于把聊天记录 → 训练集 → 微调 → 微信机器人这条链路全铺好了新手照着走一遍一个下午就能看到自己的数字分身在群里接话。【免费下载链接】WeClone One-stop solution for creating your AI twin from chat history Fine-tune LLMs with your chat logs to capture your unique style, then bind to a chatbot to bring your digital self to life.项目地址: https://gitcode.com/GitHub_Trending/we/WeClone创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考