我们向大模型提问,就如同去看病时向医生描述自己的症状,描述的越清楚和详细,医生给出的判断可能越准。
在大模型能力不变的情况下,大模型回复的质量,完全取决于我们提问的质量。
你可以把大模型想象成一位远方的专家,你只能通过发消息跟他互动(请教问题),显然,你给他发的信息的质量如何,直接影响到他能否正确的理解你的问题,从而正确的回答你的问题。 为此,如何写出更好的问题(即提示词),就变成了一门工程。
一、什么是提示工程
提示工程(Prompt Engineering)是人工智能(尤其是基于大语言模型如 ChatGPT 的系统)领域中的一项技术和实践,旨在通过设计和优化输入提示(prompts)来实现模型输出的最佳化,以满足特定需求。
核心概念
-
提示(Prompt)
提示是用户向模型提供的输入信息,可能包括问题、指令或其他上下文内容,用于指导模型生成期望的输出。例如:- 提示:"请用简单语言解释量子力学。"
- 输出:"量子力学是研究微小粒子如何运动和相互作用的科学……"
-
工程的意义
通过精心设计和改写提示,可以提高模型对任务的理解能力,从而生成更加准确、有用或符合需求的结果。
大语言模型并不会去理解你的问题,它只是基于你的问题,也就是你发出的提示词(Prompt),去不断的预测推理下一个字出现的概率。所以你提问时给到的提示词会非常重要,一个字的差异就可能导致大模型(LLMs)的回复会天差地别。也就有了Prompt工程,用于写出更好的提示词。
二、写出好的提示词的一些基本技巧
- 编写清晰具体的指令:在提示词中明确表达你的需求,减少模型对你需求的猜测。
- 使用分隔符:使用标点符号(如引号、反引号、尖括号等)来区分不同的文本部分,帮助模型理解输入的不同部分。
- 请求结构化的输出:如果可能,请求模型以特定格式(如JSON)返回结果,便于解析。
- 检查假设:在提示词中明确检查任务包含的假设,确保模型理解你的意图。
- 使用示例:提供成功执行任务的示例,帮助模型理解你的意图。
- 给模型时间思考:对于复杂任务,可以通过在提示词中要求模型思考一段时间,或者使用更复杂的提示词来实现。
- 迭代开发:编写好的提示词通常需要多次尝试和修改,根据模型的输出来不断改进提示词。
三、几种常见提示词写法
1、零样本提示法(Zero-shot Prompting)
含义:零样本提示不提供示例,直接向模型提出问题或任务。适用于模型已熟悉的任务或问题明确的场景。就跟你在百度上搜问题一样。绝大部分普通人都只会这种用法。这对于一些简单的、明确的问题,非常高效。但对于一些复杂的问题,效果就不好了。
举例1:
问题:江苏的省会是哪里
答复:江苏的省会是南京。
//因为这个问题非常简单,所以直接提问即可。
举例2:
问题:请将以下句子翻译成英语: “今天天气很好。”
答复:The weather is nice today.
//因为这个任务非常明确,就是让翻译一句话,所以直接向AI给出任务即可。
2、少样本提示(Few-shot Prompting)
含义:少样本提示通过提供示例,让模型更清楚任务要求。适用于复杂或自定义任务。
举例1:
问题:
请根据以下示例,为这本小说生成一个简短的介绍:
示例1:
小说名:《1984》
介绍:在乔治·奥威尔的这部经典小说中,一个被全面监控的社会里,主人公温斯顿试图寻找真相和自由,却陷入了更深的困境。这是一部关于权力、监控和人性探索的惊悚小说。
示例2:
小说名:《哈利·波特与魔法石》
介绍:J.K.罗琳的这部奇幻小说讲述了一个孤儿哈利·波特在霍格沃茨魔法学校的冒险故事,他与朋友们一起对抗邪恶势力,探索魔法的奥秘。这是一部充满魔法、友谊和勇气的儿童文学作品。
现在,请为这本小说生成介绍:
小说名:《了不起的盖茨比》
介绍:
答复:F.斯科特·菲茨杰拉德的这部经典作品描绘了20世纪20年代美国社会的繁荣与幻灭。小说通过富有而神秘的盖茨比对黛西的执着追求,展现了美国梦的辉煌与破灭,以及爱情、财富和虚荣的复杂纠葛。这是一部深刻揭示爵士时代精神和人性悲剧的小说。
//可以试着直接提问 “请问如下这本小说生成介绍:《了不起的盖茨比》”,与采用上面的少样本提示,看看回复的内容有啥区别。
举例2:
问题:
任务:基于以下开头生成一个简短的故事。
示例 1:
开头:在一个阴雨连绵的晚上,杰克走进了那家他从未见过的古老书店。
故事:他走进书店后,迎接他的是一阵昏暗的灯光和飘散的纸张香气。店主是一个年迈的老人,他看起来像是曾经见证了无数故事的开始和结束。杰克随意地翻开一本书,却发现它似乎在讲述他自己的故事…
示例 2:
开头:那只猫突然跳到了窗台上,凝视着外面的黑夜。
故事:她看着窗外的月亮,仿佛能看到远方的某个地方,那个她曾经离开的家。风吹动了窗帘,带来了一股熟悉的气息。猫咪似乎在等待着某个神秘的访客…
请继续生成一个故事,基于以下开头:
开头:在城市的边缘,所有人都在急匆匆地走向地铁站。
故事:
答复:
在城市的边缘,所有人都在急匆匆地走向地铁站。李娜也不例外,她的步伐匆忙,心中却充满了期待。今天是她第一次参加城市探险者的秘密聚会,一个只邀请那些对城市历史和隐藏角落充满好奇的人的聚会。
当她穿过人群,终于到达地铁站时,她注意到了一个与众不同的标志——一个古老的铜质徽章,上面刻着一只眼睛和一只钥匙。她记得聚会的邀请函上提到过这个标志,这是通往秘密聚会的线索。她环顾四周,发现了一个隐蔽的楼梯,通向地铁站的下方。
随着她沿着楼梯向下走去,周围的喧嚣声逐渐消失,取而代之的是一种神秘的宁静。楼梯的尽头是一扇沉重的木门,门上同样刻着那只眼睛和钥匙。李娜深吸了一口气,推开了门。
门后是一个巨大的地下室,装饰着古老的壁画和挂毯,中央是一个巨大的圆桌,周围坐着十几个人,他们正热烈地讨论着城市的传说和未解之谜。李娜被热烈的气氛所吸引,她意识到,这个夜晚,她将听到许多令人兴奋的故事,也许还能揭开一些城市的秘密。
// 可以试着这样直接提问“请以下面的信息为开头,帮生成一个故事:“在城市的边缘,所有人都在急匆匆地走向地铁站。”,看看有什么回复。
3、逐步推理提示(Chain-of-Thought Prompting,COT)
含义:逐步推理提示通过引导模型分步思考,适合逻辑复杂或需要多步计算的任务。
说明:有时可能只需加上一些辅助词,如“一步步的回答”等,就能让大模型的回复质量提升。
举例1:采用普通方式提问
问题:Strawberry里有几个r?
答复:"Strawberry" 这个词里有2个"r"。
// 可以看出,这个回答是错误的。这是个经典的问题,很多大模型都回回答错误。这个问题验证了大模型在推理方面的不足。
下面我们换种问法。
问题:Strawberry里有几个r?请按如下思路来回答:先把这个单词中的每个字母列出来,对于字母是r的标记为1,非r的标记为0,把所有的1加起来就是问题的答案。
答复:
好的,我们按照这个思路来计算单词"Strawberry"中"r"的数量。
1. 列出单词"Strawberry"中的每个字母:
S, t, r, a, w, b, e, r, r, y
2. 对于每个字母,如果是"r"则标记为1,否则标记为0:
0, 0, 1, 0, 0, 0, 0, 1, 1, 0
3. 把所有的1加起来:
1 + 1 + 1 = 3
所以,单词"Strawberry"中有3个"r"。
// 可以看出,我们通过引导的方式,大模型就能给出正确的答案。
上面介绍的只是几种基本的技巧,还有很多方法,甚至可以让大模型(AI)来帮助写提示词。
在实际的应用中,往往需要反复提问,不断地调整,才能得出有效的提示词。 可以结合大模型的结果,去不断修改自己的提示词。如果问题大了,可以拆成小问题来问。
四、结构化提问
在复杂的问题中,有很多结构化的提问方式,这往往会提升大模型的回复效果。一般采用markdown的语法,markdown语法很简单,上网一搜就知道。
五、追问
很多大模型都支持追问,当大模型回答不清楚,或不正确时,你可以追问。
也可以将各种追问信息,组织成一个完整的提示词,开启一个新的会话,去提问。
总之,在与大模型的交互过程中,如何写好提示词,这非常重要,这有很多方法和技巧,但更需要去实践,去使用。
对我们人来说,大模型目前是一个工具,工具需要去多用,才会熟练掌握。
下面是两篇文章,可以学习下:
编写高质量Prompt的14个有效方法
标签:提示,prompt,示例,--,模型,问题,AI,Prompt,提问 From: https://www.cnblogs.com/51kata/p/18572574