Одна модель текст проверяет плохо. Работает связка из трёх шагов:
Питфолл API-аудитора: у reasoning-моделей весь max_tokens уходит в reasoning_tokens, content возвращается ПУСТОЙ при completion_tokens == max_tokens. Ставить max_tokens ≥ 16000 и проверять len(content) > 200, иначе платишь впустую.
Лечение — сменить МОДЕЛЬ, а не только поднять лимит. Подъём до 16 тыс. не помогает, если модель всё равно рассуждает весь бюджет: ответ снова пустой при reasoning_tokens == max_tokens. Проверенный рабочий порядок: сначала прогнать неразмышляющую модель того же класса (openai/gpt-6.1-sol отработал 28 с и 3 тыс. символов там, где sonnet вернул ноль дважды), и держать вторую как запасную. В цикле перебирать модели и брать первый ответ с len(content) > 300. Перед прогоном урезать материал до 20–25 страниц по делу: 48 тыс. символов достаточно, а лишние страницы только увеличивают время рассуждений.
Статусы НТД модели не отдавать вообще — она их выдумывает. Только база (ИСС «Техэксперт»/«Кодекс»/ГОСТ Ассистент через MCP): поиск по номеру → чтение текста конкретного пункта по номеру строки.
При сведении двух проверок разбирать расхождения ПО ПЕРВОИСТОЧНИКУ и прямо писать, кто был прав, а не усреднять формулировки. Разные проверки дополняют друг друга: кодовый прогон силён в арифметике и внутренней согласованности, но слеп в статусах НТД и в чужих штампах.