开始之前
你需要一个能设置长期指令的地方。可以是 API 调用里的 system 参数,可以是 OpenAI Agents SDK 里智能体的 instructions 参数,也可以是 Claude Code 里的 CLAUDE.md 文件,它存放的是 Claude 每次会话都该知道的指令。这三样都没有,也能跟着学,因为写法是一样的。
挑一件希望模型每次都用同一种方式去做的事。下面的示例是替一家小店回答顾客的问题,你可以换成自己的场景。
分四部分写系统提示词
OpenAI 的指南说,开发者消息通常按这个顺序包含四个部分:身份、指令、示例和背景。Google 给 Gemini 3 的模板则把系统指令分成角色、分步指令、约束和输出格式。下面的示例照 OpenAI 的顺序来写:用 Markdown 标题分段,用 XML 标签包住示例和贴进来的政策文本,这两种做法 OpenAI 都提到过,一种用来标出段落,一种用来界定内容。
# Identity
You are the order-help assistant for a small online tea shop. You write in a friendly, plain style.
# Instructions
- Answer questions about orders, shipping and returns using only the policy in the Context section.
- If the policy does not cover the question, say so and offer to pass it to the shop owner.
- Keep every answer under 80 words and end with one clear next step.
- Reply in the language the customer wrote in.
# Examples
<customer_message>
Where is my order?
</customer_message>
<assistant_response>
Please send me the order number from your confirmation email, and I will pass your question to the shop owner.
</assistant_response>
# Context
<policy>
[paste your shipping and returns policy here]
</policy>- 给它一个身份。用一句话说明模型是谁、为谁服务。Anthropic 的指南说,系统提示词里哪怕只有一句角色设定,也能让模型的行为和语气更聚焦。
- 列出规则。说清要做什么、答案必须出自哪里、答不上来时怎么办。每条规则写一行,这样日后才知道是哪一条出了问题。
- 定好格式。给出回复的长度、语气和形状。Google 的模板里就有篇幅详略、语气和输出结构这几个位置。
- 加一两个示例。像 OpenAI 的例子那样,用标签把每一对包起来,让模型分得清它和指令。
- 参考资料单独放一块。把模型回答时要依据的政策、价目表或常见问题贴进来,加上标签。OpenAI 说这类背景资料通常放在提示词靠后的位置最好。
各家厂商把它放在哪
想法到处一样,字段名各不相同。在不同服务商之间搬提示词时,要改的就是这一处。下面的名字取自 Anthropic、OpenAI 和 Google 的页面。
| 厂商 | 系统提示词放在哪 | 文档怎么说 |
|---|---|---|
| Anthropic Messages API | 顶层的 system 参数,和 messages 并列 | 可以是字符串,也可以是文本块数组。接口文档把它称为向 Claude 提供背景和指令的一种方式,比如指定目标或角色。 |
| OpenAI Responses API | instructions 参数,或者 developer 角色的消息 | 开发者消息的优先级排在 user 消息之前。instructions 只对当前这次请求生效。 |
| Google Gemini API | system_instruction 参数 | 文档里的例子给一次请求设置了“You are a cat. Your name is Neko.”。 |
系统提示词能做什么,做不到什么
它不会自己延续下去。OpenAI 提到,用 previous_response_id 接着上一轮对话时,之前几轮用过的 instructions 不会出现在上下文里,所以要重新发一遍。
聊天产品会替你设好一份。Anthropic 公开了claude.ai 和手机应用背后的系统提示词。它们提供当前日期这类信息,也引导某些行为,比如始终用 Markdown 给出代码片段,Anthropic 还说明这些提示词不适用于 Claude API。
这些提示词很长,改得也勤。从 2026 年 9 月 1 日起,Anthropic 为最新的四个模型贴出了九条带日期的条目,见下图。按我们的统计,Opus 5.5 最新的一条约有 4,800 个英文单词。
里面有一个 {{currentDateTime}} 占位符,由应用填进当天的日期,还告诉模型,它可靠的知识截止到 2026 年 6 月底。所以,模型没换、应用的表现却变了的时候,先去读最新的那一条。
系统提示词也是用户会想办法去读的东西。OpenAI 的智能体构建指南把防止系统提示词泄露,列为护栏要覆盖的数据隐私风险。
先写短的,再根据失败一点点补
Anthropic 的上下文工程文章说,系统提示词有两种常见的毛病。一头是工程师把复杂又脆弱的逻辑硬写进去,想得到精确的行为。另一头是给的指导含糊而笼统。文章的建议是,先拿当时最好的模型测一份最精简的提示词,再根据看到的失败情况,补上清晰的指令和示例。
同一篇文章更看重一组精选的、多样而典型的示例,不赞成罗列一长串边角情况的规则。落到做法上,就是遇到新情况先加示例,再考虑加规则。
语气的轻重,两个方向都有影响。Anthropic 的指南说,Claude Opus 4.5 和 4.6 对系统提示词的反应比以前的模型更强烈。像“CRITICAL: You MUST use this tool when...”这样的喊话,现在可能让它们过度调用工具,用“Use this tool when...”这样平实的说法反而更好。
一份提示词要服务很多用户时,OpenAI 的智能体指南建议只写一份基础提示词,里面留出变量,比如顾客的名字和入会多久,不必存一堆近乎相同的副本。
Amanda Askell 和 Alex Albert 谈 Claude 应用背后的系统提示词
Anthropic 的哲学家和伦理学者 Amanda Askell,2024 年 3 月 6 日在 X 上贴出了 Claude 3 的系统提示词,并用一串帖子做了拆解。
五个月后,2024 年 8 月 26 日,在 Anthropic 做研究的 Alex Albert 宣布,此后 claude.ai 和手机应用默认系统提示词的改动,都会记在文档里。
这份记录就是上面时间线里的发布说明页面,两年多以后仍在更新。去读你所用模型的最新一条:它是训练这个模型的人写的、真在用的系统提示词,里面的习惯你也可以借来用,比如告诉模型今天的日期,并直说它不知道什么。
我们会把对 Claude dot ai 和手机应用默认系统提示词所做的改动记录下来。(系统提示词不影响 API。)
X 官方嵌入卡片的截图,拍摄于 2026 年 11 月 5 日,时间为 UTC。Askell 的拆解在她那条帖子下面的一串回复里。点击截图可到 X 上打开原帖。
常见错误
- 把整本手册贴进提示词。模型没学过的数据,OpenAI 建议走检索,用它的文件搜索工具。
- 只写规则,不写理由。像第一课那样把理由补上,模型才能把规则用到你没列出的情况。
- 一次加十几条规则,结果不知道是哪一条改变了答案。
- 只测友好的输入。OpenAI 的智能体指南把“Ignore all previous instructions”当作恶意输入的例子,你也拿一条来试试自己的提示词。
自己试一试
- 为一件你想让它每次都用同一种方式去做的事,写出这四个部分。
- 用五条不同的用户消息去试,其中一条要让模型无视它的规则。
- 每个没答好的地方,用一行记下来。第一个先用示例去修,不要加新规则,然后五条全部重跑。
下一课:上下文窗口
系统提示词每次请求都会带上,所以它要占地方。下一课什么是上下文窗口,讲还有什么会把这块地方占满,满了以后会发生什么。
Claude Code 里的长期指令放在一个文件里,CLAUDE.md 文件里该写什么有详细的讲解。
自测一下
在 Anthropic Messages API 里,系统提示词放在哪里?
查看答案
C. 顶层的 system 参数,和 messages 并列 本课的表里写着,Anthropic 用顶层的 system 参数,OpenAI 用 instructions,Google 用 system_instruction。
本课把系统提示词分成哪四个部分,顺序是什么?
查看答案
A. 身份、指令、示例、背景资料 OpenAI 的指南说,开发者消息通常按身份、指令、示例、背景的顺序来写,示例也是这样排的。
你用 previous_response_id 接着上一轮对话,模型却不再遵守你的规则。最可能的原因是什么?
查看答案
D. 之前几轮用过的指令不会自动延续,要重新发一遍 OpenAI 提到,用 previous_response_id 接着对话时,之前几轮用过的 instructions 不会出现在上下文里。
有一条用户消息让你的系统提示词失灵了。本课建议在加新规则之前先试什么?
查看答案
B. 加一个你想要的答案的示例 Anthropic 更看重一组精选的、多样而典型的示例,不赞成罗列一长串边角情况的规则,所以先加示例。
常见问题
系统提示词和用户提示词有什么区别?
系统提示词给整场对话设定长期规则,用户提示词则是某个人在一条消息里的提问。在 OpenAI 的 API 里,开发者角色的优先级排在用户角色之前,OpenAI 把这两者比作函数的定义和它的参数。
系统提示词应该写多长?
起步要短。Anthropic 的工程团队建议先从最精简的提示词开始,出现失败再补指令和示例。写长了还占空间,因为系统提示词也计入上下文窗口。
聊天应用有自己的系统提示词吗?
Claude 的应用有,Anthropic 为每个模型都有一页记录,有些模型还有好几条带日期的条目。我们只读了 Anthropic 的这一页,其他厂商的情况请去它们那里查。
参考资料该放在提示词的什么位置?
长文档放在问题上面。Anthropic 说,2 万 token 以上的文档要放在问题之前,Google 的长上下文页面则说,长上下文里要把问题放在末尾。OpenAI 的开发者消息模板反而把背景资料放在靠后的位置,所以系统提示词比较短的话,照你所用厂商的模板来。
用户能推翻我的系统提示词吗?
有心的用户可以试,所以涉及敏感的事,千万别只靠提示词。OpenAI 的智能体指南把护栏称为分层防御,还要搭配身份验证、授权和严格的访问控制。
系统提示词该用 Markdown 还是 XML 来写?
两种都行。Anthropic 说,提示词里同时有指令、背景、示例和输入时,XML 标签能帮模型更清楚地解析,并建议标签名前后一致、含义清楚。选定一种,就一直用下去。
资料来源
- Anthropic: Prompting best practices https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices
- Anthropic: Messages API reference https://platform.claude.com/docs/en/api/messages
- Anthropic: System prompts release notes https://platform.claude.com/docs/en/release-notes/system-prompts
- Anthropic Engineering: Effective context engineering for AI agents https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents
- OpenAI: Prompt engineering https://developers.openai.com/api/docs/guides/prompt-engineering
- OpenAI: A practical guide to building agents https://cdn.openai.com/business-guides-and-resources/a-practical-guide-to-building-agents.pdf
- Google AI Studio: Text generation https://aistudio.google.com/docs/text-generation
- Google AI Studio: Prompt design strategies https://aistudio.google.com/docs/prompting-strategies
- Google AI Studio: Long context https://aistudio.google.com/docs/long-context
- Claude Code docs: How Claude Code works https://code.claude.com/docs/en/how-claude-code-works
- Anthropic: Claude Fable 5.1 system prompts https://platform.claude.com/docs/en/release-notes/system-prompts/claude-fable-5-1
- Anthropic: Claude Opus 5.5 system prompts https://platform.claude.com/docs/en/release-notes/system-prompts/claude-opus-5-5
- Anthropic: Claude Sonnet 5.5 system prompts https://platform.claude.com/docs/en/release-notes/system-prompts/claude-sonnet-5-5
- Anthropic: Claude Haiku 5.5 system prompts https://platform.claude.com/docs/en/release-notes/system-prompts/claude-haiku-5-5
- Amanda Askell on X, 6 March 2024 https://x.com/AmandaAskell/status/1765207842993434880
- Alex Albert on X, 26 August 2024 https://x.com/alexalbert__/status/1828107230656471442


