Cline × Claude3.7のBudgetの上限が”6553”な理由
はじめに
ClineでClaude 3.7sonnetのextended thinking(以下thinking)をこのように設定できる。
この最大値「6553」への疑問は長らくあったが、深く考えずとりあえずmaxにしていた。
ある日、この値の理由を聞かれたことがあって改めてコードを調べたところ、Cline側での実装の問題であることが判明したため、これを修正するパッチを出しました。
以下は、このPRの解説及びClaude3.7のthinkingについて調べた内容です。興味ある人いるのかな。
Claude 3.7 Sonnetの仕様
max_tokens
max_tokensは各モデルの出力トークン上限です。公式にもある通り、Claude 3.7 Sonnetでは最大64,000を謳っています。
これで話が終わるとシンプルなのですが、実際にはClaude 3.7 Sonnetのmax_tokensはコンテキストにより複数存在します。
- Thinkingなし: 8,192 Token?
- AWSだがこのドキュメントが根拠
- 公式なエビデンスが見つからないが、実際10000文字以上の出力を試みると8500代で止まる
- ……やっぱり超えてないか? この辺りは正確な情報が曖昧。
- Thinkingあり: 64,000 Token
- Thinkingあり+β版機能: 128,000 Token
- https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking#extended-output-capabilities-beta
- β版はヘッダーに
output-128k-2025-02-19
を設定して使う
thinking.budget_tokens
thinkingモードのbudget_tokensは、モデルの出力トークンのうち、内部的な思考(thinking)に予算(budget)を割り当てていいか。要はどのくらい″深く考える″かを規定する値です。当たり前ですが、budget_tokens < max_tokensである必要があります。
-
1024 Token
- 拡張思考モードを有効化する際の最小予算。
-
The minimum budget is 1,024 tokens.
https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking#important-considerations-when-using-extended-thinking
-
4,000 Token~
- 中程度の思考はここから試してみるのが良さそう。
-
Anthropic suggests trying at least 4,000 tokens to achieve more comprehensive and nuanced reasoning.
https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-anthropic-claude-37.html
-
21,333 Token~
- この閾値からストリーミング出力が必要
-
Streaming is required when max_tokens is greater than 21,333.
https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking#important-considerations-when-using-extended-thinking
-
32,000 Token~
- ここからはバッチ処理による非同期呼び出しが推奨されそう。ここを最⼤予算とすればとりあえず良さそう。
-
For thinking budgets above 32K: We recommend using batch processing for workloads where the thinking budget is set above 32K to avoid networking issues. Requests pushing the model to think above 32K tokens causes long running requests that might run up against system timeouts and open connection limits.
https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking#important-considerations-when-using-extended-thinking
2つのトークンのまとめ
Claude3.7 Sonnetの2つのトークンについて、まとめるとこのようになる。
- thinkingでは64000のmax_tokensを設定できれば良い
- thinkingでは1024~32000のbudget_tokensを設定できれば良い
Clineでの実装状況
長い前提に付き合って貰いましたが、実際のClineの処理(の抜粋)をご覧ください。
実装(抜粋)
...
export const anthropicModels = {
"claude-3-7-sonnet-20250219": {
maxTokens: 8192,
contextWindow: 200_000,
supportsImages: true,
supportsPromptCache: true,
inputPrice: 3.0,
outputPrice: 15.0,
cacheWritesPrice: 3.75,
cacheReadsPrice: 0.3,
},
...
// Constants
const DEFAULT_MIN_VALID_TOKENS = 1024
const MAX_PERCENTAGE = 0.8
const THUMB_SIZE = 16
...
const maxTokens =
apiConfiguration?.apiProvider === "gemini"
? geminiModels[geminiDefaultModelId].maxTokens
: anthropicModels["claude-3-7-sonnet-20250219"].maxTokens
// use maxBudget prop if provided, otherwise apply the percentage cap to maxTokens
const maxSliderValue = (() => {
if (maxBudget !== undefined) {
return maxBudget
}
return Math.floor(maxTokens * MAX_PERCENTAGE)
})()
...
わかること
maxTokens
(8192)に、MAX_PERCENTAGE
(0.8)を掛け算して切り捨てる(Math.floor
)と6553ですね、はい。表題の数字はこれです。
想定する修正方針
という訳で、以下の方針で直せばいいのかなと思います。最初のPRはそれです。
- max_tokens=128,000はβ版なので採用しない
- max_tokensはthinking前にも使われるので、直接64000にしない
- 代わりに
.thinkingConfig.maxBudget
から64000を取り出す
- 代わりに
- budget_tokensのスライダーは32000にしたいので、claude3.7系は
.thinkingConfig.maxBudget
*0.5で設定する。
自信あるようなないような、って感じなのでClaude3.7の仕様に詳しい方はコメントをお待ちしています。
おまけ
ちょっと仕様が特殊すぎる気がするので同様にClaude3.7を使ってるミドルウェアとか見てみるといいのかな。
Appendix. Gemini2.5 Flashについて
似たようなことができるGemini2.5 Flashは、パラメータのチューニングに関する記述がないため.thinkingConfig.maxBudget
*1.0、つまりありのまま設定できるように実装しました。
Discussion