Массовые запросы к ChatGPT по API: обходим лимиты и ограничения OpenAI

Массовые запросы к ChatGPT по API: обходим лимиты и ограничения OpenAI

Если вы работаете в Digital, у вас часто бывают рутинные задачи: создать 10 000 заголовков объявлений, переписать 50 000 карточек товаров, адаптировать 5 000 текстов и так далее. ChatGPT в таких задачах помогает, но вряд ли вам захочется руками вставлять в ChatGPT 50 000 карточек. 

Правильным решением будет использование API ChatGPT. Создаём цикл и отправляем в ChatGPT каждую карточку/заголовок/текст с описанием задачи и вот у нас есть 50 000 готовых ответов. Но не всё так просто. 

Если вы пользуетесь формулами Google Sheets для обращения к API, то быстро упрётесь в лимиты. При работе без задержки сервер выдаст ошибку на ваши бесконечные запросы. А добавление паузы перед запросом уже не попадает под временнЫе лимиты Google-таблиц. К тому же у ChatGPT есть лимиты на количество токенов в минуту. Поэтому отправка более 200 запросов уже может стать проблемой.

Можно работать через Excel, но отправление запросов через Power Query неконтролируемо. Результат нигде не сохраняется, сколько запросов сделано - непонятно, прогрузка таблицы работает либо полностью, либо никак. Будет обидно сделать 49 000 запросов и споткнуться на последней тысяче не сохранившись. 

Остаётся Python, тем более что там уже есть асинхронная функция для ChatGPT. С её помощью мы сможем одновременно выполнять большое количество запросов к API и нам за это ничего не будет. А с библиотекой Kivy можем добавить к этому приятный интерфейс управления😊 

Программа для массовых запросов к ChatGPT

Я сделал 2 версии программы, одна - бесплатная (скачать можно тут), вторая - в рамках подписки ПРО на Boosty (там же исходный код для доработки). В бесплатной версии нет GPT-4 и нет управления температурой - это творческий уровень генерации текстов. Но даже бесплатная версия хорошо помогает решать многие кейсы массовой генерации.

Как всё работает: берём текстовый файл и вставляем туда N строк, далее пробегаемся по этим строкам и на каждую строку получаем ответ от ChatGPT, который записывается в эту же строку правее. Чтобы потом понять где промпт, а где - ответ, между ними ставится разделитель, который вы укажете. 

Анонсы всех видео, статей и полезностей - в нашем Telegram-канале🔥
Присоединяйтесь, обсуждайте и автоматизируйте!

Для тех же заголовков ChatGPT нужна подробная задача, а не просто инфа по товару. Поэтому до/после основного промпта мы можем добавить текст с описанием задачи. Программа будет забирать по N строк и отправлять их на обработку прикрепляя описание задачи в начало или в конец (можно сразу в начало и конец). Каждый запрос будет содержать описание задачи и инфу по товару/объявлению. Интерфейс выглядит так:

Давайте на примере - у нас есть длинное описание товара: 

кружка керамическая с надписью удачи и успехов, объем 0.4, высота 15 см, ручка изогнутая... 

Вы хотите из этого описания сделать короткий заголовок для объявления "Кружка керамическая с надписью". Таких заголовков надо сделать 1000 штук.

Пишем промпт: 

Составь краткий заголовок до 30 символов по описанию этого товара, отражая самую важную характеристику. Описание товара тут: 

Затем пробегаемся по тысяче описаний и отправляем в ChatGPT наш промпт + описание товара. Получаем 1000 крутых заголовков!

Преимущества Python для обращения к ChatGPT

В чём плюсы такой программы? Их довольно много:

  • цикл не имеет ограничений по количеству строк, разве что файл будет очень большой, но можно переписать скрипт под нужную БД;
  • программа делает 4 попытки запроса, поэтому из-за случайной ошибки ничего не сломается;
  • если программа остановилась, обработанные данные сохранятся в файле;
  • наглядно видно расход бюджета, а также среднюю скорость расхода токенов в минуту (чтобы не упираться в лимиты аккаунта);
  • не нужно ставить скрипты Google таблиц или уметь работать с Power Query - программа легко настраивается и наглядно работает: 

Главный плюс программы - наглядность. Что же показывает программа справа? Разберём по пунктам: 

Изначально весь объём текстов делится на части по N строк (N указывается в настройках). Вы видите сколько всего частей мы получили и какую сейчас обрабатываем. "Расход токенов" и "Расход на эту часть" отображают сколько токенов и рублей потрачено на эту часть. Токены в минуту нужны чтобы понимать скорость генерации и не превышать лимит аккаунта. 

