Verwenden von Ollama mit der Inference-API

Erfahren Sie, wie Sie Ollama mithilfe der Inference API in Elasticsearch integrieren.

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 diesem Artikel erfahren Sie, wie Sie lokale Modelle mithilfe von Ollama mit dem Elasticsearch-Inferenzmodell verbinden und Ihren Dokumenten dann mithilfe von Playground Fragen stellen.

Elasticsearch ermöglicht Benutzern die Verbindung mit LLMs über die Open Inference API und unterstützt Anbieter wie Amazon Bedrock, Cohere, Google AI, Azure AI Studio, HuggingFace – als Service und andere.

Ollama ist ein Tool, mit dem Sie LLM-Modelle mithilfe Ihrer eigenen Infrastruktur (Ihrem lokalen Computer/Server) herunterladen und ausführen können. Hier finden Sie eine Liste der verfügbaren Modelle, die mit Ollama kompatibel sind.

Ollama ist eine großartige Option, wenn Sie verschiedene Open-Source-Modelle hosten und testen möchten, ohne sich Gedanken über die unterschiedlichen Einrichtungsmöglichkeiten der einzelnen Modelle oder über die Erstellung einer API für den Zugriff auf die Modellfunktionen machen zu müssen, da Ollama sich um alles kümmert.

Da die Ollama-API mit der OpenAI-API kompatibel ist, können wir das Inferenzmodell problemlos integrieren und mit Playground eine RAG-Anwendung erstellen.

Voraussetzungen

  1. Elasticsearch 8.17
  2. Kibana 8.17
  3. Python

Schritte

  1. Einrichten des Ollama LLM-Servers
  2. Erstellen von Zuordnungen
  3. Indizierung von Daten
  4. Fragen stellen mit Playground

Einrichten des Ollama LLM-Servers

Wir werden einen LLM-Server einrichten, um ihn mithilfe von Ollama mit unserer Playground-Instanz zu verbinden. Wir müssen:

  • Laden Sie Ollama herunter und führen Sie es aus.
  • Verwenden Sie ngrok, um über das Internet auf Ihren lokalen Webserver zuzugreifen, der Ollama hostet

Laden Sie Ollama herunter und führen Sie es aus

Um Ollama zu verwenden, müssen wir es zuerst herunterladen. Ollama bietet Unterstützung für Linux, Windows und macOS. Laden Sie hier einfach die mit Ihrem Betriebssystem kompatible Ollama-Version herunter. Sobald Ollama installiert ist, können wir aus dieser Liste unterstützter LLMs ein Modell auswählen. In diesem Beispiel verwenden wir das Modell llama3.2, ein allgemeines mehrsprachiges Modell. Im Setup-Prozess aktivieren Sie das Befehlszeilentool für Ollama. Sobald das heruntergeladen ist, können Sie die folgende Zeile ausführen:

Das Ergebnis lautet:

Nach der Installation können Sie es mit diesem Befehl testen:

Stellen wir eine Frage:

Wenn das Modell ausgeführt wird, aktiviert Ollama eine API, die standardmäßig auf Port „11434“ ausgeführt wird. Lassen Sie uns eine Anfrage an diese API stellen und dabei der offiziellen Dokumentation folgen:

Dies ist die Antwort, die wir erhalten haben:

Beachten Sie, dass die spezifische Antwort für diesen Endpunkt ein Streaming ist.

Endpunkt mit ngrok dem Internet aussetzen

Da unser Endpunkt in einer lokalen Umgebung arbeitet, kann von einem anderen Punkt – wie unserer Elastic Cloud-Instanz – nicht über das Internet darauf zugegriffen werden. ngrok ermöglicht es uns, einen Port mit einer öffentlichen IP freizugeben. Erstellen Sie ein Konto in ngrok und folgen Sie der offiziellen Einrichtungsanleitung.

Sobald der ngrok-Agent installiert und konfiguriert wurde, können wir den von Ollama verwendeten Port verfügbar machen:

Hinweis: Der Header --host-header="localhost:11434" garantiert, dass der Header „Host“ in den Anfragen mit „localhost:11434“ übereinstimmt.

Durch Ausführen dieses Befehls wird ein öffentlicher Link zurückgegeben, der funktioniert, solange ngrok und der Ollama-Server lokal ausgeführt werden.

Unter „Weiterleitung“ können wir sehen, dass ngrok eine URL generiert hat. Speichern Sie es für später.

Versuchen wir erneut, eine HTTP-Anfrage an den Endpunkt zu senden, diesmal unter Verwendung der von ngrok generierten URL:

Die Antwort sollte der vorherigen ähnlich sein.

Erstellen von Zuordnungen

ELSER-Endpunkt

Für dieses Beispiel erstellen wir einen Inferenzendpunkt mithilfe der Elasticsearch-Inferenz-API. Zusätzlich verwenden wir ELSER , um die Einbettungen zu generieren.

Stellen wir uns für dieses Beispiel vor, Sie haben eine Apotheke, die zwei Arten von Medikamenten verkauft:

  • Medikamente, für die ein Rezept erforderlich ist.
  • Medikamente, für die KEIN Rezept erforderlich ist.

Diese Informationen würden in das Beschreibungsfeld jedes Medikaments aufgenommen.

Das LLM muss dieses Feld interpretieren, daher verwenden wir folgende Datenzuordnungen:

Das Feld text_description speichert den Klartext der Beschreibungen, während semantic_field, ein Feldtyp vom Typ „semantic_text“ , die von ELSER generierten Einbettungen speichert.

Die Eigenschaft copy_to kopiert den Inhalt aus den Feldern name und text_description in das semantische Feld, sodass die Einbettungen für diese Felder generiert werden.

Indizierung von Daten

Lassen Sie uns nun die Daten mithilfe der _bulk-API indizieren.

Abwehr:

Fragen stellen mit Playground

Playground ist ein Kibana-Tool, mit dem Sie mithilfe von Elasticsearch-Indizes und einem LLM-Anbieter schnell ein RAG-System erstellen können. Sie können diesen Artikel lesen, um mehr darüber zu erfahren.

Verbinden des lokalen LLM mit Playground

Wir müssen zunächst einen Connector erstellen, der die soeben erstellte öffentliche URL verwendet. Gehen Sie in Kibana zu „Suchen > Playground“ und klicken Sie dann auf „Mit einem LLM verbinden“.

Durch diese Aktion wird auf der linken Seite der Kibana-Oberfläche ein Menü angezeigt. Klicken Sie dort auf „OpenAI“.

Wir können jetzt mit der Konfiguration des OpenAI-Connectors beginnen.

Gehen Sie zu „Connector-Einstellungen“ und wählen Sie für den OpenAI-Anbieter „Andere (OpenAI-kompatible Dienste)“ aus:

Nun konfigurieren wir die übrigen Felder. In diesem Beispiel nennen wir unser Modell "medicines-llm". Verwenden Sie im URL-Feld die von ngrok generierte URL (/v1/chat/completions). Wählen Sie im Feld „Standardmodell“ die Option „llama3.2“ aus. Wir benötigen keinen API-Schlüssel, geben Sie einfach einen beliebigen Text ein, um fortzufahren:

Klicken Sie auf „Speichern“ und fügen Sie die Indexmedikamente hinzu, indem Sie auf „Datenquellen hinzufügen“ klicken:

Großartig! Wir haben jetzt Zugriff auf Playground mithilfe des LLM, das wir lokal als RAG-Engine ausführen.

Bevor wir es testen, fügen wir dem Agenten spezifischere Anweisungen hinzu und erhöhen die Anzahl der an das Modell gesendeten Dokumente auf 10, damit die Antwort möglichst viele Dokumente enthält. Das Kontextfeld ist semantic_field und enthält dank der Eigenschaft „copy_to“ den Namen und die Beschreibung der Medikamente.

Stellen wir nun die Frage: Kann ich Clonazepam ohne Rezept kaufen? und sehen Sie, was passiert:

Wie erwartet haben wir die richtige Antwort erhalten.

Wie geht es weiter?

Der nächste Schritt besteht darin, Ihre eigene Anwendung zu erstellen! Playground bietet ein Code-Skript in Python, das Sie auf Ihrem Computer ausführen und an Ihre Anforderungen anpassen können. Beispielsweise indem Sie es hinter einen FastAPI -Server stellen, um einen QA-Medizin-Chatbot zu erstellen, der von Ihrer Benutzeroberfläche genutzt wird.

Sie finden diesen Code, indem Sie oben rechts im Playground auf die Schaltfläche „Code anzeigen“ klicken:

Und Sie verwenden die Endpunkte und API-Schlüssel, um die im Code erforderliche Umgebungsvariable ES_API_KEY zu generieren.

Für dieses spezielle Beispiel lautet der Code wie folgt:

Damit es mit Ollama funktioniert, müssen Sie den OpenAI-Client so ändern, dass er eine Verbindung zum Ollama-Server statt zum OpenAI-Server herstellt. Die vollständige Liste der OpenAI-Beispiele und kompatiblen Endpunkte finden Sie hier.

Und ändern Sie das Modell auch in llama3.2, wenn Sie die Vervollständigungsmethode aufrufen:

Fügen wir unsere Frage hinzu: Kann ich Clonazepam ohne Rezept kaufen? Zur Elasticsearch-Abfrage:

Und auch zum Abschlussaufruf mit einigen Ausdrucken, damit wir bestätigen können, dass wir die Elasticsearch-Ergebnisse als Teil des Fragenkontexts senden:

Lassen Sie uns nun den Befehl ausführen

pip install -qU elasticsearch openai

python main.py

Sie sollten ungefähr Folgendes sehen:

Fazit

In diesem Artikel können wir die Leistungsfähigkeit und Vielseitigkeit von Tools wie Ollama sehen, wenn wir sie zusammen mit der Elasticsearch-Inferenz-API und Playground verwenden.

Nach einigen einfachen Schritten hatten wir eine funktionierende RAG-Anwendung mit einem Chat, der ein LLM verwendete, das kostenlos in unserer eigenen Infrastruktur lief. Dies ermöglicht uns außerdem eine bessere Kontrolle über Ressourcen und vertrauliche Informationen und gibt uns außerdem Zugriff auf eine Vielzahl von Modellen für unterschiedliche Aufgaben.

Häufige Fragen

Was ist Ollama?

Ollama ist ein Tool, mit dem Sie LLM-Modelle mithilfe Ihrer eigenen Infrastruktur (Ihres lokalen Rechners/Servers) herunterladen und ausführen 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