API活用
PythonからVertex AI APIを呼び出す
🎯 このフェーズの目標
- Google Gen AI SDK でGeminiを呼び出せる
- 認証の仕組みを理解する
- 簡単なアプリケーションを作成する
🆕 2025年12月時点のSDK情報
2025年6月より、Google Gen AI SDK(google-genai)が推奨されています。 旧SDK(vertexai.generative_models)は2026年6月に削除予定です。
| SDK | 状態 | パッケージ |
|---|---|---|
| Google Gen AI SDK | ✅ 推奨 | google-genai |
| Vertex AI SDK(旧) | ⚠️ 非推奨 | google-cloud-aiplatform |
📋 前提条件
- Phase 1 完了(Vertex AI Studio で動作確認済み)
- Python 3.9+ インストール済み
- Google Cloud SDK インストール済み(または Cloud Shell 使用)
Day 1-2 環境構築と認証設定
まずはローカル環境からVertex AI APIを呼び出せるようにします。
① 仮想環境の作成
# プロジェクトディレクトリを作成mkdir vertex-ai-testcd vertex-ai-test# venv作成python -m venv .venv# 有効化 (Windows PowerShell).venv\Scripts\activate# 有効化 (Mac/Linux)source .venv/bin/activate
ターミナルの先頭に (.venv) と表示されていればOKです。
② Google Cloud SDK のセットアップ
# gcloud CLIで認証gcloud auth logingcloud auth application-default login# プロジェクト一覧を確認gcloud projects list# プロジェクト設定(PROJECT_IDを自分のものに置き換え)gcloud config set project YOUR_PROJECT_ID# クォータプロジェクトも設定(警告が出た場合)gcloud auth application-default set-quota-project YOUR_PROJECT_ID
gcloud projects list で表示される PROJECT_ID 列の値を使います。
プロジェクト名(NAME)ではなく、ID(例: driven-current-480303-n8)を使用してください。
③ Python パッケージのインストール
# Google Gen AI SDK と dotenv をインストールpip install google-genai python-dotenv# requirements.txtを作成(他の人と共有用)pip freeze > requirements.txt
④ 環境変数の設定
プロジェクトIDなどの設定値は環境変数で管理します。.env ファイルを作成してください。
# .env ファイルを作成GCP_PROJECT_ID=your-project-id-hereGCP_LOCATION=us-central1
.env ファイルはGitにコミットしないでください。
.gitignore に .env を追加しておきましょう。
他の人の環境では pip install -r requirements.txt で同じパッケージをインストールできます。
⑤ 動作確認
importosfromdotenvimportload_dotenvfromimportgenai# 環境変数を読み込みload_dotenv()# クライアント初期化(Vertex AI モード)client = genai.Client(vertexai=True,project=os.getenv("GCP_PROJECT_ID"),location=os.getenv("GCP_LOCATION"))# モデル呼び出しresponse = client.models.generate_content(model="gemini-2.5-flash",contents="こんにちは!")print(response.text)
vertexai=True を指定すると Vertex AI 経由で API を呼び出します。
認証は gcloud auth application-default login で設定した情報が自動的に使われます。
📋 実行例を見る
こんにちは!何かお手伝いできることはありますか?
🔧 トラブルシューティング
「Permission denied」エラー
→ gcloud auth login と gcloud auth application-default login の両方を実行したか確認
「Quota project」警告
→ gcloud auth application-default set-quota-project YOUR_PROJECT_ID を実行
「API not enabled」エラー
→ Phase 1 で「Vertex AI API を有効にする」を実行したか確認。または gcloud services enable aiplatform.googleapis.com
Day 3-4 基本的なAPI呼び出し
様々なパターンでAPIを呼び出してみましょう。
① System Instruction 付き
importosfromdotenvimportload_dotenvfromimportgenaifromgoogle.genaiimporttypesload_dotenv()client = genai.Client(vertexai=True,project=os.getenv("GCP_PROJECT_ID"),location=os.getenv("GCP_LOCATION"))response = client.models.generate_content(model="gemini-2.5-flash",contents="今日の調子はどう?",config=types.GenerateContentConfig(system_instruction="あなたは関西弁で話すAIです。"))print(response.text)
📋 実行例を見る
絶好調やで! なんでも聞いてや! あんたはどうなん? ええ感じ?😁 ② パラメータ設定
response = client.models.generate_content(model="gemini-2.5-flash",contents="Pythonでフィボナッチ数列を計算する関数を書いて",config=types.GenerateContentConfig(temperature=0.1,# 創造性(低め)max_output_tokens=1024,# 最大出力トークンtop_p=0.8,# 多様性))print(response.text)
③ マルチモーダル(画像入力)
importos, base64fromdotenvimportload_dotenvfromimportgenaifromgoogle.genaiimporttypesload_dotenv()client = genai.Client(vertexai=True,project=os.getenv("GCP_PROJECT_ID"),location=os.getenv("GCP_LOCATION"))# 画像をBase64で読み込むwithopen("image.png","rb")asf:image_data = base64.b64encode(f.read()).decode()# 画像とテキストを一緒に送信response = client.models.generate_content(model="gemini-2.5-flash",contents=[types.Part.from_bytes(data=base64.b64decode(image_data),mime_type="image/png"),"この画像を説明して"])print(response.text)
📋 実行例を見る(Vertex AI Studioのスクリーンショットを入力)
これは、Vertex AIのチャットインターフェースのスクリーンショットです。
画像には以下の要素が見られます:
1. ヘッダー: 「Vertex AI / スタジオ / チャット」と表示
2. サイドバー: 新しいチャットを開始するための「+」ボタン
3. チャット履歴: 「むかしむかし」で始まる物語の書き出しを複数生成
4. 評価ボタン: 👍、👎などのAI応答を評価する機能
全体として、AIがユーザーの指示に基づいて物語の書き出しを複数パターン生成し、その結果がチャット形式で表示されている様子を示しています。 Phase 1 で Vertex AI Studio で試したことが、すべてコードで再現できます。 Studio で動作確認 → コード化という流れがおすすめです。
💡 Tips: Thinking モードと response.text
gemini-2.5-flash はコード生成などの複雑なタスクで
内部的に「思考(Thinking)」を行います。この場合、response.text が
None を返すことがあります。
# response.text が None の場合のフォールバックdefget_response_text(response):"""Thinkingモデル対応のテキスト取得"""ifresponse.text:returnresponse.text# Thinkingモードの場合、最後のpartにテキストがあるreturnresponse.candidates[0].content.parts[-1].text# 使用例response = client.models.generate_content(model="gemini-2.5-flash",contents="Pythonでフィボナッチ数列を計算する関数を書いて")print(get_response_text(response))
Gemini 2.5 の Thinking モードでは、応答が複数の parts に分かれます。
最初の parts に「思考過程」、最後の parts に「実際の回答」が入ります。
response.text は単一partの場合のショートカットなので、
複数partsでは None になります。
📋 実行例を見る(フィボナッチ数列のコード生成)
Pythonでフィボナッチ数列を計算する関数はいくつかのアプローチで実装できます。 フィボナッチ数列は、以下のように定義されます。 * F(0) = 0 * F(1) = 1 * F(n) = F(n-1) + F(n-2) (n >= 2の場合) ### 方法1: ループ(反復処理)を使う方法 - 最も一般的で効率的deffibonacci_iterative(n):"""ループを使ってN番目のフィボナッチ数を計算します。"""ifn == 0:return0elifn == 1:return1a, b = 0, 1for_inrange(2, n + 1):a, b = b, a + breturnb# 使用例print(f"F(10) ={fibonacci_iterative(10)}")# 出力: F(10) = 55### 方法2: メモ化再帰、方法3: ジェネレータ... など複数の実装方法も提案されます
※ Thinkingモードでは、コード生成など複雑なタスクで詳細な回答が生成されます。
Day 5-7 ミニアプリを作ってみる
学んだことを活かして、簡単なアプリケーションを作成しましょう。
例: シンプルなチャットボット
importosfromdotenvimportload_dotenvfromimportgenaifromgoogle.genaiimporttypesload_dotenv()client = genai.Client(vertexai=True,project=os.getenv("GCP_PROJECT_ID"),location=os.getenv("GCP_LOCATION"))# チャット履歴を保持chat_history = []system_instruction ="あなたは親切なAIアシスタントです。"whileTrue:user_input = input("あなた: ")ifuser_input.lower()in["quit","exit"]:break# ユーザーメッセージを履歴に追加chat_history.append(types.Content(role="user",parts=[types.Part.from_text(text=user_input)]))# APIリクエストresponse = client.models.generate_content(model="gemini-2.5-flash",contents=chat_history,config=types.GenerateContentConfig(system_instruction=system_instruction))# アシスタント応答を履歴に追加chat_history.append(types.Content(role="model",parts=[types.Part.from_text(text=response.text)]))print("AI: "+ response.text +"\n")
📋 実行例を見る(履歴保持の確認)
あなた:もしもしAI:はい、なんでしょうか?何かお手伝いできることはありますか?あなた:今日は何曜日?AI:今日は 水曜日 です。あなた:昨日は?AI:昨日は 火曜日 でした。あなた:最初の質問は何だったか覚えてる?AI:はい、覚えていますよ!最初の質問は「もしもし」でした。それに対して私は「はい、なんでしょうか?...」とお答えしました。
※ chat_history に履歴を保持することで、AIが過去の会話を記憶しています。
発展課題
📄 ドキュメント要約ツール
テキストファイルを読み込んで要約する CLI ツールを作成
🌐 Streamlit でWeb UI
Streamlit を使ってブラウザで動くチャットアプリを作成
📧 メール下書き生成
要点を入力するとビジネスメールの下書きを生成
🔄 翻訳ツール
日本語↔英語の翻訳を行うシンプルなツール
💰 このフェーズのコスト目安
| 項目 | 目安 |
|---|---|
| Gemini 2.5 Flash API | 〜$5(開発・テスト程度) |
| Cloud Shell(無料枠) | $0 |
$300 の無料クレジット内で十分に学習できます。