Gemini ネイティブインターフェース
概要
AIone は Google Gemini ネイティブ API フォーマットでゲートウェイを直接呼び出すことに対応しており、自社ゲートウェイ集約、Google Gemini SDK、および既存の Gemini 連携コードがあるシナリオに適しています。
リクエストとレスポンスのフォーマットは Google Gemini API と完全に同一です。ゲートウェイは認証、ルーティング、課金のみを行い、フォーマット変換は一切行いません。
接続情報
| 項目 | 値 |
|---|---|
| Base URL | https://api.portal.aiin1.ai |
| 非ストリーミングエンドポイント | POST /v1beta/models/{model}:generateContent |
| ストリーミングエンドポイント | POST /v1beta/models/{model}:streamGenerateContent?alt=sse |
注意: AIone の API キー(
sk-nex-xxx)を使用してください。Google の API キーではありません。
認証方法
さまざまなクライアントに対応するため、ゲートウェイは API キーを渡す方法を4 種類受け付けます。いずれか 1 つを使えば OK です(いずれも sk-nex- で始まる AIone キーを渡します):
| 方法 | 書き方 | 用途 |
|---|---|---|
Authorization ヘッダー |
Authorization: Bearer sk-nex-xxx |
汎用 / OpenAI 風クライアント |
x-goog-api-key ヘッダー |
x-goog-api-key: sk-nex-xxx |
Google Gemini 公式 SDK(デフォルトでこのヘッダーを使用) |
x-api-key ヘッダー |
x-api-key: sk-nex-xxx |
Anthropic 風クライアント |
?key= クエリパラメータ |
...:generateContent?key=sk-nex-xxx |
Gemini REST / curl の慣習 |
ヘッダーの利用を推奨します(
Authorization/x-goog-api-key)。クエリパラメータ?key=はアクセスログやプロキシキャッシュに残る可能性があり、安全性が低めです。ヘッダーとクエリを同時に指定した場合はヘッダーが優先されます。つまり、Google 公式の
google-genaiSDK を認証コードの変更なしに本ゲートウェイへ向けられます。SDK がデフォルトで送るx-goog-api-keyヘッダーが正しく認識されます(その値をあなたのsk-nex-キーに置き換えるだけです)。
対応モデル
接続済みのすべての Gemini モデルがネイティブインターフェースで利用可能です:
テキスト / マルチモーダルモデル: gemini-2.5-flash、gemini-2.5-pro、gemini-3-pro-preview、gemini-3-flash-preview、gemini-3.1-pro-preview など(-pro 系列は画像 / 動画 / 音声の理解に対応。マルチモーダル理解を参照)
画像生成モデル: gemini-3.1-flash-image-preview、gemini-3-pro-image-preview、gemini-2.5-flash-image など
完全なリストは GET https://api.portal.aiin1.ai/v1/models で確認できます。
非ストリーミングリクエスト — generateContent
基本的な例
curl https://api.portal.aiin1.ai/v1beta/models/gemini-2.5-flash:generateContent \
-H "Authorization: Bearer sk-nex-your-key-here" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{"role": "user", "parts": [{"text": "量子コンピューティングを一文で説明してください"}]}
],
"generationConfig": {
"maxOutputTokens": 256,
"temperature": 0.7
}
}'レスポンスフォーマット
{
"candidates": [
{
"content": {
"parts": [{"text": "量子コンピューティングとは量子力学の原理を利用して..."}],
"role": "model"
},
"finishReason": "STOP",
"index": 0
}
],
"usageMetadata": {
"promptTokenCount": 10,
"candidatesTokenCount": 25,
"totalTokenCount": 35
},
"modelVersion": "gemini-2.5-flash"
}画像生成の例
curl https://api.portal.aiin1.ai/v1beta/models/gemini-3.1-flash-image-preview:generateContent \
-H "Authorization: Bearer sk-nex-your-key-here" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{"role": "user", "parts": [{"text": "かわいい猫を描いてください"}]}
],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"maxOutputTokens": 4096,
"imageConfig": {
"imageSize": "2K",
"aspectRatio": "16:9"
}
}
}'画像はレスポンスの candidates[0].content.parts[] 内に inlineData(base64 エンコード)として返されます。
注意: 4K 画像生成には 2〜3 分かかる場合があります。クライアントの HTTP タイムアウトを 600 秒以上に設定してください。
マルチモーダル理解(画像 / 動画 / 音声の入力)
テキストに加えて、contents[].parts[] には画像・動画・音声を渡してモデルに理解させることができます(gemini-2.5-pro、gemini-3.1-pro-preview などのマルチモーダルテキストモデルが対応)。素材の渡し方は 2 通りです:
| 方法 | フィールド | 用途 |
|---|---|---|
| インライン base64 | inline_data(mime_type + base64 の data) |
小さいファイル。リクエストボディ全体の上限は 20 MB(base64 は約 33% 膨張するため、元ファイル ≈ 15 MB) |
| 公開 URL | file_data(mime_type + file_uri、公開アクセス可能な https:// URL) |
大きいファイル。ゲートウェイはダウンロードせず、上流が URL を取得します |
対応する動画フォーマット:video/mp4、video/webm、video/mov、video/avi、video/mpeg、video/3gpp など。
例 A:インライン base64 動画(小さいファイル)
curl https://api.portal.aiin1.ai/v1beta/models/gemini-3.1-pro-preview:generateContent \
-H "x-goog-api-key: sk-nex-your-key-here" \
-H "Content-Type: application/json" \
-d '{
"contents": [{
"parts": [
{"text": "この動画に出てくる色を順番にカンマ区切りで挙げてください。"},
{"inline_data": {"mime_type": "video/mp4", "data": "<動画ファイルの base64>"}}
]
}]
}'例 B:公開 URL 動画(大きいファイル)
curl https://api.portal.aiin1.ai/v1beta/models/gemini-3.1-pro-preview:generateContent \
-H "Authorization: Bearer sk-nex-your-key-here" \
-H "Content-Type: application/json" \
-d '{
"contents": [{
"parts": [
{"text": "この動画の主役はどんな動物ですか?一文で答えてください。"},
{"file_data": {"mime_type": "video/mp4", "file_uri": "https://example.com/sample-video.mp4"}}
]
}]
}'画像理解も同様です:
mime_typeをimage/jpeg/image/pngにするだけです(inline_dataでインライン、またはfile_dataで URL)。タイムアウト:動画理解は動画の長さとモデルによって数十秒〜数分かかります。公開 URL を使う場合は、上流がその URL を取得する時間も加わります。HTTP タイムアウトは 300 秒以上に設定してください。
Google File API のアップロードは未対応です(
/upload/v1beta/filesおよびfiles/{id}参照)。
⚠️ 約 15 MB を超える素材は 大容量ファイルアップロード を使ってください:
file_dataの公開https://URL は上流に先頭の約 15 MB しか読み込まれず、それ以降は静かに破棄されます(エラーは出ませんが、モデルは冒頭部分しか「見て」いません)。大容量ファイルをモデルに完全に理解させるには、まず 大容量ファイルアップロード エンドポイントでgs://参照を取得し、それをfile_data.file_uriとして使ってください。
ストリーミングリクエスト — streamGenerateContent
エンドポイント URL の末尾に ?alt=sse を追加すると、レスポンスが SSE(Server-Sent Events)形式でチャンクごとに返されます。
例
curl https://api.portal.aiin1.ai/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse \
-H "Authorization: Bearer sk-nex-your-key-here" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{"role": "user", "parts": [{"text": "春についての詩を書いてください"}]}
],
"generationConfig": {
"maxOutputTokens": 512
}
}'SSE レスポンスフォーマット
data: {"candidates":[{"content":{"parts":[{"text":"春風"}],"role":"model"},"index":0}],"usageMetadata":{"promptTokenCount":8,"candidatesTokenCount":2,"totalTokenCount":10}}
data: {"candidates":[{"content":{"parts":[{"text":"が吹いて、"}],"role":"model"},"index":0}],"usageMetadata":{"promptTokenCount":8,"candidatesTokenCount":5,"totalTokenCount":13}}
data: {"candidates":[{"content":{"role":"model"},"finishReason":"STOP","index":0}],"usageMetadata":{"promptTokenCount":8,"candidatesTokenCount":28,"totalTokenCount":36}}
各 data: 行は独立した JSON オブジェクトです。usageMetadata は累積値であり、最後のチャンクの値が最終的な使用量となります。
注意: 画像生成モデルは
streamGenerateContentに対応していません。generateContentを使用してください。
Python SDK の例
import google.generativeai as genai
genai.configure(
api_key="sk-nex-your-key-here",
transport="rest",
client_options={"api_endpoint": "https://api.portal.aiin1.ai"},
)
model = genai.GenerativeModel("gemini-2.5-flash")
response = model.generate_content("量子コンピューティングを一文で説明してください")
print(response.text)Node.js SDK の例
import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI("sk-nex-your-key-here");
// カスタムエンドポイントの設定が必要です
const model = genAI.getGenerativeModel({ model: "gemini-2.5-flash" });
const result = await model.generateContent("量子コンピューティングを一文で説明してください");
console.log(result.response.text());注意: Google 公式 SDK はカスタムエンドポイントを直接サポートしていない場合があります。この制限に遭遇した場合は、HTTP での直接呼び出しまたはカスタム Base URL をサポートするサードパーティライブラリの使用を推奨します。
OpenAI 互換フォーマットとの比較
| 項目 | Gemini ネイティブフォーマット | OpenAI 互換フォーマット |
|---|---|---|
| エンドポイント | /v1beta/models/{model}:generateContent |
/v1/chat/completions |
| リクエストボディ | contents + generationConfig |
messages + max_tokens |
| レスポンスボディ | candidates + usageMetadata |
choices + usage |
| 画像パラメータ | imageConfig.imageSize / imageConfig.aspectRatio |
image_size / aspect_ratio |
| ストリーミング | :streamGenerateContent?alt=sse |
"stream": true |
| 適用シーン | 自社ゲートウェイ集約、既存 Gemini コード | 汎用クライアント、IDE プラグイン |
両フォーマットは同一のモデルセットおよび上流チャネルにアクセスします。お使いのクライアントに応じて選択してください。
制限事項と注意点
- 認証方式:Google API キーではなく AIone の
sk-nex-API キーを使用します。Authorization/x-goog-api-key/x-api-keyヘッダーおよび?key=クエリパラメータの 4 種類に対応(認証方法を参照) - 画像モデルはストリーミング非対応:
streamGenerateContentは画像生成モデルに対して 503 を返します。generateContentを使用してください - 対応アクション:
generateContentとstreamGenerateContentのみ対応。countTokens、embedContentなどは非対応です - タイムアウト設定:画像生成(特に 4K)では HTTP タイムアウトを 600 秒以上に設定してください。動画理解は 300 秒以上を推奨します
- マルチモーダル入力の上限:インライン
inline_dataはリクエストボディ全体の 20 MB 制限を受けます(元ファイル ≈ 15 MB)。より大きいファイルはfile_dataで公開 URL を渡してください。Google File API のアップロードは未対応です(/upload/v1beta/files) - バイトレベル透過:リクエストとレスポンスはバイトレベルで透過されます。ゲートウェイはフォーマット変換を一切行いません