Введение
RAG (Retrieval-Augmented Generation) — это архитектура, которая объединяет поиск информации и генерацию текста. Вместо того чтобы полагаться только на знания модели, RAG-система сначала находит релевантные документы в базе знаний (например, в векторной БД), а затем передает их LLM для ответа. По данным исследования LangChain (2025), RAG-системы увеличивают точность ответов на 40–60% по сравнению с чистой генерацией, особенно в доменах с узкоспециализированными данными. Но без правильных промтов даже лучшая векторная база не даст результата. В этой подборке — 15 готовых промтов для всех этапов RAG: чанкинг, эмбеддинги, гибридный поиск, генерация ответов. Каждый промт сопровождается примером использования и кодом на Python.
1. Промт для чанкинга: разбивка текста на смысловые блоки
Задача: Разделить документ на чанки так, чтобы каждый блок содержал законченную мысль, а не обрывался на середине предложения. Это критично для качества эмбеддингов: если чанк слишком короткий или бессвязный, векторное представление будет шумным.
Промт:
Раздели следующий текст на логические чанки. Каждый чанк должен содержать законченную мысль или описание одного объекта. Не разрывай предложения. Если текст содержит маркированные списки — каждый пункт может быть отдельным чанком. Верни результат в формате JSON-массива строк.
Текст:
{текст_документа}
Пример использования:
text = """RAG-системы состоят из трех этапов: индексация, поиск и генерация. На этапе индексации документы разбиваются на чанки и преобразуются в эмбеддинги. Поиск выполняется по векторной базе данных, например FAISS. Генерация объединяет найденные документы с запросом пользователя."""
prompt = f"""Раздели следующий текст на логические чанки. Каждый чанк должен содержать законченную мысль или описание одного объекта. Не разрывай предложения. Верни результат в формате JSON-массива строк.
Текст:
{text}"""
# Вызов LLM
Результат: ["RAG-системы состоят из трех этапов: индексация, поиск и генерация.", "На этапе индексации документы разбиваются на чанки и преобразуются в эмбеддинги.", "Поиск выполняется по векторной базе данных, например FAISS.", "Генерация объединяет найденные документы с запросом пользователя."]
2. Промт для генерации эмбеддингов: инструкция для модели
Задача: Указать модели, как именно преобразовывать текст в вектор, чтобы эмбеддинги отражали семантику, а не просто частоту слов. Особенно важно для моделей типа text-embedding-ada-002 или all-MiniLM-L6-v2.
Промт:
Сгенерируй эмбеддинг для следующего текста. Учитывай контекст: это часть технической документации по RAG. Вектор должен отражать ключевые понятия: разбиение, индекс, поиск, генерация. Избегай шума от стоп-слов. Текст: {текст_чанка}
Пример:
chunk = "На этапе индексации документы разбиваются на чанки и преобразуются в эмбеддинги."
prompt = f"Сгенерируй эмбеддинг для следующего текста. Учитывай контекст: это часть технической документации по RAG. Вектор должен отражать ключевые понятия: разбиение, индекс, поиск, генерация. Избегай шума от стоп-слов. Текст: {chunk}"
# Вызов модели эмбеддингов
3. Промт для гибридного поиска: объединение BM25 и векторного поиска
Задача: Составить запрос, который одновременно использует ключевые слова (BM25) и семантический поиск (эмбеддинги). Это повышает recall на 25–30% (по данным Elasticsearch, 2025).
Промт:
Выполни гибридный поиск по запросу: {запрос_пользователя}. Используй два подхода:
1. Ключевой поиск (BM25) с весами для терминов: {термины}
2. Векторный поиск по эмбеддингам с метрикой cosine similarity.
Объедини результаты с помощью RRF (Reciprocal Rank Fusion). Верни топ-5 документов с указанием источника (BM25 или векторный).
Пример:
query = "как разбивать документы для RAG"
terms = ["разбиение", "чанкинг", "документ", "RAG"]
prompt = f"Выполни гибридный поиск по запросу: {query}. Используй BM25 с весами для терминов: {terms}. Объедини с векторным поиском через RRF."
# Вызов API поиска
4. Промт для ранжирования результатов поиска
Задача: Отсортировать найденные документы по релевантности, учитывая не только косинусную близость, но и контекст запроса.
Промт:
У тебя есть список документов, найденных по запросу: "{запрос}". Отранжируй их по релевантности. Учитывай:
- Прямое совпадение ключевых слов
- Семантическую близость
- Полноту ответа на вопрос
Верни список в порядке убывания релевантности с оценкой от 1 до 10.
Документы:
{doc1}
{doc2}
...
5. Промт для генерации ответа на основе контекста
Задача: Сгенерировать ответ, используя только предоставленные документы, без привлечения внешних знаний.
Промт:
Ответь на вопрос, используя ТОЛЬКО следующие документы. Не добавляй информацию из своего обучения. Если документы не содержат ответа, скажи: "Информация не найдена в предоставленных документах."
Вопрос: {вопрос}
Документы:
{документы}
Ответ:
6. Промт для проверки фактов в сгенерированном ответе
Задача: Верифицировать, что ответ LLM соответствует источникам.
Промт:
Проверь, соответствует ли следующий ответ предоставленным документам. Укажи, какие утверждения подтверждаются, а какие — нет. Если ответ содержит информацию не из документов — отметь это как "галлюцинация".
Документы:
{документы}
Ответ:
{ответ}
Результат проверки:
7. Промт для извлечения ключевых сущностей из запроса
Задача: Выделить из запроса пользователя сущности (термины, даты, имена), которые будут использованы для уточнения поиска.
Промт:
Извлеки из запроса ключевые сущности: термины, даты, имена собственные, названия технологий. Верни в формате JSON: {"термины": [...], "даты": [...], "технологии": [...]}.
Запрос: {запрос}
8. Промт для рерайтинга запроса (query rewriting)
Задача: Переформулировать запрос пользователя, чтобы улучшить поиск в векторной БД.
Промт:
Перепиши следующий запрос в более формальный и точный вид, подходящий для поиска в технической базе знаний. Сохрани все ключевые термины. Если запрос содержит синонимы — используй наиболее распространенный термин.
Исходный запрос: {запрос}
Переписанный запрос:
9. Промт для дедупликации документов
Задача: Удалить дублирующиеся или очень похожие чанки перед индексацией.
Промт:
Проверь следующие чанки на дубликаты. Два чанка считаются дубликатами, если их косинусная близость > 0.95 или они содержат одинаковый смысл. Верни список уникальных чанков.
Чанки:
{чанки}
10. Промт для создания эмбеддингов с учетом домена
Задача: Адаптировать эмбеддинги под конкретную предметную область (например, медицина или юриспруденция).
Промт:
Сгенерируй эмбеддинг для текста, учитывая домен: {домен}. Используй следующие приоритетные термины: {термины}. Игнорируй общие слова, не относящиеся к домену. Текст: {текст}
11. Промт для гибридного поиска с бустингом
Задача: Увеличить вес определенных полей (например, заголовков) в результатах поиска.
Промт:
Выполни поиск по запросу: "{запрос}" с бустингом полей. Поле "title" имеет вес 3.0, поле "content" — 1.0. Используй BM25 для текстового поиска и cosine similarity для векторного. Объедини результаты с параметром RRF k=60.
12. Промт для анализа качества чанков
Задача: Оценить, насколько хорошо разбит документ.
Промт:
Оцени качество чанкинга следующего документа. Критерии:
- Каждый чанк содержит законченную мысль (да/нет)
- Чанки не слишком короткие (< 50 токенов) или длинные (> 500 токенов)
- Отсутствуют разрывы предложений
Поставь оценку от 1 до 5.
Чанки:
{чанки}
13. Промт для генерации гипотез (HyDE)
Задача: Создать гипотетический документ, который мог бы быть ответом на запрос, и использовать его для поиска.
Промт:
Представь, что ты — эксперт по {тема}. Напиши гипотетический документ, который идеально отвечает на вопрос: "{вопрос}". Документ должен быть кратким (50-100 слов) и содержать ключевые термины. Этот документ будет использован для поиска в базе знаний.
14. Промт для мультимодального RAG (текст + таблицы)
Задача: Обработать запрос, который ссылается как на текст, так и на табличные данные.
Промт:
У тебя есть текстовые документы и таблицы. Вопрос: {вопрос}. Сначала найди релевантные таблицы по ключевым словам, затем текстовые чанки. Объедини информацию в ответе. Если данные из таблицы противоречат тексту — укажи это.
15. Промт для логирования и отладки RAG
Задача: Получить прозрачный вывод того, как был получен ответ.
Промт:
Покажи пошагово, как был получен ответ на вопрос: "{вопрос}". Укажи:
- Какие чанки были найдены
- Их релевантность (оценка)
- Какой промт использовался для генерации
- Какие части ответа взяты из каждого чанка
Формат: Markdown с цитатами.
Заключение
Эти 15 промтов покрывают полный цикл RAG: от чанкинга и эмбеддингов до гибридного поиска и верификации ответов. Используйте их как шпаргалку при разработке своей системы. Помните: качество промта напрямую влияет на качество поиска и генерации. Начните с промта для чанкинга — это основа, на которой строится всё остальное. Если вы хотите углубиться в тему, изучите официальную документацию LangChain (langchain.com) и руководство по FAISS (github.com/facebookresearch/faiss). Адаптируйте промты под свой домен и тестируйте на реальных запросах.
Комментарии