Potenciando capacidades de AI con Apache APISIX y OpenAI API

Bobur Umurzokov

Bobur Umurzokov

February 7, 2023

Technology

Inteligencia artificial (IA) ha revolucionado la forma en que interactuamos con la tecnología y se ha convertido en una parte integral de las aplicaciones modernas. La API de OpenAI proporciona a los desarrolladores capacidades avanzadas de IA, permitiéndoles construir aplicaciones de IA sofisticadas con facilidad.

Sin embargo, a medida que el uso de la IA crece, también lo hace la necesidad de integraciones de API escalables, eficientes y seguras. Aquí es donde entra en juego Apache APISIX. Apache APISIX es una puerta de enlace de API de alto rendimiento y de código abierto que ofrece características avanzadas para gestionar y escalar integraciones de API.

En esta publicación de blog, exploraremos los beneficios de integrar Apache APISIX con la API de OpenAI y cómo puedes usar Apache APISIX para crear una integración de IA más escalable, eficiente y segura. Desde el almacenamiento en caché de proxies hasta las características de seguridad, cubriremos todo lo que necesitas saber para comenzar con la integración de Apache APISIX y la API de OpenAI. Ya seas un desarrollador de IA o un profesional de DevOps, esta publicación de blog es tu guía completa para crear una integración de IA potente y rentable.

Objetivos de aprendizaje

A lo largo del artículo aprenderás lo siguiente:

  • ¿Qué son la API de OpenAI y Apache APISIX?
  • Los beneficios de usar Apache APISIX con la API de OpenAI.
  • Varios casos de uso de plugins de Apache APISIX para mejorar la API de OpenAI.
  • Cómo crear una nueva Ruta en APISIX para la API de OpenAI.
  • Cómo agregar el endpoint de la API de OpenAI como un Upstream para la ruta.
  • Cómo configurar autenticación, limitación de tasa y almacenamiento en caché para la ruta según sea necesario.
  • Cómo probar la ruta para asegurarte de que las solicitudes se reenvíen correctamente a la API de OpenAI.

¿Qué es la API de OpenAI?

OpenAI es una plataforma de vanguardia para crear y desplegar modelos avanzados de inteligencia artificial. Estos modelos pueden usarse para una variedad de tareas, como procesamiento de lenguaje natural, reconocimiento de imágenes y análisis de sentimientos. Uno de los beneficios clave de OpenAI es que proporciona una API que los desarrolladores pueden usar para acceder a estos modelos e incorporarlos en sus aplicaciones.

La API de OpenAI es una plataforma basada en la nube que proporciona acceso a los modelos de IA de OpenAI, incluyendo ChatGPT. La API permite a los desarrolladores integrar capacidades de IA en sus aplicaciones.

ChatGPT es solo uno de los modelos de IA disponibles a través de la API de OpenAI, y es particularmente adecuado para casos de uso que requieren capacidades de procesamiento de lenguaje natural y generación de texto. Por ejemplo, ChatGPT puede usarse para generar respuestas de texto en un chatbot, proporcionar sugerencias de completado de texto, completado de código o responder preguntas en una interfaz conversacional.

¿Qué es Apache APISIX?

Apache APISIX es una solución de gestión de tráfico de API nativa de la nube y de código abierto que ofrece características de puerta de enlace de API para crear APIs RESTful escalables, seguras y altamente disponibles.

Al usar una puerta de enlace de API con la API de OpenAI, puedes crear y desplegar APIs escalables, seguras y de alto rendimiento que accedan a los modelos de OpenAI. Esto te permitirá incorporar el poder de OpenAI en tus aplicaciones y ofrecer una gran experiencia a tus usuarios.

Beneficios de usar Apache APISIX con la API de OpenAI

