无尘阁日记

无尘阁日记

详细解释System Prompt
2026-03-23

我问:

System Prompt,详细解释下这个,以及我在使用各种模型的时候在哪里配,如何让他记住,用openclaw的时候skills里面有没有这个部分?

AI答:

下面我把这件事彻底讲透。你可以把它理解成:

System Prompt 不是你问模型的问题。
它更像是你在模型耳边,提前交代好的“工作说明书、角色设定、行为规则、输出格式要求”。

比如你问模型一句:

“帮我分析这篇文章。”

这是用户提示词

但你提前给它一段:

“你是一个严谨的中文写作教练。请用通俗中文回答。先总结,再逐段分析,最后给出可复用写法。不要空话。”

这段更上层的话,就是 System Prompt / System Instructions。它决定模型“以什么身份、什么风格、什么规则”来处理你后面所有问题。Google 的官方文档就把 system instructions 定义为:模型会在处理用户提示前先处理的一组指令,适合用来规定角色、上下文、格式和规则;它会作用于整个请求,而且虽然能引导模型,但并不能完全防止越狱或泄露。(Google Cloud Documentation)

一、System Prompt 到底是什么

1. 本质是什么

它本质上就是:

给模型的“上位指令”

它通常用来做这几件事:

1.1 设定角色

比如:

  • 你是产品经理

  • 你是律师

  • 你是资深代码审查专家

  • 你是小白教学教练

1.2 规定输出方式

比如:

  • 必须用中文

  • 先结论后分析

  • 用表格输出

  • 输出 JSON

  • 不要废话

  • 面向白领小白解释

1.3 规定行为边界

比如:

  • 不要编造数据

  • 不知道就明确说不知道

  • 涉及代码必须给完整代码

  • 涉及时间敏感内容要先联网核实

1.4 补充固定上下文

比如:

  • 我们公司的产品叫 XXX

  • 用户群是中高层白领

  • 默认技术栈是 PHP + Yii2 + MySQL

  • 回答中尽量结合中国大陆场景

所以你可以把它理解成:

用户 prompt 是“这次要干什么”
system prompt 是“你以后都按什么规矩干”

OpenAI 官方也把更高优先级的开发者消息描述为系统规则和业务逻辑,而用户消息更像传入的参数。(OpenAI开发者)

二、它和普通提示词有什么区别

1. 普通提示词

是你每次临时说的话。

例如:

“帮我写一封邮件”
“把这段话改得更有力量”
“给我做个PPT大纲”

2. System Prompt

是你提前立的规矩。

例如:

“以后都用中文回答”
“先说结论,再展开”
“遇到我发代码,优先检查 bug 和边界情况”
“你是一个既懂技术又懂商业表达的顾问”

3. 谁优先级更高

一般来说,System Prompt 的优先级高于普通用户输入。OpenAI 文档明确写了:developer 消息优先于 user 消息。(OpenAI开发者)
但注意,不同平台叫法会不一样:

  • OpenAI 现在常把这类上位指令放在 developer message / reusable prompt

  • Claude API 用顶层 system

  • Gemini 用 system_instruction / systemInstruction

本质是同一类东西,只是接口名字不同。(OpenAI开发者)

三、为什么很多人用了模型,却总觉得“它记不住”

因为很多人把三种东西混在一起了。

1. 临时提问

只对当前这一轮有影响。

2. 会话上下文

模型“记住”的,其实往往不是永久记住,而是当前聊天窗口里前面的内容还在上下文中。Claude 官方文档就明确说它的 Messages API 是无状态的,所以每次都要把完整会话历史重新发过去。(Claude API Docs)

3. 真正长期生效的固定规则

这才属于 system prompt、可复用 prompt、skill 指令、应用级配置这一类。

所以你觉得“记住”,通常有四种实现方式:

3.1 靠当前对话上下文记住

最简单,但一开新会话就容易丢。

3.2 靠系统提示长期约束

适合固定风格、固定规则、固定输出格式。

3.3 靠平台的记忆功能

有些产品有 memory/profile/preference 之类能力,但这和 system prompt 不是一回事。

3.4 靠技能、工作流、模板文件

尤其是 OpenClaw、Claude Code、工作流平台里,很多“记住”其实不是模型自己记,而是你把规则写成文件或技能,每次运行时再注入进去。

四、在不同模型/平台里,一般放在哪里

