60 страниц в .docx без выдуманных фактов

Проектной компании нужен генератор: берет чертежи и техусловия проекта, собирает из них черновик нормативно-технического документа на 80% готового объема. Размер критичный - 60 страниц. Ловушка очевидна: LLM уверенно врет, и при таком объеме ложь утонет в нормальном тексте.

Три уровня гарантий вместо надежды на промпт. Первый слой - разделение ролей источников. Данные из чертежей помечены source_fact='source_fact', а эталонные шаблоны - только по структуре, source_fact='template'. Поиск по документам включает фильтр project_id - не подхватит соседний объект случайно. Если число отсутствует в параметрах проекта, в текст пишется [НЕТ ДАННЫХ], не выдумка. Второй слой - стражник на выходе. Per-project блок-лист чужих топонимов и кодов, проверка по word-boundary, раздел отмечается flagged, если сработал гейт. Третий уровень - чекпоинты. Каждый раздел - это отдельный вызов LLM, запись в section_outputs по run_id. Если все упало на разделе 28, перезапуск подхватит с 28, не с нуля.

148 автотестов, половина из них про то, что модель НЕ сделает: не смешает объекты, не выдумает цифру, не втянет чужой проект. Идемпотентность проверена на живом Supabase. Мораль старая: когда ставка на достоверность, критичная логика уходит из промпта в архитектуру.

#генератор #документы #LLM #RAG #pgvector #галлюцинации #идемпотентность #архитектура