発展LESSON 08

この教材で学ぶこと Vertex AI経由の利用と各提供方式を比較します。

Claude on Vertex AI — GCP 経由での Claude 活用

前提知識: Anthropic APIまたはBedrockの概要。本教材ではGCPでの設定と使い分けを扱います。


1. Vertex AI vs Anthropic API vs Bedrock

                    Anthropic API    Bedrock          Vertex AI
課金:               Anthropic        AWS              GCP
データ所在地:        Anthropic        AWS リージョン    GCP リージョン
既存インフラ:        なし             AWS 中心          GCP 中心
IAM/VPC統合:        なし             AWS IAM/VPC       GCP IAM/VPC
エンタープライズ契約: なし             AWS Organizations GCP Organizations
モデルの可用性:      最新・全て        一部              一部

選択基準:

  • GCP をメインで使っている組織 → Vertex AI
  • AWS をメインで使っている組織 → Bedrock
  • スタートアップ・個人開発 → Anthropic API 直接

2. セットアップ

# GCP 認証
gcloud auth login
gcloud config set project YOUR_PROJECT_ID

# Application Default Credentials の設定
gcloud auth application-default login

# 必要な API の有効化
gcloud services enable aiplatform.googleapis.com

# Python ライブラリのインストール
pip install anthropic[vertex]

3. 基本的な使い方

import anthropic

# Vertex AI 経由で Claude を使う
# Anthropic API とほぼ同じインターフェース
client = anthropic.AnthropicVertex(
    project_id="my-gcp-project",
    region="us-east5",  # Claude が利用可能なリージョン
)

# モデル名が Vertex AI 形式
message = client.messages.create(
    model="claude-opus-4-5",  # Vertex AI でのモデル名
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "GCP の BigQuery で大規模データを集計するSQLを書いてください。"}
    ]
)

print(message.content[0].text)
# ストリーミング
with client.messages.stream(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Cloud Run と GKE の使い分けを教えてください。"}]
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

4. GCP サービスアカウントでの認証

# Cloud Run や GCE などの GCP サービスから使う場合
# → サービスアカウントにロールを付与するだけで認証不要

# 必要な IAM ロール:
# roles/aiplatform.user

from google.oauth2 import service_account
import anthropic

# ローカル開発時のみ(Cloud Run では不要)
credentials = service_account.Credentials.from_service_account_file(
    "service-account.json",
    scopes=["https://www.googleapis.com/auth/cloud-platform"]
)

client = anthropic.AnthropicVertex(
    project_id="my-gcp-project",
    region="us-east5",
    credentials=credentials
)

5. Vertex AI でのモデル管理

# 利用可能なモデル(Vertex AI ではモデル ID が異なる場合がある)
# 最新情報は GCP コンソールで確認

VERTEX_MODELS = {
    "claude-opus-4-5": "最高性能・複雑なタスク",
    "claude-sonnet-4-5": "バランス型・推奨",
    "claude-haiku-4-5": "高速・軽量タスク"
}

# モデルのフォールバック(利用不可の場合の切り替え)
def create_message_with_fallback(prompt: str) -> str:
    models = ["claude-sonnet-4-5", "claude-haiku-4-5"]
    
    for model in models:
        try:
            response = client.messages.create(
                model=model,
                max_tokens=1024,
                messages=[{"role": "user", "content": prompt}]
            )
            return response.content[0].text
        except anthropic.APIStatusError as e:
            if "model" in str(e).lower():
                continue  # 次のモデルを試す
            raise
    
    raise RuntimeError("利用可能なモデルがありません")

6. Cloud Run + Vertex AI の構成例

# Cloud Run 上の FastAPI アプリから Vertex AI 経由で Claude を使う
from fastapi import FastAPI
import anthropic
import os

app = FastAPI()

# Cloud Run では GOOGLE_CLOUD_PROJECT が自動的に設定される
client = anthropic.AnthropicVertex(
    project_id=os.environ["GOOGLE_CLOUD_PROJECT"],
    region=os.environ.get("VERTEX_AI_REGION", "us-east5")
)

@app.post("/summarize")
async def summarize(text: str):
    response = client.messages.create(
        model="claude-sonnet-4-5",
        max_tokens=500,
        messages=[{
            "role": "user",
            "content": f"以下のテキストを3行で要約してください:\n\n{text}"
        }]
    )
    return {"summary": response.content[0].text}
# Cloud Run 用 Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]
# Cloud Run にデプロイ(サービスアカウントの権限が自動適用される)
gcloud run deploy claude-api \
  --image gcr.io/my-project/claude-api \
  --region asia-northeast1 \
  --service-account claude-runner@my-project.iam.gserviceaccount.com \
  --set-env-vars VERTEX_AI_REGION=us-east5 \
  --no-allow-unauthenticated

7. Bedrock との使い分け(実践的な判断基準)

GCP 側のリソースと Claude を連携したい:
  ✅ BigQuery のデータを分析させる → Vertex AI
  ✅ Cloud Storage のファイルを処理する → Vertex AI
  ✅ Cloud Run でホストしている → Vertex AI

AWS 側のリソースと Claude を連携したい:
  ✅ S3 データを処理する → Bedrock
  ✅ Lambda で呼び出す → Bedrock
  ✅ ECS でホストしている → Bedrock

既存の AWS/GCP インフラに合わせる:
  → それぞれのクラウドの Claude を使う(IAM 設定が楽)

コストと最新モデルを優先:
  → Anthropic API 直接(最も早く新モデルが使える)

🔗 関連資料