Yermek68 commited on
Commit
d86715f
·
verified ·
1 Parent(s): 856a7f0

Create core/learning.py

Browse files
Files changed (1) hide show
  1. core/learning.py +75 -0
core/learning.py ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import os
3
+ from collections import Counter
4
+ from datetime import datetime
5
+
6
+ PREFERENCES_FILE = "core/preferences.json"
7
+
8
+
9
+ def load_preferences():
10
+ """Загружает личные предпочтения пользователя"""
11
+ if not os.path.exists(PREFERENCES_FILE):
12
+ return {"tone": "нейтральный", "depth": "средний", "themes": [], "updated": ""}
13
+ try:
14
+ with open(PREFERENCES_FILE, "r", encoding="utf-8") as f:
15
+ return json.load(f)
16
+ except Exception:
17
+ return {"tone": "нейтральный", "depth": "средний", "themes": []}
18
+
19
+
20
+ def save_preferences(prefs):
21
+ """Сохраняет обновлённые предпочтения"""
22
+ os.makedirs(os.path.dirname(PREFERENCES_FILE), exist_ok=True)
23
+ prefs["updated"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
24
+ with open(PREFERENCES_FILE, "w", encoding="utf-8") as f:
25
+ json.dump(prefs, f, ensure_ascii=False, indent=2)
26
+
27
+
28
+ def analyze_user_input(user_input):
29
+ """Анализирует стиль и тему запроса"""
30
+ prefs = load_preferences()
31
+ text = user_input.lower()
32
+
33
+ # --- Определяем тональность ---
34
+ if any(word in text for word in ["объясни", "просто", "понятно"]):
35
+ prefs["tone"] = "дружелюбный"
36
+ elif any(word in text for word in ["детально", "подробно", "глубоко"]):
37
+ prefs["tone"] = "академический"
38
+
39
+ # --- Глубина ---
40
+ if len(user_input.split()) < 6:
41
+ prefs["depth"] = "поверхностный"
42
+ elif len(user_input.split()) > 15:
43
+ prefs["depth"] = "глубокий"
44
+ else:
45
+ prefs["depth"] = "средний"
46
+
47
+ # --- Темы ---
48
+ keywords = ["нейросеть", "ИИ", "философия", "история", "программирование", "квант", "человек"]
49
+ found = [k for k in keywords if k in text]
50
+ prefs["themes"].extend(found)
51
+
52
+ # --- Очищаем дубликаты ---
53
+ prefs["themes"] = [t for t, _ in Counter(prefs["themes"]).items()]
54
+
55
+ save_preferences(prefs)
56
+ return prefs
57
+
58
+
59
+ def adapt_answer(base_answer):
60
+ """Модифицирует ответ под стиль пользователя"""
61
+ prefs = load_preferences()
62
+ tone = prefs.get("tone", "нейтральный")
63
+ depth = prefs.get("depth", "средний")
64
+ themes = ", ".join(prefs.get("themes", [])) or "общие темы"
65
+
66
+ if tone == "дружелюбный":
67
+ base_answer = "😊 " + base_answer.replace(";", ";\n") + "\n\n(Объяснил максимально просто!)"
68
+ elif tone == "академический":
69
+ base_answer += "\n📚 Этот ответ оформлен в научном стиле."
70
+
71
+ if depth == "глубокий":
72
+ base_answer += "\n💡 Добавил больше деталей, чтобы раскрыть тему основательно."
73
+
74
+ base_answer += f"\n\n🧩 Предпочтения: стиль — {tone}, глубина — {depth}, темы — {themes}"
75
+ return base_answer