你有没有发现,同样的请求,Claude Code和ChatGPT的回答风格完全不一样?

你问"帮我写个登录功能",ChatGPT可能会直接给你一段代码,然后问你"还需要什么"。Claude Code则会先问你:用什么框架?密码怎么加密?要不要邮箱验证?

这种差异不是模型本身的问题,而是"系统提示词"在起作用。今天咱们就揭开这个"幕后导演"的面纱。

图:系统提示词像电影导演,设定场景和角色定位

提示词不是一句话,而是一个"信息包"

很多人以为系统提示词就是"你是Claude,一个AI助手"这么简单一句话。实际上,Claude Code的系统提示词是一个精心设计的"信息包",由多个模块组合而成。

想象一下电影拍摄:导演不会只跟演员说"你演一个警察",而是会详细说明——故事背景是什么年代?这个角色是什么性格?这场戏的情绪基调是什么?需要什么样的台词风格?

系统提示词也是一样的道理。它不是告诉模型"你是一个AI助手"就完了,而是要设定:

  • 你是谁(身份定位)
  • 你能做什么(工具能力)
  • 你应该怎么做(行为规范)
  • 什么能做、什么不能做(安全边界)

分段式组合:模块化的提示词架构

Claude Code的系统提示词采用分段式组合设计,分成几个独立的模块:

身份模块(Identity):定义AI的基本身份和角色定位。

你是Claude Code,Anthropic的AI编码助手。
你的目标是帮助用户完成软件工程任务。
你通过工具与用户的环境交互:读取文件、执行命令、编辑代码等。

工具模块(Tools):列出所有可用工具及其描述。

你可以使用以下工具:
- FileReadTool: 读取文件内容
- FileEditTool: 编辑文件
- BashTool: 执行shell命令
- GrepTool: 搜索文件内容
...

每个工具的description都在这里定义——这就是为什么同样的功能,Claude Code和ChatGPT的表现不同。工具描述不是给人看的文档,而是给模型的指令。

格式模块(Format):定义响应的格式要求。

使用Markdown格式。
代码块使用适当的语言标记。
路径使用反引号包裹。

安全模块(Safety):定义安全边界和限制。

不要执行破坏性操作而不确认。
不要访问敏感文件。
遵守用户的权限设置。

图:系统提示词的分段式模块结构

这些模块在constants/prompts.ts中定义,然后在query.ts中根据当前状态动态组装。

动态组装:不同场景不同配方

系统提示词不是固定不变的。Claude Code会根据当前状态动态调整:

根据权限模式调整:如果用户配置了alwaysDeny规则,安全模块会强化相关警告。

根据工具可用性调整:如果某些工具被禁用,工具模块不会包含它们。这就是为什么feature()为false的工具,模型根本不知道存在。

根据上下文调整:如果正在处理敏感操作,安全模块会追加额外的警告。

根据用户偏好调整:CLAUDE.md文件中的指令会被合并到系统提示词中,覆盖或补充默认行为。

这种动态组装机制,让系统提示词既保持了一致性(核心模块不变),又具有灵活性(可根据场景调整)。

模型特定调优:不同模型不同"剧本"

Claude Code支持多个模型(Claude 3.5 Sonnet、Claude 3 Opus等),不同模型的系统提示词略有不同。

这不是歧视,而是调优。不同模型有不同的特点:

Claude 3.5 Sonnet:能力强、速度快,提示词可以更简洁,给它更多自主空间。

Claude 3 Opus:能力最强但较慢,提示词可以更详细,充分利用它的理解能力。

旧版本模型:可能需要更明确的指令,少一些隐含的假设。

这种调优体现在:

  • 工具描述的详细程度
  • 安全警告的强调程度
  • 格式要求的严格程度
  • 示例的数量和质量

提示词作为"控制面"

在Claude Code的架构中,系统提示词扮演着"控制面"的角色——它不直接执行操作,但控制着系统的行为模式。

这有点像操作系统:内核(Agent Loop、工具系统)负责执行,但系统配置(提示词)决定了内核的行为方式。

这种设计的优点是:

可配置:通过修改提示词,可以改变AI的行为,而不需要改代码。

可实验:Anthropic可以通过A/B测试不同的提示词,观察效果。

可扩展:新功能可以通过添加新的提示词模块来支持。

可回滚:如果某个提示词改动有问题,可以快速回滚到之前版本。

提示词工程的实战技巧

如果你想在自己的AI应用中应用这些理念,有几个技巧:

模块化设计:把提示词分成独立的模块,便于维护和组合。

分层控制:系统级(不可变)、项目级(CLAUDE.md)、会话级(临时指令)分层。

明确胜过隐含:不要假设模型"应该懂",而是明确说明期望。

示例驱动:用Few-shot示例展示期望的行为,比抽象描述更有效。

持续迭代:提示词不是写一次就完,要根据实际使用反馈不断优化。

这对使用Claude Code的启示

理解系统提示词的作用,能帮你更好地使用Claude Code:

为什么它有时候会"过度确认"?因为安全模块要求它在不确定时询问用户。

为什么它不会执行危险操作?因为安全模块明确禁止,即使在用户要求下也不行(除非覆盖权限)。

为什么同一个问题有时候回答不同?因为提示词可能在版本更新中有调整,或者当前上下文影响了提示词的组装。

CLAUDE.md为什么有效?因为它被合并到系统提示词中,成为模型行为的指导。

总结

系统提示词是Claude Code的"幕后导演",它设定了AI的角色、能力、行为和安全边界。通过分段式组合和动态组装,它既保持了灵活性,又确保了安全性。

理解这一点,不只是满足好奇心——它能帮你:

  • 更好地与AI协作(理解它的行为逻辑)
  • 更有效地使用CLAUDE.md(知道它为什么有效)
  • 在自己的AI应用中设计更好的提示词(借鉴这些模式)

下一篇,咱们聊聊为什么AI有时候会"不听话"——提示词的行为引导术。


文章写到这儿,希望对你理解系统提示词有所帮助。觉得有收获的话,欢迎点赞转发。关注梦兽编程,咱们下篇见。