проект теперь работает с использованием локальной базы данных SQLite. Все данные аккумулируются и хранятся в ней. Впереди - разработка веб интерфейса.
This commit is contained in:
+27
-8
@@ -2,10 +2,12 @@ import json
|
||||
import re
|
||||
import requests
|
||||
from config import OLLAMA_URL, OLLAMA_MODEL
|
||||
from modules.database import get_all_rules_from_db
|
||||
|
||||
|
||||
def ask_ollama(prompt, system_prompt=None):
|
||||
"""
|
||||
Универсальная функция отправки запросов к Ollama (поддерживает /api/generate и /api/chat)
|
||||
Универсальная функция отправки запросов к локальной модели Ollama (Qwen 2.5).
|
||||
"""
|
||||
payload = {
|
||||
"model": OLLAMA_MODEL,
|
||||
@@ -17,10 +19,8 @@ def ask_ollama(prompt, system_prompt=None):
|
||||
response = requests.post(OLLAMA_URL, json=payload, timeout=120)
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
# Проверяем формат /api/generate
|
||||
if "response" in data:
|
||||
return data["response"].strip()
|
||||
# Проверяем формат /api/chat
|
||||
elif "message" in data and "content" in data["message"]:
|
||||
return data["message"]["content"].strip()
|
||||
else:
|
||||
@@ -32,21 +32,40 @@ def ask_ollama(prompt, system_prompt=None):
|
||||
except Exception as e:
|
||||
return f"⚠️ Ошибка при обращении к Ollama: {e}"
|
||||
|
||||
|
||||
def get_system_rules_context():
|
||||
"""
|
||||
Загружает глобальные системные правила компании прямо из Базы Данных.
|
||||
"""
|
||||
rules = get_all_rules_from_db()
|
||||
if not rules:
|
||||
return ""
|
||||
rules_text = "\n".join([f"- {r}" for r in rules])
|
||||
return f"\nОБЯЗАТЕЛЬНЫЕ ГЛОБАЛЬНЫЕ ПРАВИЛА И ПРИОРИТЕТЫ КОМПАНИИ:\n{rules_text}\n"
|
||||
|
||||
|
||||
def ai_verify_scud_against_staff(unrecognized_scud_fios, staff_fios):
|
||||
"""ИИ-сверка опечаток и несовпадений ФИО между СКУД и 1С:ЗУП"""
|
||||
"""
|
||||
ИИ-сверка опечаток и несовпадений ФИО между СКУД и 1С:ЗУП.
|
||||
Записи из 1С считаются 100% эталоном.
|
||||
"""
|
||||
if not unrecognized_scud_fios or not staff_fios:
|
||||
return {}
|
||||
|
||||
rules_context = get_system_rules_context()
|
||||
|
||||
prompt = f"""
|
||||
Ты — кадровый аудитор безопасности СКУД.
|
||||
{rules_context}
|
||||
В СКУД записаны неопознанные ФИО: {json.dumps(unrecognized_scud_fios, ensure_ascii=False)}
|
||||
В официальном Штатном расписании 1С записаны ЭТАЛОНЫ: {json.dumps(staff_fios, ensure_ascii=False)}
|
||||
|
||||
СТРОГИЕ ПРАВИЛА:
|
||||
1. Запись из Штат 1С — это 100% ПРАВИЛЬНЫЙ эталон.
|
||||
2. В СКУД допущена опечатка.
|
||||
3. В поле "warning" описать опечатку.
|
||||
4. Запрещено выдумывать опечатки!
|
||||
3. Любое присутствие сотрудника по СКУД при наличии в 1С документа отсутствия (кроме командировок) является гарантированной аномалией.
|
||||
4. В поле "warning" опиши обнаруженную опечатку.
|
||||
5. Запрещено выдумывать опечатки!
|
||||
|
||||
ОТВЕЧАЙ ТОЛЬКО ИСКЛЮЧИТЕЛЬНО В ФОРМАТЕ JSON!
|
||||
|
||||
@@ -65,6 +84,7 @@ def ai_verify_scud_against_staff(unrecognized_scud_fios, staff_fios):
|
||||
prompt,
|
||||
system_prompt="Ты — JSON API. Выдавай ТОЛЬКО валидный JSON без markdown-разметки."
|
||||
)
|
||||
|
||||
mapping = {}
|
||||
try:
|
||||
match = re.search(r'\{.*\}', raw_response, re.DOTALL)
|
||||
@@ -81,5 +101,4 @@ def ai_verify_scud_against_staff(unrecognized_scud_fios, staff_fios):
|
||||
except Exception as e:
|
||||
print(f"[!] Ошибка разбора JSON от ИИ при сверке опечаток: {e}")
|
||||
|
||||
return mapping
|
||||
# тестовая строка для проверки работы функции
|
||||
return mapping
|
||||
Reference in New Issue
Block a user