Skip to Content
KnowledgeSDKKonfiguration

Konfiguration

Alle Konfigurationsoptionen fuer das KnowledgeSDK an einem Ort — Umgebungsvariablen, Collection-Registry, LLM-Provider, Feedback-Store und Schwellenwerte.

Umgebungsvariablen

Such-Server

VariableDefaultBeschreibung
QMD_INDEX_PATH/data/index.sqlitePfad zur SQLite-Datenbank
QMD_SEARCH_MODEftsfts (nur BM25) oder hybrid (BM25 + Vektor)
QMD_EMBED_PROVIDERnoneEmbedding-Provider: none, openai, voyage
QMD_API_KEY(leer)API-Key fuer Such-Endpoints (leer = kein Auth)
QMD_MCP_ENABLEDfalseMCP-Endpoint /api/mcp aktivieren
PORT3001Server-Port

Indexer

VariableDefaultBeschreibung
QMD_CONFIG/app/config.jsonPfad zur Indexer-Konfigurationsdatei
QMD_INDEX_PATH/data/index.sqlitePfad zur Ziel-Datenbank
QMD_EMBED_PROVIDERnoneEmbedding-Provider fuer den Index
SKIP_EMBEDfalseEmbeddings beim Indexieren ueberspringen
GITHUB_TOKEN(leer)Token fuer das GitHub-Plugin (Content-Sources)

Classifier

VariableDefaultBeschreibung
CLASSIFIER_API_KEY(leer)API-Key fuer Classifier-Endpoints (leer = offen)
OPENAI_API_KEY(leer)Fuer LLM-Entscheider (Slow Path) mit OpenAI
ANTHROPIC_API_KEY(leer)Fuer LLM-Entscheider mit Anthropic
FEEDBACK_DB_PATHneben dem qmd-IndexPfad zur Feedback-SQLite-DB

CLI / Single-Binary

Die CLI akzeptiert dieselben Umgebungsvariablen wie der Docker-Server:

QMD_INDEX_PATH Pfad zur SQLite-Datenbank QMD_EMBED_PROVIDER none | openai | voyage QMD_SEARCH_MODE fts | hybrid QMD_API_KEY API-Key fuer Auth (Serve-Modus) GITHUB_TOKEN Fuer GitHub-Plugin (Index-Modus)

In der Produktion (K8s) werden Secrets ueber ExternalSecrets aus 1Password geladen. Der jeweilige Key muss als Feld im 1Password-Item hinterlegt sein.

Collection-Registry

Die Collection-Konfiguration definiert pro Collection Repositories, Keywords und Sub-Themen. Sie liegt entweder in lib/classifier-config.ts (bei Library-Nutzung) oder in der config.json (bei Docker/CLI).

Struktur

