Gemini API : Tutorials : クイックスタート with Node.js
翻訳 : クラスキャット セールスインフォメーション
作成日時 : 03/17/2024
* 本ページは、ai.google.dev の以下のページを参考にしてまとめ直し、適宜、補足説明したものです :
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Website: www.classcat.com ; ClassCatJP
Gemini API : Tutorials : クイックスタート with Node.js
クイックスタート : Node.js アプリケーションで Gemini API を始めましょう
要件
このクイックスタートは貴方が Node.js を使用したアプリケーションを構築することに馴染みがあることを想定しています。
このクイックスタートを完了するため、開発環境が以下の要件を満たしていることを確認してください :
- Node.js v18+
- npm
プロジェクトのセットアップ
Gemini API を呼び出す前に、プロジェクトのセットアップが必要です、それは API キーのセットアップ、SDK パッケージのインストール、そしてモデルの初期化を含みます。
API キーのセットアップ
Gemini API を使用するには、API キーが必要です。まだ持っていない場合、Google AI Studio でキーを作成します。
API キーを保護する
API キーをバージョン管理システムにチェックインしないことが強く推奨されます。代わりに API キー用にシークレット・ストアを使用する必要があります。
このクイックスタートのすべてのスニペットは、API キーに環境変数としてアクセスしていることを仮定しています。
SDK パッケージのインストール
独自のアプリケーションで Gemini API を使用するには、Node.js 用の GoogleGenerativeAI パッケージをインストールする必要があります :
npm install @google/generative-ai
生成モデルの初期化
API 呼び出しをする前に、生成モデルを初期化してインポートする必要があります。
const { GoogleGenerativeAI } = require("@google/generative-ai");
// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
// ...
const model = genAI.getGenerativeModel({ model: "MODEL_NAME"});
// ...
モデルを指定するとき、以下に注意してください :
- 貴方のユースケースに特定のモデルを使用してください (例えば、gemini-pro-vision はマルチモーダル入力用です)。このガイド内には、各実装用の指示に各ユースケース用の推奨モデルをリストアップしています。
⭐️ Note : 利用可能なモデルの詳細情報については、それらの機能やレート制限も含めて、Gemini モデル をご覧ください。Gemini-Pro モデルのレート制限は毎分 60 リクエスト (RPM) で、レート制限の引き上げ をリクエストするオプションがあります。
一般的なユースケースの実装
テキスト-only 入力からテキストを生成する
プロンプト入力がテキストだけを含む場合、generateContent メソッドで gemini-pro モデルを使用してテキスト出力を生成します :
const { GoogleGenerativeAI } = require("@google/generative-ai");
// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
async function run() {
// For text-only input, use the gemini-pro model
const model = genAI.getGenerativeModel({ model: "gemini-pro"});
const prompt = "Write a story about a magic backpack."
const result = await model.generateContent(prompt);
const response = await result.response;
const text = response.text();
console.log(text);
}
run();
⭐️ Gemini API はまたストリーミングをサポートします ; 詳細は、(このガイドの) Use streaming for faster interactions をご覧ください。
テキストと画像入力 (マルチモーダル) からテキストを生成する
Gemini はマルチモーダル・モデル (gemini-pro-vision) を提供していますので、テキストと画像の両方を入力できます。プロンプト用の画像の要件 を必ずレビューしてください。
プロンプト入力がテキストと画像の両方を含む場合、generateContent メソッドで gemini-pro-vision モデルを使用してテキスト出力を生成します :
const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");
// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
// Converts local file information to a GoogleGenerativeAI.Part object.
function fileToGenerativePart(path, mimeType) {
return {
inlineData: {
data: Buffer.from(fs.readFileSync(path)).toString("base64"),
mimeType
},
};
}
async function run() {
// For text-and-image input (multimodal), use the gemini-pro-vision model
const model = genAI.getGenerativeModel({ model: "gemini-pro-vision" });
const prompt = "What's different between these pictures?";
const imageParts = [
fileToGenerativePart("image1.png", "image/png"),
fileToGenerativePart("image2.jpeg", "image/jpeg"),
];
const result = await model.generateContent([prompt, ...imageParts]);
const response = await result.response;
const text = response.text();
console.log(text);
}
run();
マルチターン会話 (チャット) の構築
Gemini を使用して、複数ターンに渡る自由形式の会話を構築することができます。SDK は会話の状態を管理することでプロセスを単純化しますので、generateContent とは異なり、会話履歴を貴方自身でストアする必要がありません。
(チャットのような) マルチターン会話を構築するには、gemini-pro モデルを使用して、startChat() を呼び出してチャットを初期化します。それから sendMessage() を使用して新しいユーザメッセージを送信します、これはまたメッセージと応答をチャット履歴に追加します。
会話のコンテンツに関連する role のために 2 つの可能なオプションがあります :
- user: プロンプトを提供する role です。この値は sendMessage 呼び出しのためのデフォルトです。
- model: 応答を提供する role です。このロールは既存の history を使用して startChat() を呼び出すときに使用できます。
const { GoogleGenerativeAI } = require("@google/generative-ai");
// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
async function run() {
// For text-only input, use the gemini-pro model
const model = genAI.getGenerativeModel({ model: "gemini-pro"});
const chat = model.startChat({
history: [
{
role: "user",
parts: "Hello, I have 2 dogs in my house.",
},
{
role: "model",
parts: "Great to meet you. What would you like to know?",
},
],
generationConfig: {
maxOutputTokens: 100,
},
});
const msg = "How many paws are in my house?";
const result = await chat.sendMessage(msg);
const response = await result.response;
const text = response.text();
console.log(text);
}
run();
より高速な相互作用のためにストリーミングを使用する
デフォルトでは、モデルは生成プロセス全体を完了した後に応答を返します。全体の結果を待つ代わりにストリーミングを使用して部分的な結果を処理することで、より高速な相互作用を実現できます。
以下の例は、テキストと画像の入力プロンプトからテキストを生成するために generateContentStream メソッドでストリーミングを実装する方法を示します。
//...
const result = await model.generateContentStream([prompt, ...imageParts]);
let text = '';
for await (const chunk of result.stream) {
const chunkText = chunk.text();
console.log(chunkText);
text += chunkText;
}
//...
テキスト-only 入力とチャットのユースケースのために同様のアプローチを使用することができます。
// Use streaming with text-only input
const result = await model.generateContentStream(prompt);
// Use streaming with multi-turn conversations (like chat)
const result = await model.sendMessageStream(msg);
高度なユースケースの実装
このクイックスタートの前のセクションで説明された一般的なユースケースは Gemini API の使用に慣れるのに役立ちます。このセクションはより高度と考えても良い幾つかのユースケースを説明します。
埋め込みの使用
埋め込み は、情報を配列内の浮動小数点数のリストとして表現するために使用されるテクニックです。Gemini では、テキスト (単語、センテンス、そしてテキストブロック) をベクトル化形式で表現できて、埋め込みを比較して対比することを簡単にします。例えば、類似の主題や感情を共有する 2 つのテキストは類似の埋め込みを持つはずで、コサイン類似度のような数学的比較テクニックで識別できます。
embedding-001 モデルを embedContent メソッド (or batchEmbedContent メソッド) を使用して埋め込みを生成します。以下の例は単一文字列の埋め込みを生成します :
const { GoogleGenerativeAI } = require("@google/generative-ai");
// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
async function run() {
// For embeddings, use the embedding-001 model
const model = genAI.getGenerativeModel({ model: "embedding-001"});
const text = "The quick brown fox jumps over the lazy dog."
const result = await model.embedContent(text);
const embedding = result.embedding;
console.log(embedding.values);
}
run();
トークンをカウントする
長いプロンプトを使用する場合、コンテンツをモデルに送信する前にトークンをカウントすることは有用かもしれません。以下の例は様々なユースケースのために countTokens() を使用する方法を示します :
// For text-only input
const { totalTokens } = await model.countTokens(prompt);
// For text-and-image input (multimodal)
const { totalTokens } = await model.countTokens([prompt, ...imageParts]);
// For multi-turn conversations (like chat)
const history = await chat.getHistory();
const msgContent = { role: "user", parts: [{ text: msg }] };
const contents = [...history, msgContent];
const { totalTokens } = await model.countTokens({ contents });
コンテンツ生成を制御するオプション
モデルパラメータを configure してセーフティ設定を使用することでコンテンツ生成を制御できます。
generationConfig や safetySettings を (generateContent のような) モデル・リクエスト・メソッドに渡すことは、getGenerativeModel で渡された同じ名前を持つ configuration オブジェクトを完全にオーバーライドすることに注意してください。
モデルパラメータの構成設定
モデルに送信するすべてのプロンプトは、モデルが応答を生成する方法を制御するパラメータ値を含みます。モデルは異なるパラメータ値に対して異なる結果を生成できます。Model パラメータ について更に学習してください。
const generationConfig = {
stopSequences: ["red"],
maxOutputTokens: 200,
temperature: 0.9,
topP: 0.1,
topK: 16,
};
const model = genAI.getGenerativeModel({ model: "MODEL_NAME", generationConfig });
セーフティ設定の使用
セーフティ設定を使用して、有害であると考えられる応答を得る尤度を調整することができます。デフォルトでは、セーフティ設定はすべての次元に渡り安全でないコンテンツである確率が中程度 and/or 高いコンテンツをブロックします。セーフティ設定 について更に学習してください。
ここに一つのセーフティ設定を設定する方法があります :
import { HarmBlockThreshold, HarmCategory } from "@google/generative-ai";
// ...
const safetySettings = [
{
category: HarmCategory.HARM_CATEGORY_HARASSMENT,
threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,
},
];
const model = genAI.getGenerativeModel({ model: "MODEL_NAME", safetySettings });
You can also set more than one safety setting:
const safetySettings = [
{
category: HarmCategory.HARM_CATEGORY_HARASSMENT,
threshold: HarmBlockThreshold.BLOCK_ONLY_HIGH,
},
{
category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
},
];
以上