微信聊天记录微调 ChatGLM 打造数字克隆:WeClone 从数据到可对话的实战路径
2026/9/9 22:30:50 网站建设 项目流程

微信聊天记录微调 ChatGLM 打造数字克隆: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 做的是这件事:用 ChatGLM 3-6B 做底座,LoRA 方式做 SFT,把"你的说话风格"灌进模型里,再挂到微信机器人上。效果上限基本由聊天数据的数量和质量决定,这一点在动手前要先有预期。

环境准备:不装好就跑不起来

软件层面,README 给出了最低与推荐版本,实际使用建议按推荐档配置:

依赖最低推荐
Python3.83.10
torch1.13.12.2.1
transformers4.37.24.38.1

可选加速项:CUDA 11.6+、deepspeed、bitsandbytes、flash-attn。硬件上,LoRA 微调 6B 模型约需 16GB 显存;如果只有 10GB 左右,QLoRA 可以压到 6~10GB,但要改模板配置,先按默认方案走。

conda create -n weclone python=3.10 conda activate weclone pip install -r requirements.txt

聊天记录用 PyWxDump 导出为 CSV,按"每个联系人一个文件夹"的结构放进 data/ 下。注意 make_dataset/csv_to_json.py 读的是固定路径./data/csv,目录不对脚本会直接空转。

模型首选 Hugging Face 上的 ChatGLM 3-6B;国内网络不稳可以走 ModelScope,但后续所有训练推理命令前都要带上export USE_MODELSCOPE_HUB=1,漏了会报找不到模型。

最小可运行闭环:从克隆仓库到弹出第一句回复

整条最短路径只有四步,每步一条核心命令。

第一步,克隆仓库:

git clone https://gitcode.com/GitHub_Trending/we/WeClone

第二步,配置并转换数据。把 settings.json 里的model_name_or_path指向模型目录,然后运行数据预处理:

python make_dataset/csv_to_json.py

脚本会自动过滤手机号、身份证、邮箱等敏感内容,再按"一问一答"配对生成 data/res_csv/sft/sft-my.json。同一人连发多条消息时,make_dataset/ 下有三个脚本对应三种处理方式:逗号拼接、只取最长回答、或放进多轮 history,默认用csv_to_json.py即可。

第三步,SFT 微调:

python src/train_sft.py

作者训练后的 loss 停在 3.5 左右,继续往下降往往就开始过拟合,曲线掉得太猛可以提前停。

第四步,浏览器验证:

python src/web_demo.py

页面打开后输入"哈喽",模型能接上话、自称名字、接住"你是 95 年的?"这种语境,就说明整条链路通了。

功能与能力展示

日常对话拟人化。训练后的模型会保持角色一致性,对话不跳戏,能记住前文上下文,回复长度和语气贴近真人聊天习惯,而不是"作为 AI 助手"那种腔调。

口语风格还原。网络流行语和表情记号都能接住,比如"我瘦成狗了"配[doge]这种场景,模型会顺着梗往下聊:

微信原生接入。先用python src/api_service.py起一个本地 API 服务(默认 8000 端口),再跑 src/wechat_bot/main.py 扫码登录,就能私聊或在群里 @ 机器人。机器人侧保留最近 15 轮上下文,回复会按逗号拆成多条消息、间隔 2.2 秒发出,模拟真人打字节奏,避免一眼看穿是机器。

进阶定制:数据、参数与模板按需展开

以下三项都不影响最小闭环,用到哪个再改哪个。

数据清洗。预处理脚本默认剔除隐私字段,还提供了一个禁用词词库 make_dataset/blocked_words.json,命中禁用词的整句会被丢弃。聊天记录里不想让模型学的内容,加进去就行。

训练与推理调参。都在 settings.json:显存吃紧就调小per_device_train_batch_size,或减小lora_rank(默认 4);数据量不大时num_train_epochs别拉太高。推理侧的temperaturetop_prepetition_penalty控制回复的随机程度,重复啰嗦就调高 repetition_penalty,回复太木就适当调高 temperature。

对话模板。风格人设在 src/template.py 的default_prompt里,默认是"请你扮演一名人类,不要说自己是人工智能"。想让它自称某个名字、带点方言口癖,直接改这句话,重新训练生效。

常见坑与自查

模型路径配错了会怎样?训练或 demo 启动阶段就报找不到 checkpoint。核对 settings.json 中model_name_or_path指向的目录是否真的存在模型权重文件。

显存不够 OOM 怎么办?优先调小per_device_train_batch_size,其次降低lora_rank;仍不够再考虑 QLoRA 量化方案。

loss 降得特别快、回复开始复读?大概率过拟合,提前停训,并适当降低num_train_epochs

数据太少,回复风格不明显?正常现象,最终效果强依赖数据量,优先补同一联系人、跨度更长的聊天记录再重训。

微信号相关。微信机器人有封号风险,作者建议用小号且账号需绑定银行卡,别拿主号试。

跑通之后,建议先用 10 条左右的聊天记录试跑一轮微调,观察回复风格是否接近预期,再决定要不要扩大数据集和加大训练轮数。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询