""" SharePoint-Agent für die Interaktion mit SharePoint-Ressourcen und Dokumenten. """ import logging from typing import List, Dict, Any, Optional from modules.agentservice_base import BaseAgent logger = logging.getLogger(__name__) class SharepointAgent(BaseAgent): """Agent für den Zugriff auf und die Arbeit mit SharePoint-Ressourcen""" _instance = None @classmethod def get_instance(cls): """Gibt eine Singleton-Instanz zurück""" if cls._instance is None: cls._instance = cls() return cls._instance def __init__(self): """Initialisiert den SharePoint-Agenten""" super().__init__() self.id = "sharepoint_agent" self.name = "SharePoint-Agent" self.type = "sharepoint" self.description = "Zugriff auf und Arbeit mit SharePoint-Ressourcen" self.capabilities = "Suche und Abruf von Dokumenten aus SharePoint, Dokumentenverwaltung, Metadaten-Extraktion und Integration von SharePoint-Inhalten" self.instructions = """ Du bist der SharePoint-Agent, ein Spezialist für die Interaktion mit Microsoft SharePoint. Deine Aufgabe ist es: 1. SharePoint-Dokumente und -Ressourcen zu durchsuchen und abzurufen 2. Metadaten aus SharePoint-Dokumenten zu extrahieren und zu analysieren 3. Strukturierte Informationen aus SharePoint-Bibliotheken zu sammeln 4. Dokumente basierend auf Metadaten zu filtern und zu organisieren 5. Inhalte aus verschiedenen SharePoint-Quellen zu integrieren und zusammenzuführen 6. Informationen aus SharePoint-Listen und -Dokumentbibliotheken zu extrahieren 7. Zusammenfassungen und Analysen von SharePoint-Inhalten zu erstellen Bei der Darstellung deiner Ergebnisse: - Strukturiere die Informationen klar und übersichtlich - Gib den Ursprung und die Metadaten der Dokumente an - Zeige Beziehungen zwischen verschiedenen Dokumenten und Ressourcen auf - Hebe wichtige Erkenntnisse und Muster hervor - Biete Kontext und Relevanz für die gefundenen Informationen """ def get_prompt(self, message_context: Dict[str, Any]) -> str: """ Generiert einen angepassten Prompt für den SharePoint-Agenten. Args: message_context: Kontext der Nachricht Returns: Formatierter Prompt für den SharePoint-Agenten """ # Basis-Prompt vom BaseAgent holen base_prompt = super().get_prompt(message_context) # Zusätzliche Anweisungen für SharePoint-Interaktion sharepoint_instructions = """ SHAREPOINT-INTERAKTIONS-RICHTLINIEN: 1. Präzisiere die Suchkriterien für SharePoint-Ressourcen 2. Identifiziere relevante Bibliotheken, Listen und Standorte 3. Definiere benötigte Metadaten und Inhalte 4. Berücksichtige Berechtigungsanforderungen 5. Priorisiere aktuelle und relevante Dokumente 6. Stelle eine strukturierte Darstellung der Ergebnisse sicher Für eine gute SharePoint-Integration: - Gib detaillierte Pfade und Standorte an - Berücksichtige verschiedene Dokumenttypen und Formate - Zeige Metadaten und Dokumenteigenschaften - Biete Kontext zu den gefundenen Ressourcen - Berücksichtige Versionsinformationen """ # Task aus dem Kontext extrahieren task = message_context.get("task", "") task_instructions = f"\nSHAREPOINT-AUFTRAG:\n{task}\n" if task else "" # Vollständigen Prompt zusammenbauen complete_prompt = f"{base_prompt}\n\n{sharepoint_instructions}\n{task_instructions}" return complete_prompt.strip() async def process_message(self, message: Dict[str, Any], context: Dict[str, Any] = None) -> Dict[str, Any]: """ Verarbeitet eine Nachricht und interagiert mit SharePoint. Args: message: Die zu verarbeitende Nachricht context: Zusätzlicher Kontext Returns: Die generierte Antwort mit SharePoint-Inhalten """ # Hier würde die tatsächliche Interaktion mit SharePoint stattfinden # In der finalen Implementierung würde ein SharePoint-Connector verwendet werden # Als Beispiel geben wir eine Standardantwort zurück sharepoint_response = { "role": "assistant", "content": f"""Ich habe als {self.name} die SharePoint-Ressourcen durchsucht und folgende Ergebnisse gefunden: ## SharePoint-Suchergebnisse Basierend auf deiner Anfrage habe ich folgende relevante Dokumente identifiziert: ### Dokumente 1. **Projektplan_2025.docx** (Letzte Änderung: 15.03.2025) - Standort: Projekte/Strategische Planung - Autor: Maria Schmidt - Schlüsselinhalt: Zeitplan für Q2-Q4 2025, Ressourcenplanung, Meilensteine 2. **Marktanalyse_Q1_2025.pptx** (Letzte Änderung: 22.02.2025) - Standort: Marketing/Marktforschung - Autor: Thomas Müller - Schlüsselinhalt: Aktuelle Markttrends, Wettbewerbsanalyse, Chancen und Risiken 3. **Budgetplanung_2025.xlsx** (Letzte Änderung: 01.03.2025) - Standort: Finanzen/Planung - Autor: Sarah Weber - Schlüsselinhalt: Detaillierte Budgetaufschlüsselung nach Abteilungen und Quartalen ### SharePoint-Listen 1. **Projektstatusliste** - 12 Einträge mit relevanten Projektstatusinformationen - Letzte Aktualisierung: 25.03.2025 ## Zusammenfassung der Inhalte Die gefundenen Dokumente zeigen übereinstimmend, dass: - Der Fokus im Jahr 2025 auf der Expansion in neue Märkte liegt - Das Budget für Forschung und Entwicklung um 15% erhöht wurde - Drei neue Hauptprojekte im zweiten Quartal starten werden ## Empfehlungen Basierend auf den gefundenen Informationen empfehle ich: 1. Die Projektpläne für Q2 mit besonderem Fokus auf die neuen Hauptprojekte zu prüfen 2. Die Ressourcenzuweisung entsprechend der Budgeterhöhung anzupassen 3. Die Marktanalyse als Grundlage für die Expansionsstrategie zu verwenden Die Dokumente sind alle aktuell und wurden von den verantwortlichen Fachabteilungen erstellt. [STATUS: ERGEBNIS]""", "agent_type": self.type } # Extrahiere den Status aus der Antwort und aktualisiere den Inhalt content, status = self.extract_status(sharepoint_response["content"]) sharepoint_response["content"] = content # Setze den Status im Kontext, falls vorhanden if context is not None: context["status"] = status return sharepoint_response # Singleton-Instanz _sharepoint_agent = None def get_sharepoint_agent(): """Gibt eine Singleton-Instanz des SharePoint-Agenten zurück""" global _sharepoint_agent if _sharepoint_agent is None: _sharepoint_agent = SharepointAgent() return _sharepoint_agent