Prompt 提示词工程编写原则与操作实践

44
0
0
2024-11-01

Prompt 提示词工程编写原则与操作实践

Prompt 提示词工程编写的原则

在编写Prompt提示词工程时,遵循一定的原则可帮助我们更有效地利用自然语言处理技术和生成高质量的内容。以下是一些重要的原则:

  • 指令明确

    • 清晰表达意图:确保你提供的prompt指令明确地传达了您想要达到的目标;

    • 减少模糊:减少输入指令中可能导致歧义的表述;

  • 指令具体

    • 提供具体细节:给出具体的背景、条件和期望的结果;

    • 使用精确词汇:比如,在请求生成特定类型的文章时,明确指出风格、受众等信息;

  • 指令结构化

    • 组织逻辑顺序:如果prompt包含多个部分或步骤,尽量按照逻辑顺序排列它们;

    • 分段落或项目符号:对于较长的prompt,使用段落或项目符号来增加可读性(后文会提到);

  • 保持指令简洁

    • 保持简短:尽可能使用较少的文字来表达意思,减少大模型的理解和学习成本;

    • 去除冗余:避免不必要的重复或无关紧要的信息;

  • 保持指令一致性

    • 维持指令的统一风格:如果你正在创建一系列相关的prompt,确保它们在风格和语气上保持一致;

    • 使用相同的术语:对于特定领域的prompt,使用前后一致的专业术语;

  • 尽量使用自然语言

    • 采用日常语言:使用人们日常交流时使用的语言风格,也是为了减少大模型的理解成本;

    • 避免过于技术化的术语:除非是面向专业读者,否则尽量使用通俗易懂的语言;

  • 情境相关性

    • 考虑实际情境:确保prompt的指令内容与预期的应用场景相关联;

    • 提供上下文信息:如果需要,提供足够的背景信息来帮助模型理解情境;

  • 指令的引导性

    • 给出示例:提供一个或多个参考案例来展示所期望的结果,案例也是为大模型提供快速的联想并缩减检索范围;

    • 使用指令词:使用诸如“描述”、“解释”、“列举”等词汇来明确指示任务;

  • 根据指令结果反馈循环

    • 评估结果:检查生成的内容是否符合预期,并据此不断调整prompt;

    • 迭代改进:根据反馈不断优化prompt,以获得更好的结果;

  • 指令需遵守伦理道德

    • 尊重隐私:避免使用敏感或个人信息;

    • 避免偏见:确保prompt不会促进任何形式的歧视或偏见;

  • 注意指令的安全性

    • 避免有害内容:确保prompt不会导致生成有害、非法或不适当的内容;

    • 设置限制:对于某些应用,可以设置过滤机制来防止不良内容产生;

Prompt 提示词编写中常用的分隔符

在编写 Prompt 提示词时,合理使用分隔符,可以让大模型能够更好的理解指令要表达的意思,从而得到更符合要求的输出。

用于定义标签或者类别,后面跟具体的内容,参考示例:

问题: 量子力学是谁创立的,请给出回答

空格

最简单的分隔符,用于分割单词或短语

Generate a list of five fruits: apple orange banana strawberry kiwi

箭头 (->)

用于指示转换或者映射关系

Text -> Summary
A long time ago in a galaxy far, far away...

竖线 (|)

用于分隔选项或者并列的概念

Write an essay on the following topics: science | technology | society

逗号 (,)

用于列出多个项

List three colors: red, blue, green

横线 (-)

用于列表或者指示顺序

- Introduction
- Main points
- Conclusion

小括号 (())

用于包含附加信息或者注释

Write a story about a character (name: John) who travels through time.

大括号 ({})

用于表示模板中的变量或者占位符

{Name} is a famous {Occupation}.

方括号 ([])

用于表示可选的信息或者参数

[Optional] Include a bibliography at the end of the report.

 等号 (=)

用于定义变量或者属性

Title = The Art of Programming
Author = Jane Smith

特殊字符

一些特殊字符包括:

  • #:用于注释或标签。

  • ::用于冒号后接的内容是前一部分的说明或解释。

  • ;:用于分割列表中的项目。

  • =:用于等式或赋值

换行符

