Google Gemini 1.5 API の機能、特徴、価格と使い方

Google Gemini 1.5 API の機能、特徴、価格と使い方

こんにちは!(株)Qualiteg テックブログです!

【2024年7月2日更新版】

本日は Google Gemini 1.5 Pro/ Gemini 1.5 Flash モデルの特徴、価格、Pythonをつかったテキスト生成について解説いたします。

Google Gemini とは

Google Geminiは、Googleが提供する生成AIプラットフォームです。高品質なテキスト生成を行うためのAPIを提供し、さまざまなアプリケーションで自然な言語生成を利用できます。Geminiは多くの業界で使用されており、コンテンツ作成、カスタマーサポート、チャットボット、マーケティング、教育など、幅広い用途に対応しています。

APIキーの取得方法

Google Geminiを利用するためには、APIキーが必要です。以下の手順でAPIキーを取得できます。

Google AI Studio にアクセスして、手順にしたがい、Get API key でAPIキーを作成します。

https://aistudio.google.com/


生成されたAPIキーをコピーして、安全な場所に保存します。

パッケージのインストール

Google Gemini 用のPython用パッケージが PyPIに準備されていますので、以下でインストールしましょう。

pip install google-generativeai

モデルの種類と特徴

最新(2024/7時点)の言語モデルは Gemini 1.5 となっており、Gemini 1.5 Pro と Gemini 1.5 Flash の2つのモデルが利用可能です。

Gemini 1.5 Flash は Gemini 1.5 Pro よりも小型軽量のモデルで、1.5 Pro を蒸留して作られました。FlashはProに近づく性能を持ちつつ、価格は 1/10 である点が注目点ですね。高精度が要求されるタスクには Proを。コスパ重視なら、Flashという選択肢になるでしょう。

Gemini 1.5 Flash Gemini 1.5 Pro
処理速度 非常に高速(サブセカンドの応答) Flashより遅い
コスト効率 高コスパ Gemini 1.5 Flashより10倍高額
コンテキストウィンドウ 最大100万トークン 最大200万トークン
マルチモーダル能力 テキスト、画像、音声、動画を処理可能 テキスト、画像、音声、動画を処理可能
主な用途 高速を要求されるタスク一般 高精度を要求されるタスク一般
性能 Proより劣るものの、Gemini 1.0 Ultraと同等の性能がある。 Flashより若干高い
入力処理能力 1時間のビデオ、11時間のオーディオ 1時間のビデオ、11時間のオーディオ
アーキテクチャ Proからの上流により軽量化 より大規模なモデル

https://ai.google.dev/gemini-api/docs/models/gemini?hl=ja

価格

価格を以下にまとめました。

項目 入力価格 出力価格
Gemini 1.5 Flash
gemini-1.5-flash-001
$0.35
(128,000トークンまで)
$0.70
(128,000以降)
$1.05
(128,000トークンまで)
$2.10
(128,000以降)
Gemini 1.5 Pro
gemini-1.5-pro-001
$3.50
(128,000トークンまで)
$7.00
(128,000以降)
$10.50
(128,000トークンまで)
$21.00
(128,000以降)

価格の特徴は以下のようになります

  1. Gemini 1.5 FlashはGemini 1.5 Proと比較して、大幅に低価格です。
  2. 両モデルとも、128,000トークンを超えると価格が2倍になります。
  3. 出力価格は入力価格の3倍に設定されています。
  4. Gemini 1.5 Proは、Gemini 1.5 Flashの10倍の価格設定になっています。

これらの価格設定は、Gemini 1.5 Proがより高度な機能や性能を持つ一方で、Gemini 1.5 Flashが効率的で経済的な選択肢として位置付けられていることを示しています。ユーザーは、必要な機能と予算に応じて適切なモデルを選択できます。

Gemini-1.5 pro について
https://ai.google.dev/gemini-api/docs/models/gemini?hl=ja#gemini-1.5-pro

Gemini 1.5 Flash について
https://ai.google.dev/gemini-api/docs/models/gemini?hl=ja#gemini-1.5-flash-expandable

バージョン名と安定板

Geminiは以下のようなモデル名形式となります。

