07 · System Prompt 与多轮对话
System Prompt(系统提示)是你在对话开始前给它设定的身份和行为规范,整段对话里一直生效。用带新人打比方:Prompt 是每次派活时交代的话,System Prompt 是入职第一天的约法三章。
两者的区别
| Prompt(用户消息) | System Prompt(系统提示) | |
|---|---|---|
| 什么时候写 | 每次派活 | 对话开始前设一次 |
| 生效范围 | 这一次 | 整段对话的每一轮 |
| 装什么 | 这次的任务、材料、具体要求 | 身份、语气、通用规矩、不许做的事 |
| 优先级 | 一般 | 通常更高,冲突时它更倾向听 System |
| 在带新人里 | "把这段记录整理成纪要" | "你是我们项目组的助理,对外文档一律用敬语,数字拿不准就标待确认" |
一句话:每次都要重说的东西,就该搬到 System Prompt 里去。
在哪儿写
不同产品叫法不一样,位置也不一样。这是通用的对照:
| 你用的东西 | System Prompt 在哪 |
|---|---|
| 网页聊天框(ChatGPT / Claude / 豆包 / DeepSeek…) | 设置里的"自定义指令""个性化""系统提示"之类;或者建一个「智能体 / GPTs / Project」,把规矩写在里面 |
| API 调用 | 消息数组里 role 为 system 的那一条 |
| 命令行 / IDE 里的编码工具 | 项目根目录的规则文件(各家名字不同,如 CLAUDE.md、AGENTS.md、.cursorrules) |
| 企业内部平台 | 建"应用"或"助手"时的那个大文本框 |
没找到设置入口怎么办
退而求其次:每个新对话的第一条消息,就发那段规矩。效果接近,只是每次要粘一遍。这也是很多人手机里存一段"开场白"的原因。
一段能用的 System Prompt 长什么样
你是我所在项目组的助理,服务对象是产品和项目经理。
通用规矩:
1. 输出默认用简体中文,条目化,能用表格就用表格。
2. 对外文档语气正式;内部沟通可以直白,不要客套话。
3. 任何数字、日期、人名,只能来自我给的材料。材料里没有的,
标注「待确认」,不要根据常识补全。
4. 你不确定的时候,明确说"我不确定",并指出需要我补充什么信息,
不要给一个看起来完整的答案。
5. 不要在回答开头复述我的问题,直接给结果。注意第 3、4 条:那是 幻觉 的解药,写进 System Prompt 之后每一轮都自动生效,不用你在每条消息里重复。
第 5 条是效率条款。这类"不要做什么"的约束在 System Prompt 里性价比最高,因为它们跟具体任务无关,但你每次都嫌烦。
多轮对话到底是怎么回事
这一节的信息最容易让人意外,值得单独说清楚。
模型没有记忆。 你在对话框里聊到第 10 轮的时候,实际发生的事是:
第 10 次请求发出去的内容 =
System Prompt
+ 第 1 轮你说的 + 第 1 轮它答的
+ 第 2 轮你说的 + 第 2 轮它答的
+ …
+ 第 9 轮你说的 + 第 9 轮它答的
+ 你刚敲的这一条整包重发。 它不是"接着上次继续想",是每次从头读一遍。
这一条解释了你遇到过的所有怪现象:
- 越聊越慢、越聊越贵 —— 每轮的输入都比上一轮长。
- 聊久了忘掉开头的要求 —— 最早的内容被挤出上下文窗口了。
- 纠正过的错误又犯 —— 如果那次纠正已经被挤出去,等于没说过。
- 中途改主意特别难 —— 你之前说的话还在包里,一直在影响它。
- 换个新对话它就"失忆" —— 因为新对话里那一包是空的。
通用的规矩往 System Prompt 里搬,一次性解决"每次都要重说"。
一个任务一个对话。 别在一个对话里连着干三件不相干的事。
长对话里定期重申关键约束。 一句"再确认一次:不要编造,拿不准标待确认"就够。
它跑偏了就重开。 把已经拿到的好结果复制出来,作为材料贴进新对话——比在原对话里反复掰扯干净得多。
别依赖"记忆"功能。 有些产品会自动记住你的偏好,本质是替你把内容重新贴一遍。方便,但你不知道它到底记了什么、什么时候会丢。重要的规矩自己写明。
顺手认识两个参数
如果你在用 API 或者带高级设置的工具,会看到这两个:
Temperature —— 挑下一个 Token 时的随机程度。低(0 ~ 0.3)更稳定、更保守,适合要求格式一致的活;高(0.8 以上)更发散,适合起名、头脑风暴。要"每次跑出来都一样",就调到最低。
max_tokens —— 这次输出的长度上限。输出到一半突然断掉,八成是这个设小了,不是模型不会写。
下一步
08 · 上手:把一坨乱记录变成能派活的纪要 —— 前面七章的东西,现在一次性用出来。