paint-brush
Google Gemini を使用して LLM アプリケーションを構築する方法@alvinslee
2,425 測定値
2,425 測定値

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 にはイノベーションの無限の可能性があるように思えます。私と同じように、Expedia に組み込まれた ChatGPT、コード作成用の Copilot、画像生成用の DALL-E など、GenAI アプリケーションやツールを使用したことがあるでしょう。しかし、技術者として、私は LLM ベースのツールを使用するだけでなく、独自のツールを構築したいと考えています。


私は DALL-E に「LLM で構築できるすべてのものを考えているコンピュータ プログラマーの水彩画を生成してください」と指示しました。はい、これはまさにその通りです。


新しいテクノロジーでは、ビルダーになるということは、シンプルに始めることを意味します。これは、私が学習している新しいプログラミング言語や、調べている新しいフレームワークでも同じです。LLM を使用した構築も例外ではありません。ここでは、その点について説明します。Google Gemini とやり取りする簡単な API を構築して、実質的に自分専用の小さなチャットボット アシスタントを作成します。


私たちが行うことは次のとおりです:


  1. Google Gemini について簡単に紹介します。
  2. シンプルな Node.js アプリケーションを構築します。
  3. アプリケーションを Heroku にデプロイします。
  4. 試して。

Google Gemini とは何ですか?

ほとんどの一般消費者は、GPT-4 LLM 上に構築された ChatGPT について知っています。しかし、LLM に関しては、GPT-4 だけが唯一の選択肢ではありません。Google Gemini (以前は Bard と呼ばれていました) もあります。ほとんどのパフォーマンス ベンチマーク (複数の分野にわたる大学レベルの推論問題や Python コード生成など) において、Gemini は GPT-4 を上回っています。


ジェミニは自分自身について何を語っているでしょうか?


開発者は、 Google AI Studioの Gemini API を介して Gemini にアクセスできます。また、 PythonJavaScriptSwiftAndroid用の SDK も用意されています。


よし。では、構築を始めましょう。

Node.jsアプリケーションを構築する

私たちの Node.js アプリケーションは、Gemini チャットボットのように機能するシンプルなExpress API サーバーになります。2 つのエンドポイントでリッスンします。まず、 /chatへのPOSTリクエスト ( message属性を持つ JSON ペイロードを含む) がメッセージを Gemini に送信し、応答を返します。私たちのアプリケーションは、Gemini とのチャット会話を継続します。これにより、私たちのチャットボットは、メモを保持できる便利なアシスタントになります。


次に、 /resetPOSTリクエストを送信すると、チャットの会話がリセットされて最初から開始され、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ファイル

私たちのアプリケーションは 1 つのファイルで構成されており、非常にシンプルです。セクションごとに説明していきます。


まず、使用するすべてのパッケージをインポートします。次に、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();


次に、API サーバーである新しい Express アプリをインスタンス化します。


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


次に、 /chatエンドポイントへのPOSTリクエストのリスナーを設定します。JSON ペイロード本体にmessage chatれていることを確認します。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を使用すると、すべての API 呼び出しにわたって Gemini とのやり取りの履歴が保存され、実行されることに注意してください。会話の「メモリ」を 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キーの取得

この時点で、準備はほぼ整いました。最後に必要なのは、Gemini API にアクセスするための 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 は迅速、シンプル、低コストです。インフラストラクチャの細かい問題に悩まされることなく、ほんの数ステップでコードをクラウドで実行できます。こうすることで、クールなアプリケーションの構築に集中できます。


Heroku アカウントにサインアップしてCLI をインストールしたら、デプロイに必要な手順は次のとおりです。

コードベースにProcfileを追加する

Heroku にアプリケーションの起動方法をProcfileする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 キーを Config 環境変数として追加する

~/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 リモートにコードをプッシュする

~/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 を使用すると、二次的な懸念事項を軽減し、重要な学習と構築に集中できます。