テキストはモデルが実際に使う byte-pair encoding で符号化されるため、表示される分割は推定ではなく実際のものです。入力がメッセージ配列として解析できる場合は、メッセージごとに集計し、全体に占める割合を表示します。切り捨てプレビューはメッセージを順に走査し、残りが上限に収まるまで破棄します。結果が上限ちょうどではなく手前で止まりがちなのはそのためです。
system プロンプトにあと何条ルールを入れられるかを決めるとき。最も古い履歴が黙って消える前に、何ターン保持するかを見極めるとき。昨日まで動いていたリクエストが context length エラーを返す理由を説明するとき。長いツール出力を組み込む前に、ウィンドウを占める価値があるか確認するとき。
符号化はすべてブラウザ内の Web Worker で行われます。貼り付けた内容がアップロード・記録されたり、モデルプロバイダーへ送信されたりすることはありません。プロンプトには資格情報や顧客データ、未公開の製品情報が含まれがちですが、これは設定で切り替える話ではなく、そもそも送信先となるサーバーが存在しません。
このテーマに関するよくある疑問と回答をまとめました。
ここで数えているのは貼り付けた内容だけです。実際の API 呼び出しでは、チャット形式そのもの(メッセージごとのロール標識や区切り記号)にもトークンが使われ、さらに添付した tool や function のスキーマ、モデル自身の応答も加算されます。ここでの数値は入力の下限と考えてください。
変わります。しかも差は小さくありません。GPT-4o 世代は o200k_base、GPT-4 と GPT-3.5 は cl100k_base を使い、新しい語彙は CJK テキストに対して明確に効率的です。Anthropic や Llama はまったく別のトークナイザーを使うため、誤った数値を出すくらいならと、本ツールでは対象外にしています。
会話を管理しているのが誰かによります。API を直接呼べば context length エラーで失敗します。フレームワークやチャットクライアントは多くの場合まず切り詰め、最も一般的なのは古いメッセージの破棄、system プロンプトの固定、あるいは要約への置き換えです。ここの戦略切り替えで、自分の会話に対する各結果を確認できます。
固定の比率はありません。だからこそ勘に頼ると外れます。よく使う語はひとつのトークンにまとまることが多い一方、珍しい文字は複数トークンを消費し、この点で o200k_base は cl100k_base よりかなり効率的です。代表的なサンプルを貼り付けてエンコーディングを切り替え、経験則ではなく自分のテキストで差を確認してください。
含まれます。予算の観点では普通のメッセージであり、長ければ会話履歴と同じ領域を奪い合います。特別なのは多くのクライアントがそれを破棄しない点だけで、ここの「system を保持」戦略はまさにそれを再現しています。固定する代償として、より多くの履歴が捨てられます。
されません。エンコーディングの語彙はブラウザにダウンロードされ、計算はあなたの端末の Web Worker 内で行われます。テキストを運ぶリクエストもログもモデルプロバイダーの関与もありません。プロンプトには資格情報や顧客データが含まれがちなので、これは重要な点です。