Memories / Dokumentation

Auf dieser Seite

Suche, Embeddings und retrievalgestützte Generierung

Memories unterstützt Stichwortsuche und semantischen Abruf über autorisierte gewöhnliche Erinnerungen und Wissenskarten. Die Dokumentaufnahme akzeptiert UTF-8-Text und Markdown und erstellt eine normale verschlüsselte Wissenskarte. Die Extraktion aus PDF/DOCX/Binärdateien erfolgt nicht automatisch; wandeln Sie diese vor der ausdrücklichen Aufnahme in Text um. Private Inhalte, Zugangsdaten und Datei-Assets sind vom Abruf ausgeschlossen.

Schnellstart

Verwenden Sie für CLI und laufenden Daemon dasselbe Home und dieselbe Konfiguration. Starten Sie den Daemon nach einem Upgrade oder einer Änderung der Modellkonfiguration neu. Initialisieren und entsperren Sie wie gewohnt, dann:

memories rag ingest VAULT_ID notes.md --title "Research notes"
memories memory search VAULT_ID "Chinese English keywords"
memories rag search VAULT_ID "keywords" --mode bm25 --match-mode all
memories rag model-install
memories rag index VAULT_ID
memories rag search VAULT_ID "Find similar meaning" --mode vector
memories rag search VAULT_ID "Find evidence" --mode hybrid --limit 8
memories rag status VAULT_ID
memories rag ask VAULT_ID "What does the evidence say?"

rag ask erfordert eine Generierungs-URL in der Daemon-Konfiguration. Um lexikalisches RAG ohne Embedding-Modell zu nutzen, ergänzen Sie --mode bm25; die Generierungs-URL bleibt erforderlich. memory_search bleibt lexikalisch. Die erweiterte Suche liefert Dokumentabschnitte mit Asset-/Revisions-IDs, stabilen Abschnitts-Hashes, ursprünglichen UTF-8-Byte-Offsets, Bewertungen und Zitierkennzeichnungen. [S1] bezeichnet eine Quelle innerhalb eines Ergebnisses; verwenden Sie deren Felder id und revision für gewöhnliches memory read, nicht den Abschnitts-Hash.

Chinesisches BM25 und Abschnitte

Chinesischer und gemischtsprachiger Text wird mit Jieba tokenisiert. Titel, Inhalte und sichere Metadaten fließen mit Gewichtung 5/1/2 in die FTS5-BM25-Rangfolge ein. any (Standard) kombiniert Stichwörter; all verlangt jeden Suchbegriff; phrase verlangt die ursprüngliche Phrase. Strenge all-/phrase-Bedingungen filtern auch Vektor-/Hybrid-Kandidaten. Suchanfragen werden maskiert und nicht als beliebige FTS-Operatoren interpretiert.

Text wird nahe Satz-/Absatzgrenzen in Abschnitte mit bis zu 768 Unicode-Zeichen geteilt, normalerweise mit 128 Zeichen Überlappung. Zurückgegebene Offsets beziehen sich auf den ursprünglichen UTF-8-Inhalt. Die Suche ist auf 100 angeforderte Ergebnisse, 64 lexikalische Begriffe und 1,024 Anfrage-Bytes begrenzt. Die einfache memory search gruppiert Abschnitte nach Dokument; der erweiterte RAG-Abruf liefert einzelne Abschnitte. --cards-only schränkt den Abruf ein.

Indizes werden zwischen Anfragen wiederverwendet. Eine Tresoränderung, Synchronisierung oder Richtlinienänderung invalidiert den zwischengespeicherten Index; Sperren/Neustarten löscht sämtliche Indizes und Vektoren. Sie werden weder als Klartext gespeichert noch verschlüsselten Synchronisierungsdaten hinzugefügt. Grenzen pro zwischengespeichertem Tresor sind 10,000 Abschnitte, 16 MiB Quelltext/Metadaten und 32 MiB Vektoren; höchstens zwei Tresore werden zwischengespeichert. Große Bibliotheken unterliegen weiterhin den grundlegenden Grenzen der Speicherung des Gesamtzustands, die unter Leistung beschrieben sind.

EmbeddingGemma im Prozess

Das Standard-Embedding-Backend ist Googles EmbeddingGemma 300M Q4 über native ONNX-Inferenz. Es läuft innerhalb des Memories-Daemons; Ollama, Python oder ein separater Inferenzdienst sind nicht erforderlich. Die Anwendung enthält die Inferenz-Engine, wobei ONNX-Telemetrie vor der Sitzungserstellung ausdrücklich deaktiviert wird; Modell-/Tokenizer-Dateien (etwa 209 MiB) werden einmalig durch die App installiert:

memories rag model-install

Der Installer lädt eine festgelegte Revision von onnx-community/embeddinggemma-300m-ONNX herunter, prüft SHA-256, unterstützt bereichsweise Downloads/Wiederholungen und ersetzt niemals eine vorhandene abweichende Datei. Bereits überprüfte Dateien werden wiederverwendet. Das Standardverzeichnis ist models/embeddinggemma unter dem ausgewählten Memories-Home. Geben Sie mit rag.local_model_dir ein vorhandenes Verzeichnis an; es muss den Q4-ONNX-Graphen, dessen externe Daten und die Tokenizer-/Konfigurationsdateien enthalten. Starten Sie den Daemon nach Änderungen an Modelldateien neu. Für Gewichte gelten separat die Gemma-Nutzungsbedingungen und Richtlinie zu verbotener Nutzung; der Installer schreibt einen Hinweis und die upstream-Modellkarte.

[rag]
local_model_dir = "./models/embeddinggemma"
local_threads = 4
max_tokens = 2048
# Optional mirror of the exact pinned files:
# model_download_base_url = "https://your-mirror.example/embeddinggemma"

Relative Modellpfade werden neben der Konfigurationsdatei aufgelöst. Ein niedrigeres local_threads begrenzt die CPU-Nutzung; max_tokens begrenzt die Tokenizer-Eingabe und kann lange Eingaben abschneiden, wenn es unter der Tokenanzahl des Abschnitts liegt. Embeddings sind normalisierte Vektoren mit 768 Dimensionen. Das Modell verwendet separate Aufgabenpräfixe für Anfragen und Dokumente. rag index wärmt den Index vor; Vektor-/Hybrid-Abruf berechnet fehlende Embeddings auch nach Bedarf. Ein Zeitbudget von fünf Minuten wird zwischen Schritten geprüft; abgeschlossene Stapel können bei Wiederholung wiederverwendet werden, solange Tresor/Modell unverändert und entsperrt bleiben.

Vom Kunden bereitgestellte Modell-URLs

Gemini Embedding ist eine Online-API, nicht das Offline-Modell EmbeddingGemma. Ergänzen Sie rag.embedding, um einen Remote-Anbieter auszuwählen; lassen Sie es weg, um Embeddings lokal zu halten. Verwenden Sie vollständige Operations-URLs und konfigurieren Sie das vom Dienst erwartete Modell:

[rag.embedding]
protocol = "gemini"
url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent"
model = "gemini-embedding-001"
dimensions = 768
api_key_env = "GEMINI_API_KEY"

[rag.generation]
protocol = "gemini"
url = "https://generativelanguage.googleapis.com/v1beta/models/YOUR_MODEL:generateContent"
model = "YOUR_MODEL"
api_key_env = "GEMINI_API_KEY"

Setzen Sie die benannte API-Schlüssel-Umgebungsvariable in der Umgebung des Daemons. Schreiben Sie Schlüsselwerte nicht in TOML, URLs oder Befehlsargumente. Gemini verwendet x-goog-api-key; protocol = "compatible" verwendet Bearer-Authentifizierung und übliche JSON-Formate für {model,input}-Embeddings bzw. Chat-Completions. Die kompatible Embedding-Antwort muss indizierte data-Einträge mit embedding-Arrays enthalten; Generierung liefert choices[0].message.content. Schlüssel sind bei lokalen Diensten optional. Remote-URLs erfordern HTTPS; HTTP ist ausschließlich für Loopback zulässig. Optionale Embedding-dimensions werden als Gemini-outputDimensionality oder kompatible dimensions gesendet, beim Empfang geprüft und in den Vektorraum-Schlüssel eingebunden. Zugangsdaten, Query-Strings und Fragmente sind in Operations-URLs nicht zulässig.

Es gibt keinen impliziten öffentlichen Modellendpunkt. Das Konfigurieren einer Remote-Embedding-URL erlaubt, geeignete Dokumentabschnitte dorthin zu senden. Generierung sendet ausschließlich die ausgewählten Abschnitte und die Frage; gespeicherte Zugangsdaten, private Inhalte und Dateiinhalte gelangen nicht in diese Pipeline. Diese Konfiguration gehört zum Daemon, nicht zu einzelnen MCP-Aufrufen. Siehe Sicherheit.

Hybridsuche und erneute Rangordnung

