來源:src/constants/betas.ts、src/utils/betas.ts(間接)
// src/constants/betas.ts
CLAUDE_CODE_20250219_BETA_HEADER = 'claude-code-20250219'
INTERLEAVED_THINKING_BETA_HEADER = 'interleaved-thinking-2025-05-14'
CONTEXT_1M_BETA_HEADER = 'context-1m-2025-08-07'
CONTEXT_MANAGEMENT_BETA_HEADER = 'context-management-2025-06-27'
STRUCTURED_OUTPUTS_BETA_HEADER = 'structured-outputs-2025-12-15'
WEB_SEARCH_BETA_HEADER = 'web-search-2025-03-05'
TOOL_SEARCH_BETA_HEADER_1P = 'advanced-tool-use-2025-11-20' // 1P / Foundry
TOOL_SEARCH_BETA_HEADER_3P = 'tool-search-tool-2025-10-19' // Vertex / Bedrock
EFFORT_BETA_HEADER = 'effort-2025-11-24'
TASK_BUDGETS_BETA_HEADER = 'task-budgets-2026-03-13'
PROMPT_CACHING_SCOPE_BETA_HEADER = 'prompt-caching-scope-2026-01-05'
FAST_MODE_BETA_HEADER = 'fast-mode-2026-02-01'
REDACT_THINKING_BETA_HEADER = 'redact-thinking-2026-02-12'
TOKEN_EFFICIENT_TOOLS_BETA_HEADER = 'token-efficient-tools-2026-03-28'
ADVISOR_BETA_HEADER = 'advisor-tool-2026-03-01'
// 條件性(feature flag 控制)
SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER = feature('CONNECTOR_TEXT')
? 'summarize-connector-text-2026-03-13' : ''
AFK_MODE_BETA_HEADER = feature('TRANSCRIPT_CLASSIFIER')
? 'afk-mode-2026-01-31' : ''
CLI_INTERNAL_BETA_HEADER = USER_TYPE === 'ant'
? 'cli-internal-2026-02-09' : ''- 所有 Claude Code 請求都帶此 header
- 啟用 Claude Code 專屬的 API 行為(system prompt 格式等)
- 啟用思考區塊與回應文字的交叉輸出
- Bedrock 需放在
extraBodyParams.anthropic_beta(不能放 HTTP header)
- 啟用 1M token 的上下文視窗
- 在
paramsFromContext中動態追加(當 getSonnet1mExpTreatmentEnabled() 為 true) - Bedrock 需放在
extraBodyParams
- 啟用
context_managementAPI 欄位 - 控制 thinking token 的保留策略(keep-all vs clear)
- 啟用
output_config.format欄位 - 僅在
modelSupportsStructuredOutputs(model)為 true 時添加
- 啟用 web 搜尋工具支援
- 啟用
defer_loading工具屬性 - 1P/Foundry 用
advanced-tool-use,Bedrock/Vertex 用tool-search-tool - Bedrock 需放在
extraBodyParams
- 啟用
output_config.effort欄位 - 值可為
'low'|'medium'|'high'|'max'(字串) - ant 用戶可指定數值 effort(透過
anthropic_internal.effort_override)
- 啟用
output_config.task_budget(token 總量和剩餘量) - 讓模型知道自己的 token 預算以便調整輸出節奏
- 僅在
shouldIncludeFirstPartyOnlyBetas()時添加(1P only)
- 啟用
cache_control.scope: 'global' - 系統提示在跨用戶之間共享快取(而非僅限同一用戶)
- 需
shouldUseGlobalCacheScope()判斷(subscriber + 非 MCP 工具場景)
- 啟用
speed: 'fast'請求參數 - Header 使用 latch 機制(sticky-on)以避免破壞 prompt cache
speedbody param 仍動態(cooldown 時不帶 speed='fast',但 header 仍送)
- 啟用 thinking token 的隱藏/過濾
- 與
thinkingClearLatched搭配使用(>1h 無 API 呼叫時清除 thinking)
- 減少工具呼叫的 token 使用量
- 最新 beta,2026-03-28 引入
- 啟用 server-side advisor(
type: 'advisor_20260301') - 讓另一個 Claude 模型作為 advisor 在同一次請求中提供建議
- 即使非 agentic query,只要
isAdvisorEnabled()即添加(以解析歷史中的 advisor blocks)
- 僅在
feature('TRANSCRIPT_CLASSIFIER')和 auto mode 首次啟用時添加 - 使用 latch 機制(sticky-on)
- 告知 API 目前處於 auto/AFK 模式
- 僅限
USER_TYPE === 'ant'(Anthropic 員工) - 啟用內部 API 功能
- 需
feature('CONNECTOR_TEXT')build flag - 啟用 connector_text 類型的內容區塊
export const BEDROCK_EXTRA_PARAMS_HEADERS = new Set([
'interleaved-thinking-2025-05-14',
'context-1m-2025-08-07',
'tool-search-tool-2025-10-19',
])這三個 header 在 Bedrock 上必須透過 extraBodyParams.anthropic_beta 傳遞,而非 HTTP anthropic-beta header。
Beta headers 的主要組裝點,負責:
- 取得 model-specific betas(
getModelBetas(model)) - 根據
isAgenticQuery添加 context management beta - 根據 tool search 狀態添加對應 header
- 根據
shouldIncludeFirstPartyOnlyBetas()添加 1P-only betas
| Beta | 條件 |
|---|---|
| claude-code-20250219 | 始終(model betas) |
| context-1m | 動態(Sonnet 1M 實驗 or 模型支援) |
| context-management | isAgenticQuery |
| prompt-caching-scope | shouldUseGlobalCacheScope() |
| fast-mode | fastModeHeaderLatched(sticky-on) |
| afk-mode | afkHeaderLatched AND isAgenticQuery AND shouldIncludeFirstPartyOnlyBetas |
| task-budgets | shouldIncludeFirstPartyOnlyBetas AND 有 taskBudget |
| advisor | isAdvisorEnabled() |
| effort | modelSupportsEffort(model) |
| structured-outputs | modelSupportsStructuredOutputs(model) AND outputFormat 指定 |
| token-efficient-tools | model betas(若模型支援) |