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

PyCharmで npm start 実行時にIDEがサイレントクラッシュした事例と切り分け

PyCharmで npm start 実行時にIDEがサイレントクラッシュした事例と切り分け

こんにちは!Qualitegプロダクト開発部です! PyCharmの内蔵npmツールで npm start を実行した瞬間、何のエラーメッセージもなくIDEが消える。 再起動してもう一度試すとまた落ちる。ログを見ても手がかりがない——。 今回はこの「サイレントクラッシュ」に遭遇し、原因の絞り込みから回避策の確立まで至った過程を書き残しておきます。同じ現象で困っている方の参考になれば幸いです。 環境 項目 内容 OS Windows 10/11 PyCharm 2026.1(2023.1.6時代から連綿とUpdateをした状態) Python 3.11.4(venv使用) Node.js v25.2.1 プロジェクト Python + Node.js 混合構成 上記のとおり、PyCharmは執筆時点の最新版(2026.1)となります。 確認できたこと・推測していること まず最初に、

By Qualiteg プロダクト開発部
大企業のAIセキュリティを支える基盤技術 - 今こそ理解するActive Directory 第6回 よくある問題と解決方法

大企業のAIセキュリティを支える基盤技術 - 今こそ理解するActive Directory 第6回 よくある問題と解決方法

こんにちは、今回はシリーズ第6回トラブルシューティング - よくある問題と解決方法 について解説いたします! さて、前回(第5回)は、統合Windows認証がブラウザでどのように動作するかを解説しました。 「イントラネットゾーン」という概念を理解することで、同じサーバーでもURLの書き方(NetBIOS名、FQDN、IPアドレス)によって認証動作が変わる理由が明確になったかと思います。また、Chrome/Firefoxではデフォルトで統合認証が無効になっている理由と、グループポリシーによる一括設定方法も学びました。 しかし、設定が完璧なはずなのに「なぜかうまく動かない」という場面は、実際の現場では必ず訪れます。 「最近、ファイルサーバーへのアクセスが遅い」「金曜日は使えたのに、月曜日の朝にログインできない」「特定のサービスだけKerberosが失敗する」——これらはヘルプデスクに日々寄せられる典型的な問い合わせです。 原因はKerberosの失敗、時刻のずれ、SPNの設定ミス、DNS関連の問題など多岐にわたりますが、体系的にトラブルシューティングすることで必ず解決できます。

By Qualiteg コンサルティング, Qualiteg AIセキュリティチーム
AIエージェントを"事業に載せる"ために【第2回】AIエージェントの責任分解はなぜ難しいのか

AIエージェントを"事業に載せる"ために【第2回】AIエージェントの責任分解はなぜ難しいのか

— AI導入を"事業に載せる"ために、いま設計すべきこと(全3回) こんにちは!Qualitegコンサルティングチームです! 前回(第1回)では、Replit/Lemkin事件とDeloitte豪州政府報告書問題を通じて、AIエージェント導入の課題がモデル性能ではなく「権限・監査・責任の設計不在」にあることを見ました。 では、実際に事故が起きたとき、責任は誰が負うのでしょうか。第2回となる本記事では、法務・契約・組織の3つの観点から、AIエージェントの責任分解がなぜ難しいのかを構造的に整理します。 結論を先に言えば、法務だけでも契約だけでも組織論だけでも足りません。この3つを接続して設計しなければ、AIエージェントの責任分解は実務上機能しません。 1. 法的フレームワーク:複数の法理論が並走している AIエージェントが損害を出したとき、どの法理論で責任が問われるかについて、現時点でグローバルなコンセンサスは形成されていません。 Clifford Chanceの論考は、この状況の根本的な難しさを整理しています。法律は歴史的に、有害な行為がいつどのように発生したかを特定でき

By Qualiteg コンサルティング
AIエージェントを"事業に載せる"ために【第1回】

AIエージェントを"事業に載せる"ために【第1回】

AI導入事故は何を示しているのか — AI導入を"事業に載せる"ために、いま設計すべきこと(全3回) こんにちは!Qualitegコンサルティングチームです! AIエージェントを導入する企業が増える一方で、 「試してみる」段階から「事業に載せる」段階へ進める難しさ が、はっきり見え始めています。 本シリーズでは、AIエージェント導入を技術論だけでなく、責任分解・監査可能性・契約・運用統制を含む業務設計の問題として整理します。 全3回を通じて、「AIが賢いかどうか」ではなく、「AIを業務に載せるために何を設計するか」を考えていきます。 第1回となる本記事では、2025年に起きた2つの事例を出発点に、なぜいま「責任設計」が問題になっているのかを見ていきます。 上図は、本シリーズ全体で扱う論点の全体像です。 AIエージェントの導入は、技術的なモデル選定だけでは完結せず、権限設計、契約、監査、品質監視、保険、異常時対応まで含めた設計が必要になります。 第1回ではまず、なぜこうした設計が求められるようになったのかを、実際の事例から見ていきたいとおもいます なお、本シリー

By Qualiteg コンサルティング