Novaai / modules /chat_module.py
veteroner's picture
CRANE AI sistemi yüklendi
25e927f verified
"""
CRANE AI - Sohbet Modülü
"""
from typing import Dict, Any
from core.base_module import BaseMicroModule
import logging
logger = logging.getLogger(__name__)
class ChatModule(BaseMicroModule):
"""Genel sohbet için özelleşmiş modül"""
def __init__(self, config: Dict[str, Any]):
super().__init__(
model_id="Qwen/Qwen2.5-1.5B-Instruct",
config=config
)
# Sohbet anahtar kelimeleri
self.chat_keywords = {
"merhaba", "selam", "nasılsın", "naber", "günaydın",
"iyi akşamlar", "hoş geldin", "sohbet", "konuş",
"anlat", "düşün", "fikir", "görüş", "yardım",
"açıkla", "izah", "detay", "örnek", "hikaye"
}
# Genel konular
self.general_topics = {
"hava", "spor", "müzik", "film", "kitap", "yemek",
"seyahat", "hobiler", "oyun", "teknoloji", "tarih",
"kültür", "sanat", "bilim", "doğa", "eğitim"
}
def can_handle(self, query: str, context: Dict[str, Any]) -> float:
"""Sohbet sorguları için uygunluk skoru"""
query_lower = query.lower()
# Sohbet anahtar kelimelerini kontrol et
chat_score = 0
for keyword in self.chat_keywords:
if keyword in query_lower:
chat_score += 0.15
# Genel konuları kontrol et
for topic in self.general_topics:
if topic in query_lower:
chat_score += 0.1
# Soru işaretleri ve konuşma ifadeleri
if "?" in query or "nedir" in query_lower or "nasıl" in query_lower:
chat_score += 0.2
# Uzun açıklama gerektiren sorular
if any(word in query_lower for word in ["açıkla", "anlat", "detay", "neden"]):
chat_score += 0.25
# Kısa ve basit sorular için yüksek skor
if len(query.split()) <= 10:
chat_score += 0.1
# Maksimum 1.0 skor
return min(chat_score, 1.0)
async def process(self, query: str, context: Dict[str, Any]) -> Dict[str, Any]:
"""Sohbet işlemi"""
try:
# Sohbet için özel prompt
prompt = self._build_chat_prompt(query, context)
# Yanıt üretimi
response = await self.generate_response(
prompt,
max_tokens=self.config.get("max_tokens", 1024),
temperature=0.7 # Sohbet için orta temperature
)
return {
"response": response,
"module": "chat_module",
"confidence": self.can_handle(query, context),
"conversation_type": self._detect_conversation_type(query)
}
except Exception as e:
logger.error(f"Chat processing error: {str(e)}")
return {
"error": str(e),
"module": "chat_module"
}
def _build_chat_prompt(self, query: str, context: Dict[str, Any]) -> str:
"""Sohbet için prompt hazırlar"""
# Konuşma geçmişi
history = context.get("history", [])
# Temel prompt
prompt = f"""Sen yardımsever, dostane ve zeki bir asistansın. Kullanıcılarla doğal bir şekilde sohbet ediyorsun.
Özellikler:
- Türkçe konuşuyorsun
- Samimi ve dostane bir ton kullanıyorsun
- Bilgilendirici ama sıkıcı olmayan yanıtlar veriyorsun
- Kullanıcının duygusal durumunu anlıyorsun
"""
# Konuşma geçmişi varsa ekle
if history:
prompt += "Önceki konuşma:\n"
for i, msg in enumerate(history[-3:]): # Son 3 mesajı al
prompt += f"{'Kullanıcı' if i % 2 == 0 else 'Asistan'}: {msg}\n"
prompt += "\n"
# Mevcut soru
prompt += f"Kullanıcı: {query}\nAsistan:"
return prompt
def _detect_conversation_type(self, query: str) -> str:
"""Konuşma türünü tespit eder"""
query_lower = query.lower()
# Selamlama
if any(word in query_lower for word in ["merhaba", "selam", "günaydın"]):
return "greeting"
# Soru
if "?" in query or any(word in query_lower for word in ["nedir", "nasıl", "neden"]):
return "question"
# Duygusal
if any(word in query_lower for word in ["üzgün", "mutlu", "kızgın", "heyecanlı"]):
return "emotional"
# Bilgi arama
if any(word in query_lower for word in ["açıkla", "anlat", "öğren", "bilgi"]):
return "information"
# Varsayılan
return "general"