eroha-agentapi / core /learning.py
Yermek68's picture
Create core/learning.py
d86715f verified
raw
history blame
3.15 kB
import json
import os
from collections import Counter
from datetime import datetime
PREFERENCES_FILE = "core/preferences.json"
def load_preferences():
"""Загружает личные предпочтения пользователя"""
if not os.path.exists(PREFERENCES_FILE):
return {"tone": "нейтральный", "depth": "средний", "themes": [], "updated": ""}
try:
with open(PREFERENCES_FILE, "r", encoding="utf-8") as f:
return json.load(f)
except Exception:
return {"tone": "нейтральный", "depth": "средний", "themes": []}
def save_preferences(prefs):
"""Сохраняет обновлённые предпочтения"""
os.makedirs(os.path.dirname(PREFERENCES_FILE), exist_ok=True)
prefs["updated"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with open(PREFERENCES_FILE, "w", encoding="utf-8") as f:
json.dump(prefs, f, ensure_ascii=False, indent=2)
def analyze_user_input(user_input):
"""Анализирует стиль и тему запроса"""
prefs = load_preferences()
text = user_input.lower()
# --- Определяем тональность ---
if any(word in text for word in ["объясни", "просто", "понятно"]):
prefs["tone"] = "дружелюбный"
elif any(word in text for word in ["детально", "подробно", "глубоко"]):
prefs["tone"] = "академический"
# --- Глубина ---
if len(user_input.split()) < 6:
prefs["depth"] = "поверхностный"
elif len(user_input.split()) > 15:
prefs["depth"] = "глубокий"
else:
prefs["depth"] = "средний"
# --- Темы ---
keywords = ["нейросеть", "ИИ", "философия", "история", "программирование", "квант", "человек"]
found = [k for k in keywords if k in text]
prefs["themes"].extend(found)
# --- Очищаем дубликаты ---
prefs["themes"] = [t for t, _ in Counter(prefs["themes"]).items()]
save_preferences(prefs)
return prefs
def adapt_answer(base_answer):
"""Модифицирует ответ под стиль пользователя"""
prefs = load_preferences()
tone = prefs.get("tone", "нейтральный")
depth = prefs.get("depth", "средний")
themes = ", ".join(prefs.get("themes", [])) or "общие темы"
if tone == "дружелюбный":
base_answer = "😊 " + base_answer.replace(";", ";\n") + "\n\n(Объяснил максимально просто!)"
elif tone == "академический":
base_answer += "\n📚 Этот ответ оформлен в научном стиле."
if depth == "глубокий":
base_answer += "\n💡 Добавил больше деталей, чтобы раскрыть тему основательно."
base_answer += f"\n\n🧩 Предпочтения: стиль — {tone}, глубина — {depth}, темы — {themes}"
return base_answer