提示词系统
提示词工程不只是写几句话的事。Claude Code 的提示词系统是编译时 + 运行时的双层架构,静态部分零开销,动态部分按需注入。
双层架构
静态部分(编译时)
构建时就确定的内容:
- AI 身份定义:"Claude, an AI coding assistant built by Anthropic"
- 工具使用优先级规则
- 输出格式规范
- 安全约束和行为边界
这些内容不会变,所以编译时就写死了,不占运行时开销。
动态部分(运行时)
每次会话可能不同的内容:
- Git 上下文(当前分支、修改文件)
- CLAUDE.md 记忆文件内容
- 可用工具列表
- 注册的 prompt section
Section 注册机制
systemPromptSection() 函数允许注册可复用的提示词片段:
typescript
const section = systemPromptSection({
name: 'git-context',
compute: async () => {
return `Current branch: ${branch}\nModified: ${files}`
}
})注册后的 section 会被缓存。还有一个 uncached 变体:
typescript
DANGEROUS_uncachedSystemPromptSection()名字里带 DANGEROUS 是提醒你——不缓存意味着每次都要重新计算,性能开销大。除非内容确实每次都不同,否则用缓存版本。
关键常量
constants/ 目录下 21 个文件,定义了各种限制:
| 常量 | 值 | 说明 |
|---|---|---|
| 上下文窗口 | 200,000 tokens | API 最大输入 |
| 文件读取上限 | 500KB | 单次读取限制 |
| 文件写入上限 | 1MB | 单次写入限制 |
| 并发工具数 | 10 | 同时执行的工具数 |
| 工具超时 | 120 秒 | 单个工具最长执行时间 |
这些数字是经过实际使用调优的——太大浪费资源,太小影响体验。
安全边界
提示词中嵌入了严格的安全规则:
- 不允许删除用户数据
- 不允许修改系统文件
- 不允许未授权的网络访问
- 优先使用工具获取信息,而不是猜测