KnowledgeOS ist eine modulare Plattform für Wissensaufnahme, Extraktion und Aufbereitung:
- Ingest von Quellen (Datei, RSS, weitere Skills als Platzhalter)
- Queue-basierte Verarbeitung mit BullMQ Worker(n)
- Strukturierte Wissensspeicherung in MongoDB (
entities,knowledge_chunks,prompts,audit_log) - Prompt-gesteuerte LLM-Extraktion mit konfigurierbarem Model-Routing
- UI mit Next.js für Entitäten, Monitoring, Provider-Überblick und einfache Graph-Ansicht
Das Projekt ist so aufgebaut, dass neue Skills und Processing-Pipelines schrittweise erweitert werden können.
Frontend (Next.js, Port 3000)
|
v
Orchestrator API (Express, Port 3001)
- CRUD, Ingest, Routing, Monitoring
- erstellt Jobs in BullMQ
|
v
Redis (Queue + Broker)
|
v
Worker (BullMQ Consumer, replizierbar)
- Skill-Execution
- Chunk-Erzeugung
- LLM-Extraktion (best effort)
- Komprimierung / Tuning-Jobs
|
v
MongoDB
- entities
- knowledge_chunks
- providers
- model_routing
- prompts
- audit_log
- CRUD für Provider, Entitäten und Routing-Regeln
- Datei-Ingest via Multipart (
POST /api/ingest/file) - Chunk-Liste je Entität (
GET /api/entities/:id/chunks) - Monitoring via SSE (
/api/monitor/stream) + einfache Statistiken
- Skill Queue (
skill-queue) für Ingest/Skill-Ausführung - Compression Queue (
compression-queue) für Digest-Erzeugung - Tuning Queue (
tuning-queue) für Prompt-Challenger-Erzeugung
- PromptEngine mit Prompt-Versionen aus MongoDB
- ModelRouter mit Provider + Routing-Regeln pro Task-Type
- Extraktor aktualisiert Chunk-Metadaten und Entity-Felder
- Übersicht und Einstieg (
/) - Entities-Liste (
/entities) - Entity-Detailansicht inkl. Felder/Chunks/Beziehungen (
/entities/[id]) - Provider-Übersicht (
/settings/providers) - Monitoring-View (
/monitor) - Vereinfachte Graph-Visualisierung (
/graph)
cp .env.example .envPflichtwerte in .env:
MONGO_PASSWORDENCRYPTION_KEY
Hinweis:
- Compose ist jetzt auf fail-fast gestellt. Fehlen diese Variablen, bricht
compose upsofort mit klarer Fehlermeldung ab. - Redis läuft mit
maxmemory-policy noeviction(empfohlen für BullMQ), damit Queue-Daten nicht unter Speicherdruck verworfen werden.
Für ENCRYPTION_KEY wird ein 32-Byte-Wert erwartet (oder 64 Hex-Zeichen).
Beispiel-Generierung:
openssl rand -hex 32Mit Podman:
podman compose up -dMit Docker:
docker compose up -dcurl -sS http://localhost:3001/healthErwartet:
{"ok":true}cd orchestrator
npm install
npm run devcd orchestrator
npm run build
npm run workercd frontend
npm install
npm run devVoraussetzung lokal:
- MongoDB erreichbar unter
MONGODB_URI - Redis erreichbar unter
REDIS_URL
knowledgeOS/
├── docker-compose.yml
├── .env.example
├── frontend/
│ ├── app/
│ └── Dockerfile
├── orchestrator/
│ ├── src/
│ │ ├── core/
│ │ ├── db/
│ │ ├── queue/
│ │ ├── routes/
│ │ ├── skills/
│ │ └── utils/
│ ├── Dockerfile
│ └── Dockerfile.worker
└── docs/
GET /healthGET|POST|PUT|DELETE /api/providersPOST /api/providers/:id/sync-modelsGET|POST|PUT|DELETE /api/entitiesPOST /api/entities/:id/crawl-nowPOST /api/entities/:id/compressGET /api/entities/:id/chunksGET /api/entity-typesGET|PUT /api/routingGET /api/skillsGET /api/monitor/statsGET /api/monitor/costsGET /api/monitor/streamPOST /api/ingest/file
Details siehe docs/API.md.
- Provider-API-Keys werden verschlüsselt gespeichert (
AES-256-GCM) - CORS ist global aktiviert (aktuell ohne Whitelist)
- Branch-Schutz für GitHub
mainwird empfohlen (und weiter unten dokumentiert)
Details:
- Architektur
- API
- Datenmodell
- Betrieb und Deployment
- Frontend
- Release-Prozess
- GitHub Repo + Main Branch Protection
- Contributing Guide
- Security Policy
- Changelog
- CI-Workflow für
main/PRs:.github/workflows/ci.yml - Automationsskript für Public Repo + Main Protection:
./scripts/create_public_repo_secure_main.sh <github-owner> <repo-name>- Mehrere Skills sind aktuell Scaffolds und liefern noch keine echte Datenaufnahme (
imap,playwright,rest-api,linkedin,messaging). - Der
file-Skill nutzt aktuellutf8-Dateilesen; binäre Formate erfordern Erweiterung. - Es gibt aktuell keine automatisierten Tests im Repository.
- UI nutzt teils hartkodierte API-URLs (
http://localhost:3001).