Gemini APIで生成結果が出ない理由とは?安全性設定の仕組みを解説

こんにちは!開発室の佐々木です。

Googleが提供するGemini APIには、生成結果のリスクをコントロールする「安全性設定」が用意されているのをご存知でしょうか?

不適切な出力を事前に防いでくれる便利な仕組みですが、一方で判定が厳しすぎると、意図せずフィルタにかかってしまい、生成結果が空で返ってくることも...

本記事では、Gemini API における「安全性設定」について、その仕組みから実際の使い方までを分かりやすく解説していきます。

実際にブロックされる例

まずは実際にブロックされてしまったケースを見てみましょう。

以下はリクエストの例ですが、具体的な内容は伏せています。
基本的には、後述するカテゴリに該当する内容を生成しようとするとブロックされます。

  • リクエスト例
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${API_KEY}" \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": [
     {
        "parts": [
          {
            "text": "(安全性フィルタに合致するような指示)"
          }
        ]
      }
    ]
  }'
  • 実際のレスポンス
{
  "promptFeedback": {
    "blockReason": "PROHIBITED_CONTENT"
  },
  "usageMetadata": {
    // 略
  },
  "modelVersion": "gemini-2.5-flash",
}

blockReasonフィールドがブロック理由を示しており、ここではPROHIBITED_CONTENT(禁止コンテンツに該当)が返却されています。

この場合、生成結果は一切含まれず、中身が空のレスポンスが返ってきます。

安全性設定とは?

「安全性設定」とは、API が生成するコンテンツに対して、暴力・ヘイト・性的表現などをどの程度許容するかを制御する仕組みです。

開発者はこれを調整することで、アプリケーションの利用シーンに適した安全性を確保できます。

対象となるカテゴリは以下の通りです。

カテゴリ 説明
嫌がらせ ID や保護されている属性をターゲットとする否定的なコメントや有害なコメント
ヘイトスピーチ 粗暴、無礼、または冒とく的なコンテンツ
露骨な性表現 性行為やわいせつな内容に関する情報が含まれるコンテンツ
危険 有害な行為を奨励、促進、または助長する
市民の清廉性 選挙関連のクエリ

引用元:https://ai.google.dev/gemini-api/docs/safety-settings?hl=ja#safety-filters

その他詳しい仕様については、以下公式ドキュメントの「安全性設定」ページをご参照ください。 ai.google.dev

回避方法(安全性設定の調整)

安全性設定では「どの程度の確率で危険なコンテンツと判定されたらブロックするか」をしきい値として調整可能です。

以下はしきい値の対応表です。

しきい値(Google AI Studio) しきい値(API) 説明
ブロックなし BLOCK_NONE 安全でないコンテンツの確率に関係なく、常に表示されます
少量をブロック BLOCK_ONLY_HIGH 安全でないコンテンツである確率が高い場合にブロックします
一部をブロック BLOCK_MEDIUM_AND_ABOVE 安全でないコンテンツの確率が中程度または高い場合にブロックします
ほとんどをブロック BLOCK_LOW_AND_ABOVE 安全でないコンテンツの確率が低い、中程度、高い場合にブロックします
なし HARM_BLOCK_THRESHOLD_UNSPECIFIED しきい値が指定されていません。デフォルトのしきい値を使用してブロックします

引用元:https://ai.google.dev/gemini-api/docs/safety-settings?hl=ja#safety-filtering-per-request

なお、デフォルト設定の場合は、全てのカテゴリにおいてBLOCK_MEDIUM_AND_ABOVEが適応された状態となります。

リクエスト例

安全性設定を実際にリクエストへ組み込むと以下のようになります。

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${API_KEY}" \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "text": "安全性設定を適用したテスト出力"
          }
        ]
      }
    ],
    "safetySettings": [
      {
        "category": "HARM_CATEGORY_HARASSMENT",
        "threshold": "BLOCK_MEDIUM_AND_ABOVE"
      },
      {
        "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
        "threshold": "BLOCK_ONLY_HIGH"
      }
    ]
  }'

この例では、

  • 嫌がらせカテゴリ → 中程度以上はブロック
  • 危険カテゴリ → 高い場合のみブロック

と設定しています。

用途に応じてカテゴリとしきい値を組み合わせ、柔軟に調整するのがポイントです。

実務でのベストプラクティス

安全性設定は「厳しくすれば安全」という単純なものではなく、ユーザー体験とのバランスを取ることが重要です。

例えば教育向けアプリでは厳しめに設定するのが望ましい一方、 社内利用ツールや開発者向けサンドボックスでは多少緩めても実用上問題ない場合があります。

チーム内で「どこまで許容するか」を事前に話し合い、アプリケーションに合わせた設定を決めておくことが重要です。

おわりに

今回は Gemini API の安全性設定 について、仕組みから具体的なリクエスト方法まで解説しました。

  • フィルタに引っかかると生成結果が空になる
  • カテゴリごとにブロックしきい値を調整できる
  • 利用シーンごとにバランスを意識することが大切

といった点を押さえておくと、より安定したアプリケーション開発につながります。

今後、Gemini APIを利用する際には「安全性設定」を意識して設計してみてください!