Создание приложения командной строки на базе GPT с помощью Node

Самый простой подход к пониманию того, как создавать программные приложения, использующие OpenAI API.

Это «бэкэнд» проект, и цель состоит в том, чтобы максимизировать полезность нашего приложения при минимизации количества кода, который нам нужно написать — что, как правило, является хорошим принципом в разработке программного обеспечения! Цель состоит в том, чтобы продемонстрировать, насколько легко начать работу с OpenAI API.

Фрагменты кода представлены в этом руководстве, и я сделал репозиторий Git, который вы можете использовать сразу: github.com/hortfrancis/openai-api-examples.

Введение

ChatGPT — невероятно мощный инструмент. Он генерирует письменный контент с помощью текстовой подсказки, используя чрезвычайно мощную модель машинного обучения.

Более подробно я рассказывал о ChatGPT в предыдущей статье. Вы можете использовать его прямо сейчас, чтобы получить помощь по различным вопросам, создать текстовую копию для множества применений и… ну… просто поболтать, если хотите.

ChatGPT — это название интерфейса — интерфейса чата, который вы используете для общения с моделями ИИ. Но что, если мы хотим использовать эти модели в нашем собственном программном обеспечении? OpenAI предоставляет «API (интерфейс прикладного программирования) для взаимодействия со своими моделями ИИ более программным способом; вместо того, чтобы вводить текст в окно чата в нашем браузере, мы можем вместо этого создать программу, которая взаимодействует с моделью. По сути, мы можем отправлять подсказки моделям ИИ из написанной нами программы, захватывать выходные данные, а затем использовать эти выходные данные любым способом — возможно, мы хотим создать собственного чат-бота или просто получить ИИ для создания письменной копии для заполнения нашего собственного веб-приложения. У этой технологии есть тысяча и одно применение, но для начала нам нужно знать, как взаимодействовать с API OpenAI, что и будет объяснено в этом руководстве.

Цели обучения

К концу этого проекта вы должны понимать:

  • Как запросить API OpenAI
  • Какую «конечную точку» следует использовать
  • Как сохранить ваш «API-ключ» в безопасности
  • Как создать простое приложение командной строки, которое можно использовать для правильного взаимодействия с GPT-3.5 и, возможно, с GPT-4.

Предпосылки

Этот учебник предназначен для начинающих, но есть несколько вещей, которые вы должны понять, прежде чем мы начнем:

  • Знание того, что такое OpenAI и каковы их модели GPT. Если это совершенно новое для вас, пройдитесь по веб-сайту OpenAI.
  • Знание того, что такое API. API или «интерфейс прикладного программирования» — это набор правил и протоколов, которые позволяют различным программным приложениям взаимодействовать друг с другом. По сути, мы можем отправить «запрос» на веб-адрес определенным образом, и он ответит некоторыми данными. Это здорово, потому что затем мы можем использовать эти данные в наших собственных программах — по сути, мы можем расширить функциональность наших собственных приложений с помощью данных из других приложений. Представьте, что вы хотите сделать еще одно замечательное приложение о погоде, но не хотите самостоятельно измерять погоду по всему миру; с помощью API вы можете зарегистрироваться, чтобы сделать запрос к существующей базе данных о погоде и использовать эти данные в своем собственном причудливом приложении.
  • Мы будем писать наши программы на JavaScript. Вам не нужно много знать о JavaScript, чтобы следовать, и весь код будет предоставлен в этом руководстве.
  • Мы будем запускать наши программы в интерфейсе командной строки (‘CLI’), используя Bash. Доступно несколько интерфейсов терминала командной строки, и многие из наиболее распространенных команд одинаковы для разных операционных систем. У вас должна быть возможность открыть командную строку так же, как и любую другую программу на вашем компьютере: в Windows найдите Командная строка или PowerShell; на Mac или Linux найдите Терминал. Вы также можете запускать различные интерфейсы командной строки из Visual Studio Code.
  • Для редактирования файлов нашего проекта мы будем использовать Visual Studio Code. VSCode бесплатен, и вы можете установить его как программу на свой компьютер или просто использовать удобную веб-версию на vscode.dev.
    Примечание. Веб-версия VSCode на самом деле представляет собой просто текстовый редактор и не имеет инструментов для отладки ваших программ; для этого вам нужно будет правильно установить VSCode. Однако для этого проекта веб-версии должно хватить!
  • Знание Node будет чрезвычайно полезным. Краткое объяснение: Node — это внутренняя среда выполнения для кода JavaScript. Это означает, что мы можем запустить программу, которую мы написали, локально, на нашем собственном компьютере, и заставить ее разговаривать с веб-сервером где-то еще в мире через Интернет без использования веб-браузера. Дополнительную информацию о Node можно найти здесь. Вам понадобится установленный Node, чтобы следовать этому руководству: введите node --version в терминале, чтобы проверить это, а если нет, вы можете скачать Node здесь.

