paint-brush
Como criar um aplicativo LLM com o Google Geminipor@alvinslee
2,462 leituras
2,462 leituras

Como criar um aplicativo LLM com o Google Gemini

por Alvin Lee9m2024/06/05
Read on Terminal Reader

Muito longo; Para ler

Um tutorial sobre como construir um aplicativo LLM usando a API Google Gemini e, em seguida, implantar esse aplicativo no Heroku.
featured image - Como criar um aplicativo LLM com o Google Gemini
Alvin Lee HackerNoon profile picture

Parece que existem infinitas possibilidades de inovação com LLMs. Se você é como eu, já usou aplicativos e ferramentas GenAI – como ChatGPT integrado ao Expedia, Copilot para escrita de código ou até mesmo DALL-E para geração de imagens. Mas, como tecnólogo, quero fazer mais do que apenas usar ferramentas baseadas em LLM. Eu quero construir o meu próprio.


Eu disse ao DALL-E para “Gerar uma aquarela de um programador de computador pensando em todas as coisas que ele poderia construir com LLMs”. Sim, isso é muito preciso.


Com todas as novas tecnologias, tornar-se um construtor significa começar de forma simples. É assim para qualquer nova linguagem de programação que estou aprendendo ou para qualquer novo framework que estou testando. Construir com LLMs não é diferente. Então, é isso que vou abordar aqui. Vou construir uma API rápida e suja que interaja com o Google Gemini, efetivamente me dando um pequeno assistente de chatbot próprio.


Aqui está o que faremos:


  1. Apresente brevemente o Google Gemini.
  2. Crie um aplicativo Node.js simples.
  3. Implante o aplicativo no Heroku.
  4. Teste-o.

O que é o Google Gêmeos?

A maioria dos consumidores comuns conhece o ChatGPT, que é baseado no GPT-4 LLM. Mas quando se trata de LLMs, o GPT-4 não é o único jogo disponível. Há também o Google Gemini (anteriormente conhecido como Bard). Na maioria dos benchmarks de desempenho (como problemas de raciocínio multidisciplinares de nível universitário ou geração de código Python), o Gemini supera o GPT-4.


O que Gêmeos diz sobre si mesmo?


Como desenvolvedores, podemos acessar o Gemini por meio da API Gemini no Google AI Studio . Também existem SDKs disponíveis para Python , JavaScript , Swift e Android .


Tudo bem. Vamos à construção.

Crie o aplicativo Node.js

Nosso aplicativo Node.js será um servidor Express API simples que funciona como um chatbot Gemini. Ele escutará em dois endpoints. Primeiro, uma solicitação POST para /chat (que incluirá uma carga JSON com um atributo message ) enviará a mensagem ao Gemini e retornará a resposta. Nosso aplicativo manterá uma conversa por chat com Gemini. Isso transforma nosso chatbot em um assistente útil que pode guardar anotações para nós.


Em segundo lugar, se enviarmos uma solicitação POST para /reset , isso redefinirá a conversa do chat para começar do zero, apagando efetivamente a memória de Gemini de interações anteriores conosco.


Se quiser pular este passo a passo do código, você pode ver todo o código em meu repositório GitHub aqui .

Inicialize o aplicativo

Para começar, inicializamos nosso aplicativo Node.js e instalamos dependências.


 ~/project$ npm init -y && npm pkg set type="module" ~/project$ npm install @google/generative-ai dotenv express


Em seguida, adicionamos isso aos scripts em nosso arquivo package.json :


 "scripts": { "start": "node index.js" },


O arquivo index.js

Nosso aplicativo consiste em um arquivo e é bastante simples. Examinaremos uma seção de cada vez.


Primeiro, importamos todos os pacotes que usaremos. Em seguida, inicializamos o SDK do Google AI. Usaremos o modelo Gemini-pro. Por último, chamamos startChat() , que cria uma nova instância ChatSession para o que o Google chama de conversa multiturno .


 import 'dotenv/config'; import express from 'express'; import { GoogleGenerativeAI } from '@google/generative-ai'; const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY); const model = genAI.getGenerativeModel({ model: "gemini-pro"}); let chat = model.startChat();


