paint-brush
如何使用 Google Gemini 构建 LLM 应用程序经过@alvinslee
2,462 讀數
2,462 讀數

如何使用 Google Gemini 构建 LLM 应用程序

经过 Alvin Lee9m2024/06/05
Read on Terminal Reader

太長; 讀書

本教程介绍如何使用 Google Gemini API 构建 LLM 应用程序,然后将该应用程序部署到 Heroku。
featured image - 如何使用 Google Gemini 构建 LLM 应用程序
Alvin Lee HackerNoon profile picture

看来 LLM 的创新潜力无穷。如果你和我一样,可能已经使用过 GenAI 应用程序和工具,比如 Expedia 内置的 ChatGPT、用于编写代码的 Copilot,甚至用于生成图像的 DALL-E。但作为一名技术专家,我想做的不仅仅是使用基于 LLM 的工具。我想构建自己的工具。


我告诉 DALL-E“画一幅水彩画,画的是一位计算机程序员,他正在思考他能用法学硕士学位创造的所有东西。”是的,这非常准确。


对于所有新技术而言,成为一名构建者意味着从简单开始。对于我正在学习的任何新编程语言或我正在检查的任何新框架而言,情况都是如此。使用 LLM 进行构建也不例外。所以,这就是我要在这里介绍的内容。我将构建一个与 Google Gemini 交互的快速而简单的 API,从而有效地为我自己提供一个小型聊天机器人助手。


以下是我们将要做的事情:


  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。


双子座对自己说了什么?


作为开发人员,我们可以通过Google AI Studio中的 Gemini API 访问 Gemini。还有适用于PythonJavaScriptSwiftAndroid的 SDK。


好的。让我们开始建造吧。

构建 Node.js 应用程序

我们的 Node.js 应用程序将是一个简单的Express API 服务器,其功能类似于 Gemini 聊天机器人。它将监听两个端点。首先,对/chatPOST请求(将包含具有message属性的 JSON 负载)将向 Gemini 发送消息,然后返回响应。我们的应用程序将与 Gemini 保持聊天对话。这使我们的聊天机器人变成了一个有用的助手,可以为我们保存笔记。


其次,如果我们向/reset发送POST请求,这将重置聊天对话从头开始,从而有效地抹去 Gemini 与我们之前互动的记忆。


如果您想跳过此代码演练,您可以在这里的我的 GitHub 存储库中查看所有代码。

初始化应用程序

首先,我们初始化 Node.js 应用程序并安装依赖项。


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


然后,我们将其添加到package.json文件中的scripts中:


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


index.js文件

我们的应用程序由一个文件组成,而且非常简单。我们将逐一介绍它。


首先,我们导入所有要使用的软件包。然后,我们从 Google AI 初始化 SDK。我们将使用 Gemini-pro 模型。最后,我们调用startChat() ,这将为 Google 所称的多轮对话创建一个新的ChatSession实例。


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


然后,我们设置监听器以监听对/chat端点的POST请求。我们确保 JSON 负载主体包含一条message 。我们使用chat对象将该消息发送给 Gemini。然后,我们使用来自 Gemini 的响应文本来响应 API 调用者。


 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 调用的互动历史记录都会被保存下来。让 Gemini 拥有我们对话的“记忆”有助于了解背景。


但是,如果你想让 Gemini 完全重新开始并忘记所有以前的上下文,该怎么办?为此,我们有/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 。在生产设置中,我们将进行适当的身份验证,并且每个用户都会有自己的与 Gemini 的对话实例,其他人无法操纵。

获取 Gemini API 密钥

至此,我们几乎可以开始了。我们最后需要的是 API 密钥来访问 Gemini API。要获取 API 密钥,请先注册一个Google AI for Developers 帐户


登录后,选择启动 Google AI Studio来启动新的 Google Gemini 项目。



在项目中,单击获取 API 密钥以导航到 API 密钥页面。然后,单击创建 API 密钥以生成密钥。复制该值。


在您的项目中,将名为.env.template的文件复制为名为.env的新文件。粘贴您的 Gemini API 密钥的值。您的.env文件应类似于以下内容:


 GEMINI_API_KEY=ABCDEFGH0123456789_JJJ

在本地测试我们的应用程序

一切就绪后,我们可以在本地启动服务器来测试它。


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


在不同的终端中,我们可以发送一些 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.


一切正常。看来我们已准备好部署了!

将我们的应用程序部署到 Heroku

为了部署我们的应用程序,我选择使用 Heroku。它快速、简单且成本低廉。只需几个简单的步骤,我就可以让我的代码在云中运行,而不必陷入所有繁琐的基础设施问题中。这样,我就可以专注于构建酷炫的应用程序。


注册 Heroku 账户并安装 CLI后,部署需要完成以下操作。

Procfile添加到代码库

我们需要包含一个名为Procfile的文件,它告诉 Heroku 如何启动我们的应用程序。Procfile 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

添加 Gemini API Key 作为配置环境变量

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


就这样?就这样。

测试我们部署的应用程序

部署我们的应用程序后,让我们向 Heroku 应用程序 URL 发送一些 curl 请求。


 $ 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 应用程序的好时机。乘风破浪吧!


我们已经介绍了如何在 Google Gemini 上构建一个简单的基于 LLM 的应用程序。我们的简单聊天机器人助手很基础,但它是熟悉 Gemini API 及其相关 SDK 的好方法。通过使用 Heroku 进行部署,您可以减轻次要的负担,从而专注于学习和构建重要的东西。