<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Prompt Cache on KnightLi的博客</title>
        <link>https://www.knightli.com/zh-tw/tags/prompt-cache/</link>
        <description>Recent content in Prompt Cache on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Mon, 18 May 2026 18:30:24 +0800</lastBuildDate><atom:link href="https://www.knightli.com/zh-tw/tags/prompt-cache/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Claude Code 省 Token 指南：模型、MCP、CLAUDE.md 和 Skills 怎麼影響快取</title>
        <link>https://www.knightli.com/zh-tw/2026/05/18/claude-code-prompt-cache-token-optimization/</link>
        <pubDate>Mon, 18 May 2026 18:30:24 +0800</pubDate>
        
        <guid>https://www.knightli.com/zh-tw/2026/05/18/claude-code-prompt-cache-token-optimization/</guid>
        <description>&lt;p&gt;Claude Code 長任務裡，Prompt Cache 命中率會直接影響成本和速度。很多人只知道「快取能省 Token」，但不清楚哪些操作會讓快取突然失效。&lt;/p&gt;
&lt;p&gt;理解它並不難：每次請求都可以看成一條從左到右的上下文鏈條：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tools -&amp;gt; system -&amp;gt; CLAUDE.md / skills -&amp;gt; messages
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;越靠左的內容越穩定，快取收益越大；越靠左的內容一變，後面的快取也更容易跟著失效。反過來，越靠右的內容變化，影響範圍越小。&lt;/p&gt;
&lt;p&gt;所以優化 Claude Code 的 Prompt Cache，不是靠玄學，而是靠一個原則：任務開始前把模型、MCP、Skills、CLAUDE.md 等基礎上下文準備好，任務中途盡量不要改。&lt;/p&gt;
&lt;h2 id=&#34;prompt-cache-快取的不是文字本身&#34;&gt;Prompt Cache 快取的不是文字本身
&lt;/h2&gt;&lt;p&gt;Prompt Cache 不是簡單地把提示詞字串存起來。對 Transformer 模型來說，更關鍵的是前綴上下文經過注意力層計算後的 Key/Value 狀態，也就是常說的 KV cache。&lt;/p&gt;
&lt;p&gt;這意味著兩個事實：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同一段上下文，只要前綴保持穩定，就可以在後續請求中複用一部分計算結果。&lt;/li&gt;
&lt;li&gt;如果模型、工具定義、系統提示詞或前綴訊息發生變化，之前的快取就可能無法複用。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anthropic 官方文件也把失效層級概括為 &lt;code&gt;tools -&amp;gt; system -&amp;gt; messages&lt;/code&gt;。工具定義變化會影響整段快取，系統層變化會影響 system 和 messages，messages 層變化則主要影響訊息快取。&lt;/p&gt;
&lt;p&gt;Claude Code 裡還會額外涉及 &lt;code&gt;CLAUDE.md&lt;/code&gt;、Skills、MCP、外掛和子代理等上下文，所以實際使用時更容易踩到快取失效點。&lt;/p&gt;
&lt;h2 id=&#34;快取殺手一中途切換模型&#34;&gt;快取殺手一：中途切換模型
&lt;/h2&gt;&lt;p&gt;切模型是影響最大的操作。&lt;/p&gt;
&lt;p&gt;Prompt Cache 是按模型隔離的。Opus、Sonnet、Haiku 這類模型的結構和權重不同，同一段文字算出來的 KV cache 也不同。你在 Opus 裡跑了很長上下文，再切到 Sonnet，並不能讓 Sonnet 複用 Opus 的快取。&lt;/p&gt;
&lt;p&gt;這會帶來一個反直覺結果：中途為了省錢切模型，可能反而讓前面已經累積的快取全部失效。原本可以按 cache read 價格讀取的上下文，需要重新寫入和計算。&lt;/p&gt;
&lt;p&gt;更穩妥的做法是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;主對話盡量固定一個模型。&lt;/li&gt;
&lt;li&gt;需要便宜模型處理支線任務時，用 subagent 隔離出去。&lt;/li&gt;
&lt;li&gt;讓支線代理完成搜尋、探索、整理，再把結果摘要交回主對話。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這樣主對話的長上下文盡量不動，快取命中率更穩定。&lt;/p&gt;
&lt;h2 id=&#34;快取殺手二中途新增-mcp-或重載外掛&#34;&gt;快取殺手二：中途新增 MCP 或重載外掛
&lt;/h2&gt;&lt;p&gt;MCP 會向 Claude Code 提供工具。新增 MCP 伺服器後，工具列表會變化，而工具定義處在上下文鏈條最左側。&lt;/p&gt;
&lt;p&gt;從 Prompt Cache 的角度看，工具列表一變，後面的 system 和 messages 都可能需要重新計算。尤其是 MCP 很多時，工具定義本身就可能占用大量 Token，快取失效的代價會很明顯。&lt;/p&gt;
&lt;p&gt;不過有一個細節：Claude Code 通常在會話啟動時讀取 MCP 配置。你中途改了配置，當前 session 不一定立刻受影響。真正需要小心的是觸發重新載入的動作，例如重啟、恢復會話、重新載入外掛或讓工具列表重新組裝。&lt;/p&gt;
&lt;p&gt;建議是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;開始長任務前，一次性裝好需要的 MCP。&lt;/li&gt;
&lt;li&gt;不要做一半才發現缺工具，再安裝並重載。&lt;/li&gt;
&lt;li&gt;對大型 MCP 工具集，優先考慮按需載入或減少預設啟用數量。&lt;/li&gt;
&lt;li&gt;不常用的 MCP 不要長期掛在預設配置裡。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果工具定義穩定，Prompt Cache 才有長期命中的基礎。&lt;/p&gt;
&lt;h2 id=&#34;快取殺手三中途修改-claudemd&#34;&gt;快取殺手三：中途修改 CLAUDE.md
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt; 是 Claude Code 的專案記憶文件，適合放構建命令、測試命令、架構約定、程式碼風格和專案注意事項。&lt;/p&gt;
&lt;p&gt;它對 Claude Code 很有用，但也會進入上下文。官方說明指出，&lt;code&gt;CLAUDE.md&lt;/code&gt; 會在 session 開始時讀取，並作為使用者訊息提供給 Claude；它也會使用 Anthropic 的 Prompt Cache。首次請求會按完整輸入計費，後續請求如果在快取有效期內命中，就按更低的 cache read 成本處理。&lt;/p&gt;
&lt;p&gt;問題在於：&lt;code&gt;CLAUDE.md&lt;/code&gt; 是內容定址的。你一改文件內容，舊快取就對不上了。&lt;/p&gt;
&lt;p&gt;所以不要在長任務中途頻繁改 &lt;code&gt;CLAUDE.md&lt;/code&gt;。更好的方式是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;任務開始前先檢查 &lt;code&gt;CLAUDE.md&lt;/code&gt; 是否夠用。&lt;/li&gt;
&lt;li&gt;把穩定規則寫進去，把臨時指令放在目前對話裡。&lt;/li&gt;
&lt;li&gt;如果只是一次性任務，不要為了臨時需求修改長期記憶文件。&lt;/li&gt;
&lt;li&gt;如果必須改，最好在一個階段結束後再開始新 session。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt; 應該是穩定的專案說明，而不是每輪任務都改的便條。&lt;/p&gt;
&lt;h2 id=&#34;快取殺手四中途安裝或更新-skills&#34;&gt;快取殺手四：中途安裝或更新 Skills
&lt;/h2&gt;&lt;p&gt;Skills 也是上下文的一部分。安裝新 Skill、更新 Skill，或者讓 Skill 列表發生變化，都會讓注入到會話裡的上下文不同。&lt;/p&gt;
&lt;p&gt;這類變化通常不會在目前 session 裡立刻完整生效，而是在重新載入、恢復會話或新開會話時體現出來。問題是，一旦重新組裝 messages，舊快取就可能命中不了。&lt;/p&gt;
&lt;p&gt;建議和 MCP 類似：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;開始任務前先確認需要哪些 Skills。&lt;/li&gt;
&lt;li&gt;同一類任務盡量固定 Skill 集合。&lt;/li&gt;
&lt;li&gt;不要在一個長任務中途邊做邊裝 Skill。&lt;/li&gt;
&lt;li&gt;如果安裝了新 Skill，最好把它當成新階段的開始。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;對經常做內容生產、程式碼審查、部署、翻譯的工作流，可以把常用 Skills 固定下來，讓上下文結構盡量穩定。&lt;/p&gt;
&lt;h2 id=&#34;快取殺手五空閒時間超過-ttl&#34;&gt;快取殺手五：空閒時間超過 TTL
&lt;/h2&gt;&lt;p&gt;Prompt Cache 不是永久保存。常見預設有效期是幾分鐘級別，Anthropic 文件和 Claude Code 相關說明裡都提到過 5 分鐘左右的快取窗口。超過 TTL 後，即使你發送完全一樣的請求，服務端也可能已經清掉快取。&lt;/p&gt;
&lt;p&gt;這也是很多長任務使用者的體感來源：剛才還很省，去喝杯咖啡回來，再發下一步，Token 又突然漲上去了。&lt;/p&gt;
&lt;p&gt;長任務尤其容易遇到這個問題。你可能要看 Claude Code 的輸出、檢查文件、跑測試、思考下一步，這些操作一不小心就超過 5 分鐘。&lt;/p&gt;
&lt;p&gt;如果你的使用環境支援，可以在長任務前啟用 1 小時 Prompt Cache TTL：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ENABLE_PROMPT_CACHING_1H&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;在 Windows PowerShell 裡可以寫成：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$env:ENABLE_PROMPT_CACHING_1H&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;需要注意的是，1 小時快取寫入成本通常會高於 5 分鐘快取寫入成本。它不適合所有短任務，但對大型程式碼庫、長對話、複雜多步驟開發任務，往往比頻繁快取過期更划算。&lt;/p&gt;
&lt;h2 id=&#34;怎麼安排一次更省-token-的-claude-code-長任務&#34;&gt;怎麼安排一次更省 Token 的 Claude Code 長任務
&lt;/h2&gt;&lt;p&gt;比較穩的流程可以這樣做：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;任務開始前選定模型，不要中途頻繁切換。&lt;/li&gt;
&lt;li&gt;提前啟用需要的 MCP，不用的 MCP 先關掉。&lt;/li&gt;
&lt;li&gt;檢查 &lt;code&gt;CLAUDE.md&lt;/code&gt;，只保留穩定、關鍵、長期有效的規則。&lt;/li&gt;
&lt;li&gt;提前準備好本次任務需要的 Skills。&lt;/li&gt;
&lt;li&gt;如果是複雜任務，考慮啟用 1 小時 TTL。&lt;/li&gt;
&lt;li&gt;把大任務拆成幾個階段，但每個階段內部盡量保持上下文結構穩定。&lt;/li&gt;
&lt;li&gt;需要探索支線問題時，用 subagent 或單獨 session，不要污染主對話。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;這套做法的目標不是絕對不讓快取失效，而是避免那些代價最高、最容易被忽略的失效。&lt;/p&gt;
&lt;h2 id=&#34;一個簡單判斷標準&#34;&gt;一個簡單判斷標準
&lt;/h2&gt;&lt;p&gt;你可以用一句話判斷某個操作是否危險：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;這個操作會不會改變模型、工具定義、系統上下文或會話開頭的固定訊息？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果答案是會，那它大概率會影響 Prompt Cache。越靠近上下文鏈條左側，影響越大。&lt;/p&gt;
&lt;p&gt;常見操作可以這樣理解：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;切模型：高風險，模型快取隔離。&lt;/li&gt;
&lt;li&gt;新增 MCP 或重載外掛：高風險，工具列表變化。&lt;/li&gt;
&lt;li&gt;修改 &lt;code&gt;CLAUDE.md&lt;/code&gt;：中高風險，專案記憶變化。&lt;/li&gt;
&lt;li&gt;安裝 Skills：中高風險，注入上下文變化。&lt;/li&gt;
&lt;li&gt;普通對話繼續追問：低風險，主要追加 messages。&lt;/li&gt;
&lt;li&gt;空閒超過 TTL：高風險，服務端快取過期。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;小結&#34;&gt;小結
&lt;/h2&gt;&lt;p&gt;Claude Code 的 Prompt Cache 優化，關鍵不是背參數，而是讓會話前綴穩定。&lt;/p&gt;
&lt;p&gt;模型不要隨便切，MCP 和 Skills 不要邊做邊裝，&lt;code&gt;CLAUDE.md&lt;/code&gt; 不要當臨時草稿頻繁改，複雜任務盡量延長 TTL。只要這些基礎動作穩定下來，Claude Code 在長任務裡的 Token 成本和回應速度都會更可控。&lt;/p&gt;
&lt;p&gt;最實用的一句話是：開始前配好，開始後少動。&lt;/p&gt;
&lt;h2 id=&#34;參考資料&#34;&gt;參考資料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Anthropic：Tool use with prompt caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://support.claude.com/en/articles/14553240-give-claude-context-claude-md-and-better-prompts&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Claude Help Center：CLAUDE.md and prompt caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://code.claude.com/docs/en/mcp&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Claude Code Docs：Connect Claude Code to tools via MCP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
