Модуль md.1 · Урок 2
RAG и опора на источники: заставить агента цитировать
Чему вы научитесь
- Понимать идею RAG: ответ строится из найденных документов, а не из «памяти» модели
- Проектировать промпт, который требует цитат и запрещает додумывать
- Отличать настоящее заземление от его имитации
- Видеть, где RAG всё ещё может ошибиться
Идея RAG в одном абзаце
Retrieval-augmented generation меняет порядок работы агента. Вместо «модель отвечает из головы» агент сначала ищет релевантные фрагменты в проверенной базе (гайдлайны, инструкции к препаратам, статьи), а потом генерирует ответ, опираясь только на найденное и указывая, откуда взят каждый тезис. Это прямой ответ на проблему галлюцинаций из прошлого урока.
flowchart LR
Q["Вопрос"] --> E["Эмбеддинг\nвопроса"]
E --> S["Поиск в базе\n(векторный)"]
S --> C["Найденные фрагменты\nс источниками"]
C --> G["Генерация ответа\nстрого по фрагментам"]
G --> A["Ответ + цитаты"]
style S fill:#eef2ff,stroke:#4400FF
style A fill:#ecfdf5,stroke:#059669
Как требовать цитаты в промпте
Само по себе наличие найденных фрагментов не гарантирует, что модель ими воспользуется. Нужно явно потребовать опору на источники и запретить додумывание.
RAG_PROMPT = """Ответь на вопрос, используя ТОЛЬКО приведённые ниже фрагменты.
Правила:
1. Каждое утверждение сопровождай номером фрагмента в квадратных скобках, например [2].
2. Если во фрагментах нет ответа, честно напиши "в источниках нет ответа".
3. Не добавляй фактов, которых нет во фрагментах.
Фрагменты:
{context}
Вопрос: {question}
"""
Обратите внимание на правило 2. Возможность сказать «в источниках нет ответа» важнее, чем красивый ответ: она превращает молчание из бага в фичу.
Настоящее заземление против имитации
RAG не магия. Бывает, что цитаты есть, а заземления нет. Сравним.
| Признак | Настоящее заземление | Имитация |
|---|---|---|
| Источник цитаты | Реальный фрагмент из базы | Выдуман или нерелевантен |
| Покрытие | Каждый тезис привязан к фрагменту | Часть утверждений «висит» без ссылки |
| Поведение при пустом поиске | Признаёт отсутствие ответа | Всё равно отвечает уверенно |
| Проверяемость | Ссылку можно открыть и сверить | Ссылку открыть нельзя |
Практическое правило: если хотя бы один тезис нельзя сопоставить с конкретным фрагментом — ответ не заземлён, как бы убедительно он ни выглядел.
Как проверять заземление
Проверьте номера ссылок. Программно убедитесь, что каждый номер в ответе указывает на реально переданный фрагмент.
Найдите утверждения без ссылок. Любой тезис без номера — кандидат на галлюцинацию, его нужно вычитать вручную.
Сверьте смысл. Откройте фрагмент и убедитесь, что он действительно подтверждает утверждение, а не просто упомянут рядом.
Что дальше
Мы умеем заземлять ответ. Но как измерить, насколько агент хорош? Следующий урок про бенчмарки: md.1/03.