Чтобы лучше разобраться какие существуют ограничения и сколько токенов OpenAI API расходуется при при вводе, выводе вашего сообщения и суммарно, я написал данную статью. Далее обо всем по порядку.
Какое ограничение токенов есть у OpenAI API?
Чуть больше изучив документацию и пообщавшись с человеком под ником Sergey (он получил ошибку об ограничении запроса), я выяснил, что OpenAI API ограничено по токенам не только в количестве вводимых символов, но и по количеству символов получаемых.
Полезное эмпирическое правило заключается в том, что один токен обычно соответствует ~4 символам текста в английском языке. Это примерно соответствует ¾ слова (таким образом, 100 токенов приблизительно соответствует 75 словам).
Максимальное количество токенов на задание (max_tokens): 4000 токенов (оставляя 97 токенов в качестве буфера безопасности) = 3000 слов (приблизительно).
Если превысить данный расход токенов, то api ответит примерно следующим сообщением об ошибке:
openai.error.InvalidRequestError: This model's maximum context length is 4097 tokens, however you requested 4098 tokens (98 in your prompt; 4000 for the completion). Please reduce your prompt; or completion length.Т.е. 3000 слов максимум дается на ответ и на запрос в сумме. Речь идет о модели text-davinci-003 и модель gpt-3.5-turbo (GPT 3.5 Turbo) , модель text-davinci-002 суммарно ограничена в 2 раза меньшим количеством символов.
GPT 3.5 Turbo раньше стоила 0,002 доллара за 1000 токенов, что было в 10 раз дешевле существующих моделей GPT-3.5. К сожалению, доступна только платная версия API ChatGPT.
UPDATE: Время идет, модели улучшаются, цена и расход токенов падают. Например, модель GPT 4o (Omni) на момент выхода модели:
- Вход: 5,00 долларов за 1 миллион токенов
- Выход: 15,00 долларов за 1 миллион токенов
GPT-4o в настоящее время имеет контекстное окно 128k символов, а расход токенов сократился в сравнении с той же GPT-4:
- на русском языке расходуется в 1,7 раза меньше токенов (было 39, стало 23 токена)
- на английском языке расходуется в 1,1 раза меньше токенов (было 27, стало 24 токена)
Как проверить расход токенов на запрос к OpenAI API?
После того, как мы ввели свой токен и подключились к API, выставили нужную модель openai — можно выводить данные в консоль (Python) или в бота телеграм.
Вывод количества токенов в консоль (Python)
- Сколько токенов расходуется при вводе вашего сообщения:
print(response['usage']['prompt_tokens'])- Сколько токенов расходуется на ответ API OpenAI:
print(response['usage']['completion_tokens'])- И сколько всего токенов израсходовано на запрос и на ответ (суммарно):
print(response['usage']['total_tokens'])Вывод количества токенов в бота Telegram (aiogram)
- Расход токенов при вводе сообщения в бот:
await message.answer(response['usage']['prompt_tokens'])- Сколько токенов расходуется на ответ API OpenAI при выводе сообщения в бот:
await message.answer(response['usage']['completion_tokens'])- И сколько всего токенов израсходовано на запрос и на ответ (суммарно в задании к боту):
await message.answer(response['usage']['total_tokens'])Что такое Tokenizer (OpenAI)?
Если вы не хотите использовать запросы к API, то существует готовый инструмент от OpenAI — сервис Tokenizer. Вы можете использовать данный инструмент, чтобы понять, как фрагмент текста маркируется API и какое количество токенов в конкретном фрагменте текста расходуется.
Модели семейства GPT обрабатывают текст с помощью тех самых токенов, которые представляют собой обычные последовательности символов, встречающиеся в тексте. Модели понимают статистические отношения между данными токенами и отлично справляются с созданием следующего токена в последовательности.
Как еще можно узнать количество токенов запроса без API и Tokenizer?
Чтобы узнать, сколько токенов содержится в текстовой строке, не вызывая API, используйте библиотеку Python tiktoken от OpenAI. Пример кода можно найти в руководстве OpenAI Cookbook по подсчету токенов с помощью tiktoken.
О том, как создать бота в телеграм на базе aiogram с использованием OpenAI API — подробно описал здесь.
Дата создания статьи: 22.02.2023
Дата последнего обновления: 04.03.2023
Надеюсь, эта статья была для вас полезной и интересной. Если вы хотите, чтобы я создавал больше контента и делал это чаще, вы можете поддержать меня донатом. Благодарю вас за ваш вклад в творческий процесс!
Т-Банк (Тинькофф): 2200700867913161
Ozon Bank: 2204240107102131
Boosty: https://boosty.to/woronokin/donate
Личный блог






