文章目录
- 前言
- 幻觉现象
- 提示词的结构
- 提示词技巧整理
- 提供详细的场景上下文
- 六何分析法
- 角色扮演
- 分步提问
- 样本提示
- 多维提问
- 使用Markdown格式输出长篇文章
- 输入结构化
- 三引号
- #号
- 分割线
- 其他输入结构化的方法
- 输出结构化
- 通过指令实现输出结构化
- 通过样本实现输出结构化
- 迭代式提问
- 三步连续对话法
- 提示词的“逆向工程”
- 参考
前言
AI大语言模型融入了人们的日常工作、学习和生活,学习如何用好新的AI工具已经成为每个人的必修课。但是,对于一些稍微复杂的实际问题,AI大语言模型的回答却很不稳定,经常偏离问题甚至完全错误,主要原因就是问题(提示词)写得不好。事实证明,使用恰当的提示词,可以使AI大语言模型解决问题的效果提升数倍甚至数十倍。
在每次与AI大语言模型的流畅对话中,提示词都起着至关重要的作用。如果你发现AI大语言模型的回复有点傻,这可能并不意味着AI大语言模型的能力无法满足你的需求,反而更可能是因为你没有使用精确而有效的提示词来唤醒AI大语言模型的全部潜能。
幻觉现象
在某些情况下,AI大语言模型可能会出现幻觉,即生成一些与现实不符的内容。这是因为AI大语言模型在生成语言时,不仅会从自己的知识库中搜索答案,同时还会考虑语言的逻辑结构。因此,如果模型认为一种情况虽然不太可能,但是在语言上是十分合理的,为了“讨好”提问者,它可能会努力生成这种内容,产生“一本正经地胡说八道”的效果。这种情况出现的时候很难察觉,因为模型的回答结构完整、用词准确,让你感觉十分有道理。AI大语言模型输出的内容可能并不一定是真实存在的,AI大语言模型可能会给出看似合理但实际上是错误的回答。顾名思义,幻觉指AI大语言模型生成自然流畅,语法正确但实际上毫无意义且含虚假信息,即事实错误的文本,以假乱真,就像人产生的幻觉一样
提示词的结构
由于提示词可以由任何文本组成,甚至不要求是一个完整的句子,因此,提示词从本质而言是没有什么固定格式或语法的。但是,随着使用的提示词越来越多,你可能会注意到,大多数提示词可以被分为几个部分。
一个提示词可以包含以下任意一个或多个成分。
(1)指令(Instrument):这是你希望AI大语言模型执行的具体任务或指令。
(2)上下文(Context):历史情况、环境信息和前后对话等附加上下文,可以引导模型理解更具体的情景,做出更好的响应。
(3)输入数据(Input Data):我们感兴趣或将要进行处理的具体数据或问题。(输入;数据;内容)
(4)输出指示器(Output Indicator):输出的类型、格式和附加要求。(输出;格式要求)
背景
你是一个作家,需要编写一段描写友谊的短文。指令
根据以下提示编写一段文字。提示
两位主角因为共同的爱好成为朋友,后来一起克服了一次困难,感情更深厚。输出要求
短文需在150字左右,语气温暖且富有情感。
提示词技巧整理
提供详细的场景上下文
在写提示词时,一个最基本的要求是:充分提供信息。详细和具体的指令与任务非常重要,因为这能够帮助AI大语言模型更准确地理解你的意图,从而生成更好的响应结果。因此,在写提示词时,需要尽可能详细地描述任务和指令,以便模型能够在正确的方向上前进。
六何分析法
六何分析法也称5W1H分析法,是一种思考方法,最早是1932年由美国政治学家拉斯维尔提出的。其中,5W指的是Why(何故)、What(何事)、When(何时)、Who(何人)和Where(何处),“H”指的是How(何以,即“怎么做”)。使用六何分析法可以快速写出高质量提示词。
角色扮演
在引导AI大语言模型进行高质量输出时,让AI大语言模型扮演特定的角色是一种效果显著的策略。通过这种方式,AI大语言模型不仅可以采用与角色相符的语言风格和表达方式,还能模拟特定角色的思维模式和行为,使其回答的内容与实际情境或场景更为贴近,更具现实感。
角色扮演是一种很常用的提示词手段,通过角色扮演,我们可以开启一种全新的AI交互方式,让AI大语言模型的输出更具质感和深度。
分步提问
当我们在与人对话时,我们会自然地一步步提问,以确保对方理解我们的意思,也方便我们理解对方的答案。在与AI大语言模型对话时,这种方法同样适用,我们称之为分步提问。这种提问方式不仅能帮助我们更好地理解AI大语言模型的反馈,也能帮助AI大语言模型更准确地理解我们的问题,并给出更准确的答案。针对复杂的问题,我们还可以通过分步提问,让AI大语言模型完成一次性提问无法完成的任务。
样本提示
与人交流时,我们经常会使用这种举例子的策略,而与AI大语言模型的交流也不例外。有时候我们会遇到一些比较复杂或者抽象的问题,这时候如果我们能够举些例子,就可以更好地帮助AI大语言模型理解我们的问题,提高解答的准确性。这个方法在学术界被称为少量样本提示(Few-shot Prompting)。少量样本提示有很多用途,不仅可以生成符合指定格式和风格的文字,还可以用于各种其他任务,如文本分类和信息提取。如果我们只提供一个示例,就称之为单样本提示(One-shot Prompting)。
多维提问
在每次对话中,我们都试图通过提问获得想要的答案。但是,如果我们的问题比较复杂,AI大语言模型的回答经常显得不够有针对性,或过于宽泛。这时,我们就需要利用多维提问的方式,通过多个角度、多个维度的提问,来获取更全面、更发散的答案。
优化前:
我正在考虑购买一辆新车,请给我一些建议:优化后:
我正在考虑购买一辆新车,有许多方面需要考虑,如价格、品牌、性能、燃油经济性、保值率等,请分别从不同的维度给出建议。
(1)你觉得购买新车时,我应该更关注哪个品牌?
(2)在我的预算范围内,哪种车型的性能最好?
(3)在同等价格下,哪种车的稳定性最好?
(4)如果我关注燃油经济性,应该选择哪种车?
(5)哪种车的保值率最高?
使用Markdown格式输出长篇文章
Markdown格式是一种容易学习的简单的纯文本格式,用来对纯文本进行简单的排版,也是很多AI大语言模型最常用的格式之一。例如,使用ChatGPT输出长篇文字、表格时,ChatGPT经常会自动使用Markdown格式对输出进行分段和排版。
请帮我将下面的数据整理为Markdown格式表格输出
"""
序号 姓名 地址
1 张三 合肥
2 李四 上海
3 王五 北京
"""
| 序号 | 姓名 | 地址 |
| ---- | ---- | ----- |
| 1 | 张三 | 合肥 |
| 2 | 李四 | 上海 |
| 3 | 王五 | 北京 |
上面的实例是输出,也可以给输入格式为Markdown,网上有不少写Markdown格式的辅助工具,可以让你不必手动输入这些符号。有的工具支持你把Excel格式一键转换成Markdown格式,直接粘贴到ChatGPT对话框中就可以使用。
根据下列文章大纲,给文章起一个标题,并针对大纲完成完整文章的编写。
# 全球变暖的背景
## 原因
## 历史数据
# 全球变暖的现状
## 最近的气候变化趋势
## 二氧化碳的增加量
# 地球的未来
## 控制升温1.5摄氏度还现实吗
## 我们能做什么
很多AI大语言模型对话界面会自动把ChatGPT输出的Markdown格式显示成类似Word文档的格式,这样看起来就会非常美观。如果是这种情况,你可能看不到Markdown格式的符号。例如,##第一周、##第二周可能已经被AI大语言模型界面自动转换为更大的字体呈现,并隐藏了前面的#。
输入结构化
如果你尝试使用这个提示词进行提问,可能会发现AI大语言模型的输出和此处的显示不同。这是因为AI大语言模型难以准确理解这个任务,因此输出的不确定性增强了
按照本书第二章所归纳的提示词成分划分,我们可以把这个提示词进行拆解。指令(需要AI大语言模型执行的任务):把冒号后的句子翻译成英语。输入数据(要翻译的文本):请把下面这段话翻译成德语。
既然AI大语言模型不知道提示词中哪些是指令,哪些是待处理的输入数据。我们可以使用分隔符(Delimiter)将不同部分隔开,以利于AI大语言模型区分。
AI大语言模型对不同符号的理解程度和敏感度不同。例如,ChatGPT对于引号(")、三引号(""")、#、###、—、===等特定符号做了针对性的训练,因此可以有比较好的理解能力。
常用的分隔符
如果我们要分隔提示词中的不同成分,使用上述符号可以达到比较好的效果。经过测试,如果是多段的文本,增加"""会提升AI大语言模型反馈的准确性。
三引号
三引号对于多行输入非常有用。例如,我们可能有一段复杂的程序代码,希望AI大语言模型能够帮助我们找出其中的错误。如果不使用分隔符,AI大语言模型可能会混淆我们的代码和其他信息。我们可以使用三引号将代码包裹起来以避免混淆。
找出以下代码中的错误:
""""""
#号
#号可以帮助我们标明指令。例如,我们可能希望AI大语言模型将一段英语翻译成中文,我们还想让AI大语言模型保留原文的语气和风格。假如我们的提示词很长,并且有很多背景介绍,如果不使用分隔符,AI大语言模型可能会混淆我们的指令和其他内容。
分割线
分割线可以清晰地分隔不同的部分。例如,我们可能希望AI大语言模型生成一段针对某段内容(输入数据)的回答,同时也给出了一些具体的要求(指令)。如果不使用分隔符,AI大语言模型可能会混淆指令和输入数据。
请帮我解释下面的代码:
---
class Solution {public int[] twoSum(int[] nums, int target) {int n = nums.length;for (int i = 0; i < n; ++i) {for (int j = i + 1; j < n; ++j) {if (nums[i] + nums[j] == target) {return new int[]{i, j};}}}return new int[0];}
}
其他输入结构化的方法
除了使用上面的方法进行输入结构化,还可以使用别的方法。假如你是软件开发人员,熟悉JSON、XML格式;或者你是文档写作人员,熟悉Markdown、CSV表格等格式;它们都是很好的结构化手段,因为这些文档的格式是比较规范严谨的,一般不会让AI大语言模型产生歧义。例如,ChatGPT已经使用大量上述格式的文档进行了预训练,非常熟悉这些格式的规则。
请根据下面的JSON格式对象转换为JavaBean,类名为UserBean
"""
{"username": "string","password": "string","email": "string","age": 0,"address": "string"
}
"""
输出结构化
AI大语言模型在输出内容时具有一定的随意性,输出的格式可能是不固定的。通过输出结构化,AI大语言模型在输出内容时,会使用你指定的格式。
对于希望使用输出结构化的相关场景:
【1】 希望输出的内容具有指定的结构、顺序和长度。
【2】 希望方便软件来对生成的内容做进一步操作,比如要求输出为CSV格式,或者JSON格式等等,方便后续流程的处理解析。
【3】 希望输出结果的格式保持稳定,不要变来变去
【4】 希望限制输出内容的信息量,不要输出多余内容。
通过指令实现输出结构化
帮我转换下面的JavaBean,要求以JSON格式输出
"""
public class UserBean {private String username;private String password;private String email;private int age;private String address;
}
"""
通过样本实现输出结构化
有的时候,AI大语言模型可能不够听话。虽然你已明确告诉它输出的格式,但它输出的格式依然不正确。还有一些时候,你可能希望采用一些你自己定义的输出格式。这时候,你可以使用另一种方法引导AI大语言模型输出。这个方法采用了技巧中少量样本提示的思想。
迭代式提问
AI大语言模型的魅力之一就是支持连续对话,因此你可以把人与人之间交流的这种方式带入AI大语言模型,这就是所谓的迭代式提问。在AI大语言模型场景中,这个策略很常用,因为我们的想法有时并不清晰,无法一次性给出精准的问题。这时,我们可以先提出一个模糊的问题,从AI大语言模型的回答中获取灵感,然后逐步细化问题。同样,我们也可以通过持续地进行迭代式提问,引导AI大语言模型逐步改进答案,增加细节,修正错误,甚至产生更多的创意思维。
三步连续对话法
第一步:生成样本 首先,你可以让AI大语言模型生成一个策划方案的大概框架或示例,而不是一份完整的策划方案。这可以帮助你了解AI大语言模型的思考方式,并提供一个初步的方案供你参考。
第二步:对样本进行修正 接下来,你可以根据AI大语言模型给出的样本进行修正,指出其中的错误,或者提出你的需求和想法。
第三步:生成内容 最后,你可以让AI大语言模型根据你的修正,生成最终的策划方案。
示例:
提问1:请给我一个公司年会策划方案的大概框架。
提问2:这个框架不错,但我希望在策划内容中增加一些创新的元素,如虚拟现实游戏。还有,我希望晚宴有更多的娱乐活动。
提问3:好的,请根据上面的讨论,给我一个完整的包含虚拟现实游戏和晚宴娱乐活动的公司年会策划方案。
简单说明:首先描述主题,然后不管大模型回到好坏都让它继续优化下,最后输出结果。
提示词的“逆向工程”
提示词的逆向工程,主要是让AI大语言模型分析文本,并尝试生成一个能够产生类似结果的提示词。
让我们通过一些实例来深入理解这个过程。假设你在网络上看到了一篇风格独特、令人难以忘怀的小红书风格的音乐推荐笔记,你被其生动鲜活的语言和个性化的推荐深深吸引,你希望能够生成类似的文本。这时,你就可以尝试使用逆向工程的方法,将这篇笔记的内容输入AI大语言模型,并提供指令让ChatGPT-4对其进行分析。
###
分析以下文本,给出可以生成这个类型文本的完整的Prompt(提示词),包含文本的类型、文风、角色、风格、语气、长度、段落和emoji等内容。请直接输出结果,不要输出其他内容:
###
具体内容...
参考
《学会提问,驾驭AI:提示词从入门到精通》