Начиная

Обладая небольшими знаниями в области веб-разработки, все ответы доступны в документации OpenAI. Тем не менее, он довольно технический и не предназначен для неопытных разработчиков. Мы начнем с самой простой реализации и будем добавлять функциональность шаг за шагом.

Сколько стоит использование API?

Цены на API OpenAI предназначены для компаний, которые ежемесячно делают много вызовов API. Для наших целей (создание тестового проекта и опробование) затраты никоим образом не должны быть непомерно высокими — на момент написания этой статьи существует даже бесплатная пробная версия с кредитом в 5 долларов, который вы можете использовать сразу. Вызовы API обычно стоят доли цента каждый, хотя это зависит от того, насколько мощна используемая модель ИИ.

Что такое ключ API и почему меня это должно волновать?

Доступ к API контролируется с помощью «ключей API», буквенно-цифровых кодов, которые необходимо предоставить вместе с вашим запросом к API. «Конечная точка» API (веб-адрес, на который мы отправляем наш запрос) является общедоступной в том смысле, что любой может отправить запрос. Думайте об этом как о входной двери к серверам OpenAI: во многих офисах есть общественная стойка регистрации, куда любой может зайти и попросить войти в здание, но вы не сможете попасть в настоящий офис, если администратор вас не узнает! С API нам нужно использовать наш ключ API (например, ключ-карту для входа в офисное здание), иначе API вернет ответ, который говорит что-то вроде «Ошибка: ключ API не предоставлен».

Важно.Очень важно хранить ключи API в безопасности. Если вы работаете в офисе, вы, вероятно, не захотите, чтобы кто-либо одолжил вашу ключ-карту для входа в здание! Если кто-то украдет ваш API-ключ, он может делать запросы к API, за которые вы платите, а в крайних случаях ваш аккаунт может быть даже заблокирован. В этом руководстве мы расскажем, как обеспечить безопасность вашего ключа API.

Получение вашего API-ключа

Вам нужно будет создать учетную запись в OpenAI, если вы еще этого не сделали. Перейдите на openai.com, и вы увидите кнопку в правом верхнем углу страницы с надписью Зарегистрироваться.

Если вы использовали ChatGPT, у вас фактически уже есть доступ к API с вашей существующей учетной записью. Перейдите на platform.openai.com/account/api-keys, и вы увидите список всех текущих ключей API, которые вы создали. Нажмите Создать новый секретный ключ.

На следующем экране вы можете добавить имя для ключа.

Примечание. Если у вас есть несколько приложений, использующих API OpenAI, рекомендуется дать каждому отдельный ключ API с четкими именами. Таким образом, если вам пришлось сбросить ключ API из-за его утечки или вы хотели закрыть проект, вы можете сделать это поэтапно, без необходимости сбрасывать каждый ключ в нескольких проектах, что отнимает много времени. и довольно неудобно!

Вы не сможете скопировать ключ API после того, как сделаете его, поэтому убедитесь, что вы храните его в безопасном месте! В идеале вы должны хранить это где-то, где никто другой не сможет получить к нему доступ — для целей этого примера проекта хранение его в файле .txt на вашем локальном компьютере должно быть достаточно безопасным. Еще одним хорошим вариантом для хранения важных конфиденциальных учетных данных для личного использования может быть приложение для управления паролями.

Примечание. Если вы потеряете ключ API, вы можете просто удалить его и создать новый!

Настройка каталога проекта

Откройте терминал и перейдите к выбранной папке проекта.

Совет.Вы можете использовать cd для "изменения каталога" и ls для "перечисления" файлов и папок в текущем каталоге. Дополнительную информацию о навигации по компьютеру с помощью командной строки можно найти здесь. (В этом уроке мы будем использовать термины папка и каталог как синонимы.)

В моем случае у меня есть папка с именем projects, внутри которой я создам другой каталог с именем openai-api-examples. Давайте создадим этот каталог с помощью команды:

