Wie man den Elasticsearch Vector Store Connector für Microsoft Semantic Kernel zur Entwicklung von KI-Agenten verwendet

Microsoft Semantic Kernel ist ein leichtgewichtiges Open-Source-Entwicklungskit, mit dem Sie auf einfache Weise KI-Agenten erstellen und die neuesten KI-Modelle in Ihre C#-, Python- oder Java-Codebasis integrieren können. Mit der Veröffentlichung des Semantic Kernel Elasticsearch Vector Store Connectors können Entwickler, die Semantic Kernel zum Erstellen von KI-Agenten verwenden, Elasticsearch nun als skalierbaren Vektorspeicher der Enterprise-Klasse einbinden und gleichzeitig die Abstraktionen von Semantic Kernel weiterhin nutzen.

Elasticsearch verfügt über native Integrationen mit den branchenführenden Gen-AI-Tools und -Anbietern. Sehen Sie sich unsere Webinare zu den Themen „RAG-Grundlagen“ oder zum „Erstellen produktionsreifer Apps“ mit der Elastic-Vektordatenbank an.

Um die besten Suchlösungen für Ihren Anwendungsfall zu entwickeln, starten Sie jetzt eine kostenlose Cloud-Testversion oder testen Sie Elastic auf Ihrem lokalen Rechner.

In Zusammenarbeit mit dem Microsoft Semantic Kernel- Team geben wir die Verfügbarkeit des Semantic Kernel Elasticsearch Vector Store Connector für Microsoft Semantic Kernel (.NET)-Benutzer bekannt. Der semantische Kernel vereinfacht die Entwicklung von KI-Agenten auf Unternehmensebene und bietet unter anderem die Möglichkeit, große Sprachmodelle (LLMs) mit relevanteren, datengesteuerten Antworten aus einem Vektorspeicher zu erweitern. Semantic Kernel bietet eine nahtlose Abstraktionsschicht für die Interaktion mit Vektorspeichern wie Elasticsearch und stellt wichtige Funktionen wie das Erstellen, Auflisten und Löschen von Datensatzsammlungen sowie das Hochladen, Abrufen und Löschen einzelner Datensätze bereit.

Der sofort einsatzbereite Semantic Kernel Elasticsearch Vector Store Connector unterstützt die Abstraktionen des Semantic Kernel Vector Stores , was es Entwicklern sehr einfach macht, Elasticsearch als Vector Store beim Erstellen von KI-Agenten einzubinden.

Elasticsearch hat eine starke Verankerung in der Open-Source-Community und hat vor Kurzem die AGPL-Lizenz übernommen. In Kombination mit dem Open-Source-Microsoft Semantic Kernel bieten diese Tools eine leistungsstarke, unternehmensgerechte Lösung. Sie können lokal beginnen, indem Sie Elasticsearch in wenigen Minuten mit diesem Befehl curl -fsSL https://elastic.co/start-local | sh starten (siehe start-local für Details) und dann auf Cloud-gehostete oder selbstgehostete Versionen umsteigen, während Sie Ihre KI-Agenten produktiv einsetzen.

In diesem Blogbeitrag zeigen wir Ihnen, wie Sie den Semantic Kernel Elasticsearch Vector Store Connector in Verbindung mit Semantic Kernel verwenden. Eine Python-Version des Konnektors wird zu einem späteren Zeitpunkt verfügbar sein.

Szenario auf hoher Ebene: Entwicklung einer RAG-Anwendung mit Semantic Kernel und Elasticsearch

Im folgenden Abschnitt gehen wir ein Beispiel durch. Im Wesentlichen entwickeln wir eine RAG-Anwendung (Retrieval Augmented Generation), die eine Frage des Benutzers als Eingabe entgegennimmt und eine Antwort zurückgibt. Wir verwenden Azure OpenAI (ein lokales LLM kann ebenfalls verwendet werden) als LLM, Elasticsearch als Vektorspeicher und Semantic Kernel (.net) als Framework, um alle Komponenten miteinander zu verbinden.

