Menu

提示词模板:示例与制作方法

提示词模板是一个你已经测试过的提示词,把每次会变的部分留成空白。复制现成的带填空模板,再用五个步骤把你自己最好用的提示词做成模板。

下面的每条提示词都可以编辑:改好后,在 ChatGPT、Claude 或其他 AI 应用中打开。

提示词模板就是一个带空白的提示词。固定的文字承载着你在某类任务上摸索出的、得到好答案的全部经验:角色、格式、限制。空白承载的是每次都会变的东西:主题、语言、要处理的文字。填三个空比写一个提示词快,而且得到的答案在质量和形式上都更稳定。

下面这个模板可以按你的水平解释任何编程概念。在输入框里填上你自己的内容,关掉某一部分看看它起了什么作用,然后复制它,或者在聊天应用中打开。

按我的水平解释一个概念
Fill in
Parts
你是一位耐心的老师,面向自学编程的人。
解释 JavaScript 中的闭包。
我已经掌握了变量、函数和数组。我最好的学习方式是看一个能自己运行的小例子。
分三部分回答,每部分用加粗的标签:一句话讲清概念、一个在关键行加了注释的简短代码示例,以及一个常见错误。
控制在 150 字以内。如果你需要用到一个我没列为已掌握的术语,用几个字解释一下。
Try it
Example replyReplies vary between models and runs.

概念: 闭包是一个函数,它能记住自己被创建时所在位置的变量,即使外层函数已经运行结束。

示例:

function makeCounter() {
  let count = 0;
  return function () {
    count += 1; // still sees count from makeCounter
    return count;
  };
}

const next = makeCounter();
console.log(next()); // 1
console.log(next()); // 2

常见错误: 以为两个计数器会共享同一个总数。每次调用 makeCounter() 都会创建一个新的 count,所以每个计数器都保有自己的计数。

好模板的标准

模板的好坏取决于它来源的提示词,所以固定的文字应该是一个你已经运行过、并且满意的提示词。有三个选择决定了它是一个有用的模板,还是一张只会更快地产出平庸答案的表格。

只把会变的部分留空。 如果你总是希望答案在 150 字以内,就把 150 写进固定文字里。每个空白都是你每次使用时要重新做的决定,一个有十个空白的模板,填起来比重新写提示词还慢。

给每个空白起一个清楚的名字,并设一个合理的默认值。 {{known}} 告诉你该填什么;{{x}} 则不能。默认值展示了预期的取值类型,还让你不用输入任何东西就能先运行一次模板。

一项工作一个模板。 一个靠某个空白来决定是解释概念、审查代码还是出测验题的模板,三件事都会做得比三个独立的模板差。固定的文字越具体,它能对格式和标准说得就越多。

怎么写提示词中的六个组成部分是检查固定文字的好清单:角色、任务、背景、输入、格式、限制。空白通常出现在任务、背景和输入中。

提示词模板示例

下面三个模板覆盖了常见的日常工作,每个都有带名字的字段可以填写。想要更多现成的提示词,见提示词示例。

为特定读者写总结
Fill in
为一位只有两分钟时间的经理总结 <text> 标签内的文字。最多用 3 个要点。先写读者必须做出的决定或采取的行动,省略他们不需要的背景信息。 <text> 在这里粘贴文字 </text>
Try it
写一个小函数
Fill in
写一个 Python 函数,它接收一个数字列表并返回中位数。如果这门语言支持类型注解,就加上。如果输入为空,抛出 ValueError。在函数之后,加三个调用示例,并用注释写出预期结果。只返回代码。
Try it
Example replyReplies vary between models and runs.
def median(numbers: list[float]) -> float:
    if not numbers:
        raise ValueError("median() needs at least one number")
    ordered = sorted(numbers)
    middle = len(ordered) // 2
    if len(ordered) % 2 == 1:
        return ordered[middle]
    return (ordered[middle - 1] + ordered[middle]) / 2


# median([3, 1, 2])     returns 2
# median([4, 1, 3, 2])  returns 2.5
# median([])            raises ValueError
回复一条消息
Fill in
回复 <message> 标签内的消息。目标:礼貌地拒绝,并建议改到下个月的某一天。语气:友好而简短。控制在 80 字以内,不要添加消息或目标中没有的事实。 <message> 你好!14 号我们的聚会上,你有空来简单分享一下你的项目吗? </message>
Try it
Example replyReplies vary between models and runs.

