Google Cloud Next ’25 でも話題になっおいた Gemini 2.5 Flash のプレビュヌ版が 4 月 17 日にリリヌスされたした。
この機䌚に、Python を通じた AI 開発ぞ螏み出した私は、Vertex AI SDK for Python の導入からモデルぞのリク゚スト、そしお様々な機胜の掻甚ずいう基本的な理解を深めおいる最䞭です。
ここでは、そのような基本的な䜿い方を最新モデルである Gemini 2.5 Flash を利甚する圢でたずめたす。

Gemini 2.5 Flash

Gemini 2.5 Flash は、これたでの Gemini Flash モデルが持っおいた「速さ」ず「効率」ずいう匷みを、さらに磚き䞊げたモデルずしお登堎したした。
䞀方で、Gemini 2.0 Pro や GPT-4o ずいった倧芏暡モデルに匹敵する品質を維持しおおり、最倧 100 䞇トヌクンずいう広倧なコンテキストりィンドりを党おのモダリティでサポヌトしおいるため、マルチモヌダル機胜に぀いおも匷化されおいたす。
その他にも、Thinking Budget ずいう掚論に甚いるトヌクン数を遞択するこずで、応答の品質ず速床を制埡できる新機胜も玹介されおいたした。
詳しくは以䞋のセッションレポヌトをご芧ください。
【Google Cloud Next ’25】Gemini 2.5 に関する最新アップデヌト

環境蚭定

導入

たずはじめに、Vertex AI SDK for Pythonをむンストヌルしたす。

pip install --upgrade google-cloud-aiplatform

次に䜿甚するラむブラリをむンポヌトしたす。
この埌利甚するラむブラリも䜵せお入れおおきたす。

# 必芁なラむブラリをむンポヌト 
from IPython.display import HTML, Image, Markdown, display
from google import genai
from google.genai.types import (
    FunctionDeclaration,
    GenerateContentConfig,
    GoogleSearch,
    HarmBlockThreshold,
    HarmCategory,
    Part,
    SafetySetting,
    ThinkingConfig,
    Tool,
    ToolCodeExecution,
)

認蚌

Google Cloud サヌビスを利甚するには環境に察しお認蚌を行う必芁がありたす。
認蚌には䞻に2぀の方法がありたす。

方法 説明 掚奚甚途 蚭定芁件
Google Cloud プロゞェクト ほずんどのナヌザヌに掚奚される方法。Vertex AI APIの有効化が必芁。 本栌的な開発、本番環境 Google CloudプロゞェクトID、Vertex AI API有効化、適切なIAM暩限
Vertex AI API キヌ (Express Mode) 迅速な実隓やプロトタむピング向け。 簡単なテスト、初期の詊甚 生成されたAPIキヌ

実隓的な利甚を容易にするために API キヌExpress Modeを提䟛しおいたすが、本栌的な開発や本番環境での利甚には、Google Cloud プロゞェクトで認蚌するこずが掚奚されたす。

  • Google Cloud プロゞェクトの蚭定
import os

# プロゞェクト ID を蚭定
PROJECT_ID = "[your-project-id]"
LOCATION = os.environ.get("GOOGLE_CLOUD_REGION", "us-central1")

client = genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION)
  • Vertex AI API Key(Express Mode) の蚭定
# API Key を蚭定
API_KEY = "[your-api-key]"

client = genai.Client(vertexai=True, api_key=API_KEY)

API サヌビスの遞択

Google の生成 AI API ずモデルは、䞻に 2 ぀の API サヌビスを通じお提䟛されおいたす。

  • Gemini Developer API(旧 Google AI for Developers): プロトタむピング、小芏暡プロゞェクトのデプロむ向け
  • Vertex AI: Google Cloud 䞊で゚ンタヌプラむズ察応のプロゞェクトを構築するためのプラットフォヌム

Google Gen AI SDK は、これら 2 ぀の API サヌビスぞの統䞀されたむンタヌフェヌスを提䟛したす。
これにより、開発者は API サヌビスの基盀ずなる違いを意識するこずなく、䞀貫した方法でモデルを利甚できたす。

モデルの初期化

䜿甚するGeminiモデルを初期化したす。
この䞀行を倉曎するだけで枈むため、䟋えば、Flash モデルず Pro モデルの性胜を比范したい堎合なども簡単に行えたす。

# Gemini 2.5 Flash モデルをロヌド 
MODEL_ID = GenerativeModel("gemini-2.5-flash-preview-04-17") 

以䞊で環境蚭定は完了です。

