Como Construir uma Ação GPT Personalizada para Comunicar com o Seu Hardware

Ari Mahpour
|  Criada: Marco 25, 2024  |  Atualizada: Julho 1, 2024
Como Construir uma Ação GPT Personalizada para Comunicar com o Seu Hardware

Nos primeiros dias do ChatGPT (que na verdade não foi há muito tempo), a OpenAI evoluiu com diferentes maneiras de acessar a internet externa por meio do uso de seu LLM. Com o Code Interpreter, era possível usar Curl em um site e extrair o conteúdo dele. Complementos personalizados também permitiam acessar sites externos, mas exigiam permissões especiais da OpenAI. A OpenAI também adicionou capacidades de navegação com o Microsoft Bing que podiam acessar a internet também. No entanto, todas essas opções não se mostraram muito sustentáveis para o crescimento e a demanda que usuários e desenvolvedores exigiam dos sistemas da OpenAI. Assim, a OpenAI recentemente apresentou uma nova plataforma chamada GPT Actions. GPT Actions permitem que você crie “GPTs” personalizados que podem se conectar a diferentes servidores para fornecer motores habilitados para IA em cima de um serviço web existente.

Então, o que tudo isso significa para um engenheiro de hardware que finge entender o que é IA? Como soa para você o hardware controlado por IA? Soa ominoso, potencialmente perigoso e incrivelmente excitante, tudo ao mesmo tempo! Neste artigo, vamos mergulhar em como configurar um servidor web que se conectará à sua GPT Action. Vamos até ver como habilitar o ChatGPT para controlar os IOs no seu Raspberry Pi, abrindo a capacidade para muitos novos e excitantes projetos impulsionados por IA que o engenheiro médio nunca teve acesso... até agora.

Como Funciona

Antes de mergulhar no código, é importante notar que este é um campo em evolução e está mudando rapidamente. Também é uma tecnologia dependente da OpenAI e requer uma assinatura da versão paga do ChatGPT. É quase certo que os concorrentes estarão lançando suas versões de “GPT Actions”, mas, no momento de escrever este artigo, GPT Actions (na minha opinião) era a maneira mais simples de conectar um Modelo de Linguagem de Grande Escala (LLM) totalmente funcional ao seu serviço web.

O conceito por trás de um serviço GPT Action é bastante direto. Apontamos nosso GPT personalizado para um webservice, dizemos quais são as entradas e saídas, e deixamos rodar. No entanto, a implementação provou ser muito mais complicada do que eu imaginava (o que foi o impulso para escrever este artigo). Aqui está um diagrama de como o serviço funciona:

Figura 1: Interações do Servidor

Figura 1: Interações do Servidor

Como você pode ver, fornecemos à OpenAI um webservice e um documento de interface (OpenAPI) que nos diz como interagir com nosso hardware. Começaremos com um exemplo muito trivial que não envolve hardware e depois passaremos para um exemplo simples de alternância de LED.

Configuração de Servidor Seguro

Para engenheiros de hardware que, na melhor das hipóteses, estão familiarizados com software embarcado, esta seção pode não ser tão trivial para eles quanto seria para alguém que trabalha com TI ou Infraestrutura de Cloud. Como engenheiro Elétrico e de Software, configurar um servidor totalmente criptografado com SSL foi um pouco complicado para mim - principalmente porque existem muitas maneiras de fazer isso. Infelizmente, isso é um pré-requisito da OpenAI, então vamos ter que enfrentar isso. Se você já tem uma maneira segura de hospedar um servidor web (por exemplo, terminação TLS no seu balanceador de carga) você pode pular esta seção. Como eu, a maioria das pessoas lendo este artigo vai querer experimentar com seu servidor doméstico. Tenha em mente que você ainda precisa abrir as portas 80 e 443 para o mundo externo através das configurações do seu roteador. Instruções sobre como configurar o firewall do seu roteador e o encaminhamento de porta estão fora do escopo deste artigo, mas existem muitos recursos online que você pode encontrar para ajudá-lo com isso.

Para começar, precisamos solicitar um certificado SSL. Isso pode ser feito usando serviços pagos (por exemplo, Cloudfare), serviços de terceiros gratuitos (por exemplo, ZeroSSL), ou um mecanismo direto usando Let’s Encrypt. Neste tutorial, vamos usar o Let’s Encrypt via certbot. Você também precisará de um nome de domínio que aponte para o endereço IP do seu servidor. Você pode comprar um ou obter um nome DNS dinâmico usando Cloudfare (pago) ou No-IP (gratuito). Tenha em mente que encaminhar seu nome DNS dinâmico para o seu IP requer um tipo de registro “A” e não redirecionamento de URL.

