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

ディープラーニングにおけるEMA(Exponential Moving Average)

ディープラーニングにおけるEMA(Exponential Moving Average)

こんにちは! 本日は、画像生成、動画生成モデルなどで重要な役割を果たしている EMA ※について解説してみたいとおもいます! 当社のAIアバター動画生成サービス「MotionVox™」でも役立っています! といっても、画像生成のための専用技術というわけではなく、学習と推論(生成系も含む)というディープラーニングの運用の中で昨今かなり重宝されるテクニックとなっておりますので、基礎から実装までみていきたいとおもいます。 ※EMAの読み方は私はエマと呼んでますが、イーエムエーって言ってる人もいます。どっちでもいいでしょう。 EMA の基礎知識 EMA(Exponential Moving Average=指数移動平均)は、ざっくりいえばモデルの重みを平均化する手法です。 実は株価分析などでも使われている古くからある概念なのですが、ディープラーニングでは比較的最近になって「あ、これ結構使えるんじゃね?」と重要性が認識されるようになりました。 (”EMA”に限らず、理論の積み上げではなく「やってみたら、使えんじゃん」っていうのがかなり多いのがディープラーニング界隈のもはや常識でし

By Qualiteg 研究部
TOKYO DIGICONX 「MotionVox™」出展レポート

TOKYO DIGICONX 「MotionVox™」出展レポート

こんにちは! 2025年1月9日~11日に東京ビッグサイトにて開催された TOKYO DIGICONX に出展してまいりました。 開催中3日間の様子を簡単にレポートいたします! TOKYO DIGICONX TOKYO DIGICONX は東京ビッグサイト南3・4ホールにて開催で、正式名称は『TOKYO XR・メタバース&コンテンツ ビジネスワールド』ということで、xR・メタバース・コンテンツ・AIと先端テクノロジーが集まる展示会です 「Motion Vox™」のお披露目を行いました 当社からは、新サービス「Motion Vox™」を中心とした展示をさせていただきました MotionVox™は動画内の顔と声を簡単にAIアバター動画に変換できるAIアバター動画生成サービスです。 自分で撮影した動画をアップロードし、変換したい顔と声を選ぶだけの3ステップで完了。特別な機材は不要で、自然な表情とリップシンクを実現。 社内研修やYouTube配信、ドキュメンタリー制作など、幅広い用途で活用できます。 当社ブースの様子 「MotionVox™」の初出展とい

By Qualiteg ビジネス開発本部 | マーケティング部
【本日開催】TOKYO DIGICONX で「MotionVox」を出展~リアルを纏う、AIアバター~

【本日開催】TOKYO DIGICONX で「MotionVox」を出展~リアルを纏う、AIアバター~

こんにちは! 本日(2025年1月9日)より東京ビックサイトにて開催されている「TOKYO DIGICONX」に、フォトリアリスティック(Photorealistic Avater)な次世代アバター生成AI「MotionVox」を出展しています! XR・メタバース・AIと先端テクノロジーが集まる本展示会で、ビジネス向け次世代AI動画生成ツールとしてMotionVox™をご紹介させていただきます。 MotionVox™とは MotionVox™は、あなたの表情や発話を魅力的なアバターが完全再現する動画生成AIです。まるで本物の人間がそこにいるかのような自然な表情と圧倒的な存在感で、新しい表現の可能性を切り開きます。 主な特徴 * フォトリアリスティックな高品質アバター * 高再現度の表情同期 * プロフェッショナルなリップシンク * カスタマイズ可能なボイスチェンジ機能 * 簡単な操作性 * プライバシーの完全保護 多様な用途に対応 MotionVoxは、以下のようなさまざまなビジネスシーンで活用いただけます! * 動画配信やVTuber活動 * S

By Qualiteg ビジネス開発本部 | マーケティング部
[AI新規事業創出]Qualitegセレクション:ビジネスモデル設計①ビジネスモデル図

[AI新規事業創出]Qualitegセレクション:ビジネスモデル設計①ビジネスモデル図

Qualiteg blogを訪問してくださった皆様、こんにちは。Micheleです。AIを活用した新規事業やマーケティングを手がけている私には、クライアントからよく寄せられる質問があります。AIを用いた事業展開を検討されている方々が共通して直面するであろう課題に対して、このブログを通じて私なりの解答をご提供したいと思います。 「新規事業のビジネスモデル図の描き方 〜実践で活かせる具体的なコツ〜」 新規事業開発のコンサルティングをさせていただいておりますとクライアント企業様の現場で、「ビジネスモデル図をどう描けばいいの?」という質問をよく頂きます。 実は私も最初は悩んだのですが、数々の失敗と成功を経て、効果的なビジネスモデル図の描き方が分かってきました。今回は、その実践的なコツをお伝えしていきます。 なぜビジネスモデル図が重要なのか ビジネスモデル図は、単なる図解ではありません。これは、自分のビジネスアイデアを「検証可能な形」に落とし込むための重要なツールです。 上申の際にステークホルダーの説明をするのに使うこともできます。また、アイディア創出後のマネタイズ検討の場合も情報

By Join us, Michele on Qualiteg's adventure to innovation