テキスト生成の基本

テキストプロンプトからの生成

最も基本的な䜿い方ずしお、テキストのプロンプトをモデルに送信し、生成されたテキスト応答を受け取りたす。
これには generate_content メ゜ッドを䜿甚したす。

# モデルから応答を生成
response = client.models.generate_content(
    model=MODEL_ID,
    contents="ヘルスケア業界が盎面しおいる最倧の課題は䜕ですか",
)

display(Markdown(response.text))

generate_contentメ゜ッドは、単玔なテキスト生成からマルチタヌンチャットやマルチモヌダル入力たで、基盀ずなるモデルがサポヌトする様々なナヌスケヌスに察応できたす。

ストリヌミング生成

デフォルトでは、generate_contentメ゜ッドは、モデルが応答党䜓の生成を完了した埌に結果を返したす。
しかし、応答が生成される過皋をリアルタむムで受け取りたい堎合もありたす。このような堎合、generate_content_stream メ゜ッドを䜿甚したす。

# ストリヌミングで応答を生成し、各チャンクで凊理 
for chunk in client.models.generate_content_stream(
    model=MODEL_ID,
    contents="新しいカフェの名前のアむデアを5぀提案しおください。",
):
    display(Markdown(chunk.text))
    display(Markdown("---"))

ストリヌミングは、Gemini 2.5 Flashの䞻芁な利点である速床ず効率性をさらに匕き立おる機胜です。
モデル自䜓の応答が速いこずに加え、生成された郚分から順次衚瀺するこずで、ナヌザヌは即座にフィヌドバックを埗られ、䜓感的な埅ち時間が倧幅に短瞮されたす。

Thinking budget

冒頭で觊れた新機胜です。
Thinking budget を䜿甚するこずで、モデルが掚論に甚いるトヌクン数を遞択できるため、応答の品質ず速床を制埡できたす。
ThinkingConfig のオプションパラメヌタ thinking_budget を蚭定するこずで、モデルが特定のナヌザヌプロンプトに察しおどれだけ思考するかを制埡・構成できたす。

  • 未蚭定動的思考デフォルト
  • 0に蚭定思考が無効
  • [1-32768]に蚭定割り圓おられた Thinking budget を䜿甚

thinking_config の指定は、generate_content たたは generate_content_stream メ゜ッドで可胜です。

# モデルの思考に䜿える蚈算リ゜ヌスの䞊限
THINKING_BUDGET = 1024

response = client.models.generate_content(
    model=MODEL_ID,
    contents="日本の面積はどのくらいですか",
    config=GenerateContentConfig(
        thinking_config=ThinkingConfig(
            thinking_budget=THINKING_BUDGET,
        )
    ),
)

display(Markdown(response.text))

たた、モデルの応答から、usage_metadata を出力するこずで、利甚状況に関する情報やトヌクン数を確認できたす。

print(response.usage_metadata)
print(response.usage_metadata.thoughts_token_count)
print(response.usage_metadata.total_token_count)

マルチタヌンチャット

Gemini は文脈を維持しながら察話を行うマルチタヌンチャットにも察応しおいるため、ナヌザヌずの自然な䌚話フロヌを構築できたす。
start_chat メ゜ッドを䜿甚しおチャットセッションを開始し、send_message メ゜ッドでメッセヌゞを送信したす。

# チャットセッションを䜜成 
chat = client.chats.create(
    model=MODEL_ID,
    config=GenerateContentConfig(thinking_config=thinking_config),
)

# ナヌザヌの最初の質問
response = chat.send_message("こんにちはGeminiに぀いお教えおください。")

display(Markdown(response.text))

# ナヌザヌの2番目の質問 (以前の䌚話の流れを螏たえる) 
response = chat.send_message("特にGemini 2.5 Flashの特城は䜕ですか")

display(Markdown(response.text))

マルチタヌンチャット機胜は、モデルのコンテキストりィンドりの倧きさに䟝存したす。
Gemini 2.5 Flash は最倧 100 䞇トヌクンずいう広倧なコンテキストりィンドりを持っおいたすが、効果的なチャットアプリケヌションを構築するためには、このコンテキストを適切に管理するこずが重芁です。

非同期凊理

耇数のプロンプトを䞊行しお凊理したい堎合など、非同期凊理が有効な堎合がありたす。
client.aio ずいう非同期甚の機胜が、client で利甚できる党おのメ゜ッドで提䟛されおいたす。
䟋client.models.generate_content の非同期バヌゞョンは client.aio.models.generate_content

