caissaa23 commited on
Commit
21fc81d
·
verified ·
1 Parent(s): 65c10eb

Update chatbot_nuti.py

Browse files
Files changed (1) hide show
  1. chatbot_nuti.py +75 -79
chatbot_nuti.py CHANGED
@@ -1,12 +1,10 @@
1
- import json
2
  import random
 
3
  import os
4
  from datetime import datetime
5
 
6
  MEMORIA_FILE = "memoria_nuti.json"
7
 
8
- # ------------------ FUNCIONES DE MEMORIA ------------------ #
9
-
10
  def cargar_memoria():
11
  if os.path.exists(MEMORIA_FILE):
12
  with open(MEMORIA_FILE, "r", encoding="utf-8") as f:
@@ -15,91 +13,89 @@ def cargar_memoria():
15
 
16
  def guardar_memoria(memoria):
17
  with open(MEMORIA_FILE, "w", encoding="utf-8") as f:
18
- json.dump(memoria, f, indent=4, ensure_ascii=False)
19
-
20
- def recordar_usuario(email):
21
- memoria = cargar_memoria()
22
- return memoria.get(email, {"historial": [], "estado_emocional": "neutral"})
23
-
24
- def actualizar_memoria(email, entrada, respuesta, estado=None):
25
- memoria = cargar_memoria()
26
- if email not in memoria:
27
- memoria[email] = {"historial": [], "estado_emocional": "neutral"}
28
- memoria[email]["historial"].append({"pregunta": entrada, "respuesta": respuesta, "fecha": str(datetime.now())})
29
- if estado:
30
- memoria[email]["estado_emocional"] = estado
31
- guardar_memoria(memoria)
32
-
33
- # ------------------ BASE DE CONOCIMIENTO ------------------ #
34
-
35
- TEMAS_NUTRICION = {
36
  "desayuno": [
37
- "Un desayuno equilibrado con proteína y fruta mejora tu energía y concentración. 🍳🍓",
38
- "Evita los cereales ultraprocesados, opta por avena o yogurt natural con fruta.",
 
39
  ],
40
  "almuerzo": [
41
- "El almuerzo debe aportar energía sin pesadez. Incluye verduras, proteína y granos integrales. 🥗",
42
- "Recuerda no saltarte comidas, eso puede afectar tu metabolismo y tu ánimo.",
 
43
  ],
44
- "emociones": [
45
- "A veces comemos para calmar emociones. Tómate un momento para respirar y sentir. 🌿",
46
- "Tu cuerpo refleja tus emociones. Cuida tu mente tanto como tu alimentación. 💚",
 
47
  ],
48
- "motivacion": [
49
- "No se trata de ser perfecto, sino constante. Cada día cuenta. 🌞",
50
- "Tu cuerpo es un proyecto a largo plazo, no una tarea rápida.",
 
51
  ],
 
 
 
 
 
 
 
 
 
 
52
  }
53
 
54
- PALABRAS_CLAVE = {
55
- "ansiedad": "Cuando sientas ansiedad, respira profundo. A veces no es hambre, sino emoción no atendida.",
56
- "estrés": "Evita comer con prisa. El estrés afecta tu digestión y tu descanso.",
57
- "agua": "Beber suficiente agua regula tu cuerpo y mente. Un vaso cada hora es un buen hábito. 💧",
58
- "peso": "El peso no define tu valor. Enfócate en cómo te sientes y en tu bienestar integral.",
59
- "deporte": "Moverte todos los días, aunque sea poco, mejora tu humor y tu digestión. 💪",
60
- }
61
-
62
- RESPUESTAS_LIBRES = [
63
- "Cuéntame más sobre cómo te sientes con tu alimentación. 💬",
64
- "Eso suena interesante. ¿Qué cambios te gustaría hacer en tu rutina?",
65
- "Me gusta cómo piensas, tu enfoque hacia el bienestar es muy maduro. 🌿",
66
- "Recuerda: equilibrio, no perfección. Un paso a la vez es progreso. ✨"
67
  ]
68
 
69
- # ------------------ FUNCIÓN PRINCIPAL ------------------ #
70
-
71
- def buscar_respuesta(pregunta, email="usuario_desconocido"):
72
- texto = pregunta.lower()
73
- memoria_usuario = recordar_usuario(email)
74
- estado = memoria_usuario.get("estado_emocional", "neutral")
75
-
76
- # Detectar tono emocional del usuario
77
- if any(p in texto for p in ["triste", "mal", "solo", "ansioso", "estresado", "deprimido"]):
78
- estado = "triste"
79
- elif any(p in texto for p in ["feliz", "contento", "motivado", "bien", "tranquilo"]):
80
- estado = "positivo"
81
-
82
- # Buscar respuestas por tema
83
- for clave, respuestas in TEMAS_NUTRICION.items():
84
- if clave in texto:
85
- respuesta = random.choice(respuestas)
86
- actualizar_memoria(email, pregunta, respuesta, estado)
87
- return respuesta
88
-
89
- # Buscar por palabra clave específica
90
- for palabra, respuesta in PALABRAS_CLAVE.items():
91
- if palabra in texto:
92
- actualizar_memoria(email, pregunta, respuesta, estado)
93
- return respuesta
94
-
95
- # Si hay conversación previa, intenta mantener contexto
96
- if memoria_usuario["historial"]:
97
- ultima_respuesta = memoria_usuario["historial"][-1]["respuesta"]
98
- respuesta = f"Me alegra que sigamos hablando de esto. {random.choice(RESPUESTAS_LIBRES)} (Antes me dijiste: '{ultima_respuesta[:60]}...')"
99
- actualizar_memoria(email, pregunta, respuesta, estado)
100
- return respuesta
 
 
 
