> ## Documentation Index
> Fetch the complete documentation index at: https://docs.acedata.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Gemini Generate Content API 使用説明

> Gemini AI API guide - Ace Data Cloud

Google Gemini は非常に強力な AI 対話システムであり、プロンプトを入力するだけで数秒以内に流暢で自然な応答を生成できます。本ドキュメントでは主に Gemini Generate Content API の使用方法について説明します。これは Google 公式のネイティブ API 形式であり、`generateContent` と `streamGenerateContent` の 2 つのエンドポイントをサポートしています。

## Chat Completions API との違い

Gemini Generate Content API は、OpenAI 互換形式（`messages` フィールド）ではなく、Google 公式のネイティブリクエスト形式（`contents` フィールド）を使用します。すでに Google Gemini SDK を使用している場合、または公式 API 形式に精通している場合は、リクエスト形式を変更せずにこの API を直接使用できます。

## 現在のサポート範囲

インターフェースはテキスト、画像、動画、音声入力（`inlineData` または `fileData`）、思考設定、およびカスタム関数宣言を受け付けます。音声出力、組み込みツール、明示的なコンテキストキャッシュなどのネイティブフィールドについては、統一された可用性はまだ保証されていません。具体的なモデルの実際のレスポンスを基準にしてください。

`fileData.fileUri` を使用して音声などのファイルを送信する場合は、ファイルが HTTPS 経由で直接アクセス可能であり、ログイン状態に依存せず、署名付きリンクの有効期間がリクエスト処理時間全体をカバーするようにしてください。非ストリーミング音声分析は、モデルが処理を完了した後に結果を返す必要があり、90 秒を超える可能性があります。クライアントは、ファイルサイズとビジネスシナリオに応じて十分に長い合計タイムアウトを設定し、サーバーがまだ処理中に接続が切断されることを避ける必要があります。

## 申請手順

