ChatGPT et Elasticsearch : un plug-in pour utiliser ChatGPT avec vos données Elastic
Vous avez peut-être lu cet article décrivant notre parcours pour mettre en relation les fonctionnalités de pertinence d'Elasticsearch avec celles de questions-réponses d'OpenAI. L'idée principale de cet article consistait à montrer comment utiliser Elastic avec le modèle GPT d'OpenAI en vue de rédiger une réponse et de fournir aux internautes du contenu pertinent pour le contexte concerné.
L'application que nous avons conçue peut mettre en lumière un point de terminaison de recherche et être appelée par tout service front-end. La bonne nouvelle est qu'OpenAI a lancé une version alpha privée du futur framework du plug-in ChatGPT.
Avec cet article, apprenez à implémenter le plug-in et à élargir l'utilisation de ChatGPT à tout contenu indexé dans Elasticsearch en vous basant sur la documentation Elastic.
Qu'est-ce qu'un plug-in ChatGPT ?
Les plug-ins ChatGPT sont des extensions conçues pour aider le modèle à réaliser ses opérations d'exécution ou relatives à des connaissances.
Par exemple, nous savons que le point de bascule de ChatGPT concernant les connaissances est le mois de septembre 2021. Par conséquent, toute question qui concerne des données récentes ne trouvera pas de réponse. En outre, aucune réponse ne sera donnée pour toute question portant sur un sujet trop précis qui sort du cadre de l'entraînement du modèle.
Les plug-ins peuvent élargir la portée des applications possibles et améliorer les fonctionnalités des modèles. Réciproquement, le modèle lui-même renforce la sortie des plug-ins.
Vous trouverez ci-dessous la liste officielle des plug-ins actuellement pris en charge par ChatGPT. Elle s'allongera sans doute rapidement à mesure que les entreprises testent ChatGPT.
En consultant cette liste, vous remarquerez que les cas d'utilisation se révèlent progressivement d'eux-mêmes. Si l'on prend le cas d'Expedia, par exemple, son plug-in est une extension de ChatGPT qui facilite la planification des voyages. Ainsi, ChatGPT devient un assistant dans ce domaine.
Cet article vise à atteindre des objectifs similaires pour Elastic, c'est-à-dire permettre à ChatGPT d'accéder à la base de connaissances actuelle d'Elastic et de vous accompagner dans le cadre de vos projets avec les solutions de cette entreprise.
Architecture
Nous allons apporter une légère modification qui aura un impact positif sur les coûts de l'exemple de code présenté dans le premier article par mon collègue Jeff Vestal.
Nous supprimerons l'appel à OpenAI API, car ChatGPT récupérera désormais le contenu dans Elasticsearch pour le digérer et le mettre à la disposition des internautes.
1. ChatGPT lance un appel au point de terminaison "/fr/search" (recherche) du plug-in.
- Cette décision se fonde sur les "règles" du plug-in "description_for_human" (voir le manifeste ci-dessous).
2. Le code du plug-in crée une requête de recherche qui est envoyée à Elasticsearch.
3. L'URL d'origine et le corps de la documentation sont transférés à Python.
4. Le plug-in transfère l'URL et le corps du document au format texte à ChatGPT.
5. ChatGPT utilise les informations fournies par le plug-in pour rédiger sa réponse.
À nouveau, cet article suppose que vous avez configuré votre compte Elastic Cloud et vectorisé votre contenu, mais aussi que vous disposez d'un cluster Elasticsearch où ont été sauvegardées des données prêtes à être utilisées. Si toute cette configuration n'est pas encore prête, lisez notre article précédent pour connaître les étapes à suivre.
Code de plug-in
OpenAI a conçu un framework de plug-in relativement simple à gérer pour ChatGPT. Il déploie un service qui met en lumière :
- le manifeste du plug-in expliquant ce que le plug-in fournit aux internautes et à ChatGPT ;
- la définition d'OpenAPI du plug-in, qui est la description fonctionnelle permettant à ChatGPT de comprendre les API disponibles.
Structure des fichiers du plug-in
La capture d'écran ci-dessous vous montre à quoi ressemble la structure.
- Le manifeste du plug-in est stocké dans le fichier ai-plugin.json sous le répertoire .well-known, conformément aux bonnes pratiques d'OpenAI.
- Le code du service principal se trouve dans app.py.
- Le Dockerfile sera utilisé ultérieurement pour déployer le plug-in dans Google Cloud Compute.
- Le logo du plug-in (logo.ong) s'affiche comme dans la boutique des plug-ins ChatGPT. Ici, il s'agit du logo Elastic.
- Le plug-in est présenté selon la description d'OpenAI.
Code Python
Pour obtenir l'intégralité du code, consultez le référentiel GitHub. Nous allons étudier la partie principale de ce code.
…
@app.get("/search")
…
@app.get("/logo.png")
…
@app.get("/.well-known/ai-plugin.json")
…
@app.get("/openapi.yaml")
…
Nous avons omis l'ensemble des détails pour ne conserver que les principaux composants ci-dessous. Deux catégories d'API en résultent.
1. L'API requise par OpenAI pour concevoir un plug-in :
- /logo.png récupère le logo du plug-in.
- /.well-known/ai-plugin.json récupère le manifeste du plug-in.
- /openapi.yaml récupère la description d'OpenAPI du plug-in.
2. L'API du plug-in :
- /search est la seule API dévoilée à ChatGPT qui exécute la recherche dans Elasticsearch.
Manifeste du plug-in
Le manifeste du plug-in est ce que ChatGPT utilisera pour valider l'existence (accessible) du plug-in. La définition est la suivante.
{
"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"
}
Plusieurs points méritent d'être soulevés.
1. Il existe deux descriptions :
- description_for_human est celle que les internautes voient lors de l'installation du plug-in dans l'interface utilisateur web de ChatGPT.
- description_for_model contient les instructions pour que le modèle comprenne quand utiliser le plug-in.
2. Quelques espaces réservés, comme PLUGIN_HOSTNAME, sont remplacés dans le code Python.
Définition d'OpenAPI
Notre code dévoilera un seul point de terminaison d'API à ChatGPT, ce qui lui permet de chercher la documentation Elastic. En voici la description.
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
Pour le fichier de définition, les points clés sont les suivants :
- Nous transférons le contenu d'invite de ChatGPT à notre cluster Elasticsearch sous forme de requête.
- Quelques espaces réservés, comme PLUGIN_HOSTNAME, sont remplacés dans le code Python.
Déploiement du plug-in Elastic dans Google Cloud Platform (GCP)
Vous pouvez choisir une méthode de déploiement pour dévoiler votre plug-in, mais aussi faire appel à un fournisseur cloud différent. Nous utilisons GCP dans cet article, plus particulièrement Google Cloud Run et Google Cloud Build. Le premier permet de dévoiler et d'exécuter le service, tandis que le second assure l'intégration continue.
Configuration
Cette configuration suppose que la personne utilisant GCP dispose des autorisations appropriées pour :
- concevoir une image de conteneur avec Google Cloud Build dans le Container Registry de Google ;
- déployer un conteneur dans Google Cloud Run.
Si ce n'est pas le cas, vous devrez actualiser les autorisations sur la page IAM de GCP.
Nous allons utiliser l'interface de ligne de commande gcloud pour configurer notre environnement. Les instructions d'installation sont disponibles sur cette page.
Une fois installée, exécutez la commande suivante pour l'authentification.
gcloud auth
Ensuite, configurez l'identifiant pour votre projet GCP.
gcloud config set project PROJECT_ID
Vous pouvez maintenant vous lancer dans la conception et le déploiement.
Conception et déploiement
La première étape consiste à développer l'image de conteneur à l'aide de Cloud Build et de l'envoyer dans le Container Registry de Google.
gcloud builds submit --tag gcr.io/PROJECT_ID/my-python-app
Remplacez PROJECT_ID par l'identifiant de votre projet GCP et my-python-app par le nom que vous souhaitez donner à votre image de conteneur.
Exportez l'environnement requis par le code Python pour créer le client Elasticsearch.
export YOUR_CLOUD_ID=VALUE
export YOUR_CLOUD_PASS=VALUE
export YOUR_CLOUD_USER=VALUE
Enfin, déployez l'image de conteneur dans Cloud Run.
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
Votre service devrait s'exécuter dans Cloud Run.
Remarque : Vous pouvez également activer l'intégration continue afin que toute validation dans votre référentiel GitHub déclenche un redéploiement. Sur la page d'informations détaillées sur le service, cliquez sur Set up continuous deployment (Configurer le déploiement continu).
Installation du plug-in dans ChatGPT
Une fois que le plug-in est déployé et est doté d'un point de terminaison publiquement accessible, il peut être installé dans ChatGPT. Dans notre cas, étant donné qu'il est déployé dans Google Cloud Run, vous pouvez obtenir l'URL de la manière suivante.
Ensuite, dans ChatGPT, accédez à la boutique des plug-ins.
Choisissez "Develop your own plugin" (Développer votre propre plug-in).
Collez l'URL que vous avez copiée sur la page de Google Cloud Run.
Assurez-vous que le plug-in est identifié et valide.
Suivez les instructions d'installation jusqu'à ce que votre plug-in disponible s'affiche dans la liste.
Testons notre plug-in !
Passons maintenant à la meilleure étape. Rappelez-vous que ChatGPT décidera de déléguer si votre invite sort du cadre de ses connaissances. Pour vérifier que cela fonctionne, posez une question similaire à l'exemple suivant.
En suivant les étapes décrites dans cet article, vous pouvez créer votre propre plug-in et le déployer sur la solution d'un fournisseur cloud ou sur vos propres hôtes. Ainsi, vous pouvez commencer à explorer les possibilités d'amélioration des fonctionnalités et des connaissances de ChatGPT, mais aussi optimiser un outil déjà fantastique grâce à des connaissances propriétaires et spécialisées.
Vous pouvez essayer l'ensemble des fonctionnalités abordées dans cet article dès aujourd'hui ! Lancez-vous en vous inscrivant à un essai gratuit d'Elastic Cloud.
Voici d'autres articles que vous pourriez trouver intéressants :
- ChatGPT et Elasticsearch : les liens entre OpenAI et les données privées
- Monitoring des modèles API et GPT d'OpenAI avec OpenTelemetry et Elastic
- Exploration de l'avenir de la sécurité avec ChatGPT
Dans cet article, nous sommes susceptibles d'avoir utilisé des outils d'intelligence artificielle générative tiers appartenant à leurs propriétaires respectifs qui en assurent aussi le fonctionnement. Elastic n'a aucun contrôle sur les outils tiers et n'est en aucun cas responsable de leur contenu, de leur fonctionnement, de leur utilisation, ni de toute perte ou de tout dommage susceptible de survenir à cause de l'utilisation de tels outils. Lorsque vous utilisez des outils d'intelligence artificielle générative avec des informations personnelles, sensibles ou confidentielles, veuillez faire preuve de prudence. Toute donnée que vous saisissez dans ces solutions peut être utilisée pour l'entraînement de l'intelligence artificielle ou à d'autres fins. Vous n'avez aucune garantie que la sécurisation ou la confidentialité des informations renseignées sera assurée. Vous devriez vous familiariser avec les pratiques en matière de protection des données personnelles et les conditions d'utilisation de tout outil d'intelligence artificielle générative avant de l'utiliser.
Elastic, Elasticsearch et les marques associées sont des marques commerciales, des logos ou des marques déposées d'Elasticsearch N.V. aux États-Unis et dans d'autres pays. Tous les autres noms de produits et d'entreprises sont des marques commerciales, des logos ou des marques déposées appartenant à leurs propriétaires respectifs.