Falls Sie mit RAG-Architekturen nicht vertraut sind, können Sie sich mit diesem Artikel eine kurze Einführung verschaffen: https://www.elastic.co/search-labs/blog/retrieval-augmented-generation-rag.

Die Antwort wird vom LLM generiert, der mit Kontextinformationen gespeist wird, die für die Frage relevant sind und aus dem Elasticsearch-Vektorspeicher abgerufen werden. Die Antwort enthält auch die Quelle, die vom LLM als Kontext verwendet wurde.

RAG-Beispiel

In diesem konkreten Beispiel entwickeln wir eine Anwendung, die es Benutzern ermöglicht, Fragen zu Hotels zu stellen, die in einer internen Hoteldatenbank gespeichert sind. Der Benutzer könnte z.B. Suchen Sie nach einem bestimmten Hotel anhand verschiedener Kriterien oder fordern Sie eine Liste von Hotels an.

Für die Beispieldatenbank haben wir eine Liste von Hotels mit 100 Einträgen generiert. Die Stichprobengröße ist bewusst klein gehalten, damit Sie die Konnektordemo so einfach wie möglich ausprobieren können. In einer realen Anwendung würde der Elasticsearch-Connector seine Vorteile gegenüber anderen Optionen, wie der `InMemory`-Vektorspeicherimplementierung, insbesondere bei der Arbeit mit extrem großen Datenmengen zeigen.

Die vollständige Demo-Anwendung finden Sie im Elasticsearch Vector Store Connector- Repository.

Beginnen wir damit, die erforderlichen NuGet-Pakete und die verwendeten Direktiven zu unserem Projekt hinzuzufügen:

Wir können nun unser Datenmodell erstellen und es mit semantischen Kernel-spezifischen Attributen ausstatten, um das Speichermodellschema und einige Hinweise für die Textsuche zu definieren:

Die Attribute des Speichermodellschemas (`VectorStore*`) sind für die tatsächliche Verwendung des Elasticsearch Vector Store Connectors am relevantesten, nämlich:

  • VectorStoreRecordKey Eine Eigenschaft einer Datensatzklasse als Schlüssel zu kennzeichnen, unter dem der Datensatz in einem Vektorspeicher abgelegt wird.
  • VectorStoreRecordData Eine Eigenschaft einer Datensatzklasse als 'Daten' kennzeichnen.
  • VectorStoreRecordVector Eine Eigenschaft einer Datensatzklasse als Vektor kennzeichnen.

Alle diese Attribute akzeptieren verschiedene optionale Parameter, mit denen das Speichermodell weiter angepasst werden kann. Im Fall von VectorStoreRecordKey ist es beispielsweise möglich, eine andere Distanzfunktion oder einen anderen Indextyp anzugeben.

Die Textsuchattribute (TextSearch*) werden im letzten Schritt dieses Beispiels wichtig sein. Wir werden später auf sie zurückkommen.

Im nächsten Schritt initialisieren wir die Semantic Kernel Engine und erhalten Referenzen zu den Kerndiensten. In einer realen Anwendung sollte Dependency Injection anstelle des direkten Zugriffs auf die Service-Collection verwendet werden. Dasselbe gilt für die fest codierte Konfiguration und die Geheimnisse, die stattdessen mithilfe eines Konfigurationsanbieters gelesen werden sollten:

Der Dienst vectorStoreCollection kann nun verwendet werden, um die Sammlung zu erstellen und einige Demodatensätze einzulesen:

Dies zeigt, wie Semantic Kernel die Verwendung eines Vektorspeichers mit all seiner Komplexität auf wenige einfache Methodenaufrufe reduziert.

Im Hintergrund wird in Elasticsearch ein neuer Index erstellt und alle notwendigen Eigenschaftszuordnungen werden angelegt. Unser Datensatz wird dann vollständig transparent in das Speichermodell abgebildet und schließlich im Index gespeichert. Nachfolgend sehen Sie, wie die Zuordnungen in Elasticsearch aussehen.

