Node.js から Gemini API in Vertex AI の Multimodal Live API にアクセスする
2025/01/06 時点では公式ライブラリ@google-cloud/vertexaiに Multimodal Live APIの対応やGitHub のサンプルを見ても generativelanguage.googleapis.com へのアクセス方法のものしか見当たらなかったため、現時点の Node.js から Gemini API in Vertex AI で Multimodal Live API を利用するための方法の忘却録です。
Multimodal Live API とは
2024 年年末に公開された Gemini 2.0 で利用できるリアルタイムにモデルとやりとりできる API です。
テキストや音声や映像をリアルタイムに送り、同様のメディアでレスポンスをリアルタイムに受け取れます。
接続には WebSocket を利用します。
Gemini API in Vertex AI を利用するメリット
最も嬉しいのは API Key を管理する必要がなくなることです。
Google Cloud サービス アカウントで認証できるので、API Key の漏洩を心配する必要はなくなります。
参考 https://cloud.google.com/vertex-ai/generative-ai/docs/migrate/migrate-google-ai?hl=ja
接続方法
Google AI Gemini API では URL の ?key=
で API Key を指定しますが、Vertex AI Gemini API では WebSocket の接続時のリクエストヘッダーの authorization にアクセストークンを指定して接続します。
なお、ブラウザの標準の WebSocket API ではリクエストヘッダーが設定できないので ws 等のリクエストヘッダーを設定可能な WebSocket クライアントを利用しましょう。
import { GoogleAuth } from "google-auth-library";
import WebSocket from "ws";
const project = "<your-project-id>";
const location = "us-central1";
const version = "v1beta1";
const auth = new GoogleAuth({
scopes: ["https://www.googleapis.com/auth/cloud-platform"],
});
const client = await auth.getApplicationDefault();
const token = await client.credential.getAccessToken();
const ws = new WebSocket(
`wss://${location}-aiplatform.googleapis.com/ws/google.cloud.aiplatform.${version}.LlmBidiService/BidiGenerateContent`,
{
headers: {
"content-type": "application/json",
authorization: `Bearer ${token.token}`,
},
},
);
以下はセットアップの参考です。
model の命名も Google AI Gemini API と異なるので、注意してください。
間違ったモデル名だと Invalid resource field value in the request
というエラーで接続がクローズします。
ws.on("open", () => {
// SetupMessage
const data = {
setup: {
model: `projects/${project}/locations/${location}/publishers/google/models/gemini-2.0-flash-exp`,
systemInstruction: {
parts: [
{
text: "レスポンスは簡素にしてください。",
},
],
},
generationConfig: {
responseModalities: "text",
},
}
}
const json = JSON.stringify(data);
ws.send(json);
なお、ドキュメントではスネークケースの記載になっていますがキャメルケースでも問題なさそうでした。
そのため、@google/generative-aiの型定義も再利用できるので便利です。
以上で Node.js から Gemini API in Vertex AI の Multimodal Live API を利用できるようになりました。
この実装は以下のリポジトリを参考にしています。
Discussion