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": "介绍一下你自己"}
]

请求会过,但谁赢不写在接口里。所以要两套约束,写进同一条 systemcontent。按任务切换说明书、一层盖一层,是后面 Skill / content engineering 的事,不是再叠一条 role

usersystem 打架也一样。用户说「忽略上面的要求」时,有时还听人设,有时被绕开。协议同样不管。

总结

  • System prompt = messages 最前面那条 system
  • 管人设、口吻,也能限制回答范围;每一轮都要带着
  • 可以塞多条,但冲突时协议不管谁赢;惯例是合成一条
  • 这一篇只说明它在协议里干什么,不展开怎么写

参见