🤖

Google AI Studio & Vertex AI Studio:Gemini API 利用方法の違い

2024/08/21に公開

はじめに

こんにちは!SRE 部門所属の小林由暁です!
今回は、Gemini API を活用したアプリケーション開発を始めたい方向けに、Gemini API 開発環境を 2 種類紹介します。
これから Gemini API を用いたアプリケーション開発を始めたい方や、既に利用されている方にも、参考になる情報があるかと思います。
最後まで確認していただけますと幸いです。

この記事のターゲット

  • これから Gemini を利用したアプリケーション開発を実施したい方
  • Gemini API を利用した情報が、基盤モデルの学習に使われるか心配な方
  • Google AI Studio と Vertex AI Studio の違いが分からない方

Google AI Studio, Vertex AI Studio とは

Gemini API を用いたアプリケーションの開発には、Google AI Studio を用いる方法と、Vertex AI Studio を用いる方法の 2 種類があります。
以下、それぞれの GUI 画面となります。

Google AI Studio の GUI 画面

alt

Vertex AI Studio の GUI 画面

alt

比較表

以下は、Google AI Studio と Vertex AI Studio の違いを、まとめた表になります。

Google AI Studio Vertex AI Studio
利用可能なモデル ※1 Gemini 1.0 Pro、Gemini 1.5 Pro、Gemini 1.5 Flash 等 Gemini 1.0 Pro、Gemini 1.5 Pro、Gemini 1.5 Flash 等
利用するアカウント Google アカウント Google アカウント ※2
認証方法 API キー Google Cloud サービス アカウント
API と SDK 以下の言語で API を利用可能
・Python
・Node.js
・Android(Kotlin/Java)
・Swift
・Go
以下の言語で SDK を利用可能
・Python
・Node.js
・Java
・Go
料金 ※3 無料枠あり 新規ユーザー向けに $300 の Google Cloud クレジット
割り当て(1 分あたりのリクエスト数) 60(増加リクエスト可能) リクエストに応じて増加
(デフォルト: 60)
エンタープライズ サポート × ・顧客暗号鍵
・Virtual Private Cloud
・データ所在地
・アクセスの透明性
・アプリケーションのホスティングに対応するスケーラブルなインフラストラクチャ
・データベースとデータストレージ
MLOps × Vertex AI で MLOps を実施可能 (例: モデル評価、モデルモニタリング、モデル管理)
基盤モデルへのデータ利用について ※4 ・無料枠の場合、基盤モデルの学習にデータを利用
・有料枠の場合、データ利用対象外
データ利用対象外

※1 : 2024年8月時点での情報となります。
※2 : Google Cloud機能の有効化が必要、課金が必要
※3 : 詳細な料金体系については、後述する「料金について」にて解説
※4 : 詳細は、後述する「入力されたプロンプト、回答を含むデータの、基盤モデルへの利用について」にて解説

開発規模によって、利用する環境が異なるのが、ポイントとなります。開発するアプリケーションをGoogle Cloud 上の他サービスと、シームレスに連携する場合や、アプリケーションとして公開する場合には、Vertex AI Studio を用いた開発を推奨します。
それとは逆に、比較的小規模である場合や、個人で Gemini API の動作を確認したい場合などには、Google AI Studio を利用するのが良いかと思います。
ユースケースによって、利用する開発環境は変わりますが、Google AI Studio を利用する場合は、後述する「学習対象について」を理解した上で、ご利用してください。

また、Google AI Studio を利用して作成した「プロンプト設計」は、Vertex AI Studio に移行することが可能です。

alt
※上記に示す赤枠内のリンクから、移行することが可能

料金について

