很多人把规矩写进用户那句话里,聊两轮就跑偏;也有人系统提示词写了一屏,模型照样不听话。问题通常不在文笔,而在没分清这两层谁定规矩、谁下指令。这篇用几个对照实例讲清分工与优先级,给出系统提示词的写法模板和自检清单,写完能直接拿去测。
很多人写提示词的习惯是:把要求全塞进对话框那一句里。前两轮还行,聊到第四轮就发现模型开始飘——语气变了、格式忘了、不该答的也答了。另一个极端是把系统提示词写成小作文,占了大半屏,结果用户一句「这次换个格式」就直接失控。这两种翻车的根子是一样的:没分清哪层定规矩、哪层下任务。
下面用几个常见场景做对照,把两层提示词的分工、冲突时的实际表现,以及一套能直接抄的四段式模板讲清楚。最后给一个排查顺序,提示词不听话时按着走,比反复改文笔有用得多。文中涉及模型能力差异的部分,建议到 模型资料库(/models) 对照当时的实际表现再下结论。
两层各管什么:一个定规矩,一个下任务
最实用的判断口诀是:换一次任务还会保留的内容,放系统层;只对本次有效的,放用户层。比如「你是客服助手,回答不超过三句,遇到退款一律引导走工单」——这条换十个用户提问都该成立,属于系统层。「帮我把下面这段用户反馈分类,按紧急程度排序」——这条只对这一次有效,属于用户层。
| 内容类型 | 该放哪层 | 换任务后是否还成立 |
|---|---|---|
| 角色身份、服务对象 | 系统层 | 成立 |
| 语气、长度、语言习惯 | 系统层 | 成立 |
| 边界与拒答规则 | 系统层 | 成立 |
| 本次要处理的材料 | 用户层 | 不成立 |
| 本次要的输出形态 | 用户层 | 不成立 |
| 一次性的特殊偏置 | 用户层 | 不成立 |
两边打架时听谁的:优先级怎么排
一般顺序是系统层高于用户层,用户层高于历史对话里的旧要求。但要注意「一般」两个字——这不是数学保证,不同模型、不同接口实现的遵守程度不一样。更稳的工程做法不是赌谁赢,而是压根别让两层正面冲突:系统层写底线,用户层写具体。
- 系统层定死输出格式,用户层又要改格式时,在用户层显式写一句「本次允许覆盖系统层的格式约定」,比硬顶有效
- 系统层塞了互相矛盾的规则(既要求简洁又要求详尽解释),模型只能随机挑一条,表现为时好时坏
- 历史对话里的旧要求不会自动失效,用户改口后要在新一轮里明确说「之前的 X 作废」
- 冲突排查最简单的办法:把系统层规则逐条列出来,和用户层那句话做一次肉眼比对
各家的系统角色支持和遵守表现有差异,具体到某个模型支不支持独立系统角色字段、表现如何,到 模型资料库(/models) 看对应条目,别凭印象套。
系统提示词的四段式模板
写系统提示词时按四段来,一段管一件事,改的时候也好定位。身份段定角色和服务对象;能力段划能做与不能做的边界;风格段管语气和长度;格式段定死结构和字段名;最后补一到两个输入输出样例。样例比一堆形容词管用得多,尤其是格式类要求。
- 写身份段一句话说清「你是什么角色、服务谁、不做什么」。验证方法:把这句话单独抽出来读,如果不依赖后面任何内容也能看懂,就算合格。
- 写能力段只写边界,不写恭维话。比如「不知道就说不知道,不要编造数据来源」。验证方法:自己想三个边界场景,看规则能不能覆盖。
- 写风格与格式段语气、长度、语言、固定结构、必须出现和禁止出现的元素各自一行。验证方法:让模型答同一个问题三次,看结构是否每次一致。
- 补样例段给一到两个「输入 → 输出」的完整样例,样例里包含你最容易出错的字段。验证方法:把样例里的输入原样再喂一次,看输出是否贴近样例形态。
# 身份:你是某产品的客服助手,服务已付费用户,不处理未付费咨询。
# 能力:不确定的信息直接说不知道;涉及退款只引导走工单,不给具体时效承诺。
# 风格:中文,不超过三句话,不用感叹号,不主动寒暄。
# 格式:先给结论,再给下一步动作;不输出 Markdown 表格。
# 样例:输入「登录不上」→ 输出「先确认账号是否为付费账号。是的话按重置密码流程操作。仍不行请提交工单。」不听话时的排查顺序
提示词不生效时,别急着加形容词。按下面顺序走一遍,大多数问题在前两步就能定位:先查冲突,再查抽象度,然后测边界稳定性,最后才考虑拆短重写。
| 排查步骤 | 看什么 | 不适用的情况 |
|---|---|---|
| 查两层冲突 | 系统层规则逐条对照用户层那句话 | 用户层本来就是空的时候,跳过 |
| 查抽象度 | 把形容词换成可检查的条件 | 纯创意写作类任务,量化反而伤效果 |
| 测边界稳定性 | 换三个不同任务,看规则是否每次都生效 | 单次调用无多轮场景,测不出漂移 |
| 拆短重写 | 一条规则一句话,去掉修饰语 | 规则本身就少的场景,拆了没意义 |
如果你是在做接口调用或中转站接入,两层的拼接方式、系统角色字段是否被透传,会直接影响实际效果。不同中转服务的处理方式不一样,接入前建议到 中转站导航(/sites) 看对应站点的说明,再配合 速度测试工具(/tools/speed-test) 实测一轮,别只看文档描述。
系统提示词管「一直怎么说话」,用户提示词管「这一次说什么」;两层混着写,就等于没写。下一步拿你现在正在用的那条系统提示词,按四段式模板重排一遍,再用排查顺序里的前两步过一遍,通常能砍掉一半无用字数。相关模型对系统角色的支持情况,到模型资料库对照当时的表现。→
常见问题
系统提示词写多长合适?
看规则数量,不看字数。原则是每条规则都能被单独检查是否生效,写不动的抽象描述直接删。如果长度已经超过用户那几句话好几倍,通常是塞了本该写进用户层的任务细节,挪出去再试。
同一段规矩,放系统层和放用户层效果差很多吗?
结构清晰的模型上差别不大,但系统层更稳,因为它不随每轮对话被稀释。多轮场景里把规矩放用户层,聊几轮就容易忘;放系统层能一直挂着。不过规则本身写得含糊的话,放哪层都救不了。
换模型后系统提示词要不要重写?
要小改不要大改。不同模型对角色设定的敏感度、对格式要求的服从度不一样,把同一段提示词换个模型各跑一遍同一批任务,看哪几条规则失效,只调失效的那几条,别整段推倒重来。