簡短回答
Claude 遇到觸發原廠安全策略的請求時,不會報錯。介面照常返回 HTTP 200,但:content是空陣列[],output_tokens為0;stop_reason是refusal;stop_details裡寫明拒答的類別(如cyber網路安全)和一段英文說明。
message.content[0],就會丟擲 IndexError;用 OpenAI 相容格式呼叫時,拿到的是空字串,finish_reason 為 refusal。
拒答通常在 1~2 秒內返回。是否計費取決於拒答類別:cyber 等類別在輸出前被拒答時不計費,詳見下文「計費規則」。
拒答的輸出體
下面是同一條觸發網路安全拒答的請求,在四種呼叫方式下的實測返回(2026-09-29 實測,id 已打碼):- 原生 · 非流式
- 原生 · 流式
- OpenAI 相容 · 非流式
- OpenAI 相容 · 流式
POST /v1/messages,stream: false:拒答也可能發生在流式輸出的中途:先輸出了一部分正文,最後以
stop_reason: "refusal" 結束。這時已輸出的部分是不完整的,應當丟棄。拒答類別
stop_details.category 目前有五個取值:
拒答對應不到具體類別時,
category 和 explanation 都是 null,這是正常值。explanation 的文字隨時可能變化,只適合展示,不要拿來做字串匹配。
常見觸發場景
category: "cyber"(網路安全)是開發者最常遇到的一類。Claude 對網路安全相關請求有一層即時防護,下面這些任務都可能觸發:
- 讓模型尋找程式碼漏洞、判斷一段程式碼「是否存在漏洞」、給出漏洞型別(CWE)
- 編寫或補全漏洞利用程式碼(exploit)、滲透測試步驟
- 分析、改寫惡意程式碼
計費規則
按原廠規則(截至 2026 年 9 月,原廠可能根據誤攔率調整):
無論是否計費,拒答請求都會計入速率限制。
usage 裡照常顯示 token 數,這是計數,不代表一定扣費。
如何識別與處理
1
先判斷 stop_reason,再取內容
原生格式看
stop_reason == "refusal",OpenAI 相容格式看 finish_reason == "refusal"。確認不是拒答之後,再去讀 content。2
把拒答當作一類結果記錄
拒答是一次成功的呼叫,不是網路錯誤。評測類任務建議單獨記為「拒答」,連同
stop_details.category 一起存檔,而不是計入失敗重試。3
不要原樣重試
同一內容原樣重試,大機率還是同樣的拒答,還會佔用速率限制;部分類別每次都會產生輸入費用。
4
多輪對話要先重置上下文
多輪對話裡某一輪被拒答後,要刪掉或改寫觸發拒答的那一輪,或者清空歷史,再繼續對話。不重置的話,後續請求會持續被拒答。
5
定期分析拒答集中在哪類內容
按
category 統計,就能看出是哪類任務在觸發。再決定這部分內容是否改用其他模型處理。- Anthropic SDK
- OpenAI SDK
合規的安全研究怎麼辦
拒答說明裡提到的 Cyber Verification Program(網路安全驗證計劃),是原廠面向合規安全研究的免費申請計劃:通過身份驗證後,漏洞利用、攻防工具開發這類「高風險兩用」任務可以放寬。但勒索軟體開發、大規模資料竊取這類「禁止用途」,任何情況下都會被攔截。 這個計劃由組織管理員以原廠賬號申請。通過第三方平臺呼叫時,原廠說明「並非所有平臺都參與」,API易 目前不提供該計劃的接入。 所以通過 API易 呼叫時,對被拒答的樣本:- 在評測結果裡如實記為「拒答」,連同類別一起統計;
- 或改用其他模型處理這部分內容。
與 OpenAI 拒答的區別
OpenAI 模型的拒答形態詳見 OpenAI 模型拒答長什麼樣?。
常見問題
被拒答也會扣費嗎?
被拒答也會扣費嗎?
看類別和時機。輸出前被拒答、類別為
cyber、general_harms 或 null 的不計費;bio、frontier_llm、reasoning_extraction 按輸入計費;流式中途被拒按輸入加已輸出部分計費。詳見上文「計費規則」。能關閉拒答嗎?
能關閉拒答嗎?
不能。拒答由原廠模型根據其安全策略決定,API易 無法關閉,也無法調整它的尺度。被拒答的內容建議記為拒答結果,或改用其他模型處理。
同一個資料集,為什麼有的樣本被拒、有的正常?
同一個資料集,為什麼有的樣本被拒、有的正常?
防護按每一條請求的內容單獨判斷。程式碼片段本身的特徵、提示詞的問法都會影響結果,所以同一個資料集裡通常只有一部分樣本被拒。實測同一條被拒的樣本連續重發,結果基本穩定一致。
拒答時 usage 裡的 output_tokens 為什麼是 0?
拒答時 usage 裡的 output_tokens 為什麼是 0?
模型沒有生成任何內容就結束了,所以輸出為 0,只有輸入被計數。這也是區分「拒答」和「被 max_tokens 截斷」的方法:後者
stop_reason 是 max_tokens,且輸出 tokens 等於你設定的上限。相關文件
Claude 響應資料處理
流式與非流式響應結構、stop_reason 取值
OpenAI 模型拒答長什麼樣?
GPT 系列拒答的形態與識別方法
內容安全如何合規性?
平臺內容安全與合規政策