Mindket

提示词模板:固定部分、具名变量,以及放进版本管理

黑色横幅,标题是“高级提示词”,下面是“示例、推理、提示链与模板”。

提示词模板就是一条提示词,其中固定的部分只写一次,会变化的值各有一个具名空位,比如 {{QUESTION}} 或一个函数参数。每个填进去的值都用 XML 标签包起来,让模型分清哪是数据、哪是指令。固定部分放在最前面,提示词缓存才能复用它。模板和代码放在一起,纳入版本管理。

本节内容

  • 不变的指令只写一次,每个会变的值都起一个名字。
  • 用户输入的内容一律圈起来,别让它被当成指令。
  • 按“永远不变”到“每次都变”的顺序排列各行。
  • 像审代码一样审提示词的改动,上线前先跑一遍测试。
全部课程
本页目录
  1. 开始之前
  2. 填好模板,再把变量圈起来
  3. 读一个来自 Anthropic 提示词工程师的示例模板
  4. 固定部分放最前面,方便提示词缓存
  5. 把模板放进代码,纳入版本管理
  6. OpenAI Developers 谈已保存的提示词,Alex Albert 谈缓存
  7. 常见错误
  8. 自己试一试
  9. 下一门课:推理模型
  10. 自测一下
  11. 常见问题
  12. 资料来源

开始之前

挑一条你已经发过不止一次、每次只改几个词的提示词:给客户的回复、会议纪要、合并请求的审查意见,哪一种都行。学完这一课,它就会变成一个模板,也就是只写一次的固定指令、每个可变值各有一个具名空位,并且作为一个文件存在你的代码仓库里。

示例用 Python 3,第一个示例只是拼出一段字符串。大多数模板的固定部分最后都会放进系统提示词,第一门课讲过系统提示词。上一课里的提示链,其实已经用上了只有一个空位的模板。

填好模板,再把变量圈起来

Anthropic 的提示词工程教程用普通的 Python f-string 来做模板,见第 4 章“分开数据和指令”。固定的骨架只写一次,每个变量在提示词发给 Claude 之前填进去。它的第一个例子只有一个空位,就是放在指令末尾的动物名称。

第二个例子演示了会出什么问题。模板先写“Yo Claude.”,紧跟着就贴进一封邮件。邮件填进去以后,没有任何标记说明它从哪里开始。教程自己运行时,Claude 把“Yo Claude”当成了邮件的一部分,改写出来的邮件开头是“Dear Claude”。把这个值放进 XML 标签之后,问题就解决了,别的什么都没改。

# Variable content
EMAIL = "Show up at 6am tomorrow because I'm the CEO and I say so."

# Prompt template with a placeholder for the variable content
PROMPT = f"Yo Claude. {EMAIL} <----- Make this email more polite but don't change anything else about it."

# The same template with the variable wrapped in XML tags
PROMPT = f"Yo Claude. <email>{EMAIL}</email> <----- Make this email more polite but don't change anything else about it."
  1. 按装进去的内容给每个空位起名。教程说 ANIMAL 也可以叫 CREATURE 或者 A,但名字具体一些,模板在填值之前也看得懂。
  2. 用 f-string 或 format() 把值填进去。一个模板想放多少个变量都可以。
  3. 每个值都用以它命名的 XML 标签包起来,比如 email 或 question,让模型看清数据从哪里开始、到哪里结束。
  4. 发送之前先把完整的提示词打印出来,教程的每个单元格都是这么做的。漏填的值或多出来的字符,在这里最先暴露。

读一个来自 Anthropic 提示词工程师的示例模板

在 2024 年 2 月的一篇文章里,Anthropic 讲述了它的一位提示词工程师和一家财富 500 强公司的领域专家的合作。他们做的是一个运行在 Claude Instant 上、面向客户的聊天助手。文章说,这项工作让 Claude 的准确率提高了 20%。为了演示这些技巧,文章还给出了一条税务分析师的示例提示词,下面的模板就是它。模板的空位用双大括号表示,每个空位都放在一个 XML 标签里。

