проект теперь работает с использованием локальной базы данных SQLite. Все данные аккумулируются и хранятся в ней. Впереди - разработка веб интерфейса.

This commit is contained in:
2026-08-03 12:59:23 +03:00
parent d39618c891
commit 0efbe4ff99
14 changed files with 976 additions and 300 deletions
+50 -26
View File
@@ -1,33 +1,57 @@
from modules.knowledge_base import add_rule_to_kb
import os
import json
from modules.database import add_rule_to_db
def review_ai_decisions(ai_report, suspicious_cases):
try:
from modules.knowledge_base import save_rule
except ImportError:
try:
from modules.knowledge_base import add_rule as save_rule
except ImportError:
save_rule = None
def review_ai_decisions(report_text, suspicious_cases):
"""
Интерактивный модуль: показывает спорные моменты человеку
и записывает его вердикт в память ИИ.
Интерактивный консольный модуль обучения (Human-in-the-Loop).
Запрашивает подтверждение оператора ТОЛЬКО по нетипичным/сложным случаям.
"""
print("\n" + "="*60)
print("РЕЖИМ ОБУЧЕНИЯ И ПРОВЕРКИ РЕШЕНИЙ ИИ (HUMAN-IN-THE-LOOP)")
print("="*60)
if not suspicious_cases:
print("Спорных случаев для обучения сегодня не обнаружено.")
print("\n[✓] Все аномалии валидированы автоматически. Спорных вопросов для оператора нет.")
return
for case in suspicious_cases:
fio = case.get('fio_target')
reason = case.get('reason')
print(f"\n[?] Спорный случай: {fio}")
print(f" Причина аномалии: {reason}")
print("\n" + "=" * 60)
print("РЕЖИМ ОБУЧЕНИЯ И ПРОВЕРКИ РЕШЕНИЙ ИИ (HUMAN-IN-THE-LOOP)")
print("=" * 60)
for idx, case in enumerate(suspicious_cases, 1):
fio_target = case.get('fio_target', 'Неизвестно')
reason = case.get('reason', 'Нет описания')
print(f"\n[?] Спорный случай {idx}/{len(suspicious_cases)}: {fio_target}")
print(f" Детали: {reason}")
user_input = input("Согласны с решением ИИ? (д - да / н - нет / введите новое правило): ").strip()
if user_input.lower() == 'н' or len(user_input) > 5:
if user_input.lower() == 'н':
rule_text = input(f"Опишите правило для {fio} (например: 'Считать совместителем'): ")
else:
rule_text = user_input
# Записываем правило в Базу Знаний
full_rule = f"Сотрудник {fio}: {rule_text}"
add_rule_to_kb(full_rule)
print(f"[+] ИИ 'запомнил' это правило и учитывает его со следующего запуска!")
user_input = input("Подтверждаете аномалию? (д / да / н / нет / или введите текст правила): ").strip()
user_input_clean = user_input.lower()
# Расширенный список вариантов "ДА"
if user_input_clean in ['д', 'да', 'da', 'yes', 'y', 'ок', 'ага', '+']:
print(" [✓] Решение подтверждено оператором.")
elif user_input_clean in ['н', 'нет', 'no', 'n', '-']:
print(" [ℹ️] Решение отклонено оператором.")
elif user_input:
# Если оператор ввел действительно новое текстовое правило
new_rule = f"Правило по {fio_target}: {user_input}"
add_rule_to_db(new_rule, added_by="Human_Admin")
if save_rule:
try:
save_rule(new_rule)
except Exception:
pass
print(f" [✓] Новое правило записано в Базу Знаний: {new_rule}")
else:
print(" [ℹ️] Запись пропущена.")
print("\n[✓] ЭТАП ОБУЧЕНИЯ ЗАВЕРШЕН.")