在昨天我們跟大家分享了關于GPT-3.5模型的初學者教程指南??《OpenAI 的 GPT-3.5-Turbo 模型初學者指南》??,今天這篇文章,我們再來分享一個關于構建 ChatGPT 的 GPT-4 聊天機器人的過程,其中包含分步說明和完整的代碼片段。我將介紹有關 GPT-4 API 的基本信息,并提供實用的見解來幫助您創建一個功能強大、引人入勝的聊天機器人。
我們將深入研究模型定價,探索聊天完成令牌的確切計算方式。此外,我將討論 GPT-3.5-turbo 和 GPT-4 之間的區別,比較它們的性能,讓您全面了解 GPT-4 必須提供的功能。
1.了解 GPT-4 模型
如果您閱讀了本文教程,您很可能已經熟悉 OpenAI 和 ChatGPT。GPT 模型 API 允許像我們這樣的開發人員訪問和使用 GPT 系列中的預訓練語言模型,例如 GPT-4 和 GPT-3.5-turbo。這些模型能夠生成類似人類的文本,執行自然語言處理任務,并支持廣泛的相關應用。
GPT-4 是 OpenAI 的 GPT 模型家族中最新且功能最強大的成員。OpenAI 聲稱 GPT-4 在大多數測試基準中都超過了 ChatGPT,這意味著我們有更好的機會實現我們想要的結果。
此外,它還具有改進的安全功能。然而,GPT-4 并不是 GPT 模型的全部和終結,并不意味著我們應該立即停止使用其他模型。我將在本教程后面的與 GPT-3.5-turbo 的比較部分進一步討論這一點。
2.獲得對 GPT-4 模型的訪問權限
在撰寫本教程時,公眾可以通過兩種方式訪問 GPT-4 模型。
ChatGPT Plus 訂閱:通過訂閱 ChatGPT Plus,您將獲得對 GPT-4 的有限訪問權限。此訂閱允許用戶每 3 小時發送 25 條聊天消息。
GPT-4 API(僅限受邀者):目前只有受邀者才能通過等候名單訪問 GPT-4 API。我在注冊后大約 48 小時收到了我的邀請郵件。
請記住,可用性可能會隨著時間的推移而改變,因此請確保及時了解 OpenAI 的公告。
3.使用 GPT-4 模型構建聊天機器人
升級到新的 GPT-4 模型 API 非常簡單,因為它使用與 GPT-3.5-turbo 相同的聊天完成方法。如果我們有權訪問,我們可以期望我們現有的代碼能夠與 GPT-4 無縫協作。
在本教程中,我將演示如何在 Node.js 中使用 GPT-4 API 構建聊天機器人。但是,相同的概念適用于您選擇的其他編程語言。
如果您不確定提示完成和聊天完成的概念,請務必查看 GPT-3.5-Turbo 教程《??OpenAI 的 GPT-3.5-Turbo 模型初學者指南??》,我在其中提供了兩者的詳細比較和示例。
在繼續之前,請確保您已獲取 OpenAI API 密鑰并相應地設置您的項目。
現在我們已經掌握了基礎知識,讓我們開始構建我們的 GPT-4 支持的聊天機器人。
4.安裝必要的 NPM 包
npm install dotenv openai chalk
這些庫有以下用途:
- dotenv:允許我們將 API 密鑰安全地存儲為環境變量。
- openai:用于輕松調用 OpenAI 模型 API 的官方 Node.js 庫。
- chalk:由于我們正在構建一個在我們的終端中運行的聊天機器人,我們將使用 Chalk 為對話添加一些風格,使其更具可讀性和視覺吸引力。
- readline:一個內置的 Node.js 庫,我們將使用它來讀取用戶輸入,從而可以輕松地通過命令行與我們的聊天機器人進行交互。
代碼片段:打造您的聊天機器人
// index.js
// 導入所需的庫
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");
要有效地使用聊天完成構建聊天機器人,請按照以下步驟操作:
- 為用戶輸入和輸出做準備:我們為聊天機器人設置了一種方式來接收來自用戶的消息,并使用“readline”庫通過命令行發送響應。
- 跟蹤對話:我們創建一個名為 GPTMessages 的數組來存儲用戶和聊天機器人之間交換的消息。我們還在 modelName 變量中指定要使用的 GPT 模型(例如 GPT-3.5-turbo 或 GPT-4)。
- 制作聊天機器人功能:我們創建一個名為 GPT 的功能,它將用戶的消息發送到 OpenAI API 并接收響應。它還會跟蹤聊天機器人在其響應中使用了多少令牌,并返回內容和令牌使用情況。
- 創建來回對話:我們構建一個名為 askUserQuestion 的函數,它要求用戶輸入,將輸入保存在 GPTMessages 數組中,并通過調用 GPT 函數獲取聊天機器人的響應。然后它使用“chalk”庫以格式良好的方式顯示聊天機器人的響應。
- 啟動聊天機器人:我們輸入一條歡迎消息,讓用戶知道他們正在與哪個聊天機器人聊天。然后,我們通過使用初始消息的“系統”角色調用 askUserQuestion 函數來開始對話。
提示:在寫這篇文章的時候,GPT-4 模型有點不穩定,你會經常看到服務器錯誤、使用限制問題。我建議你為 GPT 函數實現一個自動重試功能,如果服務器沒有返回狀態 200,它允許應用程序延遲重試 API 調用。這個自動重試功能應該有配置最大值的選項 重試次數和重試之間的延遲。
5.GPT-4 聊天機器人在行動:一個演示
下面是我們的聊天機器人的一個例子,展示了它如何有效地回答問題并在整個聊天過程中保持對話的上下文。請注意,由于 max_tokens 設置為 100,部分響應可能會被截斷,您可以根據您的要求進行調整。
請注意,在此實現中,根據邀請電子郵件,對話會話的最大令牌限制為 8k。不過,OpenAI 還有一個 32k 的 GPT-4 模型,可以一次性生成多達 50 頁的文本。截至目前,似乎還無法訪問此模型,或者可能僅適用于他們的企業合作伙伴。
當您使用提供的代碼運行聊天機器人時,您可以與模型進行對話,它會記住聊天記錄以相應地回答新問題。這有助于為與聊天機器人交互的用戶創造更加無縫和自然的對話體驗。
當您測試聊天機器人并探索其功能時,您會發現 GPT-4 相對于之前模型的改進,包括更好的響應質量、上下文理解和安全功能(值得商榷