从上往下读,顺序本身就告诉你每一部分多久变一次。角色和指令永远不变。税法条文和示例随话题变化。用户的问题每次调用都不同,所以放在靠后的位置,后面只跟着固定的作答要求。原文还带着当年 Human: 和 Assistant: 的轮次标记,下面的版本把它们去掉了。

You are an expert AI tax analyst. You help users understand the details of the tax code.
Here is the relevant section of the tax code.
<tax_code>
{{TAX_CODE}}
</tax_code>
Here are some examples of questions and answers about this section of the tax code:
<examples>
<example>
<question>
{{EXAMPLE QUESTION 1}}
</question>
<answer>
{{EXAMPLE ANSWER 1}}
</answer>
</example>
...
</examples>
Now here is the user's question about the tax code that I'd like you to answer:
<question>{{QUESTION}}</question>
First, pull relevant quotes from the tax code in <relevant_quotes> tags. Then write a concise, factual response to the user's question in <answer> tags. Your answer should be fully grounded in the relevant quotes from the tax code that you extracted.

固定部分放最前面,方便提示词缓存

提示词缓存让模型不必把同一段开头再处理一遍。只有新请求的开头和之前某个请求逐个 token 完全一致时,它才起作用。能不能做到,取决于你的模板。

OpenAI 的提示词工程指南说,要把反复使用的内容放在提示词开头,并放在请求体里靠前的参数中。它的缓存指南点明了陷阱:时间戳、和用户相关的内容以及其他动态内容,要放在末尾而不是开头。同一份提示词指南还把开发者消息的结构列为身份、指令、示例和上下文,上下文放在靠后的位置,因为每次请求都可能不同。

模板顶部只要有一行“当前时间:14:02 UTC”,每次调用的前缀就都不一样,没有哪次请求能复用上一次的缓存。把这一行挪到参考材料下面,固定部分就又能缓存了。Claude 的缓存在哪里结束有它自己的规则,提示词缓存那一课讲得很清楚。

缓存省下的不只是钱,还有时间。2024 年 8 月,Anthropic 开放缓存公测,它的公告列出了早期客户看到的首个 token 等待时间。

使用和不使用提示词缓存时,首个 token 的等待时间Anthropic 缓存公告里早期客户的结果,来自 2024 年公测期间。金色柱是用了缓存的情况。
  • 和一本书对话,提示词 100,000 个 token11.5 秒
  • 和一本书对话,已缓存2.4 秒
  • 多示例提示词,10,000 个 token1.6 秒
  • 多示例提示词,已缓存1.1 秒
  • 带长系统提示词的十轮对话约 10 秒
  • 十轮对话,已缓存约 2.5 秒

来源:Anthropic: Prompt caching with Claude (announcement) (2026年11月6日 查阅)

把模板放进代码,纳入版本管理

OpenAI 先试过另一条路。2025 年 6 月,它把提示词做成 API 里的一种对象,在控制台里保存,带版本和变量,用 ID 调用。2026 年 6 月 3 日,它宣布可复用的提示词对象进入弃用流程,v1/prompts API 计划在 2026 年 11 月 30 日关闭,这是它的弃用页面在 2026-11-06 显示的内容。

如今它的提示词工程指南要求把生产环境的提示词存进应用代码。放在代码里的提示词有类型化的输入、代码审查、测试,并走你平常的部署流程。迁移指南给出了替代写法:一个函数,把变量当作参数接收,再返回消息列表。

from openai import OpenAI

client = OpenAI()


def build_support_prompt(customer_name, issue):
    return [
        {
            "role": "system",
            "content": "You are a helpful support assistant. Be concise, accurate, and friendly. Do not invent policy details.",
        },
        {
            "role": "user",
            "content": f"Customer name: {customer_name}. Issue: {issue}. Write a response to the customer.",
        },
    ]


response = client.responses.create(
    model="gpt-6-astra",
    input=build_support_prompt(
        customer_name="Acme",
        issue="billing question",
    ),
)
  • 把提示词文本搬进源代码文件,这样改动会和产品逻辑一样经过审查和发布。
  • 用函数参数代替模板变量,每个值都一目了然。示例把两个很短的值直接拼进了句子里,而用户写的长段内容,仍然应该放进单独的标签。
  • 用 git 提交和合并请求审查来管理提示词的版本,每一处措辞改动都有作者,也有理由。
  • 修改生产提示词之前,先准备有代表性的测试样例和评估检查,CI 里的评估那一课会把它搭起来。需要分阶段上线时,就用功能开关。
