进阶 13 分钟Prompting

掌握系统 prompts

直接回答

系统提示是角色为「system」的消息,用于在您提出第一个问题之前,设定 LLM 的身份、任务、规则、风格和输出格式。撰写时请分为五个简短部分,使用命令式且可验证的指令,再用几个陷阱问题进行测试。它会占用上下文空间,也不是保险箱:请勿在其中放入任何秘密信息。

系统提示是指在首次提问前向模型提供的指令。写得好,能让本地大模型保持一致且可预测;写得不好,则会浪费上下文并自相矛盾。您将学会如何构建系统提示,并将其部署到 Ollama、LM Studio 或 API 中,系统性地进行测试,并了解其局限性,尤其是隐私方面。

作者: Mohamed Meguedmi·更新于 2026-09-30·已在 Windows、macOS 和 Linux 上测试

#什么是系统提示(system prompt),该如何编写?

系统提示(system prompt)是置于对话开头、角色为「system」的消息:它在您提出第一个问题之前,就设定了模型的身份、任务、规则、风格和回答格式。模型在每一轮都会重新读取它,就像重新读取对话历史一样。撰写时,请保留五个简短模块(身份、任务、硬性规则、风格、输出格式),用命令式表达可验证的指令,然后用几个容易出错的问题进行测试。系统提示可以引导模型行为,但既不是安全屏障,也不是存放秘密的保险箱,而且会占用本地模型上下文窗口的一部分。本指南逐一详解这些要点,并提供可直接粘贴到 Ollama、LM Studio 或兼容 OpenAI 的 API 中的示例。

大语言模型通常接收三类消息:system(长期有效的设定)、user(您输入的内容)和 assistant(模型此前的回复)。聊天客户端在每次请求时都会把整个对话重新发送给模型,包括 system 消息。这让人感觉模型在整个会话中保持着稳定的“个性”。

i
类比
系统提示之于大语言模型,就像岗位说明书之于临时工。没有系统提示,模型会尽力而为;有了系统提示,模型就知道人们对它有什么期望、禁止它做什么,以及应以何种形式提交成果。

模型提供商也描述了同样的用法。Anthropic 的文档解释说,在系统提示中设定角色,可以让模型的行为和语气更有针对性,而且只需一句话就能带来变化。这一原则同样适用于本地模型:长期有效的指令放在 system 消息中,当前的问题放在 user 消息中。

#一个好的系统提示实际上能带来什么改变

本地 AI 套件

只需 1 小时,即可在您的电脑上拥有专属的免费 ChatGPT — LM Studio、Ollama、Open WebUI、您的文档,无需云端。

  • 在线空间,终身可用
  • PDF + 文件
  • 30 天内退款
语气一致性
如果助手在第一条消息中用“你”,第二条消息却改用“您”,就说明系统提示缺失或过于模糊。一次性明确称呼和语体,可以避免这种偏移。
更稳定的约束条件
禁止事项(“不使用表情符号”)和必须遵守的要求(“引用来源”)写入 system 提示词时,比在使用过程中临时反复强调更容易得到遵守。不过,这并不能保证模型一定遵守:模型越小,就越需要检查。
减少重复
如果您每次提问都输入“用正式法语回答”,只需将这条要求在系统提示词中设置一次。这样既不容易忘记,也能少打些字。
任务执行范围
“只处理法国劳动法相关内容”能减少跑题,但始终无法保证完全杜绝跑题。

系统提示不会增加模型的知识,也不会替代对话中提供的文档或检索增强生成(RAG)。如果模型需要依据您的合同,是文档检索提供了事实依据;系统提示仅说明如何使用和引用这些内容。

#成本体现在上下文窗口的空间占用

系统提示词并非免费:其 token 会与历史记录、您的文档以及即将生成的回复一起占用上下文窗口。在本地设备上,这个窗口往往比人们想象的要小。Ollama 文档中的“Context length”页面指出,在显存低于 24 GiB 时,默认窗口约为 4 000 tokens(“4k”);在 24 至 48 GiB 之间为 32 000 tokens;超过 48 GiB 则为 256 000 tokens。因此,一个 400 tokens 的提示词在首次交互之前,就已占用了 4 096 tokens 的近 10%。

