Por baixo do capô: O GPT além do Chat!

Por baixo do capô: O GPT além do Chat!

No meu artigo anterior: O GPT além do Chat eu mostrei uma prova de conceito de uma possibilidade que os grandes modelos de linguagem (do Inglês, LLM) nos trazem; criar interfaces conversacionais, interfaces de linguagem natural. Já estamos acostumados com formulário, páginas, botões e várias outras interfaces gráficas há anos, mas elas não precisam ser a única alternativa. Quando vemos várias aplicações Copiloto que estão surgindo (se não conhece ainda vai ler o artigo anterior que explico melhor e deixo alguns vídeos de exemplos) vemos que o caminho que as ferramentas de tecnologia estão tomando é criar interfaces conversacionais. Seja um sistema sofisticado ou um aplicativo simples, ter a possibilidade de conversar com ele ao invés de decorar parâmetros, funções, botões e telas é muito empolgado e inclusivo.

Nesse artigo eu quero detalhar um pouco de como construi a prova e conceito e, ainda melhor, como faria se fosse começar de novo agora. Eu criei a prova de conceito uns 2 meses atrás, mas o cenário de AI está em um momento tão quente que muita coisa mudou nesses 2 meses e eu poderia fazer algumas coisas muito melhor. Se ainda não leu o artigo anterior vale fazê-lo, para não ser repetitivo vou partir de onde ele terminou.

Como funciona?

A interface conversacional é baseada nem dois modelos do Azure OpenAI, Ada e ChatGPT, e segue o fluxo:

  1. O app recebe uma mensagem de texto, de uma conversa via Telegram ou Whataspp.
  2. Temos alguns prompts já pré-preenchidos, um para cada ação que o app pode tomar (inserir uma linha nova, atualizar uma linha existente, fazer uma query para buscar informações do banco de dados)
  3. Utilizando embeddings e o modelo Ada comparamos os vários prompts pré-existentes com a nova mensagem (esse tutorial ensina como fazer isso). Nesse momento o app decide qual ação vai tomar, escolhendo o prompt mais parecido com a mensagem do usuário.
  4. O app verifica no cache se existem mensagens recentes com esse mesmo interlocutor
  5. Tudo isso é agrupado em um prompt (parte pré-preenchida, mensagens recentes e a mensagem nova)
  6. Esse prompt é enviado para o ChatGPT
  7. De acordo com os exemplos no prompt pré-preenchido o ChatGPT nos retorna o código para executar a ação (um caso de Natural Language to Action, NL2A)
  8. Esse código é analisado por questões de segurança (grounding) e se for apropriado é executado no banco de dados.
  9. O resultado é enviado para o usuário. Ser for uma inserção ou atualização dos dados é apenas uma mensagem de confirmação é enviada. Se for uma consulta (query) o resultado é processado novamente pelo ChatGPT para gerar um texto descritivo ao invés de uma tabela.

Arquitetura

Os serviços que integram a solução são mostrados abaixo:

No alt text provided for this image
Arquitetura do app

O app está dividido em 4 microserviços, todos publicados em Azure Functions:

  • Receiver microservice: webhock para receber as mensagens do Whatsapp ou Telegram. Ativado por chamada HTTP.
  • Chat process microservice: executa os passos 2, 3, 4, 5 e 6 do processo (ver acima). Ativado pela chegada de novas mensagens na fila chat-ready.
  • Execute microservice: executa os passo 8 do processo (ver acima). Ativado pela chegada de novas mensagens na fila execute.
  • Send message microservice: envia de volta a mensagem para o usuário via Whatsapp ou Telegram. Ativado pela chegada de novas mensagens na fila send-message.

Além dos microserviços temos usamos os seguintes serviços do Azure:

  1. Azure SQL Database: banco de dados que armazena os dados
  2. Azure Cache for Redis: cache das mensagens recentes para manter o contexto da conversa
  3. Azure Event Hubs: serviço de mensageria para troca de mensagens entre os microserviços
  4. Azure Open AI: usamos o modelo text-embedding-ada-002 para gerar o embedding dos textos (tanto os prompts pré-populados quanto as novas mensagens) e o modelo gpt-35-turbo para gerar os códigos e as respostas

O que eu faria diferente?

Nesses dois meses muita coisa surgiu entre eles dois SDKs/Frameworks que ajudam bastante o desenvolvimento de apps como esse:

  • Semantic Kernel: Um SDK open-source desenvolvimento pela Microsoft. Já disponível em .NET, Python e com TypeScript no forne (se não me engano Java está no backlog).
  • LangChain: Framework também open-source mantido pela comunidade disponível em Python e TypeScript.

Mesmo quem não desejar adotá-los são uma boa referência definir as partes, arquitetura e componentes de um app que utilize LLM. Recomendo fortemente conhecer os dois e outros que devem surgir nos próximos meses.


Não acredito que isso funciona!

Eu também não acreditava que funcionária até fazer com minhas próprias mãos. É uma prova de conceito e sem dúvida precisa passar por diversas melhorias antes de ser levado a produção ou empregado em larga escala. Como é baseado em um modelo de IA, não deterministico, variações nas respostas são inevitáveis e isso precisa ser sempre levado em consideração. Dito isso, disponibilizei o código no GitHub para qualquer um que queira ver, colocar para rodar, testar ou até mesmo modificar. Aqui o link: marlosb/microfarmerbot (github.com)


Inteligencia Articial responsável

Assim como a Microsoft, eu acredito que todos os projetos envolvendo Inteligência Artificial devam ser conduzidos com princípios éticos firmes e colocando as pessoas em primeiro lugar. Para quem não conhece a iniciativa deixo o link do portal Responsible AI.

A criação de interfaces conversacionais utilizando IA tem potencial para ser especialmente inclusivo, uma vez que ainda existem milhões de pessoas com dificuldade de interagir com o mundo digital através das interfaces convencionais. Com certeza dentro desse grupo temos inúmeras pessoas que estão habituadas a conversar através de aplicativos de mensagens instantâneas (como Whatsapp e Telegram). Possibilitar que essas pessoas interajam com o restante do mundo digital dessa mesma forma abrirá uma enorme miríade de novas possibilidades.

Daniel Takao

Data and AI | Account Executive @Databricks | ex-Oracle | ex-Microsoft

1 a

Interessante como as conversas atuais em torno de tecnologia tem se manifestado cada vez mais em casos de uso reais e utilizáveis. O uso de dados, ferramentas e IA estão por trás, mas estamos aprendendo a traduzir isso na vida real! Obrigado por compartilhar Marlão! Aprendi no primeiro artigo com o exemplo do cultivo de microverdes até este aqui. Abração

Entre para ver ou adicionar um comentário

Outras pessoas também visualizaram

Conferir tópicos