Hay varios beneficios al usar Apache APISIX con la API de OpenAI:

  1. Escalabilidad: Apache APISIX proporciona una forma fácil de gestionar y escalar la API de OpenAI, permitiéndote manejar un mayor tráfico y demandas de uso.

  2. Rendimiento: Apache APISIX puede ayudar a mejorar el rendimiento de las solicitudes a la API de OpenAI almacenando respuestas en caché y reduciendo la latencia. Seguridad: Apache APISIX proporciona características de seguridad como cifrado y autenticación, facilitando la protección del acceso a la API de OpenAI.

  3. Flexibilidad: Apache APISIX ofrece una forma flexible de gestionar y controlar el acceso a la API de OpenAI, permitiéndote personalizar y configurar tu integración según sea necesario.

  4. Monitoreo y análisis: Apache APISIX proporciona un monitoreo y análisis detallado, permitiéndote rastrear y optimizar el rendimiento de tu integración con la API de OpenAI.

Plugins de Apache APISIX para mejorar la API de OpenAI

Hay varios plugins de Apache APISIX que pueden usarse para mejorar la integración con la API de OpenAI. Algunos de los plugins que puedes usar con la API de OpenAI incluyen:

  • limitación de tasa: Para limitar el número de solicitudes a la API y prevenir el uso excesivo de la API de OpenAI.
  • autenticación: Para proteger el acceso a la API de OpenAI implementando mecanismos de autenticación y autorización.
  • control de tráfico: Para controlar el flujo de tráfico de la API y garantizar un rendimiento y estabilidad consistentes de la API de OpenAI.
  • observabilidad: Para monitorear y registrar solicitudes y respuestas de la API, proporcionando visibilidad sobre el uso y rendimiento de la API de OpenAI.
  • almacenamiento en caché: Para almacenar respuestas de la API en caché y reducir el número de solicitudes a la API, mejorando el rendimiento y reduciendo el costo de usar la API de OpenAI.
  • transformación: Para modificar solicitudes y respuestas de la API, transformando datos de un formato a otro, como de JSON a XML.

Demo: Gestionar APIs de OpenAI con Apache APISIX

Con suficiente conocimiento teórico en mente, ahora podemos pasar a una sesión práctica. En este ejemplo, Apache APISIX se usa para crear una puerta de enlace de API simple que accede a la API de OpenAI y gestiona el tráfico creando una ruta, un upstream y habilitando algunos plugins. Vamos a interactuar con el endpoint de Completado de la API de OpenAI para crear un generador de descripciones de productos que genere descripciones de manera eficiente y precisa.

Por ejemplo, una solicitud típica a la puerta de enlace de API se vería así:

curl http://127.0.0.1:9080/openai/product/desc  -X POST -d
'{
   "model":"text-davinci-003",
   "prompt":"Escribe una breve descripción del producto para el Apple 13 pro",
   "temperature":0,
   "max_tokens":256
}'

Y obtendremos como salida:

{
   "object":"text_completion",
   "model":"text-davinci-003",
   "choices":[
      {
         "text":"\n\nEl Apple 13 Pro es el portátil perfecto para aquellos que necesitan una máquina potente y confiable.
Cuenta con una pantalla Retina de 13 pulgadas con tecnología True Tone, un potente procesador Intel Core i5 de 8ª generación, 8 GB de RAM y un SSD de 256 GB para almacenamiento.
También tiene una Touch Bar y Touch ID para mayor seguridad y comodidad. Con hasta 10 horas de duración de la batería, puedes mantenerte productivo todo el día.
El Apple 13 Pro es el portátil perfecto para aquellos que necesitan una máquina potente y confiable.",
         "index":0,
         "finish_reason":"stop"
      }
   ],
   "usage":{
      "prompt_tokens":9,
      "completion_tokens":109,
      "total_tokens":118
   }
}

