paint-brush
Как создать приложение LLM с помощью Google Geminiк@alvinslee
2,458 чтения
2,458 чтения

Как создать приложение LLM с помощью Google Gemini

к Alvin Lee9m2024/06/05
Read on Terminal Reader

Слишком долго; Читать

Учебное пособие о том, как создать приложение LLM с использованием API Google Gemini, а затем развернуть это приложение в Heroku.
featured image - Как создать приложение LLM с помощью Google Gemini
Alvin Lee HackerNoon profile picture

Кажется, что LLM открывает безграничные возможности для инноваций. Если вы похожи на меня, вы использовали приложения и инструменты GenAI, такие как ChatGPT, встроенный в Expedia, Copilot для написания кода или даже DALL-E для создания изображений. Но как технолог я хочу делать больше, чем просто использовать инструменты на основе LLM. Я хочу построить свой собственный.


Я посоветовал DALL-E «Создать акварель программиста, размышляющего обо всех вещах, которые он мог бы построить с помощью LLM». Да, это очень точно.


С учетом всех новых технологий стать строителем означает начать с простого. То же самое касается любого нового языка программирования, который я изучаю, или любого нового фреймворка, который я тестирую. Строительство с помощью LLM ничем не отличается. Итак, вот через что я собираюсь пройти. Я собираюсь создать быстрый и несложный API, который будет взаимодействовать с Google Gemini, фактически предоставляя мне собственного маленького помощника в чат-боте.


Вот что мы сделаем:


  1. Кратко представьте Google Gemini.
  2. Создайте простое приложение Node.js.
  3. Разверните приложение в Heroku.
  4. Попробуй это.

Что такое Google Gemini?

Большинство обычных потребителей знают о ChatGPT, который построен на основе GPT-4 LLM. Но когда дело доходит до LLM, GPT-4 — не единственная игра в городе. Еще есть Google Gemini (ранее известный как Bard). По большинству тестов производительности (таких как междисциплинарные задачи на уровне колледжа или генерация кода Python) Gemini превосходит GPT-4.


Что Близнецы говорят о себе?


Как разработчики, мы можем получить доступ к Gemini через Gemini API в Google AI Studio . Также доступны SDK для Python , JavaScript , Swift и Android .


Хорошо. Приступим к строительству.

Создайте приложение Node.js

Наше приложение Node.js будет простым сервером Express API, который будет функционировать как чат-бот Gemini. Он будет прослушивать две конечные точки. Сначала запрос POST к /chat (который будет включать в себя полезную нагрузку JSON с атрибутом message ) отправит сообщение в Gemini, а затем вернет ответ. Наше приложение будет поддерживать чат с Близнецами. Это превращает нашего чат-бота в полезного помощника, который может хранить для нас заметки.


Во-вторых, если мы отправим POST запрос на /reset , это приведет к тому, что разговор в чате начнется с нуля, эффективно стирая память Gemini о предыдущих взаимодействиях с нами.


Если вы хотите пропустить это пошаговое руководство по коду, вы можете увидеть весь код в моем репозитории GitHub здесь .

Инициализируйте приложение

Для начала мы инициализируем наше приложение Node.js и устанавливаем зависимости.


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


Затем мы добавляем это в scripts в нашем файле package.json :


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


Файл index.js

Наше приложение состоит из одного файла, и оно довольно простое. Мы пройдемся по нему по частям.


Сначала мы импортируем все пакеты, которые будем использовать. Затем мы инициализируем SDK из Google AI. Мы будем использовать модель Gemini-pro. Наконец, мы вызываем startChat() , который создает новый экземпляр ChatSession для того, что Google называет многоходовым диалогом .


 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();


Затем мы создаем экземпляр нового приложения Express, которое является нашим сервером API.


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


Затем мы настраиваем наш прослушиватель для запросов POST к конечной точке /chat . Мы следим за тем, чтобы тело полезной нагрузки JSON содержало message . Мы используем наш объект chat , чтобы отправить это сообщение Gemini. Затем мы отвечаем нашему вызывающему API текстом ответа от 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()); })


Имейте в виду, что при использовании ChatSession сохраняется и просматривается история нашего взаимодействия с Gemini для всех вызовов API. Предоставление Близнецам «памяти» о нашем разговоре полезно для контекста.


Но что, если вы хотите, чтобы Близнецы начали полностью заново и забыли весь предыдущий контекст? Для этого у нас есть конечная точка /reset . Это просто запускает новый ChatSession .


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


Наконец, мы запускаем наш сервер, чтобы начать прослушивание.


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


Кстати, весь этот проект — всего лишь мини-демо. Он не предназначен для использования в производстве! В том виде, в каком я его сейчас разработал (без аутентификации), любой, у кого есть URL-адрес, может отправить запрос /chat на /reset . В производственной установке у нас будет надлежащая аутентификация, и у каждого пользователя будет свой собственный экземпляр разговора с Близнецами, которым никто другой не сможет манипулировать.

Получение ключа API Gemini

На данный момент мы почти готовы к работе. Последнее, что нам нужно, — это ключ API для доступа к API Gemini. Чтобы получить ключ API, начните с регистрации учетной записи Google AI for Developers .


После входа в систему выберите «Запустить Google AI Studio» , чтобы начать новый проект Google Gemini.



В проекте нажмите « Получить ключ API» , чтобы перейти на страницу ключей API. Затем нажмите «Создать ключ API» , чтобы сгенерировать ключ. Скопируйте значение.


В своем проекте скопируйте файл с именем .env.template как новый файл с именем .env . Вставьте значение вашего ключа API Gemini. Ваш файл .env должен выглядеть примерно так:


 GEMINI_API_KEY=ABCDEFGH0123456789_JJJ

Протестируйте наше приложение локально

Когда все готово, мы можем запустить наш сервер локально, чтобы протестировать его.


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


В другом терминале мы можем отправить несколько запросов на завивку:


 $ 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.


Работает. Похоже, мы готовы к развертыванию!

Разверните наше приложение в Heroku

Для развертывания нашего приложения я решил использовать Heroku. Это быстро, просто и недорого. Я могу запустить свой код в облаке, выполнив всего несколько простых шагов, не увязая во всех мелких инфраструктурных проблемах. Таким образом, я могу просто сосредоточиться на создании классных приложений.


После регистрации учетной записи Heroku и установки CLI вот что нужно для развертывания.

Добавить Procfile в базу кода

Нам нужно включить файл Procfile , который сообщает Heroku, как запустить наше приложение. Содержимое Procfile выглядит следующим образом:


 web: npm start


Мы фиксируем этот файл в нашем репозитории кодовой базы.

Войдите в Heroku (через CLI)

 ~/project$ heroku login

Создать приложение

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

Добавьте ключ API Gemini в качестве переменной среды конфигурации.

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

Отправить код на 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


Вот и все? Вот и все.

Протестируйте наше развернутое приложение

Развернув наше приложение, давайте отправим несколько запросов на скручивание по URL-адресу нашего приложения 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.


Заключение

Сейчас прекрасное время для создания приложений на основе LLM. Оседлайте волну!


Мы рассмотрели, как создать простое приложение на основе LLM на базе Google Gemini. Наш простой помощник чат-бота является базовым, но это отличный способ ознакомиться с API Gemini и связанными с ним SDK. А используя Heroku для развертывания, вы можете снять с себя второстепенные проблемы и сосредоточиться на обучении и создании там, где это важно.