计算很简单:可用上下文窗口 = 总上下文窗口 − 系统提示词的 token 数 − 预期回复的 token 数。窗口为 4,096 个 token、系统提示词占 400 个 token、回复占 800 个 token 时,还剩 2,896 个 token 可用于历史记录和文档。随着对话变长,窗口会逐渐填满,较早的内容可能无法再容纳:这也是任务说明应信息密集、而非篇幅冗长的又一个原因。

还有第二种效应,已有研究记载:在《Lost in the Middle》(Liu 等,2023)这项研究中,当有用信息位于上下文的开头或结尾时,模型表现往往更好;当信息位于中间时,表现则会下降,即使是宣称支持长上下文的模型也如此。实际建议是:将最重要的规则放在系统提示词的开头;如果发现模型有所遗漏,就在最后一行再次提醒它遵守关键约束。

→
必要时增大窗口
如果您的系统提示词超过几百个 token,或您附加了文档,请扩大上下文窗口,而不要盲目缩短内容:可以在 Modelfile 中设置 PARAMETER num_ctx,或在启动服务器时设置 OLLAMA_CONTEXT_LENGTH 变量。更大的上下文窗口会消耗更多显存;上下文窗口指南详细说明了其中的权衡。

#可靠系统提示词的五部分结构

一个良好的系统提示可由五个短片段构成。无需写成小说:每增加一句都会消耗上下文并提升指令冲突的风险。表格总结了每个片段的内容及最常见的错误。

系统提示的五个组成部分
模块它所回答的问题示例常见错误
身份标识模型扮演什么角色?「你是Lex,一名专注于法国劳动法的法律助理。」一个听起来很厉害的身份(“世界级专家”),却没有明确工作范围
任务它应为谁服务,承担什么任务?“你帮助人力资源总监理解其应履行的义务,并撰写信函。”任务范围过广:‘提供所有方面的帮助’
严格的规则它始终会做什么,又绝不会做什么?“引用《劳动法典》中相关的条文。”十条相同优先级的规则,其中两条相互矛盾
风格它如何表达?“短句,通俗易懂的词汇。”使用模糊的形容词(如“专业”),却不给出示例
输出格式回答将以何种形式呈现?「默认:一段文本和参考文献。」格式未明确说明,因此每次回复可能不同

以下是整合后的同一个提示词。每条规则都采用命令式表述,且可以验证(是否引用了文章),对超出范围时应采取的行为也有明确说明。

完整系统提示
Tu es Lex, assistant juridique spécialisé en droit
du travail français (version 2026).

MISSION
Tu aides un DRH à comprendre ses obligations et à
rédiger des courriers RH conformes.

RÈGLES
- Ne jamais donner d'avis juridique formel.
- Toujours citer l'article du Code du travail concerné,
  par ex. "L.1232-2".
- Si la question sort du droit du travail, répondre :
  "Hors de mon périmètre. Je ne traite que le droit
  du travail français."

STYLE
- Phrases courtes, vocabulaire accessible.
- Pas d'anglicisme si un équivalent existe.
- Ton professionnel mais direct.

FORMAT
- Réponse par défaut : 1 paragraphe + références.
- Sur demande : tableau, courrier-type, checklist.

该提示词用作结构模板。本地模型可能引用不存在的文章:请由人工核实参考文献,并参阅幻觉相关指南。

#编写模型能够遵循的指令

直接使用祈使句
“做X。”和“不要做Y。”比“如果可能,尝试……”更明确,后者让模型可以选择连尝试都不做。
优先采用正向指令
说明应该做什么(“用一句话回答”),比列出一长串禁令更好;禁令应留给真正需要设置防护约束的地方。
实例胜于描述
如果需要特定格式,请提供一个两行的示范回答,而不是用三句话解释。

#实际使用 Ollama:/set system 和 Modelfile

Ollama 提供三种方式定义系统提示,取决于所需的有效期。在交互会话中,/set system 命令将为当前对话设置提示信息,并出现在客户端可用命令列表中。该提示在会话结束时消失。