料金についてですが、Google AI Studio と Vertex AI Studio で違いがあるため、紹介します。以下は、Gemini 1.5 Pro をベースに紹介しています。
Google AI Studio を利用した場合は、テキストや音声、動画であってもトークンに換算されて料金を計算します。
Vertex AI Studio の場合は、テキストや音声、動画といったリクエストの種類に応じて計算方法が異なるため、確認が必要です。

  • Google AI Studio (Gemini 1.5 Pro)

    • 入力(100 万トークンあたり)
      • 128,000 トークン以下の場合は $3.50
      • 128,000 トークン以上の場合は $7.00
    • コンテキスト キャッシュ(100 万トークンあたり)
      • 128,000 トークン以下の場合は $0.875
      • 128,000 トークン以上の場合は $1.75
    • 出力(100 万トークンあたり)
      • 128,000 トークン以下の場合は $10.50
      • 128,000 トークン以上の場合は $21.00
    • チューニング
      • 無料
  • Vertex AI Studio (Gemini 1.5 Pro)

    • 画像入力(マルチモーダル)
      • 128,000 トークン以下の場合は $0.001315 / 画像
      • 128,000 トークン以上の場合は $0.00263 / 画像
    • 動画入力(マルチモーダル)
      • 128,000 トークン以下の場合は $0.001315 / 秒
      • 128,000 トークン以上の場合は $0.00263 / 秒
    • テキスト入力(マルチモーダル)
      • 128,000 トークン以下の場合は $0.00125 / 1,000 文字
      • 128,000 トークン以上の場合は $0.0025 / 1,000 文字
    • 音声入力(マルチモーダル)
      • 128,000 トークン以下の場合は $0.000125 / 秒
      • 128,000 トークン以上の場合は $0.00025 / 秒
    • テキスト入力
      • 128,000 トークン以下の場合は $0.00375 / 1,000 文字
      • 128,000 トークン以上の場合は $0.0075 / 1,000 文字

入力されたプロンプト、回答を含むデータの、基盤モデルへの利用について

「Google AI Studio, Vertex AI Studio とは」内の表にて取り上げた内容ですが、Google AI Studio と Vertex AI Studio では、基盤モデルに対するデータ(入力されたプロンプト、回答)の使用方法に違いがあります。ここでは、ドキュメントベースで解説します。

Google AI Studio の基盤モデルへのデータ利用について

Google AI Studio を利用する場合は、無料サービスと有料サービスの2種類があります。各サービスごとに、データの取り扱いが変わっています。以下の内容は、データの取り扱い方法について、ドキュメントの記載の内容から一部抜粋しています。

有料サービスの場合

有料サービスを使用している場合、Google がプロダクトの改善のためにユーザーのプロンプト( 関連するシステム指示、キャッシュに保存されたコンテンツのほか、画像、 動画、ドキュメントなどのファイルを含む)や回答を使用することはなく、 プロンプトや回答は Google がデータ処理者となるサービスのデータ処理追加条項に沿って処理されます。 このデータは、Google またはその代理人が施設を運営する任意の国で一時的に保管または キャッシュされることがあります。

無料サービスの場合

Google は、プライバシー ポリシーに沿って、Google のエンタープライズ機能、プロダクト、サービスを含む、Google のプロダクト、サービス、機械学習技術の提供、向上、および開発のためにこのデータを使用します。
品質の向上とプロダクトの改善のため、人間のレビュアーがユーザーの API 入出力を確認し、 注釈を付け、処理を行うことがあります。このプロセスの一環として、Google は プライバシーを保護するための措置を講じます。これには、 レビュアーが確認したり注釈を付けたりする前に、このデータをユーザーの Google アカウント、API キー、Cloud プロジェクトから切り離すことが 含まれます。無料サービスには機密情報や個人情報を送信しないでください

ドキュメントでも周知されている通り、無料サービスを利用する場合は、入力されたプロンプト、回答を含むデータが基盤モデルの学習に利用されます。有料サービスを利用中の場合は、基盤モデルの学習にデータは利用されません。
現在利用中のサービスは、「Get API Key」内の利用中の API Key から、確認することが可能です。

alt
※赤枠で囲まれた内容のプランが、有料か無料かを確認する

Vertex AI Studio の基盤モデルへのデータ利用について

Vertex AI Studio を利用している場合は、基盤モデルの学習にデータを利用しません。先ほどと同様に、ドキュメントより一部抜粋します。
また、Vertex AI に関しては、生成 AI サービスとして、Imagen 等や、Model Garden のモデルを利用する方法もありますが、こちらも同様に、基盤モデルの学習にデータを利用しません。

デフォルトでは、Google Cloud は基盤モデルのトレーニングに顧客データを使用しません。お客様は Google Cloud の基盤モデルを使用できますが、その際、お客様のプロンプト、レスポンス、およびアダプタモデルのトレーニング データは、基盤モデルのトレーニングに使用されません。

コード比較

最後に、既存コード内の特徴から分かる、プラットフォームの見分け方について解説します。既存コードから利用中の開発環境を把握していただき、「学習対象について」の章と合わせて、基盤モデルの学習にデータが利用されているかを確認してください。
以下の表をご参考にしていただければと思います。

