ChatGPT und Elasticsearch: Ein Plugin für die Verwendung von ChatGPT mit Ihren Elastic-Daten

blog-star-trails-chatgpt.jpg

Vielleicht haben Sie diesen früheren Blogpost über unsere Bemühungen zur Verbindung der Relevanzfunktionen von Elasticsearch mit den Funktionen zur Beantwortung von Fragen von OpenAI gelesen. Der Grundgedanke des Posts war darzustellen, wie Elastic mit dem GPT-Modell von OpenAI verwendet werden kann, um Antworten zu erhalten und kontextrelevante Inhalte an Benutzer auszugeben.

Die Anwendung, die wir erstellt haben, kann einen Suchendpunkt offenlegen und von jedem Frontend-Dienst abgerufen werden. Die gute Nachricht: OpenAI hat eine private Alphaversion des kommenden ChatGPT-Plugin-Frameworks veröffentlicht.

In diesem Blogpost erfahren Sie, wie Sie das Plugin einbinden und ChatGPT mit beliebigen in Elasticsearch indexierten Inhalten erweitern – mit der Elastic Dokumentation.

Transaktions-Sampling zusammenfassen

Was ist ein ChatGPT-Plugin?

ChatGPT-Plugins sind Erweiterungen, die das Modell bei der Vervollständigung seines Wissens oder der Ausführung von Aktionen unterstützen.

Wir wissen beispielsweise, dass der Wissensbestand von ChatGPT bis September 2021 reicht. Fragen zu aktuelleren Daten werden also nicht beantwortet. Zudem werden Fragen nicht beantwortet, die auf zu spezifische Dinge abzielen, die außerhalb der Begrenzungen der Trainingsinhalte des Modells liegen.

Plugins können den möglichen Funktionsumfang und die Fähigkeiten der Modelle erweitern. Die Ausgabe des Plugins wird aber reziprok vom Modell selbst erweitert.

Nachstehend findet sich eine offizielle Liste der von ChatGPT unterstützten Plugins. Da immer mehr Organisationen mit ChatGPT experimentieren, können wir davon ausgehen, dass diese Liste schnell länger werden wird:

Liste der ChatGPT-Plugins

Wenn Sie sich die Liste ansehen, werden Sie feststellen, dass die Anwendungsfälle langsam deutlich werden. Im Fall von Expedia nutzt das Plugin beispielsweise ChatGPT als Unterstützung bei der Reiseplanung.

Dieser Blogpost soll ähnliche Ziele für Elastic erreichen: Er soll es ChatGPT ermöglichen, auf die aktuelle Wissensdatenbank von Elastic zuzugreifen und Sie bei Ihren Elastic-Projekten zu unterstützen.

Plugin-Store

Architektur

Wir nehmen eine kleine Modifikation an dem Beispielcode aus Teil 1 von meinem Kollegen Jeff Vestal vor, die sich positiv auf die Kosten auswirkt.

Wir entfernen den Aufruf der OpenAI API, da nun ChatGPT den Inhalt von Elasticsearch nimmt und für den Benutzer aufbereitet:

Elastic-ChatGPT-Diagramm

1. ChatGPT sendet eine Anfrage an den Endpunkt „/search“ des Plugins.

  • Diese Entscheidung beruht auf den Plugin-„Regeln“ „description_for_human“ (siehe Plugin-Manifest unten).

2. Der Plugin-Code erstellt eine Suchanfrage, die an Elasticsearch gesendet wird.

3. Textkörper der Dokumentation und die Original-URL werden an Python ausgegeben.

4. Das Plugin gibt den Textkörper des Dokuments und die URL in Textform an ChatGPT aus.

5. ChatGPT verwendet die Informationen aus dem Plugin, um eine Antwort zu erstellen.

Zur Erinnerung: In diesem Blogbeitrag gehen wir davon aus, dass Sie Ihr Elastic Cloud-Konto eingerichtet, Ihre Inhalte vektorisiert und einen einsatzbereiten Elasticsearch Cluster voller Daten zur Verfügung haben. Wenn das nicht der Fall ist, sehen Sie sich unseren letzten Post an, der detaillierte Schritte hierzu enthält.

Plugin-Code

OpenAI hat für ChatGPT ein recht unkompliziertes Plugin-Framework erstellt. Es stellt einen Dienst bereit, der Folgendes offenlegt:

  • Das Plugin-Manifest, das erklärt, was das Plugin an Benutzer und an ChatGPT liefert
  • Die Definition plugin openAPI, also die funktionale Beschreibung, auf deren Basis ChatGPT die verfügbaren APIs versteht
Den Plugin-Code finden Sie hier.

Dateistruktur des Plugins

Der nachstehende Screenshot zeigt, wie die Struktur aussieht:

elasticgpt doc plugin
  • Das Plugin-Manifest ist im Einklang mit den Best Practices von OpenAI in der Datei ai-plugin.json im Verzeichnis .well-known gespeichert.
  • Der Hauptcode des Dienstes findet sich in app.py.
  • Die Docker-Datei wird später verwendet, um das Plugin in Google Cloud Compute bereitzustellen.
  • Das Logo des Plugins (logo.ong), das auch im ChatGPT-Plugin-Store angezeigt wird; in diesem Fall das Elastic Logo.
  • Die Beschreibung des Plugins von OpenAI.

Python-Code

Den vollständigen Code finden Sie im GitHub-Repository. Wir sehen uns nur den Hauptteil dieses Codes an:

…
@app.get("/search")
…
@app.get("/logo.png")
…
@app.get("/.well-known/ai-plugin.json")
…
@app.get("/openapi.yaml")
…

Wir haben die Details entfernt und nur das Wesentliche behalten. Wir sehen zwei Kategorien von APIs:

1. Die API, die OpenAI zum Erstellen eines Plugins benötigt:

  • /logo.png: Plugin-Logo abrufen
  • /.well-known/ai-plugin.json: Plugin-Manifest abrufen
  • /openapi.yaml: Beschreibung des Plugins von OpenAPI abrufen

2. Die API des Plugins:

  • /search ist die einzige, die für ChatGPT offengelegt ist und die die Suche in Elasticsearch durchführt

Plugin-Manifest

Das Plugin-Manifest wird von ChatGPT verwendet, um die Existenz (Erreichbarkeit) des Plugins zu validieren. Hier die Definition:

{
   "schema_version": "v1",
   "name_for_human": "ElasticGPTDoc_Plugin",
   "name_for_model": "ElasticGPTDoc_Plugin",
   "description_for_human": "Elastic Assistant, you know, for knowledge",
   "description_for_model": "Get most recent elasticsearch docs post 2021 release, anything after release 7.15",
   "auth": {
     "type": "none"
   },
   "api": {
     "type": "openapi",
     "url": "PLUGIN_HOSTNAME/openapi.yaml",
     "is_user_authenticated": false
   },
   "logo_url": "PLUGIN_HOSTNAME/logo.png",
   "contact_email": "info@elastic.co",
   "legal_info_url": "http://www.example.com/legal"
 }

Hier möchte ich auf einiges hinweisen: 

1. Es gibt zwei Beschreibungen: 

  • description_for_human – Das sieht die Person bei Installation des Plugins in der ChatGPT-Weboberfläche.
  • description_for_model –Anweisungen für das  Modell, damit es weiß, wann das Plugin zu verwenden ist.

2. Es gibt einige Platzhalter wie PLUGIN_HOSTNAME, die im Python-Code ersetzt werden.

OpenAPI-Definition

Unser Code legt nur einen einzigen API-Endpunkt gegenüber ChatGPT offen, über den es nach Elastic Dokumentation suchen kann. Hier die Beschreibung:

openapi: 3.0.1
info:
 title: ElasticDocGPT
 description: Retrieve information front the most recent Elastic documentation
 version: 'v1'
servers:
 - url: PLUGIN_HOSTNAME
paths:
 /search:
   get:
     operationId: search
     summary: retrieves the document matching the query
     parameters:
     - in: query
       name: query
       schema:
           type: string
       description: use to filter relevant part of the elasticsearch documentations
     responses:
       "200":
         description: OK
        

Die wesentlichen Punkte der Definitionsdatei:

  • Wir nehmen den Inhalt aus der ChatGPT-Eingabe und leiten ihn als Abfrage an unseren Elasticsearch Cluster weiter.
  • Einige Platzhalter wie PLUGIN_HOSTNAME werden im Python-Code ersetzt.

Bereitstellung des Elastic Plugins in Google Cloud Platform (GCP)

Sie können die Bereitstellungsmethode für die Offenlegung Ihres Plugins wählen, ebenso wie den Cloud-Anbieter. In diesem Blogpost verwenden wir GCP, genauer gesagt Google Cloud Run und Google Cloud Build. Ersteres zum Offenlegen und Ausführen des Diensts, zweiteres für die kontinuierliche Integration

Einrichtung

Für diese Einrichtung benötigt der GCP-Nutzer die korrekten Berechtigungen, um:

  • ein Container-Image mit Google Cloud Build in der Google Container Registry zu erstellen
  • einen Container in Google Cloud Run bereitzustellen

Ist dies nicht der Fall, müssen Sie die Berechtigungen auf der GCP IAM-Seite aktualisieren. 

Wir verwenden die gcloud CLI, um unsere Umgebung einzurichten. Folgen Sie den Installationsanweisungen hier.

Führen Sie nach der Installation den folgenden Befehl aus, um sich zu authentifizieren:

  gcloud auth

