所有文章 > AI驱动 > 探索OpenAI ChatGPT API:从创意构想到高级编程的无限可能
探索OpenAI ChatGPT API:从创意构想到高级编程的无限可能

探索OpenAI ChatGPT API:从创意构想到高级编程的无限可能

OpenAI 的 ChatGPT 是一种先进的语言模型,能够根据各种查询生成类似人类的回答。凭借其前沿技术,ChatGPT 改变了与人工智能互动的方式,使交流更加自然与直观。

本文将首先简要概述 ChatGPT API,帮助了解其主要特性和功能。接下来,重点介绍其中一项强大功能——微调响应。通过微调,能够训练 ChatGPT 生成专门针对特定需求和要求的定制化回答。不论是构建客户支持聊天机器人,还是开发个人虚拟助理,微调响应都是成功的关键。

最后,将展示如何构建一个简单的终端聊天界面,亲身体验 ChatGPT 的强大功能。这篇分步指南将演示如何仅用几行代码,快速创建一个功能性聊天机器人,充分展现 API 的巨大潜力。

无论是资深的人工智能开发者,还是刚入门的新手,都能从中受益。探索 OpenAI ChatGPT API,了解它如何助力开发下一代 AI 应用。

OpenAI API 模型与令牌化概述

OpenAI 的 API 非常简洁:选择要使用的模型,要求它完成文本生成或图像生成任务,并根据处理的令牌数量收费。让我们来解读一下这些内容的含义。模型是由一系列算法组成的,能够解释数据并根据数据生成相应的结果。在这篇文章中,我们将重点讨论文本生成模型,例如 GPT-3 中的模型。这些模型在分析自然语言、理解意图、推理因果关系、情感分析和分类等方面表现尤为出色。

OpenAI 的 API 提供了 4 种不同能力和速度的模型:

  • 达芬奇:擅长处理复杂的意图、因果关系和总结任务。
  • Curie:适合语言翻译、复杂的分类、情感分析和文本摘要
  • Babbage:适用于中等复杂度的分类和语义搜索分类。
  • Ada:擅长文本解析、简单分类、地址修正和关键字提取。

需要注意的是,达芬奇是最强大但最慢的,而 Ada 则是最快且最便宜的模型。

接下来谈谈“令牌”概念。简单来说,每个模型通过一种叫做“令牌化”的过程将文本分解成一组组的令牌。每个模型都有一个最大令牌处理限制,这一限制受提示内容和模型生成的文本量的影响。例如,如果达芬奇模型能够处理最多 4,000 个令牌,而提示部分占用了 3,000 个令牌,那么它最多只能生成 1,000 个令牌的输出。令牌数量对于定价至关重要,每个模型的处理费用与其需要处理的令牌数量相关,微调操作也会受此影响。

提到微调,API 允许用户上传训练数据来自定义模型的响应。这样做可以带来更高质量的结果、更低的响应延迟以及……

聊天示例

现在让我们尝试一些有趣的实验。我使用《2001:太空漫游》的脚本来训练模型,使其像 HAL 一样进行对话。OpenAI 建议使用大约 100 个示例进行训练,虽然这个数量比原始脚本要多,但足以达到我们的目的。我将数据分为两部分:船员对 HAL 的提示和 HAL 的回复。可以在此查看原始数据。

获得原始数据后,我们需要通过 OpenAI CLI 工具将其转换为 JSONL 格式。确保已安装 Python 3,然后执行以下命令:

pip install --upgrade openai

同时,您还需要安装 datalib

pip install 'openai[datalib]'

并将 OpenAI 密钥添加到 shell 的初始化脚本(如 .bashrc.zshrc)中。您可以在 OpenAI 仪表板的 API 密钥部分找到密钥:

export OPENAI_API_KEY="<OPENAI_API_KEY>"

设置完 CLI 工具后,可以通过以下命令准备数据:

openai tools fine_tunes.prepare_data -f ./data.json

此命令会帮助您完成整个过程,将训练数据格式化为所需结构,并生成可供上传的 JSONL 文件。

一旦训练数据准备好,我们将首先创建一个脚本来上传数据并创建微调任务。我为此创建了一个新的系统节点项目,并从安装 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

#你可能也喜欢这些API文章!