Die embeddings.GenerateEmbeddingsAsync() -Aufrufe riefen transparent den konfigurierten Azure AI Embeddings Generation-Dienst auf.

Noch mehr Magie lässt sich im letzten Schritt dieser Demonstration beobachten.

Mit nur einem einzigen Aufruf von InvokePromptAsync werden alle folgenden Operationen ausgeführt, wenn der Benutzer eine Frage zu den Daten stellt:

1. Es wird eine Einbettung für die Frage des Benutzers generiert.

2. Der Vektorspeicher wird nach relevanten Einträgen durchsucht.

3. Die Ergebnisse der Abfrage werden in eine Eingabeaufforderungsvorlage eingefügt.

4. Die eigentliche Anfrage in Form der finalen Eingabeaufforderung wird an den KI-Chatvervollständigungsdienst gesendet.

Erinnern Sie sich an die TextSearch* -Attribute, die wir zuvor in unserem Datenmodell definiert haben? Mithilfe dieser Attribute können wir in unserer Eingabeaufforderungsvorlage entsprechende Platzhalter verwenden, die automatisch mit den Informationen aus unseren Einträgen im Vektorspeicher befüllt werden.

Die endgültige Antwort auf unsere Frage „Bitte zeigen Sie mir alle Hotels mit einer Dachterrassenbar“ lautet wie folgt:

Die Antwort bezieht sich korrekt auf den folgenden Eintrag in unserer hotels.csv-Datei.

Dieses Beispiel zeigt sehr gut, wie die Verwendung des Microsoft Semantic Kernel durch seine durchdachten Abstraktionen eine signifikante Reduzierung der Komplexität ermöglicht und gleichzeitig ein sehr hohes Maß an Flexibilität gewährleistet. Durch die Änderung einer einzigen Codezeile können beispielsweise der Vektorspeicher oder die verwendeten KI-Dienste ersetzt werden, ohne dass ein anderer Teil des Codes umstrukturiert werden muss.

Gleichzeitig bietet das Framework eine enorme Menge an High-Level-Funktionalität, wie zum Beispiel die Funktion `InvokePrompt` oder das Template- oder Such-Plugin-System.

Die vollständige Demo-Anwendung finden Sie im Elasticsearch Vector Store Connector-Repository.

Was ist sonst noch mit Elasticsearch möglich?

Elasticsearch & Semantic Kernel: Was kommt als Nächstes?

  • Wir haben gezeigt, wie der Elasticsearch-Vektorspeicher beim Erstellen von GenAI-Anwendungen in .NET einfach in den Semantic Kernel eingebunden werden kann. Seien Sie gespannt auf die nächste Python-Integration.
  • Da Semantic Kernel Abstraktionen für fortgeschrittene Suchfunktionen wie die Hybridsuche erstellt, ermöglicht Elasticsearch Connect .NET-Entwicklern die einfache Implementierung dieser Funktionen bei der Verwendung von Semantic Kernel.

Häufige Fragen

Was ist der Microsoft Semantic Kernel?

Microsoft Semantic Kernel ist ein leichtgewichtiges Open-Source-Entwicklungskit, mit dem Sie auf einfache Weise KI-Agenten erstellen und die neuesten KI-Modelle in Ihre C#-, Python- oder Java-Codebasis integrieren können.

Zugehörige Inhalte

Sind Sie bereit, hochmoderne Sucherlebnisse zu schaffen?

Eine ausreichend fortgeschrittene Suche kann nicht durch die Bemühungen einer einzelnen Person erreicht werden. Elasticsearch wird von Datenwissenschaftlern, ML-Ops-Experten, Ingenieuren und vielen anderen unterstützt, die genauso leidenschaftlich an der Suche interessiert sind wie Sie. Lasst uns in Kontakt treten und zusammenarbeiten, um das magische Sucherlebnis zu schaffen, das Ihnen die gewünschten Ergebnisse liefert.

Probieren Sie es selbst aus