API
Проверка утверждения
Принимает одно утверждение, сам находит источники, читает их и возвращает вердикт с дословными цитатами: кто подтверждает, кто опровергает, чего проверка не покрывает. Каждая цитата сверена с текстом страницы — не найденная в тексте выбрасывается вместе со своим доводом.
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
}'Параметры тела#
claimstringrequiredУтверждение одной фразой, до 500 символов. Формулируйте проверяемо: «выручка X за 2024 год — 12 млрд ₽» проверяется, «X — хорошая компания» нет. Длинный текст обрезается до 500 символов.
maxSourcesnumberoptionalСколько независимых источников читать: от 2 до 5 (4 по умолчанию). Больше источников — выше шанс поймать расхождение, но и дольше. Цена от их числа не зависит.
timeRangestringoptionalСвежесть источников: "" (без ограничения, по умолчанию), day, week, month, year. Для фактов, которые могли измениться — цены, курсы, должности, статусы.
languagestringoptionalЯзык поиска источников: auto (по умолчанию), ru, en.
querystringoptionalОтдельный поисковый запрос, если утверждение как есть ищется плохо (длинное, с местоимениями, с внутренними названиями). По умолчанию ищется текст claim. До 300 символов.
Батч-режима здесь нет намеренно, в отличие от чтения и извлечения: одна проверка — это уже поиск, до пяти чтений и вызов модели. Несколько утверждений — несколько запросов, их можно вести параллельно с оглядкой на burst-лимит.
Как устроена проверка#
- Поиск. По тексту утверждения (или по
query) — до 12 результатов. - Отбор. Берём по одной ссылке с домена: три статьи на одном сайте — это один голос, а не три, и бюджет чтения они тратят полностью.
- Чтение. Выбранные страницы читаются параллельно, по 6000 символов с каждой. Недоступная страница не отменяет проверку — сколько прочиталось, видно в
meta.sourcesRead. - Вердикт. Модель получает только тексты источников и обязана опираться исключительно на них: если данных в текстах нет, вердикт —
unverified, а не догадка по общим знаниям. - Сверка цитат. Каждая цитата ищется в тексте той страницы, на которую сослалась модель. Не найденная выбрасывается вместе с доводом, счётчик уходит в
meta.quotesRejected, а уверенность понижается пропорционально потерям. - Согласование. Вердикт приводится в соответствие с выжившими цитатами — см. Вердикт и уверенность.
Ошибка в цитате дороже её отсутствия
unverified с пустым evidence, чем красиво оформленную выдумку. Число отброшенных цитат приходит клиенту как есть, в meta.quotesRejected.Ответ#
{
"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,
"sourcesRead": 4,
"quotesRejected": 1,
"independentDomains": 3,
"model": "gemini-3-flash-lite",
"inputTokens": 21460,
"outputTokens": 312
}
}Поля ответа#
verdictstringoptionalsupported, refuted, mixed или unverified — см. ниже.
confidencenumberoptional0…1 — насколько однозначны показания источников, с учётом отброшенных цитат и независимости источников. Не вероятность истинности.
agreeing / disagreeingnumberoptionalСколько разных доменов подтверждают и опровергают. Считаем домены, а не цитаты: три цитаты с одного сайта — один голос.
evidenceobject[]optionalЦитаты: url, title, source (домен), tier, quote (дословный фрагмент, проверенный по тексту страницы), stance (supports / contradicts / unclear), note — чем фрагмент относится к утверждению. До 8 цитат.
caveatsstring[]optionalЧего проверка не покрывает: устаревшие данные, другой регион, иная трактовка терминов. Сюда же попадают наши собственные пометки — про отброшенные цитаты и про единственный источник. До 5 пунктов.
metaobjectoptionaltookMs, sourcesFound (сколько ссылок дал поиск), sourcesRead (сколько страниц прочитано), quotesRejected, independentDomains, model, inputTokens, outputTokens.
Вердикт и уверенность#
supported— источники подтверждают утверждение.refuted— источники его опровергают.mixed— источники расходятся между собой. Если есть и подтверждающие, и опровергающие цитаты, вердикт становитсяmixed, даже когда модель выбрала сторону: агенту нужен сам факт разногласия, аconfidenceпри этом не превышает 0.5.unverified— в прочитанных текстах нет данных по существу утверждения, либо ни одна цитата не подтвердилась.
Последние два — нормальный результат, а не ошибка. HTTP-статус остаётся 200, повторять запрос бессмысленно: источников по такому утверждению действительно нет. Осмысленный следующий шаг — сузить формулировку или задать query, а не звать проверку второй раз.
{
"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.6 плюс отдельная оговорка: один источник — это пересказ одного источника, а не проверка;
- часть цитат отброшена → уверенность умножается на долю выживших.
tier — тип площадки, не оценка правдивости#
У каждой цитаты есть tier: docs (официальная документация и стандарты), reference (энциклопедии, научные базы), media, community (форумы, GitHub, Хабр), aggregator (площадки, живущие перепечаткой), unknown.
Не считайте tier доказательством
docs не значит «правда», aggregator не значит «ложь», unknown — просто «домена нет в наших коротких списках», и туда попадает большинство нормальных сайтов, включая первоисточники. Полезен tier для другого: увидеть, что три согласных источника — это три пересказа одной новости, а не три независимых наблюдения.Через MCP: verify_claim#
Тот же функционал доступен агенту как инструмент verify_claim MCP-сервера — с теми же параметрами. Ответ приходит текстом, сверстанным под чтение моделью: сначала вердикт и уверенность, потом сколько источников прочитано и как они разделились, дальше блоки цитат с доменом, ярлыком и ссылкой, в конце оговорки и строка про отброшенные цитаты. Порядок такой намеренно: модель внимательнее читает начало ответа, а главное здесь — не что нашлось, а можно ли этому верить.
15–60 секунд — это норма
Только POST
POST. GET вернёт 405 Method Not Allowed.