Embeddings: reine DB-Grenze
Kurz gesagt: Eigen Mesh speichert mathematische Suchindizes intern, sendet sie aber nie an KI-Tools oder den Chat — in Prompts und Tool-Ergebnissen erscheint nur menschenlesbarer Text.
Status: In der eigen-Produkt-Codebasis durchgesetzt. Risiko: Kritisch (Ingestion, Retrieval, MCP, Chat).
Für wen das relevant ist
- Operatoren, die die Datenexposition auf selbst gehosteten Deployments prüfen
- Integratoren, die überprüfen, was MCP-Tools an KI-Clients zurückgeben dürfen
Richtlinie
Embedding-Vektoren (1536-dimensionale Fließkommazahlen für Thoughts, Entities, zeitliche Events usw.) sind Kerninfrastruktur:
- Erlaubt: Berechnung über das Embedding-Gateway, Speicherung in Postgres/pgvector, Nutzung innerhalb von Retrieval und Konsolidierung (Distanz-Queries, interne Pipelines).
- Verboten: Vektoren aus MCP-Tools, HTTP-Tool-artigen APIs, Chat-/Agent-Payloads oder jeder LLM-Chat-Completion-Anfrage zurückgeben; vollständige Vektoren oder lange Embedding-Inputs loggen.
Textfelder (normalizedText, Snippets, Scores) sind in Tools und LLM-Prompts unproblematisch. Vektoren nicht.
Warum
- Vektoren sind groß (~6.000+ Tokens pro Serialisierung), liefern Chat-Modellen keine nutzbare Semantik und sprengen Context-Windows.
- Nutzervertrauen: Memory-Inhalte in Prompts sollten menschenlesbarer Text sein, keine rohen numerischen Embeddings.
Durchsetzung (Defense in Depth)
Das eigen-Produkt wendet mehrere Schichten an:
| Schicht | Rolle |
|---|---|
| Query-Form | Tool-seitige Reads schließen embedding-Spalten aus |
| MCP-Tools | Bereinigen jede Tool-Rückgabe vor der JSON-Serialisierung |
| Agent-Loop | Bereinigt nach jedem Tool-Aufruf; komprimiert Ergebnisse für Folge-Turns |
| Chat-Gateway | Entfernt Vektoren unmittelbar vor LLM-Anfragen |
| Gemeinsamer Stripper | Entfernt rekursiv Vektor-Feldnamen und 1536-elementige numerische Arrays |
| Logs | Keine Vektor-Vorschauen in der Konsolenausgabe |
Retrieval und Compose-Answer
searchThoughts/retrieve_thoughtsliefert Scores und Text, nicht die gespeicherten Thought-Embeddings.composeAnswerund der In-App-Chat bauen LLM-Prompts aus Text, Kategorie, Scores und Datumsangaben — nie aus Embedding-Spalten.- Query-Embeddings werden in-process nur für die SQL-Distanzberechnung erzeugt; sie werden nicht an Tool-Ergebnisse angehängt.
Bewusste Ausnahme
Die Graph-Embedding-Map-UI (GET /api/embeddings/snapshot) liefert Vektoren ausschließlich für autorisierte In-Browser-Visualisierung — nicht für MCP, nicht für den Chat-LLM.
Für Integratoren
Beim Bauen auf MCP oder REST:
- Erwarte oder fordere niemals Embedding-Arrays in Tool-Ergebnissen an — sie werden by Design entfernt.
- Nutze die Textfelder und Scores von
retrieve_thoughtsfür den Kontextaufbau. - Siehe MCP-Tools-Referenz.
Für Contributor
Implementierungs-Dateipfade und die PR-Review-Checkliste liegen in der Contributor-Dokumentation des eigen-Repositorys und in .cursor/rules/no-embeddings-in-llm.mdc.
Einstiegspunkte in die Domänen: Ingestion, Retrieval.
Troubleshooting
Embedding-bezogene Probleme sind für Endnutzer selten. Siehe Troubleshooting für allgemeinere MCP- und Retrieval-Probleme.
Nächste Schritte
- MCP-Tools-Referenz — erlaubte Felder in Tool-Antworten
- Wie Memory funktioniert — Überblick über die Retrieval-Pipeline