链载Ai

标题: Prompt技巧篇:让chatgpt输出更好的答案 [打印本页]

作者: 链载Ai    时间: 1 小时前
标题: Prompt技巧篇:让chatgpt输出更好的答案

技巧1:To Do and Not To Do

在问答场景里,为了让 AI 回答更加准确,一般会在问题里加条件。比如让 AI 推荐一部电影给你 Recommend a movie to me 。但这个 prompt 太空泛了,AI 无法直接回答,接着它会问你想要什么类型的电影,但这样你就需要跟 AI 聊很多轮,效率比较低。

所以,为了提高效率,一般会在 prompt 里看到类似这样的话(意思是不要询问我对什么感兴趣,或者问我的个人信息):

DONOTASKFORINTERESTS.DONOTASKFORPERSONALINFORMATION.

如果你在 ChatGPT 里这样提问,或者使用 ChatGPT 最新的 API ,它就不会问你问题,而是直接推荐一部电影给你,它的 Output 是这样的:

Certainly!Ifyou'reinthemoodforanaction-packedmovie,youmightenjoy"JohnWick"(2014),directedbyChadStahelskiandstarringKeanuReeves.ThemoviefollowsaretiredhitmannamedJohnWickwhoseeksvengeanceagainstthepeoplewhowrongedhim.It'safast-pacedandstylishfilmwithlotsofthrillingactionsequencesandanengagingstory.Ifyou'relookingforsomethingthatwillkeepyouontheedgeofyourseat,"JohnWick"isdefinitelyworthawatch!

但如果你使用的是如 Davinci-003 这样的模型,它的 Output 很可能是这样的,它还会问你的兴趣爱好:

Sure, I can recommend a movie based on your interests. What kind of movie would you like to watch? Do you prefer action, comedy, romance, or something else?

所以 OpenAI 的 API 最佳实践文档里,提到了一个这样的最佳实践:

Instead of just saying what not to do, say what to do instead. 与其告知模型不能干什么,不妨告诉模型能干什么。

技巧2:增加示例

直接告知 AI 什么能做,什么不能做外。在某些场景下,我们能比较简单地向 AI 描述出什么能做,什么不能做。但有些场景,有些需求很难通过文字指令传递给 AI,即使描述出来了,AI 也不能很好地理解。

比如给宠物起英文名,里面会夹杂着一些所谓的名字风格。此时你就可以在 prompt里增加一些例子,我们看看这个例子:

Suggestthreenamesforahorsethatisasuperhero.

Output 是这样的,第一个感觉还行,第二个 Captain 有 hero 的感觉,但 Canter 就像是说这匹马跑得很慢,而且三个都比较一般,不够酷。

ThunderHooves,CaptainCanter,MightyGallop

技巧3:使用引导词,引导模型输出特定内容

在代码生成场景里,有一个小技巧,上面提到的案例,其 prompt 还可以继续优化,在 prompt 最后,增加一个代码的引导,告知 AI 我已经将条件描述完了,你可以写代码了。Better:

CreateaMySQLqueryforallstudentsintheComputerScienceDepartment:Tabledepartments,columns=[DepartmentId,DepartmentName]Tablestudents,columns=[DepartmentId,StudentId,StudentName]SELECT

在 prompt 的最后增加 SELECT 可以很好地提示 AI 可以写 SQL 代码了。

同样的道理,如果你想让 AI 写 Python 代码,那 import 会是比较好的提示。但需要注意,这个只是告知 AI 可以写代码了,并不能告知 AI 写何种代码,你仍然需要在 prompt 里增加提示,告知 AI 要生成何种语言的代码。

技巧4:增加 Role(角色)或人物

前面提到的改写例子,我在 prompt 里加了 Role 让其更易于阅读,这个优化方法是 OK 的。也很常用,比如你想将你写的 Email 改得更商务,则只需要加 business 相关的词即可。

我再介绍一个更有效的技巧,就是在 prompt 里增加一些 role(角色)相关的内容,让 AI 生成的内容更符合你的需求。

比如还是上面那个 rewrite 的例子,我在例子前加入这样的一段话,我让 AI 假设自己是一个小学老师,并且很擅长将复杂的内容转变成 7、8岁小朋友也能听懂的话,然后再改写这段话:

Youareaprimaryschoolteacherwhocanexplaincomplexcontenttoalevelthata7or8yearoldchildcanunderstand.Pleaserewritethefollowingsentencestomakethemeasiertounderstand:

Output 就变成了下面这样。不管是用词,还是语法,看起来都更容易懂了。

技巧5:使用特殊符号指令和需要处理的文本分开

不管是信息总结,还是信息提取,你一定会输入大段文字,甚至多段文字,此时有个小技巧。

可以用“”“将指令和文本分开。根据我的测试,如果你的文本有多段,增加”“”会提升 AI 反馈的准确性(这个技巧来自于 OpenAI 的 API 最佳实践文档)

感谢 CraneHuang6 的提醒,这里还能用 ### 符号区隔,不过我一般会用“”“ ,因为我有的时候会用 # 作为格式示例,太多 # 的话 prompt 会看起来比较晕

像我们之前写的 prompt 就属于 Less effective prompt。为什么呢?据我的测试,主要还是 AI 不知道什么是指令,什么是待处理的内容,用符号分隔开来会更利于 AI 区分。

Pleasesummarizethefollowingsentencestomakethemeasiertounderstand.OpenAIisanAmericanartificialintelligence(AI)researchlaboratoryconsistingofthenon-profitOpenAIIncorporated(OpenAIInc.)anditsfor-profitsubsidiarycorporationOpenAILimitedPartnership(OpenAILP).OpenAIconductsAIresearchwiththedeclaredintentionofpromotinganddevelopingafriendlyAI.OpenAIsystemsrunonthefifthmostpowerfulsupercomputerintheworld.[5][6][7]TheorganizationwasfoundedinSanFranciscoin2015bySamAltman,ReidHoffman,JessicaLivingston,ElonMusk,IlyaSutskever,PeterThielandothers,[8][1][9]whocollectivelypledgedUS$1billion.Muskresignedfromtheboardin2018butremainedadonor.MicrosoftprovidedOpenAILPwitha$1billioninvestmentin2019andasecondmulti-yearinvestmentinJanuary2023,reportedtobe$10billion.[10]

Better prompt:

Pleasesummarizethefollowingsentencestomakethemeasiertounderstand.Text:"""OpenAIisanAmericanartificialintelligence(AI)researchlaboratoryconsistingofthenon-profitOpenAIIncorporated(OpenAIInc.)anditsfor-profitsubsidiarycorporationOpenAILimitedPartnership(OpenAILP).OpenAIconductsAIresearchwiththedeclaredintentionofpromotinganddevelopingafriendlyAI.OpenAIsystemsrunonthefifthmostpowerfulsupercomputerintheworld.[5][6][7]TheorganizationwasfoundedinSanFranciscoin2015bySamAltman,ReidHoffman,JessicaLivingston,ElonMusk,IlyaSutskever,PeterThielandothers,[8][1][9]whocollectivelypledgedUS$1billion.Muskresignedfromtheboardin2018butremainedadonor.MicrosoftprovidedOpenAILPwitha$1billioninvestmentin2019andasecondmulti-yearinvestmentinJanuary2023,reportedtobe$10billion.[10]"""

技巧6:通过格式词阐述需要输出的格式

这个技巧是技巧 2 的变种,比较常用于生成文本场景。其实在场景 7 中,你也可以用到这个技巧。

假设你想让 AI 总结一篇非常非常长的文章,并且按照特定格式给你总结,那你可以在文章前面明确输出的格式(为了不占用太多显示空间,我省略了正文内容,你可以在 OpenAI 的 Playground 看到完整案例)。它的意思其实是让 ChatGPT 按 Topic 总结,每个 Topic 里按照无序列表(就是里面那个 -)将每个 Topic 的主要观点罗列出来。

技巧7:Zero-Shot Chain of Thought

基于上述的第三点缺点,研究人员就找到了一个叫 Chain of Thought 的技巧。

这个技巧使用起来非常简单,只需要在问题的结尾里放一句 Let‘s think step by step (让我们一步步地思考),模型输出的答案会更加准确。

技巧8:Few-Shot Chain of Thought

要解决这个缺陷,就要使用到新的技巧,Few-Shot Chain of Thought。






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5