TL;DR
Промпты для генерации QA-пар из документов — техника, разработанная командой GeoGPT для создания обучающих данных в RAG-системе. Метод использует few-shot промптинг с категоризацией по типам вопросов (что, где, когда, почему, как) и двухэтапную обработку: сначала генерация вопроса-ответа, потом расширение ответа до полноты. Эти промпты изначально создавались для обучения embedding и reranker моделей, но применимы напрямую для создания FAQ, учебных материалов или тестовых вопросов из документации.
Основная находка: При построении обучающих данных для RAG добавление "негативных" документов (релевантных, но не содержащих ответ) значительно улучшает способность модели различать подходящий контекст от похожего, но неправильного. В 7 из 8 примеров контекст включает правильный документ плюс отвлекающие фрагменты, и только в 1 из 8 все документы нерелевантны — это учит модель говорить "не могу найти ответ в контексте". Без негативов модель отвечает неточно, смешивая информацию из разных источников.
Суть подхода: Берёшь документ (например, abstract статьи), выбираешь случайный тип вопроса из 9 категорий (что/где/когда/как/почему/кто/общий/императив/который), подставляешь 3 few-shot примера этого типа в промпт, генерируешь QA-пару. Затем вторым промптом расширяешь краткий ответ до 6-8 предложений с опорой на исходный документ. Результат — разнообразные вопросы разных типов, детальные ответы, привязанные к контексту.
Схема метода
ШАГ 1: Генерация вопроса и краткого ответа
Промпт: Инструкция + тип вопроса + 3 few-shot примера + документ
→ Вопрос + краткий ответ
ШАГ 2: Расширение ответа
Промпт: Оригинальный документ + вопрос + краткий ответ + требование 6-8 предложений
→ Развёрнутый ответ с деталями
(Опционально) ШАГ 3: Оценка качества
Промпт: Оцени ответ по шкале 0-3 по полноте, точности, ясности
→ Фильтрация слабых примеров
Шаги 1-2 выполняются последовательно (2 запроса). Шаг 3 — опциональная валидация.
Пример применения
Задача: Создать FAQ для нового продукта — сервиса автоматизации закупок для малого бизнеса. Есть описание возможностей на 3 страницы, но нет готовых вопросов от клиентов. Нужны вопросы разных типов: про функции, интеграции, тарифы, сроки.
Промпт Шаг 1 — Генерация вопросов:
Инструкция: По документу создай вопрос и краткий ответ, которые точно отражают его содержание. Не добавляй информацию извне. Вопрос задаёт потенциальный клиент, ответ даёт менеджер поддержки.
Тип вопроса: используй формат "Как..." для вопроса.
Примеры:
[вопрос] Как настроить автоматическое формирование заказов?
[ответ] Заходишь в раздел "Правила", создаёшь шаблон с условиями (минимальный остаток, частота заказа), привязываешь поставщиков. Система сама отправит заказ когда сработает условие.
[вопрос] Как добавить нового поставщика в систему?
[ответ] Раздел "Поставщики" → "Добавить" → вводишь название, ИНН, контакты, реквизиты. Можно прикрепить договор и прайс-лист.
[вопрос] Как выгрузить отчёт по закупкам за месяц?
[ответ] Раздел "Отчёты" → выбираешь период, типы товаров и поставщиков → "Сформировать". Отчёт приходит в Excel или PDF на почту за минуту.
[документ]:
**Интеграции с 1С и Excel**
Сервис поддерживает двустороннюю синхронизацию с 1С:Предприятие 8.3 и выше. Все закупки, остатки и платежи автоматически передаются в бухгалтерию без ручного ввода. Также можно загружать прайс-листы поставщиков из Excel — система распознаёт структуру файла и подставит цены в базу. Обновление цен занимает 2-3 минуты для файла на 5000 позиций.
Твой ответ должен содержать только вопрос и ответ.
Промпт Шаг 2 — Расширение ответа:
Задача RAG (Retrieval Augmented Generation) — отвечать на вопросы по документам. Даны: документ (References), вопрос (Query), краткий ответ (Short Answer). Расширь ответ, соблюдая требования:
1. Ответ должен быть 6-8 предложений.
2. Смысл точно совпадает с кратким ответом, полностью отвечает на вопрос.
3. Используй только факты из документа, ничего не выдумывай.
[References]
**Интеграции с 1С и Excel**
Сервис поддерживает двустороннюю синхронизацию с 1С:Предприятие 8.3 и выше. Все закупки, остатки и платежи автоматически передаются в бухгалтерию без ручного ввода. Также можно загружать прайс-листы поставщиков из Excel — система распознаёт структуру файла и подставит цены в базу. Обновление цен занимает 2-3 минуты для файла на 5000 позиций.
[Query]
Как настроить интеграцию с 1С для автоматической передачи данных?
[Short Answer]
Подключаешь модуль синхронизации, настраиваешь двустороннюю связь — закупки, остатки и платежи передаются автоматически.
Выдай только расширенный ответ.
Результат:
После двух запросов получишь:
- Шаг 1: Вопрос в формате "Как..." и краткий ответ (2-3 предложения)
- Шаг 2: Развёрнутый ответ на 6-8 предложений с конкретными деталями из документа — версия 1С, что именно синхронизируется, про Excel-загрузку, скорость обработки
Повтори для разных типов вопросов (что, где, когда, почему, кто, общий, императив) — получишь разнообразный FAQ. Типы вопросов меняй вручную или проси модель выбирать случайно.
Почему это работает
Слабость LLM: Когда просишь "создай вопросы по документу", модель генерирует однотипные — обычно "что такое X?" или "какие преимущества Y?". Из 50 вопросов 40 будут об определениях и списках преимуществ. Живой FAQ нужен разнообразный — про процессы (как), причины (почему), условия (когда), локации (где).
Сильная сторона LLM: Модель отлично копирует паттерны из few-shot примеров. Если показать 3 вопроса типа "Как...", она сгенерирует четвёртый в том же духе. Если показать "Почему...", сделает вопрос про причины. Few-shot работает как шаблон мышления — модель подхватывает не только формат, но и уровень детальности, стиль, фокус на практике или теории.
Как метод использует это: Разделяешь вопросы на 9 категорий (что/где/когда/как/почему/кто/общий/императив/который), для каждой подставляешь свой набор few-shot примеров. Модель видит паттерн категории и генерирует вопрос в том же стиле. Категорию выбираешь случайно → разнообразие. Второй промпт расширяет ответ, добавляя детали из документа — это учит модель не отвечать односложно, а раскрывать контекст.
Рычаги управления промптом:
- Число few-shot примеров (1-5): Больше примеров → точнее копирование стиля, но дороже по токенам. Для простых документов хватит 1-2, для сложных нужно 3-5.
- Типы вопросов (9 категорий): Убери категории которые не нужны. Для B2B-продукта категория "когда" может быть лишней, а "как" критична.
- Длина ответа (6-8 предложений): Уменьши до 3-4 для коротких FAQ, увеличь до 10-12 для учебных материалов или онбординга.
- Инструкция про negatives: В оригинале добавляли шум (нерелевантные документы) для обучения различению. В прямом применении убери это — ты создаёшь FAQ, не обучающую выборку.
Для обучающих данных (оригинальное применение): Добавь в контекст похожие, но неправильные документы — это учит модель различать релевантный контекст от близкого по теме. Соотношение 7:1 (правильный + шум : только шум) — баланс между точностью и способностью сказать "не знаю".
Шаблон промпта
Шаг 1 — Генерация QA-пары:
Инструкция: По документу создай вопрос и краткий ответ, которые точно отражают его содержание. Не добавляй информацию извне. {роль_спрашивающего} задаёт вопрос, {роль_отвечающего} отвечает.
Тип вопроса: {инструкция_по_типу}
Примеры:
[вопрос] {few_shot_1_вопрос}
[ответ] {few_shot_1_ответ}
[вопрос] {few_shot_2_вопрос}
[ответ] {few_shot_2_ответ}
[вопрос] {few_shot_3_вопрос}
[ответ] {few_shot_3_ответ}
[документ]:
{твой_документ}
Твой ответ должен содержать только вопрос и ответ.
Шаг 2 — Расширение ответа:
Задача RAG — отвечать на вопросы по документам. Даны: документ (References), вопрос (Query), краткий ответ (Short Answer). Расширь ответ, соблюдая:
1. Ответ {длина} предложений.
2. Смысл точно совпадает с кратким ответом, полностью отвечает на вопрос.
3. Используй только факты из документа, ничего не выдумывай.
[References]
{твой_документ}
[Query]
{вопрос_из_шага_1}
[Short Answer]
{ответ_из_шага_1}
Выдай только расширенный ответ.
Как заполнять плейсхолдеры:
{роль_спрашивающего}/{роль_отвечающего}— "потенциальный клиент" / "менеджер поддержки", "студент" / "преподаватель", "новичок" / "ментор"{инструкция_по_типу}— "используй формат 'Как...'", "начни с 'Почему...'", "спроси 'Где...'", "задай общий вопрос без вопросительного слова", "используй императивную форму ('Объясни...', 'Покажи...')"{few_shot_N}— 1-5 примеров вопросов-ответов того же типа что указан в инструкции. Создай вручную или попроси модель сгенерировать для разных категорий.{твой_документ}— текст на основе которого нужны вопросы (описание продукта, раздел документации, abstract статьи){длина}— "6-8" (стандарт), "3-4" (короткий FAQ), "10-12" (подробные материалы)
Девять типов вопросов с инструкциями:
| Тип | Инструкция для промпта |
|---|---|
| что | используй "Что такое...", "Что делает...", "Что включает..." |
| где | используй "Где находится...", "Где можно...", "Где хранятся..." |
| когда | используй "Когда происходит...", "Когда нужно...", "Когда доступно..." |
| как | используй "Как настроить...", "Как использовать...", "Как работает..." |
| почему | используй "Почему важно...", "Почему происходит...", "Почему выбрать..." |
| кто/чей | используй "Кто может...", "Кто отвечает...", "Чья ответственность..." |
| который/какой | используй "Какой формат...", "Которые функции...", "Какие условия..." |
| общий | задай вопрос в общей форме без вопросительного слова в начале |
| императив | используй императивную форму: "Объясни...", "Покажи...", "Опиши..." |
🚀 Быстрый старт — вставь в чат:
Вот шаблон для генерации FAQ из документов. Адаптируй под мою задачу: {опиши свою задачу и материалы}.
Задавай вопросы, чтобы правильно заполнить поля.
[вставить шаблон Шага 1 выше]
LLM спросит какие роли использовать (клиент-поддержка? студент-преподаватель?), какие типы вопросов нужны (только практические "как" или все 9?), сколько few-shot примеров создать. Она создаст примеры для каждого типа, адаптирует формат под твой контекст — получишь рабочий промпт без ручной работы.
Ограничения
⚠️ Узкое применение: Метод создан для генерации обучающих данных в RAG-системах. В прямом применении полезен для создания FAQ, учебных вопросов, тестов из документации — но это не универсальная техника промптинга. Если нужны вопросы для интервью, креативные сценарии, дебаты — эти промпты не подойдут, они заточены под "вопрос по факту из документа".
⚠️ Зависимость от качества few-shot: Модель копирует стиль и уровень детальности из примеров. Если few-shot примеры слабые (общие вопросы, односложные ответы) — результат будет таким же. Создание хороших few-shot требует времени — нужно вручную написать 2-3 качественных примера для каждого типа вопросов (всего 18-27 примеров для 9 категорий).
⚠️ Два запроса на один вопрос: Генерация (Шаг 1) + расширение (Шаг 2) = два последовательных вызова модели. Для 50 вопросов это 100 запросов. Можно объединить в один промпт ("создай вопрос и сразу дай развёрнутый ответ"), но качество падает — модель хуже следует требованию "6-8 предложений" когда не видит краткую версию.
⚠️ Основная ценность статьи — RAG-инфраструктура: Промпты — это побочный продукт исследования. Основное содержание (fine-tuning embedding модели, reranker, векторная БД, evaluation) требует Python, GPU, векторные БД и недоступно в чате. Если ты строишь RAG-систему с кодом — статья золотая. Если работаешь только в ChatGPT/Claude — применимы только эти 2 промпта.
Как исследовали
Команда GeoGPT создала полноценную RAG-систему для геонаук, но нам интересны промпты, которые они использовали для генерации обучающих данных.
Откуда данные: Взяли абстракты из миллиона открытых научных статей по географии и наукам о Земле (arXiv, лицензия CC BY). Это стало базой для генерации вопросов.
Генерация QA-пар: Использовали большую модель (не уточняют какую, но упоминают Qwen) для создания вопросов и ответов. Ключевая идея — категоризация вопросов по типам. Создали библиотеку few-shot примеров из набора Alpaca, разбили на категории (что/где/когда/как/почему/...), для каждого вопроса случайно выбирали категорию и 3 примера из неё. Это дало разнообразие — не все вопросы про "что такое X".
Двухэтапный процесс: Сначала промпт генерировал вопрос + краткий ответ. Потом второй промпт расширял ответ до 6-8 предложений с требованием опираться только на исходный документ. Это улучшило полноту — модель добавляла детали, не уходя в фантазии.
Добавление негативов: Для каждого вопроса через поиск находили похожие, но неправильные куски текста из других статей — это "негативы". В 7 из 8 примеров контекст включал правильный документ + негативы, в 1 из 8 — только негативы, и модель должна была ответить "не могу найти ответ". Это учило различать релевантность.
Фильтрация качества: После генерации LLaMA3 оценивала каждый ответ по шкале 0-3 (критерии: полнота, точность, ясность). Примеры с оценкой 0 выбрасывали. Оставили 360k пар из открытых датасетов + 30k синтетических из геонаук.
Что тестировали: Fine-tuned embedding модель (GeoEmbedding на базе Mistral-7B) и reranker (GeoReranker на базе BGE-M3) на этих данных. Создали бенчмарк GeoRAG-QA (938 вопросов) для оценки. Результат — embedding и reranker лучше работают на геонаучных запросах (Recall@10 вырос с ~0.85 до ~0.96), сохраняя качество на общих задачах (MTEB benchmark).
Почему это сработало: Few-shot с категориями дал разнообразие типов вопросов. Двухэтапная генерация (вопрос → расширение) улучшила полноту ответов. Негативы научили модель не путать похожие контексты. Фильтрация убрала шум. В итоге — качественные обучающие данные без ручной разметки.
Интересно: Они тестировали RAG на 70 экспертных вопросах по нефтеразведке — достигли 85.7% точности. Добавление RAG-примеров в обучение (RAFT — Retrieval-Augmented Fine-Tuning) подняло recall с 69.72% до 78.12% (рост на 12%). Это показывает — когда модель тренирована на примерах использования контекста, она лучше извлекает инфу из retrieval results.
Оригинал из исследования
Query-Generation Prompt (упрощённо, полный в статье на стр. 9):
Instruction: Given the next [document], create a [question] and [answer] pair that are grounded
in the main point of the document, don't add any additional information that is not in the
document and [use prompt by different query type of Table 6]. The [question] is by an
information-seeking user and the [answer] is provided by a helping AI Agent. Refer to the
following question format and corresponding answers. Your output should consist solely of
question-answer pairs.
[question]{few-shot 1 question}
[answer] {few-shot 1 answer}
......
[document]: contexts
Response:
Контекст: Исследователи генерировали QA-пары из абстрактов статей, используя Alpaca instruction set для few-shot примеров. Случайно выбирали тип вопроса, подставляли 3 примера этого типа.
Answer-Rewriting Prompt (полный на стр. 9):
Here is a task involving RAG (Retrieval Augmented Generation) for question answering. I will
provide you some documents(denoted as [References]), a question (denoted as [Query]) related
to the documents, and the corresponding original answer (denoted as [Short Answer]). You are
required to expand the content of the answer, with the following requirements:
1. Your generated answer should contain 6 to 8 sentences.
2. Your generated answer should have exactly the same meaning as the [Short Answer] and must
perfectly address the [Query] without deviating.
3. The content of your generated answer should fully utilize the content from the [References],
and you must not fabricate any facts.
[References] {documents_here}
[Query] {question_here}
[Short Answer] {short_answer_here}
Please note that do not output content other than the generated new answer. Your generated
new answer is
Контекст: Второй этап обработки — расширяли краткий ответ до 6-8 предложений, требуя полного соответствия исходному документу без выдумок.
Адаптации и экстраполяции
💡 Адаптация: генерация тестовых вопросов для учебного курса
Метод создавался для FAQ-like материалов, но адаптируется под тестирование знаний. Добавь в инструкцию: "вопрос должен проверять понимание, не просто повторять факт". Few-shot примеры замени на вопросы с ловушками, требующие анализа.
Инструкция: По документу создай вопрос для теста и правильный ответ. Вопрос должен проверять
понимание концепции, не пересказ факта. Студент отвечает письменно, преподаватель оценивает.
Тип вопроса: используй формат "Почему..." или "Объясни почему..."
Примеры:
[вопрос] Почему нельзя использовать обычный REST API для real-time уведомлений?
[ответ] REST работает по модели запрос-ответ: клиент спрашивает, сервер отвечает. Для real-time
нужна обратная связь — сервер сам отправляет данные когда происходит событие. Можно делать polling
(клиент постоянно спрашивает "есть новое?"), но это нагружает сервер и даёт задержку. WebSocket
или Server-Sent Events решают это — держат соединение открытым, сервер пушит обновления сразу.
[вопрос] Объясни почему JWT токен нельзя отозвать до истечения срока действия.
[ответ] JWT — это самодостаточный токен, в нём зашифрованы все данные (user_id, роли, срок).
Сервер не хранит список активных токенов — он просто проверяет подпись и срок. Когда токен
выдан, он валиден до истечения, даже если пользователь вышел или поменял права. Чтобы отзывать,
нужен blacklist или хранилище сессий — но тогда теряется главное преимущество JWT (stateless).
[документ]:
{твой_учебный_материал}
Твой ответ должен содержать только вопрос и ответ.
Фокус сместился с "извлечь факт" на "объяснить причину" — вопросы проверяют понимание, не память.
🔧 Техника: убрать расширение ответа → экономия токенов
Если создаёшь FAQ где достаточно кратких ответов (1-2 предложения), пропусти Шаг 2. Измени Шаг 1:
Инструкция: По документу создай вопрос и КРАТКИЙ ответ (1-2 предложения), который точно
отражает суть. Не добавляй информацию извне.
Экономишь 50% запросов (1 вместо 2 на каждый вопрос) + 30-40% токенов (короткие ответы). Подходит для справочников, глоссариев, быстрых гайдов. Для подробных материалов (онбординг, туториалы) лучше оставить двухэтапку.
🔧 Техника: категории вопросов по сложности вместо типа
Оригинальный метод делит по лингвистическому типу (как/что/где). Можно разделить по когнитивной сложности:
| Уровень | Few-shot стиль |
|---|---|
| Запомнить | "Что такое...", "Перечисли...", "Назови..." |
| Понять | "Объясни разницу между...", "Почему...", "Что означает..." |
| Применить | "Как использовать...", "Какие шаги...", "В каком случае..." |
| Анализ | "Сравни...", "Какие преимущества/недостатки...", "Что произойдёт если..." |
Создай few-shot библиотеку по этим 4 уровням, случайно выбирай уровень вместо типа. Получишь вопросы от простых (определения) до сложных (анализ). Подходит для учебных курсов с прогрессией — начинаешь с уровня "Запомнить", постепенно усложняешь.
💡 Экстраполяция: комбинация с Chain-of-Thought для сложных вопросов
Для технических материалов (код, математика, логика) добавь CoT-reasoning в расширение ответа:
Задача RAG — отвечать на технические вопросы с пошаговыми объяснениями. Даны: документ,
вопрос, краткий ответ. Расширь ответ следуя требованиям:
1. Первое предложение — краткий ответ как есть.
2. Затем 4-6 предложений — пошаговое объяснение ПОЧЕМУ это так: какая логика, какие
зависимости, какие альтернативы и почему они не подходят.
3. Используй только факты из документа.
[References] {документ}
[Query] {вопрос}
[Short Answer] {краткий_ответ}
Выдай расширенный ответ с рассуждением.
Результат — ответы не только ГОВОРЯТ "как", но ОБЪЯСНЯЮТ "почему именно так". Полезно для обуча
