利用LangSmith聊天数据集进行模型微调的完整流程

在本文中,我们将深入探讨如何使用LangSmith聊天数据集微调一个模型,并在LangChain应用中使用这个经过微调的模型。整个过程简单明了,分为三个主要步骤:创建聊天数据集、加载数据示例以及进行模型微调。让我们从安装必要的前置条件开始。

前置条件

确保您已安装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"

1. 选择数据集

在本教程中,我们将直接选择要进行微调的运行数据集,通常这些数据是从已追踪的运行结果中整理出来的。通过LangSmith客户端上传一个现有的数据集进行微调。

from langsmith.client import Client

client = Client()

import requests

# 获取示例数据集
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. 准备数据

下一步,利用LangSmithRunChatLoader加载聊天会话,并将其转换为适合微调的格式。

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。

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

# 使用经过微调的模型
from langchain_openai import ChatOpenAI

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

# 调用模型
model.invoke("There were three ravens sat on a tree.")

使用ChatOpenAI,您可以在LangChain应用中轻松地调用经过微调的模型。

经过上述步骤,您已成功用LangSmith LLM运行数据微调模型。如果遇到问题欢迎在评论区交流。
—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值