Если ваш RAG всё ещё отвечает «42», возможно, вы просто спрашивали не о том. Мы провели восемь месяцев в окопах продакшен-RAG: 9 млн страниц для Usul AI и ещё 4 млн для безымянного легального гиганта. И вот что оказалось правдой, когда пыль легла.

Начали как все приличные люди: YouTube, LangChain → LlamaIndex. Прототип за пару дней, на 100 документах всё сияло. На проде — не сияло. Пользователи чувствовали фальшь, и мы по винтикам перестраивали систему, пока она не зазвучала. Самые эффективные приёмы — по убыванию ROI.

  1. Генерация запросов. Один пользовательский вопрос редко хватает. LLM пересматривал диалог и штамповал несколько семантических и ключевых формулировок. Мы гоняли их параллельно и затем склеивали через реранкер. Это расширило «площадь покрытия» и снизило зависимость от гибридного скора.

  2. Реранкинг. Пять строк кода — и мир меняется. Порядок чанков сдвигается сильнее, чем ожидаешь. Наш сладкий спот: подаём 50, оставляем 15.

  3. Чанкинг. Самая трудоёмкая часть и главный источник качества. Данные разные — и пайплайн тоже. Проверяйте, чтобы:

  • куски не резались посередине слова или предложения;
  • каждый чанк был логической единицей и имел самодостаточный смысл.
  1. Метаданные в LLM. Мы сперва слали только текст чанка. Добавили релевантные метаданные (заголовок, автор и т. п.) — ответы стали заметно точнее и контекстнее.

  2. Роутинг запросов. Много вопросов вообще не про RAG: «кто автор?», «суммаризируй». Небольшой роутер отправляет их в API + LLM, минуя тяжёлую Retrieval-цепочку.

Наш стек:

  • Векторка: Azure → Pinecone → Turbopuffer (дёшево, нативный keyword search)
  • Экстракция: кастом
  • Чанкинг: Unstructured.io по умолчанию, кастом для энтерпрайза (говорят, Chonkie неплох)
  • Эмбеддинги: text-embedding-large-3
  • Реранкер: None → Cohere 3.5 → Zerank
  • LLM: GPT 4.1 → GPT 5 → снова GPT 4.1 (Azure-кредиты решают)

Всё это сложили в MIT-опенсорс: agentset-ai/agentset. Если коротко: расширяйте запрос, реранк — обязателен, чанки — ремесло, метаданные — бесплатная магия, роутер — здравый смысл. Остальное — детали.