JOURNAL / 022026-03-20 · AI · 11 мин чтения
← все статьи

RAG в проде: цена и подводные камни

Год реальной эксплуатации Retrieval-Augmented Generation на корп-данных. Что стоит, что не работает, и где мы теряли тысячи долларов на эмбеддингах.

Автор Lev Orlov · ml engineerОбновлено 2026-03-22

Зачем мы вообще пошли в RAG

В 2025 году к нам пришёл клиент с базой знаний на 1.2 миллиона документов. Юристы. Внутренний поиск работал так: запрос на пять слов возвращал 480 PDF, отсортированных по дате. Нам предложили или сделать «обычный поиск получше», или попробовать AI. Мы выбрали второй вариант — но с одним условием: никаких галлюцинаций. Если модель не нашла ответ — она обязана честно сказать «не знаю».

queryembedsearchrerankanswerproduction rag · 1.2M docs · p95 1.8s$0.012 / query
RAG-pipeline в проде — 5 слоёв

Архитектура: чем проще, тем дольше работает

Первая версия была классической: pgvector в Postgres, OpenAI text-embedding-3-large, GPT-4o для генерации. Мы потратили на эмбеддинги 1.2M документов около $7 800. Один раз — нормально. Но через два месяца клиент захотел переиндексировать всё с новыми правилами разбиения чанков, и счёт пришёл повторно. После третьего перерасчёта мы перешли на self-hosted эмбеддинги.

# self-hosted embeddings — 8x дешевле OpenAI на нашей нагрузке
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('intfloat/multilingual-e5-large')

batch = [chunk.text for chunk in chunks]
vectors = model.encode(
    batch,
    normalize_embeddings=True,
    batch_size=64,
    show_progress_bar=False,
)

Где мы теряли деньги

Самая дорогая ошибка — большие чанки. Мы разбивали документы по 1024 токена. Это давало хорошее качество поиска, но плохое — реранкинга. Reranker на длинных чанках тратил в 3 раза больше токенов, чем нужно. Перешли на 512 — потеряли 4% recall@10, но сократили счёт за reranking на 64%. Это компромисс, который мы готовы делать на любом следующем проекте.

  1. 01.Замените OpenAI embeddings на self-hosted после первой стабильной версии
  2. 02.Используйте reranker — но на маленьких чанках
  3. 03.Логируйте каждый промпт. Каждый. Через 3 месяца вы поймёте, какой паттерн «отваливается»
  4. 04.Считайте $/запрос с первого дня — не на ретроспективе
  5. 05.Поставьте лимит на длину контекста, иначе модель «не знает, когда остановиться»

Галлюцинации: проблема не модели, а данных

Девять из десяти галлюцинаций — это не «модель придумала». Это «в данных два противоречащих документа, и модель честно их обобщила». Мы потратили месяц на дедупликацию и нормализацию данных, и количество жалоб упало с 17 в неделю до 2. Никакой смены модели — просто чистые данные.

«Если ваш RAG галлюцинирует — сначала почистите данные, потом меняйте модель. Большинство людей делают наоборот.»

Итого: цена и метрики

После всех оптимизаций мы пришли к такой картинке: $0.012 за один запрос с reranking, 92% answer-quality по слепой оценке юристов, latency p95 = 1.8s. Это не state-of-the-art, но это то, что клиент готов оплачивать ежемесячно — и платит вот уже 11 месяцев. Лучшая метрика для production-RAG не recall@10, а «согласен ли клиент платить за это в следующем квартале».

Нужен такой же результат?

Расскажите о проекте — пришлём смету за 24 часа.

Получить смету
⌗ ЖУРНАЛ · ПОДПИСКА

Подписка на журнал

Раз в квартал. Никакого спама. Только новые статьи.

без спама · отписка в один клик