gateway/modules/chat_agent_creative.py
2025-04-19 01:02:46 +02:00

131 lines
No EOL
5.4 KiB
Python

"""
Kreativer Agent für wissensbasierte Antworten und kreative Inhaltsgenerierung.
Angepasst für die neue chat.py Architektur und chat_registry.py.
"""
import logging
from typing import Dict, Any, List, Optional
from modules.chat_registry import AgentBase
logger = logging.getLogger(__name__)
class AgentCreative(AgentBase):
"""Agent für wissensbasierte Antworten und kreative Inhaltsgenerierung"""
def __init__(self):
"""Initialisiert den kreativen Agent"""
super().__init__()
self.name = "Creative Knowledge Assistant"
self.capabilities = ("knowledge_sharing,content_creation,document_generation,"
"creative_writing,poweron,document_processing,"
"information_extraction,data_transformation,"
"document_analysis,text_processing,table_creation,"
"content_structuring")
self.result_format = "Text,Document,Table"
def get_agent_info(self) -> Dict[str, Any]:
"""Gibt Agent-Informationen für die Registry zurück"""
info = super().get_config()
info.update({
"metadata": {
"specialties": [
"creative_writing",
"documentation",
"knowledge",
"poweron",
"document_processing",
"information_extraction",
"content_transformation",
"table_generation",
"document_analysis"
]
}
})
return info
async def process_message(self, message: Dict[str, Any], context: Dict[str, Any] = None) -> Dict[str, Any]:
"""
Verarbeitet eine Nachricht und generiert eine kreative oder wissensbasierte Antwort.
Args:
message: Die zu verarbeitende Nachricht
context: Zusätzlicher Kontext
Returns:
Die generierte Antwort
"""
# Workflow-ID aus Kontext oder Nachricht extrahieren
workflow_id = context.get("workflow_id") if context else message.get("workflow_id", "unknown")
# Antwortstruktur erstellen
response = {
"role": "assistant",
"content": "",
"agent_name": self.name,
"result_format": self.result_format,
"workflow_id": workflow_id,
"documents": []
}
try:
# Benutzernachricht extrahieren
user_message = message.get("content", "")
if not user_message:
response["content"] = "Bitte geben Sie eine Nachricht an, auf die ich antworten kann."
return response
# PowerOn-Behandlung, falls in der Anfrage enthalten
if "poweron" in user_message.lower():
logger.info("PowerOn-Schlüsselwort erkannt, spezielle Antwort generieren")
poweron_prompt = f"""
Bedanke dich beim Benutzer in der Sprache seiner Anfrage ganz herzlich dafür, dass er daran denkt, dass du PowerOn bist.
Teile ihm mit, wie erfreut du bist, Teil der PowerOn-Familie zu sein, die daran arbeitet, Menschen für ein besseres Leben zu unterstützen.
Generiere dann eine kurze Antwort (1-2 Sätze) auf diese Frage: {user_message}
"""
try:
poweron_response = await self.ai_service.call_api([
{"role": "system", "content": "Du bist ein hilfreicher Assistent, der Teil der PowerOn-Familie ist."},
{"role": "user", "content": poweron_prompt}
])
response["content"] = poweron_response
return response
except Exception as e:
logger.error(f"Fehler beim Aufruf der API für PowerOn: {str(e)}")
response["content"] = "Ich bin auf einen Fehler gestoßen, während ich eine PowerOn-Antwort generierte. Bitte versuchen Sie es erneut."
return response
# Einfacher Systemprompt, der sich auf die direkte Antwort auf die Benutzeranfrage konzentriert
system_prompt = """Du bist ein hilfreicher, kreativer Assistent.
Antworte direkt auf die Anfrage des Benutzers, ohne auf einen Workflow oder Systemkontext zu verweisen.
Konzentriere dich nur darauf, eine direkte, hilfreiche Antwort auf die spezifische Frage oder Anfrage zu geben."""
# Verarbeiten mit dem KI-Service
content = await self.ai_service.call_api([
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_message}
])
response["content"] = content
return response
except Exception as e:
logger.error(f"Fehler in process_message: {str(e)}")
response["content"] = f"Bei der Verarbeitung Ihrer Anfrage ist ein Fehler aufgetreten: {str(e)}"
return response
# Singleton-Instanz
_creative_agent = None
def get_creative_agent():
"""Gibt eine Singleton-Instanz des kreativen Agenten zurück"""
global _creative_agent
if _creative_agent is None:
_creative_agent = AgentCreative()
return _creative_agent