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-genai SDK を認証コードの変更なしに本ゲートウェイへ向けられます。SDK がデフォルトで送る x-goog-api-key ヘッダーが正しく認識されます(その値をあなたの sk-nex- キーに置き換えるだけです)。

対応モデル

接続済みのすべての Gemini モデルがネイティブインターフェースで利用可能です:

テキスト / マルチモーダルモデル: gemini-2.5-flashgemini-2.5-progemini-3-pro-previewgemini-3-flash-previewgemini-3.1-pro-preview など(-pro 系列は画像 / 動画 / 音声の理解に対応。マルチモーダル理解を参照)

画像生成モデル: gemini-3.1-flash-image-previewgemini-3-pro-image-previewgemini-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-progemini-3.1-pro-preview などのマルチモーダルテキストモデルが対応)。素材の渡し方は 2 通りです:

方法 フィールド 用途
インライン base64 inline_datamime_type + base64 の data 小さいファイル。リクエストボディ全体の上限は 20 MB(base64 は約 33% 膨張するため、元ファイル ≈ 15 MB
公開 URL file_datamime_type + file_uri、公開アクセス可能な https:// URL) 大きいファイル。ゲートウェイはダウンロードせず、上流が URL を取得します

対応する動画フォーマット:video/mp4video/webmvideo/movvideo/avivideo/mpegvideo/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_typeimage/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 プラグイン

両フォーマットは同一のモデルセットおよび上流チャネルにアクセスします。お使いのクライアントに応じて選択してください。

制限事項と注意点

  1. 認証方式:Google API キーではなく AIone の sk-nex- API キーを使用します。Authorization / x-goog-api-key / x-api-key ヘッダーおよび ?key= クエリパラメータの 4 種類に対応(認証方法を参照)
  2. 画像モデルはストリーミング非対応streamGenerateContent は画像生成モデルに対して 503 を返します。generateContent を使用してください
  3. 対応アクションgenerateContentstreamGenerateContent のみ対応。countTokensembedContent などは非対応です
  4. タイムアウト設定:画像生成(特に 4K)では HTTP タイムアウトを 600 秒以上に設定してください。動画理解は 300 秒以上を推奨します
  5. マルチモーダル入力の上限:インライン inline_data はリクエストボディ全体の 20 MB 制限を受けます(元ファイル ≈ 15 MB)。より大きいファイルは file_data で公開 URL を渡してください。Google File API のアップロードは未対応です(/upload/v1beta/files
  6. バイトレベル透過:リクエストとレスポンスはバイトレベルで透過されます。ゲートウェイはフォーマット変換を一切行いません