GoogleのGemini APIの使い方

#AI#Google#HowTo
投稿日:

Google製の大規模言語モデル(LLM)のGeminiのAPIを使ってみたので、その使い方を紹介します。

Geminiとは

Geminiの公式サイトのスクリーンショット
Geminiの公式サイトのスクリーンショット

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の公式サイトの価格ページのスクリーンショット
Geminiの公式サイトの価格ページスクリーンショット

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」と書かれている

注意書きが表示されるので、よく読んで理解したらチェックボックスにチェックを入れて[Continue]をクリックします。3つのチェックボックスのうち、下の2つは必須ではありません。

注意書きのモーダルウィンドウが表示されているスクリーンショット

もし、APIを使うことが目的ではなく単にGeminiを試してみたいだけなら、中央の大きなテキストボックスにテキストを入力して[Run]をクリックすれば使えます。

APIとして使いたい場合は、左上から[Get API key]をクリックします。

Google AI Studioのスクリーンショット

新しくプロジェクトを作成してAPIキーを追加するか、既存のプロジェクトにAPIキーを追加するか尋ねられるので、どちらかを選択します。

APIキーの作成方法を尋ねる画面

APIキーが生成されるので、コピーしておきます。APIキーは他人に知られないように注意してください。

APIキーがモーダルウィンドウに表示されている

APIを使う

ここからは、取得したAPIキーで実際にAPIを使ってみます。

ここではJavaScript(Node.js)を使います。Pythonの場合は、公式のノートブックが分かりやすいです。他のプログラミング言語を使う場合は、公式チュートリアルを参考にしてみてください。

Node.jsでGemini APIを使うには、Google AI JavaScript SDKをインストールします。

Terminal window
npm install @google/generative-ai

Gemini APIでは、テキストからテキストの生成と、マルチターンのチャットが用意されています。また、ここでは説明しませんが、テキストと画像からテキストの生成もできます。

テキストからテキストを生成するには、次のようにします。

index.js
1
const { GoogleGenerativeAI } = require("@google/generative-ai");
2
3
const API_KEY = "ここにAPIキーを入力";
4
5
const genAI = new GoogleGenerativeAI(API_KEY);
6
7
const 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
16
run("魔法のリュックサックについての物語を書いてください。");

スクリプトを実行します。

Terminal window
node index.js

すると、次のようなテキストが出力されます。出力結果は実行するたびに変わります。

1
むかしむかし、あるところに魔法のリュックサックを持つ男の子がいました。リュックサックはどんなものでも詰め込むことができ、決して重くなりませんでした。男の子はリュックサックを学校に持っていき、本や文房具を詰めました。リュックサックは重くならず、男の子は一日中楽に持ち歩くことができました。
2
3
ある日、男の子は森を散歩していると、一匹の迷子の猫を見つけました。猫は寒そうで、お腹が空いているようでした。男の子は猫をリュックサックに入れ、家に連れて帰りました。リュックサックは重くならなかったので、男の子は猫を楽に持ち帰ることができました。
4
5
家に帰ると、男の子は猫にエサと水をあげました。猫は喜んで食べました。男の子は猫を毛布にくるみ、暖かくしてあげました。猫は毛布の中にもぐりこんで、すぐに寝入ってしまいました。
6
7
次の日、男の子は猫を森に連れて帰りました。猫は男の子に甘えて、なかなか離れませんでした。男の子は猫をなでて、「また会おうね」と声をかけました。そして、リュックサックに猫を入れて、家へと帰りました。
8
9
男の子は魔法のリュックサックのおかげで、猫を助けることができました。そして、猫は男の子の親友になりました。二人は毎日一緒に遊び、とても幸せに暮らしました。

次に、マルチターンのチャットを試してみます。

index.js
1
const { GoogleGenerativeAI } = require("@google/generative-ai");
2
const readline = require("readline");
3
4
const API_KEY = "ここにAPIキーを入力";
5
6
const genAI = new GoogleGenerativeAI(API_KEY);
7
8
const 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
24
const rl = readline.createInterface({
25
input: process.stdin,
26
output: process.stdout,
27
});
28
29
const ask = async (question) => {
30
return new Promise((resolve) => {
31
rl.question(question, (answer) => {
32
resolve(answer);
33
});
34
});
35
};
36
37
const 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
58
main();

スクリプトを実行すると、コマンドラインに[ユーザー:]と表示されるので、そこにテキストを入力してEnterキーを押します。すると、[モデル:]と表示され、AIの返答が表示されます。

実際に試したところ、次のようになりました。

1
ユーザー:あなたは優秀なアシスタントです。簡潔で適切な応答を返してください。では、自己紹介してください。
2
モデル:私は、あなたのリクエストやタスクに対して、正確で有益な応答を生成できるよう設計された、高度な言語モデルです。
3
ユーザー:Node.jsを使って天気を取得する簡単なコードを書いてください。
4
モデル:
5
```javascript
6
const request = require('request');
7
8
// OpenWeatherMap API キーを取得する
9
const apiKey = process.env.OPENWEATHERMAP_API_KEY;
10
11
// 都市名を取得する
12
const city = process.argv[2];
13
14
// 天気を取得するためのリクエスト URL を構築する
15
const url = `http://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}&units=metric`;
16
17
// リクエストを送信する
18
request(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
```

また、先ほどのコードは完全に応答が返ってくるまでテキストが表示されませんが、次のようにすると応答の途中経過が表示されます。

index.js
1
const { GoogleGenerativeAI } = require("@google/generative-ai");
2
const readline = require("readline");
3
4
const API_KEY = "ここにAPIキーを入力";
5
6
const genAI = new GoogleGenerativeAI(API_KEY);
7
8
const 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
22
const rl = readline.createInterface({
23
input: process.stdin,
24
output: process.stdout,
25
});
26
27
const ask = async (question) => {
28
return new Promise((resolve) => {
29
rl.question(question, (answer) => {
30
resolve(answer);
31
});
32
});
33
};
34
35
const 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
65
main();

まとめ

GoogleのGemini APIの使い方を紹介しました。Gemini APIは無料でもかなり使えるので、ぜひ試してみてください。

Twitterのアイコン LINEのアイコン Threadsのアイコン Misskeyのアイコン Misskeyのアイコン
著者のアイコン画像