TL;DR
Manual RAG — техника работы с LLM, где вы сначала сами находите нужный фрагмент документа, затем вставляете его в промпт и строго ограничиваете модель отвечать только по этому тексту. Суть в двух шагах: (1) retrieval вручную — находите релевантный кусок, (2) generation с ограничением — промпт "отвечай ТОЛЬКО по этому контексту, ничего не выдумывай".
Исследование на британских медицинских гайдлайнах NICE показало: LLM галлюцинируют даже когда знают тему. GPT-4.1 без контекста дал 59.6% фактической точности (Faithfulness), медицинская модель Meditron3-8B — 43%. Проблема не в знаниях, а в том, что модель смешивает факты с домыслами, когда работает "из памяти". Claude Sonnet 4 с web-search по NICE.org.uk дал 88.3% — лучше, но всё равно ненадёжно.
Решение: строгий промпт "отвечай ТОЛЬКО по вставленному тексту" поднял Faithfulness до 99.5% для O4-Mini. Модель перестала выдумывать, потому что инструкция блокирует доступ к её обучению — только явный контекст. Это как дать студенту открытую книгу на экзамене и сказать "цитируй только отсюда" вместо "вспоминай что учил".
Схема метода
Автоматический RAG (как в исследовании):
ШАГ 1: Векторный поиск → топ-10 релевантных чанков (автоматом)
ШАГ 2: Reranking → сортировка по точности совпадения
ШАГ 3: LLM с промптом "только контекст" → ответ строго по тексту
Manual RAG (для чата):
ШАГ 1: Вы сами находите нужный фрагмент документа
ШАГ 2: Вставляете в промпт + инструкция "отвечай ТОЛЬКО по этому"
ШАГ 3: LLM генерирует ответ, ограниченный контекстом
Пример применения
⚠️ Ограничения метода: Работает когда у вас есть нужный документ. Не подходит для задач где нужен синтез из головы (креатив, мнения). Лучшая зона — проверяемые факты из конкретных источников.
Задача: Вы юрист, готовите меморандум по новому закону о маркетплейсах. Нужно процитировать конкретные пункты закона, но боитесь что LLM напутает цифры или исказит формулировки.
Промпт:
Вот текст статьи 15.3 ФЗ-381 "О маркетплейсах":
"""
[вы вставляете сюда полный текст статьи из СПС КонсультантПлюс]
"""
Ответь на вопрос строго по этому тексту, ничего не добавляя от себя:
Какие обязательства маркетплейса при возврате товара ненадлежащего качества?
Правила:
- Используй только информацию из вставленного текста
- Если в тексте нет ответа, напиши "в предоставленном фрагменте закона этот момент не раскрыт"
- Сохраняй формулировки закона, не перефразируй юридические термины
Результат: Модель выдаст точный ответ на основе текста закона, не домысливая "из памяти". Если статья не покрывает вопрос — скажет прямо. Вы получаете цитирование без риска галлюцинаций (искажения сроков, сумм, ответственности).
Почему это работает
Слабость LLM: Модели не умеют разделять "что я точно знаю" и "что мне кажется правдоподобным". Когда GPT-4.1 отвечает из памяти на вопрос про медицинские рекомендации, она генерирует статистически вероятный текст, который звучит как гайдлайн, но может содержать неточности. Модель не "врёт сознательно" — она просто продолжает паттерн, смешивая факты с похожими на правду домыслами.
Сильная сторона LLM: Модели отлично извлекают информацию из явно данного текста и следуют инструкциям. Когда вы даёте контекст и говорите "только отсюда", модель работает как экстрактор фактов, а не как генератор домыслов. Она видит конкретный текст → находит в нём ответ → переформулирует, не выходя за границы.
Как метод использует сильную сторону: Промпт блокирует режим "вспоминания" и активирует режим "чтения". Инструкция "если нет в тексте → скажи 'не найдено'" даёт модели легальный выход вместо попытки заполнить пробелы домыслами. Результат: Faithfulness 99.5% вместо 35-60%.
Рычаги управления:
- Строгость ограничения — "только контекст" vs "можешь добавить от себя" → первое даёт точность, второе гибкость
- Формат вывода — "сохраняй формулировки" vs "перефразируй проще" → для юридических/медицинских текстов лучше первое
- Поведение при пробелах — "скажи 'не нашёл'" vs "попробуй вывести логически" → первое безопаснее
- Объём контекста — 1 абзац vs вся статья → больше контекста = больше шансов найти ответ, но дольше обработка
Шаблон промпта
Вот текст из источника "{название_документа}":
"""
{текст_фрагмента}
"""
Ответь на вопрос строго по этому тексту: {вопрос}
Правила:
- Используй только информацию из вставленного текста
- Если ответа нет в тексте, напиши "{фраза_при_отсутствии}"
- {дополнительные_требования}
Как заполнять:
{название_документа}— источник для контекста, например "Статья 228 УК РФ" или "Раздел 3.2 техзадания"{текст_фрагмента}— релевантный кусок документа (статья, параграф, раздел){вопрос}— ваш конкретный вопрос по этому тексту{фраза_при_отсутствии}— что сказать если ответа нет, например "в предоставленном фрагменте это не раскрыто"{дополнительные_требования}— опционально: "сохраняй юридические термины", "выдели ключевые цифры", "процитируй дословно"
Почему промпт работает
Блокировка "памяти": Фраза "строго по этому тексту" переключает режим работы модели. Вместо "вспомни всё что знаешь про X" модель получает задачу "прочитай этот кусок и найди Y". Это как разница между экзаменом по памяти и экзаменом с открытой книгой.
Легальный выход: Инструкция "если нет → скажи 'не найдено'" убирает давление генерировать ответ любой ценой. Модели обучены быть полезными, поэтому без явного разрешения они пытаются ответить всегда, даже домысливая. Разрешение сказать "не знаю" снимает это давление.
Проверяемость: Когда модель отвечает "по контексту", вы видите источник в том же промпте. Можете проверить утверждение за 10 секунд. Когда модель отвечает из памяти — источник неявен, проверка требует гугления.
Особенность для сложных документов: Если вставляете большой кусок (например, всю статью закона на 5 страниц), добавьте инструкцию "сначала найди релевантные пункты, потом ответь". Это помогает модели не потеряться в длинном тексте.
Ограничения
⚠️ Нужен исходный документ: Метод работает только если у вас есть нужный текст. Для вопросов "в вакууме" (например, "как вообще работает маркетплейс") техника бесполезна.
⚠️ Ручной retrieval: Вы сами находите релевантный кусок документа. Если документ огромный (100+ страниц) — можно промахнуться с фрагментом или не найти нужное место. Автоматический RAG решает это поиском по векторам.
⚠️ Токен-лимиты: Большие документы могут не влезть в контекстное окно модели. Для GPT-4.1/O4-Mini/Claude Sonnet 4 это не проблема (200k-1M токенов), но для других моделей может быть критично.
⚠️ Не для креатива: Техника убивает творчество. Если нужен синтез идей, метафоры, новые углы зрения — строгое ограничение контекстом вредит. Используйте для фактических задач.
Как исследовали
Команда из University College London взяла 300 клинических гайдлайнов NICE (британские медицинские рекомендации), разбила на 10,195 кусков текста, создала векторную базу данных. Тестировали на 7,901 синтетическом запросе (сгенерировали через GPT-4.1-Nano: для каждого чанка — реалистичный вопрос медработника).
Retrieval: Сравнивали sparse (BM25, keyword-based) vs dense embeddings (Voyage-3-Large, семантический поиск) vs гибрид. Гибрид + reranker показал лучшие результаты: правильный чанк в топ-1 для 81% запросов, в топ-10 для 99.1%. MRR (Mean Reciprocal Rank) = 0.814 — в среднем правильный ответ на первой позиции.
Generation: Вручную составили 70 пар вопрос-ответ из гайдлайнов. Прогнали через RAG (топ-10 чанков + строгий промпт) и через baseline LLM без контекста. Использовали RAGAs framework для оценки: Context Precision (релевантность извлечённого), Faithfulness (соответствие ответа контексту), Response Relevancy.
Результаты удивили масштабом разрыва: O4-Mini без RAG дал Faithfulness 34.8% (каждый третий факт — выдумка), с RAG — 99.5%. GPT-4.1 без RAG — 59.6%, Claude Sonnet 4 — 58.9%. Даже медицинская модель Meditron3-8B, обученная на PubMed и гайдлайнах, показала только 43% без RAG.
Почему так: Модели не "тупые" — они смешивают реальные знания с вероятностными домыслами. Когда GPT знает тему, но не помнит конкретики (например, "какой препарат для детей до 5 лет"), она генерирует правдоподобный, но не обязательно верный ответ. RAG убирает эту вариативность — модель видит точный текст гайдлайна и просто переформулирует его.
Инсайт для практики: Даже топовые модели ненадёжны для фактических задач без явного контекста. Claude с web-search (88.3% Faithfulness) лучше "слепого" режима, но всё равно в 8 раз чаще ошибается чем RAG. Для медицины, юриспруденции, техдокументации — строгий контекст критичен.
Оригинал из исследования
Контекст: Исследователи использовали двухчастную структуру промпта (System + User) для управления LLM в режиме RAG. Это full production-ready промпт из их системы.
SYSTEM PROMPT:
You are a medical AI assistant tasked with answering clinical questions strictly based on the provided NICE clinical guidelines context. Follow the requirements below to ensure accurate, consistent, and professional responses.
# Response Rules
1. Context Restriction:
- Only use information given in the provided NICE guidelines context.
- Do not generate or speculate with information not explicitly found in the given context.
2. Answer Format:
- Provide a clear and concise response based solely on the context.
- When including a list, use standard markdown bullet points ('*' or '-').
- If a list follows introductory text, insert a line break before the first bullet point.
- Each bullet point must be on its own line.
3. Preserve Tables:
- If relevant markdown tables appear in the context, reproduce them in your answer.
- Maintain the original structure, formatting, and content of any included tables.
4. Links and URLs:
- Include any URLs or web links from the context directly in your response when relevant.
- Integrate links naturally within sentences, using markdown syntax for clickable text links.
- DO NOT generate or invent any URLs not explicitly present in the context.
5. Markdown Link Formatting:
- In responses, only the descriptive text in brackets should be visible and clickable (e.g., '[NICE...](https://...)').
- Readers should never see raw URLs in the text.
6. If No Relevant Information:
- If the context contains no relevant information, state clearly:
"No relevant NICE guidelines were found."
# Output Format
- All responses should be in plain text, using markdown formatting for lists and links.
- Do not use code blocks.
- Answers should be concise, accurate, and formatted according to the rules above.
REMINDER: Strictly adhere to all formatting and content rules above.
---
USER PROMPT:
{query_text}
Context from NICE clinical guidelines:
{context_text}
Ключевые элементы промпта:
- Context Restriction — явный запрет на домысливание
- "If No Relevant Information" — легальный выход, убирает давление генерировать всегда
- Markdown formatting — для читаемости (списки, таблицы, ссылки)
- "Do not use code blocks" — чтобы текст был сразу юзабельный, не в коде
Адаптации и экстраполяции
💡 Адаптация для проверки AI-генерированного контента:
Сценарий: ChatGPT написал вам статью про закон. Вы хотите проверить не напутала ли модель факты.
Вот статья, которую сгенерировала LLM:
"""
{текст_статьи_от_AI}
"""
Вот официальный текст закона из КонсультантПлюс:
"""
{текст_закона}
"""
Задача: проверь каждое утверждение в статье на соответствие закону.
Для каждого факта укажи:
- ✅ Верно (если точно соответствует закону)
- ⚠️ Неточно (если искажает формулировку)
- ❌ Ошибка (если противоречит закону)
- ❓ Не проверяемо (если в законе этого нет)
Отвечай строго по предоставленному тексту закона. Не используй своё знание права.
🔧 Техника: Multi-source RAG → кросс-проверка источников
Если у вас несколько документов по одной теме (например, федеральный закон + региональный регламент), можно проверить согласованность:
Источник 1 — Федеральный закон:
"""
{текст_ФЗ}
"""
Источник 2 — Региональный регламент:
"""
{текст_регламента}
"""
Вопрос: {ваш_вопрос}
Ответь по каждому источнику отдельно:
1. Что говорит ФЗ
2. Что говорит регламент
3. Есть ли противоречия между ними
Используй только тексты из источников, не добавляй своё толкование.
Эффект: Видите расхождения между документами. Полезно для юристов, комплаенса, аудита.
💡 Адаптация для работы с таблицами и числовыми данными:
Сценарий: У вас Excel-выгрузка продаж, нужно ответить на вопрос по цифрам.
Вот данные продаж за Q4 2024 (таблица в формате markdown):
{вставляете таблицу из Excel, скопированную как markdown или plain text}
Вопрос: Какой менеджер показал лучший результат по Москве в декабре?
Правила:
- Считай только по вставленной таблице
- Если данных нет (например, нет разбивки по городам) → скажи "в таблице этого нет"
- Покажи расчёт: какие строки использовал, как посчитал
Эффект: Модель работает как аналитик данных, но без галлюцинаций. Вы видите источник цифр (таблица в промпте) и логику расчёта.
Ресурсы
Grounding Large Language Models in Clinical Evidence: A Retrieval-Augmented Generation System for Querying UK NICE Clinical Guidelines — Matthew Lewis, Samuel Thio, Richard JB Dobson, Spiros Denaxas (University College London, King's College London, 2025)
RAGAs framework — [Es et al., 2024] Automated evaluation tool for RAG systems
Voyage AI embeddings — state-of-the-art dense embeddings для retrieval
NICE Guidelines — www.nice.org.uk официальный источник британских клинических рекомендаций
