paint-brush
Cómo crear una aplicación LLM con Google Geminipor@alvinslee
2,425 lecturas
2,425 lecturas

Cómo crear una aplicación LLM con Google Gemini

por Alvin Lee9m2024/06/05
Read on Terminal Reader

Demasiado Largo; Para Leer

Un tutorial sobre cómo crear una aplicación LLM utilizando la API de Google Gemini y luego implementar esa aplicación en Heroku.
featured image - Cómo crear una aplicación LLM con Google Gemini
Alvin Lee HackerNoon profile picture

Parece que existen infinitas posibilidades de innovación con los LLM. Si es como yo, habrá utilizado aplicaciones y herramientas GenAI, como ChatGPT integrado en Expedia, Copilot para escribir código o incluso DALL-E para generar imágenes. Pero como tecnólogo, quiero hacer algo más que utilizar herramientas basadas en LLM. Quiero construir el mío propio.


Le dije a DALL-E que "generara una acuarela de un programador de computadoras pensando en todas las cosas que podría construir con LLM". Sí, esto es bastante acertado.


Con todas las nuevas tecnologías, convertirse en constructor significa empezar de forma sencilla. Es así para cualquier lenguaje de programación nuevo que estoy aprendiendo o cualquier marco nuevo que estoy revisando. Construir con LLM no es diferente. Entonces, eso es por lo que voy a pasar aquí. Voy a crear una API rápida y sucia que interactúe con Google Gemini, brindándome efectivamente un pequeño asistente de chatbot propio.


Esto es lo que haremos:


  1. Presente brevemente Google Gemini.
  2. Cree una aplicación Node.js sencilla.
  3. Implemente la aplicación en Heroku.
  4. Pruébalo.

¿Qué es Google Géminis?

La mayoría de los consumidores cotidianos conocen ChatGPT, que se basa en GPT-4 LLM. Pero cuando se trata de LLM, GPT-4 no es el único juego disponible. También está Google Gemini (anteriormente conocido como Bard). En la mayoría de los puntos de referencia de rendimiento (como problemas de razonamiento multidisciplinarios a nivel universitario o generación de código Python), Gemini supera a GPT-4.


¿Qué dice Géminis sobre sí mismo?


Como desarrolladores, podemos acceder a Gemini a través de la API de Gemini en Google AI Studio . También hay SDK disponibles para Python , JavaScript , Swift y Android .


Está bien. Vayamos a construir.

Construya la aplicación Node.js

Nuestra aplicación Node.js será un servidor API Express simple que funciona como un chatbot Gemini. Escuchará en dos puntos finales. Primero, una solicitud POST a /chat (que incluirá una carga útil JSON con un atributo message ) enviará el mensaje a Gemini y luego devolverá la respuesta. Nuestra aplicación mantendrá una conversación de chat en curso con Gemini. Esto convierte a nuestro chatbot en un asistente útil que puede guardar notas por nosotros.


En segundo lugar, si enviamos una solicitud POST a /reset , esto restablecerá la conversación de chat para que comience desde cero, borrando efectivamente la memoria de Gemini de interacciones anteriores con nosotros.


Si desea omitir este tutorial de código, puede ver todo el código en mi repositorio de GitHub aquí .

Inicializar la aplicación

Para comenzar, inicializamos nuestra aplicación Node.js e instalamos las dependencias.


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


Luego, agregamos esto a los scripts en nuestro archivo package.json :


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


El archivo index.js

Nuestra aplicación consta de un archivo y es bastante simple. Lo recorreremos sección por sección.


Primero, importamos todos los paquetes que usaremos. Luego, inicializamos el SDK de Google AI. Usaremos el modelo Gemini-pro. Por último, llamamos a startChat() , que crea una nueva instancia de ChatSession para lo que Google llama una conversación de varios turnos .


 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 continuación, creamos una instancia de una nueva aplicación Express, que es nuestro servidor API.


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


