Gemini チャット
OpenAI Chat Completions、OpenAI Responses、Anthropic Messages 経由で Gemini モデルを呼び出します。
| 用途 | エンドポイント |
|---|---|
| Base URL | https://api.hop-base.com/v1(Anthropic Messages は https://api.hop-base.com) |
| チャット(OpenAI Chat Completions) | POST /v1/chat/completions |
| チャット(OpenAI Responses) | POST /v1/responses |
| チャット(Anthropic Messages) | POST /v1/messages |
2 つの Gemini プランでは対応パラメータが異なります。接続前に下記の「プランごとの機能差分」を確認してください。
最初のリクエスト
Gemini のチャットモデルは OpenAI Chat Completions、OpenAI Responses、Anthropic Messages の 3 つのプロトコルで呼び出せます。以下は Chat Completions の例です。認証は Authorization: Bearer sk-your-key で、x-api-key も受け付けます。
curl https://api.hop-base.com/v1/chat/completions \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.8-flash",
"messages": [{"role": "user", "content": "Hello"}]
}'利用できる Gemini モデルはプランによって異なります。まず現在のキーで GET /v1/models を呼び出し、レスポンスに含まれる完全な ID のみを使用してください。
x-goog-api-key と /v1beta/models/{model}:generateContent には対応していません。2 つの Gemini プランはどちらも /v1/chat/completions、/v1/responses、/v1/messages に対応し、「Gemini 公式ダイレクト」ではさらに /v1/messages/count_tokens(ローカル推定、課金なし)を利用できます。プロトコルごとの細かな違いは下の「プランごとの機能差分」を参照してください。
利用可能なモデル
| 系列 | モデル ID | 用途 |
|---|---|---|
| Gemini 4 | gemini-4-argon | Gemini 4 世代 · 1M コンテキスト |
| Gemini 3.8 | gemini-3.8-flash | 最新 Flash · デフォルト |
| Gemini 3.7 / 3.6 | gemini-3.7-flash / gemini-3.6-flash | 前世代の Flash |
| Gemini 3.5 | gemini-3.5-flash / gemini-3.5-flash-lite | 安定版 Flash / 低コスト |
| Gemini 3.1 Pro | gemini-3.1-pro-previewgemini-3.1-pro-preview-customtools | 高度な推論プレビュー / ツール利用プレビュー |
| Gemini 3.1 | gemini-3.1-flash-lite / gemini-3.1-flash-lite-preview | 軽量版 / 軽量プレビュー |
| Gemini 3 | gemini-3-flash-preview | Gemini 3 Flash プレビュー |
| Gemini 2.5 | gemini-2.5-progemini-2.5-flashgemini-2.5-flash-lite | 安定版モデル |
既定では gemini-3.8-flash を使用してください。ID に preview を含むモデルはすべてプレビュー版として扱い、安定性は保証されません。
料金はプランによって異なります。現在のキーのプランと、ログイン後のモデルカタログが正となります。
プランごとの機能差分
| 能力 | Gemini 公式ダイレクト | Gemini 全モデル(画像生成含む) |
|---|---|---|
| エンドポイント | /v1/chat/completions、/v1/responses、/v1/messages に対応(Claude Code は CC Switch 経由で直接接続可。モデル名には Gemini のモデル ID を指定) | /v1/chat/completions、/v1/responses、/v1/messages に対応(Claude Code から直接接続可。Codex CLI は非対応) |
| リクエストボディ形式 | 各プロトコルの標準形式。/v1/chat/completions は Gemini ネイティブの contents も受け付ける | OpenAI の messages のみ |
| ツール呼び出し | 3 プロトコルとも tools と tool_choice に対応(並列呼び出し・マルチターン含む)。Responses は custom 自由テキストツールにも対応 | 対応。tool_calls を返す |
| 構造化出力 | 対応:Chat は response_format、Responses は text.format、Messages は output_format / output_config.format | response_format に対応 |
stop / n | stop は有効。n は 1〜8 で、その数の choices を返す | stop は有効。n は 1 件のみ返す |
| 画像入力 | base64 のみ(Chat は data URL、Messages は base64 ソース) | data URL と公開 https URL |
| ストリーミング | 3 プロトコルとも対応。全体の生成完了後にまとめてチャンク送信される場合あり | トークン単位でストリーミング |
| 1 リクエストの時間制限 | 約 100 秒でタイムアウト判定、別アカウントで自動再試行 | 固定の上限なし |
| 利用可能なモデル | 上表の全モデル | 一部のみ。GET /v1/models が正 |
「Gemini 全モデル(画像生成含む)」の構造化出力は、response_format の json_object と json_schema に対応しています。
「Gemini 公式ダイレクト」:Chat Completions のパラメータ
messages:対応するコンテンツパートはtext、image_url、input_audio、file、refusalで、それ以外のタイプは 400 になります。image_urlは base64 の data URL のみ受け付けます。fileのfile_dataは data URL である必要があり、file_idには対応していません。role: "tool"の結果は関数の結果としてモデルに渡されます。tools/tool_choice:tool_choiceはauto、none、required、関数指定、allowed_toolsに対応し、並列ツール呼び出しとマルチターンにも対応します。parallel_tool_calls: falseの場合は最初の呼び出しのみ残ります。旧形式のfunctions/function_callも使えます。ツールのパラメータ schema は完全な JSON Schema として受け付けるため、$ref、$defs、anyOf、additionalPropertiesなどを書き換える必要はありません。response_format:json_objectとjson_schemaに対応します。stop:文字列または配列。n:1〜8 で、その数のchoicesを返します。max_tokens/max_completion_tokens:両方送るとmax_tokensが優先され、思考トークンもこの上限に含まれるため 4096 以上を推奨します。temperature/top_p:モデルの公式範囲のまま転送されます。seedとtop_kにも対応します。presence_penalty/frequency_penalty:0 の場合は無視されます。0 以外はそのまま送られ、現在の Gemini モデルでは 400Penalty is not enabled for this modelが返ります。reasoning_effort:思考予算に変換されます(下記「思考」を参照)。- 400 を返すフィールド:
logprobs、top_logprobs、logit_bias、modalities、audio、web_search_options(modalitiesはtext以外の値を含む場合のみ)。 - 無視され出力に影響しないフィールド:
user、metadata、store、service_tier、safety_identifier、prompt_cache_key、stream_options、prediction、verbosity。
フィールドの一般的な説明は API リファレンス Chat Completions を参照してください。
「Gemini 公式ダイレクト」:Responses と Anthropic Messages
Responses(POST /v1/responses)
- ツール:
functionツールとcustom自由テキストツール(Codex のapply_patchなど)に対応します。組み込み / ホスト型ツール(web_search、file_search、code_interpreter、computerなど)は 400 になります。tool_choiceの値は Chat Completions と同じで、max_tool_callsは呼び出し数を切り詰めます。 - ステートレス:
previous_response_id、conversation、background、promptテンプレート、item_referenceは 400 になります。毎回のリクエストでinputに完全な履歴を含めてください(Codex は既定でそうしています)。 - 構造化出力は
text.formatを使います。 - 無視され出力に影響しないフィールド:
store、include、user、metadata、safety_identifier、prompt_cache_key、service_tier、truncation、text.verbosity。
POST /v1/messages)
- Base URL は
https://api.hop-base.com(/v1なし)を指定します。Claude Code は CC Switch 経由で直接接続できます。モデル名にはgemini-3.8-flashなどの Gemini モデル ID を指定してください。claude-*の名前は自動では対応付けられません。 tool_choiceはauto、any、tool、noneに対応します。disable_parallel_tool_use: trueの場合は最初の呼び出しのみ残ります。image/documentは base64 ソースのみ受け付け、urlソースは 400 になります。tool_resultには画像を含められます。- 構造化出力は
output_formatまたはoutput_config.format(json_schema)を使います。 /v1/messages/count_tokensはローカル推定で、課金されません。- 無視され出力に影響しないフィールド:
metadata、service_tier、cache_control、context_management。
思考シグネチャ(マルチターンのツール呼び出し)
Gemini 3 以降のモデルのツール呼び出しには「思考シグネチャ」が付きます。各プロトコルでの位置:
| プロトコル | 位置 |
|---|---|
| Chat Completions | tool_calls[].extra_content.google.thought_signature |
| Responses | reasoning 出力アイテムの encrypted_content |
| Anthropic Messages | redacted_thinking ブロック |
次のターンではアシスタントのメッセージをそのまま送り返してください。クライアントがこれらのフィールドを落としてもエラーにはなりません。ゲートウェイができる限り復元し、復元できない場合は公式の方法で検証をスキップします。その場合、推論の一貫性がやや下がることがあります。
- 公開画像リンクを渡すと 400
image_url only supports data URLs (base64-embedded images)が返ります。 - 非対応のコンテンツパートタイプ(
video_urlなど)は黙って破棄されず、400 が返ります。 messagesに使える内容がない場合は 400 が返ります。
SSE ストリーミング("stream": true を追加)
curl https://api.hop-base.com/v1/chat/completions \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{"model": "gemini-3.1-pro-preview", "stream": true,
"messages": [{"role": "user", "content": "Hello"}]}'「Gemini 公式ダイレクト」プランでは 3 つのプロトコルすべてが "stream": true に対応し、イベント形式はそれぞれ OpenAI Chat Completions、OpenAI Responses、Anthropic Messages の仕様に従います(ツール呼び出しの差分を含む)。ストリーミングは応答全体の生成完了後にまとめてチャンク送信される場合があり、最初のチャンクが届くまでの時間は完全な生成時間とほぼ同じになることがあります。これは 3 プロトコルとも同様です。Chat Completions の最後のチャンクには必ず usage が含まれます。
「Gemini 全モデル(画像生成含む)」プランはトークン単位でストリーミングします。usage が必要な場合は stream_options.include_usage を追加してください。
ストリーミングでないレスポンスは、usage に課金額を含みます。cost_usd は残高から実際に差し引かれた米ドル額、cost は同じ課金額の人民元額、currency は cost の通貨(常に CNY)で、レスポンスヘッダー X-HopBase-Cost / X-HopBase-Cost-USD / X-HopBase-Currency も同じ値です。ストリーミングのレスポンスはいずれも含まないため、課金額はコンソールの「使用記録」で確認してください。課金額を参照してください。
思考
Gemini モデルはデフォルトで思考を行い、完全にオフにすることはできません。思考トークンは出力上限に含まれます。max_tokens が小さすぎると、本文が数文字のまま finish_reason=length になることがあるため、4096 以上を推奨します。
OpenAI 形式では思考トークンはすでに completion_tokens に含まれ、さらに completion_tokens_details.reasoning_tokens に個別集計されます(「Gemini 公式ダイレクト」の Responses では output_tokens_details.reasoning_tokens)。ネイティブ形式では usageMetadata.thoughtsTokenCount に個別に報告されます。
「Gemini 公式ダイレクト」プランでは reasoning_effort が思考予算に変換されます:
reasoning_effort | 思考予算 |
|---|---|
none / minimal | 0 |
medium | 8192 |
high | 24576 |
low とその他の値 | モデルのデフォルトのまま |
gemini-4-argon は思考レベルのみ受け付け、上表の予算は使いません:none / minimal → low、medium → medium、high → high。low は指定なしと同じくモデルの既定レベルになります。思考を完全にオフにすることはできません。
Responses で reasoning.summary を有効にすると reasoning の要約が返ります。Anthropic Messages で thinking.type を enabled または adaptive にすると thinking ブロックが返り、budget_tokens は 24576 を超えると 24576 に切り詰められます。
「Gemini 公式ダイレクト」の課金:思考トークンは出力として、組み込みツールがモデルに返すトークン(toolUsePromptTokenCount)は入力として課金されます。usage は各プロトコルの標準形式で返り、Anthropic Messages の input_tokens にはキャッシュ読み取りが含まれず、キャッシュ読み取りは cache_read_input_tokens に入ります。
「Gemini 全モデル(画像生成含む)」プランでは none を渡すと思考量が明確に減ります。
Gemini ネイティブ形式のパススルー
Gemini SDK から移行する既存のリクエストボディはそのまま送信できます。「Gemini 公式ダイレクト」プランの同じエンドポイントは Gemini ネイティブの contents フィールドも受け付け、レスポンスもネイティブ形式で返されます。
curl https://api.hop-base.com/v1/chat/completions \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.8-flash",
"contents": [{"role": "user", "parts": [{"text": "Hello"}]}]
}'ネイティブ形式で受け付けるのは公式のトップレベルフィールドのみです:
contents, systemInstruction, generationConfig, safetySettings, tools,
toolConfig, cachedContent, labels, serviceTier, modelstore、max_tokens、messages などそれ以外のフィールドを含めると 400 Unknown name … が返ります。ネイティブ形式はストリーミングに対応していないため、"stream": true を送らないでください。