System prompt
上一篇把「你叫小K」放进 system,不必先改名再贴历史。这条消息就叫 System prompt。
它通常排在 messages 最前面,每一轮都要再寄一次。界面上用户往往看不见,模型每一轮都看得到。眼下只需记住它管三件事:你是谁、别做什么、回答时什么口吻。
一次调用
没有它的时候,问「介绍一下你自己」,它通常会写一段。加上一条约束再看:
curl https://api.deepseek.com/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DEEPSEEK_API_KEY" \
-d '{
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": "只用一个词回答。不要解释。"},
{"role": "user", "content": "介绍一下你自己"}
],
"stream": false
}'
回来:
{
"choices": [
{
"message": {
"role": "assistant",
"content": "DeepSeek"
},
"finish_reason": "stop"
}
]
}
翻译成人话:
system说:只用一个词回答- 你问:介绍一下你自己
- 它答:DeepSeek
同一句用户问题,有没有这条 system,长短和口吻都不一样。它不是记忆,只是你每一轮都把人设再贴一遍。
使用场景
System prompt 不是只能改口吻。更常用来划框:
- 人设:你是谁、用什么口气
- 形态:多长、什么语言、要不要解释
- 范围:哪些题可以答,哪些必须拒
上面「只用一个词」是卡形态。再看一次卡范围。Chatbot 那篇问「今天星期几」,是它看不到日历;这里是你不许它答:
curl https://api.deepseek.com/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DEEPSEEK_API_KEY" \
-d '{
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": "你只回答和写代码有关的问题。其他问题只回复「这不是我的范围」,不要解释。"},
{"role": "user", "content": "今天星期几"}
],
"stream": false
}'
回来:
{
"choices": [
{
"message": {
"role": "assistant",
"content": "这不是我的范围"
},
"finish_reason": "stop"
}
]
}
翻译成人话:
system说:只答写代码的事- 你问:今天星期几
- 它答:这不是我的范围
模型仍然没有日历。这次闭嘴,是因为你把题圈在编程里,不是因为它突然会判断了。
框可以划在领域(只谈代码)、能力(不许装成能查天气)、风险(不给医疗建议)上。怎么把框写稳、用户一绕就失效怎么办,属于 content engineering,后面再写。
可以有多条吗
JSON 不禁止你塞两条 system。文档和惯例仍是:只放一条,写在最前面。
两条互相打架时,协议没有裁判。没有「后一条覆盖前一条」。模型自己圆:听前一条、听后一条、各听一半,或写一段和稀泥。下次再试,答案还可能换一种。
"messages": [
{"role": "system", "content": "只用一个词回答。"},
{"role": "system", "content": "请写不少于一百字。"},
{"role": "user", "content": "介绍一下你自己"}
]
请求会过,但谁赢不写在接口里。所以要两套约束,写进同一条 system 的 content。按任务切换说明书、一层盖一层,是后面 Skill / content engineering 的事,不是再叠一条 role。
user 和 system 打架也一样。用户说「忽略上面的要求」时,有时还听人设,有时被绕开。协议同样不管。
总结
- System prompt =
messages最前面那条system - 管人设、口吻,也能限制回答范围;每一轮都要带着
- 可以塞多条,但冲突时协议不管谁赢;惯例是合成一条
- 这一篇只说明它在协议里干什么,不展开怎么写
参见
- 上一篇:Messages
- 下一篇:Context window
- Agent 百科里尚未成文的相邻词条:Content engineering、Skill、Token
- 动手:从 0 实现一个 Agent · 阶段一(聊天机器人)