種類 説明 モデル名形式
最新 指定された世代とバリエーションの最新バージョン。基盤モデルは定期的に更新され、プレビュー版の場合もある。探索的テストやプロトタイプ用。 <model>-<generation>-<variation>-latest gemini-1.0-pro-latest
最新の安定版 指定された世代とバリエーションの最新の安定版。 <model>-<generation>-<variation> gemini-1.0-pro
安定版 特定の安定版モデル。変更されない。ほとんどの本番環境アプリで使用。 <model>-<generation>-<variation>-<version> gemini-1.0-pro-001

生成パラメータ一覧

以下のコードのように指定することのできる生成パラメータ一覧

# 生成AIのパラメータ設定
generation_config = {
    "max_output_tokens": 8192,  # 生成される最大トークン数を設定
    "temperature": 1,  # 生成の多様性を制御する温度パラメータを設定
    "top_p": 0.98,  # トークンの選択に使用する確率の閾値を設定
}
パラメータ名 説明
temperature 予測のランダム性を制御する 省略可: float
top_p 指定した場合、Nucleusサンプリングを使用する 省略可: float
top_k 指定した場合、トップKサンプリングを使用する 省略可: float
candidate_count 生成する候補の数 省略可: int
max_output_tokens メッセージごとに生成する出力トークンの最大数 省略可: int
stop_sequences 停止シーケンス 省略可: List[string]
presence_penalty 正のペナルティ 省略可: float
frequency_penalty 頻度のペナルティ 省略可: float

ソースコード

Pythonを用いて Google Gemini を呼び出してみましょう。

とくにGemini では、 SafetySettings を詳細に設定ができるため、その部分を手厚くソースコードに盛り込みました。

import google.generativeai as genai
from google.generativeai.types import HarmCategory, HarmBlockThreshold

API_KEY = "取得したキー"
genai.configure(api_key=API_KEY)

model_id = "gemini-1.5-flash-001"  # input 0.35/MTokens - output 1.05/MTokens

# モデル情報の初期化
model = genai.GenerativeModel(
    model_id,
)

# 生成AIのパラメータ設定
generation_config = {
    "max_output_tokens": 8192,
    "temperature": 1,
}
safety_settings = {
    HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,  # ハラスメントを含むコンテンツ
    HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,  # 悪意のある表現やコンテンツ
    HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,  # 性的描写が露骨なコンテンツ
    HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,  # 危険なコンテンツ
}

response = model.generate_content(
    ["""浅草のオススメスポットは?"""],
    generation_config=generation_config,
    safety_settings=safety_settings,
    stream=False,
)

print(response.text)

コード実行結果 例

浅草は、東京で最も古いエリアの一つで、歴史的な建造物、伝統的な文化、活気に満ちた雰囲気を楽しむことができます。おすすめのスポットはたくさんありますが、いくつか例を挙げますね!

定番スポット:

  • 浅草寺: 東京最古の寺院で、雷門、五重塔など見どころ満載です。境内でのおみくじやお守りの購入もおすすめです。
  • 仲見世通り: 浅草寺へ向かう参道にある、伝統的なお土産屋さんや食べ歩きのお店が立ち並ぶ賑やかな通りです。
  • 東京スカイツリー: 浅草から少し離れますが、展望台から浅草の街並みを一望できます。

ちょっとディープな浅草:

  • 浅草演芸ホール: 昔懐かしい寄席を楽しむことができます。
  • 浅草花やしき: レトロな遊園地で、大人も子供も楽しめます。
  • 隅田川: 舟遊びや屋形船で、風情ある景色を満喫できます。
  • 浅草文化観光センター: 浅草の歴史や文化について学べます。

美味しいもの:

  • 人形焼き: 浅草寺周辺には、様々な種類の人形焼きのお店があります。
  • 天ぷら: 揚げたての天ぷらは格別です。
  • 蕎麦: 老舗の蕎麦屋で、伝統的な蕎麦の味を堪能できます。
  • もんじゃ焼き: 熱々の鉄板で自分で焼きながら食べる、浅草名物です。

その他:

  • 浅草ROX: 映画館やレストランなどが入った複合施設です。
  • 浅草ビューホテル: 浅草寺やスカイツリーを一望できるホテルです。

時期によっておすすめも変わります:

  • 春: 桜の季節には、隅田川沿いが美しく、お花見を楽しむことができます。
  • 夏: 隅田川花火大会は、夏の風物詩です。
  • 秋: 紅葉シーズンには、浅草寺周辺が美しく色づきます。
  • 冬: 浅草寺では、年末年始のイベントが開催されます。

さらに、あなたの興味に合わせておすすめを提案できます。

  • 歴史に興味があるなら: 浅草寺、浅草文化観光センター、隅田川
  • 伝統芸能に興味があるなら: 浅草演芸ホール
  • ショッピングに興味があるなら: 仲見世通り、浅草ROX
  • グルメに興味があるなら: 人形焼き、天ぷら、蕎麦、もんじゃ焼き

ぜひ、あなたの興味に合わせて浅草を満喫してください!

SafetySettings の定義

Google Gemini APIのSafety Settingsは、AIモデルの出力を制御し、不適切なコンテンツを制限するための機能です。

本機能は安全で適切なAIコンテンツを生成する上で重要で、他のLLM APIにはまだ本格的に実装されていない機能です。

Safety Settingsでは、以下のカテゴリーに対して設定が可能です

指定できるカテゴリー一覧

列挙型
HARM_CATEGORY_UNSPECIFIED カテゴリが指定されていない
HARM_CATEGORY_HARASSMENT ハラスメントコンテンツ
HARM_CATEGORY_HATE_SPEECH 悪意のある表現やコンテンツ
HARM_CATEGORY_SEXUALLY_EXPLICIT 性的描写が露骨なコンテンツ
HARM_CATEGORY_DANGEROUS_CONTENT 危険なコンテンツ

指定できるフィルタリングレベル一覧

各カテゴリーに対して、以下の4段階のフィルタリングレベルを設定できます

  • HIGH(高)
  • MEDIUM(中)
  • LOW(低)
  • NEGLIGIBLE(無視できる程度)

APIは、コンテンツの危険性の確率に基づいてブロックを行います。

実際の値は以下のとおりです。

しきい値 概要 詳細
BLOCK_NONE ブロックなし 安全でないコンテンツが表示される可能性にかかわらず常に表示
BLOCK_ONLY_HIGH 少量をブロック 安全でないコンテンツである可能性が高い場合にブロック
BLOCK_MEDIUM_AND_ABOVE 一部をブロック 安全でないコンテンツが発生する可能性が中程度または高い場合にブロック
BLOCK_LOW_AND_ABOVE ほとんどをブロック 安全でないコンテンツが発生する可能性が低い、中程度、高い場合はブロック
HARM_BLOCK_THRESHOLD_UNSPECIFIED なし しきい値が指定されていない。デフォルトのしきい値を使用してブロック

当然ですが、一部の重大な危害(児童の安全を脅かすコンテンツなど)は常にブロックされ、調整はできません。SafetySettingをゆるくしても最低限の保護はかかるということですね。

ストリーミングで受信する方法

さきほどは、1回で結果を取得する方法をみましたが、今後はストリーミングで受信する方法をみてみましょう。

以下のように stream=True にするだけでストリーミング受信が可能です。


response = model.generate_content(
    ["""こんにちは"""],
    generation_config=generation_config,
    safety_settings=safety_settings,
    stream=True,
)
for chunk in response:
    print(chunk)

逐次ジェネレーター経由で受け取ったchunk は以下のような構造をしています

GenerateContentResponse(
    done=True,
    iterator=None,
    result=protos.GenerateContentResponse({
      "candidates": [
        {
          "content": {
            "parts": [
              {
                "text": "\u3053\u3093\u306b\u3061\u306f"
              }
            ],
            "role": "model"
          },
          "finish_reason": "STOP",
          "index": 0
        }
      ],
      "usage_metadata": {
        "prompt_token_count": 2,
        "candidates_token_count": 1,
        "total_token_count": 3
      }
    }),
)

この構造を踏まえて、chunkにある各種プロパティを取得してみましょう。

import google.generativeai as genai
from google.generativeai.types import HarmCategory, HarmBlockThreshold

API_KEY = "取得したAPIキー"
genai.configure(api_key=API_KEY)

model_id = "gemini-1.5-flash-001"  # input 0.35/MTokens - output 1.05/MTokens

# モデル情報の初期化
model = genai.GenerativeModel(
    model_id,
)

# 生成AIのパラメータ設定
generation_config = {
    "max_output_tokens": 8192,
    "temperature": 1,
}
safety_settings = {
    HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,  # ハラスメントを含むコンテンツ
    HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,  # 悪意のある表現やコンテンツ
    HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,  # 性的描写が露骨なコンテンツ
    HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,  # 危険なコンテンツ
}

response = model.generate_content(
    ["""こんにちは"""],
    generation_config=generation_config,
    safety_settings=safety_settings,
    stream=True,
)
for chunk in response:

    candidates = chunk.candidates
    usage_metadata = chunk.usage_metadata

    for candidate in candidates:
        content = candidate.content
        content_parts = content.parts
        role = content.role
        finish_reason = candidate.finish_reason
        index = candidate.index
        safety_ratings = candidate.safety_ratings

        for part in content_parts:
            text = part.text

            # 各プロパティを変数に格納
            candidate_content_text = text
            candidate_content_role = role
            candidate_finish_reason = finish_reason
            candidate_index = index
            candidate_safety_ratings = safety_ratings
            usage_prompt_token_count = usage_metadata.prompt_token_count
            usage_candidates_token_count = usage_metadata.candidates_token_count
            usage_total_token_count = usage_metadata.total_token_count

            # 変数の出力
            print(f"Text: {candidate_content_text}")
            print(f"Role: {candidate_content_role}")
            print(f"Finish Reason: {candidate_finish_reason}")
            print(f"Index: {candidate_index}")
            print(f"Safety Ratings: {candidate_safety_ratings}")
            print(f"Prompt Token Count: {usage_prompt_token_count}")
            print(f"Candidates Token Count: {usage_candidates_token_count}")
            print(f"Total Token Count: {usage_total_token_count}")
            print("----------")

上記コードを実行すると、以下のような出力結果が得られます。

Text: こんにちは
Role: model
Finish Reason: 1
Index: 0
Safety Ratings: []
Prompt Token Count: 2
Candidates Token Count: 1
Total Token Count: 3
----------
Text: ! 何かお手伝いできますか? 

Role: model
Finish Reason: 1
Index: 0
Safety Ratings: [category: HARM_CATEGORY_SEXUALLY_EXPLICIT
probability: NEGLIGIBLE
, category: HARM_CATEGORY_HATE_SPEECH
probability: NEGLIGIBLE
, category: HARM_CATEGORY_HARASSMENT
probability: NEGLIGIBLE
, category: HARM_CATEGORY_DANGEROUS_CONTENT
probability: NEGLIGIBLE
]
Prompt Token Count: 2
Candidates Token Count: 10
Total Token Count: 12
----------

その他の特徴

JSON形式レスポンスに対応

https://ai.google.dev/gemini-api/docs/api-overview?hl=ja#json

ファインチューニング

https://ai.google.dev/gemini-api/docs/model-tuning?hl=ja

コンテキストキャッシュ

https://ai.google.dev/gemini-api/docs/caching?hl=ja&lang=python

まとめ

いかがでしたでしょうか。Google の最新 LLM API である Gemini 1.5 についてその概要やソースコード実装方法についてみてきました。

(株)Qualiteg では Gemini API を利用した本格的なチャットボットや LLMサービスを超短納期で構築できる SDK,ツールキット「ChatStream」や、関連コンサルティングを提供しています。

商用LLMアプリケーション、サービス構築をご検討の折は、どうぞお気軽にこちらのお問い合わせフォームまでご連絡くださいませ。

LLMスポットコンサルご好評です

また、LLMサービス開発、市場環境、GPUテクノロジーなどビジネス面・技術面について1時間からカジュアルに利用できるスポットコンサルも実施しておりますのでご活用くださいませ。

(繁忙期、ご相談内容によっては、お受けできない場合がございますので、あらかじめご了承ください)

Read more

発話音声からリアルなリップシンクを生成する技術 第4回:LSTMの学習と限界、そしてTransformerへ

発話音声からリアルなリップシンクを生成する技術 第4回:LSTMの学習と限界、そしてTransformerへ

