Почему подсчёт токенов не так прост?
При создании продуктов искусственного интеллекта, использующих несколько поставщиков моделей больших языковых моделей (LLM), разработчики сталкиваются с неожиданной проблемой: окна контекста у разных провайдеров несовместимы.
На первый взгляд управление контекстом кажется простым процессом – нужно отслеживать длину разговоров и обрезать их при необходимости. Однако на практике всё гораздо сложнее. Если запросы маршрутизируются между поставщиками вроде OpenAI, Anthropic, Google или другими, возникает фундаментальное несоответствие, которое может привести к сбоям продукта.
Проблема токенизации
Каждый крупный поставщик LLM использует свой собственный токенизатор. Эти токенизаторы работают по-разному. Один и тот же блок текста генерирует разное количество токенов в зависимости от того, какая модель его обрабатывает. Разница часто составляет 10–20% и иногда больше.
Это означает, что диалог, который легко помещается в окно контекста одной модели, может незаметно превысить лимит другой. Например, запрос, отправленный в OpenAI, может содержать 1200 токенов, а тот же самый запрос, обработанный моделью Claude, уже будет состоять из 1450 токенов. Эта разница имеет значение.
Где возникают сбои?
Сбои обычно проявляются на границах переключения между провайдерами. Когда вы меняете поставщика в середине разговора, новая модель должна обработать весь предыдущий контекст. Если ваш слой управления контекстом был настроен под предыдущую модель, то новая модель может увидеть контекст, который уже превышает её предел ещё до обработки новых данных.
В результате появляются три распространённых сценария отказов:
- Неожиданное превышение лимита окна контекста;
- Нестабильное обрезание контекста разными моделями в различных точках;
- Непредсказуемые ошибки маршрутизации запросов, поскольку числа, используемые вашей системой, не совпадают с реальными значениями модели.
Почему простые оценки не помогают?
Естественное решение – поддерживать единый «оценочный» счётчик токенов с большим запасом безопасности. Но проблема заключается в том, что этот запас сам по себе становится источником неопределённости.