Umgebungsvariablen konfigurieren
Die Konfiguration von PlantPulse AI beginnt bei einer einzigen Datei: /etc/kopens/plantpulse-ai.env.
sudo vi /etc/kopens/plantpulse-ai.env
/etc/kopens/Der Pfad lautet /etc/kopens/plantpulse-ai.env. Sie liegt nicht im Installationsverzeichnis
(/opt/kopens/plantpulse-ai-docker), sondern außerhalb des Repo-Baums, mit den Rechten 0600.
Die drei Produkte platform · ai · studio verwenden /etc/kopens/plantpulse-<product>.env nach derselben
Konvention.
🔴 Ändern Sie compose/.env nicht. Niemand liest sie — der Stack ändert sich dadurch nicht.
Bei *_PASSWORD · *_API_KEY aus der Tabelle unten genügt das Bearbeiten der Datei nicht. Werte, deren
maßgebliche Quelle das Serverkonto ist (wie bei Neo4j), müssen auch serverseitig geändert werden;
bei falscher Reihenfolge bleibt die Authentifizierung defekt. Verwenden Sie das dafür vorgesehene
Werkzeug — Passwörter und API-Schlüssel ändern.
Werte leben an drei Orten (2026.10)
Ab 2026.10 enthält die Host-env nur noch Werte, die nur für diese Installation gelten. Alles Übrige wird mit dem Release versioniert.
| Wo | Was | Wie ändern |
|---|---|---|
Host-env /etc/kopens/plantpulse-ai.env | Hardwareform (PP_HW_PROFILE) · Standortwerte (Sprache · Zeitzone · Zertifikatsname) · Plattformverbindung · Geheimnisse | Diese Datei bearbeiten und die Dienste neu erstellen |
Hardwareprofil compose/profiles/<모양>.env | Werte, die je Hardware abweichen — GPU-Anteile der drei vLLM-Instanzen und deren Summengrenze | Legt das Release fest |
| compose-Standardwerte | Produktstandards — Images · Modellnamen und -pfade · Dienst-Tuning | Legt das Release fest. Ein abweichender Wert in der Host-env überschreibt dies nur für diese Installation |
PP_HW_PROFILE ist entweder gb10 (GB10 · aarch64) oder g7e (AWS g7e · x86_64). Die Vorlage trägt dies bereits ein; fehlt der Wert oder
passt er nicht zur Architektur der Maschine, startet der Stack nicht.
In den Tabellen unten sind Variablen, die nicht in der Host-env-Vorlage stehen (also solche mit angegebenem Standardwert), compose-Standardwerte. Sie unverändert zu verwenden ist der Normalfall; nur bei einer Änderung tragen Sie diese Zeile mit einem abweichenden Wert in die Host-env ein.
Nach einer Wertänderung müssen die Dienste neu erstellt werden (docker restart liest die env nicht erneut ein).
cd /opt/kopens/plantpulse-ai-docker
bin/restart.sh
Das Startskript prüft vor dem Hochfahren mit bin/lint-env.sh zeilenweise, ob jede Zeile am richtigen Platz steht, und
startet nicht, wenn auch nur einer der folgenden Punkte zutrifft.
| Befund | Was |
|---|---|
release | Image-Referenzen — DOCKER_REGISTRY · DOCKER_NAMESPACE · UPSTREAM_* · *_IMAGE · PI_IMAGE_TAG_* · PP_IMAGE_TAG mit Wert |
profile | Hardwareprofil-Schlüssel (z. B. LLM_GPU_UTIL) |
redundant | Zeilen, die einen compose-Standardwert unverändert wiederholen |
derived | PP_HOST — wird auf dem Host aus PP_DATALAKE_ADMIN_URL berechnet |
unknown | Schlüssel, die nirgends gelesen werden |
renamed | Umbenannte Altschlüssel (CH_* → CO_*) — meldet nicht «löschen», sondern «verschieben» (siehe „Copilot-Konfiguration" unten) |
Außerdem stoppen eine ${…}-Ersetzung an Wertstellen, ein fehlendes PP_HW_PROFILE sowie eine Überschreitung der GPU-Anteile den Start. Werte, die von
compose-Standardwerten abweichen, gelten als beabsichtigtes Überschreiben und erzeugen nur einen Hinweis ([note]). Die Prüfung gibt je Zeile den Grund aus
und zusätzlich einen sed-Befehl (mit Backup), der alle zu löschenden Zeilen auf einmal entfernt. renamed-Zeilen landen nicht in der Löschliste; dafür wird separat ein sed ausgegeben,
das nur den Namen ändert. Werte werden nicht ausgegeben.
Zeilen, die nichts bewirken, wenn man sie stehen lässt, werden nur als [warn] gemeldet und blockieren den Start nicht — das sind in diesem Release
die noch gelesenen Alias-Altnamen (alias), Altzeilen mit demselben Wert wie der neue Name (oldname) und Zeilen mit demselben Wert, den der Video-/Audio-Schalter liefert (media-same).
Die Prüfung gibt dazu eine einzelne sed-Zeile aus, die all dies auf einmal bereinigt, und bin/doctor.sh zeigt diese Zeilen nicht als «bad», sondern separat als
«old or redundant lines». Liegt der Wert des Video-/Audio-Schalters außerhalb von true · false oder ist PI_INBOUND_API_KEY leer,
wird der Start gestoppt (siehe „Video- und Audio-Erfassung" · „Inbound-Schlüssel der Backend-Dienste" unten).
Images und Registry
🔴 Ab 2026.10 werden Image-Referenzen nicht mehr in die Host-env eingetragen. Welches Image mit welchem Tag startet, legt die
compose des Releases fest; steht eine der folgenden Variablen in der Host-env, stoppt die Vorstartprüfung den Start mit release. Grund: Auf dem Host
verbliebene Pins haben das nächste Release verdeckt, und beim Erstellen von Bundles sind sie dorthin ausgeblutet.
| Variable | Bedeutung |
|---|---|
DOCKER_REGISTRY · DOCKER_NAMESPACE | Bezugsort der eigenen Images (docker.kopens.io / pi) |
UPSTREAM_DOCKERHUB · UPSTREAM_NVCR | Interner Proxy, der externe Images stellvertretend bezieht |
PP_IMAGE_TAG | Standard-Tag des Satzes. In der Vorlage nur als leere Zeile vorhanden |
PI_IMAGE_TAG_<component> | Wenn nur eine Komponente auf einen anderen Snapshot gepinnt wird (Hotfix · Rollback). Es gibt dreizehn davon; das Suffix ist der Image-Name in Großbuchstaben (plantpulse-timeseries-insight-api → PI_IMAGE_TAG_TIMESERIES_INSIGHT_API) |
Muss im Notfall nur eine Komponente mit einem anderen Tag starten, geben Sie dies nicht über die Datei, sondern über die Shell-Umgebung nur für diesen Lauf mit. Der nächste normale Start fällt auf das Release-Tag zurück.
cd /opt/kopens/plantpulse-ai-docker
PI_IMAGE_TAG_RAG_API=<태그> bin/up.sh
In 2026.10 ist die Zahl der eigenen Images auf zwölf gestiegen — der Digital Thread (plantpulse-digital-thread-api) ist
neu hinzugekommen, und auch LightRAG und LiteLLM laufen nicht mehr mit den Original-Images, sondern mit von uns gekapselten Images
(pi/plantpulse-lightrag · pi/plantpulse-litellm). Auch diese beiden gekapselten Images folgen wie die übrigen eigenen Images dem
Monats-Tag (2026.10); zum Pinnen einzelner Images dienen PI_IMAGE_TAG_LIGHTRAG · PI_IMAGE_TAG_LITELLM.
Die gekapselten Basen sind LightRAG v1.5.7 · LiteLLM v1.103.0.
Mit Re-Release 3 von 2026.10 kam ein weiteres hinzu, also dreizehn — das Audio-Bibliotheks-Image pi/plantpulse-asr-audio für das Transkriptions-Serving
(ca. 130 MB; zum Pinnen PI_IMAGE_TAG_ASR_AUDIO). Es startet nur bei Installationen mit aktiviertem Video/Audio, ist im
Bundle aber immer enthalten (siehe „Video- und Audio-Erfassung" unten).
PP_IMAGE_TAG bleibt leerBleibt der Wert leer, wird das in compose fest eingetragene CalVer-Literal verwendet. Dieses Literal wird bei jedem Release von
bin/bump-version.sh fortgeschrieben, sodass der Release-Monat nur an einer einzigen Stelle steht. Mit gesetztem Wert stoppt
die Vorstartprüfung den Start.
YYYY.MM ist ein «bewegliches» TagEin erneutes Release im selben Monat überschreibt es. Um einen Stand festzunageln, geben Sie das Datums-Tag
(YYYY.MM-YYYYMMDD) über den oben beschriebenen Shell-Umgebungsweg mit — prüfen Sie dabei je Image, ob es existiert, und pinnen Sie nur vorhandene einzeln:
Es existiert nicht für alle, und ein pauschaler Wechsel lässt den Pull für fehlende Images scheitern.
Die Admin-Konsole besteht aus zwei Images — zum Pinnen dienen
PI_IMAGE_TAG_ADMIN_API und PI_IMAGE_TAG_ADMIN_WEB (sind beide leer,
folgen sie PP_IMAGE_TAG). Da sie aus demselben Commit stammen, müssen beim Einzel-Pinnen immer beide gemeinsam
gesetzt werden. Laufen sie auseinander, wird die Konsole mit einem Backend gepaart, das die von ihr aufgerufenen APIs nicht besitzt.
Sprache und Zeitzone
| Variable | Standardwert | Bedeutung |
|---|---|---|
PP_LANG | ko | Standardsprache der Installation — die Sprache an Stellen ohne Anfrage, etwa E-Mails · geplante Ausführungen · gespeicherte Beiträge. Auch die vom Server geschriebenen Automatisierungstexte — Zusammenfassungen · Durchlaufgründe · PDF-Abschnittsnamen · Excel-Blattnamen — erscheinen in dieser Sprache → Automatisierung — Berichtstitel. In der Copilot-Oberfläche haben die selbst gewählte Sprache → die Browsersprache Vorrang; dieser Wert gilt nur, wenn keine von beiden Koreanisch · Englisch ist → Oberflächensprache. Die Admin-Konsole folgt diesem Wert nur bei den Namen der Startseiten-Karten; alle übrigen Seiten richten sich nach der Sprachumschaltung auf der Anmeldeseite (English · 한국어) · Gültig sind nur ko und en. Ist der Wert leer oder ein anderer, starten die Dienste nicht (Standard der Installationsvorlage ko) |
PP_TZ | Asia/Seoul | Zeitzone der Installation — alle Dienste und das Host-OS verwenden diese eine. Das Installationsprogramm wählt sie aus (Reihenfolge: bei der Installation angegebener Wert → bereits in der env vorhandener Wert → Host-Zeitzone (sofern nicht UTC) → Asia/Seoul) |
LIGHTRAG_SUMMARY_LANGUAGE | Korean | Sprache, in der RAG Wissen zusammenfasst |
Die Zusammenfassungssprache ist bewusst von der Oberflächensprache getrennt: Auch wenn die Oberfläche auf Englisch läuft, ist der Korpus (SOPs Vor-Ort) häufig auf Koreanisch.
Was von der Plattform mitbenutzt wird
🔴 Der AI-Stack startet weder PostgreSQL noch Aster TSDB, Redis oder RustFS. Er nutzt die Plattforminstallation gemeinsam. Sind diese Werte falsch, startet AI zwar, speichert aber nichts.
Plattform-Zugangsdaten erhält der Container «beim Start»
Ab 2026.10 übergibt compose Konten, Passwörter und Ports der Plattformspeicher (PG · Aster TSDB · Redis · RustFS) nicht mehr
an die Container. Die sechs Dienste, die sie nutzen (copilot-web · timeseries-insight-api · lightrag ·
rag-api · digital-thread-api · litellm), beziehen sie beim Start von der Zugangsdaten-API der Plattform, übertragen sie
auf ihre eigenen Namen und starten dann die Anwendung. In der Host-env stehen nur zwei Dinge: die Adresse dieser API und der Schlüssel.
| Variable | Bedeutung |
|---|---|
PP_DATALAKE_ADMIN_URL | Data-Lake-Verwaltungs-API der Plattform — https://<플랫폼 호스트>:4950. Der Host dieser URL ist zugleich der Plattform-Host |
PP_DATALAKE_ADMIN_API_KEY | Schlüssel dieser API. Die gleichnamige Zeile unverändert aus /etc/kopens/plantpulse-platform.env des Plattform-Hosts übernehmen |
Die Vorlage enthält beide Zeilen mit Platzhalterwerten, und die interaktive Installation (INTERACTIVE=1) fragt beide Werte ab. Die nötigen Vorbereitungen finden Sie unter
Installationsübersicht (Plattform-Allowlist · Trust Anchor root.crt).
- Ist nur einer der beiden Werte gesetzt, verweigert der Container den Dienst.
- Schlägt der Bezug fehl, stoppt der Container mit FATAL (Verbindungsfehler · 5xx werden kurz wiederholt, 4xx sofort abgebrochen). Es gibt keinen Cache, mit dem er auf dem letzten Wert startet.
- Das Serverzertifikat wird ausschließlich gegen
/etc/kopens/ca/root.crtgeprüft. Fehlt die Datei, ist dies FATAL, und es gibt keinen Weg, die Prüfung abzuschalten.
Wurde das Passwort auf der Plattform geändert, ist auf AI-Seite keine Datei anzupassen — ein Neustart des Containers holt den
neuen Wert. Vom Bezug bleiben im Log nur Schlüsselnamen und Anzahl zurück (docker logs <컨테이너> 2>&1 | grep credentials:).
Auch Host-Skripte beziehen die Daten auf demselben Weg. Die DB-Provisionierung vor dem Start (provision-platform-db.sh), manuell ausgeführte
DB-Migrationsskripte und die Vorabprüfung von install.sh START=1 rufen dieselbe API nach denselben Regeln auf (Prüfung gegen root.crt).
Deshalb stehen auch in der Host-env keine Plattformkonten und -passwörter. Bei einem Fehlschlag wird der Grund in einer [FATAL] [platform-credentials] …-Zeile
genannt (nicht erreichbar · 401/403 · kein Schlüssel · URL/Schlüssel/CA fehlt) und abgebrochen. Nur wenn Sie an einer Stelle ohne Plattformzugang testen,
können Sie die Werte über die Shell-Umgebung dieses Laufs mitgeben — dann gewinnen diese.
Von den Plattformwerten verbleiben in der Host-env nur die folgenden.
| Variable | Bedeutung |
|---|---|
PP_DATALAKE_ADMIN_URL · PP_DATALAKE_ADMIN_API_KEY | Siehe oben — Bezugsort der Zugangsdaten |
PP_API_URL · PP_API_TOKEN | Plattform-V5-API — steht nicht im Zugangsdatenspeicher und verbleibt daher in der Host-env (siehe „Plattform-Integrations-MCP" unten) |
PP_PG_PORT · PP_CASSANDRA_PORT | In der Vorlage nur auskommentiert vorhanden. Werden nur von Host-Skripten gelesen; bei den Standardports der Plattform leer lassen |
Der Plattform-Host (PP_HOST) wird nicht eingetragen — der Host aus PP_DATALAKE_ADMIN_URL ist zugleich dieser, und Container
wie Host-Skripte berechnen ihn nach derselben Regel. Die von AI genutzten PG-Datenbanknamen (PP_LIGHTRAG_PG_DB standardmäßig
lightrag usw.) sind compose-Standardwerte.
Die eigenen PG-Daten der AI-Anwendungen liegen in DB pi des Plattform-PG, je Anwendung in eigenen Schemata (Copilot co ·
Digital Thread dt, Konto PP_PG_USER). Die DB ch aus Altinstallationen wird beim Start nach pi.co migriert.
Das Installationsprogramm und update.sh erstellen eine vorhandene env nicht neu. In env-Dateien von 2026.09 und älter verbleiben
viele Zeilen, die nicht mehr am richtigen Platz sind — Image-Referenzen, GPU-Anteile, Werte identisch zu compose-Standardwerten, PP_HOST, Plattformkonten und -passwörter
(PP_PG_USER · PP_PG_PASSWORD · PP_CASSANDRA_* · PP_REDIS_PASSWORD · PP_S3_* usw.) —, sodass
die Vorstartprüfung den Start stoppt. Bereinigen Sie die Datei vor dem Upgrade.
cd /opt/kopens/plantpulse-ai-docker
sudo bash bin/lint-env.sh # 무엇이 남았나 — 바꾸지 않습니다
sudo cp -p /etc/kopens/plantpulse-ai.env ~/plantpulse-ai.env.bak-$(date +%Y%m%d-%H%M)
# lint-env 가 찍은 sed 한 줄을 그대로 실행한 뒤, 하드웨어 모양을 더합니다(GB10 = gb10 · g7e = g7e)
grep -q '^PP_HW_PROFILE=' /etc/kopens/plantpulse-ai.env || echo 'PP_HW_PROFILE=gb10' | sudo tee -a /etc/kopens/plantpulse-ai.env >/dev/null
sudo bash bin/lint-env.sh && bin/restart.sh
- Vor dem Löschen eintragen —
PP_DATALAKE_ADMIN_URL·PP_DATALAKE_ADMIN_API_KEYneu eintragen und den Trust Anchor ablegen. Zu den alten Plattformkonto-Zeilen sagt die Prüfung nur «löschen», tragen Sie diese beiden also zuerst ein. - Alte
CH_*-Zeilen erkennt die Prüfung alsrenamedund gibt separat einsedaus, das nur den Namen ändert — führen Sie es aus, wandert der Wert unverändert nachCO_*(siehe „Copilot-Konfiguration" unten). - Absichtlich vom Standard abweichende Werte (z. B. Modellpfade) bleiben als
override-Hinweis bestehen und werden nicht gelöscht.
Der Copilot abonniert die Anlagenalarme der Plattform über MQTT (ab 2026.09, zuvor Kafka). Die Broker-Adresse
folgt dem Host aus PP_API_URL, der Standardport ist 1884 (TLS) — es ist also nichts gesondert einzutragen.
Das frühere PP_KAFKA_PORT entfällt — selbst wenn es noch vorhanden ist, liest es niemand.
Plattform-Integrations-MCP
Der Kanal, über den der Copilot-Chat Echtzeitdaten der Plattform abruft.
| Variable | Bedeutung |
|---|---|
PP_API_URL | Basis-URL von server-web der Plattform |
PP_API_TOKEN | Von der Plattform ausgestelltes API-Token |
compose verlangt beide Werte zwingend — sind sie leer, startet der Stack nicht. Verbleiben Platzhalter, startet bin/up.sh ihn nicht.
Bei einem falschen Token startet der Stack jedoch normal, und nur die Plattform-MCP-Werkzeuge im Chat sind stillschweigend 0. Beim Symptom „Werkzeuge sind nicht sichtbar" zuerst hier nachsehen.
Modelle und Gateway
Die Modell- und Gateway-Werte sind sämtlich compose-Standardwerte (in der Host-env stehen nur die vom Installationsprogramm erzeugten Schlüssel/Geheimnisse); vLLM ist
v0.31.0, docling-serve ist v1.36.0. Die Images (VLLM_IMAGE · DOCLING_IMAGE) folgen den Regeln aus „Images und Registry"
oben und werden daher nicht in die Host-env eingetragen. Die Modellablage ist LLM_MODEL_PATH · EMB_MODEL_PATH · RERANK_MODEL_PATH
(standardmäßig das Verzeichnis Aura-* unter /opt/kopens/models).
| Variable | Standardwert | Bedeutung |
|---|---|---|
LLM_NAME | aura-lite | Aufrufname des Generierungsmodells. Zugleich Vision-fähig |
EMB_NAME | aura-embedding-4b | Name des Embedding-Modells |
RERANK_NAME | aura-reranker-0.6b | Name des Reranking-Modells |
LLM_MODEL_PATH | /opt/kopens/models/Aura-Lite-NVFP4 | Gewichtsordner des Generierungsmodells. Der letzte Ordnername liefert Aura-Lite-NVFP4.tar.zst |
LLM_MODEL_ARGS | --tool-call-parser gemma4 --reasoning-parser gemma4 --async-scheduling --enable-chunked-prefill | Startargumente von vLLM. Der Parser ist auf die Gewichte (Gemma-4-Reihe) abgestimmt, daher nur gemeinsam mit den Gewichten ändern |
VISION_LLM_MODEL | (leer) | Nur, wenn für Vision-Anfragen ein anderes Modell verwendet wird. Leer bedeutet LLM_NAME |
PI_VLLM_API_KEY | wird vom Installationsprogramm erzeugt | Schlüssel vor vLLM |
PI_LLM_API_KEY | wird vom Installationsprogramm erzeugt | LiteLLM-Masterkey |
PI_LITELLM_SALT_KEY | wird vom Installationsprogramm erzeugt | Salt, mit dem LiteLLM gespeicherte Werte verschlüsselt |
PI_LITELLM_UI_USERNAME · PI_LITELLM_UI_PASSWORD | admin · admin123! | Anmeldung an der LiteLLM-Verwaltungsoberfläche (:4000/ui). Das Passwort ist Pflicht → Initialpasswort ändern |
PI_LITELLM_PORT | 4000 | Port, unter dem LiteLLM auf dem Host veröffentlicht wird. Nur ändern, wenn auf diesem Host bereits ein anderes LiteLLM Port 4000 belegt. Verbraucher innerhalb des Stacks rufen plantpulse-litellm:4000 über das Containernetz auf und sind von diesem Wert unabhängig. Nach einer Änderung mit bin/restart.sh plantpulse-litellm neu erstellen |
LITELLM_IMAGE entfälltAb 2026.10 ist das Gateway-Image ein eigenes Image (pi/plantpulse-litellm) und folgt damit den obigen Image-Tag-Regeln.
Eine in alten env-Dateien verbliebene LITELLM_IMAGE-Zeile erkennt die Vorstartprüfung als Image-Referenz (release) und stoppt den Start — löschen Sie sie.
aura-* — Aliase für alte Namen gibt es nichtAm Gateway registriert sind die Namen aura-lite · aura-vision (Vision-Alias) ·
aura-embedding-4b · aura-reranker-0.6b. Der Serving-Name des LLM wurde in 2026.09 von gpt-4o auf aura-35b und
in Re-Release (2026-10-20) von 2026.10 von aura-35b auf aura-lite geändert; Kompatibilitätsaliase für die alten Namen gibt es nicht —
ein Aufruf mit dem alten Namen liefert 404, daher müssen Sie den model-Wert externer Integrationen auf den neuen Namen umstellen. Auch VLM_NAME
entfällt (den Vision-Alias hält die Gateway-Konfiguration).
Serving-Name (LLM_NAME) und Gewichtsordner (LLM_MODEL_PATH, standardmäßig /opt/kopens/models/Aura-Lite-NVFP4) sind getrennte Einstellungen.
In Re-Release (2026-10-20) haben sich beide geändert — der Gewichtsordner von Aura-35B-A3B-NVFP4 auf Aura-Lite-NVFP4 (Bundle-Modelldatei Aura-Lite-NVFP4.tar.zst).
Tragen Sie diese drei (LLM_NAME · LLM_MODEL_PATH · LLM_MODEL_ARGS) mit demselben Wert wie der Standard in die Host-env ein, blockiert die Vorstartprüfung (lint-env)
den Start mit redundant — tragen Sie sie nur zum Testen anderer Modelle mit «abweichendem Wert» ein.
PI_LITELLM_SALT_KEY nicht ändernDies ist der Schlüssel, mit dem die im Bildschirm Modellregistrierung der Admin-Konsole eingetragenen API-Schlüssel externer Anbieter verschlüsselt werden. Nach einer Änderung lassen sich bereits gespeicherte Werte nicht mehr entschlüsseln — der Container startet als healthy, die Modellliste bleibt unverändert, aber nur die Aufrufe scheitern stillschweigend. Lassen Sie den anfangs festgelegten Wert unverändert und nehmen Sie ihn in die Sicherung auf.
GPU-Speicheranteile
Die drei vLLM-Instanzen (Generierung · Embedding · Reranking), das vLLM der Sprachtranskription (plantpulse-asr) und der Zeitreihen-Inferenzserver teilen sich dieselbe GPU.
Die jeweiligen Anteile und deren Summengrenze stehen sämtlich im Hardwareprofil (compose/profiles/<PP_HW_PROFILE>.env) —
stehen sie in der Host-env, stoppt die Vorstartprüfung den Start mit profile.
| Variable | gb10 / g7e | Bedeutung |
|---|---|---|
LLM_GPU_UTIL · EMB_GPU_UTIL · RERANK_GPU_UTIL | 0.4 · 0.10 · 0.08 / 0.53 · 0.13 · 0.10 | GPU-Speicheranteile der drei vLLM-Instanzen |
TS_GPU_UTIL | 0.13 / 0.15 | Anteil des Zeitreihen-Inferenzservers |
ASR_GPU_UTIL | 0.03 / 0.04 | Anteil des Transkriptions-vLLM — startet nur bei Installationen mit aktiviertem Video/Audio (PI_MEDIA_ENABLED=true), wird aber auch im ausgeschalteten Zustand in die Summe einbezogen (damit die Grenze am Tag der Aktivierung nicht überschritten wird) |
PP_GPU_BUDGET_CEILING | 0.75 / 0.95 | Summengrenze der fünf Anteile. Bei Überschreitung Abbruch vor dem Start |
Beim GB10 liegt die Grenze wegen des Unified Memory bei 0.75 (Summe 0.74), bei Geräten mit dediziertem VRAM (AWS g7e) bei 0.95 (Summe 0.95).
vLLM prüft beim Start «verbleibender Speicher ≥ eigener Anteil» und beendet sich bei zu wenig Speicher. Ist die Summe zu groß, wird daraus ein Wettlauf, bei dem der zuerst startende gewinnt; der Verlierer startet endlos neu und der Chat steht — nirgends im Log steht, dass „die Konfiguration zu groß war". Deshalb blockieren wir es rechnerisch vor dem Start. Muss reduziert werden, beginnen Sie beim größten Anteil.
Beim GB10 liegt der GPU-Speicher im selben Pool wie der System-RAM: Hebt man die Grenze an, bleibt für OS und DB nichts übrig. Aus demselben Grund bricht das Installationsprogramm ab, wenn Vorlage und Maschinenarchitektur nicht zusammenpassen.
Copilot-Konfiguration — das Präfix lautet CO_
Umgebungsvariablen für den Copilot (copilot-web) beginnen ab 2026.10 mit CO_ (zuvor CH_).
Das gilt für CO_LLM_* · CO_TOOL_RESULT_MAX_CHARS · CO_API_V1_KEY · CO_JAVA_OPTS · CO_NAVIGATOR_CRON ·
CO_ANOMALY_CRON · CO_INCIDENT_DIAG_CONCURRENCY · CO_OTEL_* gleichermaßen.
CH_*-Zeilen nicht löschen, sondern «verschieben»Es gibt keinen Fallback auf die alten Namen. Da das Installationsprogramm eine vorhandene env nicht neu erstellt, bleiben Zeilen wie
CH_API_V1_KEY · CH_LLM_MAX_COMPLETION_TOKENS · CH_OTEL_GENAI_CONTENT aus alten env-Dateien bestehen, aber der Copilot liest
diese Namen nicht. Löschen Sie die Zeilen nur, fällt der Wert auf den Standard zurück — eine zum Beispiel mit CH_API_V1_KEY geöffnete
öffentliche API ist mit diesem Schlüssel dann nicht mehr erreichbar.
Die Vorstartprüfung (bin/lint-env.sh) erkennt diese Zeilen als renamed, stoppt den Start und nennt je Zeile die nötige Maßnahme.
| Ausgabe der Prüfung | Bedeutung · Maßnahme |
|---|---|
only the old name is set — rename it | Nur der alte Name ist vorhanden. Das mitausgegebene sed (mit Backup) ändert nur den Namen und lässt den Wert unverändert |
both set with the same value | Der neue Name existiert bereits mit demselben Wert. Alte Zeile löschen |
both set and DIFFERENT | Beide vorhanden, mit unterschiedlichen Werten. Der neue Name gewinnt — prüfen Sie, welcher Wert richtig ist, und löschen Sie dann die alte Zeile |
sudo grep -n '^CH_' /etc/kopens/plantpulse-ai.env # 남은 옛 줄
Nach dem Verschieben mit bin/restart.sh plantpulse-copilot-web neu erstellen.
Ausgabewege der Automatisierung — E-Mail · Messenger · PDF
Der Weg, Automatisierungsergebnisse per E-Mail oder Messenger auszugeben, ist standardmäßig geschlossen und öffnet sich erst mit den folgenden Werten. PDFs entstehen nur, wenn der Konvertierungsdienst erreichbar ist.
| Was | Wo festgelegt | Wenn leer |
|---|---|---|
| PDF-Konvertierungsdienst (Gotenberg) | Umgebungsvariable CO_GOTENBERG_URL — compose-Standardwert http://plantpulse-gotenberg:3000 (der mit dem Stack startende Konvertierungscontainer) | Ist der Wert leer oder antwortet der Konvertierungscontainer unter dieser Adresse nicht, wird nur PDF deaktiviert. Der PDF-Download in Berichten und die Schaltfläche für den PDF-Anhang in Automatisierungs-Mails sind deaktiviert, und die Oberfläche nennt den Grund. Excel und CSV sind von diesem Wert unabhängig |
| Zugelassene Mail-Domänen | Admin-Konsole › Benachrichtigungskanäle, «Zugelassene Mail-Domänen» (Konfigurationsschlüssel automation.mail.allowed-domains, kommagetrennt · bis zu 20) | 🔴 Automatisierungs-Mails sind deaktiviert. Erst mit eingetragener Unternehmensdomäne aktiv |
| Mailserver | Admin-Konsole › Systemeinstellungen: smtp.host · smtp.port · smtp.username · smtp.password · smtp.starttls, Absender navigator.report.email.from | Es gehen keine Mails hinaus (im Ausführungsprotokoll „Mailserver ist nicht konfiguriert") |
| Messenger-Kanäle (Teams · Slack) | Webhook-Adresse in der Admin-Konsole › Benachrichtigungskanäle registrieren — keine Umgebungsvariable | Beim «Senden» der Automatisierung lässt sich kein Messenger-Kanal auswählen |
| Links im Text von Mail und Messenger | Admin-Konsole › Systemeinstellungen, app.base.url (externe Adresse dieser Installation) | Im Text werden keine Links eingefügt |
CO_GOTENBERG_URL muss eine http://- oder https://-Adresse sein. Bei anderen Werten wird eine Warnung protokolliert und PDF deaktiviert. Die PDF-Schaltfläche und der Anhang-Chip in der Oberfläche richten sich nicht danach, ob eine Adresse eingetragen ist, sondern danach, ob der Konverter gerade antwortet (/health, Prüfung alle 30 Sekunden) — bei Installationen mit Adresse, aber ohne Container erscheinen sie deaktiviert. Ist der Konverter nicht erreichbar, geht die Mail nur ohne PDF hinaus
(im Ausführungsprotokoll „konnte nicht angehängt werden"), und der Download im Bericht antwortet mit „PDF kann derzeit nicht erzeugt werden.". Der Zustand des Konverters erscheint in gotenberg von /actuator/health/deps als off · unreachable · up;
ein Ausfall des Konverters fließt nicht in die Startprüfung des Copilot ein.
Das Tageslimit für den Versand ist ein Wert der Systemeinstellungen (Änderungen wirken ohne Neustart). Auch ohne jede Änderung erscheint es mit seinem Standardwert in der Admin-Konsole › Systemeinstellungen; dort ändern oder auf den Standardwert zurücksetzen.
Auch Intervall und Token-Limit der Automatisierung (agentdef.*) sowie das Vier-Augen-Freigabewerkzeug (access.two_person.tools) stehen in derselben Liste → Copilot-Admin-Konsole — Systemeinstellungen
| Konfigurationsschlüssel | Standardwert | Bedeutung |
|---|---|---|
automation.deliver.mail.daily-max | 6 | Anzahl der Mails, die eine Automatisierung pro Tag an eine Person sendet |
automation.deliver.webhook.daily-max | 12 | Anzahl der Messenger-Nachrichten, die eine Automatisierung pro Tag in einen Kanal sendet |
automation.deliver.role.max-members | 50 | Anzahl der Personen, auf die eine per Rolle gewählte Empfängergruppe aufgelöst wird |
Was in der Oberfläche zu tun ist, steht unter Copilot-Admin-Konsole — Benachrichtigungskanäle.
Copilot-Chat — Denkmodus und drei Obergrenzen
Drei Werte, die festlegen, wie der dialogorientierte Copilot (copilot-web) das Gateway aufruft. Alle drei behandeln denselben einen Fehlerfall über verschiedene Stellschrauben — dass das Modell vor seiner Antwort «denkt» und dieses Denken ebenfalls Generierungstoken verbraucht.
| Variable | Standardwert | Bedeutung |
|---|---|---|
CO_LLM_THINKING_ENABLED | true (compose, ab Re-Release (2026-10-20) von 2026.10. Der App-Standard allein ist leer) | Schalter für den Denkmodus → chat_template_kwargs.enable_thinking. Leer bedeutet: nichts senden (es gilt der Modellstandard — der Vorlagenstandard von AURA-Lite ist «aus») |
CO_LLM_MAX_COMPLETION_TOKENS | 4096 (bei Deployments mit eigenem Stack 16384) | Obergrenze der Generierungstoken pro Aufruf. Muss groß genug sein, dass Denken und Antwort gemeinsam hineinpassen. Bei 0 wird keine Obergrenze gesendet |
CO_TOOL_RESULT_MAX_CHARS | 24000 | Maximale Zeichenzahl, mit der ein einzelnes Werkzeugergebnis an das Modell übergeben wird. Bei Überschreitung werden zuerst tief verschachtelte Arrays entfernt und eine _truncated-Markierung hinterlassen. Bei 0 wird nicht gekürzt |
Schaltet man es bei der Qwen3.5-Reihe mit CO_LLM_THINKING_ENABLED=false ab, sinkt die Antwortzeit auf wenige Sekunden, aber das Modell ruft keine Werkzeuge auf und erfindet nicht existierende Assets und Alarme (Messung im Staging am 18.09.2026). Das ist keine Abwägung zwischen Geschwindigkeit und Qualität, sondern die Frage, ob die Antwort richtig oder falsch ist.
Die Option, es abzuschalten, ist nur bei Modellen sinnvoll, die auch ohne Denken Werkzeuge aufrufen.
Denktiefe — Standardwerte je Pfad
Ab Re-Release (2026-10-20) von 2026.10 lässt sich zusätzlich zum Ein- und Ausschalten des Denkens wählen, wie tief gedacht wird (reasoning_effort). Das ist keine env-Variable, sondern ein Schlüssel unter
Verwaltung › Systemeinstellungen des Copilot (/admin/config); nach dem Speichern gilt er ab dem nächsten Aufruf ohne Neustart.
| Schlüssel | Bezeichnung in der Oberfläche |
|---|---|
llm.reasoning.chat | Standard-Denktiefe im Chat |
llm.reasoning.automation | Denktiefe der Automatisierung |
llm.reasoning.diagnosis | Denktiefe der Anomaliediagnose |
llm.reasoning.proposal | Denktiefe der Maßnahmenvorschläge |
llm.reasoning.other | Denktiefe der übrigen Generierung |
- Mögliche Werte:
none(aus) ·low·medium·highoder leer («Serverstandard folgen»).noneschaltet das Denken ab, die übrigen senden mit eingeschaltetem Denken in der jeweiligen Tiefe. - Die Reihenfolge der Festlegung ist: vom Benutzer in der Anfrage gewählter Wert → obiger pfadbezogener Schlüssel →
CO_LLM_THINKING_ENABLED. - Die Schaltfläche Denktiefe im Abfragebildschirm erscheint nur, wenn der globale Wert oder
llm.reasoning.chatgesetzt ist.
Kann das Denken nicht innerhalb der Obergrenze abschließen, wird die Generierung mit length abgeschnitten und der Antworttext hat 0 Zeichen. Da der Stream regulär endet, sieht man in der Oberfläche nur „es kommt keine Antwort", und es liest sich wie eine Gateway-Störung.
Dieselbe Frage, im Staging nebeneinander gemessen:
| Konfiguration | Ergebnis |
|---|---|
Denken ein + 4096 | Leere Antwort — das Denken verbraucht die gesamte Obergrenze |
| Denken aus | Schnell, überspringt aber Werkzeuge und erfindet |
Denken ein + 16384 | Ruft Werkzeuge auf und antwortet richtig (je nach Frage 20 Sekunden bis 4 Minuten) |
Endet es auch mit höherer Obergrenze nicht, sollten Sie den Prompt oder die Größe der Werkzeugergebnisse (CO_TOOL_RESULT_MAX_CHARS) reduzieren.
Zeitbudget der Dokumentindizierung (LightRAG)
Die Standardwerte unverändert zu lassen ist der Normalfall. Ändern Sie sie nur, wenn Sie gemessen haben, dass dieses Gerät mehr oder weniger benötigt.
| Variable | Standardwert | Bedeutung |
|---|---|---|
LIGHTRAG_LLM_TIMEOUT | 3600 | Limit (Sekunden) für LLM-Aufrufe zur Entitätsextraktion. Das Worker-Limit beträgt das Doppelte dieses Werts |
LIGHTRAG_LLM_MAX_TOKENS | 32768 | Maximale Tokenzahl, die ein Extraktionsaufruf erzeugen darf — Deckel gegen Ausreißer |
LIGHTRAG_MAX_ASYNC | 4 | Anzahl gleichzeitiger LLM-Aufrufe. 🔴 Ein kleinerer Wert macht es langsamer |
Worker execution timeout scheitertEin denkendes Modell verbraucht pro Aufruf viele Token. Mit den früheren Standardwerten (240 s, Worker 480 s) scheiterten große PDFs
mitten in der Indizierung vollständig. Erscheint dieser Fehler, erhöhen Sie LIGHTRAG_LLM_TIMEOUT, sehen Sie dabei aber auch
LIGHTRAG_LLM_MAX_TOKENS an — ohne Obergrenze belegt ein einziger Ausreißer entsprechend lange einen GPU-Slot.
Maschinenauthentifizierung der öffentlichen API
Der Schlüssel, mit dem externe Systeme die öffentliche API des Copilot (/api/v1) aufrufen →
API-Integrationsleitfaden
| Variable | Standardwert | Bedeutung |
|---|---|---|
CO_API_V1_KEY | (leer) | Schlüssel, der über den Header X-API-Key: <value> entgegengenommen wird. Bis 2026.09 lautete der Name CH_API_V1_KEY — verschieben Sie ihn |
Ist der Wert leer, wird dieser Umgebungsvariablen-Schlüssel nicht akzeptiert. Über X-API-Key kommen dann nur Schlüssel herein, die im Bildschirm
API-Schlüssel der Copilot-Admin-Konsole (/admin/api-keys) benannt ausgestellt wurden; fehlen auch diese, wird nur die Sitzungsanmeldung akzeptiert.
So wird verhindert, dass ein Deployment mit vergessener Konfiguration zur unauthentifizierten öffentlichen API wird. Jeder dieser Schlüssel hat nur Zugriff
auf die öffentliche API, nicht auf die Verwaltungsoberfläche (/admin/**) und nicht auf die API-Dokumentation.
Bei einem einzelnen Umgebungsvariablen-Schlüssel lässt sich nicht unterscheiden, wem er gegeben wurde; wird er bekannt, brechen alle Nutzungen auf einmal ab. Wollen Sie je externem System einen eigenen Schlüssel vergeben, nutzen Sie die Ausstellung in der Copilot-Admin-Konsole → Copilot-Admin-Konsole — API-Schlüssel
Admin-Konsole und API-Schlüssel
| Variable | Bedeutung |
|---|---|
PI_ADMIN_USER · PI_ADMIN_PASSWORD | Anmeldung an der Admin-Konsole. Benutzername standardmäßig admin, das Passwort legt bei der Installation ein Mensch fest |
PI_ADMIN_SESSION_SECRET | Signierschlüssel der Admin-Konsolen-Sitzung — wird vom Installationsprogramm erzeugt |
ADMIN_SESSION_MAX_AGE | Sitzungsgültigkeit (Minuten). Standard 480 |
PI_ADMIN_WEB_PORT | HTTP-Port der Admin-Konsole. Standard 5959 |
PI_ADMIN_WEB_TLS_PORT | HTTPS-Port der Admin-Konsole. Standard 5960 — der Proxy nimmt ihn an und leitet an dieselbe Konsole weiter (Zertifikat: derselbe Satz wie bei :443) |
PI_NEO4J_USER · PI_NEO4J_PASSWORD | Graph-Konto — beide Neo4j-Instanzen (LightRAG-Wissensgraph plantpulse-neo4j · Fabrikgraph-Spiegel plantpulse-digital-thread-neo4j) nutzen dasselbe Konto |
PI_RAG_API_KEY | Schlüssel für RAG-API-Aufrufe |
PI_INBOUND_API_KEY | Schlüssel für eingehende Anfragen an die Backend-Dienste (RAG · Zeitreihen-Insights · Dokumentenverständnis · Vision · Digital Thread). Ist er leer, stoppt die Vorstartprüfung den Stack (siehe „Inbound-Schlüssel der Backend-Dienste" unten) |
Bei diesen Werten genügt das Bearbeiten der Datei nicht — wo die maßgebliche Quelle das Serverkonto ist (wie bei Neo4j), muss auch serverseitig
geändert werden. bin/passwd.sh führt diese Reihenfolge für Sie aus →
Passwörter und API-Schlüssel ändern.
Beide Eingänge rufen dieselbe Konsole auf, und beide sind offen (Klartext wird nicht auf HTTPS umgeleitet). Bleiben sie leer, gelten die obigen
Standardwerte; bei einer Änderung öffnet das Installationsprogramm die Firewall für diese Werte. Nach einer Änderung
beide Container mit bin/restart.sh plantpulse-admin-web plantpulse-proxy neu erstellen.
Verschlüsselungsschlüssel für gespeicherte Zugangsdaten — PI_COPILOT_SECRET_KEY · PI_DT_SECRET_KEY
Der Schlüssel, der in der Oberfläche eingetragene Zugangsdaten mit AES-256-GCM in der DB versiegelt. Der Wert ist base64-kodiert 32 Byte lang und wird bei der Erstinstallation vom Installationsprogramm erzeugt.
| Variable | Was wird versiegelt | Wenn leer |
|---|---|---|
PI_COPILOT_SECRET_KEY | Vom Copilot gespeicherte Zugangsdaten — Authentifizierungswerte externer MCP-Konnektoren, LLM-Schlüssel, SMTP-Passwörter, Slack-Webhooks, Web-Push-Privatschlüssel | 🔴 Nur der Copilot verweigert den Start und gibt die einzutragende Zeile ins Log. Der übrige Stack startet |
PI_DT_SECRET_KEY | Konnektor-Zugangsdaten aus dem Konnektorregister des Digital Thread | Nur das Konnektorregister ist config_error (503). Der Graph-Spiegel läuft |
-
Diese beiden Werte müssen gemeinsam in der
/etc/kopens/plantpulse-ai.env-Sicherung enthalten sein. Stellt man nur die DB wieder her und der Schlüssel fehlt, müssen Konnektor- und Benachrichtigungs-Zugangsdaten neu eingetragen werden. -
Auf Hosts, die von 2026.09 oder älter aktualisiert wurden, fehlen diese Zeilen. Das Installationsprogramm fügt einer vorhandenen env keine Zeilen hinzu; die Vorstartprüfung meldet «Verschlüsselungsschlüssel für gespeicherte Zugangsdaten fehlt». Tragen Sie sie selbst ein (in einer Form, die den Wert nicht auf dem Bildschirm ausgibt).
echo "PI_COPILOT_SECRET_KEY=$(openssl rand -base64 32)" | sudo tee -a /etc/kopens/plantpulse-ai.env >/dev/nullecho "PI_DT_SECRET_KEY=$(openssl rand -base64 32)" | sudo tee -a /etc/kopens/plantpulse-ai.env >/dev/null -
bin/passwd.shrotiert diese beiden Schlüssel nicht. Ein Austausch erfolgt ausschließlich über das Verfahren, den alten Wert in_PREVIOUSabzulegen → Passwörter und API-Schlüssel ändern
Digital Thread
plantpulse-digital-thread-api ist ab 2026.10 standardmäßig im Stack enthalten (ohne Port auf dem Host;
der Aufruf erfolgt innerhalb des Stacks über 7140). Der Fabrikgraph-Spiegel liegt in einem eigenen Neo4j (plantpulse-digital-thread-neo4j),
das Konnektorregister im Schema dt der PG-DB pi. Der Plattform-Ereignisleser wird eingeschaltet ausgeliefert.
Die auf dem Host verfügbaren Stellschrauben. Die Standardwerte unverändert zu lassen ist der Normalfall.
| Variable | Standardwert | Bedeutung |
|---|---|---|
PI_DT_SECRET_KEY | wird vom Installationsprogramm erzeugt | Verschlüsselungsschlüssel der Konnektor-Zugangsdaten (siehe oben) |
DT_INSIGHT_EVENTS_PUSH | false | Ob vom Digital Thread gelesene Plattformereignisse an Zeitreihen-Insights weitergereicht werden |
TS_EVENTS_SOURCE | direct | Woher Zeitreihen-Insights Plattformereignisse bezieht — direct (direkt lesen) · shadow (direkt lesen und mit dem Weitergereichten abgleichen) · digital_thread (nur das Weitergereichte verwenden — der obige Schalter muss eingeschaltet sein) |
DT_PLATFORM_READ · CO_PLATFORM_READ · TS_PLATFORM_READ | db | Weg zum Lesen des Plattformregisters — db (Plattformtabellen direkt) · shadow (beides lesen, mit db antworten und Abweichungen zählen) · api (Plattform-V5-REST, nutzt die bestehenden PP_API_URL · PP_API_TOKEN) |
Periodische Konnektorsynchronisierung und Aktualität (2026.10 Re-Release 3)
Eingeschaltete Konnektoren werden periodisch neu synchronisiert. Die Synchronisierung löscht verschwundene Verbindungen nicht, sondern «schließt» sie (trägt den Endzeitpunkt ein), sodass die Historie für Abfragen zu vergangenen Zeitpunkten korrekt bleibt. Die Standardwerte unverändert zu lassen ist der Normalfall.
| Variable | Standardwert | Bedeutung |
|---|---|---|
DT_CONNECTOR_SYNC_ENABLED | true | Periodische Synchronisierung. Bei false stoppt sie, und es bleibt nur «Jetzt synchronisieren» in der Admin-Konsole |
DT_CONNECTOR_SYNC_INTERVAL_S | 0 | Synchronisierungsintervall (Sekunden). Bei 0 familienabhängig — die Hälfte der Aktualitätsgrenze der jeweiligen Familie, mindestens 300 Sekunden |
DT_CONNECTOR_MAX_AGE | (leer) | Aktualitätsgrenze der Konnektordaten. Liste in der Form 가족=기간 (z. B. mes=2h,erp=1d, Einheiten s · m · h · d). Leer bedeutet familienabhängige Standardwerte — ehs 1h, mes · sched · wms 2h, cmms 4h, lims 12h, übrige 1d. Gibt es einen Konnektor, der älter als die Grenze ist, werden keine Wiederherstellungs- und Auswirkungskennzahlen ausgegeben |
DT_LINK_HISTORY_DAYS | (leer — 180) | Aufbewahrungsdauer geschlossener Verbindungen (Tage, 1–3650) |
Die aktuell laufenden Werte und den Synchronisierungsstatus zeigen /api/v1/config des Digital Thread (z. B. dt_connector_max_age_effective) und
connector_sync von /health. connector_sync ist lediglich eine Information und setzt den Dienst nicht auf degraded.
Inbound-Schlüssel der Backend-Dienste — ohne ihn startet nichts
RAG (rag-api) · Zeitreihen-Insights-API · Dokumentenverständnis · Vision · Digital Thread prüfen eingehende Anfragen mit einem einzigen gemeinsamen Schlüssel (PI_INBOUND_API_KEY).
compose verteilt diesen Wert je Dienst unter dessen eigenem Namen (RAG_INBOUND_API_KEY · TS_INBOUND_API_KEY ·
INBOUND_API_KEY …), und auch Copilot und Admin-Konsolen-Backend rufen diese Dienste mit demselben Wert auf.
Ist der Schlüssel leer, gibt es keinen Weg, auf dem etwas «versehentlich» unauthentifiziert offen startet.
| Wo | Wenn der Schlüssel leer ist |
|---|---|
Vorstartprüfung (bin/lint-env.sh) | Stoppt mit [fail] PI_INBOUND_API_KEY is empty and PI_INBOUND_AUTH_DISABLED is not true und erstellt keinen einzigen Container |
| Jeder Dienst | Ist der eigene Schlüssel leer, verweigert er den Start und hinterlässt eine Zeile der Art FATAL: … is empty — refusing to start … |
Es gibt genau einen expliziten Schalter, um ohne Authentifizierung zu starten, und er ist für Entwicklung und Test gedacht.
| Variable | Standardwert | Bedeutung |
|---|---|---|
PI_INBOUND_AUTH_DISABLED | false | Nur wenn true und der Schlüssel leer ist, starten die fünf Dienste ohne Authentifizierung. compose reicht dies je Dienst als RAG_INBOUND_AUTH_DISABLED · TS_INBOUND_AUTH_DISABLED · DT_INBOUND_AUTH_DISABLED · INBOUND_AUTH_DISABLED (Dokumentenverständnis · Vision) weiter |
Was die Vorstartprüfung zu diesem Schalter ausgibt:
| Ausgabe | Bedeutung |
|---|---|
[fail] PI_INBOUND_AUTH_DISABLED=<value> — write true or false | Wert außerhalb von true · false |
[note] PI_INBOUND_AUTH_DISABLED=true is ignored — PI_INBOUND_API_KEY is set and the key wins | Ist ein Schlüssel vorhanden, gewinnt der Schlüssel — die Authentifizierung bleibt eingeschaltet |
Ein ohne Authentifizierung gestarteter Dienst weist dies in /health aus (Dokumentenverständnis inbound_auth: "disabled", Digital Thread
auth.inbound=disabled usw.). In Produktivinstallationen ist das Eintragen des Schlüssels die richtige Antwort.
Ohne Authentifizierung offen sind nur die Health-Pfade /ping · /health (exakt diese Pfade). Auch die Metriken /metrics liegen hinter dem Schlüssel
→ Logging und Monitoring
CHANGE_ME_… ist kein leerer Wert, also blockieren weder compose noch die Dienste, und diese Zeichenkette ist in allen Installationen gleich. Das Installationsprogramm ersetzt sie bei der
Erstinstallation durch einen neuen Wert; bei einer von Hand erstellten env tragen Sie mit bin/passwd.sh --generate PI_INBOUND_API_KEY einen neuen Wert
ein → Passwörter und API-Schlüssel ändern
Dokument- und Bildwerkzeuge für interne URLs freigeben
Die Werkzeuge für Dokumentenverständnis und Vision nehmen keine Dateien, sondern URLs entgegen und laden sie selbst herunter. Löst die Adresse auf Loopback, ein privates Netz oder Link-Local auf, wird sie abgelehnt → MCP-Werkzeugübersicht
Stellen, die bewusst geöffnet werden sollen (etwa ein interner Dateiserver), tragen Sie in die Allowlist ein. compose reicht diesen Wert an beide Dienste, Dokumentenverständnis und Vision, weiter.
| Variable | Standardwert | Bedeutung |
|---|---|---|
FETCH_ALLOWED_HOSTS | (leer) | Hosts, von denen auch bei internen Adressen geladen wird. Mehrere kommagetrennt. Muss exakt dem Hostnamen der URL entsprechen (Groß-/Kleinschreibung wird ignoriert) — bei Angabe mit Port wie files.example.local oder files.example.local:8080 gilt nur dieser Port; bei per IP angesprochenen Servern tragen Sie die IP unverändert ein |
echo 'FETCH_ALLOWED_HOSTS=files.example.local,10.0.0.15' | sudo tee -a /etc/kopens/plantpulse-ai.env >/dev/null
cd /opt/kopens/plantpulse-ai-docker
bin/restart.sh plantpulse-document-understanding-api plantpulse-vision-api
- Wildcards und Bereiche (CIDR) gibt es nicht. Auch Subdomänen werden einzeln eingetragen.
- Auch bei zugelassenen Hosts werden nur
http·httpsakzeptiert, und die Größengrenzen (Dokumente 200 MiB · Bilder 32 MiB) bleiben bestehen. Redirects werden bei jedem Sprung erneut geprüft; leitet ein zugelassener Host auf eine nicht zugelassene interne Adresse weiter, wird dort abgelehnt. - Diese Zeile überschreibt einen compose-Standardwert (leer), daher gibt die Vorstartprüfung einen
override-Hinweis aus — das ist normal.
RAG-Objektspeicher-Bucket
rag-api legt manuell hochgeladene Dokumentoriginale, Zeichnungsstruktur und Vorschauen sowie Videowiedergaben und Transkripte in einem einzigen Bucket des Plattform-RustFS ab.
| Variable | Standardwert | Bedeutung |
|---|---|---|
RAG_S3_BUCKET | plantpulse-rag | Name dieses Buckets. Nur wenn zwei AI-Installationen dieselbe Plattform gemeinsam nutzen, erhält die zweite einen anderen Namen |
Zeichnungserfassung — standardmäßig aus
Funktion, die Zeichnungen (DXF · Vektor-PDF mit Textebene) als Schriftfeld, Maße, Toleranzen und BOM-Zeilen einliest und indiziert. Sie wird ausgeschaltet ausgeliefert; im ausgeschalteten Zustand entstehen die Zeichnungs-APIs von rag-api und die zugehörigen Tabellen gar nicht erst (wie vor Einführung dieser Funktion).
| Variable | Standardwert | Bedeutung |
|---|---|---|
DRAWING_INGEST_ENABLED | false | Bei true aktiviert rag-api die Zeichnungserfassung. .dxf gilt immer als Zeichnung; PDFs nur dann, wenn beim Upload als Typ «Zeichnung» (document_kind=drawing) angegeben wird. Werte außerhalb von true · false erzeugen eine Warnung und werden als «aus» gelesen |
echo 'DRAWING_INGEST_ENABLED=true' | sudo tee -a /etc/kopens/plantpulse-ai.env >/dev/null
cd /opt/kopens/plantpulse-ai-docker
bin/restart.sh plantpulse-rag-api
- DWG wird nicht angenommen — exportieren Sie nach DXF oder PDF und laden Sie das hoch. Die Grenze je Datei beträgt 50 MB.
- Auch Anlagendokumente der Plattform kommen als Zeichnungen herein (2026.10 Re-Release 3). Die Synchronisierung, die an Plattform-Assets angehängte Dokumente übernimmt, leitet
.dxf-Dateien und PDFs mit «Dokumenttyp»DRAWINGin den Zeichnungspfad. Für so eingegangene Zeichnungen ist die Plattform maßgeblich; überschreibendes Hochladen oder Löschen in der Admin-Konsole ergibt409(„drawing is platform-managed …") — Ändern und Löschen erfolgt auf der Plattform. Um sie nur aus der Suche zu nehmen, wählen Sie in der Dokumenttabelle der Admin-Konsole «Aus dem Korpus ausschließen» (ab 2026.10 Re-Release 4 ist die Konsolen-Schaltfläche für Registerzeichnungen freigeschaltet. Selbst hochgeladene Zeichnungen lassen sich weiterhin nicht ausschließen). Ist die Funktion aus, zählt.dxfnur (drawing_disabled) und übernimmt nichts; PDFs gehen als normale Dokumente ein. - Ob der Stand (Revision) einer Zeichnung der aktuell gültige Arbeitsstand ist, wird beim Digital Thread erfragt (freigegebener Stand im PLM · offene Konstruktionsänderungen). Fehlen im Schriftfeld Teilenummer oder
Stand oder kann der Digital Thread nicht antworten, ist der Standstatus
unknownund die Zeichnung erscheint nicht als «aktuell». - Nach dem Einschalten legt rag-api beim Start die Zeichnungstabellen (
rag_drawing_*) in der DBrag_ingestan — eine manuelle Migration entfällt.
Video- und Audio-Erfassung — standardmäßig aus, Aktivierung mit einer Zeile
Die Funktion, Video und Audio zu transkribieren (Sprache → zeitmarkierter Text) und zu indizieren, sowie die Spracheingabe im Eingabefeld des Copilot-Chats nutzen dasselbe
Transkriptions-Serving (plantpulse-asr). Beides wird ausgeschaltet ausgeliefert, und eingeschaltet wird es mit einer Zeile in der Host-env: PI_MEDIA_ENABLED=true
(in der Vorlage als Kommentar #PI_MEDIA_ENABLED=true enthalten). Die Bedienung steht unter Video- und Audiosuche.
| Was diese eine Zeile mitbestimmt | Inhalt |
|---|---|
| Startende Dienste | plantpulse-asr-audio — ein einmaliger Dienst, der die Audio-Bibliothek in das Volume pi-asr-audio überträgt und dann endet · plantpulse-asr — vLLM Whisper large-v3-turbo, Serving-Name aura-asr, intern 8000 (nicht auf dem Host veröffentlicht). Die Betriebsskripte starten sie mit dem compose-Profil media |
| Containerwerte | rag-api MEDIA_INGEST_ENABLED=true · Dokumentenverständnis ASR_URL=http://plantpulse-asr:8000 (compose/media/true.env der Installation) |
| Modell | bin/fetch-models.sh lädt das Transkriptionsmodell Aura-ASR-Turbo (Download ca. 1,5 GB, entpackt ca. 1,6 GB). Bei ausgeschalteten Installationen wird es nicht geladen |
| GPU | ASR_GPU_UTIL ist auch im ausgeschalteten Zustand in der Summe des Hardwareprofils enthalten, sodass die Grenze auch nach dem Einschalten nicht überschritten wird |
cd /opt/kopens/plantpulse-ai-docker
sudo cp -p /etc/kopens/plantpulse-ai.env /etc/kopens/plantpulse-ai.env.bak-media-$(date +%Y%m%d-%H%M)
sudo sed -i '/^#\?PI_MEDIA_ENABLED=/d' /etc/kopens/plantpulse-ai.env && echo PI_MEDIA_ENABLED=true | sudo tee -a /etc/kopens/plantpulse-ai.env >/dev/null
sudo bash bin/fetch-models.sh # Aura-ASR-Turbo — 이미 있으면 건너뜁니다
sudo bash bin/lint-env.sh && bin/restart.sh # rag-api · 문서 이해가 새 값으로 다시 만들어집니다
bin/status.sh # 켠 설치는 23/23 — plantpulse-asr-audio 는 «Exited (0)» 이 정상입니다
Ob es eingeschaltet ist, sehen Sie an drei Stellen.
# rag-api — "media_ingest_enabled":true
curl -s -H "X-API-Key: <PI_INBOUND_API_KEY>" http://127.0.0.1:7115/api/v1/config | grep -o '"media_ingest_enabled":[a-z]*'
# 문서 이해 — components.asr.status 가 "up"
docker exec plantpulse-document-understanding-api python3 -c \
"import urllib.request;print(urllib.request.urlopen('http://localhost:7120/health').read().decode())"
bin/status.sh wertet einmalige Dienste (plantpulse-asr-audio), die mit «Exit-Code 0» enden, als normal. Ist der Code nicht 0, startet auch
plantpulse-asr nicht — sehen Sie dann zuerst in dessen Log.
- Abschalten — die Zeile löschen oder auf
PI_MEDIA_ENABLED=falsesetzen,bin/restart.shausführen und anschließend die verbliebenen beiden Container mitdocker rm -f plantpulse-asr plantpulse-asr-audioentfernen (ist das Profil aus, fassen die Betriebsskripte diese beiden nicht mehr an). - Air-Gap-Netzwerk — die Images sind immer im Bundle enthalten. Nur das Modell wird separat eingebracht → Installation im Air-Gap-Netzwerk
- Bei Werten außerhalb von
true·falsebricht die Vorstartprüfung mit[fail] PI_MEDIA_ENABLED=<value> — true 또는 false 만 받는다ab.
Haben Sie in Versionen vor 2026.10 MEDIA_INGEST_ENABLED · ASR_URL von Hand in die Host-env eingetragen, bricht das Upgrade nicht ab und läuft mit diesen Werten
weiter (fehlt die PI_MEDIA_ENABLED-Zeile, wird der alte Name als Schalter gelesen). Beim ersten Lauf verschiebt das Betriebsskript den alten Namen
nach PI_MEDIA_ENABLED und löscht ASR_URL-Zeilen, deren Wert dem des Schalters entspricht.
| Vorstartprüfung | Bedeutung |
|---|---|
alias [warn] | Nur der alte Name ist vorhanden — der Start erfolgt. Mit dem mitausgegebenen sed verschieben. Wird der Alias in 2026.11 entfernt, werden nicht verschobene Zeilen zu renamed [fail] |
media-same [warn] | ASR_URL in der Host-env entspricht dem Wert des Schalters — kann gelöscht werden |
media [fail] | ASR_URL in der Host-env weicht vom Wert des Schalters ab — klären Sie, was gewollt war, und löschen Sie die Zeile. Eingeschaltet wird mit der einen Zeile PI_MEDIA_ENABLED=true |
| Beide Namen mit unterschiedlichen Werten | [fail] — ein Mensch entscheidet, was gemeint war |
Läuft es unter einem Konto ohne Schreibrecht auf die env-Datei, kann es nicht selbst verschieben und gibt [paths] [warn] cannot write … sowie den von Hand auszuführenden sudo sh -c '…'-Befehl
aus. Der im Container (rag-api) gelesene Name ist weiterhin MEDIA_INGEST_ENABLED — den legt der Schalter fest, er wird also nicht in die Host-env eingetragen.
Die Stellschrauben sind compose-Standardwerte. Sie unverändert zu lassen ist der Normalfall.
| Variable | Dienst | Standardwert | Bedeutung |
|---|---|---|---|
PI_MEDIA_ENABLED | (Host-Schalter) | false | Siehe oben — aktiviert Video-/Audio-Erfassung und Spracheingabe gemeinsam |
MEDIA_MAX_FILE_MB | rag-api | 2048 | Obergrenze je Videodatei (MB). Unabhängig von der Dokumentgrenze |
MEDIA_MAX_DURATION_MIN | rag-api | 120 | Längenobergrenze je Video (Minuten) |
MEDIA_TEXT_TRACKS | rag-api | subtitles | Text im Video — off · subtitles (eingebettete Untertitelspuren · begleitende Untertitel srt/vtt) · all (+ eingebrannte Untertitel und Bildschirmtext, vom LLM gelesen) |
MEDIA_SPAN_TARGET_SEC | rag-api | 0 | Länge der Indexabschnitte (Sekunden, 20–300). Bei 0 bildet ein Transkriptionsfragment (ca. 120 Sekunden) einen Abschnitt. Werte außerhalb des Bereichs erzeugen eine Warnung und werden als 0 gelesen. Änderungen wirken ab der nächsten Neuindizierung |
MEDIA_PROCESSING_WINDOW | rag-api | (leer — 20:00-06:00) | Zeitfenster, in dem die Videoverarbeitung starten darf (HH:MM-HH:MM nach PP_TZ; ist der Start später als das Ende, geht das Fenster über Mitternacht). Für durchgehende Verarbeitung always. Bei leerem oder fehlerhaftem Format gilt der rag-api-Standard 20:00-06:00. Das Fenster gilt nur für den Start der Verarbeitung — eine begonnene Verarbeitung läuft auch nach Schließen des Fensters zu Ende. Die Verarbeitung teilt sich dasselbe LLM mit dem Chat |
ASR_URL | Dokumentenverständnis | (legt der Schalter fest) | Adresse des Transkriptions-Servings. Eingeschaltet http://plantpulse-asr:8000, ausgeschaltet leer (der Transkriptionseingang ist 503). 🔴 Nicht in die Host-env eintragen — siehe media · media-same in der obigen Tabelle |
ASR_NAME · ASR_BACKEND | Dokumentenverständnis · asr | aura-asr · vllm | Serving-Name · Engine (akzeptiert nur vllm) |
ASR_MODEL_PATH | asr | /opt/kopens/models/Aura-ASR-Turbo | Ablageort des Transkriptionsmodells |
OCR_URL · OCR_BACKEND | Dokumentenverständnis | http://plantpulse-llm:8000 · vlm | Serving-LLM zum Lesen von Text im Video. Wird nur bei aktivierter Transkription verwendet |
Vision-Engine zum Lesen von Text
| Variable | Standardwert | Bedeutung |
|---|---|---|
VISION_OCR_ENGINE | (leer — Vision-Standard vlm) | Engine von vision_ocr. Bei vlm liest das aktive Serving-LLM und antwortet nur, wenn die Zeichenkette in zwei von drei Durchläufen identisch ist (liest Koreanisch). docling überlässt es dem OCR des Dokumentenverständnisses (kann kein Koreanisch lesen) |
Verwandte Dokumente
- Installationsübersicht — wohin installiert wird und was startet
- Dienst-Portübersicht
- Dienstbetrieb