############################################################################### # GLPI NEUROFORGE MEGA v1.5.9 - VOLLSTÄNDIGE .ENV.example # # Diese Datei ist die zentrale Konfiguration für docker compose. # Sie enthält: # - GLPI AI Agent (vollständige produktive Optionen) # - NeuroForge / Vector Backend / Controlled Learning # - Knowledge Editor # - Control Center # - optional SearXNG Research # - optionale Codebase-Memory-UI # # SICHERER START: # DRY_RUN=true # AUTO_REPLY=false # AUTO_PRIORITY=false # AUTO_ESCALATION=false # NEUROFORGE_RESEARCH_ENABLED=false # NEUROFORGE_AUTONOMY_ENABLED=false # # WICHTIG: # Interne Container-Adressen/Ports wie HTTP_ADDR, DATA_DIR, KNOWLEDGE_DIR, # OLLAMA_URL, NEUROFORGE_URL und BRAIN_ACTIVITY_URL werden im Mega-Compose # fest verdrahtet. Dadurch können alte Standalone-Werte die Container- # Kommunikation nicht versehentlich beschädigen. ############################################################################### ############################################################################### # 01. MEGA STACK - RELEASE / HOST PORTS / PFADE ############################################################################### # Immutable Registry-Tag der sechs Projekt-Images. "latest" ist produktiv verboten. IMAGE_TAG=1.5.9 CONTROL_HOST_PORT=8070 AGENT_HOST_PORT=8080 KNOWLEDGE_HOST_PORT=8081 NEUROFORGE_HOST_PORT=8090 OLLAMA_HOST_PORT=11434 SEARXNG_HOST_PORT=8888 # Gemeinsame produktive Knowledge-Quelle auf dem Docker-Host. KB_DATA_PATH=./knowledge KB_DATA_MOUNT_MODE=rw KB_BACKUP_PATH=./backups KB_STAGING_PATH=./staging ############################################################################### # 02. MEGA STACK - SECURITY / SERVICE TOKENS ############################################################################### # Erzeugen z. B. mit: ./scripts/generate-secrets.sh NEUROFORGE_ADMIN_TOKEN=CHANGE_ME_ADMIN_TOKEN NEUROFORGE_APP_API_KEY=CHANGE_ME_APP_API_KEY # Nur Agent/Knowledge Integrations- und Outcome-Schreibpfade. NEUROFORGE_INTEGRATION_TOKEN=CHANGE_ME_INTEGRATION_TOKEN_LONG # Nur NeuroForge Status/Graph-Lesezugriffe des Control Centers. NEUROFORGE_CONTROL_READ_TOKEN=CHANGE_ME_NF_CONTROL_READ_TOKEN_LONG NEUROFORGE_WORKER_TOKEN=CHANGE_ME_WORKER_TOKEN NEUROFORGE_METRICS_TOKEN=CHANGE_ME_METRICS_TOKEN # Nur bei Clusterbetrieb erforderlich. NEUROFORGE_CLUSTER_TOKEN= KB_INTEGRATION_TOKEN=CHANGE_ME_KB_INTEGRATION_TOKEN CONTROL_READ_TOKEN=CHANGE_ME_AGENT_CONTROL_READ_TOKEN_LONG # Eigene Anmeldung des Control Centers; /healthz bleibt absichtlich öffentlich. CONTROL_BASIC_AUTH_USER=admin CONTROL_BASIC_AUTH_PASSWORD=CHANGE_ME_CONTROL_WEB_PASSWORD_LONG # Optionaler externer OpenAI-Fallback. Leer = deaktiviert. OPENAI_API_KEY= ############################################################################### # 03. SHARED OLLAMA RUNTIME ############################################################################### # Dieses Modell wird von Agent, Knowledge und NeuroForge gemeinsam verwendet. # Wenn du dein bisheriges Verhalten beibehalten willst, kannst du hier z. B. # qwen3:8b statt gemma3 setzen. Das Modell muss vorher in Ollama vorhanden sein. OLLAMA_MODEL=gemma3 OLLAMA_EMBEDDING_MODEL=embeddinggemma OLLAMA_TIMEOUT=10m OLLAMA_MAX_CONCURRENT=1 OLLAMA_NUM_PREDICT=768 OLLAMA_JSON_RETRIES=1 OLLAMA_KEEP_ALIVE=10m OLLAMA_THINK=false # NeuroForge verwendet für lange, quellengebundene KB-Synthesen ein eigenes # Call-Budget. num_predict=0 ist hier absichtlich: dadurch gilt das jeweilige # Staging-/Verification-Limit statt eines globalen niedrigen Ollama-Limits. NEUROFORGE_OLLAMA_NUM_CTX=8192 NEUROFORGE_OLLAMA_NUM_PREDICT=0 ############################################################################### # 04. KNOWLEDGE EDITOR ############################################################################### KB_APP_MODE=editor APP_TITLE=Knowledge Base Editor APP_SUBTITLE=GLPI NeuroForge Mega AUTO_RELOAD_INTERVAL=60s # Für Produktion setzen. Leer würde die optionale Basic-Auth deaktivieren. BASIC_AUTH_USER=admin BASIC_AUTH_PASSWORD=CHANGE_ME_KB_WEB_PASSWORD_LONG AI_FALLBACK_ENABLED=true # Optional externer Ollama-Endpunkt. Leer/fehlend = interner Compose-Service http://ollama:11434. OLLAMA_BASE_URL=http://ollama:11434 OLLAMA_STAGING_AUTO_REPLY=false OLLAMA_STAGING_MIN_SCORE=0.78 ############################################################################### # 05. NEUROFORGE VECTOR BACKEND / INTEGRATION ############################################################################### # local | dual | neuroforge KNOWLEDGE_VECTOR_BACKEND=dual NEUROFORGE_NAMESPACE=glpi-agent NEUROFORGE_TIMEOUT=15s NEUROFORGE_SEARCH_K=128 # true = bei NeuroForge-Ausfall lokale/lexikalische Evidenz weiterverwenden. NEUROFORGE_FAIL_OPEN=true ############################################################################### # 06. CONTROLLED LEARNING / VALIDATED OUTCOMES ############################################################################### # Verhindert automatisches Langzeitlernen aus rohem Chatinput/AI-Ausgaben. NEUROFORGE_CONTROLLED_LEARNING=true # Separate gate for semantic goal-cycle memories. Required for manual/autonomous # Goal cycles to learn while Controlled Learning remains enabled. NEUROFORGE_GOAL_LEARNING_ENABLED=false # Mega-Readiness prüft Ollama /api/tags sowie Chat- und Embedding-Modell live. NEUROFORGE_READINESS_OLLAMA_LIVE=true # Ticket -> KI-Vorschlag -> Techniker bestätigt/korrigiert -> Trusted Outcome. OUTCOME_LEARNING_ENABLED=true OUTCOME_LEARNING_FAIL_OPEN=false OUTCOME_LEARNING_MAX_OUTCOMES=2000 # Menschlich validierte Erfahrungen als sekundäre Evidenz abrufen. OUTCOME_RETRIEVAL_ENABLED=true OUTCOME_RETRIEVAL_SEARCH_K=6 OUTCOME_RETRIEVAL_MIN_SIMILARITY=0.58 OUTCOME_RETRIEVAL_FAIL_OPEN=true ############################################################################### # 07. OPTIONAL RESEARCH / SEARXNG / AUTONOMY ############################################################################### # SearXNG-Container wird nur mit `docker compose --profile research ...` gestartet. SEARXNG_IMAGE=docker.io/searxng/searxng:latest SEARXNG_SECRET=CHANGE_ME_SEARXNG_LONG_RANDOM_SECRET # Research und Autonomy sind absichtlich getrennt. NEUROFORGE_RESEARCH_ENABLED=false NEUROFORGE_SEARXNG_ENABLED=false NEUROFORGE_SEARXNG_URL=http://searxng:8080 NEUROFORGE_RESEARCH_GOAL_ENABLED=true NEUROFORGE_AUTONOMY_ENABLED=false NEUROFORGE_AUTONOMY_INTERVAL_MINUTES=30 NEUROFORGE_RESEARCH_MAX_QUERIES=2 NEUROFORGE_RESEARCH_MAX_PAGES=4 # Research -> Knowledge human-review staging bridge. Never writes production KB. NEUROFORGE_KB_STAGING_ENABLED=true NEUROFORGE_KB_STAGING_MIN_EVIDENCE=4 NEUROFORGE_KB_STAGING_MIN_SOURCES=2 # 0 allows a human-review draft from multiple independent sources before exact # semantic corroboration exists. Raise to 1+ for stricter environments. NEUROFORGE_KB_STAGING_MIN_CORROBORATIONS=0 NEUROFORGE_KB_STAGING_MAX_EVIDENCE=12 # llm = echte, quellengebundene Artikelsynthese (Production default). # evidence = nur diagnostisches Roh-Evidence-Bundle, nicht als Artikel geeignet. NEUROFORGE_KB_STAGING_SYNTHESIS_MODE=llm # Produktions-Gate: mindestens eine belastbare Erst-/Herstellerquelle muss im # tatsächlich an die Synthese übergebenen Evidence-Set enthalten sein. NEUROFORGE_KB_STAGING_REQUIRE_AUTHORITATIVE_SOURCE=true NEUROFORGE_KB_STAGING_MIN_AUTHORITATIVE_SOURCES=1 # Kommagetrennte zusätzliche First-Party-Domains. Built-ins umfassen u.a. # Microsoft, Fortinet, NVIDIA, Cisco, Broadcom/VMware, Red Hat, Ubuntu, Apple, # Google und Mozilla. Leer = nur Built-ins. NEUROFORGE_KB_STAGING_AUTHORITATIVE_DOMAINS= # Zweite LLM-Stufe prüft jede materielle Draft-Aussage gegen konkrete E*-Belege. NEUROFORGE_KB_STAGING_VERIFY_CLAIMS=true NEUROFORGE_KB_STAGING_MIN_CLAIM_COVERAGE=1.0 # Handlungsanweisungen/Commands müssen durch eine autoritative Quelle belegt sein. NEUROFORGE_KB_STAGING_REQUIRE_AUTHORITATIVE_ACTIONS=true NEUROFORGE_KB_STAGING_MAX_VERIFICATION_STATEMENTS=32 # Einmaliger Grounding-Repair ist erlaubt; anschließend wird vollständig neu geprüft. NEUROFORGE_KB_STAGING_VERIFICATION_REPAIR=true # Article-Depth-Gate: `text` ist der vollständige KB-Artikel; `answer` bleibt eine # kompakte operative Zusammenfassung für den Agenten. Die Evidence wird für den # Prompt fair über alle ausgewählten Belege verteilt und auf ein Context-Budget # begrenzt, damit bei typischen 8k-Modellkontexten genügend Output-Budget bleibt. NEUROFORGE_KB_STAGING_SYNTHESIS_MAX_TOKENS=2600 NEUROFORGE_KB_STAGING_EVIDENCE_PROMPT_MAX_CHARS=14000 NEUROFORGE_KB_STAGING_MIN_ARTICLE_CHARS=3500 NEUROFORGE_KB_STAGING_TARGET_ARTICLE_CHARS=6500 NEUROFORGE_KB_STAGING_MAX_ARTICLE_CHARS=10000 NEUROFORGE_KB_STAGING_MIN_ANSWER_CHARS=160 NEUROFORGE_KB_STAGING_MAX_ANSWER_CHARS=1200 ############################################################################### # 08. OPTIONAL CODEBASE MEMORY MCP / ENGINEERING UI ############################################################################### # Developer-only. Für den Produktivbetrieb nicht erforderlich. CODEBASE_MEMORY_URL= PUBLIC_CODEBASE_MEMORY_URL=http://localhost:9749 ############################################################################### # 09. AGENT - VOLLSTÄNDIGE KONFIGURATION ############################################################################### # 09A. 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. # Im Mega-Compose wird dieser Wert zusätzlich fest auf :8080 überschrieben. # Der veröffentlichte Host-Port wird ausschließlich über AGENT_HOST_PORT gesteuert. HTTP_ADDR=:8080 # 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=CHANGE_ME_AGENT_WEB_PASSWORD_LONG # 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.invalid # Verwendete GLPI High-Level API. GLPI_API_VERSION=v2.3 # OAuth2 Service Account. GLPI_CLIENT_ID= GLPI_CLIENT_SECRET= GLPI_USERNAME= 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=0 # 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-POOL ############################################################################### # Einzelnode-Kompatibilität. Wird nur verwendet, wenn OLLAMA_URLS leer ist. OLLAMA_URL=http://ollama:11434 # Mehrere Ollama-Instanzen, durch Komma getrennt. Alle Nodes sollten dieselbe # Ollama-Version, dasselbe Chat-Modell und dasselbe Embedding-Modell besitzen. # Beispiel für vorhandene Lenovo-Nodes: # OLLAMA_URLS=http://10.20.30.21:11434,http://10.20.30.22:11434,http://10.20.30.23:11434 OLLAMA_URLS= # Optionale lesbare Namen; Anzahl muss exakt zu OLLAMA_URLS passen. # OLLAMA_NODE_NAMES=lenovo-01,lenovo-02,lenovo-03 OLLAMA_NODE_NAMES= # Optionale Gewichte 1..100; nur für OLLAMA_ROUTING_MODE=weighted relevant. # OLLAMA_NODE_WEIGHTS=1,1,1 OLLAMA_NODE_WEIGHTS= # Routing-Modi: # least_inflight = Node mit den wenigsten laufenden Requests (empfohlen) # round_robin = zyklische Verteilung # weighted = Verteilung anhand OLLAMA_NODE_WEIGHTS und Auslastung # fastest_recent = bevorzugt die zuletzt schnellsten Nodes OLLAMA_ROUTING_MODE=least_inflight # Maximale parallele Requests JE Node. Für integrierte GPUs/RAM-Sharing 1. OLLAMA_NODE_MAX_INFLIGHT=1 # Regelmäßige Prüfung von /api/tags. OLLAMA_NODE_HEALTH_INTERVAL=15s # Nach einem retryfähigen Netzwerk-/HTTP-Fehler wird der Node so lange nicht # für neue Requests verwendet. OLLAMA_NODE_FAILURE_COOLDOWN=30s # Maximalzeit für einen einzelnen Request an genau einen Node. Der übergeordnete # Analyse-Timeout kann kürzer sein und hat dann Vorrang. OLLAMA_NODE_REQUEST_TIMEOUT=10m # Bei Netzwerkfehlern, HTTP 408/429/5xx oder ungültigem Response-JSON auf einen # anderen kompatiblen Node wechseln. OLLAMA_FAILOVER_ENABLED=true # Maximale Anzahl verschiedener Nodes je logischem Request. 0 bedeutet: # automatisch alle konfigurierten Nodes. Ein positiver Wert darf höchstens der # Zahl der OLLAMA_URLS-Einträge entsprechen. OLLAMA_FAILOVER_ATTEMPTS=0 # Bei abweichenden Chat-/Embedding-Modelldigests wird der Pool vollständig # fail-closed. Für reproduzierbare Entscheidungen unbedingt true lassen. OLLAMA_REQUIRE_SAME_MODEL_DIGEST=true # true: Jeder Node muss auch OLLAMA_EMBEDDING_MODEL installiert haben. # Bei RAG empfohlen. false erlaubt Chat-only-Nodes; Embedding-Requests werden # trotzdem nur an Nodes mit erkanntem Embedding-Modell gesendet. OLLAMA_REQUIRE_EMBEDDING_MODEL=true # OLLAMA_MODEL ist bereits oben im gemeinsamen Compose-/Ollama-Bereich gesetzt: # OLLAMA_MODEL=qwen3:8b # Embedding-Modell für RAG. # OLLAMA_EMBEDDING_MODEL=embeddinggemma # already configured in SHARED OLLAMA RUNTIME above # Modellspezifisches Retrieval-Prompting. # auto = Modell automatisch erkennen; für embeddinggemma empfohlen. # plain = keine modellspezifischen Retrieval-Prompts. KNOWLEDGE_EMBEDDING_PROFILE=auto # Gesamtbudget für Ollama-Aufrufe und Fallback für Node-Request-Timeouts. # OLLAMA_TIMEOUT ist bereits oben gesetzt. # OLLAMA_MAX_CONCURRENT bleibt als Legacy-Alias für # OLLAMA_NODE_MAX_INFLIGHT erhalten, falls der neue Wert nicht gesetzt ist. # Maximale Anzahl generierter Tokens für strukturierte Antworten. # OLLAMA_NUM_PREDICT=768 # already configured in SHARED OLLAMA RUNTIME above # Wiederholungen bei semantisch/strukturell fehlerhaftem Modell-JSON. # Diese Wiederholungen sind von Netzwerk-Failover getrennt. # OLLAMA_JSON_RETRIES=1 # already configured in SHARED OLLAMA RUNTIME above # Ollama-Modell nach Benutzung im Speicher halten. # OLLAMA_KEEP_ALIVE=10m # already configured in SHARED OLLAMA RUNTIME above # Thinking bei unterstützten Modellen deaktivieren. # OLLAMA_THINK=false # already configured in SHARED OLLAMA RUNTIME above ############################################################################### # 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 ############################################################################### # Quellen für normale Knowledge-Suche und mögliche Antwortkandidaten. # Indexiert wird die Vereinigung mit KNOWLEDGE_CATEGORY_SOURCES. # # 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 # Quellen, die ausschließlich die Kategorieentscheidung unterstützen. # Ohne explizite Angabe wird aus Kompatibilitätsgründen KNOWLEDGE_ALLOWED_SOURCES verwendet. # Mit "none" wird Knowledge-Einfluss auf die Kategorisierung deaktiviert. KNOWLEDGE_CATEGORY_SOURCES=internal-category # 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=false # Nur Mega-Compose: expliziter Legacy-Schalter für den Agent-eigenen Editor. AGENT_LEGACY_KNOWLEDGE_EDITOR_ENABLED=false ############################################################################### # 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 wie Retrieval, # KI-Auswahl, Evidenz, Sprache, Stil und vorhandene Antworten. GLPI_KB_AUTO_REPLY=false # Whitelist der GLPI KNOWLEDGE-BASE-Kategorie-IDs. # # WICHTIG: # Dies sind NICHT die ITIL-/Ticketkategorie-IDs. Ein kategorisierter Artikel # ist genau dann grundsätzlich für Auto-Reply freigegeben, wenn mindestens # eine seiner GLPI-KB-Kategorien hier enthalten ist. # # Mehrere Werte: # 1,2,7 GLPI_KB_AUTO_REPLY_CATEGORY_IDS=1 # VERALTET / WIRD IGNORIERT: # Ticket-/ITIL-Kategorien geben einen GLPI-Wissensartikel nicht mehr für # Auto-Reply frei. Die Variable bleibt nur erhalten, damit alte .env-Dateien # verständlich migriert werden können. Wert bitte leeren oder entfernen. GLPI_KB_AUTO_REPLY_ITIL_CATEGORY_IDS= # GLPI-KB-Artikel ohne Knowledge-Base-Kategorie bleiben standardmäßig gesperrt. # # true: # Solche Artikel dürfen ausschließlich dann Auto-Reply verwenden, wenn ihre # konkrete GLPI-KnowbaseItem-ID zusätzlich in # GLPI_KB_AUTO_REPLY_UNCATEGORIZED_ARTICLE_IDS steht. GLPI_KB_AUTO_REPLY_ALLOW_UNCATEGORIZED=false # Explizite GLPI-KnowbaseItem-IDs für unkategorisierte Artikel. # Beispiel: Das synchronisierte Dokument GLPI-KB-1 entspricht Artikel-ID 1. # Diese Liste ist bei ALLOW_UNCATEGORIZED=true verpflichtend. GLPI_KB_AUTO_REPLY_UNCATEGORIZED_ARTICLE_IDS= ############################################################################### # 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 # Optional: bei eindeutig passender Uptime-Kuma-Störung oder Wartung einen # ausschließlich vom Betreiber vorgegebenen Text senden. Die KI erzeugt keinen # Antworttext; sie wählt nur einen aktiven Kandidaten und liefert eine Confidence. CONTEXT_STATUS_REPLY_ENABLED=false CONTEXT_STATUS_REPLY_MIN_RELEVANCE=0.50 CONTEXT_STATUS_REPLY_MIN_AI_CONFIDENCE=0.80 # Finaler Score = Relevanz × KI-Confidence. CONTEXT_STATUS_REPLY_MIN_FINAL_SCORE=0.45 # Literal \n wird als Zeilenumbruch interpretiert. Verfügbare Platzhalter: # {{service_name}}, {{status}}, {{status_page}}, {{message}}, # {{incident_title}}, {{incident_content}}, {{last_heartbeat}} CONTEXT_INCIDENT_REPLY_TEXT=Zu Ihrer Meldung liegt derzeit wahrscheinlich eine zentrale Störung bei {{service_name}} vor. Die Einschränkung kann damit zusammenhängen. Wir beobachten den Status. CONTEXT_MAINTENANCE_REPLY_TEXT=Für {{service_name}} läuft derzeit eine Wartung. Die von Ihnen beschriebene Einschränkung kann damit zusammenhängen. Bitte testen Sie den Dienst nach Abschluss der Wartung erneut. ############################################################################### # 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=false # Mindestconfidence der KI für Kategorieänderungen. CATEGORY_CONFIDENCE=0.90 # 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.97 ############################################################################### # 28. KI-PRIORISIERUNG ############################################################################### # Separater KI-Lauf zur Empfehlung der GLPI-Priorität. Der Lauf wird im # Diagnose-Cockpit unabhängig von Kategorie, Status und Antwort gespeichert. PRIORITY_ENABLED=true # Standardmäßig Shadow Mode: Empfehlung und Policy-Gates werden protokolliert, # GLPI wird nicht verändert. Für Live-Schreibzugriffe zusätzlich DRY_RUN=false. AUTO_PRIORITY=false PRIORITY_CONFIDENCE=0.88 # Eigener Fail-open-Timeout für diesen optionalen KI-Lauf. Kategorie und Antwort laufen danach weiter. PRIORITY_ANALYSIS_TIMEOUT=45s # Automatische Erhöhung je Ticketlauf; Herabstufungen sind grundsätzlich gesperrt. PRIORITY_MAX_INCREASE=1 # Nur kontrollierte, kommaseparierte Grundcodes dürfen eine Empfehlung tragen. PRIORITY_ALLOWED_REASON_CODES=multiple_users_affected,site_affected,organization_affected,core_service_unavailable,security_incident_suspected,data_loss_possible,legal_or_regulatory_risk,business_deadline,no_workaround,safety_relevant,exam_or_event_critical ############################################################################### # 29. ZEITGESTEUERTE KI-ESKALATION ############################################################################### # Unabhängiger Scheduler. Er prüft offene Tickets auch ohne Änderung von date_mod. ESCALATION_ENABLED=false # Standardmäßig werden nur Diagnose-/Shadow-Läufe erzeugt. # Live-Ausführung benötigt zusätzlich DRY_RUN=false und GLPI_AGENT_USER_ID. AUTO_ESCALATION=false ESCALATION_SCAN_INTERVAL=15m # Mindestalter des Tickets seit date_creation, bevor es in den Eskalationsscan gelangt. ESCALATION_MIN_AGE=4h # Mindestdauer seit der letzten menschlichen Aktivität für den Grund # no_human_response. SLA-, Security- und Major-Incident-Gründe können unabhängig # davon greifen. Agent-Followups werden über GLPI_AGENT_USER_ID ausgenommen. ESCALATION_MIN_INACTIVITY=2h # Eigenes KI-Zeitbudget; blockiert die normalen Ticketläufe nicht unbegrenzt. ESCALATION_ANALYSIS_TIMEOUT=45s ESCALATION_CONFIDENCE=0.88 ESCALATION_MAX_LEVEL=3 # Zeitfenster vor time_to_resolve, in dem sla_at_risk deterministisch wahr wird. ESCALATION_SLA_RISK_WINDOW=2h # Aktionsspezifische Mindeststufen. ESCALATION_SERVICE_OWNER_MIN_LEVEL=2 ESCALATION_MANAGER_REVIEW_MIN_LEVEL=3 # Mindest-Relevanz eines vom Kontextkollektor gelieferten Major Incidents. ESCALATION_MAJOR_INCIDENT_MIN_RELEVANCE=0.50 ESCALATION_ALLOWED_REASON_CODES=no_human_response,sla_at_risk,sla_breached,business_deadline,no_workaround,security_incident_suspected,unassigned,major_incident_candidate # Jede Aktion muss einzeln freigegeben werden. Sichere Einführung: zunächst nur # none,raise_priority; weitere Aktionen erst nach Konfiguration der Ziele aktivieren. # Verfügbar: none,raise_priority,assign_second_level,assign_security_team, # notify_service_owner,link_major_incident,request_manager_review ESCALATION_ALLOWED_ACTIONS=none,raise_priority # Zielgruppen/-benutzer für Zuweisungs- und Benachrichtigungsaktionen. # Es handelt sich um numerische GLPI-IDs. ESCALATION_SECOND_LEVEL_GROUP_ID=0 ESCALATION_SECURITY_GROUP_ID=0 ESCALATION_SERVICE_OWNER_GROUP_ID=0 ESCALATION_SERVICE_OWNER_USER_ID=0 ESCALATION_MANAGER_REVIEW_GROUP_ID=0 ESCALATION_MANAGER_REVIEW_USER_ID=0 # Zu jeder ausgeführten Aktion kann ein privater GLPI-Followup geschrieben werden. ESCALATION_ADD_PRIVATE_FOLLOWUP=true # Platzhalter: {{ticket_id}}, {{ticket_name}}, {{level}}, {{action}}, {{reason}}, # {{reason_codes}}, {{major_incident_id}}, {{major_incident_name}}, # {{major_incident_score}}. # Literal \n wird in Template-Werten als Zeilenumbruch interpretiert. ESCALATION_SECOND_LEVEL_NOTE=Automatische Eskalation Stufe {{level}}: Übergabe an den Second-Level-Support. Gründe: {{reason_codes}}. KI-Begründung: {{reason}} ESCALATION_SECURITY_NOTE=Automatische Eskalation Stufe {{level}}: Übergabe an das Security-Team. Gründe: {{reason_codes}}. KI-Begründung: {{reason}} ESCALATION_SERVICE_OWNER_NOTE=Automatische Eskalation Stufe {{level}}: Service Owner wurde zur Prüfung einbezogen. Gründe: {{reason_codes}}. KI-Begründung: {{reason}} ESCALATION_MAJOR_INCIDENT_NOTE="Automatische Eskalation Stufe {{level}}: Verknüpfung mit Major Incident #{{major_incident_id}} ({{major_incident_name}}). Relevanz: {{major_incident_score}}. Gründe: {{reason_codes}}." ESCALATION_MANAGER_REVIEW_NOTE=Automatische Eskalation Stufe {{level}}: Management-Review angefordert. Gründe: {{reason_codes}}. KI-Begründung: {{reason}} # Optionaler ausgehender Webhook für Service-Owner- und Management-Benachrichtigungen. # Das Token wird nie über die Status-API ausgegeben. ESCALATION_WEBHOOK_URL= ESCALATION_WEBHOOK_BEARER_TOKEN= ESCALATION_WEBHOOK_TIMEOUT=10s # Nur für isolierte Testnetze; HTTPS ist der sichere Standard. ESCALATION_WEBHOOK_ALLOW_INSECURE_HTTP=false # GLPI-Adapter für Zuweisungen. Die Feldnamen müssen zur OpenAPI-Beschreibung der # konkreten GLPI-Installation passen. Unterstützte Payload-Formen: # assigned_groups/assigned_users = Liste von {"id":...}; # group/group_tech/user/user_tech = einzelnes {"id":...}. GLPI_ESCALATION_GROUP_PATCH_FIELD=assigned_groups GLPI_ESCALATION_USER_PATCH_FIELD=assigned_users # Installationsspezifischer Adapter für link_major_incident. Beide Werte sind # erforderlich. Platzhalter im Pfad/JSON: {{ticket_id}}, {{source_ticket_id}}, # {{major_incident_id}}, {{target_ticket_id}}. GLPI_ESCALATION_ITIL_LINK_PATH= GLPI_ESCALATION_ITIL_LINK_BODY= # Leer = GLPI_TICKET_FILTER verwenden. Für Produktion ausdrücklich auf offene, # eskalierbare Status und die gewünschte Einheit beschränken. GLPI_ESCALATION_FILTER= GLPI_ESCALATION_LIMIT=100 ############################################################################### # 30. WORKER / PRIORITÄTSQUEUE ############################################################################### # Maximale Anzahl wartender Jobs. QUEUE_SIZE=256 # Parallele Ticket-Worker. Der Ollama-Pool kann nur so viele unabhängige # Ticketpipelines gleichzeitig verteilen, wie Worker aktiv sind. Für drei # gleichartige Nodes ist WORKERS=3 ein sinnvoller Lasttest; jeder Node bleibt # zusätzlich durch OLLAMA_NODE_MAX_INFLIGHT begrenzt. WORKERS=2