広告

PSA: AnthropicなしでClaude Codeを使う:60秒ごとのローカルKVキャッシュ無効化問題の直し方。

Reddit r/LocalLLaMA / 2026/3/31

💬 オピニオンDeveloper Stack & InfrastructureTools & Practical Usage

要点

  • この記事では、Claude Codeがリクエストのたびに動的なテレメトリヘッダーと`git status`の更新情報をシステムプロンプトへ注入するため、ローカル推論バックエンドでのプレフィックス一致が妨げられることを説明している。
  • `llama-server`(`llama.cpp`経由)やLM Studioのようなローカルサーバを使う場合、プロンプトの改変によってKVキャッシュが完全に無効化され、ツール呼び出しのたびに20K+トークンのシステム/ツールプロンプトを毎回処理し直すことになる。
  • 根本原因は、`llama.cpp`のKVキャッシュがプロンプト先頭での厳密な文字列一致に依存しており、ヘッダーの変更(例:`x-anthropic-billing-header`)やプロンプト内容の変更によってキャッシュ再利用が壊れてしまう点にある。
  • 対処法として、`~/.claude/settings.json`を編集し、gitの指示とテレメトリ/エラーレポートを無効化する。また、ダミーのAPIキー値を使って`ANTHROPIC_BASE_URL`でローカルの`llama-server`を指すようにClaude Codeを設定する方法が提示されている。

TL;DR: Claude Code は あらゆるリクエストごとに、動的なテレメトリヘッダーと git status の更新内容をシステムプロンプトへ注入します。下流で llama-serverLM Studio といった llama.cpp のようなローカル推論バックエンドを使っている場合、この動的注入が即座にプレフィックス一致を壊し、KV キャッシュを丸ごとフラッシュし、すべての些細なツール呼び出しのたびに 20K+ トークンのシステムプロンプトをゼロから再処理するようにハードウェアに強制します。これは ~/.claude/settings.json で修正できます。

背景 以前投稿したとおり、Claude Code は現在、上書きできないアンチ推論(anti-reasoning)用のシステムプロンプトを挿入するようになりましたが、追加できるのは --system-prompt-file による追記のみです。私は最終的に Anthropic に見切りをつけ、この手の企業的な振る舞いのためにサブスクリプションを完全にキャンセルし、llama-server を使ってローカルでオープンウェイトのモデルへ切り替えるという一歩をようやく踏み出しました。

しかし、llama-server がツール呼び出しのたびに永続 KV キャッシュを無効化していることに気づきました。その結果、100 トークンのツール呼び出しであっても、システムおよびツールのプロンプトとして最低 20K トークン分の すべて を再処理させられていました。サーバーログは明確に、キャッシュデータがないためにフルプロンプトを再処理を強制しているという趣旨を明示しています。

根本原因 llama.cpp は KV キャッシュを使うために厳密な文字列一致に依存しています。プロンプトの先頭が一致していればキャッシュを再利用し、新しいトークン分(デルタ)のみを処理します。

Claude Code(>= 2.1.36) は、ターンのたびにプロンプトを変更する次の 2 つのことを行っています:

  1. テレメトリハッシュ: 課金/テレメトリヘッダー(x-anthropic-billing-header: cch=xxxxx)を注入し、そのハッシュが あらゆる 1 リクエストごとに 変わります。
  2. Git スナップショット: git status の出力を環境ブロックへ注入します。ファイルに触れるたびにプロンプトが変わります。

対処方法 Claude Code がそれらを飲み込んでしまうことが多いため、単にターミナルで export するだけでは常に解決できません。不要に動的なシステムプロンプトを止め、CLI を自分のハードウェアへ向けるには、以下のように Claude Code の設定を調整してください。

~/.claude/settings.json(またはプロジェクトのローカル設定)を開き、次の内容が env ブロックに入っていることを確認してください:

{ "includeGitInstructions": false, "env": { "ANTHROPIC_BASE_URL": "<your-llama-server-here>", "ANTHROPIC_API_KEY": "<any-string>", "CLAUDE_CODE_ATTRIBUTION_HEADER": "0", "DISABLE_TELEMETRY": "1", "DISABLE_ERROR_REPORTING": "1", "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1" } } 

Claude Code を再起動してツール呼び出しを行ったら、llama-server または LM Studio のログを見てください。24,000 トークンのプレフィルが 60 秒以上かかる代わりに、次のようなものが表示されます:

selected slot by LCP similarity, sim_best = 0.973...

…しかし、2Ktok のバッチ処理が続くのではなく、直接:

prompt processing progress, n_tokens = 24270, batch.n_tokens = 4

のようになります。プロンプトの 97.3% が同一だと認識されました。24,000 トークンを再処理する代わりに、600 トークンのデルタだけを処理します。ローカルのツール呼び出しは、私の Turing 世代の Quadro RTX-8000 でも、1 分以上かかっていたのが ~4 秒まで短縮されます。

注: 元々の Anthropic のハードコードされたシステムプロンプトの問題を解決するために、cctrace を試すことを勧められていました。しかし、フロンティアのサブスクリプションはもう終わりにしたいです。次は、突然の、ドキュメントにない、事前予告なし、依頼もしていない変更が何になるんでしょうか?

submitted by /u/One-Cheesecake389
[link] [comments]

広告
PSA: AnthropicなしでClaude Codeを使う:60秒ごとのローカルKVキャッシュ無効化問題の直し方。 | AI Navigate