GoogleのGemini APIの使い方
Google製の大規模言語モデル(LLM)のGeminiのAPIを使ってみたので、その使い方を紹介します。
Geminiとは
![Geminiの公式サイトのスクリーンショット](/_astro/image-2.LKFqol5e_PMPYU.webp)
Geminiは、Googleが開発した大規模言語モデル(LLM)です。ChatGPTのように、テキストで対話できるAIです。Google I/O 2023で発表され、12月7日に公開されました。
GeminiにはUltra、Pro、Nanoの3つのサイズがあり、もっとも小さいNanoではGoogle Pixel 8 Proで動作します。また、ProはGoogle Bardの英語版のモデルとして採用されており、APIとしても利用できます。
Ultraはデモ動画が公開されており、YouTubeで閲覧できます。ただし、このデモはねつ造だったと報道されています。
Gemini APIの価格
![Geminiの公式サイトの価格ページのスクリーンショット](/_astro/image-4.CEyZLc0G_Z1ay3Cq.webp)
Gemini APIは記事執筆時点では1分あたり60クエリーまで、入力・出力ともに無料です。
これを超えると、入力は1,000文字あたり$0.00025、出力は1,000文字あたり$0.0005です。また、画像も入力でき、1枚あたり$0.0025です。
ChatGPTやGPT-3.5、GPT-4などのOpenAIのAPIではトークン数に応じて課金されるのに対し、Gemini APIでは文字数に応じて課金されるのが特徴です。
英語では1トークン≒1単語ですが、日本語では1トークン≒1文字です。そのため、OpenAIのAPIでは英語の方が安くなる傾向がありますが、Gemini APIでは日本語の方が安くなると思われます。
また、無料版では入力したテキストがAIの学習に利用されますが、有料版では利用されません。
Geminiの使い方
APIキーの取得
まずは、Geminiの公式サイトにアクセスし、[Get API key in Google AI Studio]をクリックします。
![Geminiの公式サイトのスクリーンショット。中央に大きく「Build with Gemini」と書かれている](/_astro/image.D8XIaL4p_Zsx5lV.webp)
注意書きが表示されるので、よく読んで理解したらチェックボックスにチェックを入れて[Continue]をクリックします。3つのチェックボックスのうち、下の2つは必須ではありません。
![注意書きのモーダルウィンドウが表示されているスクリーンショット](/_astro/image-1.DtirZWtu_Z1aLP86.webp)
もし、APIを使うことが目的ではなく単にGeminiを試してみたいだけなら、中央の大きなテキストボックスにテキストを入力して[Run]をクリックすれば使えます。
APIとして使いたい場合は、左上から[Get API key]をクリックします。
![Google AI Studioのスクリーンショット](/_astro/image-3.CSC_XIpw_1L6d0h.webp)
新しくプロジェクトを作成してAPIキーを追加するか、既存のプロジェクトにAPIキーを追加するか尋ねられるので、どちらかを選択します。
![APIキーの作成方法を尋ねる画面](/_astro/image-5.BM3kftaN_1aEEBM.webp)
APIキーが生成されるので、コピーしておきます。APIキーは他人に知られないように注意してください。
![APIキーがモーダルウィンドウに表示されている](/_astro/image-6.DOhxNjOM_Z1c9VJ2.webp)
APIを使う
ここからは、取得したAPIキーで実際にAPIを使ってみます。
ここではJavaScript(Node.js)を使います。Pythonの場合は、公式のノートブックが分かりやすいです。他のプログラミング言語を使う場合は、公式チュートリアルを参考にしてみてください。
Node.jsでGemini APIを使うには、Google AI JavaScript SDKをインストールします。
npm install @google/generative-ai
Gemini APIでは、テキストからテキストの生成と、マルチターンのチャットが用意されています。また、ここでは説明しませんが、テキストと画像からテキストの生成もできます。
テキストからテキストを生成するには、次のようにします。
1const { GoogleGenerativeAI } = require("@google/generative-ai");2
3const API_KEY = "ここにAPIキーを入力";4
5const genAI = new GoogleGenerativeAI(API_KEY);6
7const run = async(prompt) => {8 const model = genAI.getGenerativeModel({ model: "gemini-pro"});9
10 const result = await model.generateContent(prompt);11 const response = await result.response;12 const text = response.text();13 console.log(text);14}15
16run("魔法のリュックサックについての物語を書いてください。");
スクリプトを実行します。
node index.js
すると、次のようなテキストが出力されます。出力結果は実行するたびに変わります。
1むかしむかし、あるところに魔法のリュックサックを持つ男の子がいました。リュックサックはどんなものでも詰め込むことができ、決して重くなりませんでした。男の子はリュックサックを学校に持っていき、本や文房具を詰めました。リュックサックは重くならず、男の子は一日中楽に持ち歩くことができました。2
3ある日、男の子は森を散歩していると、一匹の迷子の猫を見つけました。猫は寒そうで、お腹が空いているようでした。男の子は猫をリュックサックに入れ、家に連れて帰りました。リュックサックは重くならなかったので、男の子は猫を楽に持ち帰ることができました。4
5家に帰ると、男の子は猫にエサと水をあげました。猫は喜んで食べました。男の子は猫を毛布にくるみ、暖かくしてあげました。猫は毛布の中にもぐりこんで、すぐに寝入ってしまいました。6
7次の日、男の子は猫を森に連れて帰りました。猫は男の子に甘えて、なかなか離れませんでした。男の子は猫をなでて、「また会おうね」と声をかけました。そして、リュックサックに猫を入れて、家へと帰りました。8
9男の子は魔法のリュックサックのおかげで、猫を助けることができました。そして、猫は男の子の親友になりました。二人は毎日一緒に遊び、とても幸せに暮らしました。
次に、マルチターンのチャットを試してみます。
1const { GoogleGenerativeAI } = require("@google/generative-ai");2const readline = require("readline");3
4const API_KEY = "ここにAPIキーを入力";5
6const genAI = new GoogleGenerativeAI(API_KEY);7
8const run = async (history, message) => {9 const model = genAI.getGenerativeModel({ model: "gemini-pro" });10
11 const chat = model.startChat({12 history,13 generationConfig: {14 maxOutputTokens: 500,15 },16 });17
18 const result = await chat.sendMessage(message);19 const response = await result.response;20 const text = response.text();21 return text;22}23
24const rl = readline.createInterface({25 input: process.stdin,26 output: process.stdout,27});28
29const ask = async (question) => {30 return new Promise((resolve) => {31 rl.question(question, (answer) => {32 resolve(answer);33 });34 });35};36
37const main = async () => {38 const history = [];39
40 while (true) {41 const message = await ask("ユーザー:");42 const response = await run(history, message);43 console.log("モデル:" + response);44 history.push(...[45 {46 role: "user",47 parts: message,48 },49 {50 role: "model",51 parts: response,52 },53 ])54 }55};56
57
58main();
スクリプトを実行すると、コマンドラインに[ユーザー:]と表示されるので、そこにテキストを入力してEnterキーを押します。すると、[モデル:]と表示され、AIの返答が表示されます。
実際に試したところ、次のようになりました。
1ユーザー:あなたは優秀なアシスタントです。簡潔で適切な応答を返してください。では、自己紹介してください。2モデル:私は、あなたのリクエストやタスクに対して、正確で有益な応答を生成できるよう設計された、高度な言語モデルです。3ユーザー:Node.jsを使って天気を取得する簡単なコードを書いてください。4モデル:5```javascript6const request = require('request');7
8// OpenWeatherMap API キーを取得する9const apiKey = process.env.OPENWEATHERMAP_API_KEY;10
11// 都市名を取得する12const city = process.argv[2];13
14// 天気を取得するためのリクエスト URL を構築する15const url = `http://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}&units=metric`;16
17// リクエストを送信する18request(url, (error, response, body) => {19 // エラーが発生した場合はエラーメッセージを表示する20 if (error) {21 console.error(error);22 return;23 }24
25 // ステータスコードが 200 以外の場合もエラーメッセージを表示する26 if (response.statusCode !== 200) {27 console.error(`Error: ${response.statusCode}`);28 return;29 }30
31 // 天気情報を JSON としてパースする32 const data = JSON.parse(body);33
34 // 天気情報を出力する35 console.log(`都市: ${data.name}`);36 console.log(`天気: ${data.weather[0].description}`);37 console.log(`気温: ${data.main.temp}℃`);38});39```
また、先ほどのコードは完全に応答が返ってくるまでテキストが表示されませんが、次のようにすると応答の途中経過が表示されます。
1const { GoogleGenerativeAI } = require("@google/generative-ai");2const readline = require("readline");3
4const API_KEY = "ここにAPIキーを入力";5
6const genAI = new GoogleGenerativeAI(API_KEY);7
8const run = async (history, message) => {9 const model = genAI.getGenerativeModel({ model: "gemini-pro" });10
11 const chat = model.startChat({12 history,13 generationConfig: {14 maxOutputTokens: 500,15 },16 });17
18 const result = await chat.sendMessageStream(message);19 return result;20}21
22const rl = readline.createInterface({23 input: process.stdin,24 output: process.stdout,25});26
27const ask = async (question) => {28 return new Promise((resolve) => {29 rl.question(question, (answer) => {30 resolve(answer);31 });32 });33};34
35const main = async () => {36 const history = [];37
38 while (true) {39 const message = await ask("ユーザー:");40 const response = await run(history, message);41
42 process.stdout.write("モデル:");43 let responseText = '';44 for await (const chunk of response.stream) {45 const chunkText = chunk.text();46 process.stdout.write(chunkText);47 responseText += chunkText;48 }49 process.stdout.write("\n");50
51 history.push(...[52 {53 role: "user",54 parts: message,55 },56 {57 role: "model",58 parts: responseText,59 },60 ])61 }62};63
64
65main();
まとめ
GoogleのGemini APIの使い方を紹介しました。Gemini APIは無料でもかなり使えるので、ぜひ試してみてください。