Files
glpi-neural-brain/AUTONOMOUS-RESEARCH.md
2026-08-07 17:05:03 +02:00

9.2 KiB

Autonomous Research

Ziel

Autonomous Research entkoppelt die Webrecherche von einem einzelnen AI-THINK-Artikelversuch. Das Brain kann nun selbstständig Wissenslücken erkennen, persistente Rechercheaufgaben planen, sie mit niedriger Priorität über den vorhandenen Ollama-Pool abarbeiten und akzeptierte externe Evidenz sofort lernen und verknüpfen.

Produktive Knowledgebase-Dateien werden weiterhin niemals automatisch verändert. Ein belastbarer neuer oder überarbeiteter Artikel landet ausschließlich im AI-Staging.

Warum eine eigene asynchrone Queue vor Ollama

Die Aufgaben werden nicht blind direkt in eine einzelne Ollama-Instanz geschoben. Davor liegt eine persistente SQLite-Queue:

Graph-Scanner / API / Agent-Event
            ↓
research_tasks in graph.db
            ↓
Leerlauf-, Tagesbudget- und Prioritätsprüfung
            ↓
Lease für genau einen Worker
            ↓
vorhandener Ollama-Pool mit Healthcheck, least-inflight und Failover
            ↓
SearXNG, Volltextprüfung, Evidenzlernen und Artikelsynthese

Das ist sinnvoller als eine unkontrollierte Ollama-Queue:

  • Benutzeranfragen und normales AI-THINK behalten Vorrang.
  • Aufgaben überleben Prozess- und Host-Neustarts.
  • Doppelte Themen werden über einen stabilen Dedupe-Key und einen Cooldown verhindert.
  • Eine Worker-Lease verhindert doppelte Verarbeitung.
  • Fehlgeschlagene Aufgaben werden mit Backoff erneut eingeplant und nach max_attempts beendet.
  • Der Ollama-Pool entscheidet erst unmittelbar vor einem Modellaufruf, welcher gesunde Node Kapazität besitzt.
  • Autonome Aufrufe tragen einen Low-Priority-Kontext. Wartet eine normale Agent-, Query- oder AI-THINK-Anfrage, darf der Hintergrundworker beim nächsten Pool-Acquire nicht vorbeiziehen.

Bereits laufende Modellgenerierungen werden nicht hart abgebrochen. Auf einem einzelnen Ollama-Node kann eine neu eintreffende interaktive Anfrage daher noch den aktuell laufenden autonomen Modellaufruf abwarten; zwischen allen weiteren Modellaufrufen erhält sie Vorrang. In einem Multi-Node-Pool kann sie parallel einen freien Node erhalten.

Der autonome Worker selbst arbeitet absichtlich sequenziell. SearXNG-Abfragen und Seitenabrufe können innerhalb einer Aufgabe mehrere Quellen verarbeiten, aber nur eine autonome Wissensaufgabe darf gleichzeitig die Synthese- und Graphpipeline verändern.

Eigenantrieb

Ein periodischer Scanner bewertet produktive Wissens-Nodes innerhalb des exakten Thinking-Source-Filters. Signale sind unter anderem:

  • akzeptierte contradicts-Beziehungen;
  • keine gelernte externe Evidenz;
  • hohes Alter des Wissens;
  • hohe Zentralität im Graphen;
  • schwache Verknüpfung eines ansonsten produktiven Wissenspunkts.

Die besten Kandidaten werden von Qwen in konkrete Opportunities umgewandelt. Der Planner muss dabei aus dem vorhandenen Quellenkontext ableiten:

  • ob externe Recherche wirklich Mehrwert verspricht;
  • ein enges Thema;
  • eine Begründung;
  • eine Priorität von 0 bis 1;
  • konkrete Forschungsfragen;
  • präzise deutsche und englische SearXNG-Queries;
  • ausschließlich tatsächlich vorhandene Seed-Node-IDs.

Eine Opportunity unterhalb der im WebUI eingestellten Mindestpriorität wird nicht eingereiht.

Nutzungsgesteuerte Trigger

Eine normale Wissensanfrage erzeugt optional eine Aufgabe, wenn keine Treffer vorhanden sind oder die Antwort explizite Unsicherheiten enthält. Das Verhalten wird durch folgende Einstellung gesteuert:

BRAIN_AUTONOMOUS_RESEARCH_QUERY_TRIGGERS=true

Zusätzlich erzeugen diese externen Eventtypen automatisch eine Research-Aufgabe:

knowledge.answer_insufficient
knowledge.search.empty
agent.answer.uncertain

Beispiel:

curl -X POST http://localhost:8090/api/events \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "knowledge.answer_insufficient",
    "source": "glpi-ai-agent",
    "query": "Wie wird ein verschlüsselter ZFS-Datensatz auf einem Ersatzsystem wiederhergestellt?",
    "message": "Die vorhandenen Treffer enthalten keine Key-Import- und Validierungsschritte.",
    "hits": [],
    "metadata": {"priority": 0.95}
  }'

Direkte API-Trigger

Aufgabe einreihen

