Чтобы лучше разобраться какие существуют ограничения и сколько токенов 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.
Как проверить расход токенов на запрос к 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