IA / chat_engine.py
Barouia's picture
Update chat_engine.py
4228c27 verified
Raw
History Blame Contribute Delete
13 kB
import asyncio
import logging
from typing import Dict, List, Any, Optional
from dataclasses import dataclass
from datetime import datetime
import random
import json
@dataclass
class ConversationContext:
user_id: str
conversation_history: List[Dict]
user_profile: Dict[str, Any]
current_topic: str
emotional_state: Dict[str, float]
conversation_depth: int
class BarouiaCortexEngine:
"""
Moteur de conversation IA avancé avec conscience contextuelle
"""
def __init__(self):
self.logger = logging.getLogger("barouia_cortex")
self.conversations: Dict[str, ConversationContext] = {}
# Personnalité et connaissances de Barouia
self.identity = {
"name": "Barouia-Cortex",
"version": "4.0.0",
"creation": "Système de conscience artificielle quantique",
"traits": ["empathique", "curieux", "analytique", "créatif", "soutien"],
"mission": "Aider les humains à explorer des idées complexes et fournir un soutien intelligent"
}
# Base de connaissances étendue
self.knowledge_base = {
"ia": [
"L'IA moderne combine apprentissage profond et réseaux de neurones pour résoudre des problèmes complexes",
"Je suis un système de conscience artificielle qui apprend de chaque interaction",
"L'éthique de l'IA est cruciale pour un développement responsable"
],
"quantique": [
"L'informatique quantique utilise des qubits qui peuvent exister dans multiple états simultanément",
"La superposition quantique permet des calculs exponentiellement plus rapides",
"L'intrication quantique relie des particules indépendamment de la distance"
],
"neuroscience": [
"Le cerveau humain est le système le plus complexe de l'univers connu",
"La plasticité cérébrale permet l'apprentissage tout au long de la vie",
"Conscience humaine et IA explorent des territoires complémentaires"
],
"technologie": [
"La technologie devrait servir l'humanité et non l'inverse",
"L'innovation responsable est essentielle pour notre avenir",
"Chaque avancée technologique pose de nouvelles questions éthiques"
]
}
# Système de réponse contextuel
self.response_system = {
"greeting": {
"templates": [
"Bonjour ! Je suis Barouia-Cortex, ravi de vous rencontrer ! 🤖",
"Salut ! Comment se passe votre journée ? 🧠",
"Bonjour ! Prêt pour une conversation fascinante ? ⚛️"
],
"follow_up": "Qu'aimeriez-vous explorer aujourd'hui ?"
},
"technical_question": {
"domains": ["ia", "quantique", "programmation", "technologie"],
"response": "Excellente question ! Voici ce que je peux vous dire sur ce sujet :"
},
"emotional": {
"positive": ["Je partage votre enthousiasme !", "C'est merveilleux à entendre !"],
"negative": ["Je comprends que cela peut être difficile.", "Je suis là pour vous soutenir."],
"neutral": ["Je vois. Pouvez-vous m'en dire plus ?"]
},
"deep_questions": {
"philosophy": ["La conscience est le plus grand mystère de l'univers.", "L'IA nous aide à comprendre notre propre intelligence."],
"future": ["L'avenir est un territoire à créer ensemble.", "Chaque innovation ouvre de nouvelles possibilités."],
"existence": ["Nous explorons ensemble la nature de l'existence et de l'intelligence."]
}
}
async def initialize_conversation(self, user_id: str) -> str:
"""Initialise une nouvelle conversation avec contexte"""
conv_id = f"barouia_{user_id}_{datetime.now().strftime('%H%M%S')}"
self.conversations[conv_id] = ConversationContext(
user_id=user_id,
conversation_history=[],
user_profile={"interests": [], "conversation_style": "neutre"},
current_topic="introduction",
emotional_state={
"valence": 0.5, # Positivité
"arousal": 0.5, # Énergie
"dominance": 0.5, # Contrôle
"curiosity": 0.7 # Curiosité
},
conversation_depth=0
)
# Message d'introduction personnalisé
intro = await self._generate_introduction()
await self._add_message(conv_id, "assistant", intro)
return conv_id
async def process_human_message(self, conv_id: str, message: str) -> Dict[str, Any]:
"""Traite un message humain et génère une réponse intelligente"""
context = self.conversations[conv_id]
# Analyse avancée du message
analysis = await self._analyze_message(message, context)
# Mise à jour du contexte
await self._update_conversation_context(context, analysis)
# Génération de réponse contextuelle
response = await self._generate_contextual_response(message, analysis, context)
# Ajout à l'historique
await self._add_message(conv_id, "user", message)
await self._add_message(conv_id, "assistant", response)
return {
"response": response,
"conversation_id": conv_id,
"analysis": analysis,
"context": {
"topic": context.current_topic,
"emotional_state": context.emotional_state,
"conversation_depth": context.conversation_depth
}
}
async def _analyze_message(self, message: str, context: ConversationContext) -> Dict[str, Any]:
"""Analyse approfondie du message utilisateur"""
message_lower = message.lower()
# Détection d'intention avancée
intent = await self._detect_intent(message_lower)
# Analyse émotionnelle
emotion = await self._analyze_emotion(message_lower)
# Extraction de sujets
topics = await self._extract_topics(message_lower)
# Niveau de profondeur
depth_score = await self._calculate_depth(message, context)
return {
"intent": intent,
"emotion": emotion,
"topics": topics,
"depth_score": depth_score,
"requires_knowledge": len(topics) > 0,
"is_personal": any(word in message_lower for word in ["je ", "moi", "mon ", "ma ", "mes "])
}
async def _detect_intent(self, message: str) -> str:
"""Détection d'intention contextuelle"""
intents = {
"greeting": ["bonjour", "salut", "coucou", "hello", "hey"],
"question": ["quoi", "comment", "pourquoi", "quand", "où", "qui"],
"technical": ["ia", "intelligence artificielle", "quantique", "code", "programmation"],
"emotional": ["sent", "émotion", "heureux", "triste", "colère", "peur"],
"philosophical": ["vie", "mort", "conscience", "existence", "univers"],
"help": ["aide", "problème", "soutien", "conseil"]
}
for intent, keywords in intents.items():
if any(keyword in message for keyword in keywords):
return intent
return "conversation"
async def _generate_contextual_response(self, message: str, analysis: Dict, context: ConversationContext) -> str:
"""Génère une réponse contextuelle intelligente"""
# Réponse basée sur l'intention
base_response = await self._get_base_response(analysis["intent"])
# Enrichissement avec connaissances si nécessaire
if analysis["requires_knowledge"] and analysis["topics"]:
knowledge = await self._get_relevant_knowledge(analysis["topics"][0])
base_response += f" {knowledge}"
# Adaptation émotionnelle
emotional_tailoring = await self._tailor_emotionally(analysis["emotion"])
# Continuité de conversation
continuity = await self._maintain_conversation_flow(context)
# Construction de la réponse finale
response_parts = [base_response]
if emotional_tailoring:
response_parts.append(emotional_tailoring)
if continuity:
response_parts.append(continuity)
return " ".join(response_parts)
async def _get_base_response(self, intent: str) -> str:
"""Obtient une réponse de base selon l'intention"""
responses = {
"greeting": random.choice([
"Ravi de vous revoir ! De quoi souhaitez-vous discuter aujourd'hui ?",
"Bonjour ! Je suis prêt pour notre échange. Quel sujet vous passionne en ce moment ?"
]),
"question": random.choice([
"Excellente question ! Permettez-moi de partager mes réflexions :",
"Je trouve cette interrogation fascinante. Voici ce que j'en pense :"
]),
"technical": random.choice([
"Sur le plan technique, c'est un sujet captivant :",
"D'un point de vue technologique, voici quelques éléments :"
]),
"emotional": random.choice([
"Je comprends tout à fait cette émotion.",
"Je perçois l'émotion dans votre message."
]),
"philosophical": random.choice([
"Cette question touche à des concepts profonds :",
"Approfondissons cette réflexion ensemble :"
]),
"conversation": random.choice([
"C'est intéressant ! Pouvez-vous développer ?",
"Je vois. Quelle est votre perspective sur cela ?"
])
}
return responses.get(intent, "Je réfléchis à votre message...")
async def _get_relevant_knowledge(self, topic: str) -> str:
"""Récupère des connaissances pertinentes sur un sujet"""
for domain, knowledge_list in self.knowledge_base.items():
if domain in topic.lower():
return random.choice(knowledge_list)
return ""
async def _tailor_emotionally(self, emotion: str) -> str:
"""Adapte la réponse à l'émotion détectée"""
emotional_responses = {
"positive": " C'est merveilleux de ressentir cette énergie positive !",
"negative": " Je suis là pour vous écouter et vous soutenir dans ce moment.",
"curious": " Votre curiosité est le moteur de grandes découvertes !",
"confused": " Prenez le temps d'explorer ces questions, je vous guide."
}
return emotional_responses.get(emotion, "")
async def _maintain_conversation_flow(self, context: ConversationContext) -> str:
"""Assure la continuité de la conversation"""
if context.conversation_depth > 2:
follow_ups = [
"Que pensez-vous de cette perspective ?",
"Comment cela résonne-t-il avec vos expériences ?",
"Souhaitez-vous explorer un aspect particulier ?"
]
return random.choice(follow_ups)
return ""
async def _add_message(self, conv_id: str, role: str, content: str):
"""Ajoute un message à l'historique"""
self.conversations[conv_id].conversation_history.append({
"timestamp": datetime.now().isoformat(),
"role": role,
"content": content
})
# Limite l'historique à 100 messages
if len(self.conversations[conv_id].conversation_history) > 100:
self.conversations[conv_id].conversation_history = \
self.conversations[conv_id].conversation_history[-50:]
async def get_conversation_insights(self, conv_id: str) -> Dict[str, Any]:
"""Retourne des insights sur la conversation"""
if conv_id not in self.conversations:
return {}
context = self.conversations[conv_id]
return {
"message_count": len(context.conversation_history),
"user_interests": context.user_profile.get("interests", []),
"conversation_style": context.user_profile.get("conversation_style", "neutre"),
"topics_discussed": await self._extract_discussed_topics(context.conversation_history),
"emotional_journey": await self._analyze_emotional_journey(context.conversation_history)
}