Google AI Studio Vertex AI Studio
API Key の有無 ×
プロジェクト ID の有無 ×
利用しているパッケージ(Python) google.generativeai vertexai
利用しているパッケージ(Node.js) @google/generative-ai @google-cloud/vertexai
API リクエスト先 https://generativelanguage.googleapis.com/... https://${API_ENDPOINT}/...

Google AI Studio を利用した場合のサンプルコード

Python
import os
import google.generativeai as genai

genai.configure(api_key=os.environ["GEMINI_API_KEY"])

# Create the model
generation_config = {
  "temperature": 1,
  "top_p": 0.95,
  "top_k": 64,
  "max_output_tokens": 8192,
  "response_mime_type": "text/plain",
}

model = genai.GenerativeModel(
  model_name="gemini-1.5-flash",
  generation_config=generation_config,
)

chat_session = model.start_chat(
  history=[
  ]
)

response = chat_session.send_message("INSERT_INPUT_HERE")

print(response.text)
cURL
API_KEY="YOUR_API_KEY"

curl \
  -X POST https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${API_KEY} \
  -H 'Content-Type: application/json' \
  -d @<(echo '{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "INSERT_INPUT_HERE"
        }
      ]
    }
  ],
  "generationConfig": {
    "temperature": 1,
    "topK": 64,
    "topP": 0.95,
    "maxOutputTokens": 8192,
    "responseMimeType": "text/plain"
  }
}')
Node.js

const {
  GoogleGenerativeAI,
  HarmCategory,
  HarmBlockThreshold,
} = require("@google/generative-ai");

const apiKey = process.env.GEMINI_API_KEY;
const genAI = new GoogleGenerativeAI(apiKey);

const model = genAI.getGenerativeModel({
  model: "gemini-1.5-flash",
});

const generationConfig = {
  temperature: 1,
  topP: 0.95,
  topK: 64,
  maxOutputTokens: 8192,
  responseMimeType: "text/plain",
};

async function run() {
  const chatSession = model.startChat({
    generationConfig,
    history: [
    ],
  });

  const result = await chatSession.sendMessage("INSERT_INPUT_HERE");
  console.log(result.response.text());
}

run();

Vertex AI Studio を利用した場合のサンプルコード

Python
import base64
import vertexai
from vertexai.generative_models import GenerativeModel, Part
import vertexai.preview.generative_models as generative_models


def multiturn_generate_content():
  vertexai.init(project="{Project-ID}", location="us-central1")
  model = GenerativeModel(
    "gemini-1.5-flash-001",
  )
  chat = model.start_chat()


generation_config = {
    "max_output_tokens": 8192,
    "temperature": 1,
    "top_p": 0.95,
}

multiturn_generate_content()
cURL
cat << EOF > request.json
{
    "contents": [
    ],
    "generationConfig": {
        "maxOutputTokens": 8192,
        "temperature": 1,
        "topP": 0.95,
    },
}
EOF

PROJECT_ID="{Project-ID}"
LOCATION_ID="us-central1"
API_ENDPOINT="us-central1-aiplatform.googleapis.com"
MODEL_ID="gemini-1.5-flash-001"

curl \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://${API_ENDPOINT}/v1/projects/${PROJECT_ID}/locations/${LOCATION_ID}/publishers/google/models/${MODEL_ID}:streamGenerateContent" -d '@request.json'
Node.js
const {VertexAI} = require('@google-cloud/vertexai');

const vertex_ai = new VertexAI({project: '{Project-ID}', location: 'us-central1'});
const model = 'gemini-1.5-flash-001';

const generativeModel = vertex_ai.preview.getGenerativeModel({
  model: model,
  generationConfig: {
    'maxOutputTokens': 8192,
    'temperature': 1,
    'topP': 0.95,
  },
});


const chat = generativeModel.startChat({});

async function sendMessage(message) {
  const streamResult = await chat.sendMessageStream(message);
  process.stdout.write('stream result: ' + JSON.stringify((await streamResult.response).candidates[0].content) + '\n');
}

async function generateContent() {
}

generateContent();

参考リンク

https://ai.google.dev/gemini-api/terms?hl=ja#data-use-paid
https://cloud.google.com/vertex-ai/generative-ai/docs/data-governance?hl=ja#foundation_model_training

Discussion