OpenAI 的已保存提示词,从推出到关闭
  1. 提示词成为 API 对象

    开发者可以在 Playground、API、Evals 和 Stored Completions 之间保存、管理版本并复用提示词。

    来源:X: OpenAI Developers on prompts as an API primitive (16 June 2025) (2026年11月6日 查阅)

  2. 可复用的提示词对象进入弃用流程

    OpenAI 不再突出在平台上创建提示词,转而建议开发者把提示词放在代码里。

    来源:OpenAI API docs: Deprecations, reusable prompts (2026年11月6日 查阅)

  3. v1/prompts API 计划关闭

    凡是用已保存提示词 ID 发起的请求,都要在这之前把提示词搬进代码。

    来源:OpenAI API docs: Deprecations, reusable prompts (2026年11月6日 查阅)

OpenAI Developers 谈已保存的提示词,Alex Albert 谈缓存

OpenAI Developers 是这家公司面向开发者的账号,它在 2025-06-16 宣布提示词成了 API 的基本对象,可以在 Playground、API、Evals 和 Stored Completions 之间使用和复用。不到一年,同一家公司又让开发者把这些文本搬回自己的代码里。把模板放进任何托管的提示词存储之前,先弄清楚以后怎么把它们导出来。

Anthropic 的 Alex Albert 在 2024-08-14 发帖说,提示词缓存已经在 Anthropic API 上线,并称它能大幅降低输入成本和延迟。这些节省只落在模板里位置不动的那部分上,所以在这里,各行的顺序比措辞更要紧。

集中管理提示词,给它们做版本管理,并不断优化。

OpenAI Developers, OpenAI 面向开发者的账号,引文为译文 · X (2026年11月6日 查阅)
OpenAI Developers(@OpenAIDevs)2025 年 6 月 16 日在 X 上发帖,宣布提示词现在是 API 的基本对象:可以集中管理、做版本管理并优化提示词,还能在 Playground、API、Evals 和 Stored Completions 之间使用并复用。
OpenAI Developers 在 X 上,2025 年 6 月 16 日
Alex Albert(@alexalbert__)2024 年 8 月 14 日在 X 上发帖,宣布提示词缓存已在 Anthropic API 上线,并称它能降低输入成本和延迟。
Alex Albert 在 X 上,2024 年 8 月 14 日

X 官方嵌入卡片的截图,拍摄于 2026-11-06,时间为 UTC。点击截图可到 X 上打开原帖。

常见错误

  • 值直接贴进模板,周围什么标记都没有,模型把其中一部分当成了指令。
  • 模板开头放了时间戳、用户名或请求 ID,每次调用的缓存前缀都会变。
  • 空位起名叫 X 或 INPUT1,填值之前谁都看不懂这个模板。
  • 在控制台里直接改生产提示词,没有审查,没有历史记录,也没跑测试。
  • 为了一点小变化把模板复制成第二个文件,后来修 bug 只修了其中一份。

自己试一试

  • 把教程里的邮件模板分别在 EMAIL 带标签和不带标签的情况下发出去,比较两份改写的第一个词。
  • 仿照 OpenAI 的写法,把税务模板改写成一个 Python 函数,参数是 tax_code、examples 和 question。
  • 把你自己一条提示词的各行分成三组:永远不变、随话题变、每次调用都变。最后一组里有没有哪一行排在靠前的位置?
  • 把你的模板存成 git 里的一个文件,改一条指令,然后写提交说明,就当审查者一定会问为什么改。

下一门课:推理模型

这是高级提示词工程课程的最后一课。模板决定的是一条提示词里放什么。推理模型课程从什么是推理模型讲起。模型先思考再回答时,提示词要给清楚的目标,而不是一步步的指令。推理强度的设置,则在时间、token 和思考的深入程度之间取舍。

