Генерация с дополнением извлечением (RAG)
- Что такое RAG и цикл извлечь-дополнить-сгенерировать
- Как индексировать, извлекать, дополнять и генерировать с цитатами
- Почему RAG превосходит дообучение для задач «ответь по моим документам»
- Пять режимов сбоев, которые убивают качество RAG
- Готовый к копированию промпт заземления, закрывающий два самых больших пробела
RAG заставляет модель отвечать на вопросы по вашим данным — документам, базе знаний, кодовой базе, — на которых она никогда не обучалась. Идея проста: извлечь релевантные фрагменты, дополнить ими промпт, затем сгенерировать ответ, заземлённый на этих фрагментах.
Цикл
- Разбейте на чанки, эмбеддьте их (см. /docs/foundations/embeddings) и сохраните в векторный (и/или ключевой) индекс.
- Достаньте топ чанков, наиболее релевантных вопросу.
- Поместите эти чанки в промпт с инструкцией вроде «Отвечай только по контексту ниже; если этого там нет — так и скажи».
- Выдайте ответ — и в идеале процитируйте, из какого чанка взято каждое утверждение.
Про шаг эмбеддинга при индексировании см. Эмбеддинги и векторный поиск.
Почему RAG вместо дообучения?
- Свежо: обновляете данные, а не модель
- Проверяемо: предоставляет цитаты
- Дёшево: гораздо дешевле переобучения
Для большинства потребностей «отвечать по моим документам» RAG — правильный первый инструмент, см. Дообучение против промптинга против RAG.
Режимы сбоев (где умирает качество RAG)
- Плохое извлечение = плохой ответ. Если нужный чанк не извлечён, модель не может его использовать. Большинство проблем «RAG ошибается» — это проблемы извлечения.
- Слишком грубый/мелкий чанкинг рушит релевантность (см. эмбеддинги).
- Нет инструкции по заземлению: модель смешивает извлечённые факты со своими собственными догадками. Скажите ей отвечать только по контексту и признавать пробелы.
- Впихивание слишком многого: нерелевантные чанки разбавляют сигнал и стоят токенов. Извлекайте мало качественных чанков.
- Нет цитат: вы не можете проверить, поэтому не можете доверять.
Сбой чанкинга связан с эмбеддингами, а перегрузка контекста стоит токенов.
- Оценивайте извлечение отдельно: измеряйте «извлекли ли мы нужный чанк?» отдельно от «хорошо ли ответила модель?». Это быстро локализует проблему. См. Evals (/docs/foundations/evals).
Готово к копированию: промпт заземления
Единственное исправление с наибольшим рычагом — это инструкция заземления. Вставьте извлечённые чанки в шаблон вроде этого — он заставляет модель отвечать только по контексту, цитировать каждое утверждение и признавать пробелы вместо догадок:
Промпт заземления
You are answering strictly from the context below. Rules: - Use ONLY the context to answer. Do not use outside knowledge. - Cite the source after each claim, like [chunk 2]. - If the answer is not in the context, reply exactly: "I don't have that in the provided sources." - Quote numbers and names verbatim — never paraphrase a figure. Context: [chunk 1] ... [chunk 2] ... [chunk 3] ... Question: <the user's question>
Сочетайте его с несколькими качественными чанками (не со всем, что вы извлекли), и вы закроете два самых больших пробела разом: галлюцинаторное смешивание и непроверяемые ответы. Затем оцените извлечение и генерацию отдельно, чтобы знать, какую половину настраивать.
Освойте термины
Проверь себя
0/5- RAG = извлечь релевантные чанки, дополнить ими промпт, сгенерировать заземлённый ответ с цитатами.
- Проиндексируйте (чанк + эмбеддинг + хранение), извлеките топ чанков, дополните инструкцией заземления, сгенерируйте с цитатами.
- Предпочитайте RAG дообучению для Q&A по документам: свежо, с цитатами, дешевле.
- Большинство сбоев — это сбои извлечения: извлекайте мало качественных чанков, а не всё подряд.
- Всегда добавляйте инструкцию заземления и цитируйте; оценивайте извлечение и генерацию отдельно.