下面我按你最关心的“在哪里配”来说。

四点一、OpenAI 体系里怎么放

1. API 里

OpenAI 现在强调的是 developer messages。官方文档明确说,developer message 用来放系统规则和业务逻辑,优先于 user message。(OpenAI开发者)

你可以把它理解成:

  • developer:总指挥

  • user:本次任务

  • assistant:模型回复

2. Dashboard 里

OpenAI 还支持 reusable prompts,可以在 dashboard 里创建可复用 prompt,然后在 API 请求里引用。官方文档说明这类可复用 prompt 当前支持在 Responses API 中使用。(OpenAI开发者)

3. ChatGPT 网页版里

如果你不是自己写 API,而是直接在产品界面里用,那么通常对应的是:

  • 自定义指令

  • 记忆

  • 某个 GPT / 助手里的 Instructions

这些东西本质上都在扮演“半 system prompt”的角色。

四点二、Claude 里怎么放

Claude API 官方写得很明确:

如果你要放 system prompt,要用顶层的 system 参数;Messages API 的输入消息里没有 system 这个 role。 (Claude Platform)

这点很关键。很多人以为和 OpenAI 一样,直接塞一个 role=system 就行,但 Claude 官方接口不是这么设计的。

另外,Claude 的消息接口是无状态的,你每次都要把会话历史重传,所以“记住”不是天然永久保存,而是你的应用把前文和 system 一起再次发给它。(Claude API Docs)

Claude Code 里更直观

Claude Code 官方文档还给了四个系统提示相关参数:

  • --system-prompt:替换整个默认 prompt

  • --system-prompt-file:用文件替换

  • --append-system-prompt:在默认 prompt 后追加

  • --append-system-prompt-file:从文件追加

而且官方建议:大多数场景优先用 append,而不是 replace,因为 append 能保留工具和环境能力。(Claude API Docs)

这对理解 OpenClaw 也很有帮助,因为 OpenClaw 也是类似逻辑:平台自己有一套系统提示骨架,你通常是在其基础上追加,而不是整套推翻。

四点三、Gemini 里怎么放

Gemini 官方文档写得也很直接:

可以通过 GenerateContentConfig 里的 system_instructionsystemInstruction 来控制模型行为。官方示例甚至直接写成“你是一只猫,你叫 Neko”。(Google AI for Developers)

Google 还明确说 system instructions 适合做这些事:

  • 定义角色

  • 规定输出格式

  • 规定语气风格

  • 规定目标和规则

  • 补充上下文

并提醒:它能引导模型,但不能完全防止越狱,所以不要在里面放特别敏感的秘密。(Google Cloud Documentation)

五、怎么才能让它“记住”

这个问题要分成两个层次。

1. 你想让它“本次对话都记住”

做法是:

1.1 放进 system prompt

适合固定规则。

1.2 或者每轮都重复携带

尤其是 API 场景,你的程序每次请求都把 system prompt 和历史一起发过去。

这就是很多应用“看起来记住了”的原因,本质是程序在帮你反复带着它。

2. 你想让它“以后每次开新会话都记住”

做法是:

2.1 写成固定模板

比如:

  • prompt 模板文件

  • skill

  • assistant instruction

  • 工作流配置

2.2 放到产品的长期配置里

比如:

  • 某个 GPT 的 instructions

  • Claude Code 的 prompt file

  • OpenClaw 的 skill / extra system prompt / agent config

  • 你自己程序里的固定系统消息

2.3 放到“记忆层”

这不是 system prompt,而是 profile / memory / preferences。
它更像“用户档案”,而不是“本次系统指令”。

六、最实用的理解方式:把它分成三层

这是你以后使用各种模型时最稳的脑图。

第一层:System Prompt

规定身份、规则、格式、原则。

例如:

“你是一个面向中国大陆职场白领的小白教学教练。默认用中文。先给结论,再给步骤。涉及工具配置时给实际可执行操作。”

第二层:任务 Prompt

这次到底要干什么。

例如:

“帮我设计一个筛选简历的工作流。”

第三层:上下文材料

具体资料是什么。

例如:

  • 这份 JD

  • 这几份简历

  • 这段代码

  • 这份会议纪要

你一旦把这三层分开,模型就会稳得多。

七、OpenClaw 里到底有没有这个部分

有,而且很关键。

但它不是简单一个“Settings 里写几句话”的概念,而是运行时自动拼装的系统提示结构