Para solicitar um certificado SSL de 90 dias do Let’s Encrypt, precisaremos utilizar o Certbot. Eles têm executáveis que podem ser rodados em qualquer sistema operacional. Vamos executar o comando mais simples para adquirir os certificados. Aqui está o comando para adquirir o certificado:

sudo certbot certonly --standalone --agree-tos -v --preferred-challenges http -d seu_dominio.com

Se você estiver no Windows, não usará a parte do sudo. Certifique-se de substituir seu_dominio.com pelo nome de domínio comprado ou pelo que você recebeu do serviço de DNS dinâmico (por exemplo, No-IP). Uma pasta contendo uma série de arquivos de certificado será gerada. Neste ponto, é hora de clonar o template do repositório: https://gitlab.com/ai-examples/gpt-actions-webserver/. Mova a pasta gerada pelo certbot para o repositório uma vez que você o tenha clonado. Para fazer os redirecionamentos SSL funcionarem corretamente (ou seja, garantir que todo o tráfego seja criptografado), vamos querer configurar o Nginx. Crie uma pasta dentro do seu repositório chamada nginx e um novo arquivo chamado default.conf. Usando este template, substitua seu_dominio.com pelo nome de domínio que foi usado quando você solicitou seu certificado SSL usando o certbot:


server {
    listen 80;
    server_name seu_dominio.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name seu_dominio.com;
 
    ssl_certificate /etc/ssl/certs/fullchain.pem;
    ssl_certificate_key /etc/ssl/private/privkey.pem;
 
    location / {
        proxy_pass http://web:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Executando a Aplicação

Neste ponto, você deve ter a criptografia SSL corretamente configurada e pronta para uso. Agora vamos focar na aplicação web básica que pode se comunicar com nosso GPT personalizado. Você pode encontrar todo o código no repositório, então vamos apenas destacar como executá-lo em vez dos detalhes técnicos do que compõe a aplicação.

Dada a natureza de um serviço web criptografado por SSL, eu abstraí a aplicação web da própria criptografia SSL. Para fazer isso, precisamos do Nginx, que redireciona o tráfego e serve os certificados que recebemos do Let’s Encrypt via Certbot. Para encapsular tudo em um pacote compacto, eu o envolvi em um Docker Compose. Isso significa que você precisará do Docker para executar este exemplo. É um pouco complicado e tedioso para configurar inicialmente, mas é para onde o software está se movendo nos dias de hoje, portanto, um projeto como este é um ótimo lugar para se familiarizar com o Docker. Como uma nota à parte, todas as descrições e instruções foram colocadas no arquivo README.md dentro do repositório. Contanto que você tenha seguido os passos anteriores acima, você deve ser capaz de executar docker compose up e todos os componentes (ou seja, Nginx e a aplicação web) devem ser construídos e começar a rodar. Lembre-se de que esta aplicação é apenas um simples exemplo do tipo "Hello World" e pode ser executado de qualquer lugar.

Após executar o comando docker compose up, você deve ver uma saída como esta:

Figura 2: Saída do Terminal

Figura 2: Saída do Terminal

Você deve testar sua aplicação navegando até http://localhost:8000. Você verá uma saída de teste que diz {"status":"OK"}. Você também deve ver o mesmo resultado navegando até http://seu_dominio.com onde “seu_dominio.com” é o nome do domínio que você configurou na etapa anterior. Para realmente validar que as configurações do seu roteador e domínio estão corretas, você deve testar isso fora da sua rede (por exemplo, no seu celular com o WiFi desligado).

Configurando a Ação GPT

Agora que validamos que nosso servidor web básico está funcionando, precisamos conectá-lo à nossa Ação GPT Personalizada. A OpenAI exige um documento chamado OpenAPI, que informa aos servidores deles como interagir com os seus. Já existe um openapi.json que você pode copiar e colar diretamente nas configurações de Ações GPT. Para acessar suas configurações, clique no seu nome no canto inferior esquerdo e depois clique em “Meus GPTs”:

Figura 3: Configurações do ChatGPT

Figura 3: Configurações do ChatGPT

Clique em Criar um GPT, depois em Criar nova Ação na parte inferior:

Figura 4: Configurações de Configuração de Ação GPT

Figura 4: Configurações de Configuração de Ação GPT

Depois disso, você pode copiar e colar o conteúdo do openapi.json na caixa de Esquema:

Figura 5: Configurações de Esquema de Ação GPT

Figura 5: Configurações de Esquema de Ação GPT

Você precisará substituir “https://your_doman.com” pelo endereço do seu domínio real. Nesse ponto, alguns botões de teste aparecerão. Supondo que seu servidor web esteja funcionando, você pode clicar em um botão de teste e ver se a OpenAI consegue se comunicar com seu servidor web. Se tudo estiver correto, então você pode salvar/publicar o GPT (no canto superior direito) e começar a brincar com ele. Certifique-se de publicar isso apenas para você, já que isso está se conectando a uma rede privada (presumivelmente em casa).

Executando o GPT

Se você conseguiu passar por todas as seções acima e testou com sucesso sua ação GPT, parabéns! Agora é hora de realmente testar tudo. Eu iniciei uma nova conversa no ChatGPT, mas desta vez usando meu GPT Personalizado, que chamo de “Controlador de Instrumento”. Para simplificar, pedi o status do meu servidor:

Figura 6: Status do Servidor usando Ações GPT

Figura 6: Status do Servidor usando Ações GPT

E meus logs do Nginx (da linha de comando onde executei o Docker Compose) confirmam o tráfego também:

```plaintext "GET / HTTP/1.1" 200 15 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatível; ChatGPT-User/1.0; +https://openai.com/bot" "-" ```

Também temos um gerador de números aleatórios disponível:

Figura 7: Obtendo Números Aleatórios do Servidor usando Ações do GPT

Figura 7: Obtendo Números Aleatórios do Servidor usando Ações do GPT

E o tráfego do Nginx também confirma que recebemos 5 solicitações do nosso servidor.

Alternância de LED no Raspberry Pi

Neste ponto, demonstramos como realizar ações de software usando o GPT, mas e quanto a controlar hardware? Neste artigo, já abordamos bastante, então vamos apenas dar uma olhada em um exemplo básico de LED piscante.

Para começar, execute o mesmo processo acima em um Raspberry Pi. Observe que você pode usar o mesmo certificado SSL e código de repositório que usou no seu computador doméstico (assumindo que todos os dispositivos estejam na mesma rede). Uma vez que tudo esteja pronto para funcionar, execute o seguinte comando:

BUILD_TYPE=rpi docker compose up --build

Este exemplo agora contém a capacidade de alternar um LED onboard no pino 26 (GPIO7). Você pode modificar o número do pino em app/RPiDemoApp.py. Você também precisará atualizar o esquema OpenAPI do GPT personalizado com o esquema opeanapi-rpi.json fornecido no repositório também (já que adicionamos uma nova função).

Neste ponto, você deve ser capaz de alternar o LED usando a interface de chat com ChatGPT:

Figura 8: Alternando um LED no Raspberry Pi usando Ações do GPT

Figura 8: Alternando um LED no Raspberry Pi usando Ações do GPT

Parabéns por ter chegado até aqui! Este foi um tutorial complexo e, sem dúvida, você terá perguntas e/ou desafios. O ChatGPT está fazendo mudanças nesta funcionalidade diariamente e encontrando maneiras mais simples de guiar os iniciantes pelo processo. Fique atento à documentação atualizada e até mesmo a bots assistentes de IA que podem ajudá-lo durante o processo.

Conclusão

Neste artigo, examinamos as Ações GPT personalizadas, como criá-las e construir toda a estrutura ao redor para servir um serviço web criptografado por SSL a partir do nosso computador doméstico. Além de construir um serviço web básico, conseguimos estender esse código para controlar um LED a partir do Raspberry Pi. Isso abre a possibilidade de controlar e comunicar com hardware muito mais complexo enquanto utilizamos "IA no loop" (uma variação de "hardware no loop"). Em artigos futuros, exploraremos tais tópicos e conceitos, aproveitando este exemplo como fundação.

Sobre o autor

Sobre o autor

Ari is an engineer with broad experience in designing, manufacturing, testing, and integrating electrical, mechanical, and software systems. He is passionate about bringing design, verification, and test engineers together to work as a cohesive unit.

Recursos relacionados

Documentação técnica relacionada

Retornar a página inicial
Thank you, you are now subscribed to updates.