Claude Code や Anthropic API で作業していると、突然こんなエラーで手が止まることがある:

API Error: 400 Output blocked by content filtering policy

# 生のレスポンスはこんな形:
{"type":"error","error":{"type":"invalid_request_error",
 "message":"Output blocked by content filtering policy"}}

「出力がコンテンツフィルタのポリシーでブロックされた」——つまり あなたの入力ではなく、Claude が返そうとした出力を、Anthropic 側の安全フィルタが途中で差し止めた状態だ。HTTP ステータスは 400、種別は invalid_request_error。使用量制限でもコンテキスト超過でもなく、「何を出力しようとしたか」が引っかかっている。

先に要点を3つ。① 原因はほぼ「既存の著作物をそのまま再現しようとした」判定。Claude は新しい内容を生む用途を想定しており、既存テキストの丸写しを止める安全機構がある。② ただし誤検知(false positive)が多い——MIT/Apache などの標準ライセンス文の生成や、既存ページに“一致させる”作業で、悪意がなくても発火する。③ 対処の芯は「モデルに逐語コピーをさせない」こと——ライセンス等はツールで取得し、プロンプトは“変換・要約・新規生成”に寄せ、リトライループに陥ったら一度止めて言い換える。本記事では、公式情報と実際の不具合報告をもとに、原因・誤検知パターン・直し方・似たエラーとの違いまで整理する。

CLAUDE CODE · CONTENT FILTER

どこで止まっているのか

— 入力ではなく「出力」がフィルタで差し止められる

① あなたの入力
プロンプト・ファイル・指示
✅ 通過
② Claude が生成
出力トークンを組み立てる
…既存物に酷似?
③ 出力フィルタ
著作物の再現を検知
⛔ 400 でブロック

止まっているのは ③ の出力段入力が長すぎる(Prompt is too long)でも、使用量制限でもない
「新しく作る」出力は通り、「既存物を丸写しする」出力が引っかかりやすい。

1. このエラーは何を言っているのか

Anthropic の API には、入力(あなたが送る内容)出力(Claude が返す内容)の両方をチェックする安全システムがある。Output blocked by content filtering policy は、その名の通り 「出力」側のフィルタが、Claude が返そうとした内容を差し止めたことを意味する。API のレスポンスは HTTP 400invalid_request_error として返り、Claude Code ではセッションが API Error: 400 Output blocked by content filtering policy と表示して停止する。

ポイント:これは「モデルが会話文で丁寧に断る(refusal)」のとは別物だ。refusal はテキストとして返ってくるが、この 400API 呼び出し自体がエラーになる。だから Claude Code は応答を受け取れず、処理が中断する。

重要なのは、これは「バグ」ではなく「安全機構の作動」だという点だ。したがって「再起動すれば直る」類のものではなく、何を出力させようとしたかを見直すのが正攻法になる。とはいえ後述の通り 誤検知が相当多いため、正当な作業で出た場合は言い換えや手段変更で回避できることがほとんどだ。

2. なぜ出るのか——著作物の“再現”を止める仕組み

Anthropic の公式説明によれば、このフィルタの主目的は 「既存の素材をそのまま複製・再生(regurgitate)させない」ことにある。公式は Claude の役割を「既存の内容を再生産するのではなく、新しい内容とアイデアを生み出すこと」と位置づけ、加えて 知的財産権を侵害する使い方を禁じるポリシーを挙げている。

つまりフィルタは、出力が 「世の中に既に存在するテキストの逐語コピーに酷似している」と判断したときに発火しやすい。具体的には次のようなケースだ。

📄 定型テキストの逐語生成

MIT / Apache-2.0 / BSL / MPL などの ライセンス全文、標準的な行動規範やテンプレートを「そのまま書き出して」と頼むと、既存物の丸写しと判定されやすい。

🔁 既存ソースへの“一致”作業

「このオンライン資料と完全に一致するようファイルを直して」「元記事どおりに再現して」といった、外部の既存物を写し取る指示。

📚 長文ドキュメントの複製

既存 API ドキュメントや書籍・記事の大量引用/全文再掲。要約や再構成なら通りやすいが、逐語コピーは引っかかる。

注意:公式は「本当に著作物を引き出そうとしてこの警告が出ている場合、繰り返せば警告やアカウントの停止・終了があり得る」とも明記している。意図的な丸写し目的での回避はしないこと。ここで扱うのはあくまで正当な作業での誤検知の話だ。

3. よくある誤検知(false positive)パターン

公式も 「複製の意図がないのにこの拒否/エラーに遭遇するユーザーがいる」と誤検知の存在を認めている。実際、Claude Code の Issue には、次のような“悪意ゼロ”の作業で発火した報告が多数ある。

OSS リポジトリの初期整備

LICENSE ファイルや CI 設定、コミュニティ健全化ファイル(CODE_OF_CONDUCT 等)を作る定番のセットアップで停止。

リスト同士の突き合わせ

「オンラインの一覧と照合して差分を直して」という比較タスクの途中で、出力が既存一覧に近づき発火。

長時間エージェント実行の末に