101
 
102
- # Respuesta por defecto
103
- respuesta = random.choice(RESPUESTAS_LIBRES)
104
- actualizar_memoria(email, pregunta, respuesta, estado)
105
  return respuesta
 
 
1
  import random
2
+ import json
3
  import os
4
  from datetime import datetime
5
 
6
  MEMORIA_FILE = "memoria_nuti.json"
7
 
 
 
8
  def cargar_memoria():
9
  if os.path.exists(MEMORIA_FILE):
10
  with open(MEMORIA_FILE, "r", encoding="utf-8") as f:
 
13
 
14
  def guardar_memoria(memoria):
15
  with open(MEMORIA_FILE, "w", encoding="utf-8") as f:
16
+ json.dump(memoria, f, ensure_ascii=False, indent=2)
17
+
18
+ # -------------------- RESPUESTAS BASE --------------------
19
+ TEMAS = {
20
+ "agua": [
21
+ "El agua es clave para todo tu cuerpo 💧, regula la digestión, la energía y hasta el ánimo.",
22
+ "Si te cuesta beber agua, puedes agregarle pepino, limón o menta para darle sabor. 🍋",
23
+ "Una buena meta: un vaso de agua antes de cada comida."
24
+ ],
 
 
 
 
 
 
 
 
 
25
  "desayuno": [
26
+ "El desayuno es el motor del día 🌞. Asegúrate de incluir proteína, fibra y fruta.",
27
+ "La avena con leche vegetal y frutas es una gran opción equilibrada.",
28
+ "Evita solo tomar café: tu cuerpo necesita energía real, no solo cafeína."
29
  ],
30
  "almuerzo": [
31
+ "A la hora de comer, piensa en colores: verde, naranja, rojo y blanco. 🌈",
32
+ "Agrega proteína magra y vegetales, y evita bebidas azucaradas.",
33
+ "Comer sin pantallas ayuda a digerir mejor y disfrutar los sabores."
34
  ],
35
+ "cena": [
36
+ "La cena debe ser ligera para descansar bien 🌙. Sopas, ensaladas o huevo son ideales.",
37
+ "Evita comer justo antes de dormir, deja pasar al menos 2 horas.",
38
+ "Si tienes hambre de noche, elige algo liviano como yogurt natural o fruta."
39
  ],
40
+ "ejercicio": [
41
+ "Después de entrenar, come proteína y algo de carbohidrato para recuperarte. 💪",
42
+ "Recuerda hidratarte antes, durante y después del ejercicio.",
43
+ "Un pequeño paseo después de comer mejora la digestión y el ánimo."
44
  ],
45
+ "peso": [
46
+ "El peso no define tu salud. Lo importante son tus hábitos y cómo te sientes. ❤️",
47
+ "Subir o bajar de peso lleva tiempo. Sé constante y paciente.",
48
+ "Evita compararte; cada cuerpo tiene su ritmo y belleza natural."
49
+ ],
50
+ "emociones": [
51
+ "Tus emociones influyen mucho en tu forma de comer. 🌿",
52
+ "Si comes por ansiedad, respira o da un paseo antes de decidir.",
53
+ "Comer con calma también alimenta tu mente."
54
+ ]
55
  }
56
 
57
+ MENSAJES_GENERICOS = [
58
+ "Tu cuerpo te habla todos los días: escúchalo sin juzgarlo. 💚",
59
+ "Pequeños cambios diarios crean grandes resultados.",
60
+ "Recuerda moverte, hidratarte y descansar. Son pilares del bienestar.",
61
+ "No busques perfección, busca equilibrio."
 
 
 
 
 
 
 
 
62
  ]
63
 
64
+ # -------------------- FUNCIÓN PRINCIPAL --------------------
65
+ def buscar_respuesta(usuario, pregunta):
66
+ pregunta = pregunta.lower().strip()
67
+ memoria = cargar_memoria()
68
+ if usuario not in memoria:
69
+ memoria[usuario] = {"historial": [], "temas": []}
70
+
71
+ historial = memoria[usuario]["historial"]
72
+ temas_previos = memoria[usuario]["temas"]
73
+
74
+ # Detectar tema nuevo
75
+ tema_detectado = None
76
+ for tema in TEMAS:
77
+ if tema in pregunta:
78
+ tema_detectado = tema
79
+ break
80
+
81
+ # Si se detecta tema, dar respuesta personalizada
82
+ if tema_detectado:
83
+ respuesta = random.choice(TEMAS[tema_detectado])
84
+ memoria[usuario]["temas"].append(tema_detectado)
85
+ else:
86
+ # Si no hay tema nuevo, responder en base al historial
87
+ if historial:
88
+ ultima = historial[-1]["pregunta"]
89
+ tema_ref = temas_previos[-1] if temas_previos else "nutrición"
90
+ respuesta = f"Como mencionaste antes sobre {tema_ref}, te recomiendo también que {random.choice(TEMAS.get(tema_ref, MENSAJES_GENERICOS))}"
91
+ else:
92
+ respuesta = random.choice(MENSAJES_GENERICOS)
93
+
94
+ historial.append({
95
+ "fecha": str(datetime.now()),
96
+ "pregunta": pregunta,
97
+ "respuesta": respuesta
98
+ })
99
 
100
+ guardar_memoria(memoria)
 
 
101
  return respuesta