1. 位置損失 (L_position) - 口の形の正確さ 時間 口の開き 正解 予測 L_position = Σᵢ wᵢ × ||y_pred - y_true||² 各時点での予測値と正解値の差を計算。重要なパラメータ(顎の開き、口の開き)には大きな重みを付けます。 jaw_open: ×2.0 mouth_open: ×2.0 その他: ×1.0 2. 速度損失 (L_velocity) - 動きの速さ 時間 速度 t→t+1 v = y[t] -

By Qualiteg 研究部, Qualiteg コンサルティング
大企業のAIセキュリティを支える基盤技術 - 今こそ理解するActive Directory 第1回 基本概念の理解

大企業のAIセキュリティを支える基盤技術 - 今こそ理解するActive Directory 第1回 基本概念の理解

こんにちは! 今回から数回にわたり Active Directory について解説してまいります。 Active Directory(AD:アクティブディレクトリー)は、Microsoft が開発したディレクトリサービスであり、今日の大企業における IT インフラストラクチャーにおいて、もはやデファクトスタンダードと言っても過言ではない存在となっており、組織内のユーザー、コンピューター、その他のリソースを一元的に管理するための基盤として広く採用されています。 AIセキュリティの現実:単独では機能しない ChatGPTやClaudeなどの生成AIが企業に急速に普及する中、「AIセキュリティ」という言葉が注目を集めています。情報漏洩の防止、不適切な利用の検知、コンプライアンスの確保など、企業が取り組むべき課題は山積みです。 しかし、ここで注意しなければいけない事実があります。それは、 AIセキュリティソリューションは、それ単体では企業環境で限定的な効果しか期待できない ということです。 企業が直面する本質的な課題 AIセキュリティツールを導入する際、企業のIT部門

By Qualiteg コンサルティング
自治体総合フェア2025に出展いたしました

自治体総合フェア2025に出展いたしました

こんにちは! 先週開催された自治体総合フェア2025に出展いたしましたので、写真で様子をふりかえりながら簡単にレポートいたします! 自治体総合フェア2025 開催概要 自治体総合フェアは公民連携の総合展示会で今年はは2025/7/16~18まで東京ビッグサイトにて開催されました。 株式会社 Qualiteg の出展内容 当社からは4名体制でAIアバター動画生成サービス「MotionVox™」をはじめ、LLMセキュリティソリューション「LLM-Audit™」、企業・自治体向けセキュアチャットサービス「Bestllam🄬」の展示をさせていただきました。 デモ内容 当日のご紹介内容の一部をご紹介いたします MotionVox™ MotionVox は、まるで、本物の人間のようなフォトリアリスティックなアバター動画を生成するサービスです。 これまでから機能を大幅拡張した MotionVox 2.0 をお披露目いたしました。 MotionVox 2.0では、以下のようなフィーチャーを追加いたしました! * まるで人間! リアリティをさらに向上したアバター *

By Qualiteg ビジネス開発本部 | マーケティング部
発話音声からリアルなリップシンクを生成する技術 第3回:wav2vec特徴量から口形パラメータへの学習

発話音声からリアルなリップシンクを生成する技術 第3回:wav2vec特徴量から口形パラメータへの学習

こんにちは! 前回までの記事では、 * wav2vecを用いた音声特徴量抽出の仕組み(第1回)と、 * リップシンク制作における累積ドリフトの補正技術(第2回) について解説してきました。今回はいよいよ、これらの技術を統合して実際に音声から口の動きを生成する核心部分に踏み込みます。 本記事で扱うのは、wav2vecが抽出した768次元の音響特徴量を、26個の口形制御パラメータの時系列データに変換する学習プロセスです。これは単なる次元削減ではありません。音の物理的特性を表す高次元ベクトルから、人間の口の動きという全く異なるモダリティへの変換なのです。この変換を実現するには、音韻と視覚的な口形の間にある複雑な対応関係を、ニューラルネットワークに学習させる必要があります。 特に重要なのは、この対応関係が静的ではなく動的であるという点です。同じ音素でも前後の文脈によって口の形が変わり、さらに音が聞こえる前から口が動き始めるという時間的なズレも存在します。これらの複雑な現象をどのようにモデル化し、学習させるのか。本記事では、LSTMとTransformerという2つの強力なアプロー

By Qualiteg 研究部