Первичная зашифрованная версия проекта
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import json
|
||||
import re
|
||||
import requests
|
||||
from config import OLLAMA_URL, OLLAMA_MODEL
|
||||
|
||||
def ask_ollama(prompt, model=OLLAMA_MODEL, system_prompt=None):
|
||||
"""Базовая функция отправки запросов к Ollama"""
|
||||
if system_prompt is None:
|
||||
system_prompt = "Ты — офисный аудитор безопасности и кадрового учета."
|
||||
|
||||
payload = {
|
||||
"model": model,
|
||||
"messages": [
|
||||
{"role": "system", "content": system_prompt},
|
||||
{"role": "user", "content": prompt}
|
||||
],
|
||||
"stream": False
|
||||
}
|
||||
try:
|
||||
response = requests.post(OLLAMA_URL, json=payload, timeout=60)
|
||||
if response.status_code == 200:
|
||||
return response.json()['message']['content']
|
||||
else:
|
||||
return f"Ошибка API Ollama: {response.status_code}"
|
||||
except Exception as e:
|
||||
return f"Ошибка подключения к Ollama: {e}"
|
||||
|
||||
def ai_verify_scud_against_staff(unrecognized_scud_fios, staff_fios):
|
||||
"""ИИ-сверка опечаток и несовпадений ФИО между СКУД и 1С:ЗУП"""
|
||||
if not unrecognized_scud_fios or not staff_fios:
|
||||
return {}
|
||||
|
||||
prompt = f"""
|
||||
Ты — кадровый аудитор безопасности СКУД.
|
||||
В СКУД записаны неопознанные ФИО: {json.dumps(unrecognized_scud_fios, ensure_ascii=False)}
|
||||
В официальном Штатном расписании 1С записаны ЭТАЛОНЫ: {json.dumps(staff_fios, ensure_ascii=False)}
|
||||
|
||||
СТРОГИЕ ПРАВИЛА:
|
||||
1. Запись из Штат 1С — это 100% ПРАВИЛЬНЫЙ эталон.
|
||||
2. В СКУД допущена опечатка.
|
||||
3. В поле "warning" описать опечатку.
|
||||
4. Запрещено выдумывать опечатки!
|
||||
|
||||
ОТВЕЧАЙ ТОЛЬКО ИСКЛЮЧИТЕЛЬНО В ФОРМАТЕ JSON!
|
||||
|
||||
Формат ответа:
|
||||
{{
|
||||
"verified_matches": [
|
||||
{{
|
||||
"scud_fio": "ФИО из СКУД",
|
||||
"staff_fio": "эталон ФИО из Штат 1С",
|
||||
"warning": "Описание опечатки в СКУД или 'Точное совпадение (без опечаток)'"
|
||||
}}
|
||||
]
|
||||
}}
|
||||
"""
|
||||
raw_response = ask_ollama(
|
||||
prompt,
|
||||
system_prompt="Ты — JSON API. Выдавай ТОЛЬКО валидный JSON без markdown-разметки."
|
||||
)
|
||||
mapping = {}
|
||||
try:
|
||||
match = re.search(r'\{.*\}', raw_response, re.DOTALL)
|
||||
if match:
|
||||
json_str = match.group(0)
|
||||
json_str = re.sub(r'\}\s*[^}\]]*$', '}', json_str)
|
||||
data = json.loads(json_str)
|
||||
for item in data.get("verified_matches", []):
|
||||
scud_f = item.get("scud_fio")
|
||||
staff_f = item.get("staff_fio")
|
||||
warn = item.get("warning", "Точное совпадение (без опечаток)")
|
||||
if scud_f and staff_f:
|
||||
mapping[scud_f] = {"staff_fio": staff_f, "warning": warn}
|
||||
except Exception as e:
|
||||
print(f"[!] Ошибка разбора JSON от ИИ при сверке опечаток: {e}")
|
||||
|
||||
return mapping
|
||||
Reference in New Issue
Block a user