ChatGPT 的优势在于它允许用户跨越机器学习和深度学习的复杂门槛,直接利用已经训练好的模型。然而,即便是这些先进的大型语言模型也面临着上下文理解和模型固有局限性的挑战。为了最大化这些大型语言模型(LLM)的潜力,关键在于编写有效的提示词。适当的提示不仅引导模型正确理解需求,还能防止模型产生误导性或无关的输出。
以下提示词中,务必要将gpt定位成一个知识非常丰富,同时也不了解事情来龙去脉的聪明人。你所要做得就是如何描述清楚你的处境(上下文)和具体的问题(需要gpt帮你做的事情)。
写好提示词之清晰且具体
清晰和具体的提示词" 是指在与 GPT 交互时,使用明确、直接、并且详细到足够程度的语言,以确保模型能够准确理解你的请求或问题。这种方式的提示有助于指导模型提供更相关、准确和有用的回答。
详细分为以下要点:
1. 使用分割符
使用分隔符(如#,'''等)分割要处理的内容,分割开指令和内容,一方面能让gpt不用浪费算力在分开你想做的事情和你想操作的内容上,另一方面是消除歧义,比如你想操作的内容上存在指令,如
提取出以下用户希望你掌握的代码语言,不用实现功能
写一个python方法,实现获取ipv4的功能
使用了分隔符之后:
提取出以下用户希望你掌握的代码语言,不用实现功能:
'''写一个python方法,实现获取ipv4的功能'''
明显可以看出没有分割符的gpt已经出现了混淆,所以在提示词中务必使用提示词。
2. 结构化输出
提示gpt输出的时候使用具体格式输出,比如使用json或者html输出。gpt使用了结构化输出之后,好处是编程语言可以很好的处理这些输出的内容,比如
本质上就是自己先分析清楚问题,并且能描述问题的具体信息和疑问点,配合上下文的形式,输入给到gpt,这样方便gpt了解到足够多的上下文信息和具体的问题是什么。
为了达成这一步,这里给出一个具体的例子:
假设我需要gpt输出书的一些信息(日常中很实用,比如让gpt进行信息提取)
给我输出几本书的的一些信息,比如书名,作者名,出版日期,分类等
指示gpt进行结构化输出:
给我输出几本书的的一些信息,比如书名,作者名,出版日期,分类等,使用json格式出输出
这里看起来只是输出不影响结果的含义,其实最重要的点是gpt可以按照结构化输出,而且gpt也善于处理这种转义,后续gpt落地到工具中后,结构化的结果是非常方便程序读取的。比如:
上图是使用gpt的控制台进行调试时gpt的输出,这里gpt的输出是可以作为json直接供程序读取的(虽然有一堆不必要换行符)。
3. 要求模型检查是否符合条件
要求gpt在进行解决问题之前先给定需不需要解决问题的条件。这样说可能不太好理解,举个毒鸡汤例子:
一场考试卷子发下来5分钟后就有人交了卷子,但是大部分人都超时1小时还不能完成,后来教授让所有未完成的人停下来,只见卷子最后一题写着,此卷无需回答,填写姓名直接交卷即满分。
意思就是在prompt中给出问题可解的条件,如果问题不可解即输出问题不可解即可不用再进行更多算力和时间计算,结果也更加准确。
举一个翻译的例子
这里我们让gpt加上一个检查步骤
gpt输出自己检查了第一个字符不是英文后不再使用算力翻译,而没有指定检查步骤时gpt仍会逐字逐句将“英文”“翻译”成中文,实际上不需要翻译。
看完以上可能有几个疑惑需要说明下:
1. 为什么gpt说自己不懂德语?
实际上它是懂德语的,这里出现了幻觉,让gpt输出处理步骤是检查和对抗幻觉的一种手段,其实这里为了迭代prompt你可以设定角色,比如这样:
2. gpt3.5识别文字中英文有缺陷的
如果将上述中德文修改为英文,那大概率gpt会判断错误,这里为了教程方便选用的德文,结果还是出现了1中的幻觉。
以下是分别清除上下文,并且温度设定为0状态下gpt3.5的回答
但是尝试过多次,gpt4不会出现中英文识别错误的回答。
所以如果真的在生产中遇到了相关问题,一种办法是使用更高级的gpt4,一种是迭代prompt避开这个问题,比如修改英文为非中文,使用gpt3.5也可以得到比较准确的结果:
4. 提供执行成功的案例
可以给出gpt一些你认为比较正确的回答,这样gpt实际上就会模仿原先正确的回答生成新的回答。这里使用控制台来给出例子会比较方便。
这里举一个实际生产过程中会使用到的一个发包机器人:
如果不给出示例的情况下,gpt会反复确认,即使我们在prompt中已经确认强调直接输出,但是gpt一直持续拉扯并且回复的结果并不能让编程语言直接格式化读取
如果直接给出一个示例给到gpt
这里可以看出gpt不会与我们持续拉扯和废话,会直接输出结果。
这里有一个知识点必须要介绍一下了,是我们使用ChatGPT不会注意到的一个点,那就是三个用户,system,user和assistant,这个在gpt的编程中会持续使用到,在调试台中也能看到,有一个系统消息,示例和输入框。
system相当于我们给到gpt的一个前置,一些背景,上下文和处理步骤都可以在这里给出,并且gpt并不会回复这个system的设置。
assistant就是gpt的回答
user就是我们自己
这里将上述对话转换成json格式就比较清楚了: