Какие основные компоненты базового Retrieval-Augmented Generation (RAG)
Что проверяют
Понимаете ли вы RAG как конвейер, где качество ответа определяется в основном поиском, а не моделью. Следом обычно спрашивают, как выбрать размер чанка и как понять, что сломалось: поиск или генерация.
Как отвечать
Базовый RAG делится на офлайн-индексацию и онлайн-ответ:
- загрузка и разбор документов: извлечение текста из PDF, HTML, вики, очистка, сохранение метаданных (источник, дата, права доступа);
- чанкинг: нарезка на фрагменты, обычно в несколько сотен токенов с перекрытием, лучше по структуре документа (заголовки, абзацы), чем вслепую по символам;
- модель эмбеддингов: bi-encoder, который переводит фрагмент и запрос в вектор. Индекс и запрос обязаны кодироваться одной и той же моделью;
- векторное хранилище: FAISS, pgvector, Qdrant, Milvus с приближённым поиском, чаще всего на HNSW;
- ретривер: берёт top-k по косинусной близости. В реальных системах поиск делают гибридным, с BM25 для точных терминов и кодов, а кандидатов затем переранжирует модель cross-encoder;
- сборка промпта: инструкция отвечать только по контексту, сами фрагменты с пометкой источника, вопрос пользователя;
- генератор: LLM с декодерной архитектурой, которая пишет ответ и ставит ссылки на фрагменты.
Хорошо упомянуть, что в исходной статье 2020 года ретривер и генератор дообучались вместе, а сегодня под RAG почти всегда понимают готовую LLM, которой подкладывают найденный контекст в промпт. И назвать оценку: для поиска recall@k и MRR, для ответа faithfulness и релевантность, например через Ragas.
Где спотыкаются
Называют BERT генератором. BERT это энкодер, текст он не пишет; в RAG ему место в эмбеддере или реранкере.
Считают, что проблему решит модель посильнее. Если нужного фрагмента нет в top-k, любая LLM либо откажет, либо уверенно придумает ответ, поэтому поиск и генерацию оценивают раздельно.
Не думают о чанкинге. Слишком крупный фрагмент размывает эмбеддинг, слишком мелкий теряет контекст, а таблицы и код, порезанные посередине, становятся бесполезны.