Erstellung eines ChatGPT-Konnektors mit Elasticsearch zur Abfrage von GitHub-Issues

Erfahren Sie, wie Sie einen benutzerdefinierten ChatGPT-Konnektor erstellen und einen Elasticsearch MCP-Server bereitstellen, der die hybride Suche verwendet, um interne GitHub Issues abzufragen.

Agent Builder ist ab sofort als technische Vorschau verfügbar. Starten Sie mit einer Elastic Cloud-Testversion und lesen Sie die Dokumentation zum Agent Builder hier.

Kürzlich hat OpenAI benutzerdefinierte Konnektoren für ChatGPT für Pro-, Business-, Enterprise- und Edu-Abos angekündigt. Sie ergänzen die vorkonfigurierten Konnektoren zum Abrufen von Daten auf Gmail, GitHub, Dropbox usw. Es ist möglich, mithilfe von MCP-Servern benutzerdefinierte Konnektoren zu erstellen.

Benutzerdefinierte Konnektoren ermöglichen es Ihnen, Ihre vorhandenen ChatGPT-Konnektoren mit zusätzlichen Datenquellen wie Elasticsearch zu kombinieren, um umfassende Antworten zu erhalten.

In diesem Artikel werden wir einen MCP-Server erstellen, der ChatGPT mit einem Elasticsearch-Index verbindet, der Informationen zu internen GitHub Issues und Pull Requests enthält. So können Abfragen in natürlicher Sprache mit Ihren Elasticsearch-Daten beantwortet werden.

Wir werden den MCP-Server mithilfe von FastMCP auf Google Colab mit ngrok bereitstellen, um eine öffentliche URL zu erhalten, mit der ChatGPT eine Verbindung herstellen kann. Dadurch entfällt die Notwendigkeit einer komplexen Infrastruktureinrichtung.

Einen umfassenden Überblick über MCP und sein Ökosystem finden Sie unter „Der aktuelle Stand von MCP“.

Voraussetzungen

Vor Beginn benötigen Sie Folgendes:

  • Elasticsearch-Cluster (8.X oder höher)
  • Elasticsearch-API-Schlüssel mit Lesezugriff auf Ihren Index
  • Google-Konto (für Google Colab)
  • Ngrok-Konto (das kostenlose Abo genügt)
  • ChatGPT-Konto mit Pro-, Enterprise-, Business- oder Edu-Plan

Die Anforderungen für ChatGPT MCP-Konnektoren verstehen

Für die ChatGPT MCP-Konnektoren müssen zwei Tools implementiert werden: search und fetch. Weitere Einzelheiten finden Sie in den OpenAI Dokumenten.

Suchtool

Gibt eine Liste relevanter Ergebnisse aus Ihrem Elasticsearch-Index auf der Grundlage einer Benutzerabfrage zurück.

Das erhält es:

  • Eine einzelne Zeichenfolge mit der Anfrage des Benutzers in natürlicher Sprache.
  • Beispiel: „Finde Probleme im Zusammenhang mit der Elasticsearch-Migration.“

Was es zurückgibt: 

  • Ein Objekt mit einem result-Schlüssel, der ein Array von result-Objekten enthält. Jedes Ergebnis umfasst:
    • id - Eindeutige Dokumentkennung
    • title - Titel eines Issues oder Pull Requests (PR)
    • url - Link zum Issue/PR

In unserer Implementierung:

Abrufwerkzeug

Ruft den vollständigen Inhalt eines bestimmten Dokuments ab.

Das erhält es:

  • Eine einzelne Zeichenfolge mit der Elasticsearch-Dokument-ID aus dem Suchergebnis
  • Beispiel: „Nenne mir die Details zum PR-578.“

Was es zurückgibt:

  • Ein vollständiges Dokumentobjekt mit:
    • id - Eindeutige Dokumentkennung
    • title - Titel eines Issues oder Pull Requests (PR)
    • text - Vollständige Beschreibung und Details des Problems/PR
    • url - Link zum Issue/PR
    • type - Dokumenttyp (Issue, Pull-Request)
    • status - Aktueller Status (offen, in Bearbeitung, abgeschlossen)
    • priority - Prioritätsstufe (niedrig, mittel, hoch, kritisch)
    • assignee - Person, der das Issue/der PR zugewiesen wurde
    • created_date - Erstellungsdatum
    • resolved_date - Wann das Issue gelöst wurde (falls zutreffend)
    • labels - Mit dem Dokument verbundene Tags
    • related_pr - Verwandte Pull-Request-ID

Hinweis: In diesem Beispiel wird eine flache Struktur verwendet, bei der sich alle Felder auf der Stammebene befinden. Die Anforderungen von OpenAI sind flexibel und unterstützen auch verschachtelte Metadatenobjekte.

Datensatz zu GitHub Issues und Pull Requests