Gemini Generate Content API を使用する前に、まず [Gemini Generate Content API](https://platform.acedata.cloud/documents/gemini-generate-content-api) ページにアクセスし、「取得」ボタンをクリックしてリクエストに必要な認証情報を取得してください。

まだログインまたは登録していない場合は、自動的にログインページにリダイレクトされます。初回申請には無料枠があります。

## 基本的な使用方法

### Non-Streaming（非ストリーミング）

`/v1beta/models/{model}:generateContent` に POST リクエストを送信します：

> **ヒント**：`gemini-3.x` シリーズの flash は思考モデルであり、最初に reasoning tokens を消費します。`generationConfig.maxOutputTokens` を 512 以上に設定してください。そうしないと、空のコンテンツしか返されない可能性があります。

```bash theme={null}
curl -X POST "https://api.acedata.cloud/v1beta/models/gemini-3.5-flash:generateContent" \
  -H "Authorization: Bearer your_token_here" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "role": "user",
        "parts": [
          {
            "text": "你好，请介绍一下你自己"
          }
        ]
      }
    ]
  }'
```

レスポンス例：

```json theme={null}
{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [{"text": "你好！很高兴与你交流。"}]
      },
      "finishReason": "MAX_TOKENS"
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 6,
    "candidatesTokenCount": 19,
    "thoughtsTokenCount": 489,
    "totalTokenCount": 514
  },
  "usage": {
    "prompt_tokens": 6,
    "completion_tokens": 19,
    "total_tokens": 514,
    "thoughts_tokens": 489,
    "cost": {
      "amount": 0.008860916380159999,
      "currency": "credit",
      "list_amount": 0.009631430847999998
    }
  },
  "modelVersion": "gemini-3.5-flash",
  "model": "gemini-3.5-flash"
}
```

`usageMetadata` 内の token フィールドは、ネイティブ Gemini のセマンティクスに従って課金されます：

* `promptTokenCount` には `cachedContentTokenCount` が含まれ、キャッシュヒットした部分はキャッシュ読み取り価格で計算され、通常の入力として重複計上されません。
* `promptTokensDetails` と `cacheTokensDetails` は、`usage.prompt_tokens_details` 配下の `text_tokens`、`image_tokens`、`video_tokens`、`audio_tokens` および対応する `cached_*` の内訳に正規化されます。これらの値はそれぞれ `prompt_tokens` と `cached_tokens` に含まれます。異なるモダリティはそれぞれの価格でのみ再計算され、重複課金されません。
* `candidatesTokenCount` と `thoughtsTokenCount` はどちらも出力 token 価格で計算されます。
* `toolUsePromptTokenCount` は独立したツール入力 token であり、入力 token 価格で計算されます。

Ace Data Cloud は追加で正規化された `usage` オブジェクトを返し、モデルプロトコルをまたいで今回の呼び出し費用を `usage.cost` から統一的に読み取れます。`cost` はオプションの料金プレビューです。料金プレビューが一時的に利用できない場合でも、モデルレスポンスは正常に返されますが、このフィールドが含まれない可能性があります。最終的な請求は使用量記録に基づきます。

### Streaming（ストリーミング）

`/v1beta/models/{model}:streamGenerateContent?alt=sse` に POST リクエストを送信します：

```bash theme={null}
curl -X POST "https://api.acedata.cloud/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse" \
  -H "Authorization: Bearer your_token_here" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "role": "user",
        "parts": [
          {
            "text": "写一首关于春天的诗"
          }
        ]
      }
    ]
  }'
```

ストリーミングレスポンスは SSE（Server-Sent Events）形式で段階的にコンテンツを返します。中間イベントには通常、増分コンテンツのみが含まれます。権威ある使用量を含む終端イベントには `usageMetadata` と正規化された `usage` が含まれ、料金は引き続き `usage.cost` にあります：

```text theme={null}
data: {"candidates":[{"content":{"parts":[{"text":"Hello!"}],"role":"model"},"index":0}],"modelVersion":"gemini-3.1-flash-lite","model":"gemini-3.1-flash-lite"}

data: {"candidates":[{"content":{"parts":[],"role":"model"},"finishReason":"STOP","index":0}],"usageMetadata":{"promptTokenCount":7,"candidatesTokenCount":89,"totalTokenCount":96},"usage":{"prompt_tokens":7,"completion_tokens":89,"total_tokens":96,"cost":{"amount":0.00026161075472,"currency":"credit","list_amount":0.000284359516}},"modelVersion":"gemini-3.1-flash-lite","model":"gemini-3.1-flash-lite"}

```

接続が閉じられるとストリーム終了を示します。ネイティブ Gemini ストリームは `data: [DONE]` を送信しません。終端の料金プレビューが一時的に利用できない場合でも、`usage` は token 使用量を返しますが、`cost` は省略されます。

## サポートされているモデル

| モデル名 | 説明 |
| - | - |
| `gemini-3.8-flash` | 最新の Flash モデル、高品質な汎用タスクに適している |
| `gemini-3.7-flash` | 高品質な汎用 Flash モデル |
| `gemini-3.6-flash` | 安定した高性能マルチモーダルモデル |
| `gemini-3.5-flash` | 高スループットのマルチモーダルモデル |
| `gemini-3.5-flash-lite` | 低レイテンシ、低コストモデル |
| `gemini-3.1-flash-lite` | 安定版の軽量モデル |
| `gemini-3.1-pro-preview` | 複雑な推論およびコーディングモデル |
| `gemini-3-flash-preview` | Gemini 3 Flash プレビューモデル |
| `gemini-2.5-pro` | Gemini 2.5 Pro モデル |
| `gemini-2.5-flash` | Gemini 2.5 Flash モデル |
| `gemini-2.5-flash-lite` | Gemini 2.5 Flash-Lite モデル |
| `gemini-3.1-flash-image` | 画像生成モデル |
| `gemini-3-pro-image` | 高品質な画像生成モデル |
| `gemini-2.5-flash-image` | Gemini 2.5 画像生成モデル |

## 高度な機能

### システム指示

```json theme={null}
{
  "contents": [
    {
      "role": "user",
      "parts": [{"text": "こんにちは"}]
    }
  ],
  "systemInstruction": {
    "parts": [{"text": "あなたはプロの詩人です。すべての返答を詩の形式で行ってください。"}]
  }
}
```

### 生成設定

```json theme={null}
{
  "contents": [
    {
      "role": "user",
      "parts": [{"text": "物語を一つ話してください"}]
    }
  ],
  "generationConfig": {
    "temperature": 0.7,
    "maxOutputTokens": 1024,
    "topP": 0.9,
    "topK": 40
  }
}
```

### JSON モード

```json theme={null}
{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "中国の都市を3つとその人口を挙げてください"
        }
      ]
    }
  ],
  "generationConfig": {
    "responseMimeType": "application/json",
    "responseSchema": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string"
          },
          "population": {
            "type": "integer"
          }
        }
      }
    }
  }
}
```

### 思考モード（Thinking）

思考機能をサポートするモデル（gemini-2.5-flash、gemini-2.5-pro など）は、思考モードを有効にできます：

```json theme={null}
{
  "contents": [
    {
      "role": "user",
      "parts": [{"text": "量子もつれを説明してください"}]
    }
  ],
  "generationConfig": {
    "thinkingConfig": {
      "includeThoughts": true,
      "thinkingBudget": 2048
    }
  }
}
```

### 関数呼び出し

```json theme={null}
{
  "contents": [
    {
      "role": "user",
      "parts": [{"text": "北京の今の天気はどうですか？"}]
    }
  ],
  "tools": [
    {
      "functionDeclarations": [
        {
          "name": "get_weather",
          "description": "指定した都市の天気情報を取得する",
          "parameters": {
            "type": "object",
            "properties": {
              "city": {
                "type": "string",
                "description": "都市名"
              }
            },
            "required": ["city"]
          }
        }
      ]
    }
  ]
}
```

### マルチターン会話

```json theme={null}
{
  "contents": [
    {
      "role": "user",
      "parts": [{"text": "こんにちは、私はシャオミンです"}]
    },
    {
      "role": "model",
      "parts": [{"text": "こんにちは、シャオミンさん！お会いできてうれしいです。"}]
    },
    {
      "role": "user",
      "parts": [{"text": "私の名前は何ですか？"}]
    }
  ]
}
```

### 画像理解

```json theme={null}
{
  "contents": [
    {
      "role": "user",
      "parts": [
        {"text": "この画像を説明してください"},
        {
          "inlineData": {
            "mimeType": "image/jpeg",
            "data": "base64_encoded_image_data..."
          }
        }
      ]
    }
  ]
}
```

## 安全設定

`safetySettings` によりコンテンツフィルタリングを制御できます：

```json theme={null}
{
  "contents": [...],
  "safetySettings": [
    {
      "category": "HARM_CATEGORY_HARASSMENT",
      "threshold": "BLOCK_ONLY_HIGH"
    }
  ]
}
```

## エラー処理

| HTTP ステータスコード | 意味 |
| - | - |
| 400 | リクエストパラメータが無効 |
| 401 | 認証に失敗しました。Token を確認してください |
| 403 | コンテンツが安全フィルターによりブロックされた |
| 429 | リクエストが頻繁すぎる |
| 500 | サーバー内部エラー |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.