在本文中,我们将深入探讨如何使用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—