你好,谢谢邀请,很高兴你想到了我!可惜 14 号我去不了。改到下个月的某一天可以吗?到时候我很乐意聊聊这个项目。

祝好, [你的名字]

粘贴文字外面的标签是有原因的。填进去的文字可能包含看起来像指令的句子,而分隔符能防止模型把模板的指令和它要处理的材料混为一谈。

如何制作自己的模板

  1. 从一个效果好的提示词开始。 找一次答案令人满意的对话,整理出提示词的最终版本,包括你在后续消息中不得不补充的那些纠正。这些纠正是最有价值的部分,因为它们修正了第一个版本的错误。
  2. 标出下次会变的部分。 读一遍提示词,在下次使用时你会修改的每个词下面画线。通常是两到四处:一个主题、一个受众、一个长度、一段粘贴的输入。
  3. 把每一处都换成一个有名字的空白。 按你所用工具的要求来写空白,比如手动粘贴的提示词用 [audience],代码中用 {audience}。
  4. 用三种不同的填法测试。 用一个典型情况、一个很短或很长的输入,以及一个不寻常的情况。如果其中一个失败了,说明固定的文字仍然对第一次的用法有所假设。一次只改一句,方法见迭代提示词。
  5. 保存在你能找到的地方。 笔记文件、文本扩展工具或代码片段管理器都可以。一个需要到处找的模板,你迟早会不再用它。

代码中的模板

在程序中,模板就是一个带命名字段的字符串。Python 的 str.format() 可以填充这些字段:

SUMMARY_TEMPLATE = """Summarize the text inside the <text> tags for {audience}.
Use at most {bullets} bullet points and lead with any action the reader must take.

<text>
{text}
</text>"""

with open("notes.txt", encoding="utf-8") as f:
    meeting_notes = f.read()

prompt = SUMMARY_TEMPLATE.format(
    audience="a manager who has two minutes",
    bullets=3,
    text=meeting_notes,
)

使用 str.format() 时,模板中的每个花括号字面量都必须写两遍({{ 和 }}),当模板包含 JSON 示例时,这一点很重要。你传入的值里的花括号,比如 meeting_notes 中的代码,则不需要转义。有些用于构建 AI 应用的库有自己的模板类,但它们做的事和格式字符串一样,只是外面多加了一些功能。

当值来自用户时,要记住模板会把他们的文字发送给模型。把它放在分隔符内,也不要给模型那些可能被恶意输入滥用的工具或数据。

模板还是系统提示词

模板和系统提示词解决的是不同的问题。系统提示词保存的是适用于一次对话或一个应用中每条消息的规则:人设、语气、助手绝不能做的事。模板保存的是一个带空白的任务。在应用中,你常常两者都用:一个固定的系统提示词定下基本规则,一个模板构建每条用户消息。

常见问题

提示词模板是什么?

提示词模板是一个可复用的提示词,每次使用时会变的部分用占位符表示,比如 [topic] 或 {language}。固定的文字里装的是你已经测试过的指令;每次只需填空,而不用从头写提示词。

怎么制作自己的提示词模板?

从一个已经给过你好答案的提示词开始。标出下次使用时你会改动的词,把每一处都换成一个有名字的空白,然后用三种不同的填法测试模板,其中包括一个不寻常的情况。让第一次得到好答案的那些指令保持原样。

提示词模板应该保存在哪里?

保存在任何能快速复制的地方:一个笔记文件、一个文本扩展工具或一个代码片段管理器。聊天应用里也有放复用文字的地方,比如自定义指令和项目指令,它们更适合放每条消息都适用的规则,而不是带空白的一次性任务。

怎么在 Python 中使用提示词模板?

把模板存成一个带命名字段的字符串,用 str.format() 或 f-string 来填充。使用 str.format() 时,模板中的花括号字面量要写两遍({{ 和 }}),比如模板里包含一个 JSON 示例的时候。把用户提供的文字放在分隔符内,让它和指令保持分开。

Coddy 编程语言插图

和 Coddy 一起学编程

开始