使用LangSmith LLM运行数据进行模型微调

在这篇文章中,我们将介绍如何直接加载LangSmith的LLM运行数据,并基于这些数据微调一个模型。这个过程相对简单,并且由三个步骤组成:

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

完成这些步骤后,您可以在LangChain应用中使用微调后的模型。

安装前提条件

在深入了解之前,请确保您已安装langchain >= 0.0.311版本,并配置环境以使用您的LangSmith API密钥。

%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

1. 选择运行

第一步是选择要用于微调的运行数据,通常会选择那些在用户反馈中表现良好的LLM运行。以下代码生成了一些示例运行数据,供您使用。

from enum import Enum
from langchain_core.pydantic_v1 import BaseModel, Field

class Operation(Enum):
    add = "+"
    subtract = "-"
    multiply = "*"
    divide = "/"

class Calculator(BaseModel):
    """A calculator function"""
    num1: float
    num2: float
    operation: Operation = Field(..., description="+,-,*,/")

    def calculate(self):
        if self.operation == Operation.add:
            return self.num1 + self.num2
        elif self.operation == Operation.subtract:
            return self.num1 - self.num2
        elif self.operation == Operation.multiply:
            return self.num1 * self.num2
        elif self.operation == Operation.divide:
            if self.num2 != 0:
                return self.num1 / self.num2
            else:
                return "Cannot divide by zero"

from pprint import pprint
from langchain_core.utils.function_calling import convert_pydantic_to_openai_function

openai_function_def = convert_pydantic_to_openai_function(Calculator)
pprint(openai_function_def)

在上面的代码中,我们定义了一个简单的计算器函数,并将其转换为OpenAI功能定义。

2. 准备数据

接下来,我们创建一个LangSmithRunChatLoader实例,并使用其lazy_load()方法加载聊天会话。

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)

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

# 微调完成

微调完成后,您可以使用结果模型 ID 与ChatOpenAI模型类结合在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,
)

(prompt | model).invoke({"input": "What's 56/7?"})

恭喜您!您已成功使用LangSmith LLM运行数据微调了一个模型。如果遇到问题欢迎在评论区交流。

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值