[如何将iMessage对话转化为LangChain训练数据:完整指南]

132 阅读2分钟
# 如何将iMessage对话转化为LangChain训练数据:完整指南

## 引言

在开发聊天机器人或AI模型时,真实世界的对话数据是极其宝贵的资源。本文将详细介绍如何使用`IMessageChatLoader`将iMessage对话转换为LangChain的聊天消息格式,以便用于模型的微调。

## 主要内容

### 1. 访问Chat DB

在MacOS上,iMessage会将对话存储在`~/Library/Messages/chat.db`的sqlite数据库中。不过,默认情况下,你的终端可能没有权限访问此路径。建议将该数据库复制到一个可访问的目录(如Documents)进行操作。

### 2. 创建Chat Loader

创建`IMessageChatLoader`实例时,需要提供`chat.db`的文件路径。这个工具允许我们将对话数据转化为LangChain可用的格式。

### 3. 加载消息

可以调用`load()``lazy_load()`方法加载消息,并将其转化为`HumanMessage`对象。从相同发送者连续发送的消息可以选择性地合并,还可以指定某个发送者的消息作为“AI消息”。

```python
from langchain_community.chat_loaders.imessage import IMessageChatLoader

# 使用API代理服务提高访问稳定性
loader = IMessageChatLoader(path="./chat.db")

from langchain_community.chat_loaders.utils import (
    map_ai_messages,
    merge_chat_runs,
)
from typing import List
from langchain_core.chat_sessions import ChatSession

raw_messages = loader.lazy_load()
merged_messages = merge_chat_runs(raw_messages)  # 合并连续消息
chat_sessions: List[ChatSession] = list(
    map_ai_messages(merged_messages, sender="Tortoise")
)

4. 准备用于微调

接下来,将聊天信息转换为OpenAI可用的字典格式,准备进行模型微调。

from langchain_community.adapters.openai import convert_messages_for_finetuning

training_data = convert_messages_for_finetuning(chat_sessions)
print(f"Prepared {len(training_data)} dialogues for training")

5. 微调模型

确保已安装openai库,并正确设置OPENAI_API_KEY。以下代码可用于在OpenAI平台上进行微调。

import openai
import json
import time
from io import BytesIO

my_file = BytesIO()
for m in training_data:
    my_file.write((json.dumps({"messages": m}) + "\n").encode("utf-8"))

my_file.seek(0)
training_file = openai.files.create(file=my_file, purpose="fine-tune")

status = openai.files.retrieve(training_file.id).status
start_time = time.time()
while status != "processed":
    time.sleep(5)
    status = openai.files.retrieve(training_file.id).status

job = openai.fine_tuning.jobs.create(
    training_file=training_file.id,
    model="gpt-3.5-turbo",
)

常见问题和解决方案

  • 文件权限问题:复制数据库到可访问目录,或在系统设置中授予终端完全磁盘访问权限。
  • 网络访问限制:某些地区可能需要使用API代理服务。

总结和进一步学习资源

通过本文,你已经学会了如何使用LangChain工具从iMessage数据库提取对话,并将其用于AI模型微调。欲了解更多,请参考以下资源:

参考资料

  1. Apple Developer Documentation
  2. LangChain 官方文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---