Вы когда-нибудь задумывались, что происходит за кулисами, когда вы отправляете запрос к большой языковой модели (LLM)? Кажется, что магия происходит мгновенно: вы вводите текстовый промпт — и получаете готовый ответ (почти как при копировании со Stack Overflow, только без угрызений совести). Но на самом деле за этим простым интерфейсом скрывается сложнейший конвейер вычислений.

Чтобы по-настоящему оптимизировать свои приложения, снизить задержку (latency) и сократить расходы на API, необходимо понимать, что именно происходит «под капотом» в каждый момент времени. В этой статье мы разберем весь жизненный цикл одного API-запроса к LLM и визуализируем этот процесс с помощью четырех концептуальных «гифок».

Гифка 1: Токенизация и эмбеддинги — превращаем слова в координаты

Компьютеры не умеют работать с текстом напрямую. Они оперируют исключительно числами, векторами и матрицами. Поэтому первый шаг любого API-вызова — это трансформация вашего человеческого текста в математические объекты.

Визуализируйте первую гифку: Ваш исходный текст попадает в конвейер. Сначала он нарезается на разноцветные блоки — токены (словосочетания, слова или даже отдельные слоги). Затем каждый такой блок падает в трехмерное пространство (на самом деле — многомерное, координат там больше, чем нерешённых тасок в вашем бэклоге), превращаясь в светящуюся точку с уникальными координатами.

Шаг 1.1: Токенизация (BPE)

Большинство современных LLM используют алгоритм токенизации под названием Byte-Pair Encoding (BPE). Этот алгоритм разбивает текст на частички (токены). Токен — это не обязательно целое слово.

import tiktoken# Используем токенайзер для модели gpt-4oenc = tiktoken.get_encoding("cl100k_base")text = "Токенизация — это первый шаг!"tokens = enc.encode(text)print("ID токенов:", tokens)print("Декодированные фрагменты:", [enc.decode([t]) for t in tokens])

На выходе мы получим массив целых чисел (ID токенов). Каждый токен соответствует определенной строке в словаре модели.

Шаг 1.2: Векторные эмбеддинги

Полученные ID токенов отправляются на GPU. Там с помощью специальной таблицы поиска (Embedding Lookup Table) каждый ID токена преобразуется в вектор высокой размерности.

Гифка 2: Prefill — параллельные вычисления

После токенизации и получения эмбеддингов модель начинает фазу prefill. На этом этапе происходят параллельные вычисления для инициализации процесса генерации текста.

Гифка 3: Autoregressive Decoding — генерация текста

После завершения фазы prefill модель переходит к авторегрессионному декодированию. Этот процесс включает в себя последовательное предсказание следующего токена на основе предыдущих — прямо как ваш тимлид, который пытается предсказать дату релиза по хаотичным коммитам в пятницу вечером.

Гифка 4: Streaming через Server-Sent Events

Последний этап — стриминг сгенерированного текста клиенту через протокол Server-Sent Events (SSE). SSE позволяет серверу отправлять обновления клиенту в одностороннем порядке.

В заключении, понимание внутреннего устройства API-запросов к LLM позволяет разработчикам оптимизировать свои приложения, снижая задержку и расходы на API. Попробуйте использовать эти знания на практике и увидеть, как работает «магия» LLM!