系统提示词构建器 — 源码 prompt.rs:84-185 这是一个 Builder 模式。最终 build() 返回 Vec , 不是一个大字符串。每个 section 是一个独立的字符串。 为什么分成多个 section? 因为 Anthropic API 的 system 参数支持数组。 当使用 prompt caching 时,只有变化的 section 会重新计算, 不变的 section 可以命中缓存。 关键: SYSTEM_PROMPT_DYNAMIC_BOUNDARY 标记分隔了 "静态部分"
| 211 | |
| 212 | |
| 213 | class SystemPromptBuilder: |
| 214 | """系统提示词构建器 — 源码 prompt.rs:84-185 |
| 215 | |
| 216 | 这是一个 Builder 模式。最终 build() 返回 Vec<String>, |
| 217 | 不是一个大字符串。每个 section 是一个独立的字符串。 |
| 218 | |
| 219 | 为什么分成多个 section? |
| 220 | 因为 Anthropic API 的 system 参数支持数组。 |
| 221 | 当使用 prompt caching 时,只有变化的 section 会重新计算, |
| 222 | 不变的 section 可以命中缓存。 |
| 223 | |
| 224 | 关键: SYSTEM_PROMPT_DYNAMIC_BOUNDARY 标记分隔了 |
| 225 | "静态部分"(不变的通用指令)和"动态部分"(每次可能不同的上下文)。 |
| 226 | """ |
| 227 | |
| 228 | def __init__(self): |
| 229 | self._output_style_name: Optional[str] = None |
| 230 | self._output_style_prompt: Optional[str] = None |
| 231 | self._os_name: Optional[str] = None |
| 232 | self._os_version: Optional[str] = None |
| 233 | self._project_context: Optional[ProjectContext] = None |
| 234 | self._append_sections: List[str] = [] |
| 235 | |
| 236 | def with_output_style(self, name: str, prompt: str) -> "SystemPromptBuilder": |
| 237 | self._output_style_name = name |
| 238 | self._output_style_prompt = prompt |
| 239 | return self |
| 240 | |
| 241 | def with_os(self, os_name: str, os_version: str) -> "SystemPromptBuilder": |
| 242 | self._os_name = os_name |
| 243 | self._os_version = os_version |
| 244 | return self |
| 245 | |
| 246 | def with_project_context(self, ctx: ProjectContext) -> "SystemPromptBuilder": |
| 247 | self._project_context = ctx |
| 248 | return self |
| 249 | |
| 250 | def append_section(self, section: str) -> "SystemPromptBuilder": |
| 251 | self._append_sections.append(section) |
| 252 | return self |
| 253 | |
| 254 | def build(self) -> List[str]: |
| 255 | """构建最终的 system prompt sections — 源码 prompt.rs:134-156 |
| 256 | |
| 257 | 返回的 sections 列表结构: |
| 258 | |
| 259 | [0] 介绍(你是什么) |
| 260 | [1] 输出风格(可选) |
| 261 | [2] 系统规则 |
| 262 | [3] 任务指南 |
| 263 | [4] 行动准则 |
| 264 | ─── DYNAMIC BOUNDARY ─── ← 缓存边界 |
| 265 | [5] 环境信息(日期、CWD、平台) |
| 266 | [6] 项目上下文(git status、git diff) |
| 267 | [7] 指令文件(CLAUDE.md 内容) |
| 268 | [8+] 追加的自定义 section |
| 269 | """ |
| 270 | sections = [] |
no outgoing calls
no test coverage detected