1〜2時間走ったあと 400 で停止し、「トークン上限」と誤って診断されるケースも。実際は出力フィルタが原因。

Claude Code 側の既知のクセ:このエラーを受けると 同じ出力を何度も再試行するリトライループに入り、先に進めなくなることがある。ゼロファイルのまま長時間ループし、原因を取り違えやすい。ループに気づいたら手動で止めるのが先決だ(次章)。

4. 今すぐ直す方法

「安全機構が正しく働いた」場合と「誤検知」の場合で対応は変わるが、正当な作業なら次の順で高確率に回避できる。

① モデルに“丸写し”をさせない

ライセンス等の定型全文は、モデルに書かせずツールで取得する。例:npx license mitchoosealicense.com から貼付、gh repo create のテンプレート指定。

② プロンプトを“生成”寄りに言い換える

「そのまま再現」ではなく 「要約」「再構成」「自分の言葉で書き直す」「差分だけ出す」に変える。逐語一致を要求しないだけで通ることが多い。

③ リトライループを止める

Claude Code が同じ出力を再試行し続けたら Esc で中断。同じ指示を投げ直さず、言い換えてから再開する。

④ タスクを分割し1つずつ変える

どの出力が引き金か切り分けるため、大きな一括生成を小さく分ける。動く構成と1変数ずつ比較すると原因を特定しやすい。

⑤ 誤検知は公式に報告

正当な作業なのに繰り返し出るなら Anthropic サポートへ。公式もフィルタ改善のフィードバックを歓迎している。

言い換えの例(同じ目的でも通りやすくなる)

❌ 「MIT ライセンスの全文をそのまま LICENSE に書いて」
✅ 「LICENSE を作りたい。npx license mit を実行して生成して」

❌ 「この公式ドキュメントを一字一句そのまま貼り付けて」
✅ 「この公式ドキュメントを読んで、要点を自分の言葉で
     箇条書き要約して。原文の逐語コピーは不要」

5. 紛らわしいエラーとの見分け方

同じ「止まった」でも、原因はメッセージで判別できる。ステータスやキーワードで切り分けよう。

メッセージ / 種別 本当の原因 対処
Output blocked by content filtering policy(400) 出力が既存著作物の再現と判定 逐語コピーを避け言い換え/ツール取得
Prompt is too long(400) 入力がコンテキスト窓を超過 /compact/clear解説
usage limit reached プランの利用枠を消費し切った リセット待ち/上位プラン(解説
529 Overloaded / 500 サーバ側の一時的な過負荷・障害 時間を置いて再試行(解説
出力が途中で切れる max_tokens の出力上限に到達 出力上限を上げる/分割生成

迷ったら メッセージ文字列そのもので判断するのが確実だ。content filtering policy と書いてあれば本記事の話、too long なら入力超過、usage limit なら枠切れ。Claude Code のエラー全般は Claude Code のよくあるエラーと対処にもまとめている。

6. 再発防止チェックリスト

  • ライセンス・定型文書は モデルに書かせず、ツールやテンプレートで取得する
  • 既存物は「再現」ではなく 「要約・再構成・自分の言葉で」と依頼する
  • 「一字一句」「そのまま」「完全に一致」という語をプロンプトから外す
  • 大きな一括生成は 小さく分割し、引き金の出力を切り分けられるようにする
  • 400 で止まったら まずメッセージ文字列を読む——原因の取り違え(トークン上限と誤診断)を防ぐ
  • リトライループに気づいたら Esc で止め、言い換えてから再開する
  • 正当な作業での誤検知は サポートに報告してフィルタ改善に貢献する

まとめ

API Error: 400 Output blocked by content filtering policy は、使用量制限でもコンテキスト超過でもなく、Claude が返そうとした「出力」を安全フィルタが差し止めたという意味だ。主眼は 既存著作物の逐語再現の防止にあり、標準ライセンス生成や「既存物に一致させる」作業では 悪意なく誤検知することが多い。対処の芯はシンプルで、モデルに丸写しをさせず、生成・要約・ツール取得に置き換えること。そして 400 で止まったら、まずメッセージ文字列を読んで原因を取り違えないこと——これだけで大半は前に進める。

FAQ

Q. これは私のアカウントが警告されたということ?

A. 単発の誤検知であれば違う。ただし公式は、実際に著作物を引き出そうと繰り返すと警告やアカウント停止があり得ると明記している。正当な作業で出た1回で慌てる必要はない。

Q. MIT ライセンスすら書けないのは不便では?

A. ライセンス全文は「既存の定型テキスト」なので、モデルに丸写しさせるより npx license mitchoosealicense.com から取得する方が速く確実だ。誤検知の回避にもなる。

Q. トークン上限(Prompt is too long)と何が違う?

A. まったく別だ。too long入力のサイズが窓を超えた話で /compact 等で対処する。今回の content filtering policy出力の中身の話で、サイズを減らしても直らない。詳しくは こちら

Q. 何をやっても正当な作業で止まる。どうすれば?

A. プロンプトを生成・要約寄りに言い換え、タスクを分割しても再発するなら Anthropic サポートrequest id 付きで報告を。フィルタは改善が続いており、誤検知の共有が最短の解決につながる。