feat: подбор характеристик объекта КИИ — программа и ИИ
Вкладка «Основное», кнопки под полем типового объекта: - ⚙️ «Подобрать типовой объект (программа)»: скоринг по совпадению значимых слов названия/назначения объекта с перечнем 392 типовых отраслевых объектов (Распоряжение 360-р), IDF-веса (редкие слова важнее общих) → окно с вариантами, оператор выбирает и применяет (заполняет сферу + типовой объект) - 🤖 «Подобрать характеристики (ИИ)»: DeepSeek предлагает назначение, сферу, тип, архитектуру и типовой объект (из перечня 360-р) как рекомендацию → окно с полями, оператор подтверждает/правит Примеры: СКУД → «ИС, АСУ, ИТКС, обеспечивающие контроль и управление доступом на территорию»; 1С:УПП → «ИС для ведения бухгалтерского учета»
This commit is contained in:
@@ -519,6 +519,63 @@ def suggest_threats_ai(security_data, api_key, model='deepseek-chat', base_url=N
|
||||
return threats_out, None
|
||||
|
||||
|
||||
def suggest_object_params_ai(object_data, api_key, model='deepseek-chat', base_url=None,
|
||||
typical_objects=None):
|
||||
"""ИИ предлагает характеристики объекта КИИ: назначение, сферу, тип, архитектуру,
|
||||
типовой отраслевой объект — как рекомендацию оператору.
|
||||
|
||||
object_data — dict: name, description, purpose (что известно об объекте).
|
||||
typical_objects — перечень типовых отраслевых объектов (из 360-р) для выбора.
|
||||
|
||||
Возвращает (dict, ошибка): dict с полями
|
||||
purpose / sphere / object_type / architecture / typical_object / обоснование.
|
||||
"""
|
||||
if not api_key:
|
||||
return None, "Не задан API-ключ ИИ (Файл → Настройки → API)"
|
||||
|
||||
if typical_objects:
|
||||
to_text = "\n".join(f"{i+1}. {t}" for i, t in enumerate(typical_objects[:400]))
|
||||
else:
|
||||
to_text = "(перечень не предоставлен)"
|
||||
|
||||
system = (
|
||||
"Ты — эксперт ФСТЭК по категорированию объектов критической информационной инфраструктуры "
|
||||
"(187-ФЗ, ПП РФ № 127, Распоряжение ПРФ № 360-р, приказ ФСТЭК № 236). "
|
||||
"По описанию объекта КИИ предложи его характеристики. Верни ТОЛЬКО JSON: "
|
||||
'{"назначение": "короткое назначение объекта", '
|
||||
'"сфера": "одна из сфер: Здравоохранение, Наука, Транспорт, Связь, Энергетика, '
|
||||
'Государственная регистрация прав, Банковская сфера и финансовый рынок, '
|
||||
'Топливно-энергетический комплекс, Атомная энергетика, Оборонная промышленность, '
|
||||
'Ракетно-космическая промышленность, Горнодобывающая промышленность, '
|
||||
'Металлургическая промышленность, Химическая промышленность, Иная сфера деятельности", '
|
||||
'"тип": "Информационная система | Автоматизированные системы управления | '
|
||||
'Информационно-телекоммуникационная сеть", '
|
||||
'"архитектура": "одно из: клиент-серверная система, автономная (standalone), '
|
||||
'распределенная система, иное", '
|
||||
'"типовой_объект": "полная строка из предоставленного перечня, наиболее подходящая, '
|
||||
'или пустая строка", '
|
||||
'"обоснование": "почему выбраны такие характеристики (1-2 предложения)"} '
|
||||
"Не выдумывай типовой объект — бери только из перечня."
|
||||
)
|
||||
user = (
|
||||
"Информация об объекте КИИ:\n"
|
||||
f"{json.dumps(object_data, ensure_ascii=False)}\n\n"
|
||||
"Перечень типовых отраслевых объектов КИИ (Распоряжение ПРФ № 360-р):\n"
|
||||
f"{to_text}"
|
||||
)
|
||||
js, err = _ai_json(api_key, model, base_url, system, user)
|
||||
if err:
|
||||
return None, err
|
||||
return {
|
||||
'назначение': str(js.get('назначение', '') or '').strip(),
|
||||
'сфера': str(js.get('сфера', '') or '').strip(),
|
||||
'тип': str(js.get('тип', '') or '').strip(),
|
||||
'архитектура': str(js.get('архитектура', '') or '').strip(),
|
||||
'типовой_объект': str(js.get('типовой_объект', '') or '').strip(),
|
||||
'обоснование': str(js.get('обоснование', '') or '').strip(),
|
||||
}, None
|
||||
|
||||
|
||||
def check_security_ai(security_data, api_key, model='deepseek-chat', base_url=None):
|
||||
"""ИИ-проверка заполненной вкладки «Безопасность» объекта КИИ (236 приказ).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user