mindnet/docs/chunking_strategy.md
Lars 6a293e842e
Some checks failed
Deploy mindnet to llm-node / deploy (push) Failing after 2s
docs/chunking_strategy.md aktualisiert
2025-09-09 11:56:26 +02:00

60 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Chunking-Strategie für mindnet
## Ziel
Die Chunking-Strategie sorgt dafür, dass Inhalte aus Markdown-Dateien verlustfrei, sinnvoll segmentiert und mit stabilen IDs in Qdrant abgelegt werden. Jeder Chunk soll semantisch sinnvoll abgegrenzt sein und eine optimale Balance aus Kontexttiefe und Abrufbarkeit für LLM-Abfragen bieten.
## Grundprinzipien
- **Chunkgrößen**: Zielbereich 250400 Tokens; Overlap 4060 Tokens.
- **Semantische Schnitte**: Chunks enden an Absätzen, Überschriften, Listenpunkten, Codeblöcken oder Zitaten.
- **Frontmatter**: YAML-Frontmatter wird **nicht** eingebettet, sondern vollständig im Note-Payload gespeichert.
- **Verlustfreiheit**: Originaltext bleibt durch `note.payload.fulltext` erhalten; Chunks enthalten zusätzlich `chunk.payload.text`.
## Typ-Spezifische Regeln
- **Notes (Konzepttexte, Pläne, Tagebücher)**: Chunk an Überschriften + Absätzen.
- **Checklisten / Listen**: jeder Abschnitt wird zu eigenem Chunk.
- **Codeblöcke**: immer geschlossen innerhalb eines Chunks.
- **Zitate**: als eigener Chunk, wenn mehr als 2 Zeilen.
## Overlaps
- Overlap von 4060 Tokens verhindert semantische Brüche zwischen Chunks.
- Overlap gilt **nur für den Body**, nicht für die YAML-Frontmatter.
## Edge-Modell (Graph)
- **Chunk → Note**: `belongs_to(note_id)` (immer; Owner-Note im Payload)
- **Chunk → Chunk**: `prev`, `next` (symmetrisch, für lineare Navigation)
- **Chunk → Note**: `references(target_id)` aus `[[Wikilinks]]` oder Links im Text
- **Note → Note**: `backlink(target_id)` automatisch generiert, dedupliziert
- **Optional**: `references:note` (nur wenn per Flag/ENV aktiviert, Default = aus)
- **Unresolved**: Kanten mit `status=unresolved`, wenn Ziel noch nicht existiert
## Payload-Erweiterungen
- Jeder Chunk speichert:
- `text` (Originalchunk)
- `note_id` (Owner)
- Metadaten (`chunk_index`, `section_title`, `neighbors.prev/next`)
- Jede Note speichert:
- `fulltext` (verlustfreier Body)
- `path` (relativ zum Vault)
- `references` (Liste von Slugs, als Fallback für Kantenbildung)
## Performance
- Qdrant-Payload-Indizes für `note_id`, `kind`, `scope`, `source_id`, `target_id`.
- Materialisierte Nachbarschaften optional in `note.payload.neighbors` für direkte 1-Hop-Abfragen.
## Beispiel (Chunk-Payload)
```yaml
id: concept-alpha#1
note_id: concept-alpha
note_title: "Concept Alpha"
chunk_index: 1
section_title: "Einleitung"
text: "Dies ist der Text des Chunks …"
wikilinks: ["concept-beta"]
references:
- kind: wikilink
target_id: concept-beta
neighbors:
prev: null
next: concept-alpha#2
path: area/concepts/concept-alpha.md