使用LangSmith LLM数据精调模型的完整指南

175 阅读3分钟
# 使用LangSmith LLM数据精调模型的完整指南

在这篇文章中,我们将探讨如何从LangSmith的LLM运行中直接加载数据,并利用这些数据精调模型。这一过程简单明了,分为以下三个步骤:

1. 选择用于训练的LLM运行。
2. 使用LangSmithRunChatLoader将运行加载为聊天会话。
3. 精调您的模型。

在完成这一切后,您可以在LangChain应用中使用精调后的模型。

## 引言

随着自然语言处理技术的不断发展,精调模型在特定任务上的表现显著提升。通过使用LangSmith的LLM运行数据,我们可以更有效地提高模型的专用性和精度。本指南将帮助您快速掌握这一流程。

## 主要内容

### 1. 环境准备

首先,确保您已经安装了`langchain`版本>=0.0.311,并配置了您的LangSmith API密钥。

```bash
%pip install --upgrade --quiet langchain langchain-openai

配置环境:

import os
import uuid

uid = uuid.uuid4().hex[:6]
project_name = f"Run Fine-tuning Walkthrough {uid}"
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "YOUR API KEY"
os.environ["LANGCHAIN_PROJECT"] = project_name

2. 选择运行

在进行模型精调之前,首先需要选择将用于训练的LLM运行。通常情况下,可以选择在用户反馈中评价较高的运行。

from langsmith.client import Client

client = Client()

successful_traces = {
    run.trace_id
    for run in client.list_runs(
        project_name=project_name,
        execution_order=1,
        error=False,
    )
}

llm_runs = [
    run
    for run in client.list_runs(
        project_name=project_name,
        run_type="llm",
    )
    if run.trace_id in successful_traces
]

3. 准备数据

使用LangSmithRunChatLoader加载聊天会话,并将其格式化为适合精调的数据。

from langchain_community.chat_loaders.langsmith import LangSmithRunChatLoader

loader = LangSmithRunChatLoader(runs=llm_runs)
chat_sessions = loader.lazy_load()

from langchain_community.adapters.openai import convert_messages_for_finetuning

training_data = convert_messages_for_finetuning(chat_sessions)

4. 精调模型

使用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

5. 在LangChain中使用

在精调完成后,获取模型ID并用于LangChain应用中。

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

from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model=model_id,
    temperature=1,
)
(prompt | model).invoke({"input": "What's 56/7?"})  # 使用API代理服务提高访问稳定性

常见问题和解决方案

  • API访问问题:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务提高访问的稳定性。
  • 模型精调时间过长:保持耐心,并定期检查运行状态。

总结和进一步学习资源

通过本文的介绍,您应该能够熟练掌握使用LangSmith的LLM运行数据精调模型的基本流程。要深入学习,可以参考以下资源:

  • LangSmith官方文档
  • OpenAI精调指南
  • LangChain开发者社区

参考资料

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


---END---