Der Vektormodus verwendet Kosinusähnlichkeit. Der Hybridmodus vereinigt BM25- und Vektorrangfolgen mit Reciprocal-Rank-Fusion (k=60). Die standardmäßige leichtgewichtige erneute Rangordnung verstärkt Begriffsabdeckung und Phrasentreffer. Sie beansprucht nicht, ein trainierter Cross-Encoder zu sein. Konfigurieren Sie bei Bedarf einen Dienst mit trainiertem Reranker:

[rag.rerank]
protocol = "compatible"
url = "https://your-reranker.example/rerank"
model = "YOUR_RERANKER"
api_key_env = "RERANK_API_KEY"

Die Anfrage ist {model, query, documents, top_n}. Ihre Antwort muss results mit einem eindeutigen gültigen index und endlichem relevance_score für jeden Kandidaten enthalten. Unbekannte/doppelte Einträge führen zu einem Fehler, statt stillschweigend das falsche Dokument umzuordnen. --no-rerank überspringt beide optionalen Stufen zur erneuten Rangordnung.

Proxys, Zeitlimits und Wiederholungen

[rag.http]
use_env_proxy = true
proxy_url = "http://127.0.0.1:7890"
retries = 2
backoff_ms = 500
connect_timeout_seconds = 10
timeout_seconds = 60
download_timeout_seconds = 900

Ausdrückliche Proxys überschreiben die Proxy-Erkennung aus der Umgebung. HTTP-, HTTPS-, SOCKS5- und SOCKS5h-URLs werden unterstützt. Authentifizierte Proxy-Werte können über die Proxy-Umgebung bereitgestellt werden; TOML-Proxy-URLs dürfen keine Zugangsdaten enthalten. Loopback-Modell-/Mirror-Endpunkte werden immer direkt verbunden. TLS-Prüfung bleibt aktiviert.

retries ist die Anzahl zusätzlicher Versuche (0-5). Modell-API-Verbindungs-/Lesefehler, 429 und 500/502/503/504 können mit exponentieller Wartezeit wiederholt werden; Retry-After-Sekunden werden bis zu 30 Sekunden berücksichtigt. Authentifizierungs-/Validierungsfehler, unsichere Weiterleitungen und fehlerhafte Modellausgaben werden nicht wiederholt. Modell-API-Weiterleitungen sind deaktiviert. Download-Weiterleitungen erfordern HTTPS, und jede endgültige Datei wird per Hash geprüft. Das Download-Zeitlimit ist ein Budget pro Datei. Wiederholte Generierung kann zusätzliche Anbietergebühren verursachen. Autorisierung/Abbruch werden zwischen Versuchen erneut geprüft.

Antworten, Quellenangaben und MCP

memory_retrieve stellt MCP-Clients Abruf innerhalb ihres Geltungsbereichs bereit; memory_ask ruft den konfigurierten Generierungsdienst auf. Beide wahren die Tresor- und gewöhnlichen Datenbeschränkungen der Freigabe. Sie können weder einen beliebigen Endpunkt auswählen noch auf Zugangsdaten zugreifen. Nur für Geräte bestimmte Tresore verweigern Operationen, die Daten an Modellendpunkte außerhalb von Loopback senden würden; lokale Inferenz und ausdrücklich konfigurierte Loopback-Dienste funktionieren. Die älteren Werkzeuge memory_search und memory_read funktionieren weiterhin. Der mitgelieferte Memories-Skill dokumentiert memory_retrieve und memory_ask für KI-Clients. Ersetzen Sie nach einem Upgrade einen älteren installierten Skill mit memories inject all --force.

Generierung erhält Quelltext als nicht vertrauenswürdige Daten und besitzt keine Anwendungswerkzeuge. Das Modell muss strukturiertes Antwort-/Quellenangaben-JSON zurückgeben, mit Quellenangaben wie [S1], die tatsächlich im Ergebnis vorhanden sind. Ungültige oder erfundene IDs werden zurückgewiesen. Liegen keine Belege vor, erfolgt kein Generierungsaufruf und das Ergebnis kennzeichnet insufficient_evidence. Die Prüfung der Quellenangaben prüft Referenzen, nicht, ob jede Aussage sachlich belegt ist; prüfen Sie wichtige Antworten anhand ihrer Quellen.

Sperren, abgelaufene/widerrufene Freigaben und geänderter Quellenzustand invalidieren laufende Arbeit und unterdrücken verspätete Ergebnisse. Eine bereits gestartete Remote-Anfrage kann nicht zurückgeholt werden. In diesem Release wird der mobilen FFI keine modellgestützte RAG-Schnittstelle hinzugefügt; die gewöhnliche mobile Suche erhält die chinesischen/BM25-Verbesserungen und kann BM25-Abruf verwenden.