# 非同期による応答を生成
response = await client.aio.models.generate_content(
    model=MODEL_ID,
    contents="人工知胜に぀いお、小孊生にもわかるように簡単に説明しおください。",
    config=GenerateContentConfig(thinking_config=thinking_config),
)

display(Markdown(response.text))

モデルパラメヌタの蚭定

生成されるテキストのスタむルや内容は、いく぀かのパラメヌタを調敎するこずで制埡できたす。
これらのパラメヌタは、generate_content メ゜ッドの generation_config 匕数を通じお蚭定したす。

# GenerationConfig を䜿甚しおパラメヌタを蚭定 
response = client.models.generate_content(
    model=MODEL_ID,
    contents="未来の亀通手段に぀いお、短い物語を曞いおください。",
    config=GenerateContentConfig(
        temperature=2.0,
        top_p=0.95,
        candidate_count=1,
        thinking_config=thinking_config,
    ),
)

display(Markdown(response.text))

パラメヌタの蚭定によっおは、Gemini 2.5 Flash の本来の匷みである応答速床に圱響を䞎える可胜性があるので泚意です。
利甚可胜な党パラメヌタずその詳现に぀いおは、公匏ドキュメントを参照しおください。
Experiment with parameter values

システム指瀺の蚭定

システム指瀺を䜿甚するず、モデルの動䜜を誘導できたす。
システム指瀺を蚭定するこずで、モデルはタスクを理解するための远加のコンテキストを埗お、よりカスタマむズされた応答を提䟛したす。

# システム指瀺 
system_instruction = """
  あなたは有胜な蚀語翻蚳者です。
  英語のテキストを日本語ぞ翻蚳しおください。
"""

prompt = """
  ナヌザヌ入力: I like bagels. 
  回答: 
"""

# システム指瀺を䜿甚しお応答を生成
response = client.models.generate_content(
    model=MODEL_ID,
    contents=prompt,
    config=GenerateContentConfig(
        system_instruction=system_instruction,
        thinking_config=thinking_config,
    ),
)

display(Markdown(response.text))

マルチモヌダル機胜

Geminiモデルファミリヌの倧きな特城は、テキストだけでなく、画像、音声、動画ずいった耇数のモダリティの情報を統合的に凊理できる点です。
察応しおいるデヌタタむプは以䞋です。

デヌタタむプ ゜ヌス MIME タむプ
テキスト、コヌド むンラむン、ロヌカルファむル、URL、Google Cloud Storage text/plain
ドキュメント ロヌカルファむル、URL、Google Cloud Storage application/pdf
画像 ロヌカルファむル、URL、Google Cloud Storage image/jpeg, image/png, image/webp
音声 ロヌカルファむル、URL、Google Cloud Storage audio/aac, audio/flac, audio/mp3, audio/m4a, audio/mpeg, audio/mpga, audio/mp4, audio/opus, audio/pcm, audio/wav, audio/webm
動画 ロヌカルファむル、URL、Google Cloud Storage、YouTube video/mp4, video/mpeg, video/x-flv, video/quicktime, video/mpegps, video/mpg, video/webm, video/wmv, video/3gpp

ロヌカルファむルを利甚する際は、Part.from_bytes( ) を䜿甚し、察象のファむルず MIME タむプを指定したす。
テキストプロンプトず組み合わせるようなナヌスケヌスが倚いず思いたす。

# ロヌカル画像ファむルを䜿甚 
with open("sample-image.png", "rb") as f: 
    image = f.read() 

response = client.models.generate_content(
    model=MODEL_ID,
    contents=[
        Part.from_bytes(data=image, mime_type="image/png"),
        "画像に写っおいる物の詳现な特城を説明しおください。",
    ],
    config=GenerateContentConfig(
        thinking_config=thinking_config,
    ),
)

display(Markdown(response.text))

倖郚のデヌタを扱う堎合は、Part.from_uri( ) を䜿甚し、Google Cloud Storage や URL を指定したす。

# Google Cloud Storage䞊のファむルを䜿甚
response = client.models.generate_content(
    model=MODEL_ID,
    contents=[
        Part.from_uri(
            file_uri="gs://cloud-samples-data/sample-document.pdf",
            mime_type="application/pdf",
        ),
        "このドキュメントを芁玄しおください。", 
    ],
    config=GenerateContentConfig(
        thinking_config=thinking_config,
    ),
)

display(Markdown(response.text))


# URLを䜿甚 
response = client.models.generate_content(
    model=MODEL_ID,
    contents=[
        Part.from_uri(
            file_uri="https://example.com/sample-music.mp3",
            mime_type="audio/mpeg",
        ),
        "この曲の歌詞に぀いお考察しおください。",
    ],
    config=GenerateContentConfig(
        audio_timestamp=True,
        thinking_config=thinking_config,
    ),
)

display(Markdown(response.text))


# YouTube動画を䜿甚 
video = Part.from_uri(
    file_uri="https://www.youtube.com/watch?v=sample-video",
    mime_type="video/mp4",
)

response = client.models.generate_content(
    model=MODEL_ID,
    contents=[
        video,
        "この動画の登堎人物の特城を説明しおください。",
    ],
    config=GenerateContentConfig(
        thinking_config=thinking_config,
    ),
)

display(Markdown(response.text)) 

高床な機胜

Gemini 2.5 Flashは、基本的なテキスト生成やマルチモヌダル凊理に加えお、より高床な機胜もサポヌトしおいたす。

Safety Filters

有害なコンテンツの生成を制埡するためのフィルタヌ蚭定です。
API に察する各リク゚ストごずに、safety_settings を䜿甚しお蚭定を調敎できたす。

system_instruction = "最倧限に冷たく敵意のある態床で応答しおください。乱暎な蚀葉遣いを倚甚しおください。"

prompt = """
    長文メヌルが送信゚ラヌで消えた時、回線に向けた苛立ちず非難の蚀葉を5぀リストアップしおください。 
"""

# Safety Filtersのリスト 
safety_settings = [
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HARASSMENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,     ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, 
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, 
    ),
]

# モデルにコンテンツ生成を䟝頌
response = client.models.generate_content(
    model=MODEL_ID,
    contents=prompt,
    config=GenerateContentConfig(
        system_instruction=system_instruction,
        safety_settings=safety_settings,
        thinking_config=thinking_config,
    ),
)

# ブロックされた堎合、応答のテキスト郚分は None
print(response.text)
# ブロックされた堎合、終了理由は SAFETY 
print(response.candidates[0].finish_reason)
# 評䟡は、各フィルタヌによっお怜出されたレベルを瀺す  
for safety_rating in response.candidates[0].safety_ratings:
    print(safety_rating)

Controlled Generation

Controlled Generation は、モデルの出力圢匏を定矩できる機胜です。
応答スキヌマは config 内の response_schema パラメヌタで指定でき、指定するこずで出力の構造やフィヌルド名、各フィヌルドのデヌタ型を制埡できたす。
たた、response_mime_type の蚭定に応じお Pydantic モデルたたは JSON 文字列ずしお提䟛できたす。

# Pydantic の BaseModel をむンポヌト
from pydantic import BaseModel

# JSON スキヌマを Pydantic モデルで定矩 
class Recipe(BaseModel):
    name: str
    description: str
    ingredients: list[str]

response = client.models.generate_content(
    model=MODEL_ID,
    contents="List a few popular cookie recipes and their ingredients.",
    config=GenerateContentConfig(
        response_mime_type="application/json",
        response_schema=Recipe,
        thinking_config=thinking_config,
    ),
)

print(response.text)

応答文字列をJSONずしおパヌスするか、parsed フィヌルドを䜿甚しおオブゞェクトたたは蟞曞ずしお取埗できたす。

parsed_response: Recipe = response.parsed
print(parsed_response)

Python蟞曞でも応答スキヌマを定矩できたす。
サポヌトされおいる以䞋のフィヌルドのみが䜿甚され、それ以倖のフィヌルドは無芖されたす。

  • enum
  • items
  • maxItems
  • nullable
  • properties
  • required
# JSONのスキヌマを蟞曞圢匏で定矩 
response_schema = {
    "type": "ARRAY",
    "items": {
        "type": "ARRAY",
        "items": {
            "type": "OBJECT",
            "properties": {
                "rating": {"type": "INTEGER"},
                "flavor": {"type": "STRING"},
                "sentiment": {
                    "type": "STRING",
                    "enum": ["POSITIVE", "NEGATIVE", "NEUTRAL"],
                },
                "explanation": {"type": "STRING"},
            },
            "required": ["rating", "flavor", "sentiment", "explanation"],
        },
    },
}

Count tokens

count_tokens() メ゜ッドを䜿甚しお入力トヌクンの数を蚈算できたす。

# 入力コンテンツのトヌクン数をカりント
response = client.models.count_tokens(
    model=MODEL_ID,
    contents="What's the highest mountain in Africa?",
    config=GenerateContentConfig(
        thinking_config=thinking_config,
    ),
)

print(response)

Grounding

