перед внедрением API и веб интерфейса.
This commit is contained in:
+25
-6
@@ -1,5 +1,6 @@
|
||||
import os
|
||||
import sqlite3
|
||||
import json
|
||||
import pandas as pd
|
||||
from datetime import datetime
|
||||
from config import DATA_DIR
|
||||
@@ -94,21 +95,38 @@ def init_db():
|
||||
|
||||
conn.commit()
|
||||
|
||||
# Автоматически загружаем базовые правила компании
|
||||
# Автоматически загружаем базовые правила и системный промпт
|
||||
sync_knowledge_base_to_db()
|
||||
|
||||
|
||||
def sync_knowledge_base_to_db():
|
||||
"""
|
||||
Автоматически мигрирует все правила из knowledge_base.json в таблицу ai_knowledge_base SQLite.
|
||||
Автоматически мигрирует правила из knowledge_base.json и системный промпт в таблицу ai_knowledge_base SQLite.
|
||||
"""
|
||||
kb_path = os.path.join(os.path.dirname(DATA_DIR), "knowledge_base.json")
|
||||
system_ai_prompt = (
|
||||
"СИСТЕМНЫЙ ПРОМПТ ИИ (MATCHING & VERIFICATION):\n"
|
||||
"Ты — экспертный ИИ-аудитор СКУД и кадрового учета 1С. Твоя задача — проводить интеллектуальный анализ аномалий "
|
||||
"и сопоставление (Fuzzy Matching) нераспознанных ФИО из СКУД с эталонным Штатным расписанием 1С.\n\n"
|
||||
"1. ЗАЩИТА ОТ ПОЛНЫХ ТЁЗОК (FULL NAME COLLISION):\n"
|
||||
" - Если в эталонном штате 1С присутствуют два или более сотрудников с ОДИНАКОВЫМИ ФИО (полные тёзки), "
|
||||
"ты ОБЯЗАН учитывать контекст: Подразделение и Должность.\n"
|
||||
" - Ни в коем случае не объединяй записи разных людей! Если контекст не позволяет однозначно определить, кто именно из тёзок совершил проход, ПОМЕТЬ СЛУЧАЙ КАК НЕОДНОЗНАЧНЫЙ и НЕ делай автоматическую подмену.\n\n"
|
||||
"2. ПРАВИЛА СОПОСТАВЛЕНИЯ (MATCHING RULES):\n"
|
||||
" - Допускаются исправления мелких опечаток, перестановки порядка (Имя Фамилия -> Фамилия Имя), замена букв Е/Ё, И/Й.\n"
|
||||
" - Учитывай сокращения инициалов (например, 'Иванов И.В.' -> 'Иванов Иван Васильевич').\n"
|
||||
" - Если уверенность в совпадении меньше 85% — НЕ сопоставляй, оставляй запись как нераспознанную.\n\n"
|
||||
"3. ФОРМАТ ВЫХОДНЫХ ДАННЫХ:\n"
|
||||
" Верни строго JSON-объект без вводных слов и Markdown-разметки: {\"mappings\": [...], \"unmatched\": [...]}"
|
||||
)
|
||||
|
||||
rules_to_insert = [
|
||||
system_ai_prompt,
|
||||
"ГЛОБАЛЬНОЕ ПРАВИЛО 1: Любое физическое присутствие сотрудника по СКУД при наличии в 1С документа отсутствия (отпуск, больничный, уход за ребенком и др.), КРОМЕ командировок и служебных поездок — ЯВЛЯЕТСЯ СТРОГОЙ ИСТИННОЙ АНОМАЛИЕЙ.",
|
||||
"ГЛОБАЛЬНОЕ ПРАВИЛО 2: Документы отсутствий из 1С:ЗУП имеют 100% высший приоритет над статическим реестром удалёнщиков.",
|
||||
"ГЛОБАЛЬНОЕ ПРАВИЛО 3: Удалённые сотрудники имеют право беспрепятственно работать в офисе по СКУД в любое время (это не является аномалией)."
|
||||
]
|
||||
|
||||
kb_path = os.path.join(os.path.dirname(DATA_DIR), "knowledge_base.json")
|
||||
if os.path.exists(kb_path):
|
||||
try:
|
||||
with open(kb_path, "r", encoding="utf-8") as f:
|
||||
@@ -124,11 +142,12 @@ def sync_knowledge_base_to_db():
|
||||
cursor = conn.cursor()
|
||||
for rule in rules_to_insert:
|
||||
cursor.execute(
|
||||
"INSERT OR IGNORE INTO ai_knowledge_base (rule_text) VALUES (?)",
|
||||
(rule.strip(),)
|
||||
"INSERT OR IGNORE INTO ai_knowledge_base (rule_text, added_by) VALUES (?, ?)",
|
||||
(rule.strip(), "System_AI")
|
||||
)
|
||||
conn.commit()
|
||||
|
||||
|
||||
|
||||
def save_scud_to_db(df_scud, date_str):
|
||||
"""Оптимизированное сохранение логов СКУД за дату."""
|
||||
if df_scud.empty:
|
||||
|
||||
Reference in New Issue
Block a user