alterna ai
ALTERNA AI / ГЛАВА 20 · 04

20.4 Откуда взято каждое сведение

На предыдущей странице: запускаем изученную цепочку.

Отделим документ, результат инструмента и выбор модели. Подпись источника помогает проверить путь данных.

Совместимость словаря, параметров и runtime проверяется до запуска. Происхождение ответа и запреты действий входят в проект наравне с прямым расчётом. Финал соединяет знакомое.

Citation связывает claim с разрешённым фрагментом

Grounded response удобно рассматривать как набор проверяемых claims, а не как один неделимый абзац. Для каждого фактического claim система хранит source ID и, по возможности, точный span/version. Citation coverage измеряет долю claims с допустимой ссылкой, но не доказывает entailment: источник может быть указан рядом и не подтверждать формулировку. Claims без источника остаются видимыми, а не исчезают из denominator.

До расчёта coverage source ID проверяется по множеству фрагментов, реально переданных generator с учётом access control. Ссылка на существующий, но не выданный документ считается недопустимой. Пустой список claims требует отдельной политики: в учебном контракте coverage для него равно 1, поскольку нет непокрытых утверждений, но dashboard одновременно показывает count 0, чтобы значение не выглядело как содержательный успех.

Продолжение. Claim map подсвечивает предложение, source version, исходный span и результат отдельной проверки support. Retrieval score не подменяет groundedness: первый отвечает за ранжирование кандидата, второй за отношение evidence к конкретному утверждению. При конфликте источников ответ должен показать конфликт или отказаться от категорического вывода согласно policy.

Граница применимости. Автоматическое выделение claims само допускает ошибки, а lexical overlap легко пропускает перефразирование и отрицание. Citation coverage можно искусственно повысить, добавляя нерелевантные ссылки. Grounding по документам не гарантирует истинность самих документов; freshness, авторитетность, права доступа и prompt injection проверяются на других слоях.

claims_20d = [('Модель имеет две версии', 'd1'), ('Пакет содержит manifest', 'd2'), ('Latency всегда мала', None)]
allowed_sources_20d = {'d1', 'd2'}
supported_20d = [source_20d in allowed_sources_20d for _claim_20d, source_20d in claims_20d]
coverage_20d = sum(supported_20d) / len(claims_20d) if claims_20d else 1.0
empty_claims_20d = []
empty_coverage_20d = sum(empty_claims_20d) / len(empty_claims_20d) if empty_claims_20d else 1.0
assert supported_20d == [True, True, False]
assert abs(coverage_20d - 2 / 3) < 1e-12
assert empty_coverage_20d == 1.0

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

Provenance позволяет отличить quote, model proposal, tool result и template.

Защищаем результат проверками. Как этот вопрос продолжает полученный результат?

Python-примеры главы 20 Академическая база →