interface ClassifierCollectionMeta { name: string; // z.B. "engine" repos: RepoRef[]; // Zugeordnete GitHub-Repositories keywords: WeightedKeyword[]; // Gewichtete Keywords subThemes: SubTheme[]; // Sub-Themen fuer feingranulare Zuordnung }

Beispiel: Engine-Collection

{ name: 'engine', repos: [ { org: '5minds', name: 'ProcessCube.Engine.MonoRepo', branch: 'main' }, ], keywords: [ { term: 'bpmn', weight: 2.0 }, { term: 'workflow', weight: 2.0 }, { term: 'timer', weight: 1.0 }, { term: 'user-task', weight: 1.0 }, { term: 'gateway', weight: 1.0 }, // ... ], subThemes: [ { name: 'bpmn/timer-events', keywords: ['timer', 'cron', 'delay'], docPath: '/engine/bpmn/timer-events' }, { name: 'bpmn/gateways', keywords: ['gateway', 'exclusive', 'parallel'], docPath: '/engine/bpmn/gateways' }, // ... ], }

Keyword-Gewichte

GewichtBedeutungBeispiel
2.0Starkes Signal — eindeutig fuer diese Collectionbpmn → engine
1.5Mittleres Signallogin → authority
1.0Normales Signaltimer → engine
0.8Schwaches Signal — kann mehrdeutig seinprozess → engine

Mehrere Keyword-Treffer derselben Collection verstaerken den Score (Multi-Hit-Bonus).

Repositories

Jede Collection kann ein oder mehrere GitHub-Repositories zugeordnet bekommen. Wenn ein Ticket aus einem dieser Repos stammt, erhaelt die Collection einen starken Repo-Match-Bonus (Gewicht 3.0x).

Sub-Themen

Innerhalb einer Collection ermoeglichen Sub-Themen eine feingranulare Zuordnung:

subThemes: [ { name: 'bpmn/timer-events', keywords: ['timer', 'cron', 'delay'], docPath: '/engine/bpmn/timer-events', }, ]

Das Sub-Thema mit den meisten Keyword-Treffern wird als subTheme im Ergebnis geliefert.

LLM-Provider

Der Slow Path nutzt ein LLM fuer unsichere Klassifikationen (Konfidenz unter dem Fast Path Threshold). Das LLM ist optional — ohne Konfiguration wird immer der regelbasierte Fast Path genutzt.

Konfiguration

{ llm: { provider: 'openai', // oder 'anthropic' model: 'gpt-4o-mini', // guenstig, schnell, ausreichend temperature: 0, // deterministisch maxTokens: 300, // JSON-Response braucht nicht viel }, fastPathThreshold: 0.8, // Ab diesem Score kein LLM noetig }

Provider-Vergleich

ProviderModell-EmpfehlungKosten/TicketLatenzEnv-Variable
OpenAIgpt-4o-mini~0.001 USD~500msOPENAI_API_KEY
Anthropicclaude-haiku-4-5-20251001~0.001 USD~600msANTHROPIC_API_KEY

Ohne LLM-Konfiguration funktioniert der Classifier rein regelbasiert. Das LLM verbessert nur unsichere Faelle (ca. 20-30% der Tickets).

Feedback-Store

Der Feedback-Store speichert Klassifikationen und Korrekturen in einer SQLite-Datenbank mit FTS5-Volltextsuche. Er ermoeglicht das Self-Improvement des Classifiers.

Datenbank-Pfad

UmgebungPfad
Produktion (K8s)/data/qmd/feedback.sqlite
Lokal./data/qmd/feedback.sqlite
BenutzerdefiniertUeber FEEDBACK_DB_PATH

Verhalten

  • Die Feedback-DB wird automatisch erstellt, wenn sie nicht existiert
  • Sie ist unabhaengig vom Such-Index (index.sqlite)
  • Kann geloescht werden, ohne die Suche zu beeintraechtigen — nur gelerntes Feedback geht verloren
  • Jede Klassifikation wird gespeichert (fuer spaeteres Feedback)
  • Korrekturen werden per correlationId zugeordnet

Tabellen

TabelleZweck
classificationsAlle Klassifikationen mit Vorhersage + Korrektur
classifications_ftsFTS5-Index ueber Titel + Body (fuer Textaehnlichkeit)

Fast Path Threshold

Der Schwellenwert bestimmt, ab welchem Score der Classifier ohne LLM entscheidet:

{ fastPathThreshold: 0.8, // Default }
WertAuswirkung
0.8 (Default)Guter Kompromiss — ~70-80% der Tickets werden regelbasiert entschieden
0.9Konservativer — mehr LLM-Aufrufe, hoehere Genauigkeit
0.6Aggressiver — weniger LLM-Aufrufe, hoehere Geschwindigkeit

Zusaetzlich muss der Abstand zum zweitbesten Kandidaten mindestens 0.2 betragen, damit der Fast Path greift. Bei knappen Entscheidungen wird immer das LLM befragt.

Autorisierung

Lokal (Entwicklung)

Ohne CLASSIFIER_API_KEY und QMD_API_KEY sind alle Endpoints offen.

Produktion (K8s)

Die Keys werden ueber ExternalSecrets aus 1Password geladen:

1Password (docs-prd) → ExternalSecret (docs-env-secret) → Env-Vars CLASSIFIER_API_KEY, QMD_API_KEY im Pod

Die jeweiligen Keys muessen als Felder im 1Password-Item docs-prd hinterlegt sein.