OpenAI官方的提示工程指南

2024-04-12 pv

去年也简单分享过prompt engineering (提示工程),历史文章在这里:prompt工程简介🔗

这一年来,不仅已经习惯了从与GPT的交流中获取答案和灵感,也适应了GitHub Copilot不经意间给的惊喜(惊吓,写得太棒了!)。

多了一些经验和感悟。

1. 个人经历

简答来说,个人经常用到的技巧有三个,跟之前文章里谈到的原则基本一致:

  1. 清晰地描述问题

  2. 提供足够多的上下文

  3. 迭代式提问

分别说说。

你永远无法得到一个准确的答案,如果你连问题是什么都不清楚。这句话作为第一个技巧的注脚十分合适。

所以第一步,就是思考清楚你想问的问题,然后准确地写出提示词,最后丢给GPT等待回答。

至于怎么思考清楚,这个问题太大,不是今天文章涉的内容。这里要强调的是,只有清晰、具体的问题,才有可能得到一个高质量的反馈,否则就是鸡同鸭讲,毕竟目前GPT的水平,距离“读心”,还差得远。

第二点是你要给它足够多的信息,计算机领域里叫Context (上下文)。

这就很像我们人与人之间交流。有两个人在聊天,如果你中途才加入,会发现你完全听不懂他们在说什么,而此时如果旁边有人告诉你他们之前聊的内容,你就很容易参与进去。

GPT也是如此。你给的参考信息越多,它就越容易“理解”你的需求。

但是,有了前两点,还不够。

我之前也犯过类似的错误,总想着一把梭哈,一个问题,就得到最后的答案。

后来多次尝试后发现行不通。因为很多时候,一个提问里,不仅没有办法清晰地描述问题,也不能提供足够丰富的参考信息。回答内容自然差强人意。

不过没关系。我们有第三个武器。

第一次说不清楚,多说几次。

第一次信息不全,那我就多给你几次。

几轮交互下来,大体就能得到一个还不错的结果。

2. Open AI的官方指南

我今天花了点时间,读了下Open AI官方文档里的Prompt Engineering🔗

核心的观点差不多。

官方给出了六点建议:

  1. 写出清晰的指令
  2. 提供参考信息
  3. 将复杂任务分解成多个简单子任务
  4. 给模型时间“思考”
  5. 使用外部工具
  6. 系统测试变更

每点建议下,都还附送了使用技巧和示例。

因为我平时使用GPT很少涉及复杂场景,因此细节上不展开,这里不提术,只谈道。

而且我认为,工具的学习就是要实用点,用多少,学多少,在起步阶段,把握几个核心原则即可。

像那些模拟角色(Ask the model to adopt a persona)、指定步骤(Specify the steps required to complete a task)的提示词,通常都有特定的应用背景,作为普通人不需要过多关注。

官方六点建议里的前两点,与之前所谈基本一致。

第三点很有意思,拆解复杂问题。这已经不单单是一个技巧了,更是一种解决问题的思考方式和通用步骤

复杂的问题,通常涉及内容较多,很难一下子完全解决。此时合适的方案就是分割,将一个大问题拆分成几个简单的小问题,然后一个个解决小问题,最终把大问题解决。计算机领域里叫“分治(divide and conquer)”。

同样的思路,可以应用于prompt的编写上。如果一个问题很大,很麻烦,我们不妨先从几个相关的小问题入手,不断迭代式提问,最终把所有的答案收集汇总。

最后的三点,很像是对GPT不足之处的一种补充。

给模型时间“思考”,其实用到的是Chain of Thought🔗。也就是我们在迭代提问的时候,要有逻辑性,提问本身,也是一种思考。非线性的问题,GPT回答的并不好。

使用外部工具,是说GPT并非全能,也有它不擅长的领域,比如说,如果你想计算45*78,与其问它,不如用计算器。

系统测试,你只可能优化一个你可以测量的系统(Improving performance is easier if you can measure it)。这一点对于我们普通用户而言似乎意义不大,更像是给产品开发者的一句建议,毕竟稳定性对于一个产品而言是非常重要的。

3. 启发

GPT并不是一个搜索引擎,因为相较于一个客观问题,搜索引擎无疑能更高效地检索到正确结果。

GPT更像是一个能帮助你梳理混乱思路的好帮手

所以我一直觉得,Copilot(副驾)这个名字起得真是极好。

你在提问,同时你也在思考,它(GPT)有时也会误导你,因为毕竟,人也会犯错,它也有它不擅长的领域。

总之,把它放到你的工具箱吧,好好地学习如何使用,并借此放大自身优势。

就像最近,时常听闻的“超级个体(Super Individual)”。以前觉得很难,现在觉得并非不可能。

或许科技发展,就是让更多不可能变得可能了。

不过同时也要意识到,人是目的,而非工具。

(完)

参考

  1. prompt工程简介🔗
  2. Prompt engineering🔗
  3. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models🔗
在 GitHub 上编辑本页面

最后更新于: 2024/04/12 09:02:18