详解 Claude Code 源码
赛博浮世绘 · 晓风乾 · 24 站拆解
回首页
详解 Claude Code 上下文与记忆 6.1 · System Prompt 公式
篇章六 · 6.1

System Prompt 公式

System Prompt 不是一段话,是一个公式算出来的——而且每一段都背着「能不能缓存」的 KPI。点下面的开关看它怎么组装。

每一节都要带 缓存 KPI

公式:核心提示 + git 上下文 + CLAUDE.md + 日期。默认每节算一次就缓存(systemPromptSection);想每轮重算?必须用 DANGEROUS_uncachedSystemPromptSection——函数名就在警告你。

Prompt 组装台 · 开灯看每层 从上到下 = 从不变到常变
核心 system prompt角色定义 + 工具说明 + 行为规则 · 永远不变
systemContextgit 分支 + status + 最近 5 条提交 · memoize,compact 时清
userContext(CLAUDE.md)多层级收集合并 + 当前日期 · memoize
system-reminder伪装成用户消息插在最前 · 动态上下文
customSystemPrompt--system-prompt 用户自定义 · 可整段替换
appendSystemPrompt--append-system-prompt 追加
点任意一层看它的缓存策略

system-reminder 的伪装术:动态内容(当前日期、CLAUDE.md)不直接进 system prompt——那样每轮都破坏缓存。它伪装成一条用户消息插在对话最前面,system prompt 本体保持纯净。模型看得见,缓存无感知。

🎮 为什么动态内容要伪装成用户消息而不是写进 system prompt?
Prompt cache 按前缀字节命中——system prompt 在最前面,它变一个字节后面全作废。把变化的东西挪到「用户消息」层,前缀稳定,缓存继续命中。整个系统的缓存纪律都围绕这一条。
本站要点:缓存是宪法级的——连函数名都在执行纪律(DANGEROUS_ 前缀)。下一站看上下文快满时的四层压缩策略,每层都是「更贵但更保命」。