Freigeben über


Vektordatenbanken für .NET AI-Apps

Vektordatenbanken speichern und verwalten Vektoreinbettungen. Einbettungen sind numerische Darstellungen von Daten, die die semantische Bedeutung beibehalten. Wörter, Dokumente, Bilder, Audio und andere Datentypen können vektorisiert werden. Sie können Einbettungen verwenden, um einem KI-Modell zu helfen, die Bedeutung von Eingaben zu verstehen, sodass es Vergleiche und Transformationen durchführen kann, z. B. Zusammenfassen von Text, Finden von kontextbezogenen Daten oder Erstellen von Bildern aus Textbeschreibungen.

Sie können eine Vektordatenbank unter anderem für Folgendes verwenden:

  • Identifizieren Sie ähnliche Bilder, Dokumente und Lieder basierend auf ihren Inhalten, Themen, Stimmungen und Stilen.
  • Identifizieren ähnlicher Produkte basierend auf ihren Merkmalen, Features und Benutzergruppen.
  • Empfehlen von Inhalten, Produkten oder Diensten basierend auf den Benutzereinstellungen.
  • Identifizieren der besten potenziellen Optionen aus einer großen Auswahl, um komplexe Anforderungen zu erfüllen.
  • Identifizieren von Datenanomalien oder betrügerischen Aktivitäten, die sich von überwiegenden oder normalen Mustern unterscheiden.

Vektordatenbanken bieten Vektorsuchfunktionen, um ähnliche Elemente basierend auf ihren Datenmerkmalen zu finden, anstatt nach exakten Übereinstimmungen in einem Eigenschaftenfeld zu suchen. Die Vektorsuche funktioniert, indem die Vektordarstellungen Ihrer Daten analysiert werden, die Sie mit einem KI-Einbettungsmodell wie z. B. den Azure OpenAI-Einbettungsmodellen erstellt haben. Der Suchvorgang misst den Abstand zwischen den Datenvektoren und dem Abfragevektor. Die Datenvektoren, die Ihrem Abfragevektor am nächsten sind, sind diejenigen, die semantisch am ähnlichsten sind.

Einige Dienste, z. B. Azure Cosmos DB für MongoDB vCore, bieten native Vektorsuchfunktionen für Ihre Daten. Andere Datenbanken können mit der Vektorsuche verbessert werden, indem die gespeicherten Daten mithilfe eines Diensts wie Azure KI-Suche indiziert werden, der Ihre Daten scannen und indizieren kann, um Vektorsuchfunktionen bereitzustellen.

Vektorsuchworkflows mit .NET und OpenAI

Vektordatenbanken und ihre Suchfunktionen sind besonders nützlich bei RAG-Muster-Workflows mit Azure OpenAI. Mit diesem Muster können Sie Ihr KI-Modell mit zusätzlichem semantisch reichhaltigem Wissen über Ihre Daten erweitern. Ein allgemeiner KI-Workflow mit Vektordatenbanken umfasst die folgenden Schritte:

  1. Erstellen von Einbettungen für Ihre Daten mithilfe eines OpenAI-Einbettungsmodells.
  2. Speichern und Indizieren der Einbettungen in einer Vektordatenbank oder einem Suchdienst.
  3. Konvertieren Sie Benutzeranfragen aus Ihrer Anwendung in Einbettungen.
  4. Führen Sie eine Vektorsuche über Ihre Daten aus, und vergleichen Sie die Einbettung des Benutzers mit den Einbettungen in Ihrer Datenbank.
  5. Verwenden Sie ein Sprachmodell wie gpt-4o, um einen benutzerfreundlichen Abschluss aus den Vektorsuchergebnissen zusammenzustellen.

Ein praktisches Beispiel für diesen Fluss finden Sie im Lernprogramm zur Implementierung von Azure OpenAI mit RAG mithilfe der Vektorsuche in einem .NET-App-Lernprogramm .

