Claude学院

Claude 系统提示词怎么设置?完整配置步骤图解

设置 Claude 系统提示词有三条路径:网页端在 Projects 的「自定义指令」里填写;调用 API 时把内容放进 Messages API 的 system 参数;用 Claude Code 时则写进项目根目录的 CLAUDE.md 文件。三种方式本质相同——都是在对话开始前给模型一段「最高优先级」的角色与行为说明,下面分场景图解。

系统提示词到底是什么

系统提示词(System Prompt)是独立于用户消息之外的一段指令,用来定义模型的身份、语气、输出格式和约束边界。它不是普通的一句话提问,而是贯穿整个会话、对每一轮回答都生效的「设定」。和写在用户消息里的临时要求相比,系统提示词的指令遵循优先级更高,也更稳定。

需要强调一点:当前的 Claude 4.x 模型(Opus 4.8、Sonnet 4.6、Haiku 4.5)对系统提示词的遵循度非常高。过去为了「压制」旧模型而写的 CRITICAL: 你必须…… 这类强硬措辞,现在反而容易导致过度触发,正常陈述式写法即可。关于具体措辞技巧,可以参考 Claude 提示词怎么写?2026 最新新手到进阶完整教程

方式一:网页端 / Claude Projects 设置

如果你用的是 claude.ai 网页或桌面客户端,最常见的入口是 Projects(项目)里的自定义指令:

  1. 进入或新建一个 Project;
  2. 打开右侧「自定义指令 / Custom Instructions」面板;
  3. 在文本框中写入系统提示词,例如角色定位、回答语言、输出规范;
  4. 保存后,该项目下所有新对话都会自动带上这段指令。

这种方式适合非开发者,且能配合知识库一起使用。项目内上传的文档会和系统提示词一起作为上下文,完整流程见 Claude Projects 怎么用?从创建到知识库搭建全流程。注意单条对话窗口里没有独立的 system 框——网页端的「系统级」设定就落在 Projects 的自定义指令上。

方式二:Messages API 的 system 参数(开发者)

通过 API 调用时,系统提示词不写在 messages 数组里,而是放进顶层的 system 参数。请求发往 POST /v1/messages,鉴权用请求头 x-api-keyanthropic-version

Python(anthropic 官方 SDK)

from anthropic import Anthropic

client = Anthropic()  # 读取环境变量 ANTHROPIC_API_KEY

response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    system="你是一名资深中文法律顾问,回答必须基于中国大陆现行法律,"
           "用通俗语言解释,并在结尾提醒咨询专业律师。不要编造法条。",
    messages=[
        {"role": "user", "content": "签了空白合同有什么风险?"}
    ],
)
print(response.content[0].text)

Node.js(@anthropic-ai/sdk)

import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic(); // 读取 ANTHROPIC_API_KEY

const response = await client.messages.create({
  model: "claude-opus-4-8",
  max_tokens: 1024,
  system: "你是一名资深中文法律顾问,回答必须基于中国大陆现行法律,用通俗语言解释,结尾提醒咨询专业律师。",
  messages: [
    { role: "user", content: "签了空白合同有什么风险?" },
  ],
});
console.log(response.content[0].text);

几个关键点:

  • system 接受字符串,也接受由多个 {"type": "text", "text": ...} 块组成的数组——后者可以在某个块上加 cache_control 启用提示词缓存,降低重复调用成本;
  • system 渲染在 tools 之后、messages 之前,因此把固定不变的内容写在 system 里最利于缓存命中;
  • 不要在 system 里插入时间戳、随机 ID 等每次都变的内容,否则缓存会失效。

系统提示词只是 Messages API 的参数之一,完整的参数列表(temperature 已在 4.x 移除、thinkingmax_tokens 等)见 Claude Messages API 全部参数说明(含代码示例)。如果你还没跑通第一个请求,先看 Claude API Python 示例代码:10 分钟跑通第一个程序

方式三:Claude Code 的 CLAUDE.md 文件

Claude Code 是 Anthropic 官方命令行工具,它的「系统提示词」落在项目根目录的 CLAUDE.md 文件里。每次在该目录下启动 Claude Code,文件内容都会被自动注入,等同于给这个代码库配置了一份长期生效的项目指令。

典型写法是分节描述项目背景、技术栈、编码规范和禁止事项,例如:

# 项目说明
本项目是一个 Go 编写的控制面服务,前端用 Astro 静态生成。

# 编码规范
- 所有新代码用 Go 1.22 语法
- 提交信息用中文
- 不要新增未经讨论的第三方依赖

CLAUDE.md 支持放在多个层级(用户级、项目级、子目录级),优先级和合并规则、完整模板见 Claude Code CLAUDE.md 配置文件怎么写?完整模板

高质量系统提示词的写法

无论哪种方式,写好 system prompt 的原则是一致的:

  • 先定身份,再定行为:「你是一名……」开头,明确角色比堆砌要求更有效;
  • 用陈述句,少用威胁式措辞:「使用搜索工具来核实价格」优于「你必须用搜索工具,否则……」;
  • 明确输出格式:需要 JSON、表格或固定结构时直接说明,必要时配 1-2 个示例;
  • 划定边界:写清楚「不要做什么」,比如不编造、不超范围、遇到不确定就明说;
  • 用 XML 标签分区:把角色、规则、示例用 <rules></rules> 这类标签隔开,模型解析更准。

标签用法的实战示例见 Claude 提示词 XML 标签用法详解:5 个实战示例;如果你担心模型胡编内容,Claude 提示词怎么避免幻觉?实测有效的 5 个方法 里有可直接套用的约束句式。

常见问题

系统提示词和用户消息里的要求有什么区别?

系统提示词是会话级的「设定」,对每一轮回答持续生效,且指令优先级更高、更难被后续消息覆盖;写在用户消息里的要求只对当前这一轮有效,容易在多轮对话中被忘记。需要长期稳定的角色和规范,就放进 system;只是临时的一次性要求,放在用户消息即可。

system 参数有字数限制吗?会很贵吗?

系统提示词会占用上下文窗口和输入 token。Claude Opus 4.8 提供 1M 上下文窗口,容纳常规的系统提示词绰绰有余。成本方面,长 system 可以通过 cache_control 提示词缓存大幅降低重复调用费用(缓存读取约为正常输入价的十分之一)。具体计费请以 Anthropic 官网为准,省钱技巧可参考 Claude API 怎么省钱?5 个降低 Token 成本的方法

设置了系统提示词,模型却没按要求来怎么办?

常见原因有三个:一是措辞太弱或太强(4.x 模型对强硬命令容易过度反应);二是关键约束被埋在大段文字中间,模型没抓到重点;三是用户消息里的要求和 system 冲突。建议把核心规则单独成段、用标签突出,并检查是否有矛盾指令。系统性排查见 Claude 提示词不生效?8 个常见原因和修复方法

提示词工程