Claude Code × ローカルLLM で KVキャッシュが毎回無効化される問題と対策
Claude Code をローカルLLM(llama.cpp、Ollama など)で使う際に、毎回プロンプト処理に異常な時間がかかるという問題が報告されています。原因は Claude Code が付加する「Attribution Header」によるKVキャッシュの無効化です。設定一つで解決できるので、対処法をまとめます。 何が起きているのか Claude Code v2.1.36 以降、リクエストごとに以下のような Attribution Header がプロンプトの先頭に付加されるようになりました。 x-anthropic-billing-header: cc_version=xxxx; cc_entrypoint=cli; cch=xxxx; この cch の値がリクエストのたびに変化します。ローカルLLMサーバー(llama.cpp、Ollama、LM Studio など)はプロンプトの先頭からバイト単位で一致した部分までKVキャッシュを再利用する仕組みのため、先頭が毎回変わるとキャッシュが丸ごと無効化されます。 結果として、数万トークンのシステムプロンプトや会話履歴を毎回ゼロから処理することになり、推論速度が最大90%低下するという報告があります。 対策:Attribution Header を無効化する ~/.claude/settings.json の env セクションに以下を追加します。 1 2 3 4 5 { "env": { "CLAUDE_CODE_ATTRIBUTION_HEADER": "0" } } 既に settings.json がある場合は env セクション内にキーを追加してください。 注意点 export CLAUDE_CODE_ATTRIBUTION_HEADER=0 ではダメ。シェルの環境変数として設定しても反映されません。必ず settings.json 経由で設定します ついでに不要なテレメトリも無効化しておくと、余計な通信を減らせます 1 2 3 4 5 6 7 { "env": { "CLAUDE_CODE_ATTRIBUTION_HEADER": "0", "CLAUDE_CODE_ENABLE_TELEMETRY": "0", "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1" } } KVキャッシュの仕組みをおさらい ローカルLLMサーバーが採用している Prefix Caching(Automatic Prefix Caching)は、プロンプトの先頭から連続して一致するトークン列のKV(Key-Value)テンソルを再利用する仕組みです。 ...