ChatGPT y Elasticsearch: Un plugin para usar ChatGPT con tus datos de Elastic

blog-star-trails-chatgpt.jpg

Quizá hayas leído este blog anterior sobre el camino que recorrimos para conectar las capacidades de relevancia de Elasticsearch con las capacidades para responder preguntas de OpenAI. La idea clave de ese blog era ilustrar cómo usar Elastic con el modelo de GPT de OpenAI para crear una respuesta y devolver contenido relevante para el contexto a los usuarios.

La aplicación que creamos puede exponer un endpoint de búsqueda y ser llamada por cualquier servicio de frontend. La buena noticia es que ahora OpenAI ha lanzado una versión alfa privada del futuro marco de trabajo del plugin de ChatGPT.

En este blog, descubrirás cómo implementar el plugin y extender el uso de ChatGPT a cualquier contenido indexado en Elasticsearch, usando la documentación de Elastic.

resumir el muestreo de transacciones

¿Qué es el plugin de ChatGPT?

Los plugins de ChatGPT son extensiones desarrolladas a fin de asistir al modelo para completar su conocimiento o ejecutar acciones.

Por ejemplo, sabemos que la transición de ChatGPT desde una perspectiva de conocimiento es septiembre de 2021, por lo que cualquier pregunta sobre datos recientes no será respondida. Además, cualquier pregunta relacionada con algo demasiado específico más allá de los límites de aquello para lo que se entrenó el modelo no será respondida.

Los plugins pueden ampliar el alcance de posibles aplicaciones y mejorar las capacidades de los modelos, pero de forma recíproca, la salida del plugin la incrementa el modelo en sí.

La lista oficial de plugins que actualmente tienen soporte en ChatGPT se encuentra a continuación. Puedes esperar que esta lista se amplíe rápidamente, a medida que más organizaciones experimentan con ChatGPT:

lista de plugins de chatgpt

A medida que observes la lista, verás que los casos de uso se revelan lentamente aquí. En el caso de Expedia, por ejemplo, su plugin extiende ChatGPT para asistir en la planificación de viajes, convirtiendo a ChatGPT en un asistente de planificación viajes.

El objetivo de este blog es lograr objetivos similares para Elastic: permitir a ChatGPT acceder a la base de conocimientos actual de Elastic y ayudarte con tus proyectos de Elastic.

tienda de plugins

Arquitectura

Incluiremos una pequeña modificación que tiene un impacto positivo en el costo en el código de muestra presentado en la parte 1 de mi colega Jeff Vestal.

Eliminaremos la llamada a la API de OpenAI, dado que ahora ChatGPT cumplirá el rol de tomar el contenido de Elasticsearch y digerirlo para devolverlo al usuario:

diagrama de chatgpt y elastic

1. ChatGPT hace una llamada al endpoint "/es/search" del plugin.

  • Esta decisión se basa en las "reglas" del plugin "description_for_human" (consulta el manifiesto del plugin a continuación).

2. El código del plugin crea una solicitud de búsqueda que se envía a Elasticsearch.

3. El cuerpo de la documentación y la URL original se devuelven a Python.

4. El plugin devuelve el cuerpo del documento y la URL, en forma de texto a ChatGPT.

5. ChatGPT usa la información del plugin para elaborar su respuesta.

De nuevo, en este blog se supone que tienes configurada tu cuenta de Elastic Cloud, vectorizado el contenido y que posees un cluster de Elasticsearch con datos listos para usar. Si aún no tienes todo eso, consulta nuestro blog anterior para conocer los pasos detallados que debes seguir.

Código de plugin

OpenAI creó un marco de trabajo de plugin bastante simple de manejar para ChatGPT. Despliega un servicio que expone lo siguiente:

  • El manifiesto del plugin, en el que se explica qué proporciona el plugin a los usuarios y a ChatGPT
  • La definición de OpenAPI del plugin, que es la descripción funcional que permite a ChatGPT comprender las API disponibles
El código del plugin se puede encontrar aquí.

Estructura del archivo del plugin

En la captura de pantalla siguiente se muestra cómo se ve la estructura:

plugin elasticgpt doc
  • El manifiesto del plugin se almacena en el archivo ai-plugin.json en el directorio .well-known conforme a las mejores prácticas de OpenAI.
  • El código de servicio principal está en app.py.
  • El Dockerfile se usará luego para desplegar el plugin en Google Cloud Compute.
  • El logotipo del plugin (logo.ong) como se muestra en la tienda de plugins de ChatGPT, aquí el logotipo de Elastic.
  • La descripción de OpenAI del plugin.

Código de Python

Para el código completo, consulta el repositorio de GitHub. Solo miraremos la parte principal de este código:

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

Quitamos todos los detalles y conservamos las partes principales. Aquí hay dos categorías de API:

1. La que requiere OpenAI para crear un plugin:

  • /logo.png: recupera el logotipo del plugin
  • /.well-known/ai-plugin.json: trae el manifiesto del plugin
  • /openapi.yaml: trae la descripción de OpenAPI del plugin

2. La API de plugin:

  • /search es lo único expuesto a ChatGPT que ejecuta la búsqueda en Elasticsearch.

Manifiesto del plugin

El manifiesto del plugin es lo que usará ChatGPT para validar la existencia (accesibilidad) del plugin. La definición es la siguiente:

{
   "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"
 }

Cabe destacar algunos puntos aquí: 

1. Hay dos descripciones: 

  • description_for_human: esto es lo que ven las personas cuando instalan el plugin en la UI web de ChatGPT.
  • description_for_model: instrucciones para el  modelo para comprender cuándo usar el plugin.

2. Existen algunos marcadores de posición, como PLUGIN_HOSTNAME, que se reemplazan en el código de Python.

Definición de OpenAPI

Nuestro código solo expondrá un único endpoint de API a ChatGPT, permitiéndole buscar documentación de Elastic. Esta es la descripción:

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
        

En el archivo de definiciones, los puntos clave son los siguientes:

  • Tomamos el contenido de la línea de comandos de ChatGPT y lo pasamos como una búsqueda a nuestro cluster de Elasticsearch.
  • Algunos marcadores de posición, como PLUGIN_HOSTNAME se reemplazan en el código de Python.

Despliegue del plugin de Elastic en Google Cloud Platform (GCP)

Puedes elegir un método de despliegue para exponer el plugin, además de usar un Proveedor Cloud diferente. Usamos GCP en este blog; más específicamente, Google Cloud Run y Google Cloud Build. El primero es para exponer y ejecutar el servicio, y el segundo es para la integración continua.

Configuración

En esta configuración se asume que tu usuario de GCP tiene los permisos adecuados para hacer lo siguiente:

  • Crear una imagen de contenedor con Google Cloud Build en Google Container Registry
  • Desplegar un contenedor en Google Cloud Run

De lo contrario, tendrás que actualizar los permisos en la página de IAM de GCP

Usaremos la CLI de gcloud para configurar nuestro entorno. Puedes encontrar las instrucciones de instalación aquí.

Una vez instalado, ejecuta el comando siguiente para la autenticación:

  gcloud auth

Luego configura el identificador del proyecto en tu proyecto de GCP:


  gcloud config set project PROJECT_ID

Ahora estás listo para crear y desplegar.

Crear y desplegar

El primer paso es crear la imagen del contenedor con Cloud Build y enviarla a Google Container Registry:

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

Reemplaza PROJECT_ID con tu ID del proyecto de GCP y my-python-app con el nombre que deseas asignar a tu imagen del contenedor.

Exporta en entorno requerido por el código de Python para crear el cliente de Elasticsearch:


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

Por último, despliega la imagen del contenedor en 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

Deberías ver tu servicio ejecutándose en Cloud Run:

servicios de cloud run

Ten en cuenta que también puedes activar la integración continua, de modo que cualquier confirmación en tu repositorio de GitHub desencadenará un nuevo despliegue. En la página de detalles del servicio, haz clic en Set up continuous deployment (Configurar despliegue continuo).

Instalación del plugin en ChatGPT

Una vez que el plugin está desplegado y tiene un endpoint de acceso público, puede instalarse en ChatGPT. En nuestro caso, como está desplegado en Google Cloud Run, puedes obtener la URL aquí:

elastic doc gpt

Luego, en ChatGPT, ingresa en la tienda de plugins:

plugins alfa

Elige "Develop your own plugin" (Desarrollar tu propio plugin):

desarrollar tu propio plugin

Pega la URL que copiaste de la página de Google Cloud Run:

ingresa tu dominio de sitio web

Asegúrate de que el plugin se haya encontrado y sea válido:

plugin encontrado

Sigue las instrucciones de instalación hasta que veas tu plugin disponible en la lista:

plugins alfa elastic

Probemos nuestro plugin

Bien, ahora la mejor parte. Recuerda que ChatGPT decide delegar cuando tu línea de comandos excede su conocimiento. Para garantizar que eso suceda, haz una pregunta similar a la de este ejemplo:

aspectos destacados de la versión más reciente de elastic

Con los pasos proporcionados en este blog, puedes crear tu propio plugin y desplegarlo en un Proveedor Cloud en tus propios hosts. Esto te permite comenzar a explorar cómo mejorar el conocimiento y la funcionalidad de ChatGPT, mejorando una herramienta que ya es impresionante con conocimientos especializados y exclusivos.

Puedes probar todas las capacidades mencionadas en este blog hoy. Da los primeros pasos registrándote para una prueba gratuita de Elastic Cloud.

Estos son algunos otros blogs que pueden resultarte interesantes:

En este blog, es posible que hayamos usado herramientas de AI generativa de terceros, que son propiedad de sus respectivos propietarios y operadas por estos. Elastic no tiene ningún control sobre las herramientas de terceros, y no somos responsables de su contenido, funcionamiento o uso, ni de ninguna pérdida o daño que pueda resultar del uso de dichas herramientas. Ten cautela al usar herramientas de AI con información personal o confidencial. Cualquier dato que envíes puede ser utilizado para el entrenamiento de AI u otros fines. No hay garantías de que la información que proporciones se mantenga segura o confidencial. Deberías familiarizarte con las prácticas de privacidad y los términos de uso de cualquier herramienta de AI generativa previo a su uso.

Elastic, Elasticsearch y las marcas asociadas son marcas comerciales, logotipos o marcas comerciales registradas de Elasticsearch N.V. en los Estados Unidos y otros países. Todos los demás nombres de empresas y productos son marcas comerciales, logotipos o marcas comerciales registradas de sus respectivos propietarios.