プロンプト活用術

Claude Fable 5.1が回答を拒否したらどうするか?refusalの仕組みとフォールバック設定を解説

kidaken-ai

Claude Fable 5.1をAPIで使っていると、ごくまれに回答が返ってこず、stop_reasonが"refusal"になることがあります。正当な目的で使っているのに処理が止まってしまうと、「何が悪かったのか」「どう対処すればいいのか」と困ってしまいます。

結論から言うと、これはFable 5.1に組み込まれた安全のための判定の仕組みによるもので、プログラム側で「拒否されたことを検知する処理」と「別モデルで続きを処理するフォールバック設定」を用意しておくのが正しい対処法です。判定をすり抜けようとするのではなく、拒否が起きても処理が止まらない設計にしておくことが重要です。

この記事では、Anthropicの公式ドキュメントをもとに、拒否(refusal)の仕組み、プログラムでの検知方法、フォールバックの設定、正当な利用で拒否されにくくするための考え方を整理します。なお、この記事は以前公開した内容を、2026年10月時点の公式情報にもとづいて全面的に書き直したものです。

るみな
るみな

せっかく正しい使い方をしてるのに断られたら困るよね。うまく抜け道を探せばいいの?

きだけん
きだけん

抜け道探しはおすすめしません!拒否されても別モデルで続きを処理する「フォールバック」を設定しておくのが公式のやり方ですよ。

Fable 5.1の「回答拒否」とは何か

安全のための判定でリクエストが止まる仕組み

Fable 5.1などの上位モデルには、悪用のおそれがある依頼を判定する仕組み(安全分類器)があります。判定に引っかかると、APIはエラーではなくHTTP 200の正常な応答を返しつつ、stop_reasonを"refusal"にして処理を止めます。

エラーではないため、プログラムがstop_reasonを確認せずに本文だけを読み取ろうとすると、空や途中までの回答をそのまま使ってしまうおそれがあります。

拒否の理由はstop_detailsで分かる

拒否された応答にはstop_detailsという情報が付きます。ここには拒否のカテゴリ(例:cyber、bioなど)と説明が入っています。カテゴリは今後増える可能性があるため、決め打ちせずに記録しておくのがよいでしょう。

拒否は通常の会話の「お断り」とは別物

Claudeが文章の中で「その依頼にはお答えできません」と返すのは、モデル自身の判断による通常の回答です。一方、stop_reason: "refusal"は、安全の仕組みがリクエスト自体を止めた状態です。claude.aiで普段感じる「断られる」場面の傾向と聞き直し方については、Claudeが断ってくる場面の解説記事を参考にしてください。

拒否をプログラムで検知する方法

まずstop_reasonを確認してから本文を読む

Fable 5.1を使うプログラムでは、応答の本文を読む前に必ずstop_reasonを確認します。Pythonでの基本的な書き方は次のとおりです。

response = client.messages.create(
    model="claude-fable-5-1",
    max_tokens=16000,
    messages=[{"role": "user", "content": "..."}],
)

if response.stop_reason == "refusal":
    # 拒否された:カテゴリを記録して、別の処理に回す
    print(response.stop_details.category if response.stop_details else None)
else:
    for block in response.content:
        if block.type == "text":
            print(block.text)

拒否の記録を残しておく

どの処理で、どのカテゴリの拒否が起きたかを記録しておくと、プロンプトの書き方を見直すときの手がかりになります。正当な業務で同じ拒否が繰り返し起きる場合は、依頼の背景や目的が伝わっていない可能性があります。

フォールバック設定で処理を止めない

サーバー側フォールバックとは

Anthropicは、拒否が起きたときに同じリクエストを自動で別のモデルに回して処理を続ける「フォールバック」の仕組みを用意しています。Claude APIでは、リクエストにfallbacksというパラメーターを付けるだけで使えます。

最も簡単なのはfallbacks: "default"を指定する方法です。拒否のカテゴリに応じて、APIが適切なフォールバック先を選んでくれるため、自分でモデルの一覧を管理する必要がありません。この形式を使うには、ベータ機能のヘッダーserver-side-fallback-2026-07-01が必要です。

フォールバックの料金

フォールバック先で処理された部分は、フォールバック先のモデルの料金で課金されます。出力の途中で拒否された場合、それまでに生成された分は通常どおり課金されます。詳しい課金ルールは公式ドキュメントで確認してください。

使えない環境もある

  • サーバー側のfallbacksパラメーターは、Batch APIでは使えません
  • Amazon Bedrock、Google CloudのVertex AI、Microsoft Foundry経由で使う場合は、SDKに用意されているクライアント側のフォールバック機能を使います

正当な利用で拒否されにくくする考え方

目的と背景を具体的に伝える

セキュリティの診断や医療・研究の文章作成など、正当な目的でも内容がきわどく見える依頼はあります。そうした場合は、誰が、何のために、どの範囲で使うのかをシステムプロンプトで明確にしておくと、意図が伝わりやすくなります。システムプロンプトの書き方はsystem promptの解説記事で紹介しています。

判定をすり抜けようとしない

言い換えや分割で判定を回避しようとする行為は、利用規約に反するおそれがあるうえ、アカウントの利用停止につながる可能性もあります。正当な業務で拒否が繰り返し起きる場合は、フォールバックを設定したうえで、Anthropicのサポートに相談するのが確実です。

拒否が起きても困らない設計にする

どれだけ注意しても、判定の仕組みには誤判定がつきものです。「拒否は起きるもの」という前提で、検知・記録・フォールバックの3つを最初から組み込んでおくことが、安定したシステムを作るいちばんの近道です。

るみな
るみな

拒否されても、別のモデルが続きをやってくれるなら安心だね!

きだけん
きだけん

その通りです。ただし最後に返ってきた応答もrefusalなら、フォールバック先も断ったという意味なので、必ず確認してくださいね。

まとめ

Claude Fable 5.1の回答拒否(stop_reason: "refusal")は、安全のための判定の仕組みによるもので、エラーではなく正常な応答として返ってきます。対処のポイントは次のとおりです。

  • 本文を読む前にstop_reasonを確認する:拒否を見逃して空の回答を使わないようにする
  • stop_detailsのカテゴリを記録する:繰り返し起きる拒否の原因を探る手がかりになる
  • フォールバックを設定する:fallbacks: "default"で、拒否されても別モデルで処理を続けられる
  • 目的と背景を明確に伝える:正当な利用であることをシステムプロンプトで示す
  • 判定をすり抜けようとしない:規約違反やアカウント停止のリスクがある

Fable 5.1の料金や使いどころについてはClaude Fable 5.1のAPI料金の解説記事もあわせてご覧ください。仕様は更新されることがあるため、実装の前には必ず公式ドキュメントで最新情報を確認してください。

ABOUT ME
きだけん
きだけん
生成AI講師/副業コンサルタント
AI初心者が副業で月10万円を目指すための実践ノウハウを発信しています。生成AI講師として20名以上を指導し、自身もクラウドワークスで案件受注中。教育関連企業で10年勤務、娘の学費を稼ぐため日々研鑽中です。 全ての人が何かを「継続」し、「成果を出す」ことの手伝いをライフワークにしたいと考えています。
記事URLをコピーしました