Für dieses Tutorial verwenden wir einen internen GitHub Datensatz mit Issues und Pull Requests. Dies stellt ein Szenario dar, in dem Sie private, interne Daten über ChatGPT abfragen möchten.

Den Datensätze finden Sie hier. Wir werden außerdem den Index der Daten mit der Bulk-API aktualisieren.

Dieser Datensatz umfasst:

  • Issues mit Beschreibungen, Status, Priorität und Zuweisungen
  • Pull-Requests mit Codeänderungen, Bewertungen und Deployment-Informationen
  • Beziehungen zwischen Issues und PRs (z. B. PR-578 behebt ISSUE-1889)
  • Labels, Daten und andere Metadaten

Index-Mappings

Der Index verwendet die folgenden Mappings, um die hybride Suche mit ELSER zu unterstützen. Das text_semantic wird für die semantische Suche verwendet, während andere Felder die Schlüsselwortsuchen ermöglichen.

Den MCP-Server erstellen

Unser MCP-Server implementiert zwei Tools gemäß den OpenAI Spezifikationen und verwendet die hybride Suche, um den semantischen und den textbasierten Abgleich für bessere Ergebnisse zu kombinieren.

Suchtool

Nutzt hybride Suche mit RRF (Reciprocal Rank Fusion), die semantische Suche mit Textabgleich kombiniert:

Wichtige Punkte:

  • Hybride Suche mit RRF: Kombiniert semantische Suche (ELSER) und Text-Suche (BM25) für bessere Ergebnisse.
  • Multi-Match-Abfrage: Sucht über mehrere Felder hinweg mit Boosting (title^3, text^2, assignee^2). Das Caret-Symbol (^) multipliziert die Relevanzwerte und priorisiert dabei Treffer in Titeln gegenüber solchen im Inhalt.
  • Fuzzy-Matching: fuzziness: AUTO behebt Tippfehler und Rechtschreibfehler, indem es ungefähre Übereinstimmungen erlaubt.
  • RRF-Parameterabstimmung:
    • rank_window_size: 50 - Legt fest, wie viele Top-Ergebnisse von jedem Retriever (semantische und textbasierte) vor dem Zusammenführen berücksichtigt werden.
    • rank_constant: 60 - Dieser Wert bestimmt, wie viel Einfluss Dokumente in einzelnen Ergebnismengen auf das endgültige Ranking haben.
  • Gibt nur die erforderlichen Felder zurück: id, title, url gemäß OpenAI-Spezifikation, und vermeidet das unnötige Freilegen zusätzlicher Felder.

Abrufwerkzeug

Ruft Dokumentdetails anhand der Dokumenten-ID ab, sofern vorhanden:

Wichtige Punkte:

  • Suchen nach Dokumenten-ID-Feld: Verwendet eine Begriffsabfrage im benutzerdefinierten id-Feld.
  • Vollständige Rückgabe des Dokuments: Mit vollständigem text-Feld mit allen Inhalten
  • Flache Struktur: Alle Felder auf der Wurzelebene, entsprechend der Dokumentstruktur von Elasticsearch.

Bereitstellung auf Google Colab

Wir nutzen Google Colab, um unseren MCP-Server zu betreiben, und ngrok, um ihn öffentlich zugänglich zu machen, damit ChatGPT eine Verbindung herstellen kann.

Schritt 1: Öffnen Sie das Google Colab Notebook

Greifen Sie auf unser vorkonfiguriertes Notebook Elasticsearch MCP für ChatGPT zu.

Schritt 2: Konfigurieren Sie Ihre Anmeldeinformationen

Sie benötigen drei Informationen:

  • Elasticsearch URL: Ihre Elasticsearch-Cluster-URL.
  • Elasticsearch API-Schlüssel: API-Schlüssel mit Lesezugriff auf Ihren Index.
  • Ngrok-Auth-Token: Kostenloses Token von ngrok. Wir nutzen ngrok, um die MCP-URL im Internet sichtbar zu machen, damit ChatGPT sich damit verbinden kann.

So erhalten Sie Ihr ngrok-Token

  1. Registrieren Sie sich für ein kostenloses Konto bei ngrok
  2. Gehe zu Ihrem Dashboard
  3. Kopieren Sie Ihr Authentifizierungs-Token

Secrets zu Google Colab hinzufügen

Im Google Colab-Notizbuch:

  1. Klicken Sie auf das Schlüsselsymbol in der linken Seitenleiste, um Secrets zu öffnen.
  2. Fügen Sie diese drei Secrets hinzu:

3. Aktivieren Sie den Notebook-Zugriff für jedes Secret.

Schritt 3: Führen Sie das Notebook aus

  1. Klicken Sie auf Runtime und dann auf alle ausführen, um alle Zellen auszuführen.
  2. Warten Sie, bis der Server startet (etwa 30 Sekunden)
  3. Suchen Sie nach der Ausgabe, die Ihre öffentliche ngrok-URL anzeigt.

4. Die Ausgabe sieht in etwa so aus:

Mit ChatGPT verbinden

