Anthropic的PromptEngineering指南!

Anthropic 发布了全新 Prompt Engineering 指南,包含:元提示、模板、系统角色、XML 标签等关键技术。

Prompt通常包含以下两种类型的内容:

固定内容: 在多次交互中保持不变的静态指令或上下文。

变量内容: 随每个请求或对话而变化的动态元素,例如:

  • 用户输入。
  • 用于检索增强生成(RAG)的检索内容。
  • 对话上下文,如用户账户历史。
  • 系统生成的数据,如来自其他调用的工具使用结果。

Prompt模板

将这些固定和变量部分结合在一起,为动态内容使用占位符{{}}表示。

优化Prompt技巧

添加示例

示例用 <example> 标签包装(如果有多个,则嵌套在 <examples> 标签中)以保持结构。

1
2
3
4
5
6
7
8
9
我们的客服团队被非结构化反馈淹没了。你的任务是为我们的产品和工程团队分析反馈并对问题进行分类。使用这些类别:UI/UX、性能、功能请求、集成、定价和其他。同时评估情感(积极/中性/消极)和优先级(高/中/低)。这里有一个示例:

<example>
输入:新仪表板一团糟!加载需要很长时间,而且我找不到导出按钮。请尽快修复这个问题!
类别:UI/UX、性能
情感:消极
优先级:高</example>

现在,分析这个反馈:{{FEEDBACK}}

添加思维链CoT

基本思维链提示:

在提示中添加逐步思考这类关键词。

1
2
3
4
5
6
7
8
9
10
11
起草个性化邮件,向捐赠者请求为今年的关爱儿童计划捐款。

项目信息:
<program>{{PROGRAM_DETAILS}}
</program>

捐赠者信息:
<donor>{{DONOR_DETAILS}}
</donor>

在写邮件之前逐步思考。

引导式提示:

在思考过程中要遵循具体的步骤。

1
2
3
4
5
6
7
8
9
10
11
12

起草个性化邮件,向捐赠者请求为今年的关爱儿童计划捐款。

项目信息:
<program>{{PROGRAM_DETAILS}}
</program>

捐赠者信息:
<donor>{{DONOR_DETAILS}}
</donor>

在写邮件之前先思考。首先,根据他们的捐赠历史和他们过去支持过的活动,思考什么信息可能吸引这位捐赠者。然后,根据他们的历史,思考关爱儿童计划的哪些方面会吸引他们。最后,使用你的分析写出个性化的捐赠者邮件。

结构化提示:

使用像 <thinking><answer> 这样的 XML 标签来分离推理和最终答案。

1
2
3
4
5
6
7
8
9
10
11
起草个性化邮件,向捐赠者请求为今年的关爱儿童计划捐款。

项目信息:
<program>{{PROGRAM_DETAILS}}
</program>

捐赠者信息:
<donor>{{DONOR_DETAILS}}
</donor>

在写邮件之前在 <thinking> 标签中思考。首先,根据他们的捐赠历史和他们过去支持过的活动,思考什么信息可能吸引这位捐赠者。然后,根据他们的历史,思考关爱儿童计划的哪些方面会吸引他们。最后,在 <email> 标签中使用你的分析写出个性化的捐赠者邮件。

XML标签

在思维链提示当中,可以看到结构化提示中使用<thinking>这种Xml标签,能帮助大模型进行思考。

预填充

预填充的作用是,跳过前言,强制使用特定格式如 JSON 或 XML,甚至帮助大模型在角色扮演场景中保持角色一致性。

1
2
3
4
5
6
从此产品描述中提取名称、尺寸、价格和颜色,并将其作为 JSON 对象:

<description>
SmartHome Mini 是一款紧凑型智能家居助手,提供黑色和白色两种颜色可选,售价仅需 49.99 美元。它仅 5 英寸宽,无论您将其放置在家中何处,都可以通过语音或应用程序控制灯光、恒温器和其他连接设备。这款价格实惠的小巧集线器可为您的智能设备带来便捷的免提控制体验。
</description>
{

在提示词结尾,添加{符号,这就是预填充的表现,直接强制大模型跳过前言,并直接输出 以{开头的JSON 对象的内容。

这样更简洁、更清晰,也更容易被程序解析而无需额外处理。