跳到主要內容
Open In ColabOpen on GitHub

LangSmith 聊天資料集

本筆記本示範了一種簡單的方法來載入 LangSmith 聊天資料集,並根據該資料微調模型。此過程很簡單,包含 3 個步驟。

  1. 建立聊天資料集。
  2. 使用 LangSmithDatasetChatLoader 載入範例。
  3. 微調您的模型。

然後您可以在您的 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["LANGSMITH_TRACING"] = "true"
os.environ["LANGSMITH_API_KEY"] = "YOUR API KEY"

1. 選擇資料集

本筆記本直接根據選擇哪些執行來微調模型。您通常會從追蹤的執行中整理這些資料。您可以在文檔 docs 中了解更多關於 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 的實例,並使用其 lazy_load() 方法載入聊天會話。

from langchain_community.chat_loaders.langsmith import LangSmithDatasetChatLoader

loader = LangSmithDatasetChatLoader(dataset_name=dataset_name)

chat_sessions = loader.lazy_load()
API 參考文檔:LangSmithDatasetChatLoader

載入聊天會話後,將它們轉換為適合微調的格式。

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

# Wait for the fine-tuning to complete (this may take some time)
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

# Now your model is fine-tuned!
Status=[running]... 429.55s. 46.34s

4. 在 LangChain 中使用

微調後,在您的 LangChain 應用程式中使用產生的模型 ID 和 ChatOpenAI 模型類別。

# Get the fine-tuned model ID
job = openai.fine_tuning.jobs.retrieve(job.id)
model_id = job.fine_tuned_model

# Use the fine-tuned model in LangChain
from langchain_openai import ChatOpenAI

model = ChatOpenAI(
model=model_id,
temperature=1,
)
API 參考文檔:ChatOpenAI
model.invoke("There were three ravens sat on a tree.")
AIMessage(content='[{"s": "There were three ravens", "object": "tree", "relation": "sat on"}, {"s": "three ravens", "object": "a tree", "relation": "sat on"}]')

現在您已成功使用來自 LangSmith LLM 運行的資料微調了模型!


此頁面是否有幫助?