############################################################################### # GLPI AI AGENT # # Hinweise: # - Boolesche Werte: true | false # - Zeitangaben: z. B. 30s, 5m, 2h, 72h # - Prozent-/Scorewerte werden als 0.0 bis 1.0 angegeben: # 0.70 = 70 % # - Komma-separierte Listen ohne Leerzeichen schreiben. # # WICHTIG: # DRY_RUN=true verhindert Änderungen an GLPI. # Für die Einführungs-/Testphase unbedingt aktiviert lassen. ############################################################################### ############################################################################### # 01. ALLGEMEINER BETRIEB ############################################################################### # true: # Agent analysiert Tickets, schreibt aber keine Änderungen nach GLPI. # false: # freigegebene Kategorieänderungen und Antworten werden tatsächlich geschrieben. DRY_RUN=true # Logging-Level. # Mögliche Werte: # debug | info | warn | error LOG_LEVEL=info # HTTP-Listener für WebUI, API, /healthz und /readyz. HTTP_ADDR=:7080 # Persistente Laufzeitdaten: # - Audit-Logs # - Knowledge-Index # - Web-KB # - Lernbeispiele # - GLPI-KB-Cache DATA_DIR=./data KB_DATA_PATH=./knowledge KB_BACKUP_PATH=./backups KB_STAGING_PATH=./staging AGENT_PORT=7080 KB_SEARCH_PORT=7081 KB_EDITOR_PORT=7082 ############################################################################### # 02. WEBINTERFACE / AUTHENTIFIZIERUNG ############################################################################### # Dashboard/API-Benutzer. WEB_USERNAME=admin # Unbedingt ein langes zufälliges Passwort verwenden. WEB_PASSWORD= # false = Authentifizierung erforderlich. # true = WebUI ohne Login erreichbar. # # In Produktion dringend false lassen. # KNOWLEDGE_WEB_EDIT_ENABLED=true ist zusammen mit anonymem Zugriff nicht # empfehlenswert bzw. wird je nach Agent-Version abgelehnt. WEB_ALLOW_ANONYMOUS=false # Kennzeichnung automatisch ausgewählter KI-Inhalte. # true = TrustedNet-KI-Badge wird jeder automatischen Antwort vorangestellt. AI_CONTENT_LABEL_ENABLED=true ############################################################################### # 03. OPTIONALER GLPI-WEBHOOK ############################################################################### # Optionales Shared Secret für eingehende GLPI-Webhooks. # # Der Absender muss denselben Wert z. B. als: # X-Webhook-Secret # übertragen. # # Leer lassen, wenn kein Webhook verwendet wird. WEBHOOK_SECRET= ############################################################################### # 04. GLPI 11 / HIGH-LEVEL API / OAUTH2 ############################################################################### GLPI_URL=https://glpi.example.com # Aktuell verwendete High-Level-API-Version. GLPI_API_VERSION=v2.3 # OAuth2-Zugangsdaten des Service Accounts. GLPI_CLIENT_ID= GLPI_CLIENT_SECRET= GLPI_USERNAME=ai GLPI_PASSWORD= # Numerische GLPI-Benutzer-ID des Agent-Service-Accounts. # # Wichtig für die Erkennung: # "Ist dieses Followup vom Agenten selbst oder von einem Menschen?" GLPI_AGENT_USER_ID=999 # true erlaubt unverschlüsseltes HTTP. # Nur für lokale Entwicklungs-/Testsysteme verwenden. GLPI_ALLOW_INSECURE_HTTP=false # Nur Tickets mit diesen GLPI-Status-IDs werden verarbeitet. # # Beispiel: # 1 = nur "Neu" # 1,2 = mehrere erlaubte Status # # Fail-closed: lieber zunächst nur Status 1 erlauben. GLPI_ALLOWED_STATUS_IDS=1 # Wie oft GLPI auf neue/geänderte Tickets geprüft wird. GLPI_POLL_INTERVAL=30s # Maximal geladene Tickets pro Poll. GLPI_POLL_LIMIT=50 # Optionaler serverseitiger GLPI-Filter. # Die Agent-Policy prüft GLPI_ALLOWED_STATUS_IDS trotzdem nochmals selbst. # # Filter-Syntax gegen /api.php/doc der eigenen GLPI-Instanz prüfen. GLPI_TICKET_FILTER=status.id==1 # HTTP-Timeout für GLPI-API-Aufrufe. GLPI_TIMEOUT=20s ############################################################################### # 05. OLLAMA / LLM ############################################################################### # Innerhalb Docker Compose typischerweise: # http://ollama:11434 # # Bei nativem Betrieb: # http://localhost:11434 OLLAMA_URL=http://ollama:11434 # Chat-/Entscheidungsmodell. OLLAMA_MODEL=qwen3:8b # Embedding-Modell für Knowledge-Retrieval. OLLAMA_EMBEDDING_MODEL=embeddinggemma # Retrieval-Profil: # auto = erkennt z. B. embeddinggemma und verwendet passende Query-/Doc-Prompts # plain = keine modellspezifischen Retrieval-Prompts # # Empfohlen: KNOWLEDGE_EMBEDDING_PROFILE=auto # Maximale Dauer eines einzelnen Ollama-Requests. OLLAMA_TIMEOUT=10m # Maximale Anzahl generierter Tokens für strukturierte Entscheidungen. OLLAMA_NUM_PREDICT=768 # Anzahl Wiederholungen bei ungültigem/unvollständigem JSON. OLLAMA_JSON_RETRIES=1 # Modell nach Nutzung im Speicher halten. OLLAMA_KEEP_ALIVE=10m # Thinking bei unterstützten Modellen deaktivieren. # Für die strukturierte Ticketklassifikation normalerweise sinnvoll. OLLAMA_THINK=false # Maximale parallele Requests an Ollama. # # Bei einer GPU/einem Ollama-Slot zunächst 1 verwenden. OLLAMA_MAX_CONCURRENT=1 ############################################################################### # 06. KNOWLEDGE BASE / RAG - GRUNDKONFIGURATION ############################################################################### # Verzeichnis für statische / Git-verwaltete Knowledge-JSONs. KNOWLEDGE_DIR=./knowledge # false deaktiviert das komplette RAG/Embedding-System. RAG_ENABLED=true # Verhalten bei externen/String-Kategorien aus gemeinsam genutzten KB-Dateien. # # Mögliche Werte: # # unscoped # KB wird trotzdem geladen. # Fremdkategorien dienen weiterhin als Retrieval-Tags. # Nicht zuordenbare GLPI-Kategorien werden nicht erzwungen. # # skip # KB mit nicht zuordenbaren Kategorien komplett überspringen. # # strict # unbekannte Kategorie erzeugt einen Start-/Scanfehler. # # Für gemeinsam genutzte Datenbestände empfohlen: KNOWLEDGE_CATEGORY_MODE=unscoped # Optionales Mapping externer Kategorien auf GLPI-ITIL-Kategorie-IDs. # # Beispiel: # { # "Active Directory": 2, # "Outlook": 12, # "E-Mail": 12, # "Security": [20,21] # } KNOWLEDGE_CATEGORY_MAP_FILE=/app/data/knowledge-category-map.json # Dateien anhand von Glob-Mustern ignorieren. # # Beispiele: # KNOWLEDGE_IGNORE_GLOBS=KB-SEC-ATTCK-*.json # KNOWLEDGE_IGNORE_GLOBS=legacy-*.json,external-only-*.json # # Leer = nichts explizit ignorieren. KNOWLEDGE_IGNORE_GLOBS= ############################################################################### # 07. PERSISTENTER / INKREMENTELLER KNOWLEDGE-INDEX ############################################################################### # Mögliche Werte: # # incremental # vorhandenen persistenten Index sofort laden und Änderungen im Hintergrund # nachziehen. Für Produktion empfohlen. # # rebuild # Index vollständig neu aufbauen. # # readonly # nur vorhandenen Snapshot benutzen, keine Quelldateien aktualisieren. # KNOWLEDGE_INDEX_MODE=incremental # Anzahl Embedding-Inputs pro Batch. KNOWLEDGE_EMBED_BATCH_SIZE=64 # Intervall für Hintergrundprüfung auf neue/geänderte/gelöschte Knowledge-Dateien. # # 0 = kein automatischer Rescan. KNOWLEDGE_INDEX_SCAN_INTERVAL=5m ############################################################################### # 08. KNOWLEDGE-RETRIEVAL / KANDIDATENAUSWAHL ############################################################################### # Minimale Retrieval-Relevanz, damit eine KB überhaupt als plausibler Kandidat # betrachtet werden kann. # # KEINE Wahrscheinlichkeit. KNOWLEDGE_RETRIEVAL_FLOOR=0.30 # Maximaler Abstand zum besten Treffer. # # Beispiel: # bester Treffer = 0.82 # MAX_GAP = 0.20 # dynamischer Cutoff = 0.62 # # Nur KBs >= 0.62 werden in diesem Beispiel an die KI weitergegeben. KNOWLEDGE_CANDIDATE_MAX_GAP=0.20 # Maximale Anzahl KB-Kandidaten, die Ollama erhält. # # Das ist nur die Obergrenze. # Durch Floor und Max-Gap können es deutlich weniger sein. KNOWLEDGE_TOP_K=6 # Anzahl Kandidaten, die für Dashboard/Audit gespeichert werden. # Kann größer als KNOWLEDGE_TOP_K sein. KNOWLEDGE_AUDIT_TOP_K=10 ############################################################################### # 09. HYBRID-RETRIEVAL / RANKING ############################################################################### # Gewichtung des Kandidaten-Rankings. # # Summe sollte sinnvollerweise 1.0 ergeben. # Fehlende Metadaten werden nicht negativ gewertet; vorhandene Komponenten # werden intern entsprechend berücksichtigt. # Embedding-/Chunk-Semantik KNOWLEDGE_WEIGHT_SEMANTIC=0.45 # Ähnlichkeit Ticket-Betreff <-> KB-Titel KNOWLEDGE_WEIGHT_TITLE=0.20 # Lexikalische Übereinstimmungen / typische Helpdesk-Begriffe KNOWLEDGE_WEIGHT_LEXICAL=0.20 # Explizite KB-Keywords KNOWLEDGE_WEIGHT_KEYWORDS=0.075 # GLPI-Kategorie / bestätigte Lernsignale KNOWLEDGE_WEIGHT_CATEGORY=0.075 ############################################################################### # 10. FINALE KNOWLEDGE-EVIDENZ FÜR AUTO-REPLY ############################################################################### # Mindestwert der finalen Evidenz für eine automatische Antwort. # # WICHTIG: # Das ist NICHT mehr nur der rohe Retrieval-Score. # # Finale Evidenz berücksichtigt: # - Retrieval # - KI-Auswahl / KI-Confidence # - Kategorieübereinstimmung # KNOWLEDGE_MIN_SCORE=0.70 # Gewicht des Retrieval-Scores in der finalen Evidenz. KNOWLEDGE_EVIDENCE_WEIGHT_RETRIEVAL=0.45 # Gewicht der KI-Auswahl / Reply-Confidence. KNOWLEDGE_EVIDENCE_WEIGHT_AI=0.35 # Gewicht der Kategorieübereinstimmung. KNOWLEDGE_EVIDENCE_WEIGHT_CATEGORY=0.20 ############################################################################### # 11. KNOWLEDGE-CHUNKING ############################################################################### # Anzahl Wörter pro KB-Chunk. KNOWLEDGE_CHUNK_WORDS=160 # Überlappung zwischen benachbarten Chunks. KNOWLEDGE_CHUNK_OVERLAP_WORDS=30 # Maximale Anzahl Chunks pro Knowledge-Dokument. KNOWLEDGE_MAX_CHUNKS_PER_DOC=24 # Maximale Anzahl Chunks eines langen Tickets. KNOWLEDGE_MAX_QUERY_CHUNKS=64 # Begrenzung der Kategorien im Ollama-Prompt. # Verhindert übergroße Prompts bei sehr großen GLPI-Kategorieäumen. CATEGORY_PROMPT_LIMIT=80 ############################################################################### # 12. KNOWLEDGE-QUELLEN / TRUST POLICY ############################################################################### # Nur diese Source-Labels dürfen überhaupt durchsucht werden. # # Beispiel: # internal-kb,glpi-kb,vendor-docs KNOWLEDGE_ALLOWED_SOURCES=internal-kb,glpi-kb # Nur diese Quellen dürfen automatische Antworten auslösen. # # Muss Teilmenge von KNOWLEDGE_ALLOWED_SOURCES sein. # # "none" = Auto-Reply aus Knowledge-Quellen komplett deaktivieren. KNOWLEDGE_AUTO_REPLY_SOURCES=internal-kb,glpi-kb # Webbasierte CRUD-Verwaltung eigener Knowledge-Artikel. # # Web-Artikel liegen unter: # DATA_DIR/knowledge-managed/ # # KNOWLEDGE_DIR bleibt read-only / Git-verwaltet. KNOWLEDGE_WEB_EDIT_ENABLED=true ############################################################################### # 13. GLPI KNOWLEDGE BASE - READ-ONLY CONNECTOR ############################################################################### # GLPI Knowledge Base synchronisieren. GLPI_KB_ENABLED=true # auto: # KnowbaseItem-Route wird aus /api.php/doc.json ermittelt. # # Alternativ kann ein expliziter API-Pfad angegeben werden. GLPI_KB_PATH=auto # Optionaler serverseitiger Filter. # Leer = alle für den Service-Account sichtbaren KB-Artikel. GLPI_KB_FILTER= # Maximale Anzahl synchronisierter GLPI-KB-Artikel. GLPI_KB_LIMIT=500 # Synchronisationsintervall. GLPI_KB_SYNC_INTERVAL=10m # Source-Label synchronisierter GLPI-KBs. # Muss in KNOWLEDGE_ALLOWED_SOURCES stehen. GLPI_KB_SOURCE=glpi-kb # true: # freigegebene GLPI-KB-Artikel können Auto-Replies auslösen. # # false: # GLPI-KB wird nur für Recherche, RAG und Klassifizierung verwendet. GLPI_KB_AUTO_REPLY=true # Whitelist der GLPI-KNOWLEDGE-BASE-Kategorie-IDs. # # WICHTIG: # Das sind NICHT die GLPI-ITIL-/Ticketkategorie-IDs. # # Mehrere Werte: # 1,4,7 GLPI_KB_AUTO_REPLY_CATEGORY_IDS=1 ############################################################################### # 14. HUMAN-IN-THE-LOOP / LERNEN ############################################################################### # Menschlich bestätigte/korrigierte Kategorieentscheidungen als Lernbeispiele # verwenden. # # Die KI lernt NICHT automatisch aus ihren eigenen Entscheidungen. LEARNING_ENABLED=true # Maximale Anzahl gespeicherter Lernbeispiele. LEARNING_MAX_EXAMPLES=500 # Maximale Anzahl Beispiele je Kategorie, die in einen KI-Prompt übernommen werden. LEARNING_EXAMPLES_PER_CATEGORY=5 ############################################################################### # 15. KOMMUNIKATION MIT ENDNUTZERN ############################################################################### # Auto-Reply-KBs müssen zu Sprache und Kommunikationsstil passen. COMMUNICATION_LANGUAGE=de-DE COMMUNICATION_STYLE=formal # Wird vor den freigegebenen KB-Inhalt gesetzt. COMMUNICATION_SALUTATION=Guten Tag, # Abschluss der Antwort. COMMUNICATION_CLOSING=Mit freundlichen Grüßen COMMUNICATION_SIGNATURE=IT-Service ############################################################################### # 16. EXTERNER BETRIEBSKONTEXT ############################################################################### # Globaler Schalter für: # - Changes # - Major Incidents # - Benutzer/Geräte # - Uptime Kuma CONTEXT_ENABLED=true # Gemeinsames Timeout für Kontextabfragen. CONTEXT_TIMEOUT=12s # Minimale deterministische Relevanz zwischen Ticket und Incident/Outage. CONTEXT_RELEVANCE_MIN_SCORE=0.20 # Wenn eine aktivierte Kontextquelle fehlschlägt: # true = Auto-Reply sicherheitshalber blockieren. CONTEXT_BLOCK_AUTO_REPLY_ON_ERRORS=true # Bei relevantem Major Incident / zentraler Störung: # true = individuelle Standard-Auto-Replies blockieren. CONTEXT_BLOCK_AUTO_REPLY_ON_INCIDENT=true ############################################################################### # 17. GLPI CHANGE CALENDAR ############################################################################### CHANGE_CALENDAR_ENABLED=true # High-Level-API-Route. # Wird gegen /api.php/doc.json geprüft. GLPI_CHANGE_PATH=/Assistance/Change # Optionaler GLPI-Filter. GLPI_CHANGE_FILTER= # Maximal geladene Changes. GLPI_CHANGE_LIMIT=100 # Vergangener Zeitraum, der für Tickets berücksichtigt wird. CHANGE_LOOKBACK=72h # Zukünftiger Zeitraum. CHANGE_LOOKAHEAD=24h ############################################################################### # 18. MAJOR INCIDENTS ############################################################################### # false = Funktion vollständig deaktiviert. MAJOR_INCIDENTS_ENABLED=false # Muss bei aktiviertem Major-Incident-Modus bewusst gesetzt werden. # # Beispiel hängt von der eigenen GLPI-Struktur ab. # Gegen /api.php/doc bzw. die GLPI-Filtersemantik prüfen. GLPI_MAJOR_INCIDENT_FILTER= GLPI_MAJOR_INCIDENT_LIMIT=20 ############################################################################### # 19. BENUTZER -> GERÄT / ASSET-KONTEXT ############################################################################### # Zusätzlich zu direkt am Ticket verknüpften Assets die dem Requester # zugeordneten Geräte suchen. USER_DEVICE_CONTEXT_ENABLED=true # Eine oder mehrere Asset-Routen. # Mehrere Werte ggf. komma-separiert, sofern vom Agent unterstützt. GLPI_USER_DEVICE_PATHS=/Assets/Computer # {{user_id}} wird durch die jeweilige GLPI-Requester-ID ersetzt. # # Nicht durch eine feste Benutzer-ID ersetzen. GLPI_USER_DEVICE_FILTER_TEMPLATE=user.id=={{user_id}} GLPI_USER_DEVICE_LIMIT=20 ############################################################################### # 20. UPTIME KUMA ############################################################################### # false = keine Uptime-Kuma-Abfragen. UPTIME_KUMA_ENABLED=false UPTIME_KUMA_URL=https://uptime.example.com # Mögliche Modi: # # metrics # Authentifizierter Prometheus-/metrics-Endpunkt. # Für interne Systeme empfohlen. # # status_page # Veröffentlichte Uptime-Kuma-Statusseiten. # UPTIME_KUMA_MODE=metrics # Nur für metrics erforderlich. # Bei deaktiviertem Uptime Kuma am besten leer lassen. UPTIME_KUMA_API_KEY= # Nur für status_page erforderlich. # Mehrere Slugs komma-separiert: # it-services,network,applications UPTIME_KUMA_STATUS_PAGES=it-services UPTIME_KUMA_TIMEOUT=10s # Maximal an den Agenten übergebene aktuelle Probleme. UPTIME_KUMA_MAX_ISSUES=20 # Maintenance-Zustände ebenfalls als Kontext berücksichtigen. UPTIME_KUMA_INCLUDE_MAINTENANCE=true ############################################################################### # 21. POLICY-GATES ############################################################################### # Automatische Kategorisierung grundsätzlich zulassen. AUTO_CATEGORY=true # Automatische Endnutzerantworten grundsätzlich zulassen. # # DRY_RUN=true verhindert trotzdem das Schreiben. AUTO_REPLY=true # Minimale KI-Confidence für Kategorieempfehlungen. CATEGORY_CONFIDENCE=0.70 # Minimale KI-Confidence für Lösungsvorschläge. # # Zusätzlich gelten u. a.: # - Knowledge-Evidenz # - Source Policy # - Auto-Reply-Freigabe der KB # - kein vorhandenes Followup # - Kontext-/Incident-Regeln REPLY_CONFIDENCE=0.70 ############################################################################### # 22. WORKER / QUEUE ############################################################################### # Maximale Anzahl wartender Ticketjobs. QUEUE_SIZE=256 # Parallele Ticket-Worker. # # Darf größer als OLLAMA_MAX_CONCURRENT sein: # Ollama wird separat durch seine eigene Parallelitätsgrenze geschützt. WORKERS=2