Семантический кеш: как срезать счёт за LLM-агента вдвое
Агенты дёргают модель по одним и тем же вопросам десятки раз в день. Семантическое кеширование ловит похожие запросы и отдаёт готовый ответ, экономя на токенах и латентности. Разбираем, где это работает, а где ломается.

Каждый вызов большой языковой модели стоит денег и времени: вы платите за входные и выходные токены и ждёте ответа от секунды до десятков секунд. В продакшене выясняется скучная вещь — пользователи и агенты задают по сути одно и то же снова и снова. «Как оформить возврат», «порядок возврата товара», «хочу вернуть покупку» — три разных строки, один и тот же ответ. Обычный кеш по точному совпадению ключа здесь бесполезен: строки-то разные. Семантическое кеширование (semantic caching) сравнивает запросы по смыслу, а не по буквам, и отдаёт сохранённый ответ, если новый вопрос достаточно близок к уже отвеченному.
Идея не новая — векторный поиск лежит в её основе, — но за последний год она превратилась в отдельный слой инфраструктуры под LLM-агентов, потому что счёт за токены у активно работающего агента растёт быстрее, чем ожидают.
Как это устроено
Механика в трёх шагах, и она одинаковая почти во всех реализациях:
- Эмбеддинг запроса. Входящий вопрос прогоняется через модель эмбеддингов* и превращается в вектор.
- Поиск ближайшего. Вектор ищется в хранилище уже отвеченных запросов. Если находится сосед с косинусной близостью выше порога (типично 0,8–0,95 в зависимости от задачи), считаем это попаданием.
- Отдача или вызов модели. При попадании возвращается сохранённый ответ — без обращения к дорогой генеративной модели. При промахе идёт обычный вызов LLM, а результат кладётся в кеш на будущее.
Дорогой шаг генерации заменяется дешёвым: эмбеддинг одного запроса стоит в разы меньше, чем полноценный ответ модели, а векторный поиск по десяткам тысяч записей укладывается в единицы миллисекунд.
Семантический кеш не делает агента умнее. Он делает так, чтобы агент не платил дважды за один и тот же ум.
Где прячется главный риск
Порог близости — точка, где всё ломается. Поставите слишком низкий — кеш начнёт отдавать ответ на «как отменить подписку» в ответ на «как оформить подписку», потому что векторы близки, а смысл противоположен. Поставите слишком высокий — процент попаданий (hit rate) упадёт почти до нуля, и экономии не будет. Универсального числа нет: порог подбирается на ваших реальных логах, и его приходится пересматривать при смене модели эмбеддингов.
Сколько это экономит на самом деле
Экономия прямо пропорциональна доле повторяющихся запросов. У справочного чат-бота с типовыми вопросами доля попаданий может быть высокой, у агента, который каждый раз решает уникальную задачу с уникальными данными, — близка к нулю. Честная формула простая: снижение затрат ≈ hit rate × (стоимость вызова модели − стоимость эмбеддинга и поиска). Конкретные проценты зависят от вашего трафика, и любые «−50% к счёту» из маркетинговых материалов стоит проверять на своих логах, а не принимать на веру.
Что кешируется хорошо, а что плохо:
- Хорошо: FAQ, справочные ответы, классификация намерений, перевод типовых фраз, генерация по шаблону с ограниченным набором вариантов.
- Плохо: ответы, зависящие от текущего времени, баланса счёта, персональных данных пользователя, любого свежего состояния системы. Закешированный ответ «на вашем счету 1 200 рублей» станет ложью через минуту.
Чем реализовать
Готовых слоёв несколько, и они делятся на специализированные библиотеки и векторные базы с режимом кеша. Данные ниже — по состоянию на начало 2025 года; лицензии и функции проверяйте в актуальной документации проектов.
| Решение | Что это | Плюс | Ограничение |
|---|---|---|---|
| GPTCache | Отдельная open-source библиотека семантического кеша | Заточена ровно под задачу, подключаемые бэкенды хранилищ | Отдельная зависимость, требует настройки порога и модели эмбеддингов |
| Redis (векторный поиск) | In-memory хранилище с векторным индексом | Низкая латентность, если Redis уже в стеке | Логику кеша (эмбеддинг, порог) пишете сами или через обёртку |
| Векторная БД (напр. с режимом cache) | Полноценное хранилище эмбеддингов | Масштабируется, живёт вне памяти процесса | Избыточно, если нужен только кеш небольшого объёма |
| Свой слой на любой vector store | Ручная реализация трёх шагов | Полный контроль над порогом и инвалидацией | Всё пишете и поддерживаете сами |
Точные названия продуктов, версии и наличие «cache mode» у конкретной векторной базы сверяйте в её документации — рынок меняется быстро, и функции появляются между релизами.
Инвалидация — то, о чём забывают
Кеш хорош, пока ответы не устарели. Если ваша база знаний обновилась, а закешированные ответы ссылаются на старую версию инструкции — вы автоматизированно раздаёте устаревшую информацию. Продумайте заранее:
- TTL — время жизни записи, после которого она считается протухшей и пересчитывается.
- Сброс по событию — очистка кеша при обновлении источника (базы знаний, документации, прайса).
- Ключ версии — привязка записей к версии контента, чтобы старые попадания не срабатывали.
Кому это пригодится, а кому нет
Пригодится:
- Поддержке и справочным ботам с высокой долей типовых вопросов — там hit rate обычно самый высокий.
- Агентам, которые часто прогоняют один и тот же промпт-роутер или классификатор намерений перед основной логикой.
- Проектам, где важна не только цена, но и латентность: попадание в кеш отвечает мгновенно, без ожидания генерации.
Не пригодится или навредит:
- Агентам, где каждый запрос уникален и зависит от свежих данных, — кеш будет пустовать, а риск выдать устаревшее только вырастет.
- Задачам с персональными или чувствительными ответами: закешированный ответ одного пользователя не должен утекать другому с похожим вопросом. Изолируйте кеш по пользователю или не кешируйте такое вовсе.
- Сценариям, где важна вариативность генерации: кеш по определению отдаёт один и тот же ответ на похожие запросы.
* Эмбеддинг — числовое представление текста в виде вектора, где близкие по смыслу тексты оказываются близкими и в векторном пространстве. Именно на этом сходстве строится семантический поиск и кеш.
Prompt-инженер: Идеальные запросы для Midjourney, ChatGPT и других моделей.
Спросить за 15 ₽Источники: GPTCache — документация проекта, Redis — векторный поиск и семантическое кеширование (документация)
Частые вопросы
Чем семантический кеш отличается от обычного?
Насколько реально снизится счёт за токены?
Может ли кеш выдать неправильный ответ?
Как не отдавать устаревшие ответы?
Безопасно ли кешировать персональные ответы?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.