POST /api/research/tasks
{
  "topic": "ZFS-Schlüsselwiederherstellung",
  "question": "Wie werden verschlüsselte ZFS-Datasets auf einem Ersatzsystem importiert, entsperrt und validiert?",
  "seed_node_ids": ["optional-existing-node-id"],
  "priority": 0.95,
  "requested_by": "glpi-ai-agent",
  "reason": "knowledge.answer_insufficient"
}

Die Antwort ist 202 Accepted, wenn eine neue Aufgabe erstellt wurde. Liegt dasselbe Thema innerhalb des Cooldowns bereits vor, wird die bestehende Aufgabe mit 200 OK zurückgegeben.

Queue anzeigen

GET /api/research/tasks?limit=100

Aufgabe abbrechen

POST /api/research/tasks/{id}/cancel

Nur queued, deferred und reserved können abgebrochen werden. Eine bereits laufende Synthese wird nicht hart unterbrochen.

Graph sofort analysieren

POST /api/research/autonomous/scan

Wartende Queue sofort wecken

POST /api/research/autonomous/run

„Queue starten“ umgeht weder Leerlauf-, Thinking-, SearXNG-, Tagesbudget- noch Ollama-Kapazitätsregeln. Es verkürzt nur die Wartezeit bis zur nächsten Prüfung.

Verarbeitung einer Aufgabe

  1. Vorhandene Seed-Nodes werden gegen den exakten Thinking-Source-Filter geprüft.
  2. Fehlen Seeds, sucht EmbeddingGemma passende produktive Wissens-Nodes zum Thema.
  3. Qwen vervollständigt bei Bedarf Forschungsfragen und deutsche/englische Queries.
  4. Die bestehende iterative Research-Pipeline führt SearXNG-Suchen aus.
  5. Treffer passieren Snippet-, Domain-, Relevanz- und Quellenqualitäts-Gates.
  6. Die besten Seiten werden SSRF-geschützt geladen, bereinigt und erneut bewertet.
  7. Nur akzeptierte Volltextbelege werden als Research-Evidence gelernt und mit Seed-Nodes verbunden.
  8. Die vorhandene Knowledge-Synthesis entscheidet, ob Evidenz allein genügt oder ein neuer beziehungsweise aktualisierter KB-Entwurf echten Mehrwert bietet.
  9. Resultat, Evidenzanzahl, Artikelpfad und Versuchshistorie werden in SQLite gespeichert.

Mögliche Outcomes:

evidence_only
article_created
no_useful_evidence
failed

Queue-Zustände

queued     wartet auf Priorität, Budget und Leerlauf
reserved   Worker-Lease wurde vergeben
running    SearXNG/Ollama/Synthese läuft
deferred   temporärer Fehler; erneuter Versuch nach Backoff
completed  Aufgabe ist abgeschlossen
failed     maximale Versuche erreicht
cancelled  manuell verworfen

Beim Start setzt das Brain abgelaufene reserved- oder running-Leases automatisch auf deferred zurück.

Konfiguration

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

Zusätzlich erforderlich:

SEARXNG_URL=http://searxng:8080

BRAIN_RESEARCH_ENABLED darf für normale Relation-/Artikelrecherche weiterhin separat gesetzt werden. Autonomous Research kann im WebUI aktiviert werden, sobald SEARXNG_URL beim Prozessstart vorhanden war.

WebUI

Unter FILTER → Autonomous Research stehen zur Verfügung:

  • Eigenständige Wissensanreicherung an/aus;
  • nur im Leerlauf;
  • Mindestpriorität;
  • maximale Aufgaben pro Tag;
  • neue Aufgaben pro Graphscan;
  • manuelle Rechercheaufgabe;
  • Graphanalyse starten;
  • Queue wecken;
  • persistente Queue mit Status, Priorität, Versuchen, Evidenzzahl und Abbruchmöglichkeit.

Der linke Activity-Feed zeigt Opportunity-Scans, Einreihung, Start, Abschluss und Fehler. Die darunterliegende SearXNG- und Volltextanimation bleibt unverändert sichtbar.

Source-Filter

Der autonome Graphscanner und die Seed-Auswahl verwenden den exakten Thinking-Source-Filter. Externe Volltextbelege besitzen als source ihre Domain. Soll autonome Recherche neue Domains uneingeschränkt lernen dürfen, muss Thinking → Alle aktiv sein. Eine eng begrenzte Thinking-Source-Liste verwirft Webbelege, deren Domain nicht exakt ausgewählt ist.

Sicherheitsgrenzen

  • Fremde Webseiten sind ausschließlich untrusted evidence.
  • Inhalte dürfen keine Modell- oder Systemanweisungen überschreiben.
  • lokale/private Adressen und Redirects werden standardmäßig blockiert;
  • Seiten-, Zeichen-, Zeit- und Ergebnislimits gelten weiterhin;
  • produktive KB-Dateien und GLPI werden nicht beschrieben;
  • automatisch erzeugte Artikel bleiben im Staging und benötigen manuelle Freigabe.

Sichere Wiederverwendung autonomer Recherche

Autonome Research-Tasks verwenden denselben Intent Guard wie die Artikelsynthese. Ein semantisch ähnlicher Cache-Treffer wird nur übernommen, wenn Hauptintention/Fokus/Entities kompatibel sind und die vorhandenen Volltexte bei einer erneuten Bewertung die aktuelle Task-Frage ausreichend abdecken. Andernfalls startet der Task eine neue offene Recherche.