mkdir openai-api-examples

Мы можем проверить, что наш блестящий новый каталог был создан, набрав ls. Перейдите в новый каталог с помощью cd openai-api-examples, где «openai-api-examples» представляет выбранное вами имя папки проекта.

Мы собираемся использовать пару модулей Node для этого проекта, поэтому давайте инициализируем npm («Диспетчер пакетов Node») в каталоге проекта:

npm init

Терминал задаст вам несколько вопросов о том, какой тип проекта вы хотите настроить — не беспокойтесь об этом слишком сильно, все это можно изменить позже из файла package.json. На данный момент вы можете нажать «Ввод», чтобы быстро пройти этот процесс.

Если у вас установлен Visual Studio Code, откройте этот каталог проекта, набрав code . — точка означает, что мы хотим открыть все в текущей папке (которая в данном случае включает только файл npm package.json.

(Если вы используете урезанную веб-версию VSCode, вам нужно будет открыть ее, перейдя на vscode.dev в выбранном вами браузере, нажав Открыть папку и перейдя в папку проекта, которую вы только что сделал.)

Надежное хранение ключа API

Мы хотим сохранить наш ключ API как переменную среды. Это очень важно, так как мы можем случайно передать ключ API другим файлам проекта, когда создаем их резервную копию с помощью программы контроля версий, такой как Git. Это смущает, и я определенно никогда не делал этого раньше.

Мы будем использовать модуль Node с именем dotenv для импорта нашего ключа API в качестве переменной окружения из отдельного файла. В терминальном типе:

npm install dotenv

Совет.Вы также можете использовать npm i dotenv, так как i — это сокращение от install в npm.

В VSCode создайте новый файл (щелкните правой кнопкой мыши по пустому разделу вкладки проводника) и назовите его .env — он должен находиться на верхнем уровне файла вашего проекта, чтобы Node мог легко его найти.

Вставьте сюда свой ключ API и обязательно пометьте его, чтобы Node мог найти фактическое значение ключа во время выполнения — для этого существует специальный синтаксис; поэтому, если ваш ключ API был qwerty12345, ваш .env должен содержать:

OPENAI_API_KEY=qwerty12345

Важно! Если вы используете Git для управления версиями, убедитесь, что вы включили /.env в свой файл .gitignore, чтобы этот файл не был отправлен в общедоступный репозиторий, а ваш API ключ случайно поделился в сети!

Создание простого приложения для завершения текста

Теперь, когда у нас настроен проект, давайте напишем самую простую и удобную реализацию OpenAI API!

В новый файл (мой будет называться main.js) добавьте следующий код:

require('dotenv').config();

fetch('https://api.openai.com/v1/completions', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`
    },
    body: JSON.stringify({
        'model': 'text-davinci-003',
        'prompt': "Describe a delicious egg in one sentence.",
        max_tokens: 60
    })
})
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.log(error));

Этот код будет делать следующие вещи:

  • Получите ключ API из нашего файла .env
  • Отправьте запрос POST на конечную точку API.
  • Отобразите ответ от сервера OpenAI в консоли.

Обратите внимание, что имя, связанное с ключом API, одинаково в файле .env и в файле main.js — убедитесь, что вы пишете его одинаково, иначе вы получите ошибку.

Я предпочитаю тестовую подсказку «Опишите вкусное яйцо одним предложением», потому что так вы каждый раз будете получать новое предложение, ответ будет коротким, а я смеюсь. (Если вы не упомянете о восхитительном характере яйца, вы обнаружите, что описание модели довольно анатомично, что не совсем приятно читать.)

Для конечной точки завершения текста ограничение маркера по умолчанию довольно низкое — 16. Добавление атрибута max_tokens — хорошая идея, чтобы предотвратить сокращение ответа. Токены в данном контексте — это единицы семантического значения, и подробнее об этом можно прочитать здесь. По сути, больше слов = больше токенов.

Чтобы проверить работу этой реализации, подойдите к терминалу и введите:

node main.js

… где main.js — имя файла, содержащего этот код. Это скажет Node запустить этот файл.

Довольно вкусное описание! 😋

Это действительно базовая реализация, которая использует встроенный в Node модуль fetch() для выполнения HTTP-запроса через Интернет. Давайте разовьем это дальше, используя модуль OpenAI Node, который упрощает выполнение более сложных оперативных запросов.

Рефакторинг для использования модуля Openai Node.

Чтобы установить официальный модуль OpenAI Node, перейдите в терминал и введите:

npm install openai

Код, который у нас есть, использует архитектуру, основанную на обещаниях. Это прекрасно работает для простого тестового примера, но если мы собираемся строить вокруг API OpenAI, было бы лучше использовать async/await функциональность JavaScript (представленную в ECMAScript 2017), поскольку она позволяет нам писать более традиционный код в асимметричный способ. Асимметричный в этом смысле просто относится к идее, что мы ждем ответа от API OpenAI, прежде чем закончим выполнение нашей программы.

На странице модуля openai на веб-сайте npm есть удобный фрагмент кода, который мы можем использовать, но нам нужно сделать несколько дополнений:

  • Я собираюсь добавить больше токенов в наш запрос, так как мы знаем, что по умолчанию их 16, а это довольно мало.
  • Я также собираюсь добавить некоторую обработку ошибок в блок try/catch, используя фрагмент кода ниже на этой странице, но я буду использовать console.error() вместо console.log().
  • Нам нужно обернуть этот код в асинхронную функцию, используя async/await. Поскольку этот код нужно запускать только один раз при выполнении, для простоты я собираюсь обернуть его выражением немедленно вызываемой функции (IIFE)».
  • Нам также нужно убедиться, что мы по-прежнему импортируем наш ключ API из файла .env!
require('dotenv').config();
const { Configuration, OpenAIApi } = require("openai");

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

(async () => {
    try {
        const completion = await openai.createCompletion({
            model: "text-davinci-003",
            prompt: "Describe a delicious egg in one sentence.",
            max_tokens: 60
        });
        console.log(completion.data.choices[0].text);
    } catch (error) {
        if (error.response) {
            console.error(error.response.status);
            console.error(error.response.data);
        } else {
            console.error(error.message);
        }
    }
})();

Замените весь код в main.js приведенным выше фрагментом и запустите node main.js в терминале.

Обратите внимание, что на этот раз мы получаем только сам контент, сгенерированный ИИ, а не весь объект ответа из API, как в нашем первом примере — немного аккуратнее! 🧹

Добавление пользовательского ввода в качестве подсказки

До сих пор мы получали отличные описания вкусных яиц, но что, если мы не любим яйца? Эта программа была бы более полезной, если бы подсказка не была жестко закодирована, а вместо этого зависела бы от пользовательского ввода. Небольшой рефакторинг может добиться этого в кратчайшие сроки.

Мы можем получить любой «аргумент», переданный Node после имени файла с помощью const userInput = process.argv[2];.

Затем нам просто нужно передать переменную userInput в качестве значения поля prompt при вызове API.

Код для достижения этого внутри нашего файла main.js:

require('dotenv').config();
const { Configuration, OpenAIApi } = require("openai");

const userInput = process.argv[2];

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

(async () => {
    try {
        const completion = await openai.createCompletion({
            model: "text-davinci-003",
            prompt: userInput,
            max_tokens: 60
        });
        console.log(completion.data.choices[0].text);
    } catch (error) {
        if (error.response) {
            console.error(error.response.status);
            console.error(error.response.data);
        } else {
            console.error(error.message);
        }
    }
})();

Помните:подсказка, которую вы передаете после node main.js, должна быть заключена в кавычки, иначе Node будет считать каждое слово отдельным аргументом, и только первое слово будет передано в модель ИИ в качестве подсказки! Если вы хотите понять, как работают подобные механизмы завершения текста, попробуйте передать «The» в качестве подсказки, и вы получите интересные результаты!

Создание простого приложения для завершения чата

До сих пор все вызовы API направлялись к конечной точке завершения текста (иногда просто называемой конечной точкой завершения). Однако модели, используемые в веб-интерфейсе ChatGPT, на самом деле разные: GPT-3.5 (бесплатно) и GPT-4 (платная подписка). Они созданы для того, чтобы быть чат-ботами, а не просто добавлять текст в конец приглашения ввода. Это означает, что мы будем передавать обмен данными в конечную точку API как массив (например, список объектов данных).

Важно! Нам необходимо самим обрабатывать данные разговора в нашей программе, так как API будет отправлять нам только самый последний ответ от модели ИИ (API REST использует HTTP-запросы, которые являются апатридами, что означает, что они не помнят предыдущие запросы). В идеале мы хотим каждый раз передавать полную историю разговоров обратно в API.

Давайте начнем с создания «массива диалогов», основы нашей программы. Для начала мы объявим массив и добавим «системное» сообщение, которое сообщает чат-боту, что от него ожидается:

const conversationArray = []; 

conversationArray.push({
    role: 'system',
    content: "You are a helpful, friendly assistant. You will answer questions that you are asked."
});

Представьте, что у нас есть двусторонний разговор с нашим чат-ботом на базе API. Разговор начинается с «системного» сообщения (которое пользователю не нужно видеть), затем пользователь задает вопрос, затем ИИ отвечает, затем пользователь может задать еще один вопрос, и ИИ снова ответит, и так далее. на…

Что делает эту структуру «туда-сюда» такой мощной, так это то, что мы можем передавать «разговор до сих пор» в модель каждый раз, когда мы делаем новую подсказку — по сути, это позволяет нам построить «непрерывный семантический контекст», посредством чего модель тем точнее понимает, о чем мы говорим, чем дольше продолжается разговор.

Внимание! Для каждой модели существуют жесткие ограничения на количество токенов, и долгий разговор в конечном итоге превысит это ограничение, в результате чего API вернет ошибку!

До сих пор мы вводили пользовательский ввод в качестве подсказки, но этот аргумент был передан Node при первом запуске файла; нам пришлось бы перезапускать программу каждый раз, если бы мы хотели вести непрерывный разговор! Чтобы обойти это, нам нужно иметь возможность вводить текст во время работы программы, что требует импорта другого модуля.

Добавление модуля `readline` узла

Node имеет полезный встроенный модуль для обработки пользовательского ввода во время работы программы. Мы импортируем это в начало нашего файла, а затем добавим некоторый шаблонный код конфигурации:

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

Теперь мы можем добавить асинхронную функцию для обработки пользовательского ввода и обновления массива диалогов:

async function chat() {

    rl.question('You: ', async (userInput) => {

        // Add user input to the conversation array
        conversationArray.push({
            role: 'user',
            content: userInput
        });

        // Call the API
        const response = await callAPI();

        // Add answer from the AI model to the conversation array
        conversationArray.push(response);

        // Display the answer from the AI model to the user
        console.log('Bot: ', response.content);

        chat(); // repeat the question-answer cycle indefinitely
    });
}

Эта функция на самом деле «вызывает» себя, что приводит к рекурсивному циклу, так что интерфейс чата будет продолжать работать бесконечно, пока разговор продолжается.

Примечание. Вызов функции из той же функции (известный как рекурсия) может в конечном итоге привести к сбою программы, так как все больше и больше «фреймов стека» памяти используется без освобождения. Это известно как ошибка «переполнения стека». Однако, поскольку наша функция chat() является асинхронной, Node справится с этим, используя свой «неблокирующий» «стек вызовов», и даже если бы наш чат был очень длинным, это не должно вызывать никаких ошибок!

Теперь нам просто нужно отредактировать часть нашего кода, которая использует модуль узла «openai» для выполнения фактического запроса API, чтобы использовать конечную точку завершения чата (вместо конечной точки завершения текста), и обернуть его в функцию с именем callAPI(), так как именно его функция chat() будет использовать для получения ответа от модели ИИ.

async function callAPI() {

    try {
        // Call the API
        const response = await openai.createChatCompletion({
            model: "gpt-3.5-turbo",
            messages: conversationArray,
        });

        return response.data.choices[0].message;

    } catch (error) {
        // Error handling for API call
        if (error.response) {
            console.error(error.response.status);
            console.error(error.response.data);
        } else {
            console.error(error.message);
        }
    }
}

Обратите внимание, что модель ИИ, которую мы запросили, называется «gpt-3.5-turbo», и это та же самая модель, которую OpenAI предоставляет в бесплатной подписке на ChatGPT! Я также исключил параметр max_tokens, так как лимит токенов по умолчанию для конечной точки завершения чата равен бесконечности, что должно быть достаточно высоким для большинства случаев использования…

Привет, теперь мы можем долго говорить о GPT-3.5! Здесь важно отметить, что во втором и третьем подсказках яйца вообще не упоминаются: я спрашиваю «Как их жарить?» и «Какие специи можно использовать?». эм>'; модель ИИ знает, что мы говорим о яйцах, поскольку она каждый раз имеет доступ ко всему разговору через массив разговоров! Если бы я задал ему любой из этих вопросов без окружающего «семантического контекста», он бы не понял, о чем я говорю.

Чтобы лучше видеть, как массив диалогов обновляется каждый раз, я добавлю оператор console.log(), который печатает содержимое массива каждый раз, когда мы завершаем цикл вопрос-ответ в нашем приложении; ищите текст сразу после «### The conversation so far ###»:

Готовая программа

Это все содержимое main.js в нашей программе завершения чата командной строки:

// Import modules and configure environment
require('dotenv').config();
const { Configuration, OpenAIApi } = require("openai");
const readline = require('readline');

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

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// Declare the 'conversation array'
const conversationArray = [];

// Add initial instructions to the AI model
conversationArray.push({
    role: 'system',
    content: "You are a helpful, friendly assistant. Please answer any questions put to you."
});

/*
    * This function calls the API and returns the response
*/
async function callAPI() {
    try {
        // Call the API
        const response = await openai.createChatCompletion({
            model: "gpt-3.5-turbo",
            messages: conversationArray,
        });
        return response.data.choices[0].message;

    } catch (error) {
        // Error handling for API call
        if (error.response) {
            console.error(error.response.status);
            console.error(error.response.data);
        } else {
            console.error(error.message);
        }
    }
}

/*
    * This function handles the conversation and user input
*/
async function chat() {

    rl.question('You: ', async (userInput) => {

        // Add user input to the conversation array
        conversationArray.push({
            role: 'user',
            content: userInput
        });

        // Call the API
        const response = await callAPI();

        // Add answer from the AI model to the conversation array
        conversationArray.push(response);

        // Display the answer from the AI model to the user
        console.log('Bot: ', response.content);

        chat(); // repeat the question-answer cycle indefinitely
    });
}

// Call the chat function to start the conversation when the program is run
chat();

Примечание. Чем мощнее модель ИИ, тем больше времени потребуется для получения ответа от конечной точки API! Обязательно дайте программе время на ожидание запроса — это может занять пару минут в зависимости от таких факторов, как количество запросов от других пользователей, которые в настоящее время получает API.

Программа завершится, когда мы нажмем CTRL + C на клавиатуре, что является способом по умолчанию завершить текущую программу при использовании терминала.

Заключение

Мы изучили, как успешно использовать большие языковые модели за пределами стандартного веб-интерфейса, предоставляемого OpenAI, что открывает невероятные возможности для «умных» приложений. Вам не нужно использовать для этого Node; Самое замечательное в общедоступных REST API, таких как тот, который предоставляет OpenAI, — это то, что к ним может получить доступ любая программа, способная обрабатывать HTTP-запросы через Интернет!

Если нам нужно простое завершение текста в качестве одноразового запроса, мы можем использовать конечную точку завершения текста. Если мы хотим общаться с чат-ботом как с правильным обменом сообщениями, нам нужно вместо этого использовать конечную точку завершения чата. Каждая конечная точка имеет разные правила, разные доступные модели и разную скорость отклика.

Дальнейшее развитие проекта

Возможно, мы хотим сохранить историю нашего разговора для дальнейшего использования или продолжить с того места, где мы остановились в том же разговоре. Прямо сейчас разговор теряется, когда мы закрываем нашу программу, но мы могли бы сохранять массив разговоров в файл каждый раз, когда мы используем API, а затем импортировать содержимое этого файла при запуске программы. Полезно, что Node включает встроенный модуль для чтения и записи файлов, который называется fs. Мы можем даже захотеть сохранить эту историю разговоров в базе данных и создать ее резервную копию в Интернете, что вы можете сделать с помощью такого сервиса, как Атлас MongoDB.

Самая мощная модель, предоставляемая OpenAI (на момент написания этой статьи), — это GPT-4. Разница в мощности между GPT-4 и другими моделями довольно ошеломляющая, особенно в задачах, требующих большого количества абстрактных рассуждений. Вы можете запросить GPT-4, используя конечную точку API завершения чата, с которой мы уже работали (мы бы указали GPT-4 в качестве модели, которую мы хотим использовать в объекте запроса), но в настоящее время существует список ожидания для доступа — вы можно зарегистрироваться здесь.

дальнейшее чтение

Если вы хотите узнать больше об OpenAI API, вы можете ознакомиться с собственной документацией OpenAI.

У Scrimba есть бесплатный курс на эту тему, а у Treehouse есть аналогичный в рамках их платной подписки.

Спасибо за прочтение! :)