系统提示词怎么写才管用?实例拆解它与用户提示词的分工

内容创作

用实例拆解系统提示词和用户提示词各自管什么、冲突时听谁的,给出能直接套用的写法和排查顺序。

很多人把规矩写进用户那句话里,聊两轮就跑偏;也有人系统提示词写了一屏,模型照样不听话。问题通常不在文笔,而在没分清这两层谁定规矩、谁下指令。这篇用几个对照实例讲清分工与优先级,给出系统提示词的写法模板和自检清单,写完能直接拿去测。

很多人写提示词的习惯是:把要求全塞进对话框那一句里。前两轮还行,聊到第四轮就发现模型开始飘——语气变了、格式忘了、不该答的也答了。另一个极端是把系统提示词写成小作文,占了大半屏,结果用户一句「这次换个格式」就直接失控。这两种翻车的根子是一样的:没分清哪层定规矩、哪层下任务。

下面用几个常见场景做对照,把两层提示词的分工、冲突时的实际表现,以及一套能直接抄的四段式模板讲清楚。最后给一个排查顺序,提示词不听话时按着走,比反复改文笔有用得多。文中涉及模型能力差异的部分,建议到 模型资料库(/models) 对照当时的实际表现再下结论。

两层各管什么:一个定规矩,一个下任务

最实用的判断口诀是:换一次任务还会保留的内容,放系统层;只对本次有效的,放用户层。比如「你是客服助手,回答不超过三句,遇到退款一律引导走工单」——这条换十个用户提问都该成立,属于系统层。「帮我把下面这段用户反馈分类,按紧急程度排序」——这条只对这一次有效,属于用户层。

内容类型该放哪层换任务后是否还成立
角色身份、服务对象系统层成立
语气、长度、语言习惯系统层成立
边界与拒答规则系统层成立
本次要处理的材料用户层不成立
本次要的输出形态用户层不成立
一次性的特殊偏置用户层不成立

两边打架时听谁的:优先级怎么排

一般顺序是系统层高于用户层,用户层高于历史对话里的旧要求。但要注意「一般」两个字——这不是数学保证,不同模型、不同接口实现的遵守程度不一样。更稳的工程做法不是赌谁赢,而是压根别让两层正面冲突:系统层写底线,用户层写具体。

  • 系统层定死输出格式,用户层又要改格式时,在用户层显式写一句「本次允许覆盖系统层的格式约定」,比硬顶有效
  • 系统层塞了互相矛盾的规则(既要求简洁又要求详尽解释),模型只能随机挑一条,表现为时好时坏
  • 历史对话里的旧要求不会自动失效,用户改口后要在新一轮里明确说「之前的 X 作废」
  • 冲突排查最简单的办法:把系统层规则逐条列出来,和用户层那句话做一次肉眼比对

各家的系统角色支持和遵守表现有差异,具体到某个模型支不支持独立系统角色字段、表现如何,到 模型资料库(/models) 看对应条目,别凭印象套。

系统提示词的四段式模板

写系统提示词时按四段来,一段管一件事,改的时候也好定位。身份段定角色和服务对象;能力段划能做与不能做的边界;风格段管语气和长度;格式段定死结构和字段名;最后补一到两个输入输出样例。样例比一堆形容词管用得多,尤其是格式类要求。

  1. 写身份段一句话说清「你是什么角色、服务谁、不做什么」。验证方法:把这句话单独抽出来读,如果不依赖后面任何内容也能看懂,就算合格。
  2. 写能力段只写边界,不写恭维话。比如「不知道就说不知道,不要编造数据来源」。验证方法:自己想三个边界场景,看规则能不能覆盖。
  3. 写风格与格式段语气、长度、语言、固定结构、必须出现和禁止出现的元素各自一行。验证方法:让模型答同一个问题三次,看结构是否每次一致。
  4. 补样例段给一到两个「输入 → 输出」的完整样例,样例里包含你最容易出错的字段。验证方法:把样例里的输入原样再喂一次,看输出是否贴近样例形态。
# 身份:你是某产品的客服助手,服务已付费用户,不处理未付费咨询。
# 能力:不确定的信息直接说不知道;涉及退款只引导走工单,不给具体时效承诺。
# 风格:中文,不超过三句话,不用感叹号,不主动寒暄。
# 格式:先给结论,再给下一步动作;不输出 Markdown 表格。
# 样例:输入「登录不上」→ 输出「先确认账号是否为付费账号。是的话按重置密码流程操作。仍不行请提交工单。」

不听话时的排查顺序

提示词不生效时,别急着加形容词。按下面顺序走一遍,大多数问题在前两步就能定位:先查冲突,再查抽象度,然后测边界稳定性,最后才考虑拆短重写。

排查步骤看什么不适用的情况
查两层冲突系统层规则逐条对照用户层那句话用户层本来就是空的时候,跳过
查抽象度把形容词换成可检查的条件纯创意写作类任务,量化反而伤效果
测边界稳定性换三个不同任务,看规则是否每次都生效单次调用无多轮场景,测不出漂移
拆短重写一条规则一句话,去掉修饰语规则本身就少的场景,拆了没意义

如果你是在做接口调用或中转站接入,两层的拼接方式、系统角色字段是否被透传,会直接影响实际效果。不同中转服务的处理方式不一样,接入前建议到 中转站导航(/sites) 看对应站点的说明,再配合 速度测试工具(/tools/speed-test) 实测一轮,别只看文档描述。

系统提示词管「一直怎么说话」,用户提示词管「这一次说什么」;两层混着写,就等于没写。
下一步拿你现在正在用的那条系统提示词,按四段式模板重排一遍,再用排查顺序里的前两步过一遍,通常能砍掉一半无用字数。相关模型对系统角色的支持情况,到模型资料库对照当时的表现。

常见问题

系统提示词写多长合适?

看规则数量,不看字数。原则是每条规则都能被单独检查是否生效,写不动的抽象描述直接删。如果长度已经超过用户那几句话好几倍,通常是塞了本该写进用户层的任务细节,挪出去再试。

同一段规矩,放系统层和放用户层效果差很多吗?

结构清晰的模型上差别不大,但系统层更稳,因为它不随每轮对话被稀释。多轮场景里把规矩放用户层,聊几轮就容易忘;放系统层能一直挂着。不过规则本身写得含糊的话,放哪层都救不了。

换模型后系统提示词要不要重写?

要小改不要大改。不同模型对角色设定的敏感度、对格式要求的服从度不一样,把同一段提示词换个模型各跑一遍同一批任务,看哪几条规则失效,只调失效的那几条,别整段推倒重来。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。