Введение
Системы Retrieval-Augmented Generation (RAG) стали стандартом де-факто для построения вопросно-ответных ассистентов, работающих с корпоративными данными. RAG-пайплайн состоит из этапов индексации (чанкинг + эмбеддинги), поиска (векторный, гибридный) и генерации (LLM с контекстом). Каждый этап критически зависит от качества промтов — инструкций, которые управляют чанкингом, запросами к векторной БД и финальным ответом модели. В этой подборке — 15 проверенных промтов, которые помогут вам собрать RAG-систему, способную обрабатывать PDF, код, таблицы и мультиязычные данные.
Категория 1: Базовые промты для индексации и чанкинга
1. Промт для интеллектуального чанкинга текста
Задача: Разбить длинный документ на семантически связные блоки (чанки) для индексации. Традиционные методы (по 512 токенов) часто разрывают предложения. Этот промт использует LLM для поиска естественных границ.
Промт:
Ты — эксперт по подготовке данных для RAG. Разбей следующий текст на чанки. Каждый чанк должен:
- Содержать законченную мысль (1-3 абзаца).
- Не превышать 1024 токена.
- Начинаться с заголовка, если он есть.
- Сохранять контекст: если предложение переносится — заверши его в текущем чанке.
Текст:
{text}
Формат вывода: JSON-список объектов с полями "id", "content", "metadata".
Пример результата:
Для текста «Введение в трансформеры. Модель была предложена в 2017 году. Она использует механизм внимания.» промт вернёт:
[
{"id": 1, "content": "Введение в трансформеры. Модель была предложена в 2017 году.", "metadata": {"source": "intro"}},
{"id": 2, "content": "Она использует механизм внимания.", "metadata": {"source": "intro"}}
]
Почему это работает: LLM понимает семантику, а не просто режет по токенам. Это уменьшает потерю контекста при поиске.
2. Промт для генерации метаданных чанка
Задача: Обогатить каждый чанк метаданными: тема, ключевые слова, тип контента (таблица, код, цитата). Это улучшает фильтрацию при поиске.
Промт:
Для данного текстового фрагмента верни метаданные в формате JSON:
{
"topic": "краткая тема (до 5 слов)",
"keywords": ["ключевое_слово1", "ключевое_слово2"],
"type": "text
|code|table|quote",
"entities": ["извлечённые сущности (имена, даты, компании)"]
}
Фрагмент:
{chunk_text}
Пример: Для чанка «В 2023 году OpenAI выпустила GPT-4.» результат: {"topic": "OpenAI GPT-4", "keywords": ["OpenAI", "GPT-4"], "type": "text", "entities": ["OpenAI", "2023"]}. Это позволяет фильтровать поиск по году или компании.
3. Промт для извлечения вопросов из чанка
Задача: Сгенерировать потенциальные вопросы, на которые отвечает данный чанк. Это используется для синтеза датасета или для улучшения поиска (вопрос-ответная индексация).
Промт:
На основе следующего текста сгенерируй 3-5 вопросов, на которые можно получить ответ из этого текста. Вопросы должны быть разной сложности: фактические, объяснительные, сравнительные.
Текст:
{chunk_text}
Формат: список строк.
Результат: Для чанка про «механизм внимания»: ["Что такое механизм внимания?", "Почему attention важен в трансформерах?", "Чем attention отличается от RNN?"]
Категория 2: Продвинутые промты для поиска
4. Промт для гибридного поиска (векторный + BM25)
Задача: Объединить результаты векторного поиска (semantic) и ключевого (keyword). Этот промт принимает два списка и ранжирует их, устраняя дубликаты.
Промт:
Ты — система ранжирования RAG. У тебя есть два списка результатов поиска:
- Векторный (семантический): {vector_results}
- Ключевой (BM25): {keyword_results}
Объедини их в единый ранжированный список. Правила:
1. Если один и тот же документ есть в обоих списках, оставь одну запись, повысив её релевантность на 0.2.
2. Сначала иди семантические результаты с релевантностью > 0.8, потом BM25 с TF-IDF > 0.6, затем остальные.
3. Выведи топ-5 уникальных результатов с полями "id", "score", "source".
Пример: Если векторный поиск вернул doc A (score 0.9) и doc B (0.7), а BM25 — doc B (score 0.8) и doc C (0.6), то финальный список: doc A (0.9), doc B (0.9), doc C (0.6).
5. Промт для переранжирования результатов
Задача: Отсортировать результаты поиска по релевантности к запросу, используя LLM. Это дороже, чем косинусная близость, но точнее.
Промт:
Запрос пользователя: {query}
Список кандидатов:
{chunks}
Оцени каждый кандидат по шкале 0-10 по критериям:
- Прямое совпадение с запросом (0-4)
- Наличие ключевых сущностей (0-3)
- Полнота ответа (0-3)
Верни список id, отсортированный по убыванию суммы баллов.
Результат: Для запроса «Как работает attention?» кандидат с объяснением механизма получит 10, а с упоминанием «attention is all you need» — 7.
6. Промт для декомпозиции сложного запроса
Задача: Разбить сложный запрос на подзапросы для мульти-хоп поиска (Multi-Hop RAG).
Промт:
Разбей следующий вопрос на подвопросы, каждый из которых можно найти в одном чанке. Подвопросы должны быть независимыми.
Вопрос: {query}
Формат: JSON-массив строк.
Пример: Для вопроса «Какие модели лучше для русского языка?» подзапросы: ["Какие существуют модели для русского языка?", "Каковы метрики этих моделей?"]
7. Промт для поиска по коду
Задача: Искать фрагменты кода по описанию функциональности. Полезно для RAG по репозиториям.
Промт:
Найди в коде функцию, которая {описание}. Верни:
- имя функции
- строку вызова
- файл
Код:
{code_corpus}
Пример: Для запроса «парсит JSON из запроса» промт найдёт def parse_json_request(data): json.loads(data).
Категория 3: Экспертные промты для генерации
8. Промт для ответа с цитированием
Задача: Сгенерировать ответ, который ссылается на конкретные чанки. Это повышает доверие и позволяет юзеру проверить источник.
Промт:
Используя следующие чанки, ответь на вопрос. После каждого факта укажи в квадратных скобках номер чанка [id]. Если чанки не содержат ответа, скажи «Информация не найдена».
Чанки:
{chunks}
Вопрос: {query}
Пример: Ответ: «Механизм внимания был предложен в статье 'Attention is All You Need' [1]. Он позволяет модели фокусироваться на разных частях входа [2].»
9. Промт для мультиязычного RAG
Задача: Индексация на одном языке, ответ на другом. Промт для трансляции и генерации.
Промт:
Ты — полиглот. Чанки даны на {source_lang}. Вопрос на {target_lang}. Ответь на {target_lang}, используя информацию из чанков. Если нужно, перефразируй.
Чанки:
{chunks}
Вопрос: {query}
Пример: Чанки на английском: «Attention is a mechanism.» Вопрос на русском: «Что такое внимание?» Ответ: «Внимание — это механизм, который...»
10. Промт для агрегации нескольких чанков
Задача: Объединить информацию из нескольких чанков в связный ответ, избегая противоречий.
Промт:
У тебя есть несколько чанков, которые могут содержать разную информацию по теме. Синтезируй единый ответ. Если есть противоречия, укажи их и предложи версию с наибольшим подтверждением.
Чанки:
{chunks}
Тема: {query}
Результат: Для чанков о температуре LLM (один говорит 0.7, другой 0.8) ответ: «Рекомендуемая температура варьируется: в одном источнике указано 0.7, в другом — 0.8. Большинство источников сходятся на 0.7.»
11. Промт для генерации краткого саммари по результатам поиска
Задача: Из 10 чанков сделать одно-два предложения.
Промт:
Суммируй ключевую информацию из чанков в 2-3 предложения. Фокус на фактах, без лишних деталей.
Чанки:
{chunks}
Пример: Из чанков про transformer: «Трансформер — архитектура на основе attention, предложенная в 2017. Она заменила RNN в NLP.»
12. Промт для извлечения таблиц из чанков
Задача: Преобразовать табличные данные в Markdown-таблицу для ответа.
Промт:
Из чанков извлеки табличные данные и представь в формате Markdown:
| Колонка1 | Колонка2 |
|----------|----------|
| значение | значение |
Чанки:
{chunks}
Запрос: {query}
Результат: Для чанка с ценами: `
| Модель | Цена | | GPT-4 | $0.03 |`.
13. Промт для обработки PDF с layout
Задача: Сохранить структуру PDF (колонки, заголовки) при индексации.
Промт:
Ты — парсер PDF. Текст содержит позиционные метки (x, y). Восстанови логическую структуру: заголовки, колонки, списки. Игнорируй номера страниц.
Данные:
{ocr_data}
Пример: Для двух колонок (x=10 и x=300) промт соберёт текст в правильном порядке.
14. Промт для фильтрации шума в чанках
Задача: Удалить boilerplate (навигация, cookie, копирайт) из веб-страниц.
Промт:
Очисти текст от мусора: удали строки, содержащие "Cookie", "©", "меню", "реклама". Сохрани только основной контент.
Текст:
{raw_text}
Результат: Из страницы с меню и футером останется только статья.
15. Промт для оценки качества чанка
Задача: Оценить, насколько чанк подходит для RAG (информативность, связность).
Промт:
Оцени чанк по шкале 0-10:
- Информативность (есть ли факты): 0-4
- Связность (нет ли обрыва): 0-3
- Отсутствие шума: 0-3
Чанк:
{chunk}
Верни число.
Пример: Чанк «Модель...» с обрывом получит 2.
Заключение
Эти 15 промтов покрывают весь RAG-пайплайн: от чанкинга до генерации с цитированием. Начните с базовых (чанкинг, метаданные), затем переходите к гибридному поиску и мультиязычности. Используйте их как шаблоны, адаптируя под вашу LLM и векторную БД. Помните: качество RAG на 80% зависит от индексации и поиска, а промты — это ключ к их настройке. Экспериментируйте, замеряйте метрики (MRR, Recall) и делитесь результатами в комментариях!
Комментарии