system prompt(系统提示词)是什么?AI 开口前先读的那段话(2026入门)

前几天帮同事调一个总结脚本。同一个模型,同一个模型名,我这边跑出来的结果一会儿是散文一会儿是列表,他那边每次都是整齐的 JSON。对着屏幕看了半天,唯一区别是他代码最上面多了一行。

messages = [
    {"role": "system", "content": "只输出 JSON,包含 title 和 summary 两个字段。"},
]

就这一行。今天把这个叫 system prompt 的东西讲清楚。

你说的话之外,模型还先读了一段

用 ChatGPT、Kimi 这些产品聊天,你以为对话就是你说一句、它回一句。到了 API 层面,每次请求其实是一组消息。下面是 Kimi 官方文档里的示例,一字没改:

messages = [
    {"role": "system", "content": "你是 Kimi。"},
    {"role": "user", "content": "你好,我叫李雷。"}
]

role=user 是你说的话,role=assistant 是模型的回复,而 role=system 是另外一段:它不属于你们俩中间的任何一方,是产品或开发者塞进去的幕后指令。这段指令就叫 system prompt,中文叫系统提示词。

你在产品界面上见不到它,因为产品提前帮你写好了。「你是 Kimi」就是 Moonshot 给自家模型下的第一条指令。ChatGPT 的回答为什么总带着那股礼貌又啰嗦的劲,遇到危险话题为什么会绕开,很大程度上是它的 system prompt 在管着。

为什么一条开头的话,能管住整个回答

大模型没有记忆,也没有脾气,它做的事情是接续文本:看着前面所有的字,猜下一个字是什么。开头那段 system prompt 参与每一次「猜」,一直在场。

所以你说「总结一下」,它可能给散文,可能给列表,可能给三句话的版本,都正常,因为你没说。但如果 system 里写了「只输出 JSON」,后面每个字的生成都被这条要求压着,输出就稳了。

我自己用下来,有两类内容写进 system 最划算。一是身份,「你是处理退款纠纷的客服」和「你是资深 Python 工程师」,接出来的话完全是两个路数。二是格式,JSON、表格、不超过一百字,提前写进去,比在对话里反复纠正省事得多。边界也值得写:哪些事不该做、拿不准的时候要直说,提前讲比事后道歉体面。

后面聊 AI Agent 时这点会更明显,Agent 能自己干活,行为的规矩多半就写在它的 system prompt 里:AI Agent 到底是什么。

不开 API 的用户,入口换了名字

不用 API 的普通人能不能用上?能,产品把它包了起来。ChatGPT 设置里的「自定义指令」就是干这个的,你填的内容会被拼进每次对话,所以同一账号换台电脑再问,它还记得你的偏好。各家产品基本都有类似的入口,名字不一样,位置也常换。

模型本身没变,变的是每次请求开头那段固定文字。

API 用户:三件事比模板重要

第一,system 放第一条,而且每次请求都要带上。Kimi 官方文档的原话是,API 是无状态的,本身没有记忆功能,多轮对话要手动把历史消息随每次请求一起发。system 也一样,这个会话里发过,下个会话里它就不在了。

第二,system 保持不动,才吃得到缓存价。上下文缓存命中靠相同前缀,system 排在最前面,改一个字,后面的全要重算。我测试时改过 system 里的一个标点,那个请求的缓存命中直接归零。省钱的细节之前写过:同样的提示词,别人的 API 账单便宜 50 倍。

第三,别写太长。system 每次请求都算 token,一千字的人设小作文,一个月下来是真金白银。token 怎么算的看这篇:Token 和上下文窗口是什么。

顺带一个冷知识:Kimi K3 支持在 messages 的任意位置插一条不带 content 的 system 消息,用来动态加载工具,这是它文档里写的特性。普通场景用不上,知道有这回事就行。

怎么写一条够用的 system prompt

不用背模板,一句话的结构:干什么的,输出什么格式,有什么忌讳。

举个例子:「你是测试工程师的助手。回答用要点列表,代码用 Python。拿不准的直接说拿不准,别编。」

再给一个带空值规则的版本,处理数据时特别管用:「字段缺失就输出 null,别猜。」模型最爱干的事就是把空缺补成一个看起来合理的值,这一条能省掉不少返工。

写完先别急着定稿。拿十个你真实会用到的输入跑一遍,看输出稳不稳,比对着模板空琢磨有用。我那条 JSON 的 system,就是跑了两轮才把「字段缺失输出 null」补上的。

这和我之前写的三条铁律是一回事,说用途、定格式、留出口。system prompt 只是把这三句从每次对话说一遍,变成写在开头固定生效:AI 老说一堆废话?三条提示词铁律。想要现成的完整模板,站里也有一篇按角色整理的:5 个系统提示词模板。

两个常见疑问

对话说到一半,我还能临时改要求吗?能,但位置有讲究。把新要求作为 user 消息发在中间,模型会照做,不过它的身份设定还是开头那条 system;前面聊过,对话中追加的指令只进不改,system 始终是最底下那层。

还有人想让 AI 复述它的 system prompt,偷看产品的幕后指令。好玩可以试试,别全信,模型会编,编得还挺像。真想研究,有些产品把默认 system prompt 公开在文档里,那才是原文。

下次看到别人家的 AI 回答又快又稳,先别急着怀疑模型不行,很可能人家开头多写了一行 system。这行字是对话里性价比最高的部分。

你可以现在就试:把每天重复交代的话挑出来,写进自定义指令或者代码里的 system 字段,观察一周输出稳不稳。我试过之后就没改回去。

发表评论