自测一下

  1. 教程为什么要用 XML 标签把邮件包起来?

    查看答案

    B. 让模型分清变量从哪里开始、到哪里结束 没有边界时,Claude 把“Yo Claude”当成了它要改写的邮件的一部分。

  2. 在想要缓存的模板里,每次调用都会变的值应该放在哪里?

    查看答案

    C. 放在末尾,在固定指令和参考材料之后 缓存复用的是完全相同的开头,所以每次都变的内容必须放在固定部分之后。

  3. OpenAI 的提示词指南现在建议怎样处理生产环境的提示词?

    查看答案

    A. 存进应用代码,纳入版本管理 指南说放在代码里的提示词有类型化输入、代码审查、测试和正常的部署流程,已保存的提示词对象也正在停用。

  4. 模板第一行是今天的日期和时间,提示词缓存会怎样?

    查看答案

    D. 每次调用的前缀都不同,没有哪次请求能复用上一次的缓存 开头的时间戳让每次的开头都不一样,而缓存只匹配完全相同的前缀。

常见问题

什么是提示词模板?

它是一条反复使用的提示词,每次只往具名空位里填新的值,比如一封客户邮件或一个问题,周围的指令每次调用都保持不变。

模板变量应该用什么写法?

只要代码能填就行。Anthropic 的教程用 Python f-string,它 2024 年那篇讲业务的文章则用双大括号写空位,比如 {{QUESTION}}。给每个空位起个清楚的名字、给每个值套上标签,比用哪种写法更重要。

提示词应该放在代码里,还是放在提示词管理工具里?

对生产环境的 API 调用,OpenAI 的指南现在的答案是放在代码里,OpenAI 自己的已保存提示词对象也正在停用。放在代码里,提示词就和调用它的逻辑一样,有历史记录,也要经过审查。

变量很多的模板,还能用上提示词缓存吗?

能,只要每次调用都会变的变量集中放在靠后的位置。缓存只复用和之前请求完全相同的开头,到第一个不同的 token 为止。顶部只要有一个每次都变的空位,可缓存的部分就只剩它上面那几行。

提示词模板和系统提示词是一回事吗?

不是。系统提示词说的是指令在请求里放在哪儿,模板说的是怎样用固定文字加变量拼出请求的任何部分。模板的固定部分常常就成了系统提示词。

资料来源

  1. Anthropic's prompt engineering tutorial: Chapter 4, Separating Data and Instructions (2026年11月6日 查阅)https://github.com/anthropics/prompt-eng-interactive-tutorial/blob/master/Anthropic%201P/04_Separating_Data_and_Instructions.ipynb
  2. Anthropic: Prompt engineering for business performance (29 February 2024) (2026年11月6日 查阅)https://www.anthropic.com/news/prompt-engineering-for-business-performance
  3. Anthropic: Prompt caching with Claude (announcement) (2026年11月6日 查阅)https://www.anthropic.com/news/prompt-caching
  4. OpenAI API docs: Prompt engineering (2026年11月6日 查阅)https://developers.openai.com/api/docs/guides/prompt-engineering
  5. OpenAI API docs: Prompt caching (2026年11月6日 查阅)https://developers.openai.com/api/docs/guides/prompt-caching
  6. OpenAI API docs: Migrate from prompt objects (2026年11月6日 查阅)https://developers.openai.com/api/docs/guides/prompting/migrate-from-prompt-object
  7. OpenAI API docs: Deprecations, reusable prompts (2026年11月6日 查阅)https://developers.openai.com/api/docs/deprecations
  8. X: OpenAI Developers on prompts as an API primitive (16 June 2025) (2026年11月6日 查阅)https://x.com/OpenAIDevs/status/1934717086783426698
  9. X: Alex Albert on prompt caching rolling out in the Anthropic API (14 August 2024) (2026年11月6日 查阅)https://x.com/alexalbert__/status/1823751966893465630

分享本节课

把好用的模板变成技能

浏览 Mindket 上的技能:每个技能都把可复用的指令和文件装进一个文件夹,AI 智能体在任务需要时载入它。

浏览技能

本节课的 Markdown 版本 · 高级提示词工程:示例、推理、提示链与模板 · 全部课程