OpenClaw 官方文档明确写了:

OpenClaw 会为每一次 agent run 构建一个自定义 system prompt,这个 prompt 是 OpenClaw 自己组装并注入的。 (OpenClaw)

而且它不是一小段,而是一整套结构化内容,官方列出的 section 包括:

  • Tooling

  • Safety

  • Skills

  • Workspace

  • Documentation

  • Sandbox

  • Current Date & Time

  • Runtime

  • Reasoning 等等 (OpenClaw)

也就是说:

在 OpenClaw 里,System Prompt 是“底层框架的一部分”。

不是说“有没有”,而是“本来就一直存在”。

八、OpenClaw 的 skills 和 system prompt 是什么关系

这个点非常重要,很多人会混淆。

1. skills 不是等于 system prompt

skills 不是单独代替 system prompt。

2. 但 skills 会进入 system prompt 的一部分

OpenClaw 官方文档明确写了:

当 skills 可用时,OpenClaw 会把可用 skills 的紧凑 XML 列表注入到 system prompt。(OpenClaw)

另外,OpenClaw 的 System Prompt 页面也明确说了,Skills 是 system prompt 的一个固定 section,用来告诉模型如何按需加载 skill instructions。(OpenClaw)

所以更准确地说:

skills 是“可被系统提示引用和调度的能力说明/规则包”
system prompt 是“总控层”
skill 是“挂在总控层下面的专用模块”

九、OpenClaw 里的 skill 到底是什么

OpenClaw 官方写得很清楚:

Skill 用来教 agent 何时以及如何使用工具。每个 skill 是一个目录,里面有一个 SKILL.md 文件,包含 YAML frontmatter 和 markdown instructions。 (OpenClaw)

也就是说,skill 本质上是:

一份“专项说明书”

它可以写:

  • 什么时候触发

  • 该用哪个工具

  • 先做什么后做什么

  • 输出格式是什么

  • 某个任务的固定套路是什么

例如:

  • 写飞书文档 skill

  • 招聘筛选简历 skill

  • 生成公众号文章 skill

  • 调某个内部 API 的 skill

所以从实战角度说:

如果你要的是“全局风格”

放 system prompt 层更合适。

如果你要的是“某类任务的专门 SOP”

放 skill 更合适。

十、OpenClaw 里“让它记住”的正确理解

你问“如何让它记住”,在 OpenClaw 里通常有三种路子。

1. 会话级记住

当前 session 里上下文还在,它就像记住了。

2. skill 级记住

你把某类固定方法写进 SKILL.md,以后这类任务再来,OpenClaw 就会把这类技能说明纳入系统提示上下文。官方也说明 skill 文件变化时,默认会被 watcher 监测并刷新 snapshot。(OpenClaw)

3. 系统提示扩展级记住

OpenClaw 的 GitHub 文档提到,系统提示构建时除了固定 section,还可以带上 optional context files and extra system prompt content。(GitHub)

这句话很重要,说明 OpenClaw 不是死板固定 prompt,它是支持附加系统层内容的。
也就是说,你可以理解为:

  • 基础骨架:OpenClaw 自带

  • 专项能力:skills

  • 你的额外总规则:extra system prompt content / append prompt 一类

十一、那我在 OpenClaw 里到底该放哪

我给你最接地气的结论。

场景一:你想让它一直用某种回答风格

例如:

  • 全部用中文

  • 先结论后步骤

  • 面向小白解释

  • 不要空话

  • 代码必须完整

这种放在:

系统级附加 prompt / agent 级全局规则
最合适。因为这是“所有任务都通用”的规则。

场景二:你想让它遇到某类任务就按固定流程做

例如:

  • 写公众号文章

  • 筛选简历

  • 生成飞书文档

  • 分析代码并输出修改方案

  • 按你的公司业务规范处理接口

这种放在:

skill
最合适。

因为 skill 就是“任务专用说明书”。官方也明确说技能是教 agent 何时、如何用工具。(OpenClaw)

场景三:你想让某个项目里都按这套规则

例如:

  • 这个项目默认是 PHP Yii2

  • 这个项目默认数据库 MySQL

  • 日志路径、接口规范、命名规范固定

这种更适合:

  • 项目内的 skill

  • 项目 context file

  • workspace 里的固定说明文件

因为它是“项目级知识”,不是“所有项目通用”。