交互式会话
>>> /set system """
Tu es Lex, assistant juridique spécialisé en droit
du travail français...
"""

要持久保存系统提示词,请创建一个Modelfile:这样会得到一个拥有独立名称的衍生模型。Ollama文档说明,SYSTEM指令定义了要插入模型模板的系统消息。「模板」一词很关键:如果模型模板没有为系统消息预留位置,SYSTEM指令就不会生效。如果出现出乎意料的行为,请与原始Modelfile进行比较。

Modelfile
FROM mistral

PARAMETER temperature 0.3
PARAMETER num_ctx 8192

SYSTEM """
Tu es Lex, assistant juridique...
"""
终端
ollama create lex -f ./Modelfile
ollama run lex

第三种方式是通过 API:发往 /api/generate 的请求体接受一个 system 字段,用它替换 Modelfile 中定义的系统提示词;/api/chat 则以消息数组的形式接收历史记录,每条消息都包含角色和内容。Modelfile 指南详细介绍了其他指令。

#LM Studio 实操:System Prompt 字段和预设

在聊天选项卡中,配置面板里有一个 System Prompt 字段。为避免重复输入系统提示词,LM Studio 提供了预设功能。文档将预设描述为一种将系统提示词和其他参数组合成可复用配置的方法,让您可以在不同对话中重复使用该配置。

→
预设库
Advanced Configuration 面板中的每个参数都可以保存到一个有名称的预设中:不仅包括系统提示词,还包括温度、top-p 或最大 token 数。为每种用途创建一个预设(“法语校对员”、“代码助手”、“法律专家”),即可一键切换角色。预设也可以从文件或 URL 导入。

#实践:使用兼容 OpenAI 的 API

Ollama、LM Studio、vLLM 和 llama-server 提供兼容 OpenAI 的 API。消息数组中的第一条消息使用 system 角色,用于设定任务说明。Ollama 的文档指出,客户端要求提供一个 API 密钥值,但服务器会忽略它:本地使用时,任意字符串都可以。

Python
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama",  # ignoré
)

resp = client.chat.completions.create(
    model="mistral",
    messages=[
        {"role": "system", "content": "Tu es Lex..."},
        {"role": "user",   "content": "Peut-on rompre une période d'essai ?"},
    ],
)

print(resp.choices[0].message.content)

一个设计要点:API 没有记忆。每次调用时,您的代码都要重新发送 system 消息,然后发送完整的历史记录。如果在某次调用中省略它,模型就会在没有这些预先说明的情况下作答:请保存消息数组,并将 system 消息保留在索引 0 的位置。

#三个即用型系统提示

#法语校对

系统提示
Tu es un correcteur de français académique.
Règle unique : renvoie UNIQUEMENT le texte corrigé,
sans commentaire, sans liste des changements.
Corrige : orthographe, grammaire, ponctuation, barbarismes.
Ne reformule jamais. Ne change pas le style de l'auteur.

#结构化提取器

系统提示
Tu extrais des informations structurées depuis du texte libre.
Sortie STRICTE : JSON valide, rien d'autre (pas de ```json, pas de texte).
Si une information est absente, renvoie null.
Ne devine jamais.

在生产环境中进行信息提取时,不要只依赖系统提示词:Ollama 的结构化输出可以强制回答遵循指定的 JSON 模式(JSON Schema),从而避免生成格式损坏的 JSON。有关函数调用和 JSON 输出的指南介绍了具体配置方法。

#资深代码助手

系统提示
Tu es un ingénieur logiciel senior.
Pour toute réponse de code :
1. Dis en une phrase ce que fait le code.
2. Donne le code dans un bloc unique.
3. Liste 1 à 3 cas limites à surveiller.
Tu ne mets JAMAIS de commentaire à l'intérieur du code,
sauf si un piège non-évident le justifie.

#不再盲目试错:测试并修正系统提示词

