# Схема «код + аудитор»


Одна модель текст проверяет плохо. Работает связка из трёх шагов:

1. **Извлечение** — pypdf по страницам, текст в JSON. Проверить длину текста по каждой
   странице: 0 символов = нет текстового слоя, дальше нужен OCR.
2. **Сверка кодом** — всё арифметическое считать Python/Decimal, НЕ моделью. Плюс
   механические проверки: нумерация таблиц, полный перечень обозначений НТД регуляркой,
   шифры штампов по страницам, количество×мощность.
3. **Независимый аудитор другого семейства** — прямой вызов API (не субагент), модель
   ДРУГОГО производителя, в промпте выдержки первоисточника и список своих утверждений
   на перепроверку. Даёт то, что пропустил именно потому, что смотрит иначе: у меня так
   нашлись метки режимов.

**Питфолл 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): поиск по номеру → чтение текста
конкретного пункта по номеру строки.

**При сведении двух проверок** разбирать расхождения ПО ПЕРВОИСТОЧНИКУ и прямо писать,
кто был прав, а не усреднять формулировки. Разные проверки дополняют друг друга: кодовый
прогон силён в арифметике и внутренней согласованности, но слеп в статусах НТД и в чужих штампах.