ChatGPTから返事が来ない?原因はcontent_filterだった話【OpenAI APIの落とし穴】

ChatGPTから返事が来ない?原因は content_filter だった話【OpenAI APIの落とし穴】

ある日、自作のアプリで ChatGPT(OpenAI API) を使っていたところ、ユーザーが送信してもAIからの返答が返ってこないという現象に直面しました。

サーバーエラーか、ネットワークの問題かと思って調査した結果… 原因はまさかの finish_reason: "content_filter"。この記事では、実際に起きた状況とその解決方法を共有します。




症状:レスポンスが空

APIのレスポンスログを確認したところ、以下のようなJSONが返っていました:

つまり、返答がフィルターでブロックされて「空文字」として返ってきていたというわけです。


なぜブロックされたのか?

OpenAIのコンテンツフィルターは、以下のような条件で出力を遮断します:

  • 攻撃的またはセンシティブな内容と誤認される表現
  • ユーザーの入力や履歴に伏字・スラング・引用などが含まれている
  • 過去の長い履歴に、引っかかる単語が紛れている

私のケースでは、会話履歴の中に古い発言がそのまま残っており、それが原因だったようです。


対策:フィルター検知→フォールバック

OpenAI APIでは、finish_reasoncontent をチェックして、ブロックされたかどうかを判定できます。

以下はサンプルコードです(実際のアプリとは異なるサンプル用の変数名で記述しています):

こうすることで、ユーザーに「返事がない」まま待たせるのではなく、状況を明確に伝えることができます。


予防策:事前チェックで未然に防ぐ

再発を防ぐには、OpenAIの Moderation API を使って、プロンプトや履歴を送信前にチェックする方法もあります。

これを使えば、フィルターに引っかかる前に「危険そうな入力」をユーザーに修正してもらうことができます。


まとめ

  • OpenAI APIで返事がないとき、content_filter によるブロックの可能性がある
  • finish_reasoncontent をチェックして適切にフォールバック
  • Moderation APIを使えば事前チェックも可能
  • ユーザー体験を損なわないよう、意味のある代替テキストを返すのが重要

もしあなたも「ChatGPTの返事が来ない…」と悩んでいるなら、一度 finish_reason を確認してみてください。


この記事が誰かのデバッグ時間を1時間でも短縮できますように。

最後までお読みいただきありがとうございます。
よろしければブログやTwitterでのシェアをお願いしております。
コメントもお待ちしております。
誤植や勘違いなどございましたらコメント欄にて教えていただけると幸いです。

ITパスポート、基本情報技術者、応用情報技術者などIPAが提供する国家資格の過去問を学べるモバイルアプリをリリースしました。
詳しくは下記のプレスリリースをご覧ください。
https://prtimes.jp/main/html/rd/p/000000008.000073303.html

Youtubeチャンネル開設いたしました。
チャンネル登録者10,000人を目指しているので、良いと思った方はチャンネル登録をお願いしたいです。
https://www.youtube.com/channel/UC219XhmSRxmXltTy6COxSMw






生成AI

Posted by ちこ