Claude Code源码分析之提示词工程

做大模型应用开发时,最让人头疼的往往是系统提示词(System Prompt)的管理。要是还像以前那样直接拼长字符串,代码不仅乱成一锅粥,而且上下文一长,Token 费烧得心疼,响应还慢。
每天免费领 1亿 Token,白嫖DeepSeek、GLM、MiniMax、Kimi等大模型!

咱们今天通过扒开 Claude Code 的源码(主要是 src/QueryEngine.tssrc/utils/ 这些核心部分),看看大厂是怎么搞提示词工程的。简单来说,它的精髓就在于:把模块拆得极细、把缓存(Prompt Caching)用到极致,再加上多级路由和并发组装的骚操作。每天免费领 1亿 Token,白嫖DeepSeek、GLM、MiniMax、Kimi等大模型!

1. 提示词的模块化注册机制

面对复杂的业务,单体 Prompt 简直是维护噩梦。Claude Code 聪明地搞了一套像中间件一样的模块化注册法。想加新功能(比如对接某个 MCP Server)?直接往组装层塞个 Section 就行,不用去那几千行的字符串里抠位置,非常符合开发中的开闭原则。

src/constants/systemPromptSections.ts 里,各种规则被拆成了独立的碎片,用 systemPromptSection(name, compute) 统一管起来。咱们瞅瞅几个关键的片段:
getSimpleIntroSection(给 AI 定调子)

javascript 复制代码
You are an interactive agent that helps users with software engineering tasks...
IMPORTANT: Assist with authorized security testing... Refuse requests for destructive techniques...
IMPORTANT: You must NEVER generate or guess URLs for the user unless you are confident...

大白话:一上来先亮明身份,定好安全边界,别乱猜 URL,也别帮人搞破坏。
每天免费领 1亿 Token,白嫖DeepSeek、GLM、MiniMax、Kimi等大模型!
getSimpleDoingTasksSection(干活的原则)

javascript 复制代码
# Doing tasks
- In general, do not propose changes to code you haven't read. If a user asks about or wants you to modify a file, read it first.
- Do not create files unless they're absolutely necessary... prefer editing an existing file...
- If an approach fails, diagnose why before switching tactics... Escalate to the user with AskUserQuestionTool only when you're genuinely stuck...
- The right amount of complexity is what the task actually requires---no speculative abstractions... Three similar lines of code is better than a premature abstraction.

大白话:这就是老司机的教诲:没读过的代码别乱动;能改旧文件就别新建;失败了先找原因别瞎试;别搞过度设计,三行重复代码总比瞎抽象强。
getActionsSection(危险动作拦截)

javascript 复制代码
# Executing actions with care
Carefully consider the reversibility and blast radius of actions. Generally you can freely take local, reversible actions like editing files or running tests. But for actions that are hard to reverse... check with the user before proceeding.
Examples... Destructive operations: deleting files/branches, dropping database tables...
When you encounter an obstacle, do not use destructive actions as a shortcut... only take risky actions carefully, and when in doubt, ask before acting.

大白话:这里引入了"爆炸半径"的概念。能回滚的操作你随便折腾,但要是想删库跑路、删分支这种大事,必须得问问人类老板。
每天免费领 1亿 Token,白嫖DeepSeek、GLM、MiniMax、Kimi等大模型!
getOutputEfficiencySection(拒绝废话)

javascript 复制代码
# Output efficiency
IMPORTANT: Go straight to the point. Try the simplest approach first... Be extra concise.
Keep your text output brief and direct. Lead with the answer or action, not the reasoning...
If you can say it in one sentence, don't use three...

大白话:直接把 AI 的"废话文学"给掐死了,要求直奔主题,能一句话说清的绝不啰嗦,先给结果再解释原因。

2. 利用缓存搞好边界隔离

Anthropic 的 Prompt Caching 想要省钱,前面的提示词就得稳如老狗。Claude Code 专门做了隔离设计,把命中率拉满,据说能省 90% 的成本,而且出字儿速度飞快。

src/constants/prompts.ts 里,它用了个 SYSTEM_PROMPT_DYNAMIC_BOUNDARY 的标记把提示词切成两块:

  1. 静态缓存区:放那些万年不变的规矩,比如你是谁、代码怎么写。这部分只要不变,后面几轮对话都能直接白嫖缓存。
  2. 动态变动区:放在标记后面。这里塞的是经常变的东西,比如现在的 Git 状态、脑子里的草稿纸(Scratchpad)、还有各种工具的实时描述。
  3. 防失效策略 :要是有些变量变动太频繁,系统还提供了专门的接口绕开缓存,省得因为它一个人把整块大缓存给带失效了。
    每天免费领 1亿 Token,白嫖DeepSeek、GLM、MiniMax、Kimi等大模型!

3. 提示词也分三六九等

Claude Code 要应对各种场景,比如普通的命令行模式、受限模式、或者专门派出去的子智能体。它在 buildEffectiveSystemPrompt() 里搞了五级优先级:

  • 0 级 (Override - 绝对大佬):权限最高。这时候 AI 必须死磕这几条指令,以前的规矩全作废,通常用在强制确认或者固定格式输出的场景。
  • 1 级 (Coordinator - 幕后管家):遇到大活儿时,AI 会变身"调度员",不亲自写代码,专门负责拆任务、派活儿给别的 Agent。
  • 2 级 (Agent Profiles - 专属人设):给特定"打工人"用的。比如派 ExploreAgent 去看代码,就会叮嘱它"多看少动",让它更专注。
  • 3 级 (CLI Injection - 用户插话) :给用户留的后门。你在终端里敲 --system-prompt "用中文回我",指令就塞在这儿,AI 肯定得听你的。
  • 4 级 (Fallback Base - 兜底老实人) :最普通的情况,没啥特殊要求就按前面那一套模块化的规矩来。
    每天免费领 1亿 Token,白嫖DeepSeek、GLM、MiniMax、Kimi等大模型!
    系统还留了个 appendSystemPrompt 小路,专门用来补充临时的安全策略。

4. 情报收集机制

在真正发请求给 AI 之前,QueryEngine 会启动"双轨情报收集",让 AI 别像个两眼一抹黑的铁憨憨:

  1. 第一条线:摸清物理环境。它会悄悄扫描你的 Git 分支、最新的提交记录,甚至是你还没提交的 Diff 摘要。这就是为什么它总能猜中你刚才改了啥。
  2. 第二条线:同步业务认知 。它会把当前精准的时间塞进去,更重要的是,它会去读你项目里的 CLAUDE.md。你可以把这文件当成"员工手册",把架构规范、命名习惯写进去,AI 读了就懂你的规矩。
    每天免费领 1亿 Token,白嫖DeepSeek、GLM、MiniMax、Kimi等大模型!
    等这两条线的数据都拉齐了,系统再把它们和分好优先级的提示词拼在一起,最后打包发给 API。

总结

看 Claude Code 的源码就能发现,现在的 Prompt 工程早已不是拼字符串那么简单了。它得像搭积木一样模块化,还得考虑怎么省钱(缓存隔离),更要根据不同场景灵活变通(优先级分发)。这种既好用又省钱的架构,对于想做企业级 AI 工具的朋友来说,确实很有参考价值。
每天免费领 1亿 Token,白嫖DeepSeek、GLM、MiniMax、Kimi等大模型!

相关推荐
Elastic 中国社区官方博客4 小时前
使用 Jina CLIP v2 和 Elasticsearch 实现多语言图片搜索
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·jina
yumgpkpm4 小时前
华为HUAWEI昇腾910B下千问Qwen3.6-27B在的推理加速实践
sql·华为·langchain·json·ai编程·ai写作·gpu算力
程序大视界4 小时前
【C++ 从基础到项目实战】C++(八):运算符重载——让你的类用起来像内置类型
开发语言·c++·cpp
Agent手记4 小时前
电信装维如何智能派单?AI 工程师匹配原理与智能体架构拆解
人工智能·ai·架构
原创小甜甜4 小时前
OOM 排查复盘:Hutool 序列化 Request 导致 Java Heap Space
java·开发语言·python
列星随旋4 小时前
矩阵快速幂
java·算法·矩阵
闪电悠米4 小时前
黑马点评-分布式锁-02_simple_redis_lock_setnx
java·数据库·spring boot·redis·分布式·缓存·wpf
searchforAI4 小时前
Ai好记 vs Get笔记:AI音视频笔记工具深度测评对比
人工智能·笔记·学习·ai·音视频·语音识别
萨小耶4 小时前
[Java学习日记10】聊聊checked exception和runtime exception
java·开发语言·学习
超梦dasgg4 小时前
IDEA(IntelliJ IDEA)超详细基础使用教程
java·ide·intellij-idea