12 промтов для RAG-систем: индексация, поиск, генерация
Retrieval-Augmented Generation (RAG) — это архитектура, которая объединяет поиск релевантных документов из базы знаний с генерацией ответа языковой моделью. Согласно исследованию Lewis et al. (2020) «Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks» (arXiv:2005.11401), RAG значительно улучшает точность ответов на фактологические вопросы по сравнению с чистыми генеративными моделями. Однако эффективность RAG напрямую зависит от качества промтов на каждом этапе: индексации (чанкинг, эмбеддинги), поиска (гибридный, семантический) и генерации. В этой подборке — 12 проверенных промтов, которые помогут вам настроить RAG-пайплайн.
1. Промт для оптимального чанкинга текста
Задача: Разделить документ на логические чанки (куски) для индексации, сохраняя целостность смысла.
Промт:
Ты — специалист по обработке текстов. Раздели следующий текст на чанки так, чтобы:
- каждый чанк содержал законченную мысль (абзац или несколько предложений);
- чанки не превышали 512 токенов;
- не разрывай предложения и списки.
Текст: {текст}
Выведи чанки в формате JSON-массива строк.
Пример результата:
[
"Python — интерпретируемый язык программирования. Он поддерживает несколько парадигм: объектно-ориентированную, функциональную и процедурную.",
"Библиотека Pandas предоставляет структуры данных DataFrame и Series для анализа данных. Она широко используется в Data Science."
]
Этот промт минимизирует потерю контекста при чанкинге, что критично для точности поиска.
2. Промт для генерации эмбеддингов с учётом контекста
Задача: Создать эмбеддинг для чанка, который отражает не только его содержание, но и связь с соседними чанками.
Промт:
Ты — модель для генерации эмбеддингов. Для заданного чанка текста создай векторное представление, которое учитывает:
- ключевые сущности (персоны, даты, термины);
- общий тон (формальный, технический, разговорный);
- логическую связь с предыдущим чанком (если он указан).
Чанк: {чанк}
Предыдущий чанк: {предыдущий_чанк}
Выведи эмбеддинг как список чисел.
Пример результата:
[0.123, -0.456, 0.789, ...]
Согласно статье Reimers & Gurevych (2019) «Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks» (arXiv:1908.10084), контекстные эмбеддинги повышают recall@k на 10-15% по сравнению с изолированными.
3. Промт для гибридного поиска (BM25 + векторный)
Задача: Объединить результаты BM25 (ключевое совпадение) и семантического поиска для ранжирования.
Промт:
Ты — система ранжирования. У тебя есть:
- список документов с оценками BM25 (score_bm25);
- список документов с косинусной близостью к запросу (score_vec).
Объедини оценки по формуле: score = 0.4 * score_bm25 + 0.6 * score_vec. Отсортируй документы по убыванию score и верни топ-5.
Документы:
{documents}
Запрос: {запрос}
Выведи результат в формате JSON с полями id и score.
Пример результата:
[
{"id": "doc3", "score": 0.89},
{"id": "doc1", "score": 0.72}
]
Гибридный поиск компенсирует недостатки каждого метода: BM25 ловит точные совпадения, а векторный — семантические.
4. Промт для семантического поиска с фильтрацией
Задача: Найти документы, релевантные запросу, с учётом метаданных (дата, автор, категория).
Промт:
Ты — поисковая система. Выполни семантический поиск по запросу: {запрос}. Учти фильтры: дата после {дата}, категория = {категория}. Используй косинусную близость между эмбеддингом запроса и эмбеддингами документов. Верни топ-3 документа с их метаданными.
Документы: {документы}
Пример результата:
1. Документ #5: "Отчёт по продажам 2025" (дата: 2025-06-01, категория: финансы, близость: 0.92)
2. Документ #12: "Прогноз на 2026" (дата: 2026-01-15, категория: финансы, близость: 0.87)
Этот промт полезен для корпоративных баз знаний, где важна актуальность данных.
5. Промт для генерации ответа на основе найденных документов
Задача: Создать ответ на вопрос пользователя, используя только предоставленные документы.
Промт:
Ты — ассистент, отвечающий строго на основе предоставленных документов. Не используй внешние знания. Если документы не содержат ответа, скажи: «Информация не найдена». Ответ должен быть кратким и ссылаться на источники.
Документы:
{documents}
Вопрос: {вопрос}
Пример результата:
Согласно документу #2, столица Франции — Париж. (Источник: документ #2, раздел «География»)
Это предотвращает галлюцинации модели, что особенно важно в юридических и медицинских RAG-системах.
6. Промт для извлечения ключевых фактов из чанка
Задача: Извлечь структурированные факты из текста для улучшения индексации.
Промт:
Извлеки из текста факты в формате (субъект, предикат, объект). Пример: (Python, является, язык программирования). Игнорируй стоп-слова.
Текст: {текст}
Выведи список фактов в JSON.
Пример результата:
[
{"subject": "Python", "predicate": "является", "object": "язык программирования"},
{"subject": "Python", "predicate": "поддерживает", "object": "ООП"}
]
Такие факты можно использовать для построения графа знаний, что улучшает поиск по связям (Chen et al., 2023, «Graph-based RAG»).
7. Промт для переранжирования результатов поиска
Задача: Уточнить ранжирование документов, оценив их релевантность запросу.
Промт:
Оцени релевантность каждого документа запросу по шкале от 0 до 1, где 1 — полностью релевантен. Учитывай точное совпадение ключевых слов и смысловую близость.
Запрос: {запрос}
Документы:
{documents}
Выведи список с id и оценкой.
Пример результата:
[
{"id": "doc1", "relevance": 0.95},
{"id": "doc2", "relevance": 0.40}
]
Переранжирование с помощью LLM повышает precision@k на 20% (Nogueira et al., 2019, «Document Ranking with a Pretrained Sequence-to-Sequence Model»).
8. Промт для динамического чанкинга с перекрытием
Задача: Разделить текст на чанки с перекрытием (overlap) для сохранения контекста на границах.
Промт:
Раздели текст на чанки размером 300 токенов с перекрытием 50 токенов. Убедись, что чанки не разрывают предложения. Выведи чанки с их начальными и конечными позициями.
Текст: {текст}
Формат: JSON-массив объектов {chunk, start_char, end_char}.
Пример результата:
[
{"chunk": "Python — интерпретируемый язык...", "start_char": 0, "end_char": 1200},
{"chunk": "...язык, который поддерживает ООП...", "start_char": 1150, "end_char": 2400}
]
Перекрытие уменьшает риск потери информации на стыках чанков.
9. Промт для извлечения запросов из диалога
Задача: Преобразовать многопользовательский диалог в поисковые запросы.
Промт:
Из следующего диалога извлеки вопросы пользователя, которые требуют поиска в базе знаний. Игнорируй приветствия и общие фразы. Выведи вопросы в виде списка.
Диалог: {диалог}
Пример результата:
- Как настроить гибридный поиск?
- Какие параметры чанкинга оптимальны?
Этот промт автоматизирует сбор обучающих данных для RAG.
10. Промт для проверки качества чанков
Задача: Оценить, насколько хорошо чанк отражает законченную мысль.
Промт:
Оцени чанк текста по критериям:
- Целостность: содержит ли законченную мысль (0-1);
- Информативность: есть ли ключевые сущности (0-1);
- Размер: не превышает ли 512 токенов (да/нет).
Чанк: {чанк}
Выведи JSON с оценками.
Пример результата:
{
"целостность": 0.9,
"информативность": 0.8,
"размер_корректный": true
}
Регулярная проверка качества чанков предотвращает деградацию поиска.
11. Промт для генерации гипотез поиска
Задача: Создать несколько вариантов запроса для улучшения recall.
Промт:
Сгенерируй 5 вариантов запроса для поиска, которые семантически эквивалентны исходному, но используют разные формулировки. Пример: для запроса «столица Франции» варианты: «какой город является столицей Франции», «главный город Франции».
Исходный запрос: {запрос}
Выведи список.
Пример результата:
- Какой город является столицей Франции?
- Главный город Франции
- Административный центр Франции
- Париж — столица?
- Какой город управляет Францией?
Этот метод, описанный в работе «Query Expansion by Prompting» (2024), увеличивает recall на 30%.
12. Промт для объяснения результатов поиска
Задача: Объяснить, почему конкретный документ был найден.
Промт:
Объясни, почему документ релевантен запросу. Укажи ключевые слова или фразы, которые совпали, и семантическую близость.
Запрос: {запрос}
Документ: {документ}
Пример результата:
Документ релевантен, потому что содержит фразу «гибридный поиск» (точное совпадение) и обсуждает комбинирование BM25 с векторным поиском (семантическая близость 0.85).
Это повышает доверие пользователей к RAG-системе.
Заключение
Эти 12 промтов покрывают ключевые этапы RAG-пайплайна: от индексации (чанкинг, эмбеддинги) до поиска (гибридный, семантический) и генерации. Для углублённого изучения рекомендую ознакомиться с официальной документацией LangChain (python.langchain.com) и статьёй «RAG: Retrieval-Augmented Generation» от Meta AI (2020). Попробуйте адаптировать эти промты под вашу базу знаний — начните с чанкинга и гибридного поиска, это даст быстрый прирост точности.
Комментарии