Requisitos previos

  • Debes estar familiarizado con los conceptos fundamentales del modelo de completado de la API de OpenAI.
  • Crear una Clave de API de OpenAI: Para acceder a la API de OpenAI, necesitarás crear una clave de API. Puedes hacerlo iniciando sesión en el sitio web de OpenAI y navegando a la página de gestión de claves de API.
  • Docker instalado en tu máquina para ejecutar APISIX.
  • Conocimientos básicos sobre algunos conceptos centrales de APISIX, como Ruta, Upstream y Plugin.

Configuración del proyecto

Lo primero que debes hacer es clonar el repositorio del proyecto apisix-docker desde GitHub:

git clone https://github.com/apache/apisix-docker.git

Abre la carpeta del proyecto en tu editor de código favorito. Este tutorial utiliza VS Code.

Instalar y ejecutar Apache APISIX

Para ejecutar Apache APISIX, puedes seguir estos pasos:

Abre una nueva ventana de terminal y ejecuta el comando docker compose up desde la carpeta raíz del proyecto:

docker compose up -d

El comando anterior ejecutará Apache APISIX y etcd juntos con Docker.

En este demo, instalamos APISIX usando Docker. Sin embargo, hay otras opciones para instalarlo en la guía de instalación.

Crear un Upstream para la API de OpenAI

Una vez completada la configuración, crearemos un objeto Upstream en APISIX usando su API de Administración. "Upstream" en APISIX se refiere a los servidores backend que son responsables de servir los datos reales de la solicitud.

En nuestro caso, definimos el servidor API upstream en api.openai.com con un solo nodo y el esquema https utilizado para comunicarse de manera segura con el Upstream:

curl "http://127.0.0.1:9180/apisix/admin/upstreams/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
  "name": "OpenAI API upstream",
  "desc": "Agregar el dominio de la API de OpenAI como upstream",
  "type": "roundrobin",
  "scheme": "https",
  "nodes": {
    "api.openai.com:443": 1
  }
}'

Crear una nueva configuración de plugin

Ahora creamos una nueva configuración de plugin con el plugin proxy-rewrite habilitado.

El plugin proxy se usa para redefinir las solicitudes al endpoint de completado de la API de OpenAI. La configuración del plugin incluye opciones para establecer la URL del endpoint de la API, pasar la clave de API de OpenAI como un encabezado y con el encabezado Content-Type establecido en application/json.

curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
   "plugins":{
      "proxy-rewrite":{
         "uri":"/v1/completions",
         "host":"api.openai.com",
         "headers":{
            "Authorization":"Clave de API de OpenAI",
            "Content-Type":"application/json"
         }
      }
   }
}'

Configurar una Ruta para el endpoint de completado de OpenAI

En el siguiente paso, configuramos una nueva Ruta en APISIX para manejar solicitudes POST con una nueva ruta personalizada de la puerta de enlace de API /openai/product/desc y damos referencias al upstream y la configuración de plugin creados en los pasos anteriores mediante sus IDs únicos.

curl -i http://127.0.0.1:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
   "name":"Ruta de completado de la API de OpenAI",
   "desc":"Crear una nueva ruta en APISIX para el endpoint de completado de la API de OpenAI",
   "methods":[
      "POST"
   ],
   "uri":"/openai/product/desc",
   "upstream_id":"1",
   "plugin_config_id":1
}'

Además, la ruta se configura con reintentos, un tiempo de espera y un tiempo de espera de conexión persistente para garantizar una comunicación robusta y resistente con la API de OpenAI.

Probar con una solicitud Curl

Para probar la API, puedes hacer una solicitud POST al endpoint /openai/product/desc usando una herramienta como cURL o Postman. La puerta de enlace de API reenviará la solicitud al endpoint de completado de la API de OpenAI y devolverá los resultados con éxito.

curl http://127.0.0.1:9080/openai/product/desc  -X POST -d
'{
   "model":"text-davinci-003",
   "prompt":"Escribe una breve descripción del producto para el Apple 13 pro",
   "temperature":0,
   "max_tokens":256
}'

¡Genial! Recibimos una respuesta del endpoint de completado real:

HTTP/1.1 200 OK
Content-Type: application/json
...
{
   "object":"text_completion",
   ...
   "choices":[
      {
         "text":"\n\nEl Apple 13 Pro es el portátil perfecto...",
         "index":0,
         "logprobs":null,
         "finish_reason":"stop"
      }
   ],
...
}

Crear un nuevo consumidor y agregar autenticación

Hasta ahora, nuestro endpoint de descripción de productos de la puerta de enlace de API /openai/product/desc es público y accesible por usuarios no autorizados (aunque la comunicación entre APISIX y la API de OpenAI está asegurada con la clave de API en el encabezado). En esta sección, habilitaremos la función de autenticación para evitar solicitudes no autorizadas a nuestra API.

Para hacerlo, necesitamos crear un nuevo consumidor para nuestro endpoint y agregar el plugin basic-auth a la configuración de plugin existente para que solo los usuarios permitidos puedan acceder.

El siguiente comando creará nuestro nuevo consumer1 con sus credenciales, como username1 y password1:

curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
    "username": "consumer1",
    "plugins": {
        "basic-auth": {
            "username": "username1",
            "password": "password1"
        }
    }
}'

Ahora actualizamos la configuración de plugin existente y agregamos el plugin basic-auth para que la ruta de APISIX verifique las credenciales del consumidor de API en el encabezado de la solicitud cada vez que se llamen las APIs:

curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
   "plugins":{
      "proxy-rewrite":{
         "uri":"/v1/completions",
         "host":"api.openai.com",
         "headers":{
            "Authorization":"Clave de API de OpenAI",
            "Content-Type":"application/json"
         }
      },
      "basic-auth":{}
   }
}'

Ahora solo si proporcionamos las credenciales de usuario correctas en la solicitud y accedemos al mismo endpoint, obtendremos la respuesta esperada de la API de OpenAI:

curl -i -u username1:password1 http://127.0.0.1:9080/openai/product/desc  -X POST -d \
'{
   "model":"text-davinci-003",
   "prompt":"Escribe una breve descripción del producto para el Apple 13 pro",
   "temperature":0,
   "max_tokens":256
}'

Aplicar políticas de limitación de tasa para APIs sin servidor

En esta sección, protegeremos nuestro endpoint de descripción de productos del abuso aplicando una política de limitación de tasa. En la puerta de enlace de Apache APISIX, podemos aplicar limitación de tasa para restringir el número de llamadas entrantes.

Aplicar y probar la política de limitación de tasa

Con la configuración de ruta existente, podemos aplicar una política de limitación de tasa con el plugin limit-count para proteger nuestra API del uso anormal. Limitaremos el número de llamadas a la API a 2 por 60s por consumidor de API.

Para habilitar el plugin limit-count para la ruta existente, necesitamos agregar el plugin a la lista de plugins en nuestra configuración Json:

curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
   "plugins":{
      "proxy-rewrite":{
         "uri":"/v1/completions",
         "host":"api.openai.com",
         "headers":{
            "Authorization":"Clave de API de OpenAI",
            "Content-Type":"application/json"
         }
      },
      "basic-auth":{},
      "limit-count":{
         "count":2,
         "time_window":60,
         "rejected_code":403,
         "rejected_msg":"Las solicitudes son demasiado frecuentes, por favor inténtalo de nuevo más tarde.",
         "key_type":"var",
         "key":"remote_addr"
      }
   }
}'

Apache APISIX manejará las primeras dos solicitudes como de costumbre. Sin embargo, una tercera solicitud en el mismo período devolverá un código 403 HTTP Forbidden con nuestro mensaje de error personalizado:

curl -i -u username1:password1 http://127.0.0.1:9080/openai/product/desc  -X POST -d \
'{
   "model":"text-davinci-003",
   "prompt":"Escribe una breve descripción del producto para el Apple 13 pro",
   "temperature":0,
   "max_tokens":256
}'

