API

Проверка утверждения

Принимает одно утверждение, сам находит источники, читает их и возвращает вердикт с дословными цитатами: кто подтверждает, кто опровергает, чего проверка не покрывает. Каждая цитата сверена с текстом страницы — не найденная в тексте выбрасывается вместе со своим доводом.

POSThttps://srezai.ru/api/v1/verify

Зачем это агенту

Собрать проверку из поиска и чтения можно и вручную, но четыре страницы по 6000 символов — это 24 000 символов сырья в контексте модели, до всякого рассуждения. Модели с окном 32k этого места просто негде взять. Здесь весь объём переваривается на нашей стороне, а наружу уходит вердикт с цитатами — сотни токенов вместо десятков тысяч. Стоимость: 8 кредитов за проверку, время — 15–60 с.

Когда использовать#

  • Перед тем как выдать пользователю дату, число, цену, статус — всё, что модель может «вспомнить» неверно.
  • Проверить утверждение, пришедшее извне: из письма, тикета, чужого текста, ответа другой модели.
  • Понять, есть ли по вопросу консенсус: расхождение источников — самостоятельный, полезный ответ.
  • Убедиться, что факт не устарел, — с 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-лимит.

Как устроена проверка#

  1. Поиск. По тексту утверждения (или по query) — до 12 результатов.
  2. Отбор. Берём по одной ссылке с домена: три статьи на одном сайте — это один голос, а не три, и бюджет чтения они тратят полностью.
  3. Чтение. Выбранные страницы читаются параллельно, по 6000 символов с каждой. Недоступная страница не отменяет проверку — сколько прочиталось, видно в meta.sourcesRead.
  4. Вердикт. Модель получает только тексты источников и обязана опираться исключительно на них: если данных в текстах нет, вердикт — unverified, а не догадка по общим знаниям.
  5. Сверка цитат. Каждая цитата ищется в тексте той страницы, на которую сослалась модель. Не найденная выбрасывается вместе с доводом, счётчик уходит в meta.quotesRejected, а уверенность понижается пропорционально потерям.
  6. Согласование. Вердикт приводится в соответствие с выжившими цитатами — см. Вердикт и уверенность.

Ошибка в цитате дороже её отсутствия

Модель, которую просят подтвердить утверждение цитатой, охотно цитату придумывает — и получается худший возможный результат: выдуманный факт с выдуманным пруфом, который выглядит проверенным. Поэтому сверка дословная, и мы предпочитаем показать unverified с пустым evidence, чем красиво оформленную выдумку. Число отброшенных цитат приходит клиенту как есть, в meta.quotesRejected.

Ответ#

json
{
  "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
  }
}

Поля ответа#

verdictstringoptional

supported, refuted, mixed или unverified — см. ниже.

confidencenumberoptional

0…1 — насколько однозначны показания источников, с учётом отброшенных цитат и независимости источников. Не вероятность истинности.

agreeing / disagreeingnumberoptional

Сколько разных доменов подтверждают и опровергают. Считаем домены, а не цитаты: три цитаты с одного сайта — один голос.

evidenceobject[]optional

Цитаты: url, title, source (домен), tier, quote (дословный фрагмент, проверенный по тексту страницы), stance (supports / contradicts / unclear), note — чем фрагмент относится к утверждению. До 8 цитат.

caveatsstring[]optional

Чего проверка не покрывает: устаревшие данные, другой регион, иная трактовка терминов. Сюда же попадают наши собственные пометки — про отброшенные цитаты и про единственный источник. До 5 пунктов.

metaobjectoptional

tookMs, sourcesFound (сколько ссылок дал поиск), sourcesRead (сколько страниц прочитано), quotesRejected, independentDomains, model, inputTokens, outputTokens.

Вердикт и уверенность#

  • supported — источники подтверждают утверждение.
  • refuted — источники его опровергают.
  • mixed — источники расходятся между собой. Если есть и подтверждающие, и опровергающие цитаты, вердикт становится mixed, даже когда модель выбрала сторону: агенту нужен сам факт разногласия, а confidence при этом не превышает 0.5.
  • unverified — в прочитанных текстах нет данных по существу утверждения, либо ни одна цитата не подтвердилась.

Последние два — нормальный результат, а не ошибка. HTTP-статус остаётся 200, повторять запрос бессмысленно: источников по такому утверждению действительно нет. Осмысленный следующий шаг — сузить формулировку или задать query, а не звать проверку второй раз.

json
{
  "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 секунд — это норма

Один вызов — это поиск, несколько чтений и работа модели. Клиентский таймаут ставьте не меньше 120 с: иначе запрос оборвётся на вашей стороне, кредит спишется, а результат не придёт.

Только POST

Эндпоинт принимает только POST. GET вернёт 405 Method Not Allowed.