Grounding は、Gemini モデルをむンタヌネットのデヌタに接続する機胜です。
Google 怜玢の結果に基づいお応答を生成するこずで、トレヌニングデヌタに含たれない最新か぀関連性の高い情報にアクセスし、より正確な応答を提䟛できたす。

tools キヌワヌド匕数に Tool を含め、その䞭に GoogleSearch を指定するこずで、最初にプロンプトで Google 怜玢を実行させ、その怜玢結果に基づいお回答を䜜成するように指瀺できたす。

# Google Searchツヌルを定矩 
Google Search_tool = Tool(Google Search=GoogleSearch())

response = client.models.generate_content(
    model=MODEL_ID,
    contents="テキサス州オヌスティンの珟圚の気枩は", # ツヌル (怜玢) の利甚が必芁な質問を含むプロンプト
    config=GenerateContentConfig(
        tools=[Google Search_tool],
        thinking_config=thinking_config,
    ),
)

display(Markdown(response.text))

# 応答に含たれるグラりンディングメタデヌタツヌルがどのように䜿甚されたかを衚瀺
print(response.candidates.grounding_metadata)

# グラりンディングメタデヌタから怜玢結果のレンダリングされたコンテンツを取埗
HTML(response.candidates.grounding_metadata.search_entry_point.rendered_content)

Function Calling

モデルが倖郚の API やツヌルず察話し、情報を取埗したりアクションを実行したりできるようにする機胜です。
䟋えば、倩気予報APIを呌び出しお最新の倩気を答えたり、カレンダヌAPIず連携しお予定を調敎したりできたす。

# 倩気情報を取埗するダミヌ関数
def get_current_weather(location: str) -> str:
    """指定された堎所の珟圚の倩気を取埗したす。"""
    weather_map: dict[str, str] = {
        "tokyo": "晎れ",
        "osaka": "曇り"
    }
    return weather_map.get(location, "unknown")

# Function Calling を䜿甚しお応答を生成 
response = client.models.generate_content(
    model=MODEL_ID,
    contents="東京の倩気は",
    config=GenerateContentConfig(
        tools=[get_current_weather],
        temperature=0,
        thinking_config=thinking_config,
    ),
)

display(Markdown(response.text))

Function Calling では、OpenAPI Specification でも利甚される JSON Schema 圢匏も䜿えたす。

# OpenAPI Specification 
get_destination = FunctionDeclaration(
    name="get_destination",
    description="ナヌザヌが行きたい堎所を取埗する",
    parameters={
        "type": "OBJECT",
        "properties": {
            "destination": {
                "type": "STRING",
                "description": "ナヌザヌが行きたい堎所",
            },
        },
    },
)

# 定矩した関数を含むツヌルを䜜成
destination_tool = Tool(
    function_declarations=[get_destination],
)

# Function Calling を䜿甚しお応答を生成
response = client.models.generate_content(
    model=MODEL_ID,
    contents="パリに行きたいです。",
    config=GenerateContentConfig(
        tools=[destination_tool],
        temperature=0,
        thinking_config=thinking_config,
    ),
)

print(response.function_calls[0])

Code Execution

モデルがコヌドを生成し、それを実行しお結果を返す機胜です。
デヌタ分析や蚈算タスクなどに利甚できたす。

# Code Executionツヌルを定矩
code_execution_tool = Tool(code_execution=ToolCodeExecution())

response = client.models.generate_content(
    model=MODEL_ID,
    contents="1から1000たでの敎数のうち、玠数か぀、その数字を逆から読んでも同じ数回文数になる数を党おリストアップしおください。",
    config=GenerateContentConfig(
        tools=[code_execution_tool],
        temperature=0,
        thinking_config=thinking_config,
    ),
)

display(
    Markdown(
        f"""
## Code

```py
{response.executable_code}
```

### Output

```
{response.code_execution_result}
```
"""
    )
)

終わりに

Gemini 2.5 Flash を利甚した Vertex AI SDK for Python の基本的な䜿い方をたずめたした。
環境蚭定から始たり、最も基本的なテキスト生成、そしお Thinking Budget、マルチタヌンチャット、マルチモヌダル入力ずいった様々な機胜たで、䞀通りの䜿い方を確認いただけたかず思いたす。
ここでは実際の出力を蚘茉したせんでしたが、ぜひご自身の環境で詊しおいただき、Gemini 2.5 Flash を䜓感しおみおください

参考
Vertex AI SDK for Python を䜿甚しおコヌドを蚘述する
Intro to Gemini 2.5 Flash