一旦訓練數據準備好,我們將首先創建一個腳本來上傳數據并創建微調任務。我為此創建了一個新的系統節點項目,并從安裝 OpenAI SDK 開始:

npm install openai

接著,我們需要一個 upload_finetune.mjs 文件來包含我們的腳本。首先導入必要的依賴項:

import { Configuration, OpenAIApi } from "openai";
import fs from 'fs';

配置 API,讀取環境中的 API 密鑰:

const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);

在這一部分,我們從環境中讀取 API 密鑰,確保已經將其作為 shell 初始化腳本的一部分配置好。接下來,我們將上傳訓練數據。為了進行微調,我將數據文件重命名為 hal_script.jsonl,并通過 OpenAI 的文件 API 上傳。由于這些數據是用于微調的,我們將其標記為“fine-tune”,這樣 API 會自動進行一系列檢查和驗證,確保數據格式正確。

const uploadFileResponse = await openai.createFile(
fs.createReadStream("hal_script.jsonl"),
"fine-tune"
);

上傳完文件后,接下來是調用微調 API 來訓練模型。我們需要指定上傳的文件 ID,并選擇要微調的模型。在此示例中,我們使用的是 Davinci 模型,并為微調任務添加了一個后綴,以便區分不同的訓練數據。

const fineTuneUpload = await openai.createFineTune({
training_file: uploadFileResponse.data.id,
model: 'davinci',
suffix: 'hal'
});

就這樣,API 會獲取訓練數據并開始排隊處理。整個過程需要幾分鐘,訓練完成后,您將獲得一個經過微調的模型,可以開始使用了。

在模型訓練過程中,不妨停下來喝杯咖啡,放松一下。

一旦訓練完成,我們可以開始使用新的模型。首先,我們需要安裝一個用于管理終端聊天的工具:

npm i readline-sync

readline-sync 包將處理從終端讀取用戶輸入,并確保一切按預期工作。現在,讓我們創建 index.mjs 文件并導入相關的包:

import { Configuration, OpenAIApi } from "openai";
import readlineSync from 'readline-sync';

然后配置 OpenAI API,讀取環境中的 API 密鑰:

const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);

接著,查詢 API 獲取所有微調的模型:

const response = await openai.listFineTunes();

這部分很簡單,只需確保導入并初始化 SDK,然后查詢 API 獲取所有已進行微調的模型。接下來,我們將編寫一個簡單的聊天程序,使用約 20 行代碼來進行交互式對話。

while (true) {
const input = readlineSync.prompt();
if (input === 'bye') {
console.log('Bye!');
break;
}
try {
const chatResponse = await openai.createCompletion({
model: response.data.data[0].fine_tuned_model,
prompt: input,
max_tokens: 16,
temperature: 0.2,
});
console.log('HAL: ', chatResponse.data.choices[0].text.replaceAll('\n', '').trim());
} catch {
console.log('Something went wrong!');
break;
}
}

瞧,現在您可以與您最喜歡的人工智能進行對話了。讓我們深入解析一下這段代碼。首先,我們有一個 while 循環,目的是持續從終端讀取用戶輸入并保持程序不斷運行,直到用戶主動結束會話。

const input = readlineSync.prompt();
if (input === 'bye') {
console.log('Bye!');
break;
}

每當用戶按下 Enter 鍵時,輸入的內容就會被捕獲并作為對話的輸入。如果用戶輸入的是 “bye”,程序會理解為結束信號,從而停止循環,退出程序。

接著,我們使用輸入作為提示來生成聊天回復:

try {
const chatResponse = await openai.createCompletion({
model: response.data.data[0].fine_tuned_model,
prompt: input,
max_tokens: 16,
temperature: 0.2,
});
console.log('HAL: ', chatResponse.data.choices[0].text.replaceAll('\n', '').trim());
} catch {
console.log('Something went wrong!');
break;
}

這段代碼調用了 OpenAI Completion API,使用微調后的模型生成對話內容。我們從 Fine Tune API 獲取的微調模型通常是列表中的第一個,但如果您有多個模型,您可以通過模型的后綴來查找相應的模型。每次生成的回答將通過 HAL 這個角色進行展示。如果在過程中遇到錯誤,程序會輸出“Something went wrong!”并結束會話。

通過這種方式,您可以輕松與微調后的 HAL 模型進行互動,模擬一場經典的對話。

接下來,我們提供了兩個重要的參數來控制生成的響應。max_tokens 用來限制生成的文本中使用的令牌數量,而 temperature 則控制響應的確定性。雖然沒有模型能夠完全確定性地生成回答,但溫度參數能夠調節不同響應之間的多樣性。較低的溫度值通常會導致更加確定性的回答,而較高的值則會增加創意和變化性。

最后,如果在請求過程中出現問題,我們會通過錯誤處理機制讓用戶知道,并結束程序。

概括

這篇文章介紹了 OpenAI 提供的強大功能。我們回顧了 GPT-3 模型,并通過微調模型,如 HAL 9000,創建了一個簡單的終端聊天機器人體驗。然而,這僅僅是開始;不同的模型在執行任務時具有不同的特點。強烈推薦嘗試使用 “text-davinci-003” 模型,它無需微調,并且是目前最新、最強大的模型之一。此外,OpenAI 的 API 還支持文本編輯、流響應、圖像生成和代碼生成等功能。總的來說,進入這個領域是一個非常令人興奮的時刻,我期待著看到這項技術在未來幾年如何發展。

原文鏈接:Diving Into OpenAI’s ChatGPT API

上一篇:

利用LangChain與OpenLLM構建基于自定義知識庫的聊天機器人

下一篇:

我們發現了GPT-4在微調助手API方面存在的漏洞
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費