406 lines
26 KiB
Markdown
406 lines
26 KiB
Markdown
# Neural Knowledge Brain
|
||
|
||
Eigenständiger Go-Dienst für Agent, lokale Knowledgebase, GLPI-Knowledgebase und autonome AI-THINK-Anreicherung. Der Dienst hält einen vollständigen Wissensgraphen im Arbeitsspeicher und rendert eine hierarchisch verdichtete Fullscreen-Ansicht als lebende Hirnaktivität.
|
||
|
||
## Kernfunktionen
|
||
|
||
- Fullscreen-Canvas mit 3D-Hirnform, semantischen Cortex-Regionen und hierarchischem Level-of-Detail.
|
||
- Drei Visualisierungen: Neural-Brain, gleichmäßige 3D-Honeycomb-Wabe und semantische Constellation-Ansicht mit Themensternen.
|
||
- Persistierbarer **ECO**-Modus für schwächere Systeme sowie weiche Node-, Edge- und Ansichtsübergänge ohne sichtbaren Komplett-Reload.
|
||
- Laufzeitsteuerung für Learning und Thinking sowie drei einfache, exakte `source`-Filter für Lernen, Anzeige und AI-THINK.
|
||
- Echtzeitaktivierung über Server-Sent Events: Nodes glühen, aggregierte Edges leuchten und Partikel folgen tatsächlichen Wissenspfaden.
|
||
- Ingest lokaler produktiver Knowledge-JSONs sowie separater AI-THINK-Staging-Dateien.
|
||
- Optionaler read-only Ingest sichtbarer Beiträge aus der GLPI-Knowledgebase.
|
||
- Read-only Tailing der Agent-`runs.jsonl` und optionale Suchtelemetrie aus Agent und KB.
|
||
- Ollama-Pool mit mehreren unabhängigen Instanzen, Routing, Healthchecks, Cooldown und Failover.
|
||
- Embeddings über `embeddinggemma`, Beziehungsanalyse über `qwen3:8b`.
|
||
- Optionaler mathematischer Knowledge-Nachbarschaftsgraph aus bereits vorhandenen Embeddings (`semantic_neighbor`): LSH + Cosine + mutual k-NN/local scaling, ohne zusätzlichen Modellaufruf; periodische Re-Evaluierung und sanfte 3D-Entzerrung dichter Wolken sind getrennt steuerbar.
|
||
- Mehrstufiger AI-THINK-Worker: Relation Thinking, quellengebundene Wissenskonsolidierung, Recherche offener Punkte und Knowledge-Synthesis mit artikeltypspezifischer Tiefe, mathematischem CPU-Pre-Review sowie getrenntem Claim-/Coverage-Review.
|
||
- Persistente **Autonomous-Research-Queue**: selbstständige Wissenslückensuche, externe Trigger, Leerlauf-/Budgetsteuerung und niedrig priorisierte Übergabe an den vorhandenen Ollama-Pool.
|
||
- Inkrementelle SQLite/WAL-Persistenz über `modernc.org/sqlite`: binäre Float32-Embeddings und standardmäßig alle fünf Minuten gebündelte Row-Updates.
|
||
- Separates **BRAIN ANALYSIS CENTER** mit persistenter Laufhistorie, exakten Node-/Edge-/Vektoränderungen, Similarity-/Confidence-Auswertung, Research-Ergebnissen und technischem Roh-Eventstream.
|
||
|
||
## Vertrauens- und Schreibgrenzen
|
||
|
||
Das Brain liest produktive Quellen und GLPI-KB ausschließlich. Es schreibt niemals in produktive Knowledge-Dateien oder nach GLPI zurück.
|
||
|
||
Schreibbar sind nur:
|
||
|
||
- das eigene `BRAIN_DATA_DIR` für Graphzustand und GLPI-KB-Cache;
|
||
- der erste Pfad aus `BRAIN_STAGING_DIRS` für AI-THINK-Entwürfe.
|
||
|
||
AI-THINK bleibt `auto_reply: false`, trägt die Kategorien `AI-THINK` und `AI-Staging` und wird erst nach einer expliziten Freigabe im bestehenden Editor produktiv. Artikelentwürfe erhalten zusätzlich `AI-Synthesis`; `text` und `answer` enthalten ausschließlich den fachlichen Artikel. Planung, Bewertung, Confidence, Quellen-IDs und Rechercheprotokolle werden separat unter `BRAIN_DATA_DIR/article-metadata/` gespeichert.
|
||
|
||
|
||
## Grounded Knowledge Synthesis
|
||
|
||
Verwandtes Wissen wird nicht direkt als Bewertungsbericht gespeichert. Die Artikelpipeline arbeitet nach **Adaptive Generate → Review**: Im `clustered`-Modus beginnt der Autor (z. B. Gemma) mit kohärenten internen KB-Quellen. SearXNG wird gezielt vorgeschaltet, wenn ein deterministischer Aktualitätsdetektor Versions-/Support-/CVE-/Patch-/Preis-/Live-Status erkennt, wenn der Planner für einen operationalen Artikel nur zwei kohärente interne Quellen findet, wenn dem Entwurf ausführbare Schritte/Validierung fehlen oder wenn das Modell selbst eine konkrete Evidenzlücke meldet. Erst danach prüft ein getrenntes Reviewer-Modell den sichtbaren Text Claim für Claim und kann weitere gezielte Nachrecherche auslösen. Frisch recherchierte Webvolltexte bleiben zunächst nur im Evidence-Store; nur tatsächlich vom Reviewer verwendete Quellen dürfen die interne Mindestquellenregel ergänzen und als Graph-Evidenz materialisiert werden.
|
||
|
||
Details: [`KNOWLEDGE-SYNTHESIS.md`](KNOWLEDGE-SYNTHESIS.md), [`GENERATE-THEN-REVIEW.md`](GENERATE-THEN-REVIEW.md) und [`ADAPTIVE-ARTICLE-WORKFLOW.md`](ADAPTIVE-ARTICLE-WORKFLOW.md).
|
||
|
||
v8 ergänzt einen modellfreien CPU-/Agent-Quality-Layer und eine langsame semantische Layout-Relaxation. Details: [`ARTICLE-QUALITY-CPU-V8.md`](ARTICLE-QUALITY-CPU-V8.md).
|
||
|
||
v10 haertet Relationsrecherche, Autonomous-Queue, Artikeltyp-Routing und die von Learning entkoppelte Vector-Maintenance. Details: [`WORKFLOW-INTEGRITY-V10.md`](WORKFLOW-INTEGRITY-V10.md).
|
||
|
||
v12 korrigiert den modellfreien Artikel-Quality-Gate-Deadlock aus analysis(21): lexikalisches Evidence-Alignment ist diagnostisch, harte Struktur-/Dichte-Gates bleiben erhalten und semantisches Grounding erfolgt im Qwen-Review. Details: [`ARTICLE-QUALITY-GATE-V12.md`](ARTICLE-QUALITY-GATE-V12.md).
|
||
|
||
## Schnellstart
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
# Pfade, Ollama-Pool und optional GLPI-Zugangsdaten anpassen.
|
||
set -a; . ./.env; set +a
|
||
go run ./cmd/brain
|
||
```
|
||
|
||
Oberfläche: `http://localhost:8090`
|
||
|
||
Technisches Analyse-Dashboard: `http://localhost:8090/analysis.html`
|
||
|
||
Das Analyse-Dashboard ist von der animierten Gehirnansicht getrennt. Es bewertet Läufe als positives Ergebnis, Aktualisierung, Bereinigung, Prüfung ohne Übernahme oder Fehler und zeigt die konkret betroffenen Node-, Edge- und Vektor-IDs. Die Historie wird in `graph.db` aufgezeichnet und beginnt ab Installation dieser Version. Details: [`ANALYSIS-DASHBOARD.md`](ANALYSIS-DASHBOARD.md).
|
||
|
||
Docker:
|
||
|
||
```bash
|
||
docker compose up -d --build
|
||
```
|
||
|
||
## Mehrere Ollama-Instanzen
|
||
|
||
`OLLAMA_URLS` hat Vorrang vor dem weiterhin unterstützten `OLLAMA_URL`.
|
||
|
||
```env
|
||
OLLAMA_URLS=http://10.20.30.21:11434,http://10.20.30.22:11434,http://10.20.30.23:11434
|
||
OLLAMA_NODE_NAMES=gpu-01,gpu-02,gpu-03
|
||
OLLAMA_NODE_WEIGHTS=1,1,4
|
||
OLLAMA_ROUTING_MODE=least_inflight
|
||
OLLAMA_NODE_MAX_INFLIGHT=1
|
||
OLLAMA_FAILOVER_ENABLED=true
|
||
OLLAMA_FAILOVER_ATTEMPTS=0
|
||
OLLAMA_REQUIRE_SAME_MODEL_DIGEST=true
|
||
OLLAMA_REQUIRE_EMBEDDING_MODEL=true
|
||
```
|
||
|
||
Unterstützte Routing-Modi:
|
||
|
||
- `least_inflight` – bevorzugt den aktuell am wenigsten belasteten Node;
|
||
- `round_robin` – zyklische Verteilung;
|
||
- `weighted` – Verteilung entsprechend `OLLAMA_NODE_WEIGHTS`;
|
||
- `fastest_recent` – bevorzugt die zuletzt schnellsten Nodes.
|
||
|
||
Jeder Node muss das Chatmodell besitzen. Mit `OLLAMA_REQUIRE_EMBEDDING_MODEL=true` muss außerdem jeder Node das Embeddingmodell besitzen. Bei aktivierter Digest-Prüfung wird ein Pool mit unterschiedlichen Modellständen fail-closed behandelt.
|
||
|
||
Mehr Details: [`OLLAMA-POOL.md`](OLLAMA-POOL.md).
|
||
|
||
## GLPI-Knowledgebase einbeziehen
|
||
|
||
Die Integration verwendet denselben read-only OAuth-/OpenAPI-Ansatz wie der Agent. GLPI entscheidet anhand des Service-Accounts, welche Beiträge sichtbar sind.
|
||
|
||
```env
|
||
GLPI_KB_ENABLED=true
|
||
GLPI_URL=https://glpi.example.org
|
||
GLPI_API_VERSION=v2.3
|
||
GLPI_CLIENT_ID=...
|
||
GLPI_CLIENT_SECRET=...
|
||
GLPI_USERNAME=...
|
||
GLPI_PASSWORD=...
|
||
GLPI_KB_PATH=auto
|
||
GLPI_KB_LIMIT=500
|
||
GLPI_KB_SYNC_INTERVAL=10m
|
||
GLPI_KB_SOURCE=GLPI Knowledge Base
|
||
```
|
||
|
||
Bei `GLPI_KB_PATH=auto` sucht das Brain im GLPI-OpenAPI-Dokument die lesbare `KnowbaseItem`-Collection. Die Beiträge werden als produktive Wissens-Nodes mit `glpi://KnowbaseItem/<id>`-URI aufgenommen. Kategorien und Quelle erzeugen verifizierte Edges. Es gibt keine GLPI-Schreiboperation.
|
||
|
||
Manueller Sync:
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8090/api/glpi-kb/sync
|
||
```
|
||
|
||
Mehr Details: [`GLPI-KB.md`](GLPI-KB.md).
|
||
|
||
## SQLite/WAL-Persistenz und Vorberechnung
|
||
|
||
```env
|
||
BRAIN_PERSIST_INTERVAL=5m
|
||
```
|
||
|
||
Der Live-Graph liegt im Arbeitsspeicher. Dauerhaft gespeichert werden nur geänderte Zeilen in `BRAIN_DATA_DIR/graph.db`:
|
||
|
||
1. AI-THINK-, Metadaten- und Cache-Dateien werden atomar geschrieben;
|
||
2. danach folgen geänderte Nodes, Edges und Vektoren in einer SQLite-Transaktion;
|
||
3. Embeddings liegen binär als `float32`-BLOBs vor;
|
||
4. unveränderte KB-Scans verursachen keine erneuten Graphwrites.
|
||
|
||
Manueller Flush:
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8090/api/flush
|
||
```
|
||
|
||
Ein auf einem leistungsfähigen System vorberechneter Graph kann kompakt exportiert und auf ein System mit identischen Dokument-IDs und demselben Embedding-Modell kopiert werden:
|
||
|
||
```bash
|
||
curl -fsS http://localhost:8090/api/state/export -o graph.db
|
||
```
|
||
|
||
Mehr Details: [`PERSISTENCE.md`](PERSISTENCE.md) und [`SQLITE-STORAGE.md`](SQLITE-STORAGE.md).
|
||
|
||
### Experiment: mathematische semantische Kanten
|
||
|
||
Mit `BRAIN_VECTOR_GRAPH_ENABLED=true` kann direkt nach dem normalen Embedding-Schritt eine rein mathematische Knowledge↔Knowledge-Schicht erzeugt werden. Sie verwendet bereits gespeicherte Embeddings und erzeugt `semantic_neighbor` statt `same_topic`, weil Vektornähe kein fachlicher Beweis ist. Edge-Berechnung und optionales 3D-Layout verursachen keinen zusätzlichen Ollama-/LLM-/Embedding-Aufruf. Ein optionaler Orphan-Second-Pass kann verbleibende isolierte Knowledge-Nodes konservativ gegen den vollständigen Vectorbestand prüfen. Mit `BRAIN_VECTOR_GRAPH_AGENT_OFFLOAD=true` darf ein integrierter Source Agent diesen CPU-Job übernehmen; das Brain validiert und persistiert weiterhin selbst. AI-THINK kann anschließend zuerst diese mathematischen Kandidaten bewerten, statt erneut den gesamten Vektorraum zu durchsuchen. Details: [`VECTOR-GRAPH-EXPERIMENT.md`](VECTOR-GRAPH-EXPERIMENT.md) und [`VECTOR-GRAPH-AGENT-OFFLOAD-V3.md`](VECTOR-GRAPH-AGENT-OFFLOAD-V3.md).
|
||
|
||
## Laufzeitsteuerung, Visualisierungen und Performance
|
||
|
||
Die untere Steuerleiste enthält direkte Schalter für **LEARNING**, **THINKING**, **NEURAL**, **HONEYCOMB**, **CONSTELLATION** und **ECO**. Sind Learning und Thinking deaktiviert, bleibt das System im Living-Modus; eingehende Agent- oder KB-Anfragen können weiterhin die tatsächlich verwendeten Notes aktivieren.
|
||
|
||
Über **FILTER** werden ausschließlich die exakten Werte des JSON-Feldes `source` ausgewählt. Es gibt keine Kategoriefilter, keine technische `origin`-Aliasauflösung und keine Schnittmenge aus Environment und WebUI mehr.
|
||
|
||
- **Lernen**: Nur Nodes mit exakt passendem `source` erhalten neue Embeddings und dürfen bei semantischen Abfragen verwendet werden.
|
||
- **Anzeige**: Nur Nodes mit exakt passendem `source` werden gerendert; direkt verbundene Kategorie-, Quellen- und Konzept-Nodes bleiben als visuelle Taxonomie sichtbar.
|
||
- **Thinking**: Nur Nodes und explizit mit einer Quelle versehene Webbelege mit exakt passendem `source` dürfen neue Relationen und Artikel speisen.
|
||
|
||
Mehrere ausgewählte Quellen verwenden ODER-Semantik. Eine leere Liste bedeutet „alle Quellen“. Der Vergleich ist nach dem Entfernen äußerer Leerzeichen **case-sensitiv und exakt**:
|
||
|
||
```text
|
||
source: "internal-category" passt zu internal-category
|
||
source: "internal-category" passt nicht zu Internal-Category
|
||
source: "GLPI Knowledge Base" passt nicht zu glpi-kb
|
||
```
|
||
|
||
Der GLPI-Quellenname stammt ausschließlich aus:
|
||
|
||
```env
|
||
GLPI_KB_SOURCE=GLPI Knowledge Base
|
||
```
|
||
|
||
Dieser Wert wird in der WebUI immer als Auswahl angeboten, auch wenn GLPI noch nicht synchronisiert wurde oder aktuell 0 Beiträge vorhanden sind.
|
||
|
||
Die folgenden Environment-Variablen sind nur Startwerte, wenn noch keine neue versionierte `runtime-settings.json` existiert. Danach ist die WebUI-Auswahl die einzige aktive Konfiguration; es gibt keine zusätzliche Environment-Obergrenze:
|
||
|
||
```env
|
||
BRAIN_LEARNING_ENABLED=true
|
||
BRAIN_THINKING_ENABLED=true
|
||
|
||
# Exakte Werte des KB-JSON-Feldes source; leer = alle
|
||
BRAIN_LEARNING_SOURCES=
|
||
BRAIN_DISPLAY_SOURCES=
|
||
BRAIN_THINKING_SOURCES=
|
||
|
||
BRAIN_DEFAULT_VIEW=neural # neural | honeycomb | constellation
|
||
BRAIN_MAX_DISPLAY_NODES=0 # 0 = unbegrenzt; alternativ z. B. 5000
|
||
BRAIN_LOW_POWER_MODE=false
|
||
|
||
# v11: aggressiver Throughput-/Benchmark-Modus. CPU leer = runtime.NumCPU().
|
||
BRAIN_SPEED_MODE=false
|
||
BRAIN_SPEED_CPU_TASKS=
|
||
BRAIN_SPEED_GPU_TASKS=4
|
||
```
|
||
|
||
Alte `learning_categories`, `display_categories`, `thinking_categories` und frühere unversionierte Source-Filter werden beim ersten Start dieser Version bewusst ignoriert. Schalter, Ansicht und Performancewerte bleiben erhalten. Beim nächsten Speichern schreibt die WebUI `source_filter_version: 1`. `graph.db` muss dafür nicht gelöscht werden.
|
||
|
||
Die Ansichten erfüllen unterschiedliche Aufgaben:
|
||
|
||
- **Neural** zeigt das lebende semantische Netz mit LOD, Cortex, Synapsen und Partikeln.
|
||
- **Honeycomb** rendert `knowledge`, `ai-think` und `external` gleichmäßig in einer 3D-Gehirnwabe. Reguläre Edges und Cortex-Flächen bleiben dort unsichtbar.
|
||
- **Constellation** ordnet Wissenselemente als Themensterne um semantische Zentren an. Dezente Bahnen und aggregierte Themenverbindungen machen Fachgebiete und Übergänge leichter lesbar als ein dichtes Gesamtnetz.
|
||
|
||
Der **ECO**-Schalter begrenzt die Ausgabe auf ungefähr 30 FPS, reduziert die Device-Pixel-Ratio, teure Gradienten, Hintergrundsterne, gleichzeitig sichtbare inaktive Edges, Partikel und Wolken. Aktivierte Nodes, SearXNG-Animationen, Themenzentren und Übergänge bleiben sichtbar. Das ist zusätzlich zum GPU-Node-Limit; der ECO-Modus entfernt keine Wissenselemente.
|
||
|
||
Graphupdates verändern vorhandene Node-Objekte und Positionen in-place. Neue Elemente blenden ein, entfernte Elemente blenden aus, Ansichtswechsel morphen zwischen den Koordinatenräumen. Unveränderte Snapshots werden übersprungen und reine Edgeupdates lösen keinen vollständigen Layout-Neuaufbau aus.
|
||
|
||
Mehr Details: [`SOURCE-ONLY-FILTERS.md`](SOURCE-ONLY-FILTERS.md), [`VISUALIZATION-PERFORMANCE.md`](VISUALIZATION-PERFORMANCE.md) und [`RUNTIME-CONTROLS-HONEYCOMB.md`](RUNTIME-CONTROLS-HONEYCOMB.md).
|
||
|
||
## Autonomous Research: selbstständige Wissensanreicherung
|
||
|
||
Die Webrecherche ist nicht mehr an einen einzelnen AI-THINK-Artikelversuch gebunden. Ein eigener Opportunity-Scanner bewertet den Graphen regelmäßig auf Widersprüche, fehlende externe Evidenz, Alter, Zentralität und schwache Verknüpfung. Qwen zerlegt geeignete Kandidaten in konkrete Forschungsfragen sowie deutsche und englische SearXNG-Queries.
|
||
|
||
Aufgaben landen zuerst persistent in `graph.db`. Ein Low-Priority-Worker least genau eine Aufgabe, prüft Leerlauf und Tagesbudget und verwendet danach die bestehende iterative SearXNG-/Volltext-/Evidenzpipeline. SearXNG-Suchen, Volltextabrufe und Ollama-Aufrufe teilen jetzt zusätzlich eine gemeinsame begrenzte Work-Queue. Semantisch äquivalente Research-Intents werden über Embeddings erkannt: läuft bereits eine gleichbedeutende Recherche, wartet der zweite Auftrag auf ihr Ergebnis; kürzlich abgeschlossene Evidenz kann ohne erneuten Webabruf wiederverwendet werden. Deutsche und englische Query-Varianten innerhalb derselben Forschungsfrage bleiben ausdrücklich erhalten.
|
||
|
||
```env
|
||
BRAIN_AUTONOMOUS_RESEARCH_ENABLED=false
|
||
BRAIN_AUTONOMOUS_RESEARCH_IDLE_ONLY=true
|
||
BRAIN_AUTONOMOUS_RESEARCH_INTERVAL=30m
|
||
BRAIN_AUTONOMOUS_RESEARCH_TASKS_PER_CYCLE=1
|
||
BRAIN_AUTONOMOUS_RESEARCH_MAX_TASKS_PER_DAY=12
|
||
BRAIN_AUTONOMOUS_RESEARCH_MAX_QUERIES_PER_TASK=6
|
||
BRAIN_AUTONOMOUS_RESEARCH_MAX_PAGES_PER_TASK=8
|
||
BRAIN_AUTONOMOUS_RESEARCH_MAX_ROUNDS=3
|
||
BRAIN_AUTONOMOUS_RESEARCH_MIN_PRIORITY=0.65
|
||
BRAIN_AUTONOMOUS_RESEARCH_COOLDOWN=168h
|
||
BRAIN_AUTONOMOUS_RESEARCH_LEASE=45m
|
||
BRAIN_AUTONOMOUS_RESEARCH_MAX_ATTEMPTS=3
|
||
BRAIN_AUTONOMOUS_RESEARCH_QUERY_TRIGGERS=true
|
||
BRAIN_AUTONOMOUS_RESEARCH_OPPORTUNITY_LIMIT=8
|
||
```
|
||
|
||
Der Agent oder andere Systeme können über `POST /api/research/tasks` explizit Aufgaben einreihen. Die Eventtypen `knowledge.answer_insufficient`, `knowledge.search.empty` und `agent.answer.uncertain` erzeugen über `/api/events` ebenfalls eine priorisierte Aufgabe. Die WebUI zeigt Queue, Status, Evidenzzahl und Versuche und bietet manuelles Einreihen, Graphanalyse, Queue-Wakeup sowie Abbruch wartender Aufgaben.
|
||
Die aktualisierten Integrationspatches unter `integrations/agent/` und `integrations/knowledgebase/` senden bei einer Suche ohne Treffer automatisch `knowledge.search.empty`; die Telemetrie bleibt asynchron und fail-open.
|
||
|
||
Akzeptierte Webbelege werden automatisch gelernt und verknüpft. Neue oder überarbeitete Artikel bleiben weiterhin ausschließlich im AI-Staging und benötigen eine manuelle Freigabe.
|
||
|
||
Details: [`AUTONOMOUS-RESEARCH.md`](AUTONOMOUS-RESEARCH.md).
|
||
|
||
## Speed Mode v11
|
||
|
||
Mit `BRAIN_SPEED_MODE=true` entfernt das Brain kuenstliche Pacing-Pausen und erhoeht CPU-/GPU-Parallelitaet zur Laufzeit. `BRAIN_SPEED_CPU_TASKS` steuert Compute-/Vector-Worker, `BRAIN_SPEED_GPU_TASKS` das InFlight-Limit **je Ollama-Node**. Der Vector-Graph parallelisiert im Speed-Modus auch seine internen per-Node LSH/Cosine-Phasen. Eco und Speed sind gegenseitig exklusiv. Safety-/Quality-Gates, Fehler-Cooldowns, Timeouts, Graph-/SQLite-Locks, Autonomous-Tagesbudget und Docker-Controller-Policy bleiben aktiv. Details: [`SPEED-MODE-V11.md`](SPEED-MODE-V11.md).
|
||
|
||
## Autonome Anreicherung
|
||
|
||
Der Worker arbeitet bewusst sequenziell, trennt aber jetzt zwei Aufgaben:
|
||
|
||
1. Kandidatenpaar aus bestehenden Vektoren auswählen;
|
||
2. **Relation Thinking** bewertet ausschließlich die Beziehung und erzeugt eine Edge oder verwirft sie;
|
||
3. bei einer bestätigten Relation werden drei bis acht verwandte interne Quellen gesammelt;
|
||
4. ein Planungsaufruf entscheidet `create`, `update`, `merge` oder `skip` und formuliert Research-Themen;
|
||
5. im adaptiven Cluster-Modus wird SearXNG nur bei Aktualitäts-/Evidenzbedarf genutzt; im `always`-Modus sammelt es weiterhin passende Volltexte als Materialpool;
|
||
6. `BRAIN_ARTICLE_SYNTHESIS_MODEL` schreibt den vollständigen Artikel;
|
||
7. `BRAIN_ARTICLE_REVIEW_MODEL` prüft den fertigen Text Claim für Claim und kann eine gezielte Research-/Rewrite-Runde auslösen;
|
||
8. nur der akzeptierte Artikel landet als `AI-THINK` / `AI-Staging` / `AI-Synthesis` im Staging;
|
||
9. der In-Memory-Graph sieht den Entwurf sofort, die Datei wird beim nächsten gebündelten Persistenz-Flush atomar geschrieben.
|
||
|
||
Qualitätsregeln verhindern reine AI-THINK-Ketten: standardmäßig mindestens drei produktive Quellen, mindestens 70 Prozent Produktionswissen und maximal Generierungstiefe zwei.
|
||
|
||
```env
|
||
BRAIN_AUTO_ENRICH=true
|
||
BRAIN_ENRICH_INTERVAL=90s
|
||
BRAIN_ENRICH_BATCH_SIZE=3
|
||
BRAIN_ENRICH_STEP_DELAY=3s
|
||
|
||
BRAIN_ARTICLE_SYNTHESIS_ENABLED=true
|
||
BRAIN_ARTICLE_LANGUAGE=de-DE
|
||
BRAIN_ARTICLE_SYNTHESIS_MODEL=gemma3:12b
|
||
BRAIN_ARTICLE_REVIEW_MODEL=qwen3:8b
|
||
BRAIN_ARTICLE_REVIEW_REPAIR_ROUNDS=1
|
||
BRAIN_ARTICLE_MIN_SOURCES=3
|
||
BRAIN_ARTICLE_MAX_SOURCES=8
|
||
BRAIN_ARTICLE_MIN_PRODUCTION_RATIO=0.70
|
||
BRAIN_ARTICLE_MAX_GENERATION_DEPTH=2
|
||
BRAIN_ARTICLE_MIN_CONFIDENCE=0.74
|
||
|
||
# offene, recall-orientierte Recherche
|
||
BRAIN_ARTICLE_RESEARCH_RESULTS=12
|
||
BRAIN_ARTICLE_RESEARCH_FETCH_RESULTS=6
|
||
BRAIN_ARTICLE_RESEARCH_EXPLORATION_RESULTS=3
|
||
BRAIN_ARTICLE_RESEARCH_PREFETCH_MIN_RELEVANCE=0.25
|
||
BRAIN_ARTICLE_RESEARCH_MIN_RELEVANCE=0.55
|
||
BRAIN_ARTICLE_RESEARCH_MIN_QUALITY=0.35
|
||
|
||
# gemeinsame Research/Ollama-Queue und semantische Deduplizierung
|
||
BRAIN_RESEARCH_OLLAMA_MAX_INFLIGHT=2
|
||
BRAIN_RESEARCH_OLLAMA_QUEUE_SIZE=64
|
||
BRAIN_RESEARCH_DEDUPE_THRESHOLD=0.92
|
||
BRAIN_RESEARCH_DEDUPE_TTL=45m
|
||
```
|
||
|
||
Details: [`KNOWLEDGE-SYNTHESIS.md`](KNOWLEDGE-SYNTHESIS.md).
|
||
|
||
Der manuelle AI-THINK-Button bleibt vorhanden. Alternativ:
|
||
|
||
```bash
|
||
curl -X POST 'http://localhost:8090/api/enrich?async=1'
|
||
```
|
||
|
||
## HTTP-Endpunkte
|
||
|
||
| Methode | Pfad | Zweck |
|
||
|---|---|---|
|
||
| `GET` | `/api/status` | Gesamtstatus inklusive Ollama-Pool, GLPI-KB und Persistenzqueue |
|
||
| `GET` | `/api/graph` | vollständiger aktueller In-Memory-Graph |
|
||
| `GET` | `/api/analysis` | strukturelle Graphanalyse |
|
||
| `GET` | `/api/analysis/dashboard` | detaillierte aktuelle Analyse, Laufhistorie, Zeitreihe und konkretes Änderungsjournal |
|
||
| `GET` | `/api/analysis/export` | vollständige Analyse als formatiertes JSON exportieren |
|
||
| `GET` | `/api/runtime-settings` | aktuelle Learning-, Thinking-, exakte Source- und View-Einstellungen |
|
||
| `PUT` | `/api/runtime-settings` | Laufzeiteinstellungen ändern und gebündelt persistieren |
|
||
| `GET` | `/api/sources` | exakte `source`-Werte mit Anzahl; enthält immer `GLPI_KB_SOURCE` |
|
||
| `GET` | `/api/stream` | SSE-Aktivitätsstrom |
|
||
| `POST` | `/api/query` | programmatische Wissensanfrage; in der Fullscreen-UI verborgen |
|
||
| `POST` | `/api/events` | optionale Agent-/KB-Telemetrie |
|
||
| `POST` | `/api/reindex` | lokaler Scan und Embedding-Abgleich |
|
||
| `POST` | `/api/enrich` | AI-THINK-Zyklus einplanen/ausführen |
|
||
| `POST` | `/api/glpi-kb/sync` | GLPI-KB manuell synchronisieren |
|
||
| `POST` | `/api/flush` | ausstehende Dateien und geänderte SQLite-Zeilen sofort persistieren |
|
||
| `GET` | `/api/state/export` | kompakte, konsistente `graph.db` exportieren |
|
||
| `GET` | `/api/research/tasks` | persistente autonome Research-Queue und Workerstatus |
|
||
| `POST` | `/api/research/tasks` | externe oder manuelle Rechercheaufgabe asynchron einreihen |
|
||
| `POST` | `/api/research/tasks/{id}/cancel` | wartende, zurückgestellte oder reservierte Aufgabe abbrechen |
|
||
| `POST` | `/api/research/autonomous/scan` | Graph sofort nach Wissenslücken analysieren |
|
||
| `POST` | `/api/research/autonomous/run` | wartende Queue ohne Umgehung der Kapazitätsregeln wecken |
|
||
|
||
Mit `BRAIN_API_KEY` werden POST-Endpunkte über `Authorization: Bearer …` oder `X-Brain-Key` geschützt.
|
||
|
||
## Statusdiagnose
|
||
|
||
```bash
|
||
curl http://localhost:8090/api/status | jq
|
||
```
|
||
|
||
Wichtige Bereiche:
|
||
|
||
- `ollama_pool.nodes[]`: Health, Kompatibilität, Inflight, Requests, Fehler und mittlere Laufzeit;
|
||
- `glpi_kb`: letzter Sync, Dokumentanzahl, Pfad und Fehler;
|
||
- `persistence`: ausstehende Dateien, Dirty-Status, letzter Flush und Flush-Fehler;
|
||
- `graph_storage`: SQLite-/WAL-Größe, Vector-Bytes, Row-Anzahl und ausstehende Änderungen;
|
||
- `enrich_*`: Zustand des AI-THINK-Workers;
|
||
- `autonomous_research`: Queue-Zähler, laufende Aufgabe, Budgetparameter, letzte Fehler sowie gelernte Evidenz und erzeugte Staging-Artikel;
|
||
- `relations_created`, `articles_created`, `articles_skipped`: getrennte Relation- und Artikelergebnisse.
|
||
|
||
## Validierung
|
||
|
||
```bash
|
||
go test ./...
|
||
go vet ./...
|
||
node --check internal/web/static/app.js
|
||
node --check internal/web/static/analysis.js
|
||
```
|
||
|
||
## Sichtbare SearXNG-Recherche
|
||
|
||
SearXNG-Suchen werden als eigenständige Aktivität visualisiert. Scanringe markieren die laufende Suche. Im adaptiven Artikelpfad werden gefundene Volltexte zunächst nur im Evidence-Store gespeichert; externe Graph-Nodes erscheinen erst, wenn der finale Reviewer die Quelle tatsächlich für einen unterstützten Claim verwendet. Relations- und Autonomous-Research können weiterhin eigene Research-Nodes erzeugen.
|
||
|
||
Unter **FILTER → SearXNG-Diagnose** kann eine direkte Testsuche ausgeführt werden. Diese umgeht die fachliche Qwen-Entscheidung, verändert den Graphen nicht und zeigt eindeutig:
|
||
|
||
- die tatsächlich verwendete Basis-URL,
|
||
- HTTP-Status und Content-Type,
|
||
- Trefferzahl und Laufzeit,
|
||
- DNS-, Netzwerk-, TLS-, HTTP- und JSON-Fehler,
|
||
- bei Fehlern den Antwortausschnitt von SearXNG oder Reverse Proxy.
|
||
|
||
Die Artikelrecherche arbeitet ohne `site:`-Filter und ist im Cluster/Fast-Modus standardmäßig adaptiv: interne Quellen/Gemma zuerst, SearXNG nur bei Aktualitäts- oder konkretem Evidenzbedarf, anschließend Claim-Review und ggf. gezielte Repair-Recherche. Im Analyse-Center zeigt der Ollama-Status aktive/wartende Einträge der gemeinsamen Research/Ollama-Queue sowie die Verfügbarkeit von Autor- und Reviewer-Modell. Die API-Endpunkte sind `GET /api/research/status` und `POST /api/research/test`. Details stehen in `SEARXNG-VISUALIZATION.md`, `GENERATE-THEN-REVIEW.md` und `ADAPTIVE-ARTICLE-WORKFLOW.md`.
|
||
|
||
## Cluster/Fast-Verarbeitungsmodus
|
||
|
||
Für große Wissensgraphen kann neben dem bisherigen präzisen Vollscan der Modus `BRAIN_PROCESSING_MODE=clustered` verwendet werden. Er nutzt Semantic Hashing zur Kandidatenvorsortierung, berechnet exakte Cosine-Nähe nur für eine kleine Top-K-Shortlist, bündelt thematisch kompatible Relationen zu gemeinsamen Artikeljobs, nutzt adaptive statt obligatorischer Webrecherche und materialisiert Webquellen erst nach Reviewer-Grounding. Der finale Claim-Review bleibt erhalten. Details: `CLUSTER-FAST-MODE.md` und `ADAPTIVE-ARTICLE-WORKFLOW.md`.
|
||
|
||
## Integrated distributed Source Agents
|
||
|
||
The project can now run the exact same binary/image as either the full Brain or a lightweight source poller:
|
||
|
||
```env
|
||
BRAIN_MODE=brain
|
||
```
|
||
|
||
or:
|
||
|
||
```env
|
||
BRAIN_MODE=agent
|
||
BRAIN_AGENT_BRAIN_URL=https://brain.example.org
|
||
BRAIN_AGENT_ID=security-news-01
|
||
BRAIN_AGENT_TOKEN=brain_agent_...
|
||
```
|
||
|
||
Create Agents and RSS/Atom/sitemap/Web polling tasks under `/source-agents.html`. Set `BRAIN_PUBLIC_URL` on the Brain to an address the Agent can actually reach; do not copy a browser-side `127.0.0.1`/`localhost` URL into a separate Agent container. The Agent exposes a small diagnostics UI on `/` and detailed connection state on `/api/status`; the example compose publishes it with `BRAIN_AGENT_PORT` (default `8092`). Incoming documents first enter a persistent Source Inbox and are classified against the local KB; adaptive article research searches this Inbox before falling back to SearXNG. Discovered documents are not materialized as graph knowledge until a reviewer actually uses them to ground a supported claim. See `SOURCE-AGENT-MODE.md` for the API, security model and deployment example.
|
||
|
||
Source Agents can additionally advertise a `vector_graph` CPU capability. With `BRAIN_VECTOR_GRAPH_AGENT_OFFLOAD=true`, the Brain can stream already existing embeddings to such an Agent for deterministic LSH/k-NN/Cosine/local-scaling calculation. This compute path performs no Chat or Embed call on the Agent and works even when the Agent has no source polling task. `BRAIN_VECTOR_GRAPH_AGENT_REQUIRED=false` keeps a safe local CPU fallback.
|
||
|
||
### Production Readiness v1
|
||
|
||
Der aktuelle Stand enthält einen Bootstrap-Gate, kausale Workflow-Mutationsmessung, append-only Audit-Events, Source-Inbox/Graph-Reconciliation und einen Knowledge-Manifest-Fast-Path. Für große Knowledge-Bestände ist der Default für `BRAIN_SCAN_INTERVAL` nun `5m`; zusätzlich verifiziert `BRAIN_KNOWLEDGE_FULL_VERIFY_INTERVAL=6h` den vollständigen Dateiinhalt periodisch. Details: `CHANGELOG-PRODUCTION-READINESS.md` und `VALIDATION-PRODUCTION-READINESS.md`.
|
||
|
||
## Host-Docker Controller (v9, opt-in)
|
||
|
||
Ein vertrauenswürdiger Source Agent kann zusätzlich als zentral gesteuerter Docker-Controller dienen. Der Controller ist standardmäßig ausgeschaltet und der normale Agent mountet **keinen** Docker Socket. Nach explizitem Opt-in kann das Brain typisierte Container-/Network-/Volume-/Compose-Jobs verwalten und vorab freigegebene Profile autonom für Evidence-Zweitprüfung, Health-Recovery, Compute-Kapazität und Smoke-Tests verwenden. Ein globaler Hauptschalter und Emergency Stop bleiben im Brain-Dashboard verfügbar.
|
||
|
||
Wegen der hohen Privilegien von Docker.sock gibt es keinen freien Docker-Exec-/Shell-Kanal für das Brain oder ein Modell. Details, Threat Model und Deployment: `DOCKER-CONTROLLER-V9.md`.
|