系统提示词怎么写:一份让模型稳定听话的 system prompt 结构
拆解 system prompt 的角色、任务、约束、输出格式四块结构,给出一个可直接复用的真实例子,再讲 ChatGPT 和 Claude 的配置方式与迭代优化方法,让模型行为更稳。
系统提示词怎么写:让模型稳定听话的 system prompt 结构
很多人觉得提示词写得越长越好,于是把背景、要求、礼貌用语全堆进一段话里。结果是模型时而听话时而走神,今天能输出标准 JSON,明天又夹带一段解释。问题往往不在模型,而在 system prompt 没有结构。一份能复用、能审核、能做回归测试的系统提示词,应该像一份岗位说明书,而不是临场灵感。
system prompt 和普通提问有什么不同
普通提问是一次性的:你问什么,模型答什么。system prompt 是模型在整段对话里都要遵守的底层设定,它决定身份、边界和输出形态。把易变的具体问题放进对话,把稳定的规则放进 system prompt,两者分开,模型才不会每轮都重新揣摩你的意图。
判断一句话该不该进 system prompt,标准很简单:如果它在十次不同对话里都成立,就属于系统层;如果只对这一次输入有效,就留给用户消息。
一份 system prompt 的四块核心结构
我自己迭代了几十个内部助手后,固定下来四块,缺一块模型就会在某种输入上翻车。
第一块是角色:模型在整段任务里要保持的稳定身份。写"高级客服辅助助手"或"偏安全审查的代码 reviewer",而不是空泛的"专家助手"。
第二块是任务:这个角色具体要做什么。光有人设没有任务,模型会自由发挥。任务要写清楚目标和非目标,比如"把用户工单归类并给出建议回复,不直接承诺退款金额"。
第三块是约束:一行一条具体规则。好的约束说明模型不能编造什么、缺信息时是否追问、哪些政策边界不能碰、什么时候必须升级给人工。这一块最容易被忽略,却是模型出事的高发区。
第四块是输出格式:明确字段、顺序、缺数据时填什么。要求 JSON 就得把必填键、失败状态、空值处理一起写清楚,否则模型会自作主张补字段。
一个可以直接抄走的真实例子
下面是一份客服分类助手的 system prompt,四块齐全:
角色:你是某 SaaS 产品的一线客服辅助助手,面向中文用户。
任务:读取用户工单,判断问题类别,并草拟一条建议回复供人工坐席参考。
约束:
- 不得承诺任何具体退款金额或退款时间。
- 涉及账号安全、数据泄露的工单,category 标记为 escalate,不草拟回复。
- 信息不足时,在 reply 字段写明需要向用户追问的一个问题。
输出格式:仅输出 JSON,键固定为
{"category": string, "confidence": 0到1, "reply": string}。
缺任何信息时 confidence 写 0,不要省略字段。
这份提示词的关键不在措辞漂亮,而在每条约束都能单独拿去做测试:喂一个涉及退款的工单,验证它不报具体金额;喂一个账号被盗的工单,验证它走 escalate。这正是结构化的价值,规则可被逐条审核、逐条验证。
ChatGPT 与 Claude 的配置差异
两家模型都把系统指令放在专门位置,但侧重不同。ChatGPT 的自定义指令和 API 的 system 字段适合写稳定人设和输出规则;Claude 对结构化、带小标题的 system prompt 响应很好,约束写成清单它执行得更稳。无论哪家,都建议把示例放进 system prompt,给一两个标准的输入输出样例,比纯文字描述更能锁定格式。要估算提示词加上下文会占多少 token、会不会顶到上限,可以先过一遍 AI Token 计数器。
迭代优化:别把第一版当终版
第一版能跑通不等于稳。真正的优化是拿真实脏数据和对抗输入去试:故意给缺字段的工单、夹带提示注入的文本、超长输入,看哪条约束先崩。哪条规则被绕过,就把它写得更具体,或在输出格式里补一个失败状态。我的习惯是每次改完只动一条规则,留好旧版做对照,这样才知道是哪一处改动起了作用。
把这四块结构、配置方式和迭代习惯固化下来后,写系统提示词就从碰运气变成了可复用的流程。如果你不想每次都从空白页搭骨架,可以用 System Prompt 生成器 直接把角色、任务、约束、输出格式填进去,生成一份干净的结构化提示词再去微调。
Made by Toolora · Updated 2026-06-13