Node.js指南:个性化您的ChatGPT模型
通过微调ChatGPT模型可以极大地增强其功能,使其能更好地适应特定的用例或上下文。使用Node.js,您可以通过使用特定的脚本来管理微调过程的不同方面来简化此过程。本指南将使用各种Node.js脚本指导您完成必要的步骤。
配置环境
在进入微调过程之前,请确保您具备以下先决条件:
- Node.js已安装:请确保您的计算机上已安装Node.js。您可以从官方Node.js网站下载它。
- 访问OpenAI的API:从OpenAI获取必要的API密钥和权限,以便与他们的GPT模型进行交互。
步骤1:准备数据集
这个示例的目标是构建一个聊天机器人,偶尔会以嘲讽的方式做出回应。以下是我们可以为数据集构建的三个可能的训练实例(对话)。 该空格的格式保留了HTML结构。
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already."}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]}
对于优化gpt-3.5-turbo,需要使用对话式聊天格式。对于babbage-002和davinci-002,您可以按照以下所示的传统优化所使用的提示完成对对话格式进行操作。
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
将所有数据集放入 dataset.jsonl 文件中。
步骤2:安装依赖
npm i openai dotenv
步骤2:配置 OpenAI
在项目的根目录中创建一个.env文件,并粘贴您的OpenAI访问密钥。然后创建一个config.js文件,并粘贴下面的代码。
OPENAI_KEY = <your open AI api key>
import { Configuration, OpenAIApi } from 'openai'
import dotenv from 'dotenv';
dotenv.config();
const openaiApiKey = process.env.OPENAI_KEY
const configuration = new Configuration({
apiKey: openaiApiKey,
})
export const openai = new OpenAIApi(configuration)
步骤3:上传数据进行微调。
请执行以下的uploadfinetune.js脚本来上传您的数据集。该数据集应包含与您想要为其进行调优的上下文或任务相关的示例。
import { openai } from './config.js'
import fs from 'fs'
async function upload() {
try {
const response = await openai.createFile(
fs.createReadStream('./dataset.jsonl'),
'fine-tune'
);
console.log('File ID: ', response.data.id)
fs.writeFileSync('./fileId.js', `export const fileId = "${response.data.id}"`)
} catch (err) {
console.log('err: ', err)
}
}
upload()
执行:
node uploadfinetune.js
一旦代码执行完成,它将返回已上传文件的ID作为响应,我们需要这个ID进行接下来的步骤,因此我们将将该文件ID保存在fileId.js文件中作为一个常量变量。
第4步:创建微调会话
运行createfinetune.js来启动微调过程,使用已上传的文件ID。该步骤配置模型以适应提供的数据集。在本例中,我们将使用davinci模型进行微调。
您可以在这里找到所有GPT模型。
import { openai } from './config.js'
import { fileId } from './fileId.js'
async function createFineTune() {
try {
const response = await openai.createFineTune({
training_file: fileId,
model: 'davinci'
})
console.log('response: ', response)
} catch (err) {
console.log('error: ', err.response.data.error)
}
}
createFineTune()
步骤五:检查微调状态
一旦细调数据集上传到模型中,完成这个过程将需要几个小时或者几天,具体时间取决于数据大小。您可以通过运行以下代码来检查细调状态。
import { openai } from './config.js'
async function listFineTunes() {
try {
const response = await openai.listFineTunes()
console.log('data: ', response.data.data)
} catch (err) {
console.log('error:', err)
}
}
listFineTunes()
这将返回包含微调会话对象和其状态的数组。
[
{
"object":"fine-tune",
"id":"####################",
"hyperparams":{
"n_epochs":4,
"batch_size":1,
"prompt_loss_weight":0.01,
"learning_rate_multiplier":0.1
},
"organization_id":"####################",
"model":"davinci",
"training_files":[
[
"Object"
]
],
"validation_files":[
],
"result_files":[
[
"Object"
]
],
"created_at":1703906869,
"updated_at":1703907105,
"status":"succeeded", // This will indicate the status of the process
"fine_tuned_model":"davinci:ft-personal-####################"
}
]
状态字段将指示进程的状态。最初,这将是待处理状态,一旦调整完善的模型准备好,它将变为成功,并显示调整完善的模型ID。
第六步:测试微调模型
使用精简模型ID运行createcompletion.js以生成补全结果,这样可以根据给定的上下文评估模型的性能。
import { openai } from './config.js'
async function createCompletion() {
try {
const response = await openai.createCompletion({
model: 'davinci:ft-personal-<fine_tuned_model>',
prompt: '<prompt text>',
max_tokens: 200
})
if (response.data) {
console.log('choices: ', response.data.choices)
}
} catch (err) {
console.log('err: ', err)
}
}
createCompletion()
结论
通过使用Node.js进行模型微调,您可以根据特定任务或领域优化模型,以更好地满足需求。利用这些JavaScript文件和OpenAI的API,您可以高效地管理整个微调过程,从数据上传到测试微调模型的功能。
记住,微调的有效性通常取决于所提供数据集的质量和相关性。尝试使用不同的方法和数据集来实现对于您特定用途的最佳结果。
快乐微调!