\n\r\n:用于分割不同的段落或逻辑单元

定义字符串

  • <start> 和 <end>:用于标记文本的开始和结束。

  • <speaker1> 和 <speaker2>:用于区分对话中的不同发言者。

  • <question> 和 <answer>:用于区分问题和答案。

HTML/XML 样式的标签

<tag> 和 </tag>:用于标记文本的特定部分

Prompt 提示词编写遵循原则操作实践

编写清晰、具体的指令

你应该通过提供尽可能清晰和具体的指令来表达希望模型执行的操作,这将引导模型给出正确的输出,并减少你得到无关或不正确响应的可能。

编写清晰的指令不意味着简短的指令,因为在许多情况下,更长的提示实际上更清晰且提供了更多上下文,这实际上可能导致更详细更相关的输出。

策略一:使用分隔符

  • 分割符可以清晰地表示输入的不同部分;

    • 分隔符可以是:```,"",<>,,<\tag>等;

    • 日常编写指令时可以记住一些常用的分隔符,可以很好的提升使用大模型的工作效率;

  • 你可以使用任何明显的标点符号将特定的文本部分与提示的其余部分分开;

    • 这可以是任何可以使模型明确知道这是一个单独部分的标记;

      • 使用分隔符是一种可以避免提示注入的有用技术;

      • 提示注入,是指如果用户将某些输入添加到提示中,则可能会向模型提供与您想要执行的操作相冲突的指令,从而使其遵循冲突的指令而不是执行您想要的操作;

      • 输入里面可能包含其他指令,会覆盖掉你的指令,对此,使用分隔符是一个不错的策略。

如下的案例中,我们给出一段话并要求 大模型对内容进行总结,在该示例中我们使用 ``` 来作为分隔符:

请帮我提炼如下内容的大纲:
```

新势力造车的现状呈现出激烈的竞争和两极分化的趋势。‌

新势力造车企业在面对传统车企的电动化转型和市场竞争时,‌面临着巨大的挑战。‌一方面,‌部分传统车企在电动化转型道路上展现出坚定的决心,‌凭借其实力雄厚、‌成本管控能力强以及产品实用质优价廉的特点,‌适应大众市场,‌更有可能在激烈竞争中生存下来。‌相比之下,‌新势力造车企业虽然车型定位偏向个性化,‌拥有特定的客群,‌但由于缺乏自我造血能力,‌依赖外部融资,‌难以长期维持。‌2024年,‌造车新势力之间的竞争将更加激烈,‌两极分化将更加严重,‌一些企业可能会因为无法适应市场变化而被淘汰。‌

从市场格局来看,‌自主品牌领跑新能源汽车市场的趋势依旧明显。‌比亚迪、‌广汽埃安、‌长城汽车、‌长安汽车等企业保持了强劲的增长势头,‌而合资品牌也在加速新能源转化,‌如上汽大众ID.家族实现了单月新车交付量的显著提升。‌造车新势力阵营中,‌理想汽车、‌蔚来汽车、‌小鹏汽车等企业通过不断创新和产品升级,‌试图在市场中占据一席之地。‌然而,‌也有一些企业因为市场策略失误或资金问题而面临困境,‌如威马汽车和天际汽车等

总的来说,‌新势力造车企业在面对传统车企的竞争和市场变化时,‌需要不断创新和提升自身实力,‌以适应市场的需求和变化。‌同时,‌企业也需要关注成本控制和资金管理,‌以确保能够在激烈的市场竞争中生存下来

```

利用上文提到的分隔符,也可以使用下面这种格式的内容让大模型输出一段摘要信息

