Ссылку на источник считают удобством для пользователя. На деле это инженерный механизм, и он решает три задачи сразу.
Для пользователя — возможность проверить. Ответ без источника приходится принимать на веру, а в регулируемых сферах это неприемлемо в принципе.
Для вас — диагностируемость. При жалобе на неверный ответ видно, из какого фрагмента он собран, и понятно, чинить материалы или поиск.
Для системы — сдерживающий механизм. Требование сослаться на переданный источник заметно снижает склонность модели дописывать от себя: утверждение, которое не подкрепить ссылкой, она формулирует реже.
Третий эффект — главный. Цитирование не столько показывает происхождение ответа, сколько меняет сам ответ в лучшую сторону.
Три уровня привязки
Различаются трудоёмкостью и пользой.
Уровень 1: список документов. Под ответом перечислены использованные документы. Просто, почти всегда достижимо, но малополезно: если документ на сорок страниц, проверка не облегчается.
Уровень 2: ссылка на фрагмент. Указан конкретный раздел или пункт, откуда взяты сведения, со ссылкой на место в документе. Рабочий вариант для большинства систем.
Уровень 3: привязка к утверждению. Каждое утверждение ответа помечено источником, из которого следует. Самый полезный и самый трудоёмкий уровень: позволяет увидеть, что первое предложение подтверждено, а второе модель добавила от себя.
Разумный ориентир — второй уровень как основной, третий в темах с высокой ценой ошибки.
Как это делают
Пометки на фрагментах. Каждому переданному фрагменту присваивается номер, и модели предписано ставить его рядом с утверждением. Просто и работает.
Слабое место: модель может поставить номер несуществующего фрагмента или приписать утверждение не к тому. Поэтому обязателен следующий пункт.
Проверка ссылок после генерации. Ссылки из ответа сверяются с тем, что реально передавалось. Несуществующие удаляются или ответ переформулируется. Это дешёвая программная проверка, а не обращение к модели, и она обязательна: непроверенная ссылка хуже отсутствующей, потому что создаёт ложное ощущение достоверности.
Сверка утверждений с источником. Более строгий вариант: отдельным проходом проверяется, следует ли каждое утверждение из указанного фрагмента. Стоит дополнительного обращения к модели, применяется выборочно или в ответственных темах.
Точная привязка внутри документа. Ссылка ведёт не на документ, а на место: страницу, пункт, абзац. Требует, чтобы координаты сохранялись при извлечении текста и нарезке — задним числом это не восстановить.
Что должно быть в ссылке
- название документа — понятное человеку, а не имя файла;
- раздел или пункт — «п. 4.2», «Раздел 3. Условия доставки»;
- дата редакции — критично там, где документы обновляются;
- ссылка для перехода, если документ доступен пользователю;
- сама цитата — короткая выдержка, на которой основан ответ.
Последнее недооценивают. Выдержка позволяет проверить ответ, не открывая документ, и резко сокращает время разбора жалоб.
Осторожно с правами. Название документа само по себе может быть закрытой информацией. Ссылки формируются из того же отфильтрованного набора, что и контекст, — «Разграничение доступа в RAG».
Отказ — часть той же механики
Цитирование и отказ от ответа — две стороны одного правила: отвечать только по переданным источникам.
Если подходящих фрагментов не нашлось или их оценка ниже порога, правильное поведение — сказать, что сведений нет, и предложить человека. Порог удобно брать по оценке реранкера.
Система, обязанная отвечать всегда, будет заполнять пробелы — «Почему нейросеть выдумывает». Требование ссылки без возможности отказаться приводит к худшему из исходов: модель придумывает ответ и подкрепляет его ссылкой на фрагмент, где этого нет.
Разбор: ссылки, которые вели не туда
Задача. Система для юридического отдела: ответы по внутренним положениям и типовым договорам. Требование заказчика — обязательная ссылка на пункт.
Симптом. Юристы стали жаловаться не на ответы, а на ссылки: ответ верный, а указанный пункт про другое. Иногда пункт вообще не существовал.
Что показал разбор.
Модели передавались фрагменты с пометками вида «[Источник 3]», и предписывалось ссылаться. Проверки ссылок после генерации не было.
Обнаружилось три разных сбоя.
Первый: модель ставила номера фрагментов, которых в контексте не было, — например, «[Источник 7]», когда передавалось пять. Редко, но регулярно.
Второй, более частый: ответ собирался из двух фрагментов, а ссылка ставилась одна — на тот, что упомянут последним. Формально ссылка существовала, фактически подтверждала половину ответа.
Третий, самый неприятный: номера пунктов модель брала из текста фрагмента, а не из его метаданных. Если во фрагменте упоминалось «в соответствии с п. 7.3», модель ссылалась на 7.3, хотя сам фрагмент был из пункта 5.1. Ссылка выглядела правдоподобно и вела не туда.
Что сделали.
Добавили программную проверку: ссылки из ответа сверяются со списком переданных фрагментов, несуществующие удаляются, ответ помечается как неполный.
Разделили роли: номер пункта берётся из метаданных фрагмента и подставляется системой, а не пишется моделью. Модель указывает только, каким фрагментом подтверждается утверждение; человекочитаемую ссылку формирует код.
Перешли на привязку по предложениям: каждое утверждение получает свою ссылку, а не одна на весь ответ.
Добавили короткую цитату под ответом — ту самую выдержку, на которой утверждение основано.
Что изменилось. Жалобы на ссылки прекратились. Побочный и более ценный эффект: юристы начали замечать случаи, когда ответ верный, но подтверждается слабо, — и это стало источником доработки корпуса. Раньше такие случаи были невидимы.
Вывод. Не давайте модели формировать ссылку. Пусть она указывает, чем подтверждается утверждение, а ссылку собирает код по метаданным фрагмента. Всё, что модель пишет свободным текстом, она может написать неверно.
Как проверять качество цитирования
Отдельная метрика, а не часть общего качества ответов:
- доля ответов со ссылками — должна быть близка к полной, кроме отказов;
- доля существующих ссылок — сверка с переданными фрагментами, программно;
- доля утверждений, подтверждённых источником — обоснованность, «Метрики RAG»;
- доля ответов без источника — прямой признак, что модель ответила от себя;
- корректность отказа — отказывается ли система, когда подходящих фрагментов нет.
Первые две проверяются автоматически и стоят копейки. Ставить их надо сразу, а не когда появятся жалобы.
Частые вопросы
Зачем нужны ссылки на источники в RAG?
По трём причинам: пользователь может проверить ответ, вы можете разобрать жалобу, а сама модель реже дописывает от себя, когда обязана подкрепить утверждение источником. Третий эффект самый ценный — цитирование не просто показывает происхождение ответа, а улучшает сам ответ.
Может ли модель выдумать ссылку?
Может, и делает это тремя способами: ставит номер несуществующего фрагмента, ссылается на один фрагмент, когда ответ собран из двух, или берёт номер пункта из текста фрагмента вместо его метаданных. Поэтому ссылки надо проверять программно, сверяя с тем, что реально передавалось.
Как сделать ссылку на конкретный пункт документа?
Сохранять координаты при извлечении текста и нарезке: страницу, раздел, номер пункта. Задним числом это не восстанавливается, поэтому закладывать нужно на этапе подготовки корпуса. Саму ссылку должен формировать код по метаданным фрагмента, а не модель свободным текстом.
Что делать, если подходящих источников нет?
Отказываться от ответа и предлагать связаться с человеком. Требование цитировать без возможности отказаться приводит к худшему результату: модель придумывает ответ и подкрепляет его ссылкой на фрагмент, где этого нет. Порог отсечения удобно брать по оценке реранкера.
Нужно ли показывать цитату, а не только ссылку?
Желательно. Короткая выдержка позволяет проверить ответ, не открывая документ, и резко сокращает время разбора спорных случаев. В регулируемых сферах это обычно обязательное требование.
Как проверить, что ссылки правильные?
Двумя проверками: программной — существуют ли указанные фрагменты среди переданных, и содержательной — следует ли утверждение из указанного источника. Первая почти бесплатна и должна работать всегда, вторая требует обращения к модели и применяется выборочно.
Что дальше
Точность ссылок упирается в подготовку корпуса — «Чанкинг документов» и «OCR и PDF». Порог отказа удобно брать от реранкера. Как измерять обоснованность ответов — «Метрики RAG».
Проектирование систем с проверяемыми ответами, включая привязку утверждений к источникам, — часть работы по разработке и внедрению ИИ.