Генерация с дополнением извлечением (RAG)
RAG заставляет модель отвечать на вопросы по вашим данным — документам, базе знаний, кодовой базе, — на которых она никогда не обучалась. Идея проста: извлечь релевантные фрагменты, дополнить ими промпт, затем сгенерировать ответ, заземлённый на этих фрагментах.
Цикл
- Проиндексируйте ваши данные: разбейте на чанки, эмбеддьте их, сохраните в векторный (и/или ключевой) индекс.
- Извлеките топ чанков, наиболее релевантных вопросу.
- Дополните: поместите эти чанки в промпт с инструкцией вроде «Отвечай только по контексту ниже; если этого там нет — так и скажи».
- Сгенерируйте — и в идеале процитируйте, из какого чанка взято каждое утверждение.
Почему RAG вместо дообучения?
RAG сохраняет знания свежими (обновляете данные, а не модель), предоставляет цитаты и гораздо дешевле переобучения. Для большинства потребностей «отвечать по моим документам» это правильный первый инструмент — см. Дообучение против промптинга против RAG.
Режимы сбоев (где умирает качество RAG)
- Плохое извлечение = плохой ответ. Если нужный чанк не извлечён, модель не может его использовать. Большинство проблем «RAG ошибается» — это проблемы извлечения.
- Слишком грубый/мелкий чанкинг — рушит релевантность (эмбеддинги).
- Нет инструкции по заземлению — модель смешивает извлечённые факты со своими собственными догадками. Скажите ей отвечать только по контексту и признавать пробелы.
- Впихивание слишком многого — нерелевантные чанки разбавляют сигнал и стоят токенов. Извлекайте мало качественных чанков.
- Нет цитат — вы не можете проверить, поэтому не можете доверять.
:::tip Оценивайте извлечение отдельно Измеряйте «извлекли ли мы нужный чанк?» отдельно от «хорошо ли ответила модель?». Это быстро локализует проблему. См. Evals. :::