Выборка по вопросу (ИИ)
Вопрос обычными словами — «участки Ду 500 старше 1980 года в 300 м от школ» — помощник превращает в условия выборки. Выборку выполняет сама программа по проверенным условиям, а не модель: модель не пишет запросы к базе.
Возможности
- Задать выборку вопросом: «бесканальные трубы Ду 400 и больше старше 1985 года в 500 м от 3-47», «потребители с нагрузкой больше 1 Гкал/ч», «самые изношенные участки на экране».
- Сразу получить результат: после «Спросить» выборка уже выполнена — список, подсветка на карте, «Скачать».
- Увидеть, как понят вопрос: строки конструктора заполнены условиями модели, над ними — её пояснение и строка «Запрос» с условиями словами.
- Поправить условия руками и выбрать заново кнопкой «Выбрать».
Как это работает
Модель заполняет конструктор, выборку делает сервер. Модели передаётся вопрос, текущий год и справочник полей конструктора с допустимыми значениями (для справочных полей — до 40 значений). Ответ модели — тот же запрос, что собирает конструктор: что выбирать (участки или узлы), условия, «все» или «любое», «рядом с узлом», «рядом с социальными объектами», «в видимой области», фрагменты, порядок и «не больше». Сервер проверяет его тем же белым списком полей, что и ручной конструктор, и выполняет. SQL модель не пишет.
Как модель читает вопрос (промпт ai/prompts/select.md): «Ду 400 и больше» — диаметр ≥ 400, «Ду 300–500» — от … до, «старше 1980 года» — год прокладки < 1980, «старше 40 лет» — год < текущий − 40, «бесканальные» — тип прокладки, «камеры» — вид узла, «источники», «насосные», «потребители» — тип узла. Без расстояния «рядом с» — 200 м, не больше 5000 м. Без «первые N» — не больше 1000.
Фрагменты. Не названы в вопросе — берутся фрагменты на карте; при «рядом с узлом» — все фрагменты (узел может лежать в другом). «В видимой области» без охвата карты снимается.
Чего в полях нет, того модель не выберет. У участков 13 полей: диаметр, год прокладки, износ, теплопотери, располагаемый напор, напор подачи, скорость, удельные потери, расход, тип прокладки, длина, глубина, число повреждений. У узлов — тип, вид, имя, нагрузка. Подачи и обратки отдельно нет: «подающие» модель опускает и пишет об этом в пояснении.
Уверенность. Если модель оценила разбор ниже 0,6, к пояснению добавляется «проверьте условия». Вопрос не про выборку — конструктор пустой и сообщение «Вопрос не похож на выборку объектов сети — уточните его».
Что нужно для работы
- Право «Запуск расчётов» и помощник ИИ, включённый на сервере. Без них строки «Спросите словами» нет, конструктор работает вручную.
- Для условий режима (напор, скорость, расход) — расчёт фрагментов; для «рядом со школами» — загруженные социальные объекты.
Шаги
Откройте «Инструменты» и наберите в поиске «Выборка по условиям» — пункт выделен рамкой.

Нажмите пункт — откроется окно.

Введите вопрос в поле «Спросите словами» и нажмите «Спросить».

Помощник заполнит условия — это обычные строки фильтра — и сразу выполнит выборку: найденное подсветится на карте, список можно скачать («Скачать»). Проверьте условия: здесь, например, признака «подающий/обратный» в полях выборки нет, и помощник пишет об этом в пояснении. Поправьте строки руками и нажмите «Выбрать» ещё раз.

Примеры
«Подающие участки диаметром 500 мм и больше, проложенные до 1990 года» (копия Алматы, фрагмент 74, 12,9 с). Модель заполнила две строки — «Условный диаметр ≥ 500 мм» и «Год прокладки (перекладки) < 1990» — с уверенностью 0,8 и пояснила: «Признака «подающий/обратный» в списке полей нет — выбраны все участки…». Найдено 0. Это не ошибка разбора: у участков Ду ≥ 500 этого фрагмента самый ранний год прокладки в копии — 2014. Без условия по году — 2068 участков, длина по паспорту 245,61 км.
Снимок шага 4 (фрагмент 1): «подающие участки диаметром 500 мм и больше» → одна строка «Условный диаметр ≥ 500 мм», «Найдено: 1035 (показано 1000) · длина по паспорту 122,52 км».
Если не получается
- Рядом с условиями «проверьте условия» — модель не уверена в разборе: сверьте строки фильтра с вопросом.
- Поля «Спросите словами» нет — ИИ выключен на сервере или нет права «Запуск расчётов»; условия можно задать вручную.
- Выборка пуста — сверьте условия с данными: например, в копии Алматы участков Ду ≥ 500 с годом прокладки до 1990 нет (самый ранний год — 2014).
- «Вопрос не разобран: …» — модель недоступна (лимит, нет связи, ИИ выключен); после двоеточия — причина от сервера.
- «Вопрос не похож на выборку объектов сети — уточните его» — назовите, что выбирать (участки, камеры, потребители) и по какому признаку.
- «Найдено: 0» при верных условиях — проверьте заполненность поля в базе (год прокладки, тип прокладки) и фрагменты в строке «Фрагменты».
Для администратора
- Флаги:
AI_ENABLED,ANTHROPIC_API_KEY,AI_MODEL. Модель вызывается с низким уровнем рассуждения, ответ — до 1200 токенов. Запись «AI» в журнале действий —tool=select. - Выборка после разбора — те же пределы, что у конструктора: до 5000 строк, до 8 условий, 20 с на запрос.
Для разработчика
- API:
POST /api/v1/ai/select(text2–500,fragment_idsдо 500,bbox«запад,юг,восток,север») →confidence,note,spec,description,items,total,truncated,total_length_m;error— запрос модели не прошёл проверку (конструктор всё равно заполняется). - Сервер:
routers/ai.py,ai/tools.py(SelectPlan,build_fields_text,select_by_phrase),database/network_select.py, промптai/prompts/select.md. - Веб:
components/NetworkSelectDialog.vue(ask),utils/networkSelect.ts(builderFromSpec). - Тесты:
tests/utils/networkSelect.spec.ts; API —tests/test_network_select.py,tests/test_ai_tools_stage6.py; e2e —e2e/functions/ai.spec.ts.
