TL;DR
VeriCite — метод генерации ответов с цитатами в RAG-системах, который разделяет создание контента и проверку источников на три отдельных этапа. Вместо того чтобы просить модель одновременно отвечать и правильно цитировать, метод сначала генерирует черновик, потом проверяет каждое утверждение через NLI-модель (Natural Language Inference — определяет, следует ли утверждение из текста), извлекает подтверждённые доказательства из каждого документа, и только потом собирает финальный ответ.
Главная находка: Модели плохо справляются с цитированием когда нужно одновременно генерировать контент И отслеживать источники. Citation F1 (точность цитирования) у baseline-методов колеблется от 38% до 70%, при этом модели часто ссылаются на документы которые не поддерживают утверждение, или пропускают нужные цитаты. Проблема в когнитивной перегрузке — LLM пытается удержать в "внимании" и длинный контекст документов, и логику ответа, и правильность цитат одновременно.
Суть метода: VeriCite использует предварительную разметку — сначала автоматически проверяет каждое утверждение NLI-моделью ("поддерживается ли это документом?"), отбрасывает непроверенное, маркирует проверенное цитатой, и только потом даёт LLM задачу "собрать из этих проверенных кусков связный ответ". Три этапа: (1) первичный ответ со всеми документами + проверка утверждений, (2) извлечение полезных фактов из каждого документа отдельно + проверка, (3) объединение проверенного материала в финальный ответ без генерации нового контента.
Схема метода
ЭТАП 1: Первичный ответ
Вход: Вопрос + все документы (5 штук)
LLM генерирует: Ответ с цитатами
NLI проверяет: Каждое утверждение → поддерживается документами?
Выход: Только проверенные утверждения
ЭТАП 2: Извлечение доказательств (для каждого документа отдельно)
LLM оценивает: Полезен ли документ для ответа?
Если да → LLM извлекает: Ключевые факты из документа
NLI проверяет: Факты следуют из документа?
Выход: Проверенные факты с цитатой [N]
ЭТАП 3: Финальная сборка
Вход: Проверенные утверждения (этап 1) + проверенные факты (этап 2)
LLM переорганизует: Порядок, убирает дубли, объединяет цитаты
Выход: Связный ответ с надёжными цитатами
Этапы выполняются последовательными запросами. NLI-модель работает между запросами как валидатор.
Пример применения
⚠️ Ограничение метода: Работает для фактоидных вопросов с чёткими утверждениями. Хуже на субъективных темах и задачах требующих синтез информации из нескольких документов одновременно (multi-hop reasoning).
Задача: Готовишь аналитическую записку для руководства — нужно узнать, когда запустили Яндекс Маркет и какие там основные категории товаров. Загрузил 5 статей про историю Яндекса, но там много постороннего про другие сервисы, даты запуска разнятся, хочешь чтобы каждый факт был подкреплён конкретным источником.
Промпт (Этап 1 — первичный ответ):
Вопрос: Когда запустили Яндекс Маркет и какие основные категории товаров там представлены?
Документы:
[Документ 1] История Яндекса: ... Яндекс Маркет запущен в 2000 году ...
[Документ 2] Обзор e-commerce: ... На Маркете представлены электроника, одежда ...
[Документ 3] Интервью с CEO: ... После запуска в 2001 сервис ...
[Документ 4] Пресс-релиз: ... Маркет предлагает бытовую технику, книги, игрушки ...
[Документ 5] Статья про конкурентов: ... Ozon обгоняет Маркет ...
Инструкция: Ответь на вопрос. Каждое утверждение помечай цитатой [N] где N — номер документа.
После этого запроса:
- Модель генерирует: "Яндекс Маркет запущен в 2000 году [1]. Основные категории: электроника [2], одежда [2], бытовая техника [4], книги [4], игрушки [4]."
- NLI-модель проверяет каждое утверждение с документом
- Обнаруживает противоречие: документ 1 говорит "2000", документ 3 — "2001"
- Утверждение про 2000 год проходит проверку с документом 1
- Утверждение про 2001 отбрасывается (не прошло NLI)
Промпт (Этап 2 — для каждого документа):
Документ 2: "Обзор e-commerce: На Маркете представлены электроника, одежда, автотовары, косметика, продукты питания"
Вопрос: Когда запустили Яндекс Маркет и какие основные категории товаров там представлены?
Инструкция: Полезен ли этот документ для ответа? Если да — выпиши ключевые факты.
После этого:
- Модель: "Да, полезен. Факты: На Маркете есть электроника, одежда, автотовары, косметика, продукты"
- NLI проверяет: "электроника" следует из документа? Да → оставляем с [2]
- NLI проверяет: "автотовары" следует из документа? Да → оставляем с [2]
- И так для каждого документа
Промпт (Этап 3 — финальная сборка):
Вопрос: Когда запустили Яндекс Маркет и какие основные категории товаров там представлены?
Проверенные утверждения:
- Яндекс Маркет запущен в 2000 году [1]
- Основные категории: электроника [2], одежда [2]
Дополнительные факты:
- Бытовая техника [4]
- Книги [4]
- Игрушки [4]
- Автотовары [2]
- Косметика [2]
- Продукты питания [2]
Инструкция: Объедини в связный ответ. Сохрани все цитаты. Убери повторы. Не добавляй новую информацию.
Результат:
Модель создаёт финальный текст собирая проверенные куски, объединяя цитаты для одинаковых категорий (электроника, одежда, автотовары, косметика, продукты [2]; бытовая техника, книги, игрушки [4]). Ответ содержит только факты которые прошли двойную проверку: сначала LLM извлекла, потом NLI подтвердила. Если в документе 3 была дата 2001 — она не попадёт в финальный ответ, потому что противоречит документу 1 и была отсеяна на этапе 1.
Почему это работает
Слабость LLM: Модели плохо справляются с многозадачностью — одновременно держать в "голове" длинный контекст (5 документов по 300+ слов), генерировать связный ответ, И корректно цитировать источники. В результате появляются галлюцинации в цитатах — модель ставит [3] там где должна быть [1], или пропускает нужную цитату. Citation Precision (точность цитат) у baseline около 66-75% — каждая третья-четвёртая цитата неправильная или отсутствует.
Сильная сторона LLM: Модели отлично справляются с однозадачными запросами — когда нужно сделать что-то одно: "поддерживается ли это утверждение документом?", "какие факты из этого документа полезны?", "собери из этих кусков связный текст". Каждая задача проще, контекст короче, внимание сфокусировано.
Как метод использует это: VeriCite декомпозирует сложную задачу на простые шаги. Вместо "ответь + процитируй правильно" → "просто ответь" (этап 1), потом "просто извлеки факты" (этап 2 для каждого документа), потом "просто собери из готового" (этап 3). NLI-модель выполняет проверку между шагами — она специально обучена определять entailment (следование), это её единственная задача, поэтому она справляется лучше чем LLM в multitasking режиме.
Дополнительный эффект: Предварительная разметка цитат ([2], [4]) снимает нагрузку с финального этапа. LLM на этапе 3 не придумывает цитаты заново — она просто переиспользует уже провалидированные маркеры. Это как дать редактору готовые сноски вместо того чтобы он сам искал источники по тексту.
Шаблон промпта
⚠️ Важно: Полноценная реализация VeriCite требует NLI-модель (например TRUE) для автоматической верификации. Ниже — упрощённая версия для чата, где LLM сама играет роль верификатора. Точность ниже чем у специализированной NLI, но метод применим.
ЭТАП 1: Первичный ответ
Вопрос: {твой_вопрос}
Документы:
[1] {текст_документа_1}
[2] {текст_документа_2}
[3] {текст_документа_3}
[4] {текст_документа_4}
[5] {текст_документа_5}
Инструкция: Ответь на вопрос на основе документов. Каждое утверждение помечай цитатой [N]. Разбей ответ на отдельные утверждения (по одному на строку).
---
ЭТАП 1.5: Проверка утверждений (для каждого утверждения отдельно)
Утверждение: {утверждение_из_этапа_1}
Документ(ы): {текст_документов_которые_процитированы}
Поддерживается ли утверждение документом? Ответь только "Да" или "Нет" с кратким объяснением (1 предложение).
Если "Нет" — отбрось утверждение. Если "Да" — сохрани для этапа 3.
---
ЭТАП 2: Извлечение доказательств (для каждого документа отдельно)
Документ [{номер}]: {текст_документа}
Вопрос: {твой_вопрос}
Полезен ли этот документ для ответа на вопрос? Если да — выпиши ключевые факты которые помогают ответить. Каждый факт на отдельной строке с цитатой [{номер}].
---
ЭТАП 2.5: Проверка фактов (для каждого факта отдельно)
Факт: {факт_из_этапа_2}
Документ: {текст_документа}
Следует ли этот факт из документа? Ответь только "Да" или "Нет".
Если "Нет" — отбрось факт. Если "Да" — сохрани с цитатой для этапа 3.
---
ЭТАП 3: Финальная сборка
Вопрос: {твой_вопрос}
Проверенные утверждения из этапа 1:
{список_проверенных_утверждений_с_цитатами}
Проверенные факты из этапа 2:
{список_проверенных_фактов_с_цитатами}
Инструкция: Объедини в связный ответ. Правила:
1. Сохрани ВСЕ цитаты в формате [N]
2. Убери дословные повторы
3. Объедини цитаты для идентичных фактов: [2][4] → [2, 4]
4. НЕ добавляй новую информацию
5. Переорганизуй порядок для связности
Что подставлять:
{твой_вопрос}— фактоидный вопрос с чёткими критериями (когда, где, какие, кто){текст_документа_N}— релевантные документы из поиска- Этапы 1.5 и 2.5 — по одному запросу для КАЖДОГО утверждения/факта
Оптимизация: Если утверждений много (10+) — можно проверять батчами по 3-5 штук за раз.
🚀 Быстрый старт — вставь в чат:
Вот метод VeriCite для генерации ответов с проверенными цитатами. Проведи меня через все этапы для моей задачи. Задавай вопросы чтобы заполнить шаблон, потом выполни каждый этап.
Моя задача: {опиши задачу}
[вставить шаблон выше]
LLM спросит какой вопрос, какие документы, потом проведёт через этапы 1 → 1.5 → 2 → 2.5 → 3 автоматически. Модель возьмёт структуру multi-pass верификации из шаблона и адаптирует под твою задачу — ты получишь ответ где каждая цитата проверена дважды.
Ограничения
⚠️ Фактоидные вопросы: Метод заточен под вопросы с проверяемыми фактами (даты, названия, числа, списки). На субъективных темах ("почему люди любят кошек?") или креативных задачах ("напиши эссе о свободе") эффект слабее. На датасете ELI5 (нефактоидные вопросы "объясни как 5-летнему") answer correctness ниже baseline на 1-3%.
⚠️ Multi-hop reasoning: Для вопросов требующих синтез информации из нескольких документов одновременно ("Где родился автор книги которую рекомендовал президент?") метод может пропустить связи. На HotpotQA и MuSiQue для моделей Llama3, Gemma-2, GLM-4 correctness на 1-4% ниже лучшего baseline. Причина: этап 2 обрабатывает документы изолированно, cross-document связи теряются.
⚠️ Трудоёмкость без автоматизации: Упрощённая версия для чата требует 10+ запросов для 5 документов (1 первичный ответ + проверка каждого утверждения + 5 извлечений фактов + проверка каждого факта + финальная сборка). Полноценная автоматизация требует код + NLI-модель.
⚠️ LLM как верификатор: В упрощённой версии LLM проверяет сама себя. NLI-модель точнее потому что специально обучена на entailment задачах. Согласно ablation study, замена NLI на LLM-верификатор снижает Citation F1 с 80% до 73%.
Как исследовали
Команда проверила VeriCite на 5 open-source моделях (Llama3-8B, Gemma-2-9B, GLM-4-9B, Qwen2.5-7B/14B) и 4 датасетах разных типов. Идея проста: взять задачи где ответ нужно подкрепить цитатами, и посмотреть справится ли трёхэтапная схема лучше чем одноэтапная генерация.
Выбрали 2 long-form QA датасета (ASQA — неоднозначные фактоидные вопросы, ELI5 — "объясни как ребёнку") и 2 multi-hop QA (HotpotQA и MuSiQue — нужно связать факты из разных документов). Каждый датасет по 500-1000 примеров. Для каждого вопроса загружали top-5 документов из поиска. Сравнивали с 4 baseline: Vanilla (просто скормить всё модели), Summary (сжать документы), Snippet (extractive сжатие), APO (fine-tuned модель с preference learning).
Измеряли 2 метрики: answer correctness (EM Recall для фактоидных, Claim Recall для ELI5) и citation quality (Citation F1 — насколько цитаты точны и полны). Для верификации использовали TRUE — специализированную NLI-модель обученную определять entailment.
Что удивило: На фактоидных датасетах (ASQA, HotpotQA, MuSiQue) VeriCite поднял Citation F1 в среднем на +12% по сравнению с лучшим baseline (с 70% до 82% на ASQA для Llama3). Но на нефактоидном ELI5 answer correctness упал на 1-3% — метод предварительной верификации отсеивает утверждения которые нельзя однозначно подтвердить одним документом. Зато Citation F1 на ELI5 вырос на +11.41% в среднем — даже если ответ чуть менее полный, то цитаты максимально надёжные.
Инсайт для практики: Разделение генерации и верификации работает когда есть чёткие критерии проверки ("следует ли утверждение из текста?"). Для субъективного контента где грань между "поддерживается" и "связано" размыта — эффект слабее. Ablation study показал: убери NLI-верификацию → Citation F1 падает с 80% до 69%, но correctness не меняется. Вывод: верификация критична для цитат, но не для полноты ответа.
Почему именно так: Исследователи сравнивали разные верификаторы: NLI-модель vs сама LLM vs DeepSeek-R1 (SOTA). LLM-верификатор показал Citation F1 = 73% против 80% у NLI. DeepSeek-R1 дал 79.22% — почти как NLI, но в разы дороже в inference. Выбор NLI — оптимум цена/качество для production.
Оригинал из исследования
Контекст: Это промпты которые использовали исследователи для каждого из трёх этапов VeriCite. Промпты на английском, содержат few-shot примеры и специфичные инструкции.
ЭТАП 1: Initial Answer Generation
Question: {question}
Documents:
[1] (Title: {title_1}) {passage_1}
[2] (Title: {title_2}) {passage_2}
...
[5] (Title: {title_5}) {passage_5}
Instruction: Answer the question based on the given documents. Each statement in your answer should include an in-line citation in the format [doc_id]. Use multiple citations if a statement is supported by multiple documents.
Example:
Question: Who won the 2020 Nobel Prize in Physics?
Documents:
[1] Roger Penrose won the 2020 Nobel Prize in Physics.
[2] Andrea Ghez also won the prize that year.
Answer: Roger Penrose won the 2020 Nobel Prize in Physics [1]. Andrea Ghez also won the prize that year [2].
Answer:
ЭТАП 2: Supporting Evidence Check
Question: {question}
Document: [doc_id] {passage}
Instruction: Is this document useful for answering the question? Respond with "Yes" or "No" only.
Answer:
ЭТАП 2: Supporting Evidence Extraction (если прошло проверку)
Question: {question}
Document: [doc_id] {passage}
Instruction: Extract useful information from this document to answer the question. Format each piece of information as a separate sentence.
Extracted information:
ЭТАП 3: Final Answer Refinement
Question: {question}
Initial answer statements:
{verified_statements_from_stage_1}
Additional evidence:
{verified_evidence_from_stage_2}
Instruction: Combine the initial answer and additional evidence into a coherent final answer. Requirements:
1. Keep all citations in the format [doc_id]
2. Remove redundant content
3. Reorder statements for better flow
4. Merge citations where appropriate (e.g., [1][2] → [1, 2])
5. Do NOT add new information beyond what is provided
Final answer:
Адаптации и экстраполяции
💡 Адаптация для бизнес-анализа: Анализ конкурентов или рынка
Когда готовишь отчёт о рынке или конкурентах, нужно не просто собрать факты, но и подтвердить каждый источником. VeriCite можно адаптировать:
Задача: Анализ российского рынка доставки еды — кто лидирует, какие тренды, какие проблемы.
Этап 1 — широкий обзор:
Вопрос: Какие главные тренды на рынке доставки еды в России в 2024-2025?
Документы: [новости про Яндекс Еду, Деливери, СберМаркет, статьи экспертов, отчёты]
Инструкция: Ответь на основе документов. Каждый тренд отмечай цитатой. Разбей на отдельные утверждения.
Этап 2 — извлечение конкретики: Для каждого документа отдельно: "Какие конкретные цифры, факты, кейсы из этого источника подтверждают тренды?"
Этап 3 — сборка отчёта: Объедини проверенные утверждения в структурированный отчёт: Лидеры рынка [1,3], Тренды [2,4,5], Проблемы [1,2], Прогнозы [5].
Польза: Каждая цифра и тренд в отчёте привязаны к конкретному источнику. Руководство видит откуда данные, может проверить, доверие к выводам выше.
🔧 Техника: Батчевая проверка → ускорение при большом объёме
Если утверждений/фактов много (20+) — проверять каждое отдельным запросом долго. Адаптация:
Вместо:
ЭТАП 1.5: Проверка утверждения 1
Поддерживается ли "Маркет запущен в 2000" документом 1?
ЭТАП 1.5: Проверка утверждения 2
Поддерживается ли "Категории: электроника" документом 2?
... (20 запросов)
Делай:
ЭТАП 1.5: Батчевая проверка
Документ 1: {текст}
Утверждения для проверки:
1. Маркет запущен в 2000
2. Основатель — Яндекс
3. Изначально был сравнение цен
Для каждого утверждения ответь: Да/Нет (следует ли из документа?)
Формат ответа:
1. Да
2. Да
3. Нет
Эффект: Сокращение с 20 запросов до 3-5 (батчи по документам). Точность чуть ниже чем поштучная проверка (модель может ошибиться в одном из 5), но скорость в 4-6 раз выше.
🔧 Техника: Строгость верификации → контроль качества vs полноты
В оригинальном VeriCite NLI-модель строгая — если есть малейшее сомнение, утверждение отбрасывается. Это даёт высокую точность цитат, но может отсеять полезное.
Адаптация для баланса:
Вместо бинарного "Да/Нет":
Поддерживается ли утверждение документом? Ответь "Да" или "Нет".
Используй шкалу:
Оцени насколько утверждение поддерживается документом:
1 — полностью следует дословно
2 — следует по смыслу, но другими словами
3 — частично связано, нужна интерпретация
4 — не следует, противоречит или нерелевантно
Оценка:
Применение:
- Для строгих отчётов (юридические, медицинские) — оставляй только 1 и 2
- Для обзоров и аналитики — берёшь 1, 2, 3 (шире охват, но указываешь степень уверенности в цитате)
Эффект: Гибкость между точностью (строгий фильтр) и полнотой (мягкий фильтр). Читатель отчёта видит какие цитаты "железобетонные" [1], а какие требуют интерпретации [2, 3*].
Ресурсы
- VeriCite: Towards Reliable Citations in Retrieval-Augmented Generation via Rigorous Verification — Haosheng Qian, Yixing Fan, Jiafeng Guo, Ruqing Zhang, Qi Chen, Dawei Yin, Xueqi Cheng
- State Key Laboratory of AI Safety, ICT, Chinese Academy of Sciences; University of Chinese Academy of Sciences; Meituan Inc.; Baidu Inc.
- Код на GitHub
- TRUE NLI model — [Honovich et al., 2022] для верификации entailment
- Presented at SIGIR-AP 2025 (Xi'an, China)