Nun verbinden wir den MCP-Server mit Ihrem ChatGPT-Konto.

  1. Öffnen Sie ChatGPT und gehen Sie zu Einstellungen.
  2. Navigieren Sie zu Konnektoren. Wenn Sie ein Pro-Konto nutzen, müssen Sie den Entwicklermodus in den Konnektoren aktivieren.

Wenn Sie ChatGPT Enterprise oder Business verwenden, müssen Sie den Konnektor an Ihrem Workspace veröffentlichen.

3. Klicken Sie auf Erstellen.

Hinweis: In Business-, Enterprise- und Edu-Workspaces können nur Workspace-Inhaber, Administratoren sowie Benutzer, bei denen die entsprechende Einstellung aktiviert ist (für Enterprise/Edu), benutzerdefinierte Konnektoren hinzufügen. Benutzer mit der regulären Mitgliederrolle sind nicht berechtigt, selbst benutzerdefinierte Konnektoren hinzuzufügen.

Sobald ein Konnektor von einem Benutzer mit der Inhaber- oder Admin-Rolle hinzugefügt und aktiviert wurde, kann er von allen Mitgliedern des Workspaces verwendet werden.

4. Geben Sie die erforderlichen Informationen ein sowie Ihre ngrok-URL, die mit /sse/ endet. Beachten Sie den „/“ nach „sse“. Ohne diesen funktioniert es nicht:

  • Name: Elasticsearch MCP
  • Beschreibung: Benutzerdefiniertes MCP zum Suchen und Abrufen von internen GitHub-Informationen.

5. Klicken Sie auf Erstellen, um das benutzerdefinierte MCP zu speichern.

Die Verbindung ist sofort hergestellt, wenn Ihr Server läuft. Keine zusätzliche Authentifizierung ist erforderlich, da der Elasticsearch-API-Schlüssel auf Ihrem Server konfiguriert ist.

Teste den MCP-Server

Bevor Sie Fragen stellen, müssen Sie auswählen, welchen Konnektor ChatGPT verwenden soll.

Aufforderung 1: Nach Problemen suchen

Anfrage: „Finde Probleme im Zusammenhang mit der Elasticsearch-Migration“ und bestätigen Sie die Aktionen des aufgerufenen Tools.

ChatGPT wird das Tool search mit Ihrer Abfrage aufrufen. Sie können sehen, dass es nach verfügbaren Tools sucht, sich darauf vorbereitet, das Elasticsearch-Tool aufzurufen. Vor jeglichen Aktionen gegenüber dem Tool wird die Bestätigung des Benutzers eingeholt.

Anfrage zum Aufruf des Tools:

Reaktion des Tools:

ChatGPT verarbeitet die Ergebnisse und präsentiert sie in einem natürlichen, gesprächsorientierten Format.

Hinter den Kulissen

1. ChatGPT-Anrufe search(“Elasticsearch migration”)

2. Elasticsearch führt eine hybride Suche durch.

  • Die semantische Suche versteht Konzepte wie „Upgrade“ und „Versionskompatibilität“.
  • Die Textsuche findet exakte Treffer für „Elasticsearch“ und „Migration“.
  • RRF kombiniert und bewertet Ergebnisse beider Ansätze

3. Sie gibt die 10 am besten mit id, title, übereinstimmenden Ergebnisse zurück url

4. ChatGPT identifiziert „ISSUE-1712: Migration von Elasticsearch 7.x auf 8.x“ als relevantestes Ergebnis.

Prompt 2: Nenne mir die vollständigen Details

Anfrage: „Nenne mir die Details zu ISSUE-1889“

ChatGPT erkennt, dass Sie detaillierte Informationen zu einem bestimmten Problem wünschen, ruft das Tool fetch auf holt beim Benutzer die Bestätigung ein, bevor Maßnahmen gegen das Tool ergriffen werden.

Anfrage zum Aufruf des Tools:

Reaktion des Tools:

ChatGPT fasst die Informationen zusammen und präsentiert sie übersichtlich.

Hinter den Kulissen

Prompt: „Nenne mir die Details von ISSUE-1889“

  1. ChatGPT-Anrufe fetch(“ISSUE-1889”)
  2. Elasticsearch ruft das vollständige Dokument ab
  3. Gibt ein vollständiges Dokument mit allen Feldern auf der Stammebene zurück
  4. ChatGPT synthetisiert die Informationen und antwortet mit korrekten Zitaten.

Fazit

In diesem Artikel haben wir einen maßgeschneiderten MCP-Server erstellt, der ChatGPT mit Elasticsearch über spezielle Such- und Abruf--MCP-Tools verbindet und so natürliche Sprachanfragen zu privaten Daten ermöglicht.

Dieses MCP-Muster funktioniert für jeden Elasticsearch-Index, jede Dokumentation, jedes Produkt, jedes Log oder andere Daten, die Sie über natürliche Sprache abfragen möchten.

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