131 lines
No EOL
5.4 KiB
Python
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 |