Potencializando Capacidades de AI com Apache APISIX e OpenAI API
February 7, 2023
Inteligência Artificial (IA) revolucionou a forma como interagimos com a tecnologia e se tornou uma parte integrante das aplicações modernas. A OpenAI API fornece aos desenvolvedores capacidades avançadas de IA, permitindo que eles construam aplicações de IA avançadas com facilidade.
No entanto, à medida que o uso da IA cresce, também cresce a necessidade de integrações de API escaláveis, performáticas e seguras. É aqui que o Apache APISIX entra. Apache APISIX é um gateway de API de alto desempenho e código aberto que oferece recursos avançados para gerenciar e escalar integrações de API.
Neste post do blog, exploraremos os benefícios de integrar o Apache APISIX com a OpenAI API e como você pode usar o Apache APISIX para criar uma integração de IA mais escalável, performática e segura. Desde o cache de proxy até recursos de segurança, cobriremos tudo o que você precisa saber para começar com a integração do Apache APISIX e da OpenAI API. Seja você um desenvolvedor de IA ou um profissional de DevOps, este post do blog é o seu guia completo para criar uma integração de IA poderosa e econômica.
Objetivos de aprendizagem
Você aprenderá o seguinte ao longo do artigo:
- O que são a OpenAI API e o Apache APISIX?
- Os benefícios de usar o Apache APISIX com a OpenAI API.
- Vários casos de uso de plugins do Apache APISIX para aprimorar a OpenAI API.
- Como criar uma nova Rota no APISIX para a OpenAI API.
- Como adicionar o endpoint da OpenAI API como um Upstream para a rota.
- Como configurar autenticação, limitação de taxa e cache para a rota conforme necessário.
- Como testar a rota para garantir que as solicitações estão sendo encaminhadas corretamente para a OpenAI API.
O que é a OpenAI API?
OpenAI é uma plataforma de ponta para criar e implantar modelos avançados de inteligência artificial. Esses modelos podem ser usados para uma variedade de tarefas, como processamento de linguagem natural, reconhecimento de imagem e análise de sentimentos. Um dos principais benefícios da OpenAI é que ela fornece uma API que os desenvolvedores podem usar para acessar esses modelos e incorporá-los em suas aplicações.
A OpenAI API é uma plataforma baseada em nuvem que fornece acesso aos modelos de IA da OpenAI, incluindo o ChatGPT. A API permite que os desenvolvedores integrem capacidades de IA em suas aplicações.
ChatGPT é apenas um dos modelos de IA disponíveis através da OpenAI API, e é particularmente adequado para casos de uso que exigem capacidades de processamento de linguagem natural e geração de texto. Por exemplo, o ChatGPT pode ser usado para gerar respostas de texto em um chatbot, fornecer sugestões de completamento de texto, completamento de código ou responder perguntas em uma interface conversacional.
O que é o Apache APISIX?
Apache APISIX é uma solução de gerenciamento de tráfego de API nativa da nuvem e de código aberto que oferece recursos de API Gateway para criar APIs RESTful escaláveis, seguras e altamente disponíveis.
Ao usar o API Gateway com a OpenAI API, você pode criar e implantar APIs escaláveis, seguras e de alto desempenho que acessam os modelos da OpenAI. Isso permitirá que você incorpore o poder da OpenAI em suas aplicações e forneça uma ótima experiência para seus usuários.
Quais são os benefícios de usar o Apache APISIX com a OpenAI API?
Há vários benefícios em usar o Apache APISIX com a OpenAI API:
-
Escalabilidade: O Apache APISIX fornece uma maneira fácil de gerenciar e escalar a OpenAI API, permitindo que você lide com o aumento de tráfego e demandas de uso.
-
Desempenho: O Apache APISIX pode ajudar a melhorar o desempenho das solicitações da OpenAI API armazenando em cache as respostas e reduzindo a latência. Segurança: O Apache APISIX fornece recursos de segurança, como criptografia e autenticação, tornando fácil proteger o acesso à OpenAI API.
-
Flexibilidade: O Apache APISIX fornece uma maneira flexível de gerenciar e controlar o acesso à OpenAI API, permitindo que você personalize e configure sua integração conforme necessário.
-
Monitoramento e Análise: O Apache APISIX fornece monitoramento e análise detalhados, permitindo que você acompanhe e otimize o desempenho de sua integração com a OpenAI API.
Plugins do Apache APISIX para aprimorar a OpenAI API
Há vários plugins do Apache APISIX que podem ser usados para aprimorar a integração com a OpenAI API. Alguns dos plugins que você pode usar com a OpenAI API incluem:
- limitação de taxa: Para limitar o número de solicitações de API e evitar o uso excessivo da OpenAI API.
- autenticação: Para proteger o acesso à OpenAI API implementando mecanismos de autenticação e autorização.
- controle de tráfego: Para controlar o fluxo de tráfego de API e garantir desempenho e estabilidade consistentes da OpenAI API.
- observabilidade: Para monitorar e registrar solicitações e respostas de API, fornecendo visibilidade sobre o uso e o desempenho da OpenAI API.
- cache: Para armazenar em cache as respostas da API e reduzir o número de solicitações de API, melhorando o desempenho e reduzindo o custo de uso da OpenAI API.
- transformação: Para modificar solicitações e respostas de API, transformando dados de um formato para outro, como JSON para XML.
Gerenciando APIs da OpenAI com o Apache APISIX Demo
Com conhecimento teórico suficiente em mente, agora podemos entrar em uma sessão prática. Neste exemplo, o Apache APISIX é usado para criar um gateway de API simples que acessa a OpenAI API e gerencia o tráfego criando uma rota, upstream e habilitando alguns plugins. Vamos interagir com o endpoint de Completamento da OpenAI API para criar um gerador de descrição de produtos que gera a descrição do produto de forma eficiente e precisa.
Por exemplo, uma solicitação típica ao Gateway de API será semelhante à abaixo:
curl http://127.0.0.1:9080/openai/product/desc -X POST -d
'{
"model":"text-davinci-003",
"prompt":"Write a brief product description for Apple 13 pro",
"temperature":0,
"max_tokens":256
}'
E, obteremos como saída:
{
"object":"text_completion",
"model":"text-davinci-003",
"choices":[
{
"text":"\n\nThe Apple 13 Pro is the perfect laptop for those who need a powerful and reliable machine.
It features a 13-inch Retina display with True Tone technology, a powerful 8th-generation Intel Core i5 processor, 8GB of RAM, and a 256GB SSD for storage.
It also has a Touch Bar and Touch ID for added security and convenience. With up to 10 hours of battery life, you can stay productive all day long.
The Apple 13 Pro is the perfect laptop for those who need a powerful and reliable machine.",
"index":0,
"finish_reason":"stop"
}
],
"usage":{
"prompt_tokens":9,
"completion_tokens":109,
"total_tokens":118
}
}
Pré-requisitos
- Deve estar familiarizado com os conceitos fundamentais do modelo de completamento da OpenAI API.
- Criar uma Chave de API da OpenAI: Para acessar a OpenAI API, você precisará criar uma Chave de API. Você pode fazer isso fazendo login no site da OpenAI e navegando até a página de gerenciamento de Chaves de API.
- Docker instalado em sua máquina para executar o APISIX.
- Conhecimento básico sobre alguns conceitos principais do APISIX, como Rota, Upstream e Plugin.
Configuração do projeto
A primeira coisa é clonar o repositório do projeto apisix-docker do GitHub:
git clone https://github.com/apache/apisix-docker.git
Abra a pasta do projeto no seu editor de código favorito. O tutorial utiliza o VS Code.
Instalar e executar o Apache APISIX
Para executar o Apache APISIX, você pode seguir estes passos:
Abra uma nova janela do terminal e execute o comando docker compose up
na pasta raiz do projeto:
docker compose up -d
O comando acima executará o Apache APISIX e o etcd juntos com o Docker.
Instalamos o APISIX usando o Docker nesta demonstração. No entanto, há outras opções para instalá-lo no guia de instalação.
Criar um Upstream para a OpenAI API
Uma vez que a configuração esteja completa, criaremos um objeto Upstream no APISIX usando sua API de Administração. "Upstream" no APISIX refere-se aos servidores de backend que são responsáveis por servir os dados reais da solicitação.
No nosso caso, definimos o servidor de API upstream em api.openai.com
com um único nó e o esquema https
usado ao se comunicar de forma segura com o 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": "Add the OpenAI API domain as the upstream",
"type": "roundrobin",
"scheme": "https",
"nodes": {
"api.openai.com:443": 1
}
}'
Criar uma nova configuração de plugin
Agora criamos uma nova configuração de plugin com o plugin proxy-rewrite habilitado.
O plugin proxy é usado para redefinir as solicitações para o endpoint de completamento da OpenAI API. A configuração do plugin inclui opções para definir a URL do endpoint da API, passar a chave da OpenAI API como um cabeçalho e com o cabeçalho Content-Type
definido como 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":"OpenAI API Key",
"Content-Type":"application/json"
}
}
}
}'
Configurar uma Rota para o endpoint de completamento da OpenAI
No próximo passo, configuramos uma nova Rota no APISIX para lidar com solicitações POST
com o novo caminho personalizado do Gateway de API /openai/product/desc
e damos referências ao upstream e à configuração de plugin criados nas etapas anteriores por seus IDs únicos.
curl -i http://127.0.0.1:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"name":"OpenAI API completion route",
"desc":"Create a new route in APISIX for the OpenAI API completion endpoint",
"methods":[
"POST"
],
"uri":"/openai/product/desc",
"upstream_id":"1",
"plugin_config_id":1
}'
Além disso, a rota é configurada com retentativas, um tempo limite e um tempo limite de keepalive para garantir uma comunicação robusta e resiliente com a OpenAI API.
Testar com uma solicitação Curl
Para testar a API, você pode fazer uma solicitação POST para o endpoint /openai/product/desc
usando uma ferramenta como cURL ou Postman. O Gateway de API encaminhará a solicitação para o endpoint de completamento da OpenAI API e retornará os resultados com sucesso.
curl http://127.0.0.1:9080/openai/product/desc -X POST -d
'{
"model":"text-davinci-003",
"prompt":"Write a brief product description for Apple 13 pro",
"temperature":0,
"max_tokens":256
}'
Ótimo! Recebemos uma resposta do endpoint de completamento real:
HTTP/1.1 200 OK
Content-Type: application/json
...
{
"object":"text_completion",
...
"choices":[
{
"text":"\n\nThe Apple 13 Pro is the perfect laptop...",
"index":0,
"logprobs":null,
"finish_reason":"stop"
}
],
...
}
Criar um novo consumidor e adicionar autenticação
Até agora, nosso endpoint de descrição de produtos do Gateway de API /openai/product/desc
é público e acessível por usuários não autorizados (embora a comunicação entre o APISIX e a OpenAI API seja protegida com a Chave de API no cabeçalho). Nesta seção, habilitaremos o recurso de autenticação para impedir solicitações não autorizadas à nossa API.
Para fazer isso, precisamos criar um novo consumidor para nosso endpoint e adicionar o plugin basic-auth para a configuração de plugin existente, de modo que apenas usuários permitidos possam acessá-los.
O comando abaixo criará nosso novo consumer1
com suas credenciais, como username1
e 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"
}
}
}'
Agora atualizamos a configuração de plugin existente e adicionamos o plugin basic-auth
para permitir que a rota do APISIX verifique o cabeçalho da solicitação com as credenciais do consumidor da API cada vez que as APIs são chamadas:
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":"OpenAI API Key",
"Content-Type":"application/json"
}
},
"basic-auth":{}
}
}'
Agora, apenas se fornecermos as credenciais corretas do usuário na solicitação e acessarmos o mesmo endpoint, obteremos a resposta esperada da OpenAI API:
curl -i -u username1:password1 http://127.0.0.1:9080/openai/product/desc -X POST -d \
'{
"model":"text-davinci-003",
"prompt":"Write a brief product description for Apple 13 pro",
"temperature":0,
"max_tokens":256
}'
Aplicar políticas de limitação de taxa para APIs serverless
Nesta seção, protegeremos nosso endpoint de descrição de produtos contra abusos aplicando uma política de limitação de taxa. No Gateway Apache APISIX, podemos aplicar a limitação de taxa para restringir o número de chamadas recebidas.
Aplicar e testar a política de limitação de taxa
Com a configuração de rota existente, podemos aplicar uma política de limitação de taxa com o plugin limit-count para proteger nossa API contra uso anormal. Limitaremos o número de chamadas de API para 2 por 60s por consumidor de API.
Para habilitar o plugin limit-count
para a rota existente, precisamos adicionar o plugin à lista de plugins em nossa configuração de plugin 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":"OpenAI API Key",
"Content-Type":"application/json"
}
},
"basic-auth":{},
"limit-count":{
"count":2,
"time_window":60,
"rejected_code":403,
"rejected_msg":"Requests are too frequent, please try again later.",
"key_type":"var",
"key":"remote_addr"
}
}
}'
O Apache APISIX lidará com as duas primeiras solicitações normalmente. No entanto, uma terceira solicitação no mesmo período retornará um código 403 HTTP Forbidden
com nossa mensagem de erro personalizada:
curl -i -u username1:password1 http://127.0.0.1:9080/openai/product/desc -X POST -d \
'{
"model":"text-davinci-003",
"prompt":"Write a brief product description for Apple 13 pro",
"temperature":0,
"max_tokens":256
}'
# Após a primeira chamada
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 752
Connection: keep-alive
X-RateLimit-Limit: 2
X-RateLimit-Remaining: 1
# Após a segunda chamada
HTTP/1.1 403 Forbidden
{"error_msg":"Requests are too frequent, please try again later."}
Configurar cache para a resposta da OpenAI API
O cache de proxy do Apache APISIX é um recurso do Apache APISIX que permite armazenar em cache as respostas da API e servir respostas em cache para solicitações subsequentes. Isso pode ajudar a reduzir o número de solicitações de API, o que significa a redução do custo de uso da OpenAI API, melhorar o desempenho de sua integração de API e reduzir a carga no servidor de API.
O Apache APISIX fornece controle refinado sobre o comportamento do cache, permitindo que você especifique o tempo de expiração do cache, as condições para invalidação do cache e outras políticas de cache.
Na configuração abaixo, definiremos o plugin proxy-cache
junto com outros plugins que queremos armazenar em cache apenas as respostas bem-sucedidas de descrição de produtos do método POST
do endpoint de completamento da OpenAI API.
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":"OpenAI API Key",
"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 várias solicitações para o caminho /openai/product/desc
e devemos receber uma resposta HTTP 200 OK
cada vez. No entanto, o Apisix-Cache-Status
na resposta mostra MISS
, o que significa que a resposta ainda não foi armazenada em cache quando a solicitação atinge a rota pela primeira vez. Agora, se você fizer outra solicitação, verá que recebe uma resposta em cache com o indicador de cache como HIT
.
A resposta será semelhante a:
HTTP/1.1 200 OK
…
Apisix-Cache-Status: MISS
Quando você fizer a próxima chamada para o serviço, a rota responderá à solicitação com uma resposta em cache, pois ela já foi armazenada em cache na solicitação anterior:
HTTP/1.1 200 OK
…
Apisix-Cache-Status: HIT
Resumo
A integração do Apache APISIX e da OpenAI API envolve combinar os recursos do Apache APISIX, um gateway de API de microsserviços de alto desempenho e código aberto, com as capacidades avançadas de inteligência artificial da OpenAI API para aprimorar a funcionalidade e o desempenho das aplicações. Com essa integração, os desenvolvedores podem aproveitar a escalabilidade e o desempenho do Apache APISIX para gerenciar microsserviços enquanto utilizam as capacidades de IA de ponta da OpenAI para fornecer recursos sofisticados e avançados aos seus usuários.
Em estágios posteriores, você pode implantar tanto o código de execução do APISIX quanto da OpenAI em um servidor de aplicações ou em qualquer nuvem pública para disponibilizá-los em produção.
Ao longo do post, demonstramos apenas alguns exemplos de plugins do Apache APISIX que podem ser usados com a OpenAI API. Você pode escolher os plugins que melhor atendem às suas necessidades e personalizar sua integração do Apache APISIX e da OpenAI API para atender aos requisitos específicos de suas aplicações.
Recursos relacionados
Conteúdo recomendado
Comunidade
🙋 Junte-se à Comunidade Apache APISIX 🐦 Siga-nos no Twitter 📝 Encontre-nos no Slack