系统提示应通过受控测试来改进,而不是不断追加内容。没有方法,就会不断堆叠规则,直到文本变得冗长、相互矛盾且无法调试。下面介绍一个简单流程,无需任何专门工具。

  1. 01
    制定五个测试问题
    编写五条测试输入:两个正常案例、一个超出范围的问题、一个要求采用不常见格式的请求,以及一次试图让模型偏离其角色的尝试(“忘记你的指令”)。将它们保存到一个文件中。
  2. 02
    设定条件
    使用相同的模型、相同的量化方式和较低的温度(0.2 至 0.3),以便在相同条件下比较提示词的不同版本。
  3. 03
    每次只修改一项内容
    修改一条规则,重新用那五个问题进行测试,并记录变化。如果同时修改两条规则,就无法判断是哪一条改善或恶化了模型的行为。
  4. 04
    先考虑删减,再考虑添加
    当规则被忽略时,应将其重新表述为更简洁的形式,置于开头位置,或删除与其矛盾的规则。添加文本是最后的手段。
  5. 05
    对提示词进行版本管理
    将每个版本保存在带日期的文本文件中,或保存在纳入版本控制的 Modelfile 中,并用一行文字说明改动。这样就能回退到之前的版本。

#需避免的陷阱

常见错误及修复方案
陷阱问题表现修复措施
提示过长提示词末尾的内容未被充分遵循,可用上下文窗口被挤占精简内容,将要点放在开头,必要时调高 num_ctx。
指令冲突‘简洁’与‘提供大量示例’:行为不一致优先级:发生冲突时,以规则1为准
表达犹豫“如果可以,试着……”:指令时而得到执行,时而没有直接指令:「执行X」
语言未明确视模型而定,回复会使用提示词或问题所用的语言写入「始终用法语回答」,并用法语编写提示词
system 消息位置被忽略模型未应用 Modelfile 中的 SYSTEM 指令确认模型模板支持 system 消息
提示词中的机密信息用户通过提问获取提示内容不得包含任何机密信息

#系统提示词并非保险箱

OWASP 关于系统提示词泄露风险的建议很明确:系统提示词不应被视为秘密,也不应被用作安全控制措施,更不应包含登录凭据或连接字符串。落实到本地部署中:如果需要访问控制(用户各自的数据、敏感操作),就应在您的应用程序中实现,而不是靠提示词中的一句话。关于提示注入的指南说明了为什么本地模型也无法免受此类攻击。

FAQ
什么是系统提示?+
这是放在与 LLM 对话开头的角色为「system」的消息。它定义模型的身份、任务、规则、风格和回答格式。每轮对话中,它都保留在上下文里,从而使模型在整个会话期间保持稳定的行为,无需您反复说明要求。
本地系统提示的最佳长度是多少?+
在涵盖您的规则的前提下,越短越好:简单场景只需几行,业务助手则需要一两百个词。系统提示占用的每个 token 都会减少历史记录的可用空间,尤其是在显存不足 24 GiB、Ollama 默认上下文窗口约为 4,000 tokens 的情况下。请将关键内容放在开头。
如何在 Ollama 中设置永久系统提示?+
创建一个 Modelfile,其中包含一行 FROM 和一条含有您的文本的 SYSTEM 指令,然后用所需的模型名称执行 ollama create,再用同一名称执行 ollama run。这样,提示词就会包含在衍生模型中。而 /set system 命令仅对当前交互会话有效。
系统提示能否阻止模型泄露信息?+
无法可靠地做到。OWASP 提醒,系统提示(system prompt)不应被视为秘密,也不应充当安全控制措施。执意尝试的用户可能诱使模型披露系统提示,或使其偏离指令。请将访问控制和敏感数据放在您的应用程序中,绝不要放在提示文本里。
系统提示应使用法语还是英语编写?+
用预期回答所使用的语言编写,并添加明确的指令,例如“始终用法语回答”。有些模型会用提示词的语言回答,而不是问题的语言。先在您实际使用的模型上,用每种语言分别测试两三个问题,再作普遍判断。
为什么我的模型忽略了我的系统提示?+
首先确认提示词已正确发送(system 角色位于第一位,或在 Modelfile 中使用 SYSTEM),并确认模型模板支持 system 消息。然后缩短提示词,删除相互矛盾的指令,改用祈使句,并以较低的温度参数进行测试。非常小的模型对复杂指令的遵循能力较弱。
这份指南对您有帮助吗?

有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。