AI・機械学習
Claude Codeセッションの価値を最大化する
Maximizing the value of your Claude Code sessions (claude.com)
要約
Claude Codeセッションでトークン使用量を削減し、効率を最大化するためのヒントが紹介されています。タスク間でのクリアコマンドの使用、モデルや努力レベルの設定、ファイルのアットマーク指定、コマンドへのサイレントフラグ追加、不要なコンテキストの削除などが推奨されています。これにより、トークンあたりのコストを抑え、より価値の高い推論に集中させることができます。
全文翻訳
Claude Codeセッションの価値を最大化する
効率的なセッションを実行し、各トークンから最大限の価値を引き出す方法。
TL;DR
タスク間では /clear を実行してください。これにより、以前の無関係なコンテキストがモデルに送り返されるのを防ぎ、トークン使用量を削減できます。
開始前にモデルと努力レベルを設定してください。会話の途中でどちらか一方を変更すると、プロンプトキャッシュが破損し、トークンコストが増加する可能性があります。
ファイル名を指定する代わりに @-mention してください。ファイルはメッセージに直接添付され、Readコール、またはClaudeがファイルを探す必要がある場合は検索を節約できます。
ノイズの多いコマンドにはサイレントフラグを追加するか、サブエージェントで実行してください。コマンドの出力はファイルと同様に会話に追加され、セッションの残りの期間そこに留まります。
新しいセッションでは /context を一度実行してください。ロードされているもの(CLAUDE.md、MCPツール定義など)が表示されるため、不要なものをカットできます。
キーボードから離れる前に /compact を実行してください。プロンプトキャッシュは1時間で期限切れになり、キャッシュされている間に会話を要約する方がはるかに安価です。
価値の最大化
ごく最近まで、コードを記述するために使用していたツールはフラットな料金(または無料)でした。その日のうちにテストを1つ修正したとしても、エディタの費用は同じだったので、個々のタスクには独自の価格がありませんでした。Claude Codeのようなエージェンティックコーディングツールでは、そうではありません。同じ完了したタスクでも、使用方法によって異なるコストがかかる場合があります。あるセッションでは、Claudeはテストとそれがカバーするファイルを読み取り、編集を行い、数回のターンで完了します。別のセッションでは、まずリポジトリ全体をgrepし、同じ2つのファイルに到達する途中で多数のファイルを読み取ります。これらの各ターンは、その日の会話にそれまでに読み込まれたすべてのものも引きずります。
これは同じ修正ですが、使用したトークン数が異なり、モデルは必要のない10個のファイルをすべて考慮する必要がありました。
トークンを効率的に使用することは、全体の使用量を減らすことを意味しません。それは、使用するトークンが実際に要求したことに対して使われるようにすることを意味します。
したがって、トークンの価格を決定するもの、セッションが送信するトークン数を決定するもの、そしてその過程でセッションの実行方法に何が影響するかを見ていきましょう。
トークンの価格を決定するもの
トークンごとに請求されますが、実際に支払っているのは推論、つまりGPU(またはTPU、あるいはモデルが実行されているもの)がトークン上でモデルを実行する時間です。3つの要因がトークンにかかる時間を決定します。実行しているモデル、入力トークン(入ってくる)か出力トークン(出ていく)か、そしてキャッシュされているかどうかです。
モデル
より大きなモデルは、入力トークンと出力トークンの両方でより多くの作業を行います。どのモデルがどのような種類の作業に適しているかは、それ自体がトピックであり、「Choosing a Claude model and effort level in Claude Code」でカバーしました。この投稿では、これから説明する他のすべてがモデルの価格に掛けられることを知っておくだけで十分です。問題が本当に難しいか曖昧な場合はより大きなモデルを、作業がルーチンである場合はより小さなモデルを使用してください。
曲線は説明目的でのみ示されています。実際のベンチマークデータを示すものではありません。
入力トークンと出力トークン
リクエストは2つのフェーズを経てGPUを通過し、それぞれコストが異なります。まず、プリフィル中に、モデルはシステムプロンプト、CLAUDE.md、メッセージ、およびそれ以降会話に追加されたすべてのもの(Claudeが読み取ったファイルと実行したコマンドの出力)を読み取ります。これらが入力トークンです。
次に、デコード中に、出力トークン(思考、実行するツールコール、表示されるテキスト)を書き込みます。これはトークンごとに1つずつ発生します。200トークンの応答は、モデルの実行が200回連続して行われることを意味します。トークンあたりでは、デコードはGPUをはるかに長く占有するため、出力は入力の約5倍の価格が設定されています。
セッションの出力トークンの多くは思考トークンであり、ターンごとにモデルがどれだけ思考するかは、努力レベルが制御します。モデルと同様に、/effort で選択したレベルは、次のセッションでもデフォルトとして保持されます。
ヒント: 新しいセッションで /model と /effort を一度実行して、実際にどの設定になっているかを確認してください。どちらも前回選択したものを記憶しており、その決定は慎重に行いたいものです。
ヒント: セッションが単調な作業になるとわかっている場合は、MAX_THINKING_TOKENS=0 を使用すると、そのセッション(Fable 5を除く)の思考がオフになり、これは /effort low のステップの下になります。
プロンプトキャッシュ
リクエストがサーバーがちょうど見たリクエストとまったく同じトークンで始まる場合、その共有された開始部分の状態は同じになるため、サーバーは前回からそれを保持しておき、後続の部分だけをプリフィルできます。これはプロンプトキャッシュと呼ばれます。
キャッシュからの読み込みは、サーバーが状態を計算するのではなくロードするため、入力価格の0.1倍のコストがかかります。キャッシュにトークンを書き込むには、サーバーが状態を保持する必要もあるため、通常の入力よりも最大2倍のコストがかかります。しかし、書き込みはトークンごとに1回行われ、その後の各ターンで0.1倍の読み込みが発生します。
Claude Codeは各リクエストでプロンプトキャッシュを管理しており、オンにする必要はありません。ただし、破損させる可能性があるため、コストの急増を回避する方法を知っておくことが重要です。
「utils.test.ts の失敗したテストを修正してください」と入力したとします。Claude Codeが送信するのは次のとおりです。
Claude Codeは、システムプロンプト(ツール定義を含む)、CLAUDE.md、およびメッセージから最初の要求を組み立て、それを送信します(入力トークン)。キャッシュには何も入っていないため、すべてプリフィルされ、キャッシュに書き込まれます。
モデルは見たことのないテストを修正できないため、少し考え、utils.test.ts の Read コール(出力トークン)で応答します。Claude Codeはファイルを読み取り、会話に追加し、すべてを再度送信します(入力トークン)。この時、リクエスト1のすべてが10分の1の価格でキャッシュから読み取られ、フルプライスでプリフィルされる新しいものは、Readコールとファイルだけです。
次にモデルはテスト対象のファイルを要求します(出力)。別のRead、別の追加、そしてすべてが再度送信されます。リクエスト1と2はキャッシュから、2番目のファイルはフルプライス(入力)で、残りは新しいものです。
モデルは Edit を応答します(出力)。Claude Codeはそれを適用し、結果を追加して、すべてを再度送信します。同じ話です。Editとその結果は新しく、それ以前のものはすべてキャッシュ読み込み(入力)です。
モデルは npm test を実行します(出力)。Claude Codeはテスト出力を追加し、すべてを再度送信します。テスト出力が唯一新しい部分です(入力)。
テストはパスし、モデルは短い要約で応答します(出力)。ツールコールがないため追加するものもリクエスト6もなく、これで完了です。
1つの小さな修正のために5つのリクエストが発生し、それぞれにそれまでの会話全体が含まれていました。典型的なターンは不均衡です。数十万トークンが入力され、数百トークンが出力されます。しかし、そのターンで新しいものだけがフルプライスでプリフィルされます。それがターンごとの請求額全体です。履歴のキャッシュ読み込み、新しいもののフル入力価格、応答の出力価格です。
これはサブスクリプションにも適用されます。これらの価格は直接表示されませんが、同じリクエストが制限を引き下げます。
キャッシュはリクエストの最初から一致する必要があり、リクエストは常に同じ順序で送信されます。ツール定義、システムプロンプト、会話(CLAUDE.mdが先頭)です。そのプレフィックスのいずれかが変更されると、それ以降のすべてが再度プリフィルされます。会話の最後にツール結果が追加されると、