在昨天我们跟大家分享了关于GPT-3.5模型的初学者教程指南《OpenAI 的 GPT-3.5-Turbo 模型初学者指南》,今天这篇文章,我们再来分享一个关于构建 ChatGPT 的 GPT-4 聊天机器人的过程,其中包含分步说明和完整的代码片段。我将介绍有关 GPT-4 API 的基本信息,并提供实用的见解来帮助您创建一个功能强大、引人入胜的聊天机器人。
我们将深入研究模型定价,探索聊天完成令牌的确切计算方式。此外,我将讨论 GPT-3.5-turbo 和 GPT-4 之间的区别,比较它们的性能,让您全面了解 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 的比较部分进一步讨论这一点。
在撰写本教程时,公众可以通过两种方式访问 GPT-4 模型。
ChatGPT Plus 订阅:通过订阅 ChatGPT Plus,您将获得对 GPT-4 的有限访问权限。此订阅允许用户每 3 小时发送 25 条聊天消息。
GPT-4 API(仅限受邀者):目前只有受邀者才能通过等候名单访问 GPT-4 API。我在注册后大约 48 小时收到了我的邀请邮件。
请记住,可用性可能会随着时间的推移而改变,因此请确保及时了解 OpenAI 的公告。
升级到新的 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 支持的聊天机器人。
npm install dotenv openai chalk
这些库有以下用途:
代码片段:打造您的聊天机器人
// 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");
要有效地使用聊天完成构建聊天机器人,请按照以下步骤操作:
提示:在写这篇文章的时候,GPT-4 模型有点不稳定,你会经常看到服务器错误、使用限制问题。我建议你为 GPT 函数实现一个自动重试功能,如果服务器没有返回状态 200,它允许应用程序延迟重试 API 调用。这个自动重试功能应该有配置最大值的选项 重试次数和重试之间的延迟。
下面是我们的聊天机器人的一个例子,展示了它如何有效地回答问题并在整个聊天过程中保持对话的上下文。请注意,由于 max_tokens 设置为 100,部分响应可能会被截断,您可以根据您的要求进行调整。
请注意,在此实现中,根据邀请电子邮件,对话会话的最大令牌限制为 8k。不过,OpenAI 还有一个 32k 的 GPT-4 模型,可以一次性生成多达 50 页的文本。截至目前,似乎还无法访问此模型,或者可能仅适用于他们的企业合作伙伴。
当您使用提供的代码运行聊天机器人时,您可以与模型进行对话,它会记住聊天记录以相应地回答新问题。这有助于为与聊天机器人交互的用户创造更加无缝和自然的对话体验。
当您测试聊天机器人并探索其功能时,您会发现 GPT-4 相对于之前模型的改进,包括更好的响应质量、上下文理解和安全功能(值得商榷