在昨天我們跟大家分享了關(guān)于GPT-3.5模型的初學(xué)者教程指南??《OpenAI 的 GPT-3.5-Turbo 模型初學(xué)者指南》??,今天這篇文章,我們?cè)賮?lái)分享一個(gè)關(guān)于構(gòu)建 ChatGPT 的 GPT-4 聊天機(jī)器人的過(guò)程,其中包含分步說(shuō)明和完整的代碼片段。我將介紹有關(guān) GPT-4 API 的基本信息,并提供實(shí)用的見(jiàn)解來(lái)幫助您創(chuàng)建一個(gè)功能強(qiáng)大、引人入勝的聊天機(jī)器人。
我們將深入研究模型定價(jià),探索聊天完成令牌的確切計(jì)算方式。此外,我將討論 GPT-3.5-turbo 和 GPT-4 之間的區(qū)別,比較它們的性能,讓您全面了解 GPT-4 必須提供的功能。
1.了解 GPT-4 模型
如果您閱讀了本文教程,您很可能已經(jīng)熟悉 OpenAI 和 ChatGPT。GPT 模型 API 允許像我們這樣的開(kāi)發(fā)人員訪問(wèn)和使用 GPT 系列中的預(yù)訓(xùn)練語(yǔ)言模型,例如 GPT-4 和 GPT-3.5-turbo。這些模型能夠生成類似人類的文本,執(zhí)行自然語(yǔ)言處理任務(wù),并支持廣泛的相關(guān)應(yīng)用。
GPT-4 是 OpenAI 的 GPT 模型家族中最新且功能最強(qiáng)大的成員。OpenAI 聲稱 GPT-4 在大多數(shù)測(cè)試基準(zhǔn)中都超過(guò)了 ChatGPT,這意味著我們有更好的機(jī)會(huì)實(shí)現(xiàn)我們想要的結(jié)果。
此外,它還具有改進(jìn)的安全功能。然而,GPT-4 并不是 GPT 模型的全部和終結(jié),并不意味著我們應(yīng)該立即停止使用其他模型。我將在本教程后面的與 GPT-3.5-turbo 的比較部分進(jìn)一步討論這一點(diǎn)。
2.獲得對(duì) GPT-4 模型的訪問(wèn)權(quán)限
在撰寫(xiě)本教程時(shí),公眾可以通過(guò)兩種方式訪問(wèn) GPT-4 模型。
ChatGPT Plus 訂閱:通過(guò)訂閱 ChatGPT Plus,您將獲得對(duì) GPT-4 的有限訪問(wèn)權(quán)限。此訂閱允許用戶每 3 小時(shí)發(fā)送 25 條聊天消息。
GPT-4 API(僅限受邀者):目前只有受邀者才能通過(guò)等候名單訪問(wèn) GPT-4 API。我在注冊(cè)后大約 48 小時(shí)收到了我的邀請(qǐng)郵件。
請(qǐng)記住,可用性可能會(huì)隨著時(shí)間的推移而改變,因此請(qǐng)確保及時(shí)了解 OpenAI 的公告。
3.使用 GPT-4 模型構(gòu)建聊天機(jī)器人
升級(jí)到新的 GPT-4 模型 API 非常簡(jiǎn)單,因?yàn)樗褂门c GPT-3.5-turbo 相同的聊天完成方法。如果我們有權(quán)訪問(wèn),我們可以期望我們現(xiàn)有的代碼能夠與 GPT-4 無(wú)縫協(xié)作。
在本教程中,我將演示如何在 Node.js 中使用 GPT-4 API 構(gòu)建聊天機(jī)器人。但是,相同的概念適用于您選擇的其他編程語(yǔ)言。
如果您不確定提示完成和聊天完成的概念,請(qǐng)務(wù)必查看 GPT-3.5-Turbo 教程《??OpenAI 的 GPT-3.5-Turbo 模型初學(xué)者指南??》,我在其中提供了兩者的詳細(xì)比較和示例。
在繼續(xù)之前,請(qǐng)確保您已獲取 OpenAI API 密鑰并相應(yīng)地設(shè)置您的項(xiàng)目。
現(xiàn)在我們已經(jīng)掌握了基礎(chǔ)知識(shí),讓我們開(kāi)始構(gòu)建我們的 GPT-4 支持的聊天機(jī)器人。
4.安裝必要的 NPM 包
npm install dotenv openai chalk
這些庫(kù)有以下用途:
- dotenv:允許我們將 API 密鑰安全地存儲(chǔ)為環(huán)境變量。
- openai:用于輕松調(diào)用 OpenAI 模型 API 的官方 Node.js 庫(kù)。
- chalk:由于我們正在構(gòu)建一個(gè)在我們的終端中運(yùn)行的聊天機(jī)器人,我們將使用 Chalk 為對(duì)話添加一些風(fēng)格,使其更具可讀性和視覺(jué)吸引力。
- readline:一個(gè)內(nèi)置的 Node.js 庫(kù),我們將使用它來(lái)讀取用戶輸入,從而可以輕松地通過(guò)命令行與我們的聊天機(jī)器人進(jìn)行交互。
代碼片段:打造您的聊天機(jī)器人
// index.js
// 導(dǎo)入所需的庫(kù)
import dotenv from "dotenv";
import { Configuration, OpenAIApi } from "openai";
import readline from "readline";
import chalk from "chalk";
// Load environment variables
dotenv.config();
// Initialize the OpenAI API client
const openai = new OpenAIApi(
new Configuration({ apiKey: process.env.OPENAI_API_KEY })
);
// Create a readline interface for user input
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// Define an array to store the conversation messages
const GPTMessages = [];
// Set the model name; replace with other model names if needed
const modelName = "gpt-4"; // "gpt-3.5-turbo"
// Define an async function to call the GPT API
const GPT = async (message) => {
// Call the GPT API with the model, messages, and max tokens
const response = await openai.createChatCompletion({
model: modelName,
messages: message,
max_tokens: 100,
});
// Return the response content and the total number of tokens used
return {
content: response.data.choices[0].message.content,
tokensUsed: response.data.usage.total_tokens,
};
};
// Define a function to ask the user a question and handle their input
const askUserQuestion = (role) => {
// Set the prompt text based on the role (system or user)
const prompt = role === "system" ? "Enter system message: " : "Enter your question: ";
// Ask the user a question and process their input
rl.question(prompt, async (userInput) => {
// Add the user's input to the GPTMessages array
GPTMessages.push({ role: role, content: userInput });
// If the input is a system message, ask the user for their question
if (role === "system") {
askUserQuestion("user");
} else {
// Call the GPT function with the current conversation messages
const assistantResponse = await GPT(GPTMessages);
// Add the assistant's response to the GPTMessages array
GPTMessages.push({ role: "assistant", content: assistantResponse.content });
// Display the assistant's response and the number of tokens used
console.log(chalk.yellow("-----"));
console.log(chalk.green("Assistant: "), assistantResponse.content);
console.log(chalk.cyan("Tokens used: "), assistantResponse.tokensUsed);
// Ask the user another question
askUserQuestion("user");
}
});
};
// Display the model name and begin the conversation
console.log(`### I'm ${chalk.blue(modelName.toUpperCase())}. ####`);
askUserQuestion("system");
要有效地使用聊天完成構(gòu)建聊天機(jī)器人,請(qǐng)按照以下步驟操作:
- 為用戶輸入和輸出做準(zhǔn)備:我們?yōu)榱奶鞕C(jī)器人設(shè)置了一種方式來(lái)接收來(lái)自用戶的消息,并使用“readline”庫(kù)通過(guò)命令行發(fā)送響應(yīng)。
- 跟蹤對(duì)話:我們創(chuàng)建一個(gè)名為 GPTMessages 的數(shù)組來(lái)存儲(chǔ)用戶和聊天機(jī)器人之間交換的消息。我們還在 modelName 變量中指定要使用的 GPT 模型(例如 GPT-3.5-turbo 或 GPT-4)。
- 制作聊天機(jī)器人功能:我們創(chuàng)建一個(gè)名為 GPT 的功能,它將用戶的消息發(fā)送到 OpenAI API 并接收響應(yīng)。它還會(huì)跟蹤聊天機(jī)器人在其響應(yīng)中使用了多少令牌,并返回內(nèi)容和令牌使用情況。
- 創(chuàng)建來(lái)回對(duì)話:我們構(gòu)建一個(gè)名為 askUserQuestion 的函數(shù),它要求用戶輸入,將輸入保存在 GPTMessages 數(shù)組中,并通過(guò)調(diào)用 GPT 函數(shù)獲取聊天機(jī)器人的響應(yīng)。然后它使用“chalk”庫(kù)以格式良好的方式顯示聊天機(jī)器人的響應(yīng)。
- 啟動(dòng)聊天機(jī)器人:我們輸入一條歡迎消息,讓用戶知道他們正在與哪個(gè)聊天機(jī)器人聊天。然后,我們通過(guò)使用初始消息的“系統(tǒng)”角色調(diào)用 askUserQuestion 函數(shù)來(lái)開(kāi)始對(duì)話。
提示:在寫(xiě)這篇文章的時(shí)候,GPT-4 模型有點(diǎn)不穩(wěn)定,你會(huì)經(jīng)常看到服務(wù)器錯(cuò)誤、使用限制問(wèn)題。我建議你為 GPT 函數(shù)實(shí)現(xiàn)一個(gè)自動(dòng)重試功能,如果服務(wù)器沒(méi)有返回狀態(tài) 200,它允許應(yīng)用程序延遲重試 API 調(diào)用。這個(gè)自動(dòng)重試功能應(yīng)該有配置最大值的選項(xiàng) 重試次數(shù)和重試之間的延遲。
5.GPT-4 聊天機(jī)器人在行動(dòng):一個(gè)演示
下面是我們的聊天機(jī)器人的一個(gè)例子,展示了它如何有效地回答問(wèn)題并在整個(gè)聊天過(guò)程中保持對(duì)話的上下文。請(qǐng)注意,由于 max_tokens 設(shè)置為 100,部分響應(yīng)可能會(huì)被截?cái)啵梢愿鶕?jù)您的要求進(jìn)行調(diào)整。
請(qǐng)注意,在此實(shí)現(xiàn)中,根據(jù)邀請(qǐng)電子郵件,對(duì)話會(huì)話的最大令牌限制為 8k。不過(guò),OpenAI 還有一個(gè) 32k 的 GPT-4 模型,可以一次性生成多達(dá) 50 頁(yè)的文本。截至目前,似乎還無(wú)法訪問(wèn)此模型,或者可能僅適用于他們的企業(yè)合作伙伴。
當(dāng)您使用提供的代碼運(yùn)行聊天機(jī)器人時(shí),您可以與模型進(jìn)行對(duì)話,它會(huì)記住聊天記錄以相應(yīng)地回答新問(wèn)題。這有助于為與聊天機(jī)器人交互的用戶創(chuàng)造更加無(wú)縫和自然的對(duì)話體驗(yàn)。
當(dāng)您測(cè)試聊天機(jī)器人并探索其功能時(shí),您會(huì)發(fā)現(xiàn) GPT-4 相對(duì)于之前模型的改進(jìn),包括更好的響應(yīng)質(zhì)量、上下文理解和安全功能(值得商榷