大家好,我是梦飞。
好久不见,一个月前发布的视频号内容,今天终于能够填坑了!
本次带来的教程是:
《用聊天记录克隆自己的AI分身》
在我多次尝试(其实是多个平台账号欠费之后),终究是放弃了让大家云端使用,学习和使用成本太高。
为了降低门槛,本篇教程依然全程本地操作,无需调用云端资源。让大家既能体验大模型训练和调用,又可以无负担的使用自己微调后的大模型!
话不多数,准备开始,首先明确下目标:
本篇教程的目标是,把自己微信中的聊天记录导出,用自己的聊天记录去微调一个模型,最终将这个微调后的模型接入微信中,替你回复消息。
本文较长,看不完建议先!收!藏!
本次要完成以下步骤如下:1、导出微信聊天记录
2、整理导出的聊天记录为数据集格式
3、部署LLamaFactory和微调大模型
4、发布微调后的模型为API
5、接入Cow微信机器人项目
补充说明:
-
本篇教程可以带你手把手无痛的体验如何自建数据集,并使用LoRA微调大模型(SFT)。但模型训练是一个多方因素影响,需要不断调参、优化。因此受数据集质量和参数影响,即使跟随本篇教程完全操作完成,是不能保证你训练的模型是“聪明”可用的。因此需要放低期待,沉下心去做。
-
同时也因我简化了内容,所以门槛相对降低很多,因此相信你花点时间就一定可以完成。
以下教程基于Windows11系统进行制作。
一、导出聊天记录
- 我们需要借助一个工具:“MemoTrace 留痕”,是一款强大的微信聊天记录管理工具
工具主页:https://memotrace.cn/#price
点击链接直接去主页下载。
下载后,根据提示进行安装,安装完成后看到以下界面
- 在这台电脑上登录微信,然后直接点击获取信息,会自动获取到你的微信信息
- 点击解析数据,开始解析,等待解析完成。
- 选择「好友」导航栏,选择你聊天比较多的好友。(之前可以多选导出全部,但是最新版本不可以了,也可能是我没找到功能点,大家可以找找看,但根据经验,建议只导出自己经常聊天的几个人的记录就可以了,太多没有连续对话的,没有背景信息的上下文,反而可能导致效果不好。
- 点击「导出json」,只要这个格式是最方便转换为我们需要的训练集格式。
- 导出后我们会得到两个文件,我们只需要用到_train后缀的文件即可。
二、整理聊天记录为数据集
- 如果你导出了多个人的,需要你手动将这个文件下的内容,全部汇总到一起。
- 汇总完成后,保存你的汇总文件,命名为“train.json”。
- 在当前文件夹下新建一个文本文档,重命名为“1.py”,然后用记事本打开,粘贴进入以下代码。
⚠️中间有一个名字,这个地方注意需要修改。
import json
import re
import os
def process_file(input_file, output_file):
try:
with open(input_file, 'r', encoding='utf-8') as f:
content = f.read()
print(f"Successfully read input file: {input_file}")
# Remove leading '[' and trailing ']'
content = content.strip()[1:-1]
# Use regex to match each dialogue object
pattern = r'\{[^{}]*"messages":\s*\[[^[\]]*\][^{}]*\}'
matches = re.finditer(pattern, content)
match_count = 0
with open(output_file, 'w', encoding='utf-8') as f:
for match in matches:
dialogue = json.loads(match.group())
# Ensure each dialogue has a system message
if not any(msg['role'] == 'system' for msg in dialogue['messages']):
dialogue['messages'].insert(0, {
"role": "system",
"content": "你是张梦飞(此处换成你的名字),一个聪明、热情、善良的人,后面的对话来自你的朋友,你要认真地回答他"
})
# Write JSON object in OpenAI format
f.write(json.dumps({"messages": dialogue['messages']}, ensure_ascii=False) + '\n')
match_count += 1
print(f"Processing complete. {match_count} dialogues written to {output_file}")
except FileNotFoundError:
print(f"Error: Input file not found: {input_file}")
except json.JSONDecodeError as e:
print(f"Error: Invalid JSON in input file: {e}")
except Exception as e:
print(f"An unexpected error occurred: {e}")
# Use the script
input_file = 'train.json' # Update this to your actual input file name
output_file = 'train_formatted.jsonl'
current_dir = os.path.dirname(os.path.abspath(__file__))
input_path = os.path.join(current_dir, input_file)
output_path = os.path.join(current_dir, output_file)
print(f"Input file path: {input_path}")
print(f"Output file path: {output_path}")
process_file(input_path, output_path)
- 打开命令行窗口,输入“python 1.py”
-
聊天记录整理完成,在第31步时会用到。
三、部署LLama Factory
- 打开MicroSoft Store,搜索Ubuntu
- 找到Ubuntu 18.04.6 LTS版本,点击下载
- 下载完成后,点击打开,如下图
- 先输入你的用户名,然后点击回车,再输入密码,然后点击回车(注意,在Ubuntu中,输入的用户名和密码是不现实的,输入后直接回车即可)
- 密码输入后回车,会显示:操作成功和下方代码。
- 升级apt,输入以下命令,点击回车。输入你的用户密码,点击回车,开始自动升级。
sudo apt update && sudo apt full-upgrade -y
出现绿色的用户名代表执行完成。
- 输入以下命令,下载安装conda
wget -U NoSuchBrowser/1.0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.02-1-Linux-x86\_64.sh
- 输入以下命令,安装conda(输入命令后,一直按着回车)
sh Anaconda3-2024.02-1-Linux-x86\_64.sh
- 激活conda环境,一行一行,依次输入以下命令
cd
cd anaconda3/
cd bin
./conda init
source ~/.bashrc
- 下载通义千问-0.5b大模型(最小模型,大家都能玩,先跑通再来下载更大的模型)
- 输入以下代码,检查你是否有git,显示版本号就是有git。
cd
git --version
- 每一行,依次粘贴输入以下代码,保证你的 lfs 可用
sudo apt-get update
sudo apt-get install git-lfs
mkdir my-new-repo
cd my-new-repo
git init
git status
git lfs install
- 输入以下代码,下载大模型
cd ..
git clone https://www.modelscope.cn/Qwen/Qwen2-0.5B.git
- 下载LLaMA-Factory
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
- 下载完成后,依次一行一行的粘贴下方命令并回车,创建一个LLaMA-Factory运行的专属环境
cd LLaMA-Factory
conda create -n fine-tuning python=3.10
最后需要输入一个“y”,输入后回车即可。
- 输入以下代码,激活 fine-tuning环境。
conda activate fine-tuning
- 安装依赖文件,输入以下命令等待下载完成。
pip install -e ".[torch,metrics]" -i https://pypi.tuna.tsinghua.edu.cn/simple
- 运行LLaMA-Factory,并打开操作页面。
输入以下命令行,等待他自动打开操作页面。
llamafactory-cli webui
看到这个页面,恭喜你,完成了工具的部署。如果英语看着不习惯,你可以在左上角选择“切换中文语言”
- 查找模型路径
打开你的电脑文件管理器,找到Linux,home文件夹-用户名,然后可以看到你刚才下载的模型名称。点击进入
- 复制home后边的路径,粘贴进入:「模型路径输入框」,选择对应的「模型名称」
(此处有坑!注意,直接复制的路径是\反斜杠,但需要的是/ ,所以需要把路径中的斜杠替换以下,如下图。)
微调方法设置为:lora,检查点路径不用管。
- 把你在第11步整理好的数据,复制粘贴到你的\LLaMA-Factory\data文件夹下,粘贴完成后。
- 打开dataset_info.json文件,修改文件内容。在这个文件的最后,粘贴进入以下代码
,
"train_formatted": {
"file_name": "train_formatted.jsonl",
"formatting": "sharegpt",
"columns": {
"messages": "messages"
},
"tags": {
"role_tag": "role",
"content_tag": "content",
"user_tag": "user",
"assistant_tag": "assistant",
"system_tag": "system"
}
}
- 返回LLaMA的页面,查看「数据集」,选择刚刚添加完成的“train_formatted”数据集。
- 再找到这个文件夹下的“identity.json”文件,双击打开
然后快捷键Ctrl+H,全局替换这个地方的内容。
- 再添加选中“identity”数据集。
- 训练轮数改成15,其他的都暂时不动。
- 点击「预览命令」,无报错后,点击「开始」,开始训练。
- 选择chat页,点击「检查点路径」,选择刚才训练Lora的输出目录名称,然后点击加载模型。
加载完成后,在下方输入问题,测试大模型。可以问AI,他是谁。他应该会回答你,你设置的名字。
这里需要说明下:训练大模型是一个需要反复调试的复杂过程,数据集和训练参数都会影响最终的训练效果,本次旨在带大家体验和跑通流程,模型的调优需要大家更深入的去学习和实践。
四、发布模型为API
- 对外发布训练后的模型接口
新开一个Ubuntu命令窗口,可以还从Microsoft Store打开,也可以从你的「系统」打开一个新的命令窗口。
新打开的Ubuntu窗口,还是默认账户,如果你设置了用户名,需要输入,然后输入密码进入
su - 你的用户名
然后需要激活啊conda环境,输入以下代码激活,
conda activate fine-tuning
- 以下是一个命令模版,你 需要填入【你自己的文件路径】
*(1)下方命令行,标红的地方,要改成你自己源模型地址源模型地址,
在你的LLaMA-Factory文件夹的同级目录下
*(2)标绿的地方,要改成你自己LoRA地址
你训练后的LoRA地址,在你的LLaMA-Factory\saves\Qwen2-0.5B\lora\文件夹下,这里存放了你刚才命名的Lora。
填入正确的地址后,直接粘贴到命令窗口中,点击回车。
CUDA\_VISIBLE\_DEVICES=2 API\_PORT=8000 llamafactory-cli api --model\_name\_or\_path /home/zmf/Qwen2-0.5B --adapter\_name\_or\_path /home/zmf/LLaMA-Factory/saves/Qwen2-0.5B/lora/train\_2024-10-09-00-20-10 --template qwen --finetuning\_type lora
hostname -I
你会得到一个172.17.xx.xxx 的地址。我这里是172.17.35.174
- 拿到这个地址后,打开浏览器输入:172.17.xx.xxx:8000/docs
你会进入到FastAPI的UI页面,如下图:
- 点击第二个POST,打开折叠口
- 点击后往下滚动,如果看到Server response在的Code编码是“200”,说明API访问成功。
五、链接微信机器人
根据本地部署COW的教程,参考此篇在你自己电脑上部署COW微信机器人项目,将COW部署完成后。
替换COW中的config.json文件中的字段为:
"model":"qwen2-0.5b",
"open_ai_api_base":"http://172.17.35.174:8000/v1",
"open_ai_api_key":"sk-123456",
然后扫码执行登录,就大功告成了!
如果遇到任何问题,可下方评论或者联系我,尽力回复和解答
往期推荐:
⚡ 以上内容,如有错漏,欢迎留言补充、批评、指正。
⚡以上如果对你有帮助,请转发、在看、点赞三连支持