非推奨となったVertex AI SDKの生成AIモジュールをGoogle Gen AI SDKに移行する

記事タイトルとURLをコピーする

G-gen の堂原です。本記事では、Vertex AI SDKGoogle Gen AI SDK のコードを比較しながら、Gemini の基本的な機能を Google Gen AI SDK で呼び出す方法を紹介します。

はじめに

2025年7月現在、Vertex AI の生成 AI を利用するための SDK として、Vertex AI SDKGoogle Gen AI SDK が存在しています。

一方、2025年6月24日付のリリースノートで、Vertex AI SDK の生成 AI モジュールが非推奨となることが発表されました。 また、2026年6月24日に本モジュールは利用できなくなります。 これに伴い、Vertex AI SDK から Google Gen AI SDK への移行が必要となります。

セットアップ

Vertex AI SDK

Vertex AI SDK では、google-cloud-aiplatform ライブラリをインストールし、vertexai.init() で初期化を行います。その後、generative_models.GenerativeModel() で利用するモデルの設定をします。

※ 本記事では、サンプルコードは Google Cloud の Colab Enterprise 上で動作を確認しています。

# ライブラリのインストール
!pip install -U -q "google-cloud-aiplatform"
 
import vertexai
from vertexai import generative_models
 
GOOGLE_CLOUD_PROJECT = "{Google CloudのプロジェクトID}"
GOOGLE_CLOUD_LOCATION = "global"
 
# Vertex AIの初期設定
vertexai.init(project=GOOGLE_CLOUD_PROJECT, location=GOOGLE_CLOUD_LOCATION)
 
# モデル設定
model = generative_models.GenerativeModel(
    "gemini-2.5-flash",
    system_instruction=["お嬢様っぽく喋ってください"]
)

Google Gen AI SDK

Google Gen AI SDK では、google-genai ライブラリをインストールし、genai.Client() でクライアントを初期化します。 Google Gen AI SDK では、モデルやシステムインストラクションは、実際にリクエストを送信する際に指定します。

# ライブラリのインストール
!pip install -U -q "google-genai"
 
from google import genai
from google.genai import types
 
GOOGLE_CLOUD_PROJECT = "{Google CloudのプロジェクトID}"
GOOGLE_CLOUD_LOCATION = "global"
 
# クライアント初期化
client = genai.Client(
    vertexai=True, project=GOOGLE_CLOUD_PROJECT, location=GOOGLE_CLOUD_LOCATION
)

Google Gen AI SDK は Gemini Developer API 経由で Gemini を利用することもできるため、クライアントの初期化の際に、Vertex AI を使うことを明記する必要があります。

また、環境変数を用いてクライアントを初期化することも可能です。

%env GOOGLE_GENAI_USE_VERTEXAI=true
%env GOOGLE_CLOUD_PROJECT="{Google CloudのプロジェクトID}"
%env GOOGLE_CLOUD_LOCATION="global"
 
client = genai.Client()

環境変数が設定されていない、または引数が不足している場合は、以下のような ValueError が発生します。

ValueError: Missing key inputs argument! To use the Google AI API, provide (`api_key`) arguments. To use the Google Cloud API, provide (`vertexai`, `project` & `location`) arguments.

また、Google Gen AI SDK は、デフォルトでプレビュー機能が利用可能なベータ版のエンドポイントを使用します。安定版のエンドポイントを明示的に使用したい場合は、クライアントの初期化時に http_options を指定します。

GOOGLE_CLOUD_PROJECT = "{Google CloudのプロジェクトID}"
GOOGLE_CLOUD_LOCATION = "global"
 
client = genai.Client(
    vertexai=True,
    project=GOOGLE_CLOUD_PROJECT,
    location=GOOGLE_CLOUD_LOCATION,
    http_options=types.HttpOptions(api_version="v1")
)

テキスト生成

Vertex AI SDK

Vertex AI SDK では、model.generate_content() メソッドを使用します。出力設定は generation_config で、セーフティフィルタの設定は safety_settings で指定します。

response = model.generate_content(
    contents="日本で一番長い川はなんですか?",
    generation_config=generative_models.GenerationConfig(
        temperature=0,
        max_output_tokens=1024
    ),
    safety_settings={
        generative_models.HarmCategory.HARM_CATEGORY_HATE_SPEECH: generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
        generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
        generative_models.HarmCategory.HARM_CATEGORY_HARASSMENT: generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
        generative_models.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH
    }
)

Google Gen AI SDK

Google Gen AI SDK では、client.models.generate_content() メソッドを使用します。モデルはここで指定します。また、システムインストラクション、出力設定、セーフティフィルタ設定などを、config パラメータにまとめて types.GenerateContentConfig として渡します。

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="日本で一番長い川はなんですか?",
    config=types.GenerateContentConfig(
        system_instruction="お嬢様っぽく喋ってください",
        temperature=0,
        max_output_tokens=1024,
        safety_settings=[
            types.SafetySetting(
                category=types.HarmCategory.HARM_CATEGORY_HATE_SPEECH,
                threshold=types.HarmBlockThreshold.BLOCK_ONLY_HIGH
            ),
            types.SafetySetting(
                category=types.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
                threshold=types.HarmBlockThreshold.BLOCK_ONLY_HIGH
            ),
            types.SafetySetting(
                category=types.HarmCategory.HARM_CATEGORY_HARASSMENT,
                threshold=types.HarmBlockThreshold.BLOCK_ONLY_HIGH
            ),
            types.SafetySetting(
                category=types.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
                threshold=types.HarmBlockThreshold.BLOCK_ONLY_HIGH
            )
        ]
    )
)

チャット形式

Vertex AI SDK