Luego, configuramos nuestro oyente para solicitudes POST al punto final /chat . Nos aseguramos de que el cuerpo de la carga útil JSON incluya un message . Usamos nuestro objeto chat para enviar ese mensaje a Gemini. Luego, respondemos a nuestra persona que llama API con el texto de respuesta de 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()); })


Tenga en cuenta que, al utilizar ChatSession , hay un historial almacenado y en ejecución de nuestra interacción con Gemini en todas las llamadas API. Darle a Géminis un “recuerdo” de nuestra conversación es útil para el contexto.


Pero, ¿qué pasa si quieres que Géminis empiece de nuevo por completo y olvide todo el contexto anterior? Para esto, tenemos el punto final /reset . Esto simplemente inicia una nueva ChatSession .


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


Finalmente, iniciamos nuestro servidor para comenzar a escuchar.


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


Como nota al margen, todo este proyecto es sólo una mini demostración. ¡No está destinado a ser utilizado en producción! De la forma en que lo he diseñado por ahora (sin autenticación), cualquiera con la URL puede enviar una solicitud a /chat a /reset . En una configuración de producción, contaríamos con una autenticación adecuada y cada usuario tendría su propia instancia de una conversación con Gemini que nadie más podría manipular.

Obtener una clave API de Gemini

En este punto, estamos casi listos para comenzar. Lo último que necesitamos es una clave API para acceder a la API de Gemini. Para obtener una clave API, comience registrándose para obtener una cuenta de Google AI for Developers .


Una vez que haya iniciado sesión, seleccione Iniciar Google AI Studio para iniciar un nuevo proyecto de Google Gemini.



Dentro del proyecto, haga clic en Obtener clave API para navegar a la página de claves API. Luego, haga clic en Crear clave API para generar una clave. Copia el valor.


En su proyecto, copie el archivo llamado .env.template como un archivo nuevo llamado .env . Pegue el valor de su clave API de Gemini. Su archivo .env debería verse similar a este:


 GEMINI_API_KEY=ABCDEFGH0123456789_JJJ

Pruebe nuestra aplicación localmente

Con todo en su lugar, podemos activar nuestro servidor localmente para probarlo.


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


En una terminal diferente, podemos enviar algunas solicitudes 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.


Esta funcionando. ¡Parece que estamos listos para desplegarnos!

Implemente nuestra aplicación en Heroku

Para implementar nuestra aplicación, opté por Heroku. Es rápido, sencillo y económico. Puedo ejecutar mi código en la nube con solo unos pocos pasos simples, sin atascarme en todas las preocupaciones esenciales de la infraestructura. De esta manera, puedo concentrarme en crear aplicaciones interesantes.


Después de registrarse para obtener una cuenta Heroku e instalar la CLI , esto es lo que se necesita para implementar.

Agregar Procfile a la base de código

Necesitamos incluir un archivo llamado Procfile que le indique a Heroku cómo iniciar nuestra aplicación. El contenido de Procfile se ve así:


 web: npm start


Enviamos este archivo a nuestro repositorio de código base.

Inicie sesión en Heroku (a través de CLI)

 ~/project$ heroku login

Crear aplicación

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

Agregue la clave API de Gemini como variable de entorno de configuración

 ~/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 al control remoto Heroku

 ~/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


¿Eso es todo? Eso es todo.

Pruebe nuestra aplicación implementada

Con nuestra aplicación implementada, enviemos algunas solicitudes curl a la URL de nuestra aplicación 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.


Conclusión

Ahora es un buen momento para crear aplicaciones basadas en LLM. ¡Monta la ola!


Hemos explicado cómo crear una aplicación sencilla basada en LLM sobre Google Gemini. Nuestro sencillo asistente de chatbot es básico, pero es una excelente manera de familiarizarse con la API de Gemini y sus SDK asociados. Y al utilizar Heroku para la implementación, puede deshacerse de las preocupaciones secundarias para poder concentrarse en aprender y construir donde sea necesario.