本サイトはプロモーションが含まれています

JavaScript・TypeScriptでGemini APIのJSONモードを実装する方法(Google AI for Developers、Vertex AI)

導入

最近、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-flashgemini-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-flashgemini-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の取得時のgenerationConfigresponseMimeTypeapplication/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 FlashGemini 1.5 Pro
JSONモード対応対応
スキーマーの指定非対応対応