microsoft/kernel-memory: Referenzimplementierung für RAG-Pipelines, kein Produkt
Research project. A Memory solution for users, teams, and applications.
Auf einen Blick
- Was ist das?
- Kernel Memory bündelt Dokumenten-Ingestion, Embeddings und Zitat-gestützte Antworten in einer .NET-Bibliothek und einem Web-Service. Das Repository ist laut README ein archiviertes Forschungsprojekt ohne Support, was jede Adoptionsentscheidung prägt.
- Für wen ist es gedacht?
- Wer eine lauffähige Referenz für eine eigene RAG-Pipeline in .NET sucht und den Code als Lernmaterial behandelt, findet hier eine vollständige Architektur mit MIT-Lizenz. Wer Support, Patchgarantien oder einen Betrieb ohne eigene Fehleranalyse braucht, sollte nicht darauf setzen, denn das README schließt Support ausdrücklich aus.
- Darf ich es kommerziell nutzen?
- Ja. MIT ist eine freizügige Lizenz: Sie dürfen darauf aufbauende Software nutzen, verändern und verkaufen, solange Sie die Urheberrechts- und Lizenzhinweise beibehalten.
- Wird es noch gepflegt?
- Ja. Die letzten Commits kamen vor 99 Tagen.
- In welcher Sprache ist es geschrieben?
- Hauptsächlich C#, laut der Sprachstatistik von GitHub.
Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 15. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.
TIEFGEHENDE OPEN-SOURCE-ANALYSE
Welches Problem Kernel Memory adressiert und für wen
Die wiederkehrende Arbeit bei RAG-Anwendungen ist nicht das Prompt-Design, sondern die Kette davor: Dateien einlesen, Text extrahieren, in Abschnitte teilen, Embeddings erzeugen, in einen Vektorindex schreiben und bei der Abfrage die richtigen Abschnitte wiederfinden. Kernel Memory beschreibt sich selbst als Multi-Modal AI Service, der genau diese Kette als Pipeline kapselt und über eine Web-Service-Schnittstelle, einen Docker-Container, ein Plugin für ChatGPT, Copilot und Semantic Kernel sowie als .NET-Bibliothek bereitsteht. Die Zielgruppe sind laut Repository Entwickler, die eine Referenzimplementierung für Memory in AI- und LLM-Szenarien suchen, nicht Endanwender. Der Nutzen liegt im Nachvollziehen der Architektur und im Wiederverwenden einzelner Bausteine, etwa der Tag-basierten Filterung oder der Zitat-Ausgabe. Wer eine fertige Plattform für den Produktivbetrieb sucht, ist hier falsch adressiert, und das Repository sagt das selbst.
Die Ingestion-Pipeline in vier Stufen
Das README beschreibt den Standardpfad in vier Schritten. Zuerst wird das Dateiformat erkannt und der Text extrahiert. Danach folgt die Partitionierung in kleine Abschnitte, die für Suche und RAG-Prompts taugen. Anschließend erzeugt ein Embedding-Generator die Vektoren. Zuletzt landen sie in einem Vektorindex, wobei das Repository Azure AI Search, Qdrant und weitere Datenbanken als Beispiele nennt. Bemerkenswert ist die Rolle der Tags: Sie dienen sowohl der Organisation für facettierte Navigation als auch der Absicherung privater Informationen, indem einem Dokument ein Besitzer zugewiesen wird. Im C#-Beispiel wird ein Dokument über new Document("doc01") identifiziert und mit AddTag("user", "devis@contoso.com"), AddTag("collection", "business") und AddTag("fiscalYear", "2025") versehen. Bei der Abfrage lässt sich dieselbe Struktur als Filter verwenden, etwa MemoryFilters.ByTag("user", "devis@contoso.com"). Das ist der eigentliche Mechanismus hinter der Zugriffstrennung: nicht ein Rechtesystem, sondern Tags, die konsequent in jede Abfrage eingebaut werden müssen. Wer den Filter vergisst, bekommt Antworten über alle Dokumente.
Zwei Betriebsarten: Web-Service und eingebettete Bibliothek
Kernel Memory lässt sich auf zwei Wegen ansprechen. Der Web-Service läuft als eigener Prozess, im Beispiel unter http://127.0.0.1:9001, und wird über einen Client angesprochen. In C# ist das new MemoryWebClient("http://127.0.0.1:9001"), in Python ein POST auf /upload mit einem Multipart-Body aus Datei und einem Feld data, das documentId und eine Liste von Tags im Format "user:devis@contoso.com" enthält. Alternativ baut man die Bibliothek direkt in die eigene Anwendung ein: new KernelMemoryBuilder().WithOpenAIDefaults(...).Build<MemoryServerless>(). Der Name MemoryServerless deutet an, dass die Pipeline im eigenen Prozess läuft und kein separater Dienst nötig ist. Für Container-Deployments zeigt das Repository ein Aspire-Beispiel, in dem der Container kernelmemory/service gestartet und über Umgebungsvariablen konfiguriert wird: KernelMemory__TextGeneratorType auf OpenAI, KernelMemory__DataIngestion__EmbeddingGeneratorTypes__0 auf OpenAI, KernelMemory__Retrieval__EmbeddingGeneratorType auf OpenAI und der Schlüssel unter KernelMemory__Services__OpenAI__APIKey. Die doppelten Unterstriche sind die übliche Übersetzung verschachtelter Konfigurationsabschnitte in Umgebungsvariablen.
Antworten mit Belegen und Token-Abrechnung
Die Abfrageseite ist der Teil, der sich am klarsten von einem reinen Vektorspeicher abgrenzt. AskAsync liefert laut README Antworten zusammen mit Zitaten und Verweisen auf die Quelldokumente, sodass nachvollziehbar bleibt, welcher Text die Antwort stützt. Zusätzlich gibt die Bibliothek einen Token-Verbrauchsbericht zurück, aufgeschlüsselt nach Diensttyp, Modellname und Modelltyp, mit getrennten Zahlen für ServiceTokensIn und ServiceTokensOut. Das Beispiel im README nennt für eine Anfrage an gpt-4o über Azure OpenAI 24356 Eingabe- und 103 Ausgabe-Tokens. Diese Zahlen sind ein Beispiel aus der Dokumentation, keine Messung dieses Artikels. Für Teams, die Kosten pro Anfrage planen müssen, ist der Bericht nützlicher als die Antwort selbst, weil er zeigt, wie stark die Prompt-Größe durch die eingebundenen Abschnitte wächst. Genau dort entsteht der Aufwand: Je mehr Kontext die Pipeline anhängt, desto teurer wird jede Anfrage, und die Zitat-Ausgabe macht diesen Zusammenhang sichtbar.
Archiviertes Forschungsprojekt: was das praktisch bedeutet
Ganz oben im README steht ein Warnhinweis, der jede Bewertung dominiert. Der Code diene als Lernressource, nicht als Produktionssoftware, die Nutzung erfolge auf eigenes Risiko, Support werde nicht geleistet. Das Repository bezeichnet sich als archiviertes Forschungsprojekt und stellt klar, dass es kein offiziell unterstütztes Microsoft-Angebot ist. Die veröffentlichten Releases tragen Versionsnummern im Schema 0.98.250508.3, also eine Vorabversion weit unter 1.0, mit Datumsanteil statt semantischer Stabilitätszusage. Wer Kernel Memory einsetzt, übernimmt damit die Fehleranalyse selbst, von der Embedding-Erzeugung über die Index-Konsistenz bis zu Änderungen an den Schnittstellen zwischen den Versionen. Das ist keine theoretische Einschränkung: Ein Projekt, das ausdrücklich keinen Support zusagt, verlagert die gesamte Betriebsverantwortung auf das adoptierende Team. Für Prototypen und Architekturstudien ist das tragbar. Für einen Dienst mit Verfügbarkeitszusage ist es die falsche Grundlage, unabhängig davon, wie sauber der Code aufgebaut ist.
Wo Kernel Memory die falsche Wahl ist
Der häufigste Fehlgriff dürfte der Wunsch sein, einen bestehenden Vektorspeicher lediglich um eine Abfrageschicht zu ergänzen. Kernel Memory bringt eine vollständige Pipeline mit eigener Konfiguration, eigenem Dokumentmodell und eigener Auftragsabwicklung mit. Wer bereits einen Index mit eigenem Chunking und eigenen Metadaten betreibt, importiert mit Kernel Memory ein zweites Modell von Dokumenten, Tags und Filtern, das parallel gepflegt werden muss. Ein weiterer Grenzfall ist die Zugriffskontrolle. Die Filterung über MemoryFilters.ByTag ist eine Konvention auf Abfrageebene, kein durchgesetztes Rechtesystem. In einer Umgebung, in der ein vergessener Filter einen Datenabfluss bedeutet, gehört diese Entscheidung nicht in den Anwendungscode, sondern in eine Schicht darunter. Schließlich die Sprachbindung: Die Bibliothek ist in C# geschrieben. Python und andere Sprachen erreichen die Funktionalität laut README über den Web-Service, nicht über native Bindings. Wer eine Python-first-Umgebung betreibt, zahlt den Preis eines zusätzlichen Dienstes.
Alternative: Semantic Kernel ohne Kernel Memory
Die naheliegende Alternative ist, Semantic Kernel direkt zu verwenden und die Ingestion selbst zu bauen. Der Unterschied liegt nicht im Funktionsumfang, sondern in der Zuständigkeit. Semantic Kernel stellt die Verbindung zu Modellen und die Orchestrierung von Aufrufen bereit; wie Dokumente zerlegt, eingebettet und wieder gefunden werden, bleibt dem Anwendungscode überlassen. Kernel Memory nimmt genau diese Entscheidungen ab und liefert dafür eine feste Pipeline mit vier Stufen und einem Tag-Modell. Der Tausch ist eindeutig: weniger eigener Code gegen weniger Kontrolle über Chunking, Index-Schema und Auftragsabwicklung. Wer Chunking-Strategien experimentell vergleichen will, ist mit einer eigenen Implementierung besser bedient. Wer eine funktionierende Referenz sucht, um zu verstehen, wie die Stufen zusammenspielen, spart mit Kernel Memory Zeit. Das Repository positioniert sich selbst als Plugin für Semantic Kernel, die beiden schließen sich also nicht aus; die Frage ist, welche Schicht die Ingestion verantwortet.
Lizenz, Wartung und der erste Prüfschritt
Kernel Memory steht unter der MIT-Lizenz. Das erlaubt kommerzielle Nutzung, Veränderung und Weitergabe, verlangt aber die Beibehaltung des Lizenzhinweises und schließt die Haftung des Urhebers aus. Diese Einschätzung ist keine Rechtsberatung; wer den Code in ein Produkt einbettet, sollte die Lizenzbedingungen mit der eigenen Rechtsabteilung klären. Wichtiger für die Praxis ist die Kombination aus MIT-Lizenz und dem Hinweis auf fehlenden Support: Die Lizenz gibt Freiheit, das README nimmt jede Zusage. Wartungskosten entstehen damit vollständig beim Nutzer, und zwar an drei Stellen, nämlich beim Anpassen an neue Versionen der Modell-Anbieter, beim Pflegen des Vektorindex und beim Nachziehen eigener Änderungen, wenn eine neue Vorabversion Schnittstellen verschiebt. Der erste konkrete Prüfschritt vor einem Commit ist deshalb nicht die Bewertung der Architektur, sondern ein Build der Bibliothek gegen die eigene .NET-Version und ein Testlauf der Ingestion mit dem Vektorindex, den das Team tatsächlich betreibt. Steht dieser Index nicht unter den im Repository genannten Backends, endet die Prüfung dort.
Redaktionelles Fazit
Wer eine lauffähige Referenz für eine eigene RAG-Pipeline in .NET sucht und den Code als Lernmaterial behandelt, findet hier eine vollständige Architektur mit MIT-Lizenz. Wer Support, Patchgarantien oder einen Betrieb ohne eigene Fehleranalyse braucht, sollte nicht darauf setzen, denn das README schließt Support ausdrücklich aus. Vor dem ersten Commit lohnt die Prüfung, ob der eigene Vektorindex unter den im Repository genannten Backends liegt und ob der Build gegen die aktuelle .NET-Version des eigenen Teams durchläuft.
Community-Notizen