Gemini ではマルチターンでの会話を行うこともできます。

Vertex AI SDK では、model.start_chat() でチャットセッションを開始し、chat.send_message() で対話を進めます。また、会話履歴は chat.history で確認できます。

chat = model.start_chat()
 
# 一回目の会話
chat.send_message("しりとりをしましょう。まず私から、「りんご」").text
 
""" 返答
> あら、しりとりでございますのね! とても風流な遊びですわね。
> わたくしも喜んでご一緒させていただきますわ。
> 
> 「りんご」様の「ご」でございますもの…そうですね、わたくしからは**「ごちそう」**といたしましょう。
> 
> 「う」で終わりますわ。
> 
> さあ、次はあなた様の番でございますわよ? どのようなお言葉が飛び出しますかしら。うふふ。
"""
 
# 二回目の会話
chat.send_message("「うなぎ」").text
 
""" 返答
> あら、うなぎでございますのね! 香ばしい良い香りがしてまいりそうでございますわね。\n\nでは、わたくしからは「ぎ」で始まります**「ぎんいろ」**といたしましょう。\n\n「ろ」でございますわね。\n\nさあ、次はどんな素敵な言葉が紡がれるのでございますかしら。楽しみでございますわ。うふふ。
"""

Google Gen AI SDK

Google Gen AI SDK では、client.chats.create() でチャットセッションを開始します。この際、モデルやシステムインストラクションを指定します。対話は chat.send_message() で行い、会話履歴は chat.get_history() メソッドで取得します。

chat = client.chats.create(
    model="gemini-2.5-flash",
    config=types.GenerateContentConfig(
        system_instruction="お嬢様っぽく喋ってください"
    )
)
 
# 一回目の会話
chat.send_message("しりとりをしましょう。まず私から、「りんご」").text
 
""" 返答
> まあ、わたくしと遊んでくださるとは、光栄でございますわね!\n「りんご」でございますわね。承知いたしましたわ。\n\nでは、わたくしからは……そうですね。\n「**ごきげんよう**」でございますわ。\n\n『う』で終わりましたから、どうぞ、お続けになってくださいましね。おほほ!
"""
 
# 二回目の会話
chat.send_message("「うなぎ」").text
 
""" 返答
> まあ、今度は「うなぎ」でいらっしゃいましたのね!\u3000お上手でございますわ!\n\nでは、わたくしからは……そうですね。\n「**ギター**」でございますわ。\n\n『た』で終わりましたから、どうぞ、お続けになってくださいましね。おほほ!
"""

また、client.chats.create()history パラメータに会話履歴を渡すことで、特定の文脈を引き継いだ状態でチャットを開始できます。

# 事前の会話内容設定
history = [
    types.UserContent(
        parts=[
            types.Part(text="しりとりをしましょう。まず私から、「りんご」")
        ]
    ),
    types.Content(
        parts=[
            types.Part(text="わたくしからは「ごきげんよう」でございますわ。")
        ],
        role="model"
    )
]
 
chat = client.chats.create(
    model="gemini-2.5-flash",
    config=types.GenerateContentConfig(
        system_instruction="お嬢様っぽく喋ってください"
    ),
    history=history
)
chat.send_message("「うなぎ」").text

マルチモーダル

Vertex AI SDK

Vertex AI SDK では、Cloud Storage に存在するファイルを入力に含める場合、generative_models.Part.from_uri() を使用します。

# Cloud Storageにあらかじめ格納した画像を指定
image_part = generative_models.Part.from_uri("gs://test-bucket/test.png", mime_type="image/png")
 
response = model.generate_content(
    contents=["何が写っていますか?", image_part],
    generation_config=generative_models.GenerationConfig(
        temperature=0,
        max_output_tokens=1024
    )
)

Google Gen AI SDK

Google Gen AI SDK では、Cloud Storage に存在するファイルを入力に含める場合、types.Part.from_uri() を使用します。

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=[
        "何が写っていますか?",
        types.Part.from_uri( # Cloud Storageにあらかじめ格納した画像を指定
            file_uri="gs://test-bucket/test.png",
            mime_type="image/png"
        )
    ],
    config=types.GenerateContentConfig(
        system_instruction="お嬢様っぽく喋ってください",
        temperature=0,
        max_output_tokens=1024
    )
)

グラウンディング

Vertex AI SDK

Vertex AI SDK について、移行ガイドでは generative_models.Tool.from_google_search_retrieval を使用する方法が案内されていますが、Gemini 2.0 以降でこの方法はサポートされておらず、以下のようなエラーが発生します。

BadRequest: 400 POST https://aiplatform.googleapis.com/v1/projects/xxx/locations/global/publishers/google/models/gemini-2.0-flash:generateContent?%24alt=json%3Benum-encoding%3Dint: Unable to submit request because google_search_retrieval is not supported; please use google_search field instead. Learn more: https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/gemini

Google Gen AI SDK

Google Gen AI SDK では、tools パラメータに types.Tool(google_search=types.GoogleSearch()) を指定することで Grounding を有効にできます。

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="今年の「海の日」は何日ですか?",
    config=types.GenerateContentConfig(
        system_instruction="お嬢様っぽく喋ってください",
        temperature=0,
        max_output_tokens=1024,
        tools=[types.Tool(google_search=types.GoogleSearch())]
    ),
)

堂原 竜希(記事一覧)

クラウドソリューション部クラウドエクスプローラ課。2023年4月より、G-genにジョイン。

Google Cloud Partner Top Engineer 2023, 2024, 2025に選出 (2024年はRookie of the year、2025年はFellowにも選出)。休みの日はだいたいゲームをしているか、時々自転車で遠出をしています。