跳转到内容

提示词架构

提示词内容与工具传输是相互独立的两个维度。

维度取值职责
提示词 Profilestandard、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 策略的唯一边界:

  1. 显式指定的 Profile 优先;
  2. 模型 ID 中任一以 / 分隔的段是 o1 或以 o1- 开头时,选择 Lite;
  3. 否则按上下文窗口判断:小于 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.tsProfile 选择策略
src/core/prompts/profiles/types.tsProfile 的稳定身份
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.tsXML 工具说明投影
src/core/prompts/commands/显式命令提示词生成
src/core/prompts/system-prompt-cache/任务级冻结提示词的生命周期

STANDARD_TOOL_SPECS 是规范描述的唯一来源。每个 Profile 按 tool-ids.ts 中的 ID 列表注册工具,并非注册全部描述;Lite 从同一描述源注册更小的集合。之后再根据运行时条件过滤不可用的工具或参数,生成原生或 XML 投影。

  1. Profile 在进入提示词生成前已经确定,提示词正文不判断服务商或模型 ID。
  2. 原生函数调用和 XML 共用同一套经过条件过滤的工具描述。
  3. 运行时能力通过 SystemPromptContext 输入,在组装前收敛为不可变的 SystemPromptConfig。
  4. 提示词正文放在已注册的 i18n 模块中,通过声明式运行时合同渲染。
  5. 主任务使用冻结提示词保证请求之间一致;子智能体使用隔离的提示词和工具允许列表。
  6. 快照矩阵同时覆盖 Profile 和工具传输。

只有当一组提示词形成完整、一致的合同差异时,才应该新增 Profile。传输方式和服务商名称都不能作为 Profile。

  1. 在 PromptProfile 中新增稳定值,并在 resolvePromptProfile 中定义选择策略。
  2. 新增已注册的 i18n Variant 模块和对应的 Section 组装器,优先复用共享 Section。
  3. 定义该 Profile 的工具 ID 集;除非措辞或参数确实不同,否则复用规范工具描述。
  4. 只有命令合同确实随 Profile 变化时,才新增命令 Variant。
  5. 把新 Profile 加入行为矩阵和快照矩阵,同时覆盖 native 和 xml 两种传输。
  6. 把 Profile 纳入冻结提示词的元数据;需要让旧的冻结结果失效时,提升 SYSTEM_PROMPT_CONTRACT_VERSION。
  • 不要创建名为 native、xml 或服务商名称的 Profile。
  • 不要在服务商适配器中复制工具准入策略。
  • 不要在提示词正文、Section 组装器或工具投影器中判断模型 ID。
  • 不要把斜杠命令注册为可调用的工具。
  • 普通请求期间不要修改任务的冻结提示词,更新必须经过缓存刷新合同。
  • Lite 的排除项必须保持显式,特别是技能、Focus Chain 和 task_progress。