Skip to content

01 - 身份与开场

来源: constants/prompts.ts -> getSimpleIntroSection()constants/system.ts

变体 A:默认(交互式 CLI)

你是 Claude Code,Anthropic 官方的 Claude 命令行工具。

变体 B:Agent SDK + Claude Code 预设

你是 Claude Code,Anthropic 官方的 Claude 命令行工具,运行在 Claude Agent SDK 中。

变体 C:通用 Agent SDK

你是一个 Claude 智能体,基于 Anthropic 的 Claude Agent SDK 构建。
你是一个帮助用户完成软件工程任务的交互式智能体。请使用以下说明和可用工具来协助用户。
重要:协助进行已授权的安全测试、防御性安全、CTF 挑战和教育场景。拒绝涉及破坏性技术、DoS 攻击、大规模目标扫描、供应链攻击或用于恶意目的的检测规避请求。双重用途安全工具(C2 框架、凭据测试、漏洞开发)需要明确的授权上下文:渗透测试合约、CTF 竞赛、安全研究或防御性用例。
重要:你绝不能为用户生成或猜测 URL,除非你确信这些 URL 是用于帮助用户编程。你可以使用用户在消息或本地文件中提供的 URL。
你是 Claude Code(Anthropic 官方 Claude 命令行工具)的一个代理。根据用户的消息,你应该使用可用的工具来完成任务。完整地完成任务——不要过度打磨,但也不要半途而废。完成任务后,用简洁的报告回复所做的工作和关键发现——调用者会将其转达给用户,所以只需要核心要点。

三种前缀对应三种截然不同的运行模式:

模式前缀场景行为差异
交互式 CLIDEFAULT_PREFIX用户直接使用终端完整的交互能力,面向最终用户
SDK 预设AGENT_SDK_CLAUDE_CODE_PRESET_PREFIX作为 Agent SDK 中的 Claude Code 预设保留品牌身份,但运行环境不同
通用 AgentAGENT_SDK_PREFIX作为通用智能体去除 Claude Code 品牌,纯 Agent 身份

这种设计的核心目的是身份锚定(Identity Anchoring)——不同的身份声明会引导模型采取不同的行为模式。例如,声明为”交互式智能体”会让模型更倾向于对话式交互,而声明为”代理”则更倾向于任务导向。

安全指令被放在开场部分(系统提示词的最前端),这不是巧合:

  1. 位置优先级:在 LLM 的注意力机制中,系统提示词开头的内容权重最高
  2. 允许列表 + 拒绝列表 + 灰色地带:不是简单的二元分类,而是三级策略
    • 明确允许:授权安全测试、CTF、教育
    • 明确拒绝:DoS、供应链攻击、恶意规避
    • 条件允许:双重用途工具需要”明确授权上下文”
  3. 实用主义:承认安全工具的双重性质,而非一刀切禁止

LLM 有一个已知的失败模式:生成看起来真实但实际不存在的 URL。这在编程辅助场景中特别危险:

  • 可能引导用户访问恶意/钓鱼网站
  • 可能浪费用户时间去访问 404 页面
  • 用户对 AI 生成的 URL 可能有不恰当的信任

规则的设计是单向约束:可以使用用户提供的 URL,但不能自行编造。


  1. 身份前缀的选择机制是运行时决定的,这意味着同一份代码库通过环境变量/配置就能切换三种完全不同的”人格”。这是提示词工程中的”多态”模式。

  2. 安全指令嵌入到最早的位置,确保安全边界在所有其他指令之前建立。这遵循了”安全左移(Shift Left Security)“的原则——在流程的最早阶段建立安全约束。

  3. “don’t gold-plate, but don’t leave it half-done”(不要过度打磨,但也不要半途而废)是一条精妙的平衡指令。它同时对抗了 LLM 的两种典型倾向:

    • 过度热心:不断添加”改进”直到偏离原始需求
    • 过早放弃:遇到困难时给出不完整的方案

    这种”双向约束”比单一方向的指令更有效,因为它定义了一个质量区间而非单一阈值。

  4. **Agent 提示词中的”the caller will relay this”**明确了输出受众不是最终用户,而是中间调用者。这改变了模型的输出策略——从”解释性”转向”摘要性”,有效节省了上下文窗口空间。

  5. URL 生成限制是防止 LLM 幻觉生成虚假链接的护栏。这是一个经过实际事故验证的规则——在没有此限制的早期版本中,模型会生成看似合理但实际不存在的文档链接、API 端点和包名。