🎱

Cline × Claude3.7のBudgetの上限が”6553”な理由

に公開

はじめに

ClineでClaude 3.7sonnetのextended thinking(以下thinking)をこのように設定できる。

この最大値「6553」への疑問は長らくあったが、深く考えずとりあえずmaxにしていた。

ある日、この値の理由を聞かれたことがあって改めてコードを調べたところ、Cline側での実装の問題であることが判明したため、これを修正するパッチを出しました。

https://github.com/cline/cline/pull/3627

以下は、このPRの解説及びClaude3.7のthinkingについて調べた内容です。興味ある人いるのかな。

Claude 3.7 Sonnetの仕様

max_tokens

max_tokensは各モデルの出力トークン上限です。公式にもある通り、Claude 3.7 Sonnetでは最大64,000を謳っています。

https://docs.anthropic.com/en/docs/about-claude/models/overview

これで話が終わるとシンプルなのですが、実際にはClaude 3.7 Sonnetのmax_tokensはコンテキストにより複数存在します。

thinking.budget_tokens

thinkingモードのbudget_tokensは、モデルの出力トークンのうち、内部的な思考(thinking)に予算(budget)を割り当てていいか。要はどのくらい″深く考える″かを規定する値です。当たり前ですが、budget_tokens < max_tokensである必要があります。

2つのトークンのまとめ

Claude3.7 Sonnetの2つのトークンについて、まとめるとこのようになる。

  • thinkingでは64000のmax_tokensを設定できれば良い
  • thinkingでは1024~32000のbudget_tokensを設定できれば良い

Clineでの実装状況

長い前提に付き合って貰いましたが、実際のClineの処理(の抜粋)をご覧ください。

実装(抜粋)

src/shared/api.ts
...
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,
	},
...
webview-ui/src/components/settings/ThinkingBudgetSlider.tsx
// 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