当前位置: 首页 > news >正文

【图解】Claude Code 源码解析 |Prompt 提示词模块

Prompt 提示词

做过 Agent 的同学都知道,调 Prompt 是一个很痛苦的过程,不过我们现在可以看看顶级Agent的提示词是怎么做的。

CC 的 Prompt 提示词主要分成以下几个部分:

  1. Core System Prompt:明确角色、任务边界、输出风格、风险动作原则、工具总原则。
  2. Tool Prompts:每个工具的用途、输入约束、什么时候用、什么时候不用、与其他工具的边界。
  3. Skill Prompts:专项知识包、明确触发条件、限定工具集、可按需展开。
  4. Agent Prompts:coordinator、worker、verifier、planner。
  5. Context Management Prompts:压缩、会话总结、记忆提取、恢复。
  6. Memory Prompts:存储内容、存储方式等等。

Core System Prompt

整个系统提示词是由静态规则和动态的 dynamicSections 组成。静态规则会做缓存,动态规则会做更新,并且静态和动态规则之间会有一个boundary做划分

其实我们可以从cc的代码中看到有很多的明切的边界划分,不仅是在 system prompt 这里,还有上一篇文章的 tool、skill 的划分,都是非常明确的界限

静态规则比如:

if (isEnvTruthy(process.env.CLAUDE_CODE_SIMPLE)) { return [ `You are Claude Code, Anthropic's official CLI for Claude.\n\nCWD: ${getCwd()}\nDate: ${getSessionStartDate()}`, ] }

dynamicSections比如:

const dynamicSections = [ systemPromptSection('session_guidance', () => getSessionSpecificGuidanceSection(enabledTools, skillToolCommands)), systemPromptSection('memory', () => loadMemoryPrompt()), systemPromptSection('language', () => getLanguageSection(settings.language)), systemPromptSection('output_style', () => getOutputStyleSection(outputStyleConfig)), DANGEROUS_uncachedSystemPromptSection('mcp_instructions',() =>isMcpInstructionsDeltaEnabled()? null: getMcpInstructionsSection(mcpClients),'MCP servers connect/disconnect between turns'), systemPromptSection('summarize_tool_results',() => SUMMARIZE_TOOL_RESULTS_SECTION) ...]

⚠️ 注意在 system prompt 拼接的时候,还有一个优先级策略树 buildEffectiveSystemPrompt保证在多模式、多角色、多来源 prompt 共存时, system prompt 的覆盖关系清晰、一致、可维护。

  1. Override SystemPrompt:P0最高优先级,如果设置了 override prompt,直接替换掉其他所有 prompt,其他什么default/custom/agent/coordinator 都不管了,这就是硬覆盖
  2. Coordinator Prompt:如果当前开了 coordinator mode,就要用 coordinator 专用的 system prompt 来代替默认 prompt,当前主线程不再是普通 agent,而是一个调度者
  3. Agent Prompt:如果设置了 mainThreadAgentDefinition,主线程本身就变成某个 agent,那通常用这个 agent 自己的 system prompt。一般情况下,agent prompt 替换 default prompt,但在 proactive mode 下,agent prompt 会追加到 default prompt 后面,不替换 default。
  4. Custom System Prompt:如果用户传了 --system-prompt 并且前面都没有的情况下就用这个Custom System Prompt
  5. 最后才是真正的系统默认的 Default System Prompt

The System Prompt In Claude Code

Tool Prompts

cc 里面skill和sub agent都是以tool的形式调用的,比如 ToolSkill、ToolAgent 之类的。

cc 中的每个tool基本都有自己的prompt/description来规定自身的说明方式和工具间的边界,这类 prompt 的特点是行为协议,可以使用什么,不要使用什么。典型结构就是:

  1. 这个工具是什么?
  2. 什么时候该用/什么时候不该用?
  3. 参数/调用约束是什么?

举个例子,比如 GrepTool:⚠️ 注意!cc里面会把一些规则以自然语言的形式放在Prompt里面,而不是以代码的形式对大模型的输出进行做规则定义比如这里面的to find interface in Go Code,自身的代码并没有做过多的规则补丁,而是充分相信大模型的处理。

我们再看一个 BashTool 的例子,这个 Tool 的 Desc 已经复杂的不是简单声明了,更像一个高风险工具专用操作规程SOP。这里面定义了git的提交 PR 的详细流程,什么事情不能做,用skill替代部分git流程等等…

让我感觉更像一个初版的 Skill,有点怀疑是不是因为这个 BashTool 的 Desc 太多了,而有了后来的 Skill。

desc

Skill Prompts

如果我们都用mcp的话,就会导致上下文窗口存在大量的tool定义、描述、参数,但一般模型只会选择部分tool执行,那么就会有token的浪费,所以就出现了渐进式加载的skill。skill 一种Command(type='prompt')形式的可展开能力包,支持渐进式加载,其实就是一段标准的SOP。

核心机制是: 先把 skill 作为 prompt 资产注册起来,再由 SkillTool 在运行时把它展开成新的上下文消息 ,而不是像普通 tool 那样直接执行外部动作。我们用一个cc里面的一个skill来举个例子,看看cc里面是怎么写skill的,比如claude-api的 skill

一个skill里面会包含这些核心能力:name/description、allowedTools、model、hooks、paths 等等…

  • name:这个skill的名字。
  • description:这个skill的使用场景,什么时候触发,什么时候不触发。
  • allowedTools:可以允许使用的工具集合。
  • buildPrompt:如何构建当前这个skill的 prompt。

prompt生成规则:先找到## Reading Guide,然后把 SKILL_PROMPT 分成两段,前半段 basePrompt 会保留,中间的 reading guide 不直接用原始版本,而是用运行时生成版替换掉,我们来看看这个 reading guide是什么:

Reading Guide

简单来说就是一个索引文件,遇到不同任务时该读哪些 docs,文档入口在哪:

  • 单轮文本分类 / 摘要 / 信息抽取 / 问答 → 看{lang}/claude-api/README.md
  • 聊天 UI 或实时流式响应展示 → 看{lang}/claude-api/README.md+{lang}/claude-api/streaming.md
  • 长对话(可能超过上下文窗口) → 看{lang}/claude-api/README.md中的 Compaction 部分
  • 等等…

skill 不会把所有语言文档都发给模型,只发当前项目最可能相关的那一套,这也是一种非常重要的 token 优化策略,这里的lang 是根据detectLanguage这个函数来判断的,比如有以下的一些策略:

  • pyproject.toml / requirements.txt → Python
  • package.json / tsconfig.json → TypeScript
  • go.mod → Go
  • pom.xml → Java

如果没有检测出来是什么语言,会直接咨询用户当前的编程语言,并且 prompt 拼接内容的时候,还会用doc标签来区别这个文档内容来自哪里文档,后续就不会重复找相同的文件。

<doc path="typescript/claude-api/README.md">...文档内容...</doc><doc path="shared/tool-use-concepts.md">...文档内容...</doc>

整个skill的prompt排版如下:

Skill Prompt

伪 markdown 如下(实际场景中要么纯英文,要么纯中文):

***name: Claude APIdescription: 这个技能用于帮助你使用 Claude API、Anthropic SDK 或 Agent SDK 构建应用,当你处理以下问题时,应优先使用这份技能...allowed-tools:- Read- WebFetch- ...***# Claude API / Anthropic SDK 专项技能## Reference Documentation...根据 go 定制的 reading guide...---## Included Documentation<doc path="go/claude-api/README.md">...</doc><doc path="shared/tool-use-concepts.md">...</doc>...更多相关 docs...## When to Use WebFetch...## Common Pitfalls避免错误使用模型名、错误流式写法、错误 tool use 方式、缓存误解等...## User RequestUse Go SDK to stream chat responses

Agent Prompts

这里有两种 Agent Prompt,一种是给主线程看的,本质是告诉主线程如何使用 AgentTool,这个prompt由以下这几个部分组成:

  • Shared core:什么是 AgentTool、available agents 列表、subagent_type/fork 的基本语义…
  • When NOT to use:读一个文件别开 agent、搜一个类定义别开 agent等等…
  • Usage notes:description 要怎么写、前台/后台 agent 的区别…
  • Writing the prompt:如果是 fresh agent,要把背景讲完整、如果是 fork,要写 directive、不要重复背景…
  • When to fork:仅在 fork 功能开启时出现、强调 fork 继承上下文、不要偷看 output_file、不要猜结果等等…
  • Examples:给主模型示范什么时候该开 agent、coordinator/fork 模式和普通模式示例不同等等…

Agent Tool Prompt

另一种Agent Prompt是给具体的agent做 system prompt 用的,比如这个agent是什么、充当什么角色、边界在哪里、输出是什么等等…这类 prompt 有着强角色边界,强流程编排,特别像人类团队里的 TL/PM 操作手册,抽象成可复用的模块大概是以下这个样子:

你是一个 xxx 角色.## 你的工作职责是- 你负责什么- 你的核心价值是什么## 强制边界- 你绝对不能做什么- 哪些行为会失败或被拒绝## 你可以获取的信息- 你会拿到什么输入- 哪些上下文可以依赖## 执行过程1. 先做什么2. 再做什么3. 什么时候停止4. 什么时候升级/转交## 错误处理- 你最常见的错误行为是什么- 出现时应该如何纠正## 工具使用指南- 应该优先怎么用工具- 哪些工具不能碰- 哪些信号要检查而不是假设## 输出的结果是什么- 必须怎么汇报结果- 必须包含哪些字段- 是否需要 verdict / critical files / summary

我们的prompt是给大模型看的,所以尽量是模型友好型的语句格式,尽量不要弄 json、key、value 之类的编码类的语言,用有逻辑的自然语言表达描述。

Memory Prompts

Memory的Prompt主要有这几个部分组成:

  1. 定义角色:一开始先告诉模型,你有一个持久的、文件化的 memory 系统,路径在哪,目录已经存在,可以直接写。
  2. 定位意义:为了逐步积累对用户、协作方式、项目背景的理解,让未来会话能延续上下文。
  3. 明确 remember / forget 是一等动作:用户显式说“记住”就立即存,用户说“忘记”就立马删除。
  4. memory类别:user、feedback、project、reference,每一类都定义了desc、when to save、how to use、examples等等…

比如 user是记用户角色、目标、知识水平、偏好的,用途是让后续解释和协作更贴合用户。例如:用户是资深 Go 开发,但不熟 React,那以后解释前端问题时就要借后端类比。

Types Select Individual

  1. 如何存储记忆:每条 memory 都会按照以下格式写到自己的 markdown 文件里

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

http://www.jsqmd.com/news/784857/

相关文章:

  • 别让你的Arduino项目突然‘死机’!7个新手最易踩的坑与实战避雷指南
  • 字节Agent岗三面:你们线上跑了 RAG,那你怎么衡量它的效果好不好?
  • CANN/ops-cv TensorScalar互推导关系
  • 中心化吸引子模型的数学严谨性与应用前景
  • 物理世界数字孪生重构,镜像视界打造超大型港口全真镜像底座
  • Matlab信号处理增强BEYOND REALITY Z-Image生成音频同步
  • 5分钟上手Bidili Generator:SDXL+LoRA强强联合,复杂提示词出图更稳
  • Windows安装Claude Code教程
  • 2025鞋店创业可靠公司推荐排行:十大品牌深度测评与选择指南 - 品牌策略师
  • CANN/ops线性代数SIG组
  • Hermes 接上 NotebookLM 之后,我的知识库开始自己滚了
  • 南北阁Nanbeige 3B环境配置:从操作系统重装到模型服务上线全流程
  • Cloudflare 如何用 7 个 AI Agent 做大规模代码审查
  • AssetStudio终极指南:5步解决Unity资源提取难题
  • 如何高效使用Universal x86 Tuning Utility:从入门到精通的完整指南
  • 基础模型时代AI安全与信任构建:技术措施与治理框架
  • 02 二叉树的非递归遍历
  • 原生嵌套(Nesting):以后还写 SCSS 吗?
  • 2026.5.9-要闻
  • CANN / ge 内存约束文档
  • 观察Taotoken在多模型间智能路由带来的调用成功率提升
  • 数字孪生安全架构深度剖析:从CPS到AI增强攻击的防御实战
  • CANN/pyasc高级算子API文档
  • C++14的[[deprecated]]属性:别再用旧函数了,手把手教你优雅地标记和替换
  • ComfyUI-VideoHelperSuite终极指南:掌握视频合成与工作流优化
  • AI赋能人工耳蜗:从噪声分离到个性化编码的听觉重建技术
  • Tool Calling、Agent、MCP全解析:AI工程三层结构,小白也能看懂大模型如何“干活”并收藏!
  • 别只盯着AT指令!用STM32驱动ESP8266上云的真实项目复盘:硬件选型、代码调试与资源打包
  • 2026最全CTF入门指南、CTF夺旗赛及刷题网站(建议收藏!)
  • CANN / ops-cv 量化介绍