文章内容:
```

- 新势力造车企业在面对传统车企的电动化转型和市场竞争时,‌面临着巨大的挑战。‌一方面,‌部分传统车企在电动化转型道路上展现出坚定的决心,‌凭借其实力雄厚、‌成本管控能力强以及产品实用质优价廉的特点,‌适应大众市场,‌更有可能在激烈竞争中生存下来。‌相比之下,‌新势力造车企业虽然车型定位偏向个性化,‌拥有特定的客群,‌但由于缺乏自我造血能力,‌依赖外部融资,‌难以长期维持。‌2024年,‌造车新势力之间的竞争将更加激烈,‌两极分化将更加严重,‌一些企业可能会因为无法适应市场变化而被淘汰。‌

- 从市场格局来看,‌自主品牌领跑新能源汽车市场的趋势依旧明显。‌比亚迪、‌广汽埃安、‌长城汽车、‌长安汽车等企业保持了强劲的增长势头,‌而合资品牌也在加速新能源转化,‌如上汽大众ID.家族实现了单月新车交付量的显著提升。‌造车新势力阵营中,‌理想汽车、‌蔚来汽车、‌小鹏汽车等企业通过不断创新和产品升级,‌试图在市场中占据一席之地。‌然而,‌也有一些企业因为市场策略失误或资金问题而面临困境,‌如威马汽车和天际汽车等

- 总的来说,‌新势力造车企业在面对传统车企的竞争和市场变化时,‌需要不断创新和提升自身实力,‌以适应市场的需求和变化。‌同时,‌企业也需要关注成本控制和资金管理,‌以确保能够在激烈的市场竞争中生存下来

```

要求结构化的输出

结构化的输出,这可以使大模型的输出结果更容易被用户解析和使用,仍然以上面的输出摘要为例,在大模型第一次输出结果之后,我们可以让它以表格的形式进行输出,

提供示例或明确的输出格式要求

仍然以上面的结果为例,如果希望以markdown的格式输出,那么还可以指定具体的格式要求,如下:

将上述的输出结果以 markdown 的形式呈现出来,格式如下:
1、XXX

- XXX

- XXX

2、XXX

- XXX

- XXX

保持指令的简洁性

在使用大模型进行提问时,一方面大模型自身对于单次输入的内容回答长度有限制,超过一定的长度限制后,反馈的输出结果准确性不好,另一方面,这也并不符合现实的对话场景下,通过一次性的问答就能得到我们预期的答案,简而言之,当你需要向大模型提问的内容很长,又希望得到相对精准且全面的回复,可以参考这几个经验:

  • 将一次性提问的长文本内容,拆分成具有前后逻辑关联的较短的多个文本;

  • 分多次进行提问,在一定的时间限度和语境内,大模型会记录上文的已回答的内容语义;

  • 每次提问时,可基于大模型上一次的回复,进行递进式的提问,或者针对已经回复的内容进行微调,然后重新发起提问;

  • 每次提问的文本内容不要太长,即指令尽量简短清晰,避免给大模型过多的理解成本;

下面看一个具体的示例,为了让大模型为我们提供5个短视频营销文案的标题,我们分多次提问,从而逐渐逼近最符合我们需求的输出内容;

指令一:

作为一个专业的营销策划师,请为我拟定5个关于创意短视频的文案标题

指令二:

注意,我的短视频受众群体主要是年轻的女性,内容尽量与时尚、好玩、有趣这些标签相关,请重新拟定

指令三:

基于你的回答,我现在想进一步缩小范围,提供时尚穿搭方面的,请重新拟定

提供必要的上下文信息

也即上文提到的情境相关性,在一些复杂的场景中,比如你需要大模型帮你分析某个科学或技术问题,那么你必须提供相对完整的语境内容,否则大模型就是瞎猜了,为什么这么说呢,设想你是一个想写一篇针对某个技术观点的文章,但是你并不很懂技术,如何让大模型帮你写出一篇这样的文章呢?答案是,你要向大模型提出你的需求,比如你希望你的文章包括哪些章节,每个章节还包括哪些具体的子标题,每个章节中要重点突出哪些观点等,如下是一个具体的操作示例,是关于借助大模型我我们生成一个文章的提纲。

指令一:

我想写一篇关于移动还联网发展历程的文章,请为我拟定一个大纲

指令二:基于回复的内容,进行内容的校正,同时提供一些背景素材,以丰富回复的内容

在你拟定的大纲中,我觉得并没有突出一些电商、短视频等移动app,比如抖音、小红书、拼多多等app在发展历程中带来的影响,请重新拟定

可以看到,在第二个指令中,基于第一个指令的回复内容并提供了新的背景信息之后,大模型就及时调整了回复的内容,按照需求将新的需求补充进去了。