OpenAI предоставляет мощные инструменты для работы с GPT-3 и GPT-4. Однако возможность подсчёта токенов реализована только для JavaScript и Python, что не покрывает всех возможных вариантов использования. В связи с этим я разработал универсальную библиотеку GPT-Tokenator для подсчёта токенов на C++, экспортировал функцию подсчёта токенов в C, что даёт возможность использовать её во многих языках программирования.
Необходимость подсчёта токенов возникает во множестве прикладных задач.
Вот лишь несколько очевидных примеров:
При анализе большого текста разбивать текст на части оптимальным образом, чтобы за один раз отправить на обработку максимально большой фрагмент текста.
Оценивать превышение лимита токенов до отправки запроса к API.
Оптимально передавать параметр
max_tokens
.
Кажется, что подсчёт токенов настолько базовая функциональность, что выглядит очень странным, что OpenAI не предоставил средства для этого.
Основные особенности и преимущества GPT-Tokenator
GPT-Tokenator предлагает следующие ключевые особенности и преимущества:
Поддержка C++ и экспорт в C для использования во многих языках программирования.
Простые и легко используемые функции для подсчёта токенов.
Примеры использования библиотеки на разных языках программирования.
Отсутствие необходимости использовать словари преобразования. Всё необходимое встроено в саму библиотеку.
Я специально не стал включать функции кодирования и декодирования токенов, чтобы сделать бинарный файл библиотеки настолько лёгким, насколько это возможно. По сути, в версии на C имеется только одна простая функция:
size_t tokenator_count(const char* data, size_t len);
Выбор C очевиден, потому что API C в том или ином виде поддерживается всеми языками программирования.
Примеры использования GPT-Tokenator
Я подготовил несколько примеров использования GPT-Tokenator на разных языках программирования:
Эти примеры помогут вам легко понять, как использовать библиотеку в ваших проектах. Также я надеюсь, они помогут понять, как подключать библиотеку к проектам на языках программирования, не перечисленных в списке выше.
Если возникнут вопросы, не стесняйтесь писать мне. Постараюсь помочь.
Буду очень признателен, если пришлёте PR с примерами кода на языках, не перечисленных в этом списке. Разумеется, можете рассчитывать на мою помощь. Интерфейс самой функции подсчёта токенов очень простой, и единственная сложность, которая может у вас возникнуть - это линковка.
Обратите внимание, что во всех примерах D, Go, C# линковка осуществляется похожим образом.
Установка и компиляция GPT-Tokenator
Для установки и компиляции GPT-Tokenator выполните следующие шаги:
Установите зависимости:
sudo apt-get install libicu-dev
Перейдите в каталог с исходными кодами и выполните команду:
cd src
make
Компиляция может занять некоторое время, поэтому для вашего удобства я добавил сжатые предварительно скомпилированные файлы в каталог libs:
libtokenator.a
libtokenator_cpp.a
Файлы заголовков находятся в каталоге include.
GPT-Tokenator - это универсальная библиотека для подсчёта токенов в GPT-3 и GPT-4 на C/C++, которая может быть полезна для разработчиков, использующих разные языки программирования. Попробуйте GPT-Tokenator в своих проектах и не стесняйтесь отправлять отзывы, предложения по улучшению и сообщения об ошибках через GitHub.
Комментарии (7)
Lachezis
10.06.2023 11:12+1Отличная работа, предполагаю что должно работать шустрее чем родной tiktoken.
GitHub умер пытаясь отрендерить https://github.com/valmat/gpt-tokenator/blob/master/src/bpe_ranks.cpp
Ссылки на примеры в статье битые.rotor Автор
10.06.2023 11:12+1Ссылки поправил. Спасибо.
GitHub не смог отрендерить этот файл потому что там предопределённый unordered_map с 50000 значений. Я вкомпилировал словарь в бинарь библиотеки, что бы не нужно было загружать его отдельно. Это довольно большой файл.
google_fan
10.06.2023 11:12>предполагаю что должно работать шустрее чем родной tiktoken.
Почему вы так думаете?
HemulGM
10.06.2023 11:12+3В ближайшее время сделаю порт на Delphi. Спасибо за работу. Все хотел тоже заняться адаптацией с питона.
benone
Opeani предлагает для подсчета использовать https://github.com/openai/tiktoken
rotor Автор
Всё верно. Но не все используют Python для своих проектов.
Именно для этих случаев и нужны альтернативные решения.
vagon333
Успешно использую C# вариант - SharpToken.
https://www.nuget.org/packages/SharpToken
Считаю токены перед API вызовом, чтоб не перевалить предел.
Посчитывает аккуратно.
Кстати, линк на C# файл битый.
https://github.com/valmat/gpt-tokenator/test/tok_count_cs/Program.cs