Как считать токены для GPT-3/GPT-4 : GPT-Tokenator
Как считать токены для GPT-3/GPT-4 : GPT-Tokenator

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 выполните следующие шаги:

  1. Установите зависимости:

sudo apt-get install libicu-dev
  1. Перейдите в каталог с исходными кодами и выполните команду:

cd src
make

Компиляция может занять некоторое время, поэтому для вашего удобства я добавил сжатые предварительно скомпилированные файлы в каталог libs:

  • libtokenator.a

  • libtokenator_cpp.a

Файлы заголовков находятся в каталоге include.


GPT-Tokenator - это универсальная библиотека для подсчёта токенов в GPT-3 и GPT-4 на C/C++, которая может быть полезна для разработчиков, использующих разные языки программирования. Попробуйте GPT-Tokenator в своих проектах и не стесняйтесь отправлять отзывы, предложения по улучшению и сообщения об ошибках через GitHub.

Readme на русском

Исходный код проекта GPT-Tokenator на GitHub

Комментарии (7)


  1. benone
    10.06.2023 11:12
    +1

    Opeani предлагает для подсчета использовать https://github.com/openai/tiktoken


    1. rotor Автор
      10.06.2023 11:12
      +2

      Всё верно. Но не все используют Python для своих проектов.
      Именно для этих случаев и нужны альтернативные решения.


      1. vagon333
        10.06.2023 11:12

        Успешно использую C# вариант - SharpToken.
        https://www.nuget.org/packages/SharpToken
        Считаю токены перед API вызовом, чтоб не перевалить предел.
        Посчитывает аккуратно.
        Кстати, линк на C# файл битый.
        https://github.com/valmat/gpt-tokenator/test/tok_count_cs/Program.cs


  1. Lachezis
    10.06.2023 11:12
    +1

    Отличная работа, предполагаю что должно работать шустрее чем родной tiktoken.

    GitHub умер пытаясь отрендерить https://github.com/valmat/gpt-tokenator/blob/master/src/bpe_ranks.cpp
    Ссылки на примеры в статье битые.


    1. rotor Автор
      10.06.2023 11:12
      +1

      Ссылки поправил. Спасибо.
      GitHub не смог отрендерить этот файл потому что там предопределённый unordered_map с 50000 значений. Я вкомпилировал словарь в бинарь библиотеки, что бы не нужно было загружать его отдельно. Это довольно большой файл.


    1. google_fan
      10.06.2023 11:12

      >предполагаю что должно работать шустрее чем родной tiktoken.

      Почему вы так думаете?


  1. HemulGM
    10.06.2023 11:12
    +3

    В ближайшее время сделаю порт на Delphi. Спасибо за работу. Все хотел тоже заняться адаптацией с питона.