# 别错过!如何用LangSmith LLM运行数据细调你的模型
## 引言
在当今AI技术的快速发展中,细调(fine-tuning)已成为提升模型性能的常用策略之一。在这篇文章中,我们将探讨如何使用LangSmith的LLM运行数据来细调一个模型。本文将为你提供详细的步骤,从数据选择到实际细调,再到如何在LangChain应用中使用细调后的模型。
## 主要内容
### 1. 选择LLM运行
首先,选择要用于细调的运行数据。一个常见的做法是选择获得正面用户反馈的LLM运行。在这里,我们会示例如何生成一些运行数据,这些数据可以用于细调简单的函数调用链。
```python
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"
2. 准备数据
使用LangSmithRunChatLoader
加载聊天记录,然后将其转化为适合细调的格式。
from langchain_community.chat_loaders.langsmith import LangSmithRunChatLoader
from langchain_community.adapters.openai import convert_messages_for_finetuning
loader = LangSmithRunChatLoader(runs=llm_runs)
chat_sessions = loader.lazy_load()
training_data = convert_messages_for_finetuning(chat_sessions)
3. 细调模型
使用OpenAI库进行细调。在某些地区,由于网络限制,开发者可能需要考虑使用API代理服务以提高访问的稳定性。
import openai
import json
import time
from io import BytesIO
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在LangChain应用中。
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数据来细调一个AI模型。这不仅提升了模型的性能,还为应用的场景化提供了更多可能性。为进一步深入学习,推荐查看以下资源:
参考资料
- LangChain Docs
- OpenAI API Documentation
- LangSmith Cookbook
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---