Urartu.
Все статьи
Engineering9 мин чтения

RAG, который реально работает: 5 ошибок и как их избегать

Технический разбор. Почему 80% RAG-проектов в первой версии — мешанина, и пять конкретных шагов, которые превращают «магию» в инженерию.

Автор: Ani Grigoryan · Lead EngineerОпубликовано: 15 марта 2026 г.
RAG, который реально работает: 5 ошибок и как их избегать

Каждый второй проект, который к нам приходит в 2026-м, — это вариант RAG: «у нас 800 PDF-ок с регламентами, хотим, чтобы сотрудники задавали вопросы и получали правильные ответы». Звучит просто. На практике 80% таких проектов в первом запуске выдают невнятную мешанину, потому что команда повторяет одни и те же ошибки.

Эта заметка — компактный список из пяти ошибок, которые мы видели чаще всего. И что с этим делать.

Ошибка 1. Чанки по 500 символов

Самая частая ошибка — взять документы, нарезать на куски по N символов, скормить в эмбеддер и считать, что готово. Получается так: ответ на вопрос лежит между двумя чанками, либо чанк обрезан посередине предложения, либо чанк содержит шапку и подвал PDF, но не содержание.

Что делать: структурное чанкирование. Если документ — это HTML или Markdown, режьте по заголовкам H2/H3. Если PDF — извлекайте через pdfplumber или unstructured, оставляйте абзацы целыми. Минимальный размер чанка — 200 токенов, максимальный — 1500. И всегда сохраняйте перекрытие в 50–100 токенов между соседними чанками.

pythondef smart_chunk(doc: str, max_tokens: int = 800) -> list[str]:
    paragraphs = re.split(r"\n{2,}", doc)
    chunks, buf = [], []
    for p in paragraphs:
        if sum(len(b) for b in buf) + len(p) > max_tokens * 4:
            chunks.append("\n\n".join(buf))
            buf = [p]
        else:
            buf.append(p)
    if buf:
        chunks.append("\n\n".join(buf))
    return chunks

Ошибка 2. Один эмбеддер, один индекс

Команды берут text-embedding-3-small и кидают всё в Pinecone. На 10 документах работает. На 10 000 — точность падает до 60%, потому что эмбеддер «размазывает» близкие, но разные понятия.

Что делать: двухступенчатая выборка. Сначала bi-encoder (быстрый, типа bge-small или text-embedding-3-large) находит топ-50 кандидатов. Потом cross-encoder (медленный, но точный, типа bge-reranker-v2) ранжирует и отдаёт топ-5. Это даёт +15–25 пунктов к точности. Cross-encoder можно запустить на CPU — латенси терпимая.

Ошибка 3. Никакого hybrid search

Эмбеддинги хороши на семантически похожих запросах, но проваливаются на запросах вида «номер договора 2024-АА-1387». Имена собственные, артикулы, номера статей — всё это для эмбеддера случайный шум.

Что делать: комбинировать BM25 (классический полнотекстовый поиск) и эмбеддинги. Уже из коробки доступно в Weaviate, Vespa, Qdrant. Простая формула: final_score = 0.6 * embedding + 0.4 * bm25. Подбираете коэффициенты на ваших данных.

Ошибка 4. Промпт без «не знаю»

Дефолтный промпт для RAG обычно звучит как «Ответь на вопрос, используя контекст». Модель будет отвечать всегда — даже если в контексте ничего нет. Получаются галлюцинации, которые клиент особенно болезненно ловит на демо.

Что делать: жёстко зашить инструкцию.

Ответь только на основе предоставленного контекста.
Если ответа в контексте нет — напиши: "В моих документах нет ответа.
Уточните формулировку или добавьте документ X".
Не используй внешние знания.

И — обязательно — добавьте в промпт явные цитаты с номерами чанков. Это и галлюцинации режет, и пользователю даёт возможность проверить источник.

Ошибка 5. Нет ретест-набора

Самая стратегическая ошибка. Команда пилит RAG два месяца, релизит, через две недели заказчик присылает скриншот: «бот несёт чушь на этом вопросе». Команда поправляет промпт, релизит, через неделю — другой скриншот, на этот раз сломалось то, что работало.

Что делать: с первого дня держать набор из 50–200 пар «вопрос → корректный ответ». Каждое изменение модели/промпта/чанкера прогонять по набору и считать accuracy. Это нудно, но это единственный способ превратить «магию» в инженерную дисциплину.

yaml- q: "Какой минимальный депозит по тарифу Premium?"
  expected_keywords: ["10 000", "USD", "Premium"]
  must_cite_doc: "tariffs-2026.pdf"
- q: "Кто директор по безопасности?"
  expected_keywords: ["Сергей Карпов"]
  must_cite_doc: "org-chart-q1.pdf"

Что в итоге

RAG — это не кнопка. Это пайплайн с десятком шестерёнок: чанкер, эмбеддер, индекс, реранкер, hybrid, промпт, фильтры, кэш, мониторинг. Если вы пропустите одну — система будет работать «процентов на 60». Это значит, что в проде клиенту покажется, что ИИ — игрушка.

Если вы пройдёте по всем пяти пунктам — RAG-система будет отвечать на 85–90% вопросов корректно. Это уже уровень, на котором её можно выпустить наружу — и продавать как сервис.

Обсудим проект?

Напишите в Telegram или оставьте заявку — ответим в течение 4 часов.