课程
很多时候,我们并不想编写完整的提示,而是想要 可以稍后根据额外输入数据修改的提示模板,然后再提交给 Claude。如果你希望 Claude 每次执行相同的任务,但 Claude 使用的数据每次可能不同,这将非常有用。
幸运的是,我们可以通过 将提示的固定框架与可变的用户输入分开,然后在将完整的提示发送给 Claude 之前,将用户输入替换到提示中,非常轻松地实现这一点。
下面,我们将逐步演示如何编写可替换的提示模板,以及如何替换用户输入。
示例
在第一个示例中,我们要求 Claude 充当动物声音生成器。注意,提交给 Claude 的完整提示(链条中的第三个黄色框)只是将输入(在这种情况下是第二个框中的“Cow”)替换到提示模板(第一个框)中。注意,“Cow”替换了黄色第三个框中的“{{ANIMAL}}”。
注意:实际上,你不必给替换占位符取特别的名字。在这个示例中,使用 {{ANIMAL}} 是因为这是练习的格式要求。但一般来说,我们同样可以将其称为“{{CREATURE}}”或“{{A}}”(但是 通常最好让你的占位符具体且相关,这样即使没有替换,提示也容易理解,方便用户解析)。只需确保无论你给替换占位符取什么名字,都要在替换公式中使用相同的名称。
示例:
输入:
提示模板
用户:我会告诉你一种动物的名字。请回复该动物发出的声音。{{ANIMAL}}
+
输入 {{ANIMAL}}
牛
=
替换后的提示
用户:我会告诉你一种动物的名字。请回复该动物发出的声音。牛
输出:
Claude 的回应
哞。
为什么我们要像这样分离和替换输入呢?因为,提示模板简化了重复性任务。 假设你构建了一个提示结构,邀请第三方用户提交内容(在这个例子中,是他们想要生成声音的动物)。这些第三方用户不必编写或查看完整的提示。他们只需要填写变量即可。
我们在这里使用电子表格函数进行替换,但这也是编码的最佳实践!我们在自己的代码中使用 {{双花括号}} 的格式。
注意:提示模板可以包含任意数量的变量。
当引入像这样的替换变量时,确保 Claude 知道变量的开始和结束位置(与指令或任务描述区分开)非常重要。让我们看看一个没有将指令与替换变量分开的例子。
示例:
输入:
提示模板
User: Yo Claude. {{EMAIL}} <----- 将这封邮件变得更加礼貌,但不要修改其他内容。
+
输入 {{EMAIL}}
明天早上 6 点到场,因为我是 CEO,我说了算。
=
替换后的提示
User: Yo Claude. 明天早上 6 点到场,因为我是 CEO,我说了算。 <----- 将这封邮件变得更加礼貌,但不要修改其他内容。
输出:
Claude 的回复
亲爱的 Claude,
希望你一切安好。作为 CEO,我想请求你明天早上 6 点到我们的办公室。我知道这可能是一个早起的时间,但我相信这对我们公司的成功是必要的。如果你对此时间有任何疑虑或冲突,请告诉我,我们可以一起找到合适的安排。
感谢你一直以来的奉献和辛勤工作。期待明天见到你。
此致敬礼,
[你们 CEO 的名字]
在这里,Claude 认为 "Yo Claude" 是邮件的一部分,并将其重新写为了 "Dear Claude"!你可以发现这一点,因为它在重写时以 "Dear Claude" 开头。对于人类来说,特别是在提示模板中,很清楚邮件从哪里开始和结束,但在替换后的提示中,这一点就不那么明显了。
我们该如何解决这个问题?将输入包裹在 XML 标签中!我们在下面做了这一点,正如你所看到的,输出中再也没有 "Dear Claude" 了。
XML 标签 是像 这样的尖括号标签。它们成对出现,由一个开标签(例如 )和一个由 "/" 标记的闭合标签(例如 )组成。XML 标签用于包裹内容,例如:内容。
注意: 尽管 Claude 可以识别和处理多种分隔符和定界符,我们还是建议你特别使用 XML 标签作为 Claude 的分隔符,因为 Claude 的训练特别关注将 XML 标签作为提示组织机制。除了函数调用之外,Claude 并没有接受特别针对某些 XML 标签的训练,来最大化提高你的表现。我们有意让 Claude 变得非常灵活和可定制。
示例:
输入:
提示模板
用户:Yo Claude. <email>{{EMAIL}}</email> <----- 请将这封邮件写得更礼貌一些,但不要改变其内容。
+
输入 {{EMAIL}}
早上6点到,因为我是CEO,所以我这么说。
=
替换后的提示
用户:Yo Claude. <email>早上6点到,因为我是CEO,所以我这么说。</email> <----- 请将这封邮件写得更礼貌一些,但不要改变其内容。
输出:
Claude的回复
亲爱的 [您的名字],
希望这封邮件能给您带来愉快的心情。作为CEO,我希望您能在早上6点到场。我理解这可能是一个很早的时间,但我相信这是我们组织成功的必要条件。请告知我这个时间是否适合您,非常感谢您的配合。
此致,
[CEO的名字]
我们来看看另一个例子,了解XML标签是如何帮助我们的。
在下面的提示中,Claude错误地理解了提示的指令部分和输入部分。由于格式问题,它错误地将“Each is about an animal, like rabbits”视为列表的一部分,而用户(填充 {{SENTENCES}} 变量的人)可能并不希望如此。
示例:
输入:
提示模板
用户:以下是一组句子。告诉我列表中的第二个句子。
- 每个句子都与一种动物有关,比如兔子。
{{SENTENCES}}
+
输入 {{SENTENCES}}
- 我喜欢奶牛的叫声
- 这句话是关于蜘蛛的
- 这句话看起来是关于狗的,但实际上是关于猪的
=
替换后的提示
用户:以下是一组句子。告诉我列表中的第二个句子。
- 每个句子都与一种动物有关,比如兔子。
- 我喜欢奶牛的叫声
- 这句话是关于蜘蛛的
- 这句话看起来是关于狗的,但实际上是关于猪的
输出:
Claude的回复
列表中的第二个句子是“我喜欢奶牛的叫声”。
为了解决这个问题,我们只需要用XML标签将用户输入的句子包裹起来。这样可以向Claude表明输入数据的起点和终点,尽管在“Each is about an animal, like rabbits”前有误导性的短横线。
示例:
输入:
Prompt 模板
User: 下面是一组句子。告诉我列表中的第二项。
- 每个句子都与动物有关,比如兔子。
<sentences>
{{SENTENCES}}
</sentences>
+
Input {{SENTENCES}}
- 我喜欢牛的声音
- 这句话是关于蜘蛛的
- 这句话看似是关于狗的,但实际上是关于猪的
=
替换后的 Prompt
User: 下面是一组句子。告诉我列表中的第二项。
- 每个句子都与动物有关,比如兔子。
<sentences>
- 我喜欢牛的声音
- 这句话是关于蜘蛛的
- 这句话看似是关于狗的,但实际上是关于猪的
</sentences>
输出:
Claude 的回复
列表中的第二项是“这句话是关于蜘蛛的”。
注意: 在不正确的“每个句子都与动物有关”提示中,我们必须包含连字符,以便 Claude 在我们希望的示例中给出不正确的回复。这是关于提示设计的重要一课:细节很重要! 值得花时间检查你的提示是否有拼写和语法错误。 Claude 对模式非常敏感(在早期阶段,它是一个未经微调的纯文本预测工具),当你犯错时,它更容易犯错;当你显得聪明时,它表现得更聪明;当你显得傻时,它也会表现得傻等等。
如果你准备好尝试章节练习,点击下面的链接。如果你想尝试本课中的任何示例,请向下滚动!
练习
练习 4.1 - 俳句主题
在高亮的模板框中编写一个提示,接受一个名为“{{TOPIC}}”的变量,并输出关于该主题的俳句。这个练习旨在测试你对变量模板结构的理解。
示例:
输入:
Prompt 模板
User: 写一首关于 {{TOPIC}} 的俳句。
+
Input {{TOPIC}}
猪
=
替换后的 Prompt
User: 写一首关于猪的俳句。
输出:
Claude 的回复
这是关于猪的俳句:
泥中拱鼻响
卷尾粉胖咕噜
猪儿游农场
练习 4.2 - 带有拼写错误的狗问题
通过添加 XML 标签修复高亮模板框中的提示,使 Claude 给出正确的答案。
尽量不要更改提示中的其他内容。这种混乱且错误百出的写作是故意的,目的是让你了解 Claude 如何应对这些错误。如果你的提示生成了正确答案,Claude 的回复将变成绿色。
注意: 虽然 Claude 能够一定程度上解析语法差、拼写错误的提示,但写得清晰、经过拼写检查且语法正确的提示,会大大降低 Claude 犯错的风险,并显著提高其输出质量。
示例:
输入:
Prompt 模板
User: 嗨是我我有个关于狗的问题 jkaerjv <question>{{QUESTION}}</question> jklmvca tx 它对我帮助很大非常非常多 atx fst fst 答案简短简短 tx
+
Input {{QUESTION}}
狗能是棕色的吗?
=
替换后的 Prompt
User: 嗨是我我有个关于狗的问题 jkaerjv <question>狗能是棕色的吗?</question> jklmvca tx 它对我帮助很大非常非常多 atx fst fst 答案简短简短 tx
输出:
Claude 的回复
是的,狗可以是棕色的。
❓ 如果你需要提示,点击这一行最左边的加号(➕)。
练习 4.3 - 狗问题第二部分
不要添加 XML 标签来修复高亮模板框中的提示。相反,只删除提示中的一两个词。
同样,尽量不要更改提示中的其他内容。这将展示 Claude 能够解析和理解的语言类型。如果你的提示生成了正确答案,Claude 的回复将变成绿色。
示例:
输入:
Prompt 模板
User: 嗨是我我有个关于狗的问题 {{QUESTION}} tx 它对我帮助很大非常非常多 atx fst fst 答案简短简短 tx
+
Input {{QUESTION}}
狗能是棕色的吗?
=
替换后的 Prompt
User: 嗨是我我有个关于狗的问题 狗能是棕色的吗? tx 它对我帮助很大非常非常多 atx fst fst 答案简短简短 tx
输出:
Claude 的回复
是的,狗可能有棕色的毛发。棕色是许多犬种常见的毛色。
❓ 如果你需要提示,点击这一行最左边的加号(➕)。