Ассистент, который
не выдумывает числа.
Инженер спрашивает свободным текстом. Ассистент подбирает позиции с артикулами, объясняет ограничения и указывает страницу каталога для каждого факта.
Задача и ограничение
Неверное число здесь — это неверно заказанный аппарат.
Основной каталог производителя электротехники — 545 страниц: серии, номиналы, полюса, характеристики и коды заказа. Закупщик ищет артикул, инженер знает параметры, монтажник говорит жаргоном.
Ответ целиком от модели может исказить число. Обычный RAG по кускам PDF теряет колонки таблиц и не умеет надёжно проверять диапазоны параметров.
Извлечение из PDF
Гибридный парсер использует линии таблиц и группировку слов. Каждая строка проверяется грамматикой серии: код заказа дублирует параметры в колонках, и это позволяет проверить их согласованность.
- Таблицы
- Грамматика серии
- Валидация
- SQLite
Две отклонённые строки оказались опечатками самого каталога: в одной ток в коде противоречит скобкам, в другой ток утечки расходится с колонкой.
Матричные таблицы проверяются геометрически: артикул должен стоять в своей ячейке. Остальные страницы доступны через постраничный семантический индекс.
Состояние проекта 08.07.2026. Основной каталог — 545 страниц, Optima — 1 009; 1 120 SKU, 2 380 параметров. Источник: README.md и лист фактов CatalogRag.
Жёсткое — через SQL. Мягкое — через векторы.
Ток, полюса и ток утечки проверяются SQL по EAV-схеме. bge-m3 и Qdrant отвечают за мягкие формулировки и разделы вне структурированного корпуса. Там ответ ссылается на страницу, не выдумывая параметры.
Управляемое ослабление условий
На запрос «автомат на 7 А» ассистент сообщает, что такого номинала нет, и предлагает ближайшие 6 А и 8 А. Остальные условия сохраняются, каждое изменение явно обозначено.
Правила кодом
«Однофазный дифавтомат» означает два полюса. 16 000 мА превращаются в 16 А, 4 500 А — в 4,5 кА. Это отдельный детерминированный слой после модели.
Честный отказ
Пять полюсов или отсутствующая характеристика K приводят к объяснению отказа. Аналог другого бренда подбирается по параметрам с оговоркой.
Как выглядит ответ
Позиции собираются из базы; комментарий проходит проверку: упомянутые артикулы должны входить в найденное множество. Иначе комментарий отбрасывается.
Найдены позиции на 16 А, 1 полюс, характеристика C. Отличаются отключающей способностью.
| Позиция | Артикул | Источник |
|---|---|---|
| ВА47-29-1C16-УХЛ3 · 4,5 кА | 318196 | Стр. 12 |
| ВА47-100-1C16-УХЛ3 · 10 кА | 318102 | Стр. 15 |
Следующий номинал по току: ВА47-29-1C20-УХЛ3, 20 А, 4,5 кА. Артикул 318198, страница 12.
Макет диалога по валидированной базе, а не запись работы ассистента. Источник: data/eval/sku_pool_va47.json, 08.07.2026.
Как измерялось
Выдача непуста, и все артикулы входят в эталонное множество.
Eval-набор содержит 73 запроса семи типов. Эталоны берутся из базы, каждая позиция которой прошла проверку при загрузке. Прогон использует два каталога.
Между прогонами результат меняется на один запрос из-за недетерминизма облачной модели. В сохранённом прогоне остались лишние артикулы на жаргоне и на «4,5 кА» из свободного текста.
Правки касались нормализации имён параметров и операторов, доменного правила для однофазного дифавтомата и ослабления серии. Промпт почти не менялся.
08.07.2026. README.md, eval_harness/report.md. Простой запрос: 17/18; жаргон: 9/10; остальные группы без провалов. Лучший прогон не является гарантией качества на новых запросах.
Стек и границы
| Слой | Инструмент |
|---|---|
| Парсинг, правила, проверки | Python |
| Структурированные параметры | SQLite · EAV |
| Семантический поиск | bge-m3 · Qdrant |
| Намерение и комментарий | LLM с пост-проверкой |
Границы
Маршрут через визуальную модель для повёрнутых таблиц спроектирован, но не реализован. Полный маппинг брендов требует подключения следующих каталогов.
Что переносится на другой каталог
Грамматика на серию, проверка по избыточности, EAV-схема и eval-набор — общий каркас. Меняются правила серий и доменные правила. Каждый ответ сохраняет ссылку на источник, а числа берутся из базы.