十二、最简单的落地原则

你以后别纠结术语,直接按这个方法选:

1. 对所有任务都有效

写到 系统层

2. 只对某类任务有效

写到 skill

3. 只对某个项目有效

写到 项目说明文件 / workspace context / 项目 skill

4. 只对这一次有效

直接写在 本次 prompt

十三、给你一个非常通俗的比喻

把模型想成一个新来的员工。

System Prompt

是入职培训手册
告诉他:

  • 你是谁

  • 你属于哪个部门

  • 说话风格

  • 做事原则

  • 不能做什么

Skill

是岗位 SOP
告诉他:

  • 遇到简历筛选怎么办

  • 遇到飞书写文档怎么办

  • 遇到代码审查怎么办

  • 遇到客服投诉怎么办

User Prompt

是领导这次交办的具体任务
告诉他:

  • 今天先干这个

  • 这次按这个资料做

  • 这个结果今晚给我

Conversation History

是刚才开会说过的话
所以他“看起来记住了”

这样你一下就懂了。

十四、你实际使用时最容易犯的错

1. 把所有要求都塞进一次性提问里

结果下一轮它就忘。

2. 把全局规则写进某个 skill

结果别的任务不生效。

3. 把项目规则写成全局 system prompt

结果所有项目都被污染。

4. 想让模型“永久记住”,但实际上只是当前会话还没丢

一换窗口就没了。

5. system prompt 写太长、太散、太空

OpenClaw 官方也提醒过,skills 会和 system prompt、会话历史、用户请求一起共享上下文窗口,所以内容要克制,别什么都往里堆。(GitHub)

十五、给你一套最好用的写法模板

下面这套模板,你几乎可以放到任何模型的 system prompt 里。

你是一个专业且务实的中文助手。

回答规则:
1. 默认使用中文。
2. 先给结论,再给步骤,再给注意事项。
3. 尽量用通俗语言解释专业概念。
4. 遇到不确定的信息,不要编造,要明确说明不确定点。
5. 涉及操作步骤时,优先给出可直接执行的方案。
6. 涉及代码时,优先给完整可运行版本。
7. 涉及对比分析时,按“适用场景、优点、缺点、建议”展开。
8. 用户偏好结构化表达,使用标题分层呈现。

如果你是给自己定一个长期风格,这类内容就适合 system prompt。

如果你是要做“简历筛选”“飞书发文”“公众号写作”,就应该再单独配 skill。

十六、给你一个 OpenClaw 的实战判断法

你以后在 OpenClaw 里看到一个需求,就这样判断:

1. 这是长期固定风格吗?

是,就往系统层想。

例如:

  • 始终用中文

  • 始终面向小白

  • 始终先结论后步骤

2. 这是某类任务专用流程吗?

是,就往 skills 里写。

例如:

  • 看到简历 PDF,先抽取信息,再评分,再输出表格

  • 看到公众号素材,先提炼观点,再拟标题,再写正文

  • 看到接口文档,先提取参数,再生成表格,再补示例

3. 这是某个项目的私有约定吗?

是,就放项目文件或项目 skill。

例如:

  • 你们公司的命名规范

  • 你们内部接口字段

  • 你们库表结构

  • 你们流程节点名字

十七、最关键的一句话总结

System Prompt 决定“你是谁、按什么规则做事”
Skill 决定“遇到哪类事具体怎么做”
用户提问决定“这次到底做什么”

在 OpenClaw 里,这三者不是互相替代,而是上下配合。
而且根据官方文档,OpenClaw 本身就会在每次运行时自动组装系统提示,其中已经包含 Skills、Tooling、Workspace、Docs、Runtime 等部分;skills 也会被注入到 system prompt 中。(OpenClaw)

十八、给你的直接建议

你现在最适合这样配:

全局 System Prompt 放这些

  • 默认中文

  • 通俗解释

  • 先结论后步骤

  • 遇到代码给完整代码

  • 遇到流程给可执行 SOP

  • 适合中高层白领、小白也能懂

Skills 放这些

  • 简历筛选 skill

  • 公众号写作 skill

  • 飞书写文档 skill

  • 接口文档转表格 skill

  • 代码审查与修复 skill

项目级文件放这些

  • 你的公司业务术语

  • 你们的接口字段含义

  • 你们的代码规范

  • 你们常用命令

  • 你们数据库表关系

这样就很稳。