用 3 个环节搭一个微信 AI 助手: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
想象一个画面:你发出去一条"在忙吗",隔几秒跳回一条"在的,刚开完会"——语气、用词、连标点习惯都像你自己。回复这条消息的不是你,而是你的数字分身。WeClone 就是做这件事的开源项目:它拿你的微信聊天记录去微调(也就是用你自己的语料继续训练,让模型学会你的说话方式)ChatGLM 大模型,再把这个"克隆的你"接到微信里,当你的私人 AI 助手。
部署前需要准备什么
前置条件一句话:有 Python 3.10 环境,GPU 显存 16GB 起步(LoRA 方式微调 6B 模型的估算值;显存不足可换 8 位量化方案)。后面所有改动都发生在你自己本地克隆的项目里,仓库本身不需要动。
| 环节 | 操作 / 命令或说明 |
|---|---|
| 1. 前置条件 | Python 3.8+(推荐 3.10)、CUDA 11.6+;准备一个已导出为 CSV 的微信聊天记录;下载 ChatGLM3-6B 基础模型到本地 |
| 2. 准备环境 | 克隆代码并装依赖:bash<br>git clone https://gitcode.com/GitHub_Trending/we/WeClone && cd WeClone<br>pip install -r requirements.txt<br> |
| 3. 配置模型 | 在本地克隆的 settings.json 中,把common_args里的model_name_or_path指到你下载 ChatGLM3-6B 的目录,adapter_name_or_path保持为训练产出的model_output |
| 4. 跑通验证 | 启动浏览器 demo,发几句日常消息,确认回复口吻接近你本人:bash<br>python ./src/web_demo.py<br> |
数字分身能接到微信里干几件事
像本人一样回消息
它能接住"你好""在吗"这类高频短句,并且用你的口吻回应,而不是客服腔。例:
你:今天加班到十点 分身:我懂,我昨天也是。
回复长度和语气都被infer_args里的max_length、temperature约束着,默认配置下就是短句、低随机性的"熟人风格"。
多轮对话不失忆
它能记住上下文,连续追问也不会突然岔开话题。例:
你:好累啊今天 分身:哈哈哈哈 你:你哈哈哈哈 分身:? 你:困死我了 分身:我也是 你:那晚安喽 分身:安安安安安安
听懂网络梗和表情包
它不只会答正经问题,"瘦成狗了""[doge]"这类口语和表情它接得住、还会接梗。例:
你:最近瘦了没 分身:瘦成狗了 你:真的假的 分身:[doge],真的,饿的
在真实微信里被 @ 出来
在微信里私聊它,或在群聊中 @ 它,都会走和浏览器 demo 相同的推理链路。注意它只"像你",不会替你做决定,回复内容仍需你自己把关。
想让数字分身更像你:数据、调参与人设三步走
第一步:整理数据
用 PyWxDump 把聊天导出为 CSV,放到./data/csv目录,然后在本地克隆的项目里运行 make_dataset/csv_to_json.py 转成训练 JSON。脚本会默认滤掉手机号、邮箱等隐私字段;make_dataset/blocked_words.json 是禁用词库,整句命中即删除,可按需补充。同一个连发多句的回答有三种处理脚本可选(逗号拼接、取最长句、放进 history),按你语料的对话密度挑一个。
第二步:调参微调
在你本地的 settings.json 中改train_sft_args:per_device_train_batch_size与gradient_accumulation_steps控制单卡显存;num_train_epochs、lora_rank、lora_dropout控制学习强度。改完运行python src/train_sft.py(入口 src/train_sft.py),产出model_output里的 LoRA 权重;显存富余可加 ds_config.json 走 deepspeed 多卡。也可以先用 src/train_pt.py 做预训练阶段,但提升通常不明显,可以跳过。
第三步:设定人设
回复模板由 src/template.py 定义(chatglm3-weclone),分身"开口前"的角色设定写在这里。想让它自称什么、怎么接话,在本地克隆的这份模板里调整即可——这一步决定了同一个模型是"你"还是"陌生人"。
避坑与调优:问题→解法
- 显存不够怎么办?在本地克隆的 settings.json 中调低
per_device_train_batch_size、用gradient_accumulation_steps补偿,或整体切到 8 位量化(QLoRA),6B 模型显存可从约 16GB 降到 10GB 上下。 - 回复太慢怎么提速?
infer_args里max_length默认 50,是速度和长度的平衡点;追求更快就再压小,追求流畅长回复则调temperature与top_p,别一味放大。 - 回复开始复读怎么办?把
repetition_penalty从默认 1.2 再抬高一点,复读通常就能压下去。 - loss 降得很低就一定是好事吗?不一定。数据只有两万条时,loss 降到 3.5 以下往往已接近过拟合,此时应减小
num_train_epochs或lora_rank,而不是继续训。 - 训练效果差找谁?先查数据。项目方自己说了:最终效果很大程度取决于聊天数据的数量和质量,再花哨的参数也救不了脏数据。
- 微信会封号吗?有封号风险,且机器人账号必须已绑定银行卡。建议用小号,并遵守微信平台使用规范。
上线前自检:对照这张表逐项过一遍
| 检查项 | 达标标准 | 对应文件 |
|---|---|---|
| 基础模型就位 | ChatGLM3-6B 已下载到本地,路径与配置一致 | settings.json |
| 微调权重就位 | model_output中已产出 LoRA 适配器 | src/train_sft.py |
| 对话可用 | 浏览器 demo 能连续对话且口吻接近本人 | src/web_demo.py |
| 接口与机器人 | API 服务与微信机器人启动后终端出现登录二维码 | src/api_service.py、src/wechat_bot/main.py |
| 数据链路通 | ./data/csv下有 CSV,且转换脚本可跑通 | make_dataset/ |
| 敏感词过滤 | 禁用词库已按需更新 | make_dataset/blocked_words.json |
以上都通过后,你的微信 AI 助手才算真正"上线"。提醒一句:个人微信跑机器人存在封号风险,务必用小号并遵守平台规范。现在可以回到终端,把 make_dataset/ 里的脚本跑一遍,开始给你的数字分身备料。
【免费下载链接】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),仅供参考