ChatGPT набирает все большую популярность, ведь он может помочь человеку или даже заменить его в ряде задач. С ним можно взаимодействовать не только через графический интерфейс, но и по API. Таким образом его можно встраивать в свои системы, чтобы решать практические задачи бизнеса. Сейчас реализую подобный проект. Решил написать статью, где подробно и пошагово описываю, как настроить сервер Linux (Ubuntu) для интеграции по API с данной нейросетью, на примере Python (Flask) и Node.js (Next.js). Опять же, вы можете использовать не Ubuntu, не Flask и не Next.js, просто адаптировав примеры под себя. В данной статье описано, как развернуть демо проект от OpenAI (описание здесь: Build your application), а затем доработать его, чтобы задавать свои собственные произвольные вопросы, в том числе и на русском. Также в конце статьи скажу немного про параметры API запросов и модели. Все команды и действия будут из консоли. Статья состоит из следующих разделов: Предварительная настройка Linux. То есть вы можете взять чистый Linux и настроить только то что нужно для данного проекта. Проект для Python. Описание того, как развернуть демо проект для Python (Flask). А затем как его доработать для своих запросов. Проект для Node.js. Соответственно, описание по развертыванию демо проекта уже для Node.js (Next.js). И затем также доработка под произвольные запросы. Параметры API запросов и моделей. Полезная информация, которая нужна для практического использования ChatGPT, при интеграции с ним по API. Благодарности тем кто дочитал. Мои контакты, если хотите задать вопрос. Чтобы начать работать с ChatGPT, нужно зарегистрироваться на сайте OpenAI. При регистрации придет подтверждение по смс. OpenAI не работает в России, поэтому вам понадобится VPN и телефон с номером вне РФ. Цель текущей статью - описать именно процесс подключения по API, поэтому я не буду подробно расписывать, как решить вопрос с регистрацией. Есть много статей, как сделать VPN, можно даже сделать свой (например, см. статью Делаем свой VPN-сервер). С телефоном сложнее. Либо у вас есть возможность зарегистрировать номер в другой стране, или попросить знакомых за границей использовать их номер. В крайнем случае, для тестирования (не промышленной эксплуатации) можно арендовать номер (пример в статье Как получить доступ к ChatGPT в России). После регистрации, вам нужно зайти в ваш аккаунт и получить OPENAI_API_KEY. Для этого авторизуйтесь на сайте OpenAI, зайдите в раздел меню “View API keys”. Затем создайте и скопируйте ключ. Ключ выглядит примерно так:   sk-n0123456789buNKlMOOs1AEnIPQgUuoYeL0s9a1PG8mKe3xN Также для разворачивания проекта нам нужен сервер (облачный, выделенный, или свой), где мы и будем все делать. При написании данной статьи использовалась версия "Ubuntu 22.04.2 LTS". Взял облачный сервер на Timeweb. Причин две: там можно выбрать сервер в Европе (тем самым исключить проблему необходимости VPN), и за этот сервер можно платить рублями (то есть не нужна иностранная карточка). Я знаю что есть и другие провайдеры, которые предоставляют такие же услуги (если знаете вариант лучше Timeweb, пожалуйста, напишите в комментариях). Итак, начнем. Зайдем на сервер (для вашего сервера данный пункт может отличаться). Обновим все программные пакеты для apt. И для apt-get. Настроим веб-сервер Nginx. Проверим, что он установлен (отобразится его версия). Если он не установлен, то необходимо это сделать. Проверим, что он работает. Должно отобразиться: Active: active (running).  Откроем в браузере http://123.444.555.666/ Должно отобразиться: Если вам нужен Node.js (Next.js), то можете сразу пропустить текущий раздел про Python (Flask). Проверим, что Python установлен. Отобразиться его версия (у меня 3.10.6). Если не установлен - сделаем это. Проверим, что установлен pip. Если не установлен: Установим модуль venv (работа в виртуальной среде). Создадим проект в папке /home. Перейдем в эту папку. Копируем демо проект. Переходим в папку проекта. Создаем виртуальную среду. Активируем ее. В командной строке отобразиться (venvopenai). Устанавливаем пакеты. Создаем файл, куда вставим OPENAI_API_KEY Открываем его. Внутри него будет: Вставляем OPENAI_API_KEY Сохраняем: F2 -> Y -> Enter Указываем IP и порт для запуска. Открываем файл приложения. Добавляем в конце файла следующий код: Сохраняем: F2 -> Y -> Enter Запускаем сервис. Открываем в браузере http://123.444.555.666:5000 Появляется окно демонстрационного проекта: Суть демо проекта: мы вводим имя животного (на английском) и система предлагает нам варианты героических имен для него. Останавливаем сервис и выходим из него, нажав в консоле CTRL+C. Далее рассмотрим, как доработать демо проект, чтобы иметь возможность вводить произвольные вопросы. Открываем файл с html шаблоном. Находим блок: Удаляем его. Вставляем вместо него: Сохраняем: F2 -> Y -> Enter Открываем файл с приложением. Находим блок: Вставляем в него строку: max_tokens=4000, В этом же файле находим функцию: Удаляем ее. Вместо неё вставляем: Сохраняем: F2 -> Y -> Enter Запускаем сервис. Открываем в браузере http://123.444.555.666:5000 Видим окно проекта, но с возможностью ввода произвольного текста: Вводим вопрос и получаем ответ: Чтобы остановить сервис и выйти, нажимаем CTRL+C. Чтобы выйти из виртуальной среды вводим: Теперь мы можем отправлять запросы в ChatGPT по API, и встраивать данный функционал в приложения на Python. Далее развернем такой же проект для Node.js. После этого я немного подробнее расскажу про параметры API запросов и моделей (если Node.js вам не нужен, то сразу переходите к разделу про параметры). Для данного проекта нам нужна Node.js с версией >= 14.6.0. Проверим, установлен ли node. И установлен ли npm. Далее инструкция, как установить Node.js версии 18. Добавим репозиторий NodeSource. Установим node и npm. Проверим, что node нужной версии установлен. И что npm тоже установлен. Создадим проект в папке /home. Перейдем в эту папку. Копируем демо проект. Переходим в папку проекта. Создаем файл, куда вставим OPENAI_API_KEY Открываем его. Внутри него будет: Вставляем OPENAI_API_KEY Сохраняем: F2 -> Y -> Enter Указываем нужный IP для запуска. Открываем: Находим строку: "dev": "next dev", Заменяем ее на "dev": "next dev -H 123.444.555.666", Сохраняем: F2 -> Y -> Enter Устанавливаем пакеты. Запускаем сервис. Открываем в браузере http://123.444.555.666:3000 Видим окно демонстрационного проекта: Суть демо проекта - мы вводим имя животного (на английском) и система предлагает нам варианты героических имен для него: Чтобы остановить сервис и выйти, нажимает CTRL+C Доработаем демо проект, чтобы можно было вводить свои произвольные запросы. Открываем файл, где изменим html шаблон. Находим блок Удаляем его. Вставляем вместо него: Сохраняем: F2 -> Y -> Enter Открываем файл, где изменим информацию для API запроса. Находим блок: Вставляем в него строку: max_tokens: 4000, В этом же файле находим функцию: Удаляем ее. Вместо не вставляем: Сохраняем: F2 -> Y -> Enter Запускаем сервис. Открываем в браузере http://123.444.555.666:3000 Видим окно проекта, но с возможностью ввода произвольного текста: Вводим вопрос и получаем ответ: Чтобы остановить сервис и выйти, нажимаем CTRL+C. Теперь мы можем отправлять запросы в ChatGPT по API, и встраивать данный функционал в приложения на Node.js. Далее рассмотрим параметры API запросов и моделей. Рассмотрим параметры API запросов. Для Python (Flask) это файл openai-quickstart-python/app.py и код: Для Node.js (Next.js) это файл openai-quickstart-node/pages/api/generate.js и код: У ChatGPT есть разные модели. Их описание можно посмотреть здесь: Models. Конкретно в данном демо используется модель text-davinci-003. Ее описание: Can do any language task with better quality, longer output, and consistent instruction-following than the curie, babbage, or ada models. Also supports inserting completions within text. Может выполнить любую языковую задачу с лучшим качеством, более длительным выводом и последовательным выполнением инструкций, чем модели Кюри, Бэббиджа или Ада. Также поддерживает вставку дополнений в текст. Также у модели указывается количество токенов. Их количество определяет длину запроса и ответа. Пример ответа при max_tokens=4000 Пример ответа при max_tokens=100 Точнее, если указать мало токенов, вы не получите короткий ответ. Он просто будет обрезан, как в примере выше. Максимальное количество токенов для каждой модели также можно посмотреть здесь: Models. Например, для нашей модели text-davinci-003: MAX TOKENS = 4,097 tokens. Последний параметр, который мы использовали - temperature. На сайте OpenAI про него сказано следующее: OpenAI models are non-deterministic, meaning that identical inputs can yield different outputs. Setting temperature to 0 will make the outputs mostly deterministic, but a small amount of variability may remain. Модели OpenAI недетерминированы, а это означает, что одинаковые входные данные могут привести к разным результатам. Установка температуры на 0 сделает выходные данные в основном детерминированными, но может остаться небольшая изменчивость. То есть если укажем значение temperature=0 и зададим один и тот же вопрос несколько раз подряд, то ответ каждый раз будет одинаковый. Если укажем temperature=1 - на один и тот же вопрос он будет каждый раз выдавать разные ответы. В нашем демо примере у нас было значение temperature=0.6. Собственно, на этом все. Благодарю всех, кто уделил внимание моей статье. Если вы знаете больше про настройку моделей и параметров API - пожалуйста, напишите в комментариях ссылки на хорошие статьи об этом (на русском или английском). Буду очень благодарен. Также если у вас есть вопросы - пишите в личку. Отвечу в рамках своих знаний и возможностей. *** Алексей Чижов vk.com/chizhovav88 t.me/chizhovav88  В IT с 2007. vk.com/chizhovav88 | t.me/chizhovav88