All checks were successful
release-tag / release-image (push) Successful in 11m0s
892 lines
36 KiB
Plaintext
892 lines
36 KiB
Plaintext
###############################################################################
|
||
# 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
|