Бизнес-логика и сценарии¶
Генерация ТЗ (основной сценарий)¶
Полный цикл создания технического задания.
Пользователь вводит описание закупки
│
▼
1. Извлечение позиций (parse_items)
• LLM парсит текст → список товаров/услуг
• Определяется тип каждой позиции (товар / услуга / работа)
│
▼
2. Генерация глав (chapters)
• Для каждой позиции создаётся техническая глава
• Генерируются опциональные разделы (гарантии, упаковка и т.д.)
│
▼
3. Генерация характеристик (chars)
• Классификация по ОКПД2 (Qdrant RAG)
• Генерация основных характеристик (LLM)
• Генерация дополнительных характеристик (при RANGE)
• [Опционально] Поиск нормативных документов (при GOSTS)
│
▼
4. Заполнение и нормализация (fulfill + cleanup)
• Проставление количества, сроков, адресов
• Нормализация форматов значений
│
▼
5. Формирование спецификации (spec_ch)
• Сборка таблицы спецификации
│
▼
6. Финальная сборка (assemble + finish)
• Объединение всех компонентов в итоговый документ
• Сохранение результата в Redis
Отслеживание прогресса:
- Каждая стадия обновляет прогресс в Redis.
- Клиент опрашивает
GET /api/progress/{job_id}для отображения прогресс-бара.
Редактирование характеристик¶
Два режима редактирования:
Редактирование ячейки:
- Пользователь выбирает характеристику и вводит комментарий.
- LLM анализирует текущее значение и инструкцию.
- Возвращает новое значение с описанием изменения.
Редактирование таблицы:
- Пользователь выделяет набор характеристик и даёт текстовую инструкцию.
- LLM определяет тип операции: объяснение или модификация.
- При модификации — возвращает список действий (add/remove/update/rename).
- Клиент применяет действия к таблице.
Инкрементальное обновление документа¶
При изменении параметров существующего ТЗ (замена товара, изменение количества и т.д.):
- Клиент формирует deep diff изменений.
POST /api/chapters/update-by-changesотправляет diff и текущее содержимое.- LLM определяет, какие главы и характеристики затронуты.
- Затронутые компоненты перегенерируются с учётом изменений.
- Результат сливается с существующим документом.
Диалог с AI-агентом¶
Интерактивное взаимодействие с TZAgent в контексте текущего документа:
- Пользователь задаёт вопрос или даёт инструкцию в чате.
- Intent Classifier определяет намерение.
- Агент выбирает подходящий инструмент (или отвечает текстом).
- При вызове инструмента — модифицирует документ и возвращает обновлённый результат.
Примеры взаимодействий:
- «Добавь раздел о гарантийных обязательствах» →
chapter_tool - «Замени процессор на AMD EPYC» →
swap_tool→ перегенерация характеристик - «Увеличь количество до 20 штук» →
basic_params_tool - «Какие ГОСТы применимы к этому оборудованию?» → текстовый ответ
Классификация ОКПД2¶
- Пользователь вводит наименование товара/услуги.
- Гибридный поиск (векторный + BM25) по базе ОКПД2 в Qdrant.
- Результаты ранжируются по score (порог — 0.20).
- Подсказки кэшируются в Redis (15 минут).
- Rate limiting: 60 запросов/мин, burst — 30.