Проверка утверждения
Принимает одно утверждение, сам находит источники, читает их и возвращает вердикт с дословными цитатами: кто подтверждает, кто опровергает, чего проверка не покрывает. Каждая цитата сверена с текстом страницы - не найденная в тексте выбрасывается вместе со своим доводом.
https://srezai.ru/api/v1/verifyКогда использовать
- Перед тем как выдать пользователю дату, число, цену, статус - всё, что модель может «вспомнить» неверно.
- Проверить утверждение, пришедшее извне: из письма, тикета, чужого текста, ответа другой модели.
- Понять, есть ли по вопросу консенсус: расхождение источников - самостоятельный, полезный ответ.
- Убедиться, что факт не устарел, - с
timeRangeпроверка пойдёт только по свежим страницам.
Не для этого: развёрнутый разбор темы с выводами - это DeepResearch; нужны конкретные значения с известной страницы - извлечение по схеме; нужен просто список ссылок - веб-поиск. Проверка отвечает на закрытый вопрос «так это или нет», а не на открытый «расскажи про».
Пример запроса
curl -X POST https://srezai.ru/api/v1/verify \
-H "Content-Type: application/json" \
-H "Authorization: Bearer srz_live_ВАШ_КЛЮЧ" \
-d '{
"claim": "GPT-4 вышла в марте 2023 года",
"maxSources": 4
}'Параметры тела
claimstringобязательныйУтверждение одной фразой, до 500 символов. Формулируйте проверяемо: «выручка X за 2024 год - 12 млрд ₽» проверяется, «X - хорошая компания» нет. Длинный текст обрезается до 500 символов.
maxSourcesnumberнеобязательныйСколько независимых источников читать: от 2 до 5 (4 по умолчанию). Больше источников - выше шанс поймать расхождение, но и дольше. Цена от их числа не зависит.
timeRangestringнеобязательныйСвежесть источников: "" (без ограничения, по умолчанию), day, week, month, year. Для фактов, которые могли измениться - цены, курсы, должности, статусы.
languagestringнеобязательныйЯзык поиска источников: auto (по умолчанию), ru, en.
querystringнеобязательныйОтдельный поисковый запрос, если утверждение как есть ищется плохо (длинное, с местоимениями, с внутренними названиями). По умолчанию ищется текст claim. До 300 символов.
Батч-режима здесь нет намеренно, в отличие от чтения и извлечения: одна проверка - это уже поиск, до пяти чтений и вызов модели. Несколько утверждений - несколько запросов, их можно вести параллельно с оглядкой на burst-лимит.
Как устроена проверка
- Поиск. По тексту утверждения (или по
query) - до 20 результатов. - Отбор. Берём по одной ссылке с домена: три статьи на одном сайте - это один голос, а не три, и бюджет чтения они тратят полностью.
- Чтение. Выбранные страницы читаются параллельно, по 6000 символов с каждой, с потолком 18 секунд на страницу. К отобранным адресам добавляется небольшой запас кандидатов: если сайт не открылся, слот не теряется - вместо него читается следующий по классу источник из выдачи, и только когда запас исчерпан, неоткрывшийся адрес получает повторную попытку с более щедрым сроком. Считать вердикт по случайно уцелевшей половине выдачи - не проверка. Что именно не удалось прочитать и почему, видно в
meta.sourcesUnreadиmeta.unreadSources, это попадает вcaveats, а при вердиктеunverified- ещё и в саму строку вердикта: неполная проверка и «источники прочитаны и молчат» - разные факты. - Вердикт. Модель получает только тексты источников и обязана опираться исключительно на них: если данных в текстах нет, вердикт -
unverified, а не догадка по общим знаниям. - Сверка цитат. Каждая цитата ищется в тексте той страницы, на которую сослалась модель. Не найденная выбрасывается вместе с доводом, счётчик уходит в
meta.quotesRejected, а уверенность понижается пропорционально потерям. Затем проверяется предмет: если в тексте страницы нет ни имени, ни домена из утверждения, цитата отбрасывается как не относящаяся к делу (meta.quotesOffSubject) - страница про похожую, но чужую организацию не подтверждает и не опровергает утверждение, как бы ни была похожа фраза. - Согласование. Вердикт приводится в соответствие с выжившими цитатами - см. Вердикт и уверенность.
Ответ
{
"claim": "GPT-4 вышла в марте 2023 года",
"verdict": "supported",
"confidence": 0.86,
"agreeing": 3,
"disagreeing": 0,
"evidence": [
{
"url": "https://en.wikipedia.org/wiki/GPT-4",
"title": "GPT-4 - Wikipedia",
"source": "en.wikipedia.org",
"tier": "reference",
"quote": "GPT-4 was released on March 14, 2023",
"stance": "supports",
"note": "прямое указание даты релиза"
},
{
"url": "https://openai.com/index/gpt-4-research/",
"title": "GPT-4",
"source": "openai.com",
"tier": "unknown",
"quote": "March 14, 2023",
"stance": "supports",
"note": "дата публикации анонса на сайте разработчика"
}
],
"caveats": [
"Речь о публичном релизе модели, а не о доступности через API всем пользователям."
],
"meta": {
"tookMs": 24180,
"sourcesFound": 11,
"sourcesPicked": 4,
"sourcesRead": 4,
"sourcesUnread": 0,
"unreadSources": [],
"quotesRejected": 1,
"quotesOffSubject": 0,
"independentDomains": 3,
"independentSources": 2,
"mirrors": 1,
"model": "gemini-3-flash-lite",
"inputTokens": 21460,
"outputTokens": 312
}
}Поля ответа
verdictstringнеобязательныйsupported, refuted, mixed или unverified - см. ниже.
confidencenumberнеобязательный0…1 - насколько однозначны показания источников, с учётом отброшенных цитат и независимости источников. Не вероятность истинности.
agreeing / disagreeingnumberнеобязательныйСколько разных доменов подтверждают и опровергают. Считаем домены, а не цитаты: три цитаты с одного сайта - один голос.
evidenceobject[]необязательныйЦитаты: url, title, source (домен), tier, quote (дословный фрагмент, проверенный по тексту страницы), stance (supports / contradicts / unclear), note - чем фрагмент относится к утверждению. До 8 цитат.
caveatsstring[]необязательныйЧего проверка не покрывает: устаревшие данные, другой регион, иная трактовка терминов. Сюда же попадают наши собственные пометки - про отброшенные цитаты и про единственный источник. До 5 пунктов.
metaobjectнеобязательныйtookMs, sourcesFound (сколько ссылок дал поиск), sourcesPicked (сколько отобрано в чтение), sourcesRead (сколько страниц прочитано), sourcesUnread и unreadSources (сколько отобранных страниц прочитать не удалось и почему - таймаут, недоступность, пустой текст, ошибка), quotesRejected (цитаты, не найденные в тексте), quotesOffSubject (цитаты из источников не по предмету утверждения), independentDomains (домены среди оставшихся цитат), independentSources (они же за вычетом перепечаток - именно по этому числу считаются потолки ниже), mirrors (сколько пар источников признаны перепечатками одного текста), model, inputTokens, outputTokens.
Вердикт и уверенность
supported- источники подтверждают утверждение.refuted- источники его опровергают.mixed- источники расходятся между собой. Если есть и подтверждающие, и опровергающие цитаты, вердикт становитсяmixed, даже когда модель выбрала сторону: агенту нужен сам факт разногласия, аconfidenceпри этом не превышает 0.5.unverified- в прочитанных текстах нет данных по существу утверждения, либо ни одна цитата не подтвердилась.
Последние два - нормальный результат, а не ошибка. HTTP-статус остаётся 200, повторять запрос бессмысленно: источников по такому утверждению нет. Осмысленный следующий шаг - сузить формулировку или задать query, а не звать проверку второй раз. Исключение - когда часть поисковых движков не ответила: тогда в caveats прямо сказано, что это сбой поиска, а не доказательство отсутствия источников, и проверку стоит повторить.
{
"claim": "Redis быстрее Memcached на любых нагрузках",
"verdict": "mixed",
"confidence": 0.4,
"agreeing": 1,
"disagreeing": 2,
"evidence": [ "…" ],
"caveats": [
"Сравнения относятся к разным версиям и профилям нагрузки.",
"Подтверждение только из одного источника - независимой проверки нет."
]
}Потолки уверенности, которые мы ставим независимо от мнения модели:
- цитат не осталось →
unverified,confidence: 0; - есть и подтверждающие, и опровергающие →
mixed, не выше 0.5; supportedбез ни одной подтверждающей цитаты →unverified, не выше 0.3 (то же дляrefuted);- потолок по числу НЕЗАВИСИМЫХ источников (домены за вычетом перепечаток одного текста): один → 0.5, два → 0.7, три и больше → 0.9;
- среди прочитанного нет первоисточника (документации, справочника, медиа, сообщества) → не выше 0.6 плюс оговорка;
- часть цитат отброшена → уверенность умножается на долю выживших;
- 1.00 из веб-источников не бывает вовсе: верхняя граница - 0.9.
Перепечатки считаются одним источником: тексты прочитанных страниц сравниваются по пересечению восьмисловных фрагментов, и страницы, у которых совпадает больше 30% текста, попадают в один кластер. Три сайта с одним пресс-релизом дают один голос, а не три, и в caveats появляется строка с названиями этих доменов. Источники для чтения при этом выбираются не только по порядку выдачи: сначала площадки известного типа (документация, справочники, медиа, сообщества), и лишь потом unknown и перепечатки - чтобы подборка SEO-зеркал не заняла все места раньше первоисточника.
tier - тип площадки, не оценка правдивости
У каждой цитаты есть tier: docs (официальная документация и стандарты), reference (энциклопедии, научные базы), media, community (форумы, GitHub, Хабр), aggregator (площадки, живущие перепечаткой), unknown.
Через MCP: verify_claim
Тот же функционал доступен агенту как инструмент verify_claim MCP-сервера - с теми же параметрами. Ответ приходит текстом, сверстанным под чтение моделью: сначала вердикт и уверенность, потом сколько источников прочитано и как они разделились, дальше блоки цитат с доменом, ярлыком и ссылкой, в конце оговорки и строка про отброшенные цитаты. Порядок такой намеренно: модель внимательнее читает начало ответа, а главное здесь - не что нашлось, а можно ли этому верить.