Semantic Caching
Узнай, как семантическое кэширование снижает задержки и расходы в ИИ. Разберись, как оно работает с LLM и пайплайнами компьютерного зрения, на практическом примере Ultralytics YOLO26.
Семантическое кэширование — это передовой метод оптимизации, используемый преимущественно в генеративном ИИ и для больших языковых моделей (LLMs), который сохраняет и извлекает ответы на основе смысла (семантики) запроса, а не его точного текста. Определяя, задаёт ли новый промпт тот же основной вопрос, что и запрос, на который уже был дан ответ, семантическое кэширование устраняет необходимость повторно вызывать модель ИИ, значительно сокращая время обработки и затраты на API.
Как работает семантическое кэширование#
В отличие от традиционного кэширования, для которого требуются полностью совпадающие строки, семантический кэш преобразует входящие запросы в многомерные числовые векторы, известные как эмбеддинги. Когда пользователь отправляет промпт, системы, использующие семантическое кэширование Redis или аналогичные хранилища в памяти, выполняют поиск по векторам, чтобы сравнить новый вектор с ранее сохранёнными векторами в векторной базе данных.
Это сравнение основано на метриках математического расстояния, чаще всего на косинусном сходстве. Если оценка сходства между новым запросом и кэшированным запросом превышает заданный порог (например, 0.95), это считается «попаданием в кэш». Система мгновенно возвращает сохранённый ответ, полностью пропуская механизм инференса. Если оценка ниже порога, это считается «промахом кэша», и модель генерирует новый ответ, сохраняя новую пару «эмбеддинг — ответ» для будущих взаимодействий. Этот рабочий процесс особенно эффективен в современных облачных архитектурах при масштабировании приложений ИИ.
Практические применения#
Семантическое кэширование играет ключевую роль при развёртывании экономичных решений на основе ИИ в различных областях.
- Чат-боты для поддержки клиентов: В службе ИТ-поддержки сотни пользователей могут задавать разные варианты одного и того же вопроса (например, «Как сбросить пароль?» и «Как восстановить пароль?»). Семантическое кэширование распознаёт эти намерения как идентичные, благодаря чему модель вычисляет ответ только один раз. Это значительно снижает задержку инференса и уменьшает расход токенов для решений управления API.
- Визуальный поиск и RAG: В мультимодальных конвейерах платформы используют извлечение признаков для кэширования эмбеддингов эталонных изображений. Когда пользователь загружает изображение, чтобы найти визуально похожие объекты, система может мгновенно извлечь семантически сопоставимые результаты из кэша, значительно ускорив систему визуальных рекомендаций без необходимости многократно кодировать большие визуальные входные данные. Разработчики часто интегрируют такие инструменты, как LangChain, для координации этих уровней кэширования.
Различия между связанными терминами кэширования#
Чтобы полностью понять оптимизацию ИИ, полезно отличать семантическое кэширование от других форм управления памятью:
- В сравнении с кэшированием промптов: Кэширование промптов включает сохранение предварительно вычисленных математических состояний статического контекста (например, префикса длинного документа) во время активной сессии для ускорения последующих запросов. Семантическое кэширование сохраняет итоговый текстовый или визуальный результат полного взаимодействия, чтобы обслуживать совершенно новые, но идентичные намерения.
- В сравнении с KV Cache: KV Cache — это низкоуровневый механизм памяти внутри архитектуры Transformer, который сохраняет промежуточные состояния внимания во время генерации текста токен за токеном для обеспечения инференса в реальном времени. Семантическое кэширование работает на уровне приложения и кэширует весь обмен входными и выходными данными ещё до того, как он достигает слоёв модели.
Имитация семантического кэширования в задачах компьютерного зрения#
Следующий фрагмент кода на Python демонстрирует, как смоделировать основной механизм семантического кэша с использованием PyTorch и пакета ultralytics. Вычисляя сходство между ранее кэшированным изображением и новым изображением запроса с помощью классификационной модели Ultralytics YOLO26, система может определить, необходим ли полный проход инференса.
import torch
from ultralytics import YOLO
# Load an Ultralytics YOLO26 classification model for embedding generation
model = YOLO("yolo26n-cls.pt")
# Extract the embedding for a previously 'cached' reference image
cached_embed = model.embed("reference_shoe.jpg")[0].flatten()
# Extract the embedding for a new user query image
new_embed = model.embed("user_uploaded_shoe.jpg")[0].flatten()
# Calculate cosine similarity to check for a semantic cache hit
similarity = torch.nn.functional.cosine_similarity(cached_embed, new_embed, dim=0)
# Apply a threshold to determine if the images are semantically equivalent
if similarity > 0.90:
print(f"Cache hit! Similarity: {similarity.item():.2f}. Returning cached response.")
else:
print(f"Cache miss! Similarity: {similarity.item():.2f}. Running full inference.")Для команд, которым нужно управлять наборами данных и развёртывать высокооптимизированные модели компьютерного зрения, способные беспрепятственно интегрироваться с передовыми архитектурами кэширования, платформа Ultralytics предоставляет интуитивно понятную среду полного цикла для обучения, отслеживания и обслуживания моделей в масштабе.









