Prompt设计优化技巧分享 -- 知识铺
举个例子,当你让一个学生在1秒钟内回复你
3424213+5421321321=?
等于多少?在学生没有打草稿并且在1秒钟回复你的情况下,除非他提前背过答案或者是神算,否则他可能随便编你一个随机的错误答案给你。
GPT就好像这个学生一样,你需要让它有一定空间分析你提出的问题,打个推理过程的草稿,再组织草稿里面的各个部分之间的关系,最终再得到答案,这样的好处有两点:
- 答案更加关联你提出问题的本质。
- 即使答案是没有帮助的,但是推理过程中用户也可以从中收到一定启发。
GPT的Transformer原理大概简言之就是:
每次输出下一个字,都由前面用户的输入 + GPT已经输出的内容来决定。
因此,前文中的推理过程很大程度上影响最终的那一个结果,类似于如果前面内容已经很糟糕了,后面的内容也不会很理想。所以这个推理过程要么出现在你的输入中,要么就交给GPT一开始就推理,而且一定要强调输出推理过程。
海报文案生成案例(优化前)
来,家人们,直接上例子~(我前同事写的Prompt哈哈)~:
|
|
我们来分析下这个Prompt,可以看出写的比较仓促,纯自然语言Prompt,内容比较散乱,比较考验GPT的能力。 然后使用了one-shot示例,通过一个对话示例来强行纠正后续生成的内容导向。
我们来试一下GPT3.5的效果:
我们可以看到,效果基本上是没法用,呵护城市繁华妆容是什么鬼哈哈哈哈哈,还有“城市女性”、“都市女性”这些词汇,就是用户输入的提示词里面的目标客户:“都市女性”,可是生成的内容里面直接把“都市/城市女性”生搬套过来用了,这根本就不是所谓的人工智能,只是一个会扩写内容的机器而已。谁看到这个海报文案会把自己带入到这个“都市女性”的名词当中去,受众女性也不会把自己主观带入到“都市女性”这个人群中去。
既然这样,我们来给GPT4看看效果:
连续生成了两次,生成效果也是让我笑的好一会儿,“18-35岁的都市女性,让我们的防晒隔离霜守护你的美丽。”,哈哈哈哈哈哈对不起我不是笑我同事写的Prompt不行,是这个GPT4太可爱了哈哈哈哈哈。
海报文案生成案例(如何优化?)
收!我们回到正题!
我们来看看怎么优化这个小同事留下来的Prompt。
你会发现即使Prompt中要求GPT按照一个简单的推理流程也没有得到理想的输出:
首先,你要明确这条文案要达到的营销目的: 然后,你要考虑你要面向的目标客户群: 再然后,你要确定产品的卖点和特征: 最后,你要控制这条文案在25-30字之间。
为什么会这样呢?
我们通过输出来看,GPT好像并没有按照用户给定的逻辑线路的要求进行输出,而是直接输出了答案。
效果也显然易见,就像是我前文提到的,不假思索的回复,一种仓促的回复。
为此,我们需要为它定义推理过程和框架。
我们来回到问题的本质,他希望用户输入「产品名称」「目标客户」以及「产品卖点」,然后生成海报文案。
稍微思考下,如果我们是海报文案的设计师,我们会怎么从用户给定的这些数据,生成一些优质的海报文案?
我们观察一下刚才出现的一些问题:
- **呵护城市繁华妆容:**显然没有把目标人群理解到位,乱来的咯
- **18-35岁的都市女性:**用户输入这个目标人群,真的希望答案中出现“18-35岁的都市女性”这个内容吗?显然不是,用户只是希望答案能够偏向于适用于该人群,所以问题的本质是,需要GPT去解析这类人群的特点,而且是偏向于产品的需求痛点。
- **回复的格式不稳定:**我们看到无论是GPT3.5还是GPT4,在输出的格式上,都没有一个统一的格式,导致我们无法去控制稳定的结构给用户。
所以,我们不单单是让GPT列出「人群的特点」和「卖点的本质」,还要多加一步**「如何人群特点和卖点」**来进行设计海报文案。
因为我尝试过,只是列出前面两步,对于最后的海报文案生成效果,还是无法很好的利用人群特点和卖点本质相结合进行生成,所以需要这一步推理草稿来铺垫GPT最后生成内容。
海报文案生成案例(优化后)
是不是有点道理?来我们优化「亿」下:
|
|
我们来简单分析一下我写的这个Prompt,这里使用了我经常编写Prompt的结构(我后续还有更优的结构版本) 这其中包含一些内容块:
- Profile:表示角色信息和描述,让ChatGPT知道自己充当什么样的角色。
- Goals:告诉GPT要达到什么样的目标和效果。
- Constrains:偏向于告诉GPT不要做什么事,用来纠正它。
- Skills:跟你写这个岗位擅长什么技能一样,你可以让GPT告诉你这个岗位需求,写简历一样2333~
- Workflows:这里是我编写思维链的地方,这一块内容其实可以优化省略掉,集成到OutputFormat中。
- OutputFormat:这里规定ChatGPT按照什么样的格式输出,这很重要,因为像推理过程这些比较重要的内容,如果你没有严格让GPT进行推理,它可能会忽略某几步推理过程。
最后,我使用Zero-shot示例,也就是没有示例😂,这样叫比较好听,直接让告诉GPT我输入了什么。
好了好了,我知道你们想看输出效果,来来来上才艺!
我们来看GPT3.5的效果:
时光匆匆,肌肤静好,工作闲暇,一瓶随行,防护呵护两不误!
我们来看看GPT4的效果:
我们来换一个产品输入试试:
产品名称:彩妆定制服务 目标客户:25-40岁的中高收入职场女性 产品卖点:七天免费体验,数量限定
来看看GPT3.5的效果:
时间有限,美丽无限,彩妆定制服务,数量有限,抢先预约!
GPT4的效果属实惊艳到我:
你的时间很贵,我们的彩妆一步到位。彩妆定制,让你的美丽无法复制。
天呐,这还压上韵了,可以可以,这效果相比之前已经非常可以了。
而且,无论是GPT3.5还是GPT4的最后的海报文案效果,其实不重要了,这个推理过程可以给用户很多启发,即使海报文案最后的结果不尽如人意,其推理过程对目标人群的解析、产品卖点的解析以及「如何结合目标人群特点和产品卖点」的思考过程,都能够帮助用户去设计海报文案,拓宽思路。
这是我写过最让我满意的Prompt应用场景了哈哈哈哈
二、一些待验证的新Prompt设计的思考
生成的内容尝试先发散,再收敛成框架
使用内容格式固定的Prompt对GPT3.5来说效果提升较好,但对GPT4来说有点负优化,像是约束了它的创造力。应该设计一种过程是放开式无模板的内容创作作为模型能力的发散,然后最后再通过一个模板进行整合信息,输出目标内容。
Prompt设计优化,模板中的存在必要性探讨
模板中的Goals、Constrains、Skills、Workflows是否有存在的必要?好像围绕一个OutputFormat去编写就可以了,参考「分享一些我的原创Prompt」中的「美食艺术家」部分,移除了Workflows效果可行。
模糊语义的解决方案:数字权重在规则、技能和约束中的应用
我们平时说“熟练”“擅长”“必须”“一定”等等词汇,先撇开gpt对于中文词语理解能力不谈,哪怕是我们自己给词分重要优先级也分不清楚,每个人对于这些词的优先级排序都不同,属于主观理解,是模糊不稳定的,交给gpt判断容易丢失信息,使用权重数字的方式,给rules,skills和constrains中每一条不同的item后面添加权重数字,告诉gpt需要往权重更高的靠,如果违反规则将会扣分,它的目标是为了遵守规则得到更高分,进而围绕规则进行推理计算,这是一种解决模糊语义的方式,我们加入客观的数字评分来优化gpt偏向哪些rules多点。
一轮QA,把多轮迭代的事情做了
有蛮多场景,我们是觉得需要多次重复的Prompt对话轮询才能做的事情,举个例子哈,我相信不少人这么玩过:
- 让ChatGPT充当评委,对你的方案/文案提出一针见血的十个反问。
- 然后让ChatGPT充当方案设计者,根据评委提出的十个反问再提出十个解决方案。
以此类推,多次迭代,不断完善方案,在可控、理想的情况下,方案会越来越好。
但是问题来了,我每轮都要更新方案,重新发给ChatGPT,再整理回复到方案中。
有没有一种更方便的方式??多轮对话还可能存在中间环节不稳定的情况等等。
一轮对话能不能解决??
我们假设ChatGPT有空间推理计算能力,那我们在Prompt中让GPT进行十次迭代后,把最后一次方案输出即可,怎么设计才能保证它能真的像模像样的迭代了十次,而不是我告诉它输出最后一次,它输出了但是其实跟一次没区别,因为没有推理过程。
伪代码的Prompt逻辑设计
有时候可能我用言语无法清晰地表达我的需求,也有可能ChatGPT无法理解你所说的“迭代十次”的过程。我通过伪代码
的表达形式,能够让ChatGPT理解我的迭代过程的详细情况,例如我想说在**一轮QA,把多轮迭代的事情做了**
这个部分里引入第三个角色:方案整理员,用来整理评委和方案设计者的讨论结果来修改已有的方案文案。我想表达好这个过程,其实也蛮费劲的,尤其是让ChatGPT理解且按理想情况去输出更费劲。
有没有一种可能,我通过伪代码可以让ChatGPT更好的理解这个过程。
|
|
最后,让ChatGPT输出这个最终方案给我即可。
不过我觉得,需要有一些简短的表达方式来让GPT精炼地输出这个迭代过程,而不是直接就让他给个最终方案,因为这样可能需要模型本身就存在内部一个计算能力吧,才有计算出来内容直接输出给你的最终方案的可能,否则的话,还是需要推理过程,来形象表达比如“正在执行第一次推理…”、“正在执行第二次推理…”….最后再输出最终方案,因为ChatGPT输出的内容有限,如何在一次回复中既能让推理过程存在且不占用最终方案的tokens,这需要取得一定的平衡。
分享一些我的原创Prompt
Custom instructions Prompt
经过小小的测试,发现这部分Prompt并不占用后续输入的tokens,请放心食用。 这个Prompt之所以“打通任通二脉”,是因为它完美地结合了逻辑性、情感性和用户友好性。
我自己写的一个ChatGPT中的Custom instructions Prompt:
|
|
翻译为中文是:
|
|
**为什么要用英文?**因为实测过,英文效果比较好,能够让GPT理解我的每一条规则,而不至于丢失其中某条规则。
这样设置的好处是:
- **用户的提问是模糊的:**ChatGPT可以思考用户问题的本质问题是什么,思考在用户的问题前面。
- 对问题本身进行推理解答:「一步步思考并推理,输出推理过程」这是一句有魔力的话,使得ChatGPT能够动态根据用户的问题进行过程性理解和推理,不需要固定一个推理框架。
- **保持中立客观:**是希望ChatGPT能够尽量减少「用户说啥都是对的」可能性,以及对问题的看法,种族的偏见等等,消除这些因素,我希望是一个客观的回复。
- **插入Emoji表情:**这样你就能感受到ChatGPT其实能够像NewBing一样有趣,你真的能感受到它的情绪。
- **使用markdowon表格采集信息:**这一步妙哉,因为推理过程虽然对ChatGPT来说是一个可能的优化,但是对有些用户来说觉得比较“啰嗦”,那么最后一步就是根据已经推理的前文内容进行总结记录成markdown表格,这样用户即便只关注表格本身,也能够获取到大量的信息,有种80/20原则的感觉,只关注20%的信息,就可以了解其余80%的内容。
- **中文回复:**我已经不想在每次对话都来一句「请使用中文进行回复」,我相信这是每个人都会遇到的,痛!太痛了!而且加了句「如果没有指定任何语言」可以给后续对话中指定其他语言留足了权限和空间。贴心吧?
- **不要担心回复被打断:**这句话是学习Mr. Ranedeer中的其中一个Prompt,因为我也发现,当我们没有这么强调的时候,GPT会在回复到一半的时候突然省略掉一些关键代码和文段,导致我还需要想办法让它输出那段内容,这样强调可以告诉它不必担心啦~
**尖锐的幽默的回复:**家人们!这个真的很好玩!!这个是我学习自「李继刚」的暴躁版GPT里摘抄的一段内容并改写,我觉得这个设定打通了ChatGPT的任通二脉,让它更像人一样回复了,说真的用了以后我不想再回去看原来的那种「迎合」的回复了,我说不出来的感觉,你看下图效果应该能感受到!
没有使用暴躁CI优化前!
在使用了暴躁CI优化后!
很明显大多数情况下我们更需要后面这种内容,需要一个直言不讳的回复,而不是阿谀奉承的附和。
隐私律师
想法来自妙鸭的用户隐私协议,群友突发奇想,然后我就顺水推舟写了这个Prompt。 Arthur也参与到本Prompt的设计当中。
|
|
美食艺术家
该Prompt的想法和初稿源自Arthur之手,我作为后续重构修改,润色了内容,加入了完整的COT思维链的描述,删除了Workflows的内容,验证下说明Workflows是可以整合进OutPutFormat的。
|
|
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/gpt/post/20240325/prompt/Prompt%E8%AE%BE%E8%AE%A1%E4%BC%98%E5%8C%96%E6%8A%80%E5%B7%A7%E5%88%86%E4%BA%AB--%E7%9F%A5%E8%AF%86%E9%93%BA/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com