Legen Sie dann als Projekt-ID Ihr GCP-Projekt fest:


  gcloud config set project PROJECT_ID

Sie sind nun bereit, zu erstellen und bereitzustellen.

Erstellen und bereitstellen

Im ersten Schritt wird das Container-Image mit Cloud Build erstellt und an die Google Container Registry übertragen:

  gcloud builds submit --tag gcr.io/PROJECT_ID/my-python-app

Ersetzen Sie PROJECT_ID durch die ID Ihres GCP-Projekts und my-python-app durch den Namen, den Ihr Container-Image tragen soll.

Exportieren Sie die vom Python-Code benötigte Umgebung, um den Elasticsearch Client zu erstellen:


  export YOUR_CLOUD_ID=VALUE 
  export YOUR_CLOUD_PASS=VALUE 
  export YOUR_CLOUD_USER=VALUE

Im letzten Schritt stellen Sie das Container-Image in Cloud Run bereit:


  gcloud run deploy my-python-app \
  --image gcr.io/PROJECT_ID/my-python-app \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated \
  --set-env-vars  cloud_id=YOUR_CLOUD_ID,cloud_pass=YOUR_CLOUD_PASS,cloud_user=YOUR_CLOUD_USER

Sie sollten sehen, wie Ihr Dienst in Cloud Run ausgeführt wird:

Dienste in Cloud Run

Beachten Sie, dass Sie auch die kontinuierliche Integration aktivieren können, damit jeder Commit in Ihrem GitHub-Repository eine Neubereitstellung auslöst. Klicken Sie auf der Seite „Service details“ (Dienstdetails) auf Set up continuous deployment (kontinuierliche Bereitstellung einrichten).

Plugin in ChatGPT installieren

Wenn das Plugin bereitgestellt wurde und einen öffentlich zugänglichen Endpunkt hat, kann es in ChatGPT installiert werden. Da wir uns für eine Bereitstellung in Google Cloud Run entschieden haben, finden Sie die URL hier:

elastic-doc-gpt

Gehen Sie dann in ChatGPT in den Plugin-Store:

Plugins Alpha

Wählen Sie „Develop your own plugin“ (eigenes Plugin entwickeln):

Eigenes Plugin entwickeln

Fügen Sie die URL ein, die Sie von der Google Cloud Run-Seite kopiert haben:

Website-Domain eingeben

Überprüfen Sie, ob das Plugin gefunden wurde und gültig ist:

Plugin gefunden

Befolgen Sie die Installationsanweisungen, bis Ihr Plugin in der Liste auftaucht:

Plugins Alpha Elastic

Testen wir unser Plugin!

Jetzt kommt das Beste! Nicht vergessen: ChatGPT delegiert die Anfrage, wenn sie über seinen Wissenstand hinaus geht. Um das zu gewährleisten, stellen Sie einfach eine Frage wie diese:

Highlights des letzten Release von Elastic

Mit den Schritten in diesem Blogpost können Sie Ihr eigenes Plugin erstellen und es über einen Cloud-Anbieter oder Ihre eigenen Hosts bereitstellen. So können Sie das Wissen und die Funktionen von ChatGPT erweitern und so ein ohnehin beeindruckendes Tool mit Spezialwissen und proprietären Daten weiter ausbauen.

Alles, was wir in diesem Blogpost behandelt haben, können Sie noch heute testen. Legen Sie mit einem kostenlosen Elastic Cloud Probeabo los.

Auch diese Blogposts könnten für Sie interessant sein:

In diesem Blogpost haben wir möglicherweise generative KI-Tools von Drittanbietern verwendet, die von ihren jeweiligen Eigentümern betrieben werden. Elastic hat keine Kontrolle über die Drittanbieter-Tools und übernimmt keine Verantwortung oder Haftung für ihre Inhalte, ihren Betrieb oder ihre Anwendung sowie für etwaige Verluste oder Schäden, die sich aus Ihrer Anwendung solcher Tools ergeben. Gehen Sie vorsichtig vor, wenn Sie KI-Tools mit persönlichen, sensiblen oder vertraulichen Daten verwenden. Alle Daten, die Sie eingeben, können für das Training von KI oder andere Zwecke verwendet werden. Es gibt keine Garantie dafür, dass Informationen, die Sie bereitstellen, sicher oder vertraulich behandelt werden. Setzen Sie sich vor Gebrauch mit den Datenschutzpraktiken und den Nutzungsbedingungen generativer KI-Tools auseinander.

Elastic, Elasticsearch und zugehörige Marken, Waren- und Dienstleistungszeichen sind Marken oder eingetragene Marken von Elastic N.V. in den USA und anderen Ländern. Alle weiteren Marken- oder Warenzeichen sind eingetragene Marken oder eingetragene Warenzeichen der jeweiligen Eigentümer.