導入
最近、OpenAIのGPTと並んで利用が進んでいるGoogleのGeminiですが、APIにはJSONモードという、レスポンスがJSON形式であることを保証するモードがあります。
ただ、インターネットにあるコードのサンプルはPythonで書かれていることが多く、JavaScriptやTypeScriptでの書き方を説明した記事はあまりありません。
そこで、今回の記事では、JavaScriptやTypeScriptを使ったGemini APIのJSONモードの使い方について解説します。
スポンサードリンク
GeminiのJSONモードとは
Gemini 1.5 Flash、Gemini 1.5 Proから使用可能になった、レスポンスがJSONであることを保証するモードです。
これにより、JSONのデコード時のエラーを考慮することなく、処理を実装できます。
Gemini 1.0まではプロンプト内でJSONであることを指定していましたが、プロンプト内で指定していることもあり、レスポンスが確実にJSON形式で返ってくることは保証されていませんでした。
加えて、Gemini 1.5 ProではJSONのスキーマ指定も可能になり ます。
例えば、以下のように「寿司のネタの名前を5つ指定の形式で返す」といったことも指定することができるようになります。
[ { "fish_name": "マグロ" }, { "fish_name": "サーモン" }, { "fish_name": "イカ" }, { "fish_name": "エビ" }, { "fish_name": "タコ" }]
JavaScript・TypeScriptでの実装方法
それでは、さっそくJavaScript・TypeScriptでの実装方法について説明します。
事前準備
まず、事前の準備についてです。
Gemini APIを使用するためのSDKには以下の2種類あります。
- Google AI for Developers(@google/generative-ai)を使用する場合
- Vertex AI(@google-cloud/vertexai)を使用する場合
Google Cloud内で使用したり、エンタープライズ向け機能(顧客暗号鍵、Virtual Private Cloud、 高いスケーラビリティ、データ所在地の指定など)が必要な場合はVertex AI、それ以外はGoogle AI for Developersを使用します。
それぞれ順に手順を紹介します。
Google AI for Developersの場合
最初に紹介するのは、Google AI for Developersを使用する方法です。
APIキーを使用する方法で、エンタープライズ向けの機能を必要としない方向けの方法です。
まず、APIキーをまだ発行していない場合、APIキーを発行します。
以下のGoogle AI Studioにアクセスし、「Google AI StudioでAPIキーを取得する」ボタンをクリックした後、自身のGoogleアカウントでログインします。
「Get API key」ボタンを押し、「APIキーを作成」ボタンを押し、今回使用するAPIキーを発行します。
これは外部に流出させないように注意してください。
次に、今回使用するプログラムのディレクトリ内で、@google/generative-ai
パッケージをインストールします。
・npmの場合
npm install @google/generative-ai
・yarnの場合
yarn add @google/generative-ai
続いて、.envファイルを作成し、取得したAPIキーを変数API_KEY
として保存しておきます。
自動で.envファイルが読み取られない環境では、dotenv
パッケージをインストールし、設定をします。
https://www.npmjs.com/package/dotenv
API_KEY=(先ほど取得したAPIキー)
最後に、プログラム内でモデルを初期化します。
モデル名には、gemini-1.5-flash
、gemini-1.5-pro
などの使用したいモデル名を入れてください。
・CommonJSの場合
const { GoogleGenerativeAI } = require("@google/generative-ai");
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" }); // モデル名を入れる
・ESMの場合
import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" }); // モデル名を入れる
スポンサードリンク
Vertex AIの場合
続いて、Vertex AIを使用する場合についてです。
Vertex AIを使用する場合は、Google Cloudを使用することが前提となります。
まず、Node.jsのバージョンが18以上であることを確認します。
その後、以下のドキュメントに従ってGoogle Cloud上で事前設定を行います。
続いて、ローカル環境でクレデンシャルを作成するために、以下のコマンドを実行して、自身のGoogle Cloudのアカウントでログインします。
gcloud auth application-default login
クレデンシャルの作成に成功後、今回使用するプログラムのディレクトリ内で、@google-cloud/vertexai
パッケージをインストールします。
・npmの場合
npm install @google-cloud/vertexai
・yarnの場合
yarn add @google-cloud/vertexai
最後に、プログラム内でモデルを初期化します。
モデル名には、gemini-1.5-flash
、gemini-1.5-pro
などの使用したいモデル名を入れてください。
・CommonJSの場合
const { VertexAI } = require("@google-cloud/vertexai");
const genAI = new VertexAI({project: "your-project-id", location: "us-central1"}); // 使用するプロジェクトIDとロケーション名を設定
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" }); // モデル名を入れる
・ESMの場合
import { VertexAI } from "@google-cloud/vertexai";
const genAI = new VertexAI({project: "your-project-id", location: "us-central1"}); // 使用するプロジェクトIDとロケーション名を設定
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" }); // モデル名を入れる
JSONモードの実装
それでは本題のJSONモードの実装方法に移ります。
JSONモードは、Gemini 1.5 Flash、Gemini 1.5 Pro以降で使用可能です。
JSONモードを使用する際は、以下のようにmodelの取得時のgenerationConfig
のresponseMimeType
をapplication/json
に指定するだけです。
これで、JSON形式で返ってくることが保証されますが、スキーマーは保証されていません。
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash", // JSONモードの指定 generationConfig: { responseMimeType: "application/json" }});
const prompt = `人気の寿司のネタ5つを以下のJSONスキーマーで返してください。{ "type": "object", "properties": { "fish_name": { "type": "string" }, }}`;
const result = await model.generateContent(prompt);console.log(result.response.text());
スキーマーの指定(Proのみ)
Gemini 1.5以降のProモデルでは、JSONのスキーマーを指定し、その形式で返ってくることを保証することもできます。
スキーマーの指定を使用する場合は、対応するモデルでresponseMimeType
に加えて、responseSchema
を指定することで、実装可能です。
// Google AI for Developersの場合(CommonJS)const { FunctionDeclarationSchemaType } = require('@google/generative-ai');// Vertex AIの場合(CommonJS)const { FunctionDeclarationSchemaType } = require('@google-cloud/vertexai');// Google AI for Developersの場合(ESM)import { FunctionDeclarationSchemaType } from '@google/generative-ai';// Vertex AIの場合(ESM)import { FunctionDeclarationSchemaType } from '@google-cloud/vertexai';
const model = genAI.getGenerativeModel({ // Gemini 1.5 Proを指定 model: "gemini-1.5-pro", generationConfig: { // JSONモードの指定 responseMimeType: "application/json", // スキーマーの指定 responseSchema: { type: FunctionDeclarationSchemaType.ARRAY, items: { type: FunctionDeclarationSchemaType.OBJECT, properties: { fish_name: { type: FunctionDeclarationSchemaType.STRING, }, }, }, }, }});
const prompt = "人気の寿司のネタ5つを返してください";
const result = await model.generateContent(prompt)console.log(result.response.text());
スポンサードリンク
まとめ
今回は、JavaScript・TypeScriptでGemini APIのJSONモードを実装する方法を紹介しました。
ProについてはJSONのスキーマも指定することができるため、ぜひ必要に応じて使い分けてください。
Gemini 1.5 Flash | Gemini 1.5 Pro | |
---|---|---|
JSONモード | 対応 | 対応 |
スキーマーの指定 | 非対応 | 対応 |