Текущий общий расход - сколько всего вы потратили в рамках этого запуска. Предполагаемый полный расход - сколько всего планируем потратить на этот запуск. Ну и время ожидания - сколько примерно придётся ждать обработки всех частей. Время оцениваем исходя из задержек, сами запросы или ошибки могут продлить ожидание. 

Есть и минус - для работы программы нужен ВПН. Самый дешевый вариант - взять иностранный сервер на vdsina и подключиться к нему из outline. Это даст вам ВПН не на браузер, а на все приложения, после чего вы сможете подключаться к ChatGPT.

Загрузка промптов в файл и выгрузка результатов

Ключевым разделителем изначального файла является перенос строки. Что же делать если внутри строки у вас уже есть парочка переносов? Всё просто: составляем столбец промптов в Excel, затем выделяем его и заменяем перенос строки на пробел. Перенос выбирается сочетанием ctrl + J, в "заменить на" ставим пробел:

Теперь у вас остался только нужный перенос - перенос между промптами (то есть строками). Смело вставляйте полученный столбец в текстовый файл. 

Но что же делать если ChatGPT ответит с кучей переносов? Тут всё проще - мы заменили переносы в ответах ChatGPT на символ <br>. Поэтому структура текстового файла не сломается. Уже потом, после отделения результатов от промптов, можно выполнить обратную замену <br> на ctrl +J.

Ответ ChatGPT будет размещен справа от каждого запроса, как же быстро отделить их друг от друга? Для этого в программе есть параметр "разделитель". Проще всего использовать в качестве разделителя один символ - так будет удобнее разбить итоговый текст по столбцам в Excel. Если символ разделителя встретится в промптах или ответах, ваше разделение по столбцам будет неверным. Потому не ставьте разделителем запятую, а вот вертикальная черта вполне подойдёт. 

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

Пример цикла в ChatGPT

Попробуем программу в работе. Мы получили описания товаров магазина инструментов. Нужно составить 55 карточек с заголовком на каждый товар: 

Вставляю их в текстовый файл и сохраняюсь. Будьте внимательны: если в файл вставилась пустая строка, алгоритм её удалит. 

Заполняю токен (получить токен можно тут), ссылку на файл, забирать планирую по 10 строк за раз и делать паузы в 5 секунд, разделитель - вертикальная черта. Перед каждым товаром добавляю описание задачи - "Напиши краткий заголовок на 30 символов на основе описания товара:".  

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

Напиши краткий заголовок на 30 символов на основе описания товара: 1. Аккумуляторный дрель-шуруповерт с крутящим моментом 40 Нм, двумя скоростями и литий-ионным аккумулятором на 20 В.

Выполнение заняло полминуты, но мы могли работать быстрее, ведь лимит моего аккаунта на GPT-3.5 - 60 000 токенов в минуту. Мы работали на скорости около 14 000 токенов в минуту, а значит могли бы повысить количество строк за раз или сократить задержку:

Результат видим в файле справа от разделителя:

Вставляю результат в Excel, выделяю столбец, перехожу на вкладку Данные и делю текст по столбцам:

Разделитель - вертикальная черта:

У нас появился отдельный столбец заголовков, который можно использовать в карточках товаров. Разве что удалить кавычки и слегка подкорректировать:

Если программа выдала ошибку - обработанная часть текстов сохранится в файле. Просто перенесите готовое в Excel, оставив в файле необработанные тексты, сохраните файл и снова запустите генерацию. Генерация идёт с начала файла, поэтому не оставляйте там готовые строки если планируете запускать обработку. 

Итоги

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

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

Следите за расходом и не пишите слишком большой промпт внутри программы - ведь он участвует в КАЖДОМ запросе. Или пишите промпты на английском - будет дешевле (отвечать можно попросить на русском). И напоминаю: GPT-3.5 в десятки раз дешевле, чем GPT-4-Turbo.

Уточните тир вашего аккаунта ChatGPT - у каждого свои ограничения. У вас могут быть как лимиты за минуту, так и лимиты за день. Если аккаунт новый, пополните его хотя бы на 5$, чтобы получить Тир1. Начинайте с небольшого количества текстов, чтобы подобрать паузу, количество элементов за раз и прикинуть общий расход. Это поможет избежать ошибок на больших объёмах.

И самое ужасное - ChatGPT не заменит ручного труда по проверке 100 000 объявлений🙄 А за ним нужно проверять, особенно за GPT-3.5. Ускорить проверку можно различными фильтрами по длине или содержанию, но проверять придётся, иначе результат может оказаться очень средним. 

Комментарии