GoogleのGemini APIの使い方

#AI#Gemini#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で閲覧できます。ただし、このデモはねつ造だったと報道されています。

Play

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
const { GoogleGenerativeAI } = require("@google/generative-ai");
const API_KEY = "ここにAPIキーを入力";
const genAI = new GoogleGenerativeAI(API_KEY);
const run = async(prompt) => {
const model = genAI.getGenerativeModel({ model: "gemini-pro"});
const result = await model.generateContent(prompt);
const response = await result.response;
const text = response.text();
console.log(text);
}
run("魔法のリュックサックについての物語を書いてください。");

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

Terminal window
node index.js

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

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

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

index.js
const { GoogleGenerativeAI } = require("@google/generative-ai");
const readline = require("readline");
const API_KEY = "ここにAPIキーを入力";
const genAI = new GoogleGenerativeAI(API_KEY);
const run = async (history, message) => {
const model = genAI.getGenerativeModel({ model: "gemini-pro" });
const chat = model.startChat({
history,
generationConfig: {
maxOutputTokens: 500,
},
});
const result = await chat.sendMessage(message);
const response = await result.response;
const text = response.text();
return text;
}
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const ask = async (question) => {
return new Promise((resolve) => {
rl.question(question, (answer) => {
resolve(answer);
});
});
};
const main = async () => {
const history = [];
while (true) {
const message = await ask("ユーザー:");
const response = await run(history, message);
console.log("モデル:" + response);
history.push(...[
{
role: "user",
parts: message,
},
{
role: "model",
parts: response,
},
])
}
};
main();

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

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

ユーザー:あなたは優秀なアシスタントです。簡潔で適切な応答を返してください。では、自己紹介してください。
モデル:私は、あなたのリクエストやタスクに対して、正確で有益な応答を生成できるよう設計された、高度な言語モデルです。
ユーザー:Node.jsを使って天気を取得する簡単なコードを書いてください。
モデル:
```javascript
const request = require('request');
// OpenWeatherMap API キーを取得する
const apiKey = process.env.OPENWEATHERMAP_API_KEY;
// 都市名を取得する
const city = process.argv[2];
// 天気を取得するためのリクエスト URL を構築する
const url = `http://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}&units=metric`;
// リクエストを送信する
request(url, (error, response, body) => {
// エラーが発生した場合はエラーメッセージを表示する
if (error) {
console.error(error);
return;
}
// ステータスコードが 200 以外の場合もエラーメッセージを表示する
if (response.statusCode !== 200) {
console.error(`Error: ${response.statusCode}`);
return;
}
// 天気情報を JSON としてパースする
const data = JSON.parse(body);
// 天気情報を出力する
console.log(`都市: ${data.name}`);
console.log(`天気: ${data.weather[0].description}`);
console.log(`気温: ${data.main.temp}℃`);
});
```

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

index.js
const { GoogleGenerativeAI } = require("@google/generative-ai");
const readline = require("readline");
const API_KEY = "ここにAPIキーを入力";
const genAI = new GoogleGenerativeAI(API_KEY);
const run = async (history, message) => {
const model = genAI.getGenerativeModel({ model: "gemini-pro" });
const chat = model.startChat({
history,
generationConfig: {
maxOutputTokens: 500,
},
});
const result = await chat.sendMessageStream(message);
return result;
}
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const ask = async (question) => {
return new Promise((resolve) => {
rl.question(question, (answer) => {
resolve(answer);
});
});
};
const main = async () => {
const history = [];
while (true) {
const message = await ask("ユーザー:");
const response = await run(history, message);
process.stdout.write("モデル:");
let responseText = '';
for await (const chunk of response.stream) {
const chunkText = chunk.text();
process.stdout.write(chunkText);
responseText += chunkText;
}
process.stdout.write("\n");
history.push(...[
{
role: "user",
parts: message,
},
{
role: "model",
parts: responseText,
},
])
}
};
main();

まとめ

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

Xに共有する Blueskyに共有する Misskeyに共有する LINEに共有する Threadsに共有する
著者のアイコン画像

生まれた時から、母国語よりも先にJavaScriptを使っていました。ネットの海のどこにもいなくてどこにでもいます。

Webフロントエンドプログラマーで、テクノロジーに関する話題を追いかけています。動画編集やプログラミングが趣味で、たまにデザインなどもやっています。主にTypeScriptを使用したWebフロントエンド開発を専門とし、便利で実用的なブラウザー拡張機能を作成しています。また、個人ブログを通じて、IT関連のニュースやハウツー、技術的なプログラミング情報を発信しています。