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キーを作成します。
生成された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以降) |
価格の特徴は以下のようになります
- Gemini 1.5 FlashはGemini 1.5 Proと比較して、大幅に低価格です。
- 両モデルとも、128,000トークンを超えると価格が2倍になります。
- 出力価格は入力価格の3倍に設定されています。
- 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時間からカジュアルに利用できるスポットコンサルも実施しておりますのでご活用くださいませ。
(繁忙期、ご相談内容によっては、お受けできない場合がございますので、あらかじめご了承ください)