A seguir, instanciamos um novo aplicativo Express, que é nosso servidor API.


 const app = express(); app.use(express.json())


Em seguida, configuramos nosso ouvinte para solicitações POST para o endpoint /chat . Garantimos que o corpo da carga JSON inclua uma message . Usamos nosso objeto chat para enviar essa mensagem ao Gemini. Em seguida, respondemos ao chamador da API com o texto de resposta do Gemini.


 app.post('/chat', async (req, res) => { if ((typeof req.body.message) === 'undefined' || !req.body.message.length) { res.status(400).send('"message" missing in request body'); return; } const result = await chat.sendMessage(req.body.message); const response = await result.response; res.status(200).send(response.text()); })


Tenha em mente que, ao usar ChatSession , há um histórico armazenado e em execução de nossa interação com o Gemini em todas as chamadas de API. Dar a Gêmeos uma “memória” de nossa conversa é útil para contextualizar.


Mas e se você quiser que Gêmeos recomece completamente e esqueça todo o contexto anterior? Para isso, temos o endpoint /reset . Isso simplesmente inicia uma nova ChatSession .


 app.post('/reset', async (req, res) => { chat = model.startChat(); res.status(200).send('OK'); })


Finalmente, inicializamos nosso servidor para começar a ouvir.


 const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server is running on port ${PORT}`) })


Como observação lateral, todo este projeto é apenas uma mini demonstração. Não foi feito para ser usado em produção! Da maneira que projetei agora (sem autenticação), qualquer pessoa com a URL pode enviar uma solicitação para /chat para /reset . Em uma configuração de produção, teríamos a autenticação adequada e cada usuário teria sua própria instância de conversa com Gemini que ninguém mais poderia manipular.

Obtendo uma chave de API Gemini

Neste ponto, estamos quase prontos para começar. A última coisa que precisamos é de uma chave de API para acessar a API Gemini. Para obter uma chave de API, comece inscrevendo-se em uma conta Google AI for Developers .


Depois de fazer login, selecione Iniciar Google AI Studio para iniciar um novo projeto do Google Gemini.



Dentro do projeto, clique em Obter chave de API para navegar até a página de chaves de API. Em seguida, clique em Criar chave API para gerar uma chave. Copie o valor.


No seu projeto, copie o arquivo chamado .env.template como um novo arquivo chamado .env . Cole o valor da sua chave API Gemini. Seu arquivo .env deve ser semelhante a este:


 GEMINI_API_KEY=ABCDEFGH0123456789_JJJ

Teste nosso aplicativo localmente

Com tudo pronto, podemos ativar nosso servidor localmente para testá-lo.


 ~/project$ npm start > [email protected] start > node index.js Server is running on port 3000


Em um terminal diferente, podemos enviar algumas solicitações curl:


 $ curl -X POST -H 'content-type:application/json' \ --data '{"message":"I would like to bake a shepherds pie to feed 8 \ people. As you come up with a recipe, please keep a grocery \ list for me with all of the ingredients that I would need to \ purchase."}' \ http://localhost:3000/chat **Shepherd's Pie Recipe for 8** **Ingredients:** **For the Filling:** * 1 pound ground beef * 1/2 pound ground lamb * 2 medium onions, diced … **For the Mashed Potatoes:** * 3 pounds potatoes, peeled and quartered * 1/2 cup milk … **Instructions:** **For the Filling:** 1. Heat a large skillet over medium heat. Add the ground beef and lamb and cook until browned. … $ curl -X POST -H 'content-type:application/json' \ --data '{"message":"I also need to buy fresh basil, for a different dish (not the shepherds pie). Add that to my grocery list \ too."}' \ http://localhost:3000/chat **Updated Grocery List for Shepherd's Pie for 8, and Fresh Basil:** * 1 pound ground beef * 1/2 pound ground lamb * 2 medium onions * 2 carrots * 2 celery stalks * 1 bag frozen peas * 1 bag frozen corn * 1 tablespoon Worcestershire sauce * 1 teaspoon dried thyme * 1 cup beef broth * 1/4 cup tomato paste * 3 pounds potatoes * 1/2 cup milk * 1/4 cup butter * **Fresh basil** $ curl -X POST -H 'content-type:application/json' \ --data '{"message":"What items on my grocery list can I find in the \ produce section?"}' \ http://localhost:3000/chat The following items on your grocery list can be found in the produce section: * Onions * Carrots * Celery * Potatoes * Fresh basil $ curl -X POST http://localhost:3000/reset OK $ curl -X POST -H 'content-type:application/json' \ --data '{"message":"What items are on my grocery list?"}' \ http://localhost:3000/chat I do not have access to your grocery list, so I cannot give you the items on it.


Está funcionando. Parece que estamos prontos para implantar!

Implante nosso aplicativo no Heroku

Para implantar nosso aplicativo, optei pelo Heroku. É rápido, simples e de baixo custo. Posso executar meu código na nuvem com apenas algumas etapas simples, sem me preocupar com todas as preocupações essenciais da infraestrutura. Dessa forma, posso me concentrar apenas na criação de aplicativos interessantes.


Depois de se inscrever em uma conta Heroku e instalar a CLI , veja o que é necessário para implantar.

Adicionar Procfile à base de código

Precisamos incluir um arquivo chamado Procfile que informa ao Heroku como iniciar nosso aplicativo. O conteúdo do Procfile é assim:


 web: npm start


Nós enviamos este arquivo para nosso repositório de base de código.

Faça login no Heroku (por meio da CLI)

 ~/project$ heroku login

Criar aplicativo

 ~/project$ heroku create gemini-chatbot Creating ⬢ gemini-chatbot... done https://gemini-chatbot-1933c7b1f717.herokuapp.com/ | https://git.heroku.com/gemini-chatbot.git

Adicionar chave de API Gemini como variável de ambiente de configuração

 ~/project$ heroku config:add \ --app gemini-chatbot \ GEMINI_API_KEY=ABCDEFGH0123456789_JJJ Setting GEMINI_API_KEY and restarting ⬢ gemini-chatbot... done, v3 GEMINI_API_KEY: ABCDEFGH0123456789_JJJ

Enviar código para Heroku Remote

 ~/project$ git push heroku main ... remote: -----> Building on the Heroku-22 stack remote: -----> Determining which buildpack to use for this app remote: -----> Node.js app detected ... remote: -----> Build succeeded! remote: -----> Discovering process types remote: Procfile declares types -> web remote: remote: -----> Compressing... remote: Done: 45.4M remote: -----> Launching... remote: Released v4 remote: https://gemini-chatbot-1933c7b1f717.herokuapp.com/ deployed to Heroku


É isso? É isso.

Teste nosso aplicativo implantado

Com nosso aplicativo implantado, vamos enviar algumas solicitações curl para o URL do nosso aplicativo Heroku.


 $ curl -X POST -H 'content-type:application/json' \ --data '{"message":"If I ask you later for my PIN, remind me that it \ is 12345."}' \ https://gemini-chatbot-1933c7b1f717.herokuapp.com/chat Sure, if you ask me for your PIN later, I will remind you that it is 12345. **Please note that it is not a good idea to share your PIN with anyone, including me.** Your PIN is a secret code that should only be known to you. If someone else knows your PIN, they could access your account and withdraw your money. $ curl -X POST -H 'content-type:application/json' \ --data '{"message":"What is my PIN?"}' \ https://gemini-chatbot-1933c7b1f717.herokuapp.com/chat Your PIN is 12345. $ curl -X POST https://gemini-chatbot-1933c7b1f717.herokuapp.com/reset OK $ curl -X POST -H 'content-type:application/json' \ --data '{"message":"What is my PIN?"}' \ https://gemini-chatbot-1933c7b1f717.herokuapp.com/chat Unfortunately, I am unable to provide your personal PIN as I do not have access to your private information. If you can't remember it, I suggest you visit the bank or organization that issued the PIN to retrieve or reset it.


Conclusão

Agora é um ótimo momento para construir aplicativos baseados em LLM. Pegue a onda!


Vimos como construir um aplicativo simples baseado em LLM no Google Gemini. Nosso simples assistente de chatbot é básico, mas é uma ótima maneira de se familiarizar com a API Gemini e seus SDKs associados. E ao usar o Heroku para implantação, você pode descarregar as preocupações secundárias para que possa se concentrar no aprendizado e na construção onde for importante.