Weitere Vorteile des RAG-Musters sind:

  • Generieren kontextbezogener und präziser Antworten auf Benutzeraufforderungen aus KI-Modellen.
  • Die LLM-Tokenbeschränkungen überwinden – die schwere Arbeit erfolgt über die Datenbankvektorsuche.
  • Reduzieren der Kosten durch häufige Feinabstimmung bei aktualisierten Daten.

Die Microsoft.Extensions.VectorData-Bibliothek

Das 📦 Microsoft.Extensions.VectorData.Abstractions-Paket bietet eine einheitliche Abstraktionsebene für die Interaktion mit Vektorspeichern in .NET. Mit diesen Abstraktionen können Sie Code für eine einzelne API schreiben und den zugrunde liegenden Vektorspeicher mit minimalen Änderungen an Ihrer Anwendung austauschen.

Die Bibliothek bietet die folgenden Wichtigsten Funktionen:

  • Einheitliches Datenmodell: Definieren Sie Das Datenmodell einmal mithilfe von .NET-Attributen, und verwenden Sie es in jedem unterstützten Vektorspeicher.
  • CRUD-Vorgänge: Erstellen, Lesen, Aktualisieren und Löschen von Datensätzen in einem Vektorspeicher.
  • Vektor- und Textsuche: Abfragen von Datensätzen nach semantischer Ähnlichkeit mithilfe der Vektorsuche oder durch Stichwort mithilfe der Textsuche.
  • Sammlungsverwaltung: Erstellen, Auflisten und Löschen von Sammlungen (Tabellen oder Indizes) in einem Vektorspeicher.

Wichtige Abstraktionen

Die Microsoft.Extensions.VectorData.Abstractions Bibliothek macht die folgenden abstrakten Hauptklassen verfügbar:

  • VectorStore: Die Klasse der obersten Ebene für eine Vektordatenbank. Verwenden Sie sie zum Abrufen und Verwalten von Sammlungen.
  • VectorStoreCollection<TKey,TRecord>: Stellt eine benannte Auflistung von Datensätzen innerhalb eines Vektorspeichers dar. Verwenden Sie sie zum Ausführen von CRUD- und Suchvorgängen. IVectorSearchable<TRecord>Implementiert außerdem .
  • IKeywordHybridSearchable<TRecord>: Implementiert durch Sammlungen, die die Hybridsuche unterstützen, wobei die Vektorähnlichkeit mit dem Stichwortabgleich kombiniert wird.

Eine schrittweise Anleitung zur Datenmodelldefinition, CRUD-Operationen, Vektorsuche, Filterung, Hybridsuche und Einbettungsgenerierung finden Sie unter Verwenden von Vektorspeichern in .NET AI-Apps.

Vektor-Datenbankanbieter

Das Microsoft.Extensions.VectorData.Abstractions Paket definiert die Abstraktionen, und separate Anbieterpakete stellen Implementierungen für bestimmte Vektordatenbanken bereit. Wählen Sie den Anbieter aus, der Ihrer Vektordatenbank entspricht, z. B. Microsoft.SemanticKernel.Connectors.AzureAISearch.

Hinweis

Trotz der Einbeziehung von "SemanticKernel" in die Paketnamen haben diese Anbieter nichts mit dem semantischen Kernel zu tun und können überall in .NET verwendet werden, einschließlich Agent Framework.

Alle Anbieter implementieren die gleichen VectorStore und VectorStoreCollection<TKey,TRecord> abstrakten Klassen, sodass Sie zwischen ihnen wechseln können, ohne ihre Anwendungslogik zu ändern.

Tipp

Verwenden Sie den In-Memory-Anbieter (Microsoft.SemanticKernel.Connectors.InMemory) während der Entwicklung und Tests. Es ist kein externer Dienst oder eine externe Konfiguration erforderlich, und Sie können ihn später für einen Produktionsanbieter austauschen.