# Después de la primera llamada

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 752
Connection: keep-alive
X-RateLimit-Limit: 2
X-RateLimit-Remaining: 1

# Después de la segunda llamada

HTTP/1.1 403 Forbidden

{"error_msg":"Las solicitudes son demasiado frecuentes, por favor inténtalo de nuevo más tarde."}

Configurar el almacenamiento en caché para la respuesta de la API de OpenAI

El almacenamiento en caché de proxy de Apache APISIX es una característica de Apache APISIX que te permite almacenar respuestas de la API en caché y servir respuestas en caché a solicitudes posteriores. Esto puede ayudar a reducir el número de solicitudes a la API, lo que significa una reducción en el costo de uso de la API de OpenAI, mejorar el rendimiento de tu integración de API y reducir la carga en el servidor de API.

Apache APISIX proporciona un control detallado sobre el comportamiento del almacenamiento en caché, permitiéndote especificar el tiempo de expiración de la caché, las condiciones para la invalidación de la caché y otras políticas de almacenamiento en caché.

En la siguiente configuración, definiremos el plugin proxy-cache junto con otros plugins que queremos almacenar en caché solo las respuestas exitosas de descripción de productos del método POST del endpoint de completado de la API de OpenAI.

curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
   "plugins":{
      "proxy-rewrite":{
         "uri":"/v1/completions",
         "host":"api.openai.com",
         "headers":{
            "Authorization":"Clave de API de OpenAI",
            "Content-Type":"application/json"
         }
      },
      "basic-auth":{},
      "proxy-cache":{
         "cache_key":[
            "$uri",
            "-cache-id"
         ],
         "cache_method":[
            "POST"
         ],
         "cache_http_status":[
            200
         ],
         "hide_cache_headers":true
      }
   }
}'

Enviaremos múltiples solicitudes a la ruta /openai/product/desc y deberíamos recibir una respuesta HTTP 200 OK cada vez. Sin embargo, el Apisix-Cache-Status en la respuesta muestra MISS, lo que significa que la respuesta no se ha almacenado en caché cuando la solicitud llega a la ruta por primera vez. Ahora, si haces otra solicitud, verás que obtienes una respuesta en caché con el indicador de almacenamiento en caché como HIT.

La respuesta se ve así:

HTTP/1.1 200 OK
…
Apisix-Cache-Status: MISS

Cuando haces la siguiente llamada al servicio, la ruta responde a la solicitud con una respuesta en caché ya que se ha almacenado en caché en la solicitud anterior:

HTTP/1.1 200 OK
…
Apisix-Cache-Status: HIT

Resumen

La integración de Apache APISIX y la API de OpenAI implica combinar las características de Apache APISIX, una puerta de enlace de API de microservicios de alto rendimiento y de código abierto, con las capacidades avanzadas de inteligencia artificial de la API de OpenAI para mejorar la funcionalidad y el rendimiento de las aplicaciones. Con esta integración, los desarrolladores pueden aprovechar la escalabilidad y el rendimiento de Apache APISIX para gestionar microservicios mientras aprovechan las capacidades de IA de vanguardia de OpenAI para ofrecer características sofisticadas y avanzadas a sus usuarios.

En etapas posteriores, puedes desplegar tanto APISIX como el código de tiempo de ejecución de OpenAI en un servidor de aplicaciones o en cualquier nube pública para hacerlos disponibles en producción.

A lo largo de la publicación, demostramos solo algunos ejemplos de plugins de Apache APISIX que pueden usarse con la API de OpenAI. Puedes elegir los plugins que mejor se adapten a tus necesidades y personalizar tu integración de Apache APISIX y la API de OpenAI para cumplir con los requisitos específicos de tus aplicaciones.

Recursos relacionados

Contenido recomendado

Comunidad

🙋 Únete a la comunidad de Apache APISIX 🐦 Síguenos en Twitter 📝 Encuéntranos en Slack

Tags: