提示词架构
两个独立维度
Section titled “两个独立维度”提示词内容与工具传输是相互独立的两个维度。
| 维度 | 取值 | 职责 |
|---|---|---|
| 提示词 Profile | standard、lite | 决定系统提示词内容、Profile 的工具集和与 Profile 相关的命令内容 |
| 工具传输 | native、xml | 决定使用服务商原生函数 Schema,还是 XML 工具说明 |
| 运行时开关 | 浏览器、MCP、技能、子智能体、Focus Chain、Web 工具、图片生成、YOLO、CLI、多根工作区、并行工具 | 按运行时能力和设置启用对应的内容与工具 |
| 投影 | OpenAI 兼容、Anthropic 协议、Gemini;XML | 把规范工具描述转换为请求格式 |
服务商原生 Schema 由 provider-projector.ts 生成,XML 工具说明由 xml-tool-projector.ts 单独生成。技能和 MCP 不是独立的布尔开关,而是根据可用的技能和已连接的服务器决定。
快照测试的文件名同时编码前两个维度:standard.native.*、standard.xml.*、lite.native.*、lite.xml.*。enableNativeToolCalls、nativeTools 和 transport: "native" 只表示工具传输,不能当作 Profile 名称。
Task -> resolvePromptProfile -> SystemPromptContext -> SystemPromptCacheService -> getSystemPrompt -> SystemPromptGenerator -> createSystemPromptConfig -> Standard 或 Lite 的 Section 组装 -> ToolPromptGenerator -> 服务商原生投影或 XML 投影resolvePromptProfile(src/shared/resolve-prompt-profile.ts)是 Profile 策略的唯一边界:
- 显式指定的 Profile 优先;
- 模型 ID 中任一以
/分隔的段是o1或以o1-开头时,选择 Lite; - 否则按上下文窗口判断:小于 64,000 选择 Lite,否则选择 Standard。上下文窗口缺失或无效时按 128,000 处理。
SystemPromptCacheService 把生成的提示词和工具投影冻结到任务的 context.json(完整的冻结、陈旧检测和缓存健康设计见提示词缓存冻结与陈旧监测)。
SubagentRunner -> resolvePromptProfile -> SystemPromptContext(isSubagentRun = true) -> getSystemPrompt -> 按子智能体允许列表过滤生成的原生工具子智能体不复用主任务冻结的提示词,而是为本次运行生成专用提示词。它与主任务共用 Profile 和传输架构,并通过子智能体运行时开关避免递归暴露子智能体工具。
CommandPromptGenerator 渲染显式命令指令。Deep Planning 根据调用方已经解析好的 Profile 选择 Standard 或 Lite 的命令描述。斜杠命令是即时注入的显式指令,不是可调用的函数工具。工具传输不能决定提示词 Profile。
| 源码 | 职责 |
|---|---|
src/shared/resolve-prompt-profile.ts | Profile 选择策略 |
src/core/prompts/profiles/types.ts | Profile 的稳定身份 |
src/core/prompts/system-prompt/context.ts | 类型化的运行时输入 |
src/core/prompts/system-prompt/pipeline.ts | 把运行时输入收敛为 SystemPromptConfig |
src/core/prompts/generators/SystemPromptGenerator.ts | 提示词生成编排 |
src/core/prompts/system-prompt/variants/ | Section 组装和条件内容 |
src/core/prompts/i18n/en/variants/ | Profile 自有的提示词文本 |
src/core/prompts/tools/tool-specs.ts | 规范工具描述 STANDARD_TOOL_SPECS |
src/core/prompts/tools/tool-ids.ts、tool-profile.ts | 每个 Profile 注册的工具 ID 及注册逻辑 |
src/core/prompts/tools/provider-projector.ts | 服务商原生 Schema 投影 |
src/core/prompts/tools/xml-tool-projector.ts | XML 工具说明投影 |
src/core/prompts/commands/ | 显式命令提示词生成 |
src/core/prompts/system-prompt-cache/ | 任务级冻结提示词的生命周期 |
STANDARD_TOOL_SPECS 是规范描述的唯一来源。每个 Profile 按 tool-ids.ts 中的 ID 列表注册工具,并非注册全部描述;Lite 从同一描述源注册更小的集合。之后再根据运行时条件过滤不可用的工具或参数,生成原生或 XML 投影。
- Profile 在进入提示词生成前已经确定,提示词正文不判断服务商或模型 ID。
- 原生函数调用和 XML 共用同一套经过条件过滤的工具描述。
- 运行时能力通过
SystemPromptContext输入,在组装前收敛为不可变的SystemPromptConfig。 - 提示词正文放在已注册的 i18n 模块中,通过声明式运行时合同渲染。
- 主任务使用冻结提示词保证请求之间一致;子智能体使用隔离的提示词和工具允许列表。
- 快照矩阵同时覆盖 Profile 和工具传输。
新增提示词 Profile
Section titled “新增提示词 Profile”只有当一组提示词形成完整、一致的合同差异时,才应该新增 Profile。传输方式和服务商名称都不能作为 Profile。
- 在
PromptProfile中新增稳定值,并在resolvePromptProfile中定义选择策略。 - 新增已注册的 i18n Variant 模块和对应的 Section 组装器,优先复用共享 Section。
- 定义该 Profile 的工具 ID 集;除非措辞或参数确实不同,否则复用规范工具描述。
- 只有命令合同确实随 Profile 变化时,才新增命令 Variant。
- 把新 Profile 加入行为矩阵和快照矩阵,同时覆盖
native和xml两种传输。 - 把 Profile 纳入冻结提示词的元数据;需要让旧的冻结结果失效时,提升
SYSTEM_PROMPT_CONTRACT_VERSION。
- 不要创建名为
native、xml或服务商名称的 Profile。 - 不要在服务商适配器中复制工具准入策略。
- 不要在提示词正文、Section 组装器或工具投影器中判断模型 ID。
- 不要把斜杠命令注册为可调用的工具。
- 普通请求期间不要修改任务的冻结提示词,更新必须经过缓存刷新合同。
- Lite 的排除项必须保持显式,特别是技能、Focus Chain 和
task_progress。