系统提示定义 Claude 的行为、能力和响应风格。SDK 提供三种起点:最小默认提示、claude_code preset(完整 Claude Code 提示)、自定义字符串。选择依据是 Agent 与 Claude Code 的相似程度。

核心机制

三种起点:

  • 不设置:最小提示,只含工具调用支持(与 claude -p 不同,后者默认用完整提示)
  • claude_code preset:完整 Claude Code 提示,含编码规范、安全规则、响应风格、工作目录上下文
  • 自定义字符串:完全自主控制,需自行包含工具指导和安全规则

选择决策:

场景推荐方式
CLI/IDE 类编码工具,人工监督claude_code preset
同上 + 产品特定规则claude_code preset + append
不同界面/身份/权限模型的 Agent自定义字符串
薄工具调用层,行为全在 user prompt不设置

四种定制方法对比:

方法持久性保留内置工具指导适用场景
CLAUDE.md项目文件是项目级持久指令
Output Styles保存为文件是(可选)跨项目复用的角色
preset + append仅当前会话是追加特定规则
自定义字符串仅当前会话需自行添加完全不同的 Agent

关键细节

使用 preset + append:

options = ClaudeAgentOptions(
    system_prompt={
        "type": "preset",
        "preset": "claude_code",
        "append": "Always include detailed docstrings and type hints in Python code.",
    }
)

跨会话缓存优化(多实例部署):

system_prompt={
    "type": "preset",
    "preset": "claude_code",
    "append": "You operate Acme's internal triage workflow.",
    "exclude_dynamic_sections": True,  # 移除工作目录等动态内容,使 system prompt 可缓存
}

CLAUDE.md 加载:通过 settingSources 控制,注入到对话而非系统提示,与任何系统提示配置兼容。

Output Styles:保存为 ~/.claude/output-styles/ 或 .claude/output-styles/ 下的 Markdown 文件,Python SDK 不支持编程式选择(需通过 settings.local.json)。

与其他概念的关联

实践要点

  • exclude_dynamic_sections 将工作目录等动态信息移到第一条 user message,使 system prompt 可跨实例缓存,但这些信息权重略低
  • 自定义提示时,如果 Agent 仍需要工具调用能力,需要自行包含工具使用指导
  • CLAUDE.md 不修改系统提示本身,而是注入到对话上下文,因此与所有系统提示配置兼容
  • 从 CLI 迁移到 SDK 时,如需保持相同行为,需显式设置 preset: "claude_code"