############################################################################### # GLPI AI STACK - GEMEINSAME .ENV # # Diese Datei hat zwei Aufgaben: # # 1. Docker Compose verwendet sie zur Variablenersetzung: # ${KB_DATA_PATH:-./knowledge} # ${AGENT_PORT:-7080} # usw. # # 2. Der GLPI AI Agent lädt sie über: # env_file: # - .env # # Hinweise: # - Boolean: true | false # - Zeitangaben: 30s, 5m, 2h, 72h # - Scores: 0.0 bis 1.0 # 0.70 = 70 % # - Listen: komma-separiert, möglichst ohne Leerzeichen # # relative Host-Pfade wie ./knowledge2 beziehen sich auf das Compose-Projekt. # Pfade innerhalb des Agent-Containers sollten absolut angegeben werden. ############################################################################### ############################################################################### # 01. DOCKER COMPOSE - PORTS ############################################################################### # WebUI / API / Diagnose-Cockpit des GLPI AI Agents. # Aufruf normalerweise: # http://:7080 AGENT_PORT=7080 # Knowledge-Base-Suchoberfläche. KB_SEARCH_PORT=7081 # Knowledge-Base-Administration. KB_EDITOR_PORT=7082 ############################################################################### # 02. DOCKER COMPOSE - GEMEINSAME DATENVERZEICHNISSE ############################################################################### # Zentrale Knowledge Base auf dem Docker-Host. # # Dieses Verzeichnis wird gemeinsam verwendet von: # - Agent read-only # - KB Editor read-write # - KB Search read-only # # Wichtig: # In der compose.yml sollten ALLE drei Dienste KB_DATA_PATH verwenden. KB_DATA_PATH=./knowledge # Backups des Knowledge-Base-Editors. KB_BACKUP_PATH=./backups # Staging-Bereich für neue bzw. KI-unterstützt erzeugte KB-Artikel. KB_STAGING_PATH=./staging ############################################################################### # 03. KNOWLEDGE-BASE WEBANWENDUNGEN ############################################################################### # --------------------------------------------------------------------------- # KB EDITOR # --------------------------------------------------------------------------- EDITOR_TITLE=KB Administration EDITOR_SUBTITLE=Wissensbasis verwalten # Optionaler Basic-Auth-Zugang des Editors. # # Leer bedeutet je nach Anwendungskonfiguration keine Basic-Auth-Anmeldung. # Für produktiven Betrieb sollten Benutzername und Passwort gesetzt werden. EDITOR_AUTH_USER= EDITOR_AUTH_PASSWORD= # --------------------------------------------------------------------------- # KB SEARCH # --------------------------------------------------------------------------- SEARCH_TITLE=Stadt Hilden - KB-Datenbank SEARCH_SUBTITLE=Interne Lösungsdatenbank SEARCH_AUTH_USER= SEARCH_AUTH_PASSWORD= # Intervall, in dem die Suchanwendung die KB-Dateien erneut einliest. # # Beispiele: # 30s # 60s # 5m AUTO_RELOAD_INTERVAL=60s ############################################################################### # 04. KNOWLEDGE-BASE WEBANWENDUNGEN - OLLAMA ############################################################################### # KI-Fallback der KB-Anwendungen. # # HINWEIS: # Diese Einstellung betrifft kb-editor / kb-search. # Der GLPI AI Agent besitzt unabhängig davon seine eigene Ollama-Konfiguration. AI_FALLBACK_ENABLED=true # Ollama-Adresse für kb-editor / kb-search innerhalb des Compose-Netzwerks. # # Nicht mit OLLAMA_URL des Agents verwechseln. OLLAMA_BASE_URL=http://ollama:11434 # Chat-Modell. # # Diese Variable wird aktuell sowohl von den KB-Anwendungen als auch vom # Agenten verwendet. Dadurch verwenden alle Anwendungen dasselbe Modell. OLLAMA_MODEL=qwen3:8b # Gemeinsamer Timeout. OLLAMA_TIMEOUT=10m # Maximale parallele Ollama-Aufrufe. # # Bei einer einzelnen GPU bzw. begrenzten Ressourcen ist 1 ein guter # Ausgangswert. OLLAMA_MAX_CONCURRENT=1 # Soll ein vom KB-System erzeugter Staging-Artikel automatisch mit # auto_reply=true erzeugt werden? # # Sicherer Ausgangswert: # false OLLAMA_STAGING_AUTO_REPLY=false # min_score für erzeugte Staging-Artikel. OLLAMA_STAGING_MIN_SCORE=0.70 ############################################################################### # 05. GLPI AI AGENT - ALLGEMEINER BETRIEB ############################################################################### # true: # Der Agent analysiert vollständig, schreibt aber keine Änderungen nach GLPI. # # false: # Durch die Policy freigegebene Aktionen werden tatsächlich ausgeführt. # # Für Tests / Einführung: # true DRY_RUN=true # Mögliche Werte: # debug # info # warn # error LOG_LEVEL=info # HTTP-Listener INNERHALB des Agent-Containers. # # AGENT_PORT oben bestimmt dagegen den veröffentlichten Host-Port. HTTP_ADDR=:7080 # Persistentes Verzeichnis IM Container. # # Compose mountet: # agent-data:/app/data # # Enthält unter anderem: # - Knowledge-Index # - Audit/Run-Daten # - Category Learning # - Managed Knowledge # - GLPI-KB-Cache DATA_DIR=/app/data ############################################################################### # 06. AGENT WEBUI / API / DIAGNOSE ############################################################################### # Benutzer für Agent-Dashboard, Knowledge-Verwaltung und Diagnose-Cockpit. WEB_USERNAME=admin WEB_PASSWORD= # false: # Anmeldung erforderlich. # # true: # Weboberfläche ohne Authentifizierung erreichbar. # # In Produktion normalerweise false. WEB_ALLOW_ANONYMOUS=false # TrustedNet-Kennzeichnung vor automatisch ausgewählten Antworten. # # true: # TrustedNet-KI-Badge wird vor Anrede und Antwort eingefügt. # # false: # keine KI-Kennzeichnung. AI_CONTENT_LABEL_ENABLED=true ############################################################################### # 07. OPTIONALER GLPI-WEBHOOK ############################################################################### # Optionales Shared Secret für eingehende GLPI-Webhooks. # # Der Absender muss dasselbe Secret z. B. über: # X-Webhook-Secret # übertragen. # # Leer lassen, falls kein Webhook verwendet wird. WEBHOOK_SECRET= ############################################################################### # 08. GLPI 11 / HIGH-LEVEL API / OAUTH2 ############################################################################### GLPI_URL=https://glpi.example.com # Verwendete GLPI High-Level API. GLPI_API_VERSION=v2.3 # OAuth2 Service Account. GLPI_CLIENT_ID= GLPI_CLIENT_SECRET= GLPI_USERNAME=ai GLPI_PASSWORD= # Numerische GLPI-Benutzer-ID des Service-Accounts. # # Wird unter anderem benötigt, um Agent-Followups von menschlichen # Followups unterscheiden zu können. GLPI_AGENT_USER_ID=999 # Nur für lokale Testsysteme ohne TLS. # # Produktion: # false GLPI_ALLOW_INSECURE_HTTP=false ############################################################################### # 09. GLPI TICKET-POLLING ############################################################################### # Fail-closed Whitelist erlaubter GLPI-Ticketstatus. # # Beispiel: # 1 # 1,2 # # Status 1 entspricht typischerweise "Neu". GLPI_ALLOWED_STATUS_IDS=1 # Polling-Intervall. GLPI_POLL_INTERVAL=30s # Maximale Anzahl Tickets pro Poll. GLPI_POLL_LIMIT=50 # Optionale serverseitige Vorfilterung. # # Die Agent-Policy prüft GLPI_ALLOWED_STATUS_IDS anschließend trotzdem selbst. # # Änderungen der Syntax immer gegen /api.php/doc der eigenen GLPI-Instanz # prüfen. GLPI_TICKET_FILTER=status.id==1 # HTTP-Timeout für GLPI-Aufrufe. GLPI_TIMEOUT=20s ############################################################################### # 10. GLPI AI AGENT - OLLAMA ############################################################################### # Ollama-Adresse aus Sicht des Agent-Containers. OLLAMA_URL=http://ollama:11434 # OLLAMA_MODEL ist bereits oben im gemeinsamen Compose-/Ollama-Bereich gesetzt: # OLLAMA_MODEL=qwen3:8b # Embedding-Modell für RAG. OLLAMA_EMBEDDING_MODEL=embeddinggemma # Modellspezifisches Retrieval-Prompting. # # Mögliche Werte: # # auto # Modell automatisch erkennen und passende Retrieval-Prompts verwenden. # Für embeddinggemma empfohlen. # # plain # keine modellspezifischen Retrieval-Prompts. KNOWLEDGE_EMBEDDING_PROFILE=auto # OLLAMA_TIMEOUT und OLLAMA_MAX_CONCURRENT sind bereits oben gesetzt. # Maximale Anzahl generierter Tokens für strukturierte Antworten. OLLAMA_NUM_PREDICT=768 # Wiederholungen bei fehlerhaftem / abgeschnittenem JSON. OLLAMA_JSON_RETRIES=1 # Ollama-Modell nach Benutzung im Speicher halten. # # Beispiele: # 5m # 10m # 30m OLLAMA_KEEP_ALIVE=10m # Thinking bei unterstützten Modellen deaktivieren. # # Für strukturierte Klassifikations-/Policy-Aufgaben empfohlen. OLLAMA_THINK=false ############################################################################### # 11. KNOWLEDGE BASE / RAG - BASIS ############################################################################### # Knowledge-Verzeichnis IM Agent-Container. # # Compose sollte hierhin KB_DATA_PATH mounten: # ${KB_DATA_PATH:-./knowledge}:/app/knowledge:ro KNOWLEDGE_DIR=/app/knowledge # Gesamtes Retrieval-System aktivieren. RAG_ENABLED=true ############################################################################### # 12. EXTERNE KNOWLEDGE-KATEGORIEN ############################################################################### # Verhalten bei String-/Fremdkategorien, z. B.: # # "AI-Staging" # "Outlook" # "E-Mail" # "Signatur" # # Mögliche Werte: # # unscoped # Artikel bleibt nutzbar. # Fremdkategorien können als Retrieval-Metadaten dienen. # # skip # Artikel mit unbekannten Kategorien überspringen. # # strict # unbekannte Kategorie als Fehler behandeln. # # Für eine gemeinsam mit anderen Anwendungen verwendete KB: # unscoped KNOWLEDGE_CATEGORY_MODE=unscoped # Optionales Mapping von Fremdkategorien auf GLPI-ITIL-Kategorie-IDs. # # Beispiel knowledge-category-map.json: # # { # "Outlook": 12, # "E-Mail": 12, # "Active Directory": 2, # "Security": [20,21] # } KNOWLEDGE_CATEGORY_MAP_FILE=/app/data/knowledge-category-map.json # Optional bestimmte KB-Dateien ignorieren. # # Beispiele: # KB-SEC-ATTCK-*.json # legacy-*.json,external-only-*.json # # Leer: # keine zusätzlichen Ignore-Regeln. KNOWLEDGE_IGNORE_GLOBS= ############################################################################### # 13. PERSISTENTER KNOWLEDGE-INDEX ############################################################################### # Mögliche Werte: # # incremental # Persistent gespeicherten Index sofort verwenden. # Neue/geänderte Dateien anschließend inkrementell nachziehen. # Für Produktion empfohlen. # # rebuild # vollständigen Index neu erzeugen. # # readonly # nur bestehenden Index verwenden, keine Änderungen übernehmen. KNOWLEDGE_INDEX_MODE=incremental # Anzahl Texte pro Embedding-Batch. KNOWLEDGE_EMBED_BATCH_SIZE=64 # Intervall für neue/geänderte/gelöschte Dateien. # # Beispiele: # 30s # 1m # 5m # # 0: # keinen automatischen Hintergrundscan durchführen. KNOWLEDGE_INDEX_SCAN_INTERVAL=5m ############################################################################### # 14. RETRIEVAL / DYNAMISCHE KANDIDATENAUSWAHL ############################################################################### # Unterhalb dieses Retrieval-Scores wird eine KB nicht als geeigneter # Kandidat betrachtet. # # Der Wert ist KEINE Wahrscheinlichkeit. KNOWLEDGE_RETRIEVAL_FLOOR=0.30 # Maximale Differenz zum besten Treffer. # # Beispiel: # # bester Treffer 0.82 # MAX_GAP 0.20 # dynamischer Cutoff 0.62 # # Ein Kandidat mit 0.55 würde dann nicht an die KI gesendet. KNOWLEDGE_CANDIDATE_MAX_GAP=0.20 # Maximale Anzahl Knowledge-Kandidaten, die tatsächlich an Ollama gehen. KNOWLEDGE_TOP_K=6 # Anzahl Kandidaten für Audit / Diagnose. # # Kann größer als KNOWLEDGE_TOP_K sein. KNOWLEDGE_AUDIT_TOP_K=10 ############################################################################### # 15. HYBRID-RETRIEVAL - RANKING-GEWICHTE ############################################################################### # Die Werte beschreiben die Gewichtung beim KB-Ranking. # # Summe aktuell: # 1.0 # # Fehlende Metadaten sollen nicht automatisch negativ bewertet werden. # Embedding-/Chunk-Semantik. KNOWLEDGE_WEIGHT_SEMANTIC=0.45 # Ticket-Betreff gegenüber KB-Titel. KNOWLEDGE_WEIGHT_TITLE=0.20 # Lexikalische / sprachliche Übereinstimmung. KNOWLEDGE_WEIGHT_LEXICAL=0.20 # KB-Keywords. KNOWLEDGE_WEIGHT_KEYWORDS=0.075 # Kategorie-/Lernsignal. KNOWLEDGE_WEIGHT_CATEGORY=0.075 ############################################################################### # 16. FINALE EVIDENZ FÜR AUTO-REPLY ############################################################################### # Mindestwert der FINALEN Evidenz. # # WICHTIG: # Das ist nicht der reine Retrieval-Score. # # Die finale Evidenz kombiniert: # - Retrieval # - AI Confidence # - Kategorieübereinstimmung KNOWLEDGE_MIN_SCORE=0.70 # Gewicht Retrieval. KNOWLEDGE_EVIDENCE_WEIGHT_RETRIEVAL=0.45 # Gewicht KI-Auswahl / KI-Confidence. KNOWLEDGE_EVIDENCE_WEIGHT_AI=0.35 # Gewicht Kategorieübereinstimmung. KNOWLEDGE_EVIDENCE_WEIGHT_CATEGORY=0.20 ############################################################################### # 17. KNOWLEDGE-CHUNKING ############################################################################### # Ungefähre Anzahl Wörter pro Dokument-Chunk. KNOWLEDGE_CHUNK_WORDS=160 # Überlappung benachbarter Chunks. KNOWLEDGE_CHUNK_OVERLAP_WORDS=30 # Maximale Anzahl Chunks pro KB-Dokument. KNOWLEDGE_MAX_CHUNKS_PER_DOC=24 # Maximale Anzahl Query-Chunks bei sehr langen Tickets. KNOWLEDGE_MAX_QUERY_CHUNKS=64 # Maximale Anzahl Kategorien im Kategorie-Prompt. CATEGORY_PROMPT_LIMIT=80 ############################################################################### # 18. KNOWLEDGE-QUELLEN / TRUST POLICY ############################################################################### # Nur Knowledge-Dokumente mit diesen source-Werten werden indexiert/gesucht. # # Beispiele: # internal-kb # glpi-kb # runbook # vendor-docs KNOWLEDGE_ALLOWED_SOURCES=internal-kb,glpi-kb,vendor-docs,vendor-docs-ms,vendor-docs-linux,vendor-docs-sec # Nur diese Quellen dürfen grundsätzlich automatische Antworten liefern. # # Muss eine Teilmenge von KNOWLEDGE_ALLOWED_SOURCES sein. # # Beispiel zum kompletten Abschalten: # KNOWLEDGE_AUTO_REPLY_SOURCES=none KNOWLEDGE_AUTO_REPLY_SOURCES=internal-kb,glpi-kb,vendor-docs,vendor-docs-ms,vendor-docs-linux,vendor-docs-sec # Webbasierte Bearbeitung von Agent-eigenen Knowledge-Artikeln. # # Diese werden unter: # DATA_DIR/knowledge-managed # gespeichert. # # Das statische KNOWLEDGE_DIR bleibt read-only. KNOWLEDGE_WEB_EDIT_ENABLED=true ############################################################################### # 19. GLPI KNOWLEDGE BASE CONNECTOR ############################################################################### # GLPI-interne Knowledge Base synchronisieren. GLPI_KB_ENABLED=true # auto: # Agent ermittelt die KnowbaseItem-Route aus /api.php/doc.json. GLPI_KB_PATH=auto # Optionaler serverseitiger GLPI-Filter. # # Leer: # alle für den Service Account sichtbaren Artikel, begrenzt durch LIMIT. GLPI_KB_FILTER= # Maximale Anzahl GLPI-KB-Artikel. GLPI_KB_LIMIT=500 # Synchronisationsintervall. GLPI_KB_SYNC_INTERVAL=10m # source-Wert importierter GLPI-KB-Artikel. GLPI_KB_SOURCE=glpi-kb # true: # GLPI-KB-Artikel können grundsätzlich Auto-Replies auslösen. # # Zusätzlich gelten weiterhin alle anderen Policy-Gates. GLPI_KB_AUTO_REPLY=true # Whitelist der GLPI KNOWLEDGE-BASE-Kategorie-IDs. # # WICHTIG: # Dies sind NICHT die ITIL-/Ticketkategorie-IDs. # # Mehrere Werte: # 1,2,7 GLPI_KB_AUTO_REPLY_CATEGORY_IDS=1 ############################################################################### # 20. HUMAN-IN-THE-LOOP / KATEGORIE-LERNEN ############################################################################### # Menschlich bestätigte/korrigierte Entscheidungen als Lernbeispiele verwenden. # # Der Agent lernt NICHT automatisch aus seinen eigenen unbestätigten # Entscheidungen. LEARNING_ENABLED=true # Maximale Anzahl gespeicherter Beispiele. LEARNING_MAX_EXAMPLES=500 # Maximale Beispiele pro Kategorie im Prompt. LEARNING_EXAMPLES_PER_CATEGORY=5 ############################################################################### # 21. KOMMUNIKATIONSPOLICY ############################################################################### # Erwartete Sprache von Auto-Reply-KBs. COMMUNICATION_LANGUAGE=de-DE # Erwarteter Kommunikationsstil. COMMUNICATION_STYLE=formal # Wird vor die Knowledge-Antwort gesetzt. COMMUNICATION_SALUTATION=Guten Tag, # Abschluss. COMMUNICATION_CLOSING=Mit freundlichen Grüßen COMMUNICATION_SIGNATURE=IT-Service ############################################################################### # 22. OPERATIONAL CONTEXT - GLOBAL ############################################################################### # Globaler Schalter für zusätzliche Betriebsinformationen: # - Changes # - Major Incidents # - Requester-Geräte # - Uptime Kuma CONTEXT_ENABLED=true # Timeout für Kontextabfragen. CONTEXT_TIMEOUT=12s # Mindestscore, ab dem Incident/Outage als für das Ticket relevant gilt. CONTEXT_RELEVANCE_MIN_SCORE=0.20 # true: # Fehler einer aktivierten Kontextquelle blockieren Auto-Reply. # # Fail-closed und für Produktion empfohlen. CONTEXT_BLOCK_AUTO_REPLY_ON_ERRORS=true # true: # relevante zentrale Störung blockiert individuelle Standardantwort. CONTEXT_BLOCK_AUTO_REPLY_ON_INCIDENT=true ############################################################################### # 23. GLPI CHANGE CALENDAR ############################################################################### CHANGE_CALENDAR_ENABLED=true # API-Route. GLPI_CHANGE_PATH=/Assistance/Change # Optionaler serverseitiger GLPI-Filter. GLPI_CHANGE_FILTER= # Maximale Anzahl geladener Changes. GLPI_CHANGE_LIMIT=100 # Betrachteter Zeitraum in der Vergangenheit. CHANGE_LOOKBACK=72h # Betrachteter Zeitraum in der Zukunft. CHANGE_LOOKAHEAD=24h ############################################################################### # 24. MAJOR INCIDENTS ############################################################################### # Major Incidents über GLPI-Tickets ermitteln. # # Erst aktivieren, wenn GLPI_MAJOR_INCIDENT_FILTER getestet wurde. MAJOR_INCIDENTS_ENABLED=false # Expliziter Filter für Tickets, die als Major Incident gelten. GLPI_MAJOR_INCIDENT_FILTER= GLPI_MAJOR_INCIDENT_LIMIT=20 ############################################################################### # 25. REQUESTER -> GERÄT / ASSET CONTEXT ############################################################################### # Zusätzlich zu direkt verknüpften Ticket-Assets Geräte des Requesters suchen. USER_DEVICE_CONTEXT_ENABLED=true # Asset-Routen. GLPI_USER_DEVICE_PATHS=/Assets/Computer # {{user_id}} wird vom Agenten ersetzt. GLPI_USER_DEVICE_FILTER_TEMPLATE=user.id=={{user_id}} # Maximale Anzahl Geräte je Suche. GLPI_USER_DEVICE_LIMIT=20 ############################################################################### # 26. UPTIME KUMA ############################################################################### # Globaler Schalter für Uptime-Kuma-Kontext. UPTIME_KUMA_ENABLED=false UPTIME_KUMA_URL=https://uptime.example.com # Mögliche Werte: # # metrics # authentifizierte Prometheus-Metrics. # # status_page # öffentliche/publizierte Statusseiten. UPTIME_KUMA_MODE=metrics # Nur in metrics erforderlich. UPTIME_KUMA_API_KEY= # Nur in status_page erforderlich. # # Mehrere Slugs: # it-services,network,applications UPTIME_KUMA_STATUS_PAGES=it-services UPTIME_KUMA_TIMEOUT=10s # Maximale Anzahl gleichzeitig berücksichtigter Probleme. UPTIME_KUMA_MAX_ISSUES=20 # Maintenance ebenfalls als Kontext berücksichtigen. UPTIME_KUMA_INCLUDE_MAINTENANCE=true ############################################################################### # 27. POLICY-GATES ############################################################################### # Automatische Kategorisierung zulassen. AUTO_CATEGORY=true # Automatische Antworten grundsätzlich zulassen. # # DRY_RUN=true verhindert trotzdem das tatsächliche Schreiben nach GLPI. AUTO_REPLY=true # Mindestconfidence der KI für Kategorieänderungen. CATEGORY_CONFIDENCE=0.70 # Mindestconfidence der KI für Antwortauswahl. # # Dies allein reicht NICHT für Auto-Reply. # Zusätzlich gelten unter anderem: # # - Knowledge-Evidenz # - Retrieval-Regeln # - Source Policy # - KB auto_reply # - Kommunikationspolicy # - Followup-Prüfung # - Kontext-/Incident-Regeln # - zweite Followup-Prüfung unmittelbar vor dem Schreiben REPLY_CONFIDENCE=0.70 ############################################################################### # 28. WORKER / QUEUE ############################################################################### # Maximale Anzahl wartender Jobs. QUEUE_SIZE=256 # Parallele Ticket-Worker. # # Darf größer als OLLAMA_MAX_CONCURRENT sein. # Ollama wird separat begrenzt. WORKERS=2