最近,Anthropic公司(Claude就是他们家的)的几位负责提示词的工程师们一起做了一期播客。

图片

在这期博客中,他们主要讲的是关于提示工程的东西,就是怎么跟这些AI模型交流,让它们更好地理解咱们的意思。

他们提到:跟AI对话,其实就像是跟人聊天一样,你需要知道怎么说才能让对方明白你的意思,只不过这里的人是AI模型。提示工程这个名字听起来就有点技术活儿的感觉,因为它就像是在说你要不断尝试,看看怎么说才能让AI听懂你的意思。

他们还说,随着这些模型变得越来越聪明,随着模型能力增强,提示词的编写需更加精确,避免依赖直觉,强调细节的重要性。

他们还探讨了企业级提示词与研究提示词的区别,前者注重稳定性与一致性,后者侧重于探索模型潜能。

最后,他们还预测了提示工程以后的发展:认为随着模型智能提升,提示工程的重要性和形式将会发生变化,但仍将持续存在,因为即便是最智能的模型也需要明确的指导来完成任务。

而且,提示工程可能会变得更加高级,让模型自己就能理解咱们想要什么,这样就不需要咱们每次都费劲去写提示了。

 关键要点

提示工程是试图让模型从模型中提取出最多的价值,与模型合作完成任务。

在设计模型时,不要想象用户会在框里输入完美内容,要考虑模型的理解方式。

提示工程需要考虑模型的行为模式,以及企业的用户如何与模型互动。

迭代过程中要注意提示词的错误,尝试让模型做一些超出自身能力的任务。

未来可能会出现模型直接从人类大脑中提取信息并完成任务的情况。

 以下是播客翻译全文:

1.如何让AI模型更好地理解和执行任务的方法

Alex Albert能解释一下“提示工程”吗?为什么称其为“工程”?那么,“提示”到底是什么呢?

Zack Witten我认为提示工程旨在让模型执行某些任务,从中挖掘最大的价值,与模型协作完成那些单独难以实现的目标。许多技巧归结于清晰的交流。本质上来说,与模型的交互就像是与人对话,深入了解模型的运作机制。

Alex Albert那为什么名称中包含“工程”这个词?

Zack Witten我认为“工程”的部分在于反复试验的过程。与模型的对话不同于人际交流的一点在于,你可以随时重置对话,独立地进行多次测试。当你可以开始试验并设计不同的方案时,这就是工程的成分得以体现之处。

Alex Albert你是说,当你编写这些提示时,你是在向Claude或其他API输入信息,并且能够在每次迭代中与模型互动,返回到一个干净的状态,这一过程就是所谓的工程环节。

Zack Witten此外,提示工程还涉及将提示整合到整个系统中。David和他的客户做了大量集成工作。实际上,这不仅仅是写下一段提示交给模型那么简单,实际上远比这要复杂。

David Hershey可以把提示工程视为一种对模型进行“编程”的方式,但这会让概念显得过于复杂。正如Zach所说,最重要的是清晰表达。但若将其视为一种对模型的行为编程,你需要考虑数据来源,你能访问哪些数据。

如果你正在实施RAG(Retrieval-Augmented Generation)或者其他类似技术,实际上你能利用并提供给模型的信息是什么?这就涉及到对延迟和数据量的考量。因此,许多这类思考都围绕着如何构建系统以支持模型展开。我认为这正是提示工程作为一个独立领域值得关注的核心原因,它不同于传统的软件工程或产品管理角色。这是一个专注于如何合理运用这些模型的独特领域。

Alex Albert那么在这种意义上,提示是否类似于自然语言的代码?还是完全不同的东西?

David Hershey试图将提示过于抽象化会使事情变得复杂,提示应当更为具体。然而,在很多情况下,你需要做的只是清晰地陈述任务。尽管如此,很多时候你仍然需要将一系列指令转化为结构化的输出。因此,准确性至关重要,还有一些与编程相关的工作,如版本控制,以及如何记录实验过程。这些如同代码一样重要。因此,虽然你写的是文本,但它需要像对待代码那样处理。

Alex Albert基于此,我们已经大致定义了提示工程的概念。那么,成为一个优秀的提示工程师需要具备哪些特质?

Amanda Askell最重要的能力之一是清晰表达。你需要能够明确阐述任务,以便模型能够理解。这涉及到写作的一部分。

然而,我认为一个好的作家并不一定是一个好的提示工程师。我曾经讨论过这个问题,有人觉得提示工程师的名字里不应该包含“工程师”,为什么不叫做“作家”呢?人们认为提示工程师的工作仅仅是写完一句话就结束了。实际上,为了创作一个有效的提示,我可能会在短短的15分钟内发出数百次尝试,不断调整。

因此,我认为关键是愿意迭代和观察的能力,这也是容易被误解的地方。如果提示不起作用,你需要修正它。这种迭代能力是非常重要的。同时,在撰写提示时,预先设想可能出现的问题也同样关键。例如,假设你有一个提示要求从数据集中提取所有以字母J开头的名字。你可能会首先考虑常见情况下的正确性,然后继续前进。但实际上,应该寻找那些非典型的情况。

例如,如果你的数据集中没有以J开头的名字,或者你发送的甚至不是一个数据集,而是一个空字符串,这些情况下的模型反应是什么?你需要测试这些特殊情况,并根据反馈进一步指导模型如何响应。

David Hershey在我与客户的合作过程中,我发现许多人设计模型时总是假定用户会输入完美的内容。然而,实际情况中,用户可能根本不使用大写字母,每个单词都有拼写错误……

许多人认为这就像使用搜索引擎一样,用户不会关心标点符号,而是随意抛出缺乏逻辑的问题。评估时,你可能会依据理想化、高度结构化的文本进行判断。但实际上,你需要思考用户实际会输入什么内容,他们会怎样操作。这是需要从多个层面进行深入考虑的。

Zack Witten你提到的一点让我印象深刻,即“审视模型的回应”。在机器学习领域,总是强调要检查数据,几乎成了老生常谈。对于提示工程来说,同样重要的是仔细阅读模型的输出。有些人懂得思维链(Chain of Thought, CoT),会引导模型分步思考,但他们并没有验证模型是否真的遵循了步骤。模型可能会用一种更加抽象或宽泛的方式来解释提示,而不是严格按照预期的步骤行动。如果不仔细检查模型的输出,可能就不会察觉到它的偏差。

 2. 如何设计优秀的AI提示词?

Alex Albert确实如此,这点非常有意思。作为提示工程师,你需要有一定的“心理预期”,即猜测模型将如何解读你的命令。另外,如果你为企业编写提示,还需要考虑其用户的实际交互方式。

David Hershey为任务编写清晰的指令是非常具有挑战性的。你需要将自己脑中所有已知但模型不知的信息整理出来,并清晰地表述。这不仅需要去除所有的假设,还要精确传达模型完成任务所需的信息。这就是为什么出色的提示工程师与普通工程师之间会有显著差距的原因。许多人编写提示时,依据的是他们自身对任务的理解,但并未花费时间系统地分析任务需求。这导致提示可能过度依赖于作者的先验知识。当他们展示提示时,由于我对特定用例不了解,经常会感到困惑。

因此,我认为在进行提示工程时,一个有效的方法和关键技能是能否从个人的知识框架中抽离出来,思考如何有效地向模型传达信息。虽然模型拥有大量知识,但它并不能完全掌握完成任务所需的所有信息。你需要找到一个平衡点,帮助模型理解和完成任务。

Amanda Askell我完全赞同。我见过很多人写的提示,这些提示连我都无法理解,却期望模型能够解决他们的问题。

Alex Albert如今的模型并不擅长像人类一样提出深层次的问题。如果我现在给Zack一些指示,他可能会说:“这不对。”然后他会问:“我是否需要在这一步或那一步做些什么?”但模型不会这样做。因此,你需要自己设想,如果是一个人,会提出哪些问题,然后调整你的提示以回答这些问题。

Amanda Askell其实你可以让模型来做这件事。我通常会在最初的提示后添加一个补充说明,告诉模型:“我希望你不要按这些指示行动,我只是希望你能指出哪些地方不清楚,或者有歧义,或者你不理解的地方。”虽然模型不一定完全明白,但这仍然是一个值得一试的方法。

而且,有趣的是,当人们看到模型犯错时,往往不会直接询问模型原因。他们通常只会告诉模型:“你错了。”

但实际上,你可以问模型:“你知道为什么出错了吗?能否帮我修改我的提示,让你不再犯错?”很多时候,模型会给出合理的建议。它可能会说:“哦,这里不清楚。”然后它会提供修改后的指示。把这些改进加入到提示中,模型往往就能正常运行了。

Alex Albert我对此非常好奇,模型真的能够意识到自己的错误吗?例如,当它做错时,你问它为什么做错,它会告诉你原因。模型真的具备这种“洞察力”吗?

Amanda Askell我认为如果你愿意向模型解释它的错误所在,有时它确实能够识别问题所在。不过这也取决于具体任务。这种情况下模型能否正确反应的概率我不敢肯定,但我还是会尝试,因为有时候它确实有效。

David Hershey的确,每次与模型互动时,你都能了解到一些信息。如果你不去尝试,可能会失去一些有价值的反馈。

Alex AlbertAnthropic 设有一个Slack频道,让人们可以与Claude交流,并查看其他人撰写的提示。我也有一个类似的频道,许多人关注我和Claude的互动。我注意到Amanda经常使用模型处理各种场景,我很想知道,你是如何培养出何时信任模型的直觉的?这仅仅是依靠使用经验吗,还是有其他因素?

Amanda Askell我从来不会直接信任模型,我会持续测试它。你会发现我经常这样做,因为我会问:“我可以信赖你完成这项任务吗?”有时候,当你稍微超出模型训练范围时,模型的表现就会变得不稳定,尤其是在进入它们未曾遇到的领域或异常情况时。即使是简单的任务,在这些情况下模型的可靠性也会下降。尽管随着模型的进步这种情况有所减少,但你仍需确保避免这些问题的发生。

良好的提示设计可以在实验成功与否之间起到决定性的作用。如果你的实验代码十分精细,但在提示方面却不花心思优化,对我来说是没有意义的。提示往往是决定实验成败的关键。

Zack Witten在部署时也是如此。有时候会遇到问题,觉得无法发布。但调整一下提示后,问题就解决了。

David Hershey提示词有时显得有些神秘,你总感觉有一个完美的提示可以解决你的问题。我看到很多人陷入寻找完美提示的幻想中,认为只要再努力一点就能找到解决方案。虽然你能从中学习到一些东西,但提示工程的挑战在于,这个领域充满了未知数。

 3.调试语言模型的经验与技巧

Zack Witten你们有没有什么启发式的方法来判断一件事是否可以通过精心设计的提示来实现?

Amanda Askell我通常会检验模型是否真正理解了任务。如果提示未能产生预期的结果,通常很快就会显现。如果模型明显无法完成某项任务,我不会在这方面浪费太多时间。

David Hershey你可以试着了解模型是如何思考的,询问它的思考过程及原因。这有助于判断它是否走在正确的道路上。如果感觉到它正朝着正确的方向前进,哪怕不完全准确,也值得继续尝试。有些任务确实非常困难,每次调整都可能导致结果更加偏离目标。在这种情况下,我倾向于放弃。

Amanda Askell这种情况现在已经不多见了,但当我遇到时,会感到非常沮丧。因为这种情况很少发生,当模型即使被引导也无法完成任务时,我会特别生气。

David Hershey我最近做了一个实验,将Claude连接到GameBoy模拟器上,试图让它玩《口袋妖怪:火红》。起初,它只能执行一些基本操作,例如按按钮。尽管我尝试了许多复杂的提示,但仍存在问题。特别是在需要理解Game Boy屏幕截图时,有些地方就是完全无法实现。

我花了整个周末试图改进提示词,使其能更好地解析屏幕。虽然我逐渐看到了一些进展,从完全无效到稍有成效,但依旧不够好。最终,我觉得这不是最有效的方法。与其花费数月时间在这个问题上,不如等待下一个更强大的模型。

Zack Witten你尽力让模型理解它正处于《口袋妖怪》游戏中,并解释了游戏中的元素是如何呈现的。

David Hershey最后采取的方法相当复杂,我在图像上叠加了一个网格,并详细描述了每个部分。然后我让模型重建ASCII地图,并尽可能提供详细信息。例如,玩家控制的角色通常位于网格上的特定位置。这样可以逐步积累信息。同时,还需要告诉模型图像和文本的直观理解有很大的不同。

Zack Witten因此我认为提示在图像和文本上的效果可能完全不同。这可能是因为训练数据中这类例子较少。

Alex Albert我记得我们在初次尝试多模态提示时遇到了很大困难。无论提示如何,Claude的实际视觉理解能力都无法提升。这与你在《口袋妖怪》上的情况相似,尽管提供了大量提示,它依然无法在图像中正确识别位置。

David Hershey多数情况下,我可以让它识别墙壁和角色的位置,尽管有些偏差。但有时候,你会发现它真的无法做得更好,特别是当它需要描述NPC时。玩游戏需要连续的记忆,但如果无法识别每个NPC,模型几乎什么都做不了,只会重复与同一个NPC对话,因为可能它认为那是另一个NPC。

尽管我努力让它描述NPC,比如指出这是一个戴帽子的人,但它就是识别不出来。即使放大到3000倍,只截取NPC的部分,它仍然无法辨认。我给了它多次机会,但依然无法准确识别。这让人非常沮丧。

Amanda Askell我现在很想尝试这个。我在想我会如何做。我希望你能把这些游戏角色想象成真实的人,然后描述他们是什么样子。他们看起来如何?就像对着镜子看,然后看看结果如何。

David Hershey我尝试了很多方法。最后我告诉Claude它是一个为盲人服务的屏幕阅读器。我不确定这是否有效,但感觉是对的,所以坚持了这个方法。

Alex Albert我想深入探讨一下,这可能是最常见的提示技巧之一,让语言模型扮演某种角色或身份。不过,我觉得这个技巧现在的效果有些参差不齐。也许旧模型对此反应较好,但现在可能不太有效。Amanda,我经常看到你对模型非常坦诚,比如直接告诉它整个情况。“我是一个AI研究员,在做这个实验。”你会告诉它你是谁,并给出你的名字,像是“这是和你对话的人。”你觉得这种坦诚的方式比起那些误导模型的方法更好吗?还是这只是你的直觉?

Amanda Askell:是的,随着模型能力的增强,对世界的理解更加深入,我觉得没有必要对它们撒谎。我的意思是,我个人也不喜欢撒谎。如果你在构建一个机器学习系统或语言模型的评估数据集,这与给孩子们出小测验完全不同。因此,当有人告诉模型“我是郑州富士康招聘老师,我要进行郑州富士康招聘面试”时,要知道模型了解语言模型评估。你可以问它不同类型的评估,它甚至能给出虚构的例子。所以我更愿意直接针对我真正的任务去沟通。如果我想让你构建的问题看起来像是语言模型评估,为什么不直接告诉它这就是我想做的事呢?为什么要去假装做些不相关的任务呢?我们也不会对同事这样做。我不会跟我的同事说“嘿,你是个富士康招聘老师,正在招聘富士康普工吗?”我会直接说“嘿,你在招聘富士康普工吗?”我觉得这是个启示,我倾向于直接让模型做我想要它做的事情,而不是绕弯子。

Zack Witten但有时我觉得这不仅仅是撒谎,更像是用比喻来解释思路。例如,我试图让Claude评估一张图表或图像的质量。我发现最有效的提示是问模型,如果这张图表作为高中作业提交,会得什么分数。所以我并不是在说“你是一名高中老师”,而更像是“我希望你按照高中老师的标准来评估”。

 4.如何写出有效的提示词:避免偷懒,注重细节

David Hershey这样的比喻并不容易想出来。大多数人会倾向于用默认的思维方式,你会经常看到大家找一些类似任务的仿制品,比如说你是一名老师,但其实很多时候这种做法忽略了你产品中的很多细节。我在企业的提示中见过太多这样的情况,大家都喜欢写类似的东西,因为他们直觉上认为这样更好,可能是因为模型看过更多的内容,比如它看过的高中测验比LLM评估还多。这可能确实有道理,但正如你所说,随着模型变得越来越好,我觉得更重要的是尽量具体地描述当前的场景。我总是这样建议别人,这并不是说我觉得这些比喻完全没用,像“把图表打分就像给高中作业打分”这样的比喻也许有一定道理。但这些往往是人们喜欢用的简单化的思路,试图快速理解发生了什么,或许不适用于模型。比如我会直接告诉它,你是这款产品中的助手,代表公司在产品里与人沟通。你是产品中的那个支持聊天窗口。你是一种语言模型,而不是一个人。关键是要非常具体地描述出模型所在的使用环境。

Amanda Askell我觉得有趣的是,我几乎从未使用过这种角色扮演的提示技巧——即使以前是更糟糕的模型。我觉得它本质上并不太好。过去我常常给人们这个思维实验:想象你有一个任务,你雇了一个临时工来做。这个人来了,你知道他们相当能干。他们对你的行业了解很多,等等。但他们刚刚出现,对你公司的具体情况不了解。然后他们会对你说:“嘿,有人告诉我你们这里有份工作让我做。给我讲讲你们公司的大致情况。”你可能会用一些比喻来解释,比如说:“我们希望你能识别出好的图表。这里的‘好图表’并不意味着它得完美无缺,你也不需要确认所有细节是否正确。只要图表清晰,比如坐标轴有标记,整体没问题就行。”你可能会告诉他“想象一下高中水平的好图表”,但你不会说“你是高中生”,也不会说“你是高中老师,你在看图表。”所以有时候,当我写一些提示词时,我会想象对方是一个上下文很少但非常能干的人,他对世界有很多了解。先假设这个人有一定的知识背景去尝试。如果不行,再做一些调整。但通常,我会先这么试,结果往往能奏效。

David Hershey很多客户表示他们的提示不起作用,问我应该怎么修复。我就问:“你能描述一下这个任务是什么吗?”等他们解释清楚之后,我建议他们:“你刚刚对我说的那些话,就像录音一样,把它转录下来,然后直接粘到提示词里。”这样做出来的效果往往比他们自己写的提示要好得多。我觉得很多时候,人们在写提示时,其实就是在想走捷径,有点懒惰。很多人真的就是图省事,不愿意花时间去写更具体的提示。

Zack Witten我也遇到过同样的情况,让他们把给我解释的话直接贴到提示词里,果然直接成功了。

Alex Albert我觉得主要是很多人都没有理解什么是提示词。很多人看到一个输入框时,会把它当成一个谷歌搜索框,输入几个关键词。人们总是想在提示中偷懒,用一些简单的捷径,以为一两行文字就能起到很大的作用。

David Hershey是的。在写提示词的时候不能依赖直觉、不能偷懒。

Amanda Askell偷懒会导致模型在很多边缘情况上犯错。比如,如果数据集中混入了一张山羊的图片,模型就不知道该怎么办了,这甚至不是一张图表。一张山羊的图片作为图表有多好?而如果你补充一下,比如“如果发生一些奇怪的事情,你真的不确定该怎么办,就输出:不确定”。

Zack Witten而且你也通过这样做提高了你的数据质量,因为你找到了所有搞砸的例子。

Alex Albert你们觉得模型真的有推理能力吗?是否真的能够让模型在提供答案之前详细解释它的推理过程?

David Hershey这就是我在这个问题上挣扎的地方之一。我通常支持拟人化,因为我认为它能帮助我们更好地理解模型的工作原理。但在这种情况下,我觉得把模型的推理过度拟人化可能有点问题,甚至可能有害,因为它偏离了我们真正要做的事情。我们讨论的推理是否真实?这感觉像是进入了哲学领域,而不是直接解决“什么是最佳提示技术”这个问题。虽然我很乐意接受真正的哲学挑战,但实际上,我们应该关注的是模型的表现。如果模型的结果更好,那就说明它的推理过程有效。我发现,通过构建和迭代推理过程,模型的表现确实会提高。虽然是否将这种过程称为推理或者如何分类它,可能会有不同的看法,但我只知道,这确实对模型的表现有帮助,我只在乎这个。

Zack Witten一种测试方法是,去掉模型得出正确答案所依赖的所有推理,然后用一些看起来真实但导致错误答案的推理来替换它,然后看看模型是否会得出错误的答案。我是觉得是有某种程度上的“推理”的,我不确定用这个词是否合适,但是这个推导过程是有些东西存在的。

Alex Albert我记得出现过这种情况。模型列出了步骤,但其中一个步骤是错误的,但最后它还是得出了正确的答案。所以这种推理并不完全,我们不能真正将其拟人化为推理。

Alex Albert你们觉得良好的语法、标点,在提示中是必要的吗?这会影响模型进行推理吗?

Zack Witten我一般会尽量保持语法和标点正确。我觉得这并不是必须的,也不一定会有大的影响。但我认为更重要的是要有一种对细节的关注。就像Amanda之前提到的,你应该对提示的细节投入像编写代码时一样的认真和爱意。写了很多代码的人对某些细节有很强烈的看法,比如制表符和空格的数量,或者不同编程语言的优劣。对于我来说,我对提示的格式也有自己坚定的看法。虽然我不能说它们是对是错,但我觉得尝试培养这种细节意识是有益的。

Amanda Askell我完全不在意这些,我的提示词里面全是一大堆错别字。因为我觉得模型知道我的意思。我觉得如果概念表达得清晰,语法和标点问题就没那么重要了。我是那种更注重概念和用词的人,所以我会花很多时间去琢磨这些方面。我觉得在迭代过程中的提示词有错别字无所谓,但是在迭代到最后完成的提示词里会尽量改掉错别字。

 5.写提示词的小技巧分享

Alex Albert你们有没有什么写提示词的小技巧?分享一下。

Zack Witten阅读你写的提示词,阅读模型给的输出。然后就是多看别人写的优秀提示,多和模型沟通、尝试不同的提示词。

Alex Albert你怎么知道它就是一个好提示呢?你只是看到输出的结果正确吗?

Zack Witten是的。

Amanda Askell把你的提示给另一个人看可能会有帮助,尤其是那些对你的工作一无所知的人,这会很有帮助。然后也是:多看、多做。这很有帮助。

David Hershey我觉得要尝试让模型做一些你认为自己做不到的事情。最能让我学到提示技巧的,往往是在探索模型能力的极限时。比如说,写一封好邮件,看似简单,但实际上这过程中有很多细节需要考虑。如果你能找到一些挑战模型能力的任务,并尝试解决它们,你会发现自己学到了很多。真正的提示工程不仅仅是解决简单的任务,而是要推动模型能力的边界。即使你最终失败了,你也会获得很多关于如何使用模型的宝贵经验。所以,找一些你觉得最难的任务,尝试去完成它们,即使失败,也会从中学到很多。

Alex Albert这实际上是个很好的过渡。我的下一个问题正好围绕着这个主题。我最早了解提示工程的方式,主要是通过越狱和红队测试。这就像是试图找出模型的能力边界,了解它如何对不同措辞和用词做出反应,以及大量的试错。在讨论越狱时,模型内部到底发生了什么?

Amanda Askell我实际上也不太确定。很多人都在研究越狱背后的机制,比如说模型可能会遇到训练数据之外的输入分布。比如,当你越狱时使用很多token的长文本,这可能是在微调期间不常见的情况,这样可能会影响模型的表现。不过,我认为这是其中之一,但也有其他因素可能会影响模型。

Alex Albert我记得一些最初的越狱提示,例如,尝试让模型翻译希腊语中的句子,然后直接翻译成英语。这样做时,模型不会直接用英语开始,而是用希腊语,然后就绕过了一些安全限制。这可能与模型训练中的某些机制有关。

Amanda Askell对,有时越狱确实感觉像是一种奇怪的黑客行为。我认为,关键是了解系统如何运作,了解如何训练模型,以及如何利用这些信息规避模型的限制。对于多语言的情况,我们还需要考虑训练数据中的差异。总的来说,越狱不仅仅是黑客行为,它也涉及到对系统和训练过程的理解,并利用这些理解来绕过模型的限制。

Alex Albert我们来厘清一下企业级提示词、研究型提示词,或者仅仅是与Claude AI日常聊天中的提示词之间的区别。Zach,可以为我们解释一下吗?

Zack Witten我认为对于研究来说,你更在寻找多样性和差异性。比如我发现Amanda的提示里通常不会有什么例子,可能一两个就够了,因为模型很容易倾向于这些例子。而在我写的,或者我见过David写的提示词里,这个面向用户的提示词里例子会特别多。我甚至喜欢疯狂地加例子,直到觉得自己快要崩溃,因为想加进去的例子实在太多了。

这是因为在消费者应用中,大家非常重视稳定性和一致性。如果所有的答案都差不多,那反而是好事,你要的只是能很好地响应用户需求的答案。而在研究提示中,你更多是在探索模型的能力和潜力范围,所以太多的例子反而会限制它的表现。所以我觉得这可能是我注意到的最大区别:提示中例子的多少。

Amanda Askell就算给出示例,我也通常会尝试使示例与模型将要看到的数据不同。因为如果我给出的示例非常像它将要看到的数据,我只是认为它可能会给我一个非常一致的回应,这并不是我想要的。我并不想只是给我这种非常机械的输出。如果我有一个任务,比如说我试图从事实文件中提取信息,我可能会给它一些听起来像儿童故事的例子。另外,我个人也不太喜欢“把话塞进模型嘴里”的方式。我不会用few-shot learning来让模型照搬我的示例。我觉得这种思路有点像是在依赖预训练模型的模式,而实际上现在的RLHF模型已经有所不同了。所以是的,我认为这些就是其中的一些区别。

David Hershey我想补充一下,在进行一些日常对话的提示词迭代时,我会反复调整,直到某次结果是对的。而企业提示的情况就完全不一样了,它可能要被用上百万、上千万次,甚至上亿次。所以你在设计提示时,必须考虑得非常周全,确保它在各种输入情况下都能适用。所以对于企业提示词来说,考虑全边缘情况非常重要。不过好的提示,在两种情况下都应该表现得很好。不管是你为自己调试,还是为企业项目设计,它们都应该达到一样的高标准。

 6. 从简单到复杂,从传统到未来

Alex Albert好的,我想转向另一个话题,那就是提示工程的历史。然后我会跟进一下未来的情况。在过去的三年里,提示工程发生了怎样的变化?从早期的预训练模型,到像Claude 1这样较为笨拙的模型,再到现在的Claude 3.5 Sonnet,这些模型之间有什么不同?你现在与模型的对话方式有变化吗?模型对提示的注意点是否有所不同?你是否仍然需要在提示上投入同样多的工作?

Zack Witten每当我们找到一个很有效的提示工程技巧时,接下来就是要把这个技巧训练到模型里去。因此,那些最有效的小技巧总是很短暂的。

David Hershey除了例子和思维链。这个一直都很有用。

Zack Witten那不是一种小技巧。思维链实际上已经训练到模型中了。过去你必须告诉模型一步一步地思考数学问题,然后你会得到计算时巨大的提升。然后我们就想,如果我们让模型在看到数学问题时自然地想要一步一步思考会怎样?所以现在你不再需要这样做了。所以我认为很多这些技巧已经消失了,或者在它们还没有消失的时候,我们正在忙着训练让它们消失。但同时,这些模型拥有正在被解锁的新能力,它们正处于它们能做的事情的前沿。对于这些,我们还没有时间去深入探索,因为发展得太快了。

David Hershey我最近开始更尊重和信任模型了。我现在觉得,我可以告诉它们更多的上下文信息。以前,我有意隐藏复杂性,担心模型会感到困惑或迷失,所以我会尽量简化任务。但是现在,我相信模型能够处理更多的信息和背景,并将其融入到任务执行中。之前我常常担心是否需要过滤掉一些信息,或者是否真的可以给它所有必要的信息。我不确定这是否只是我自己在提示词技巧上的变化,还是模型本身的能力真的有了变化。

Amanda Askell是的,信任、诚实。当我想让模型学习一种提示技巧时,很多人会开始描述这种技巧,而我通常会直接给它那篇相关的论文。我会告诉它:“这是关于提示技巧的论文,我想让你写出这篇论文中的17个例子。”然后它就会根据论文来完成任务。我觉得有时候人们没有意识到,这些论文已经存在。另外,比如我想测试其他的大模型,我会直接告诉它我真正的目的,并要求它为我生成一些元提示词。这种方法很有效。

David Hershey我经常给客户这样的建议,尊重模型的能力。很多人有点溺爱模型,他们潜意识中说:“哦,这是个可爱的小东西,不太聪明,我需要像对待婴儿一样简化它。”但实际上,如果你把模型当作聪明的工具,它通常会表现得很好。比如,直接给它论文,而不是把论文简化成婴儿版。模型可以理解复杂的信息,不需要过度简化。这是我随着时间的推移逐渐学到的经验。

Amanda Askell我发现我用来提示模型的方式可能随着时间有所不同,但基本的思路还是一样的。核心就是我会设身处地地想象自己是模型,试图理解它的能力如何随着时间变化。我记得有人曾经嘲笑我,因为我在思考一个问题时会模拟作为预训练模型的思维方式。

他们问我我认为模型的输出会是什么,我回答说:“如果我是一个预训练模型,我会这样思考。”他们就觉得很奇怪,难道我刚才是在模拟一个预训练模型的思维?我说:“是的,当然。”我已经习惯了从模型的角度去思考,进入不同的模型思维空间。

所以现在我更倾向于直接给模型论文,因为我知道它不需要我像对待婴儿一样去简化。模型可以直接理解复杂的机器学习论文。我可能还会问它是否需要更多的文献来更好地理解问题。这样的方法更有效。

Zack Witten当你试图站在模型的角度思考时,你有什么感觉?那这种感觉会根据你用的模型不同而有所变化吗?

Amanda Askell是的,预训练模型和现在的RLHF模型差别很大。当我试图模拟一个预训练模型的感受时,就好像我突然掉进了一段文本中。这感觉非常不像人类的体验。然后我会思考,接下来会发生什么?这个过程会怎么继续?相比之下,RLHF模型则不同,我会注意到更多细微的差别。总体来说,我发现自己更容易进入RLHF模型的思维空间。

David Hershey我发现更容易进入预训练模型的思维空间,不知道为什么。可能是因为RLHF模型比较复杂,我还没完全搞清楚我们理解了什么。所以在某种程度上,它更接近我的生活体验,更容易进入,但也有一些像未知的挑战。我对预训练模型在互联网上的表现有一定了解,虽然我不说自己完全懂,但有一定的把握。

 7. 未来AI与人类合作的新模式

Alex Albert我们聊了提示工程的过去,现在让我们来谈谈提示工程的未来。这是现在最热门的问题。我们将来都会成为提示工程师吗?那会是最后剩下的工作吗?有猜想说:未来我们除了整天和模型对话之外,什么也不剩了。还是说,将来这些模型会变得足够智能,不再需要提示词了?

David Hershey模型会越来越擅长理解你的意图,你需要投入的思考量可能会减少。但信息论的角度来看,你总需要提供足够的信息来明确指定你的要求。这就是提示工程的本质,我认为它会一直存在。而且能够清晰地陈述目标始终很重要,因为即使模型在理解上下文方面变得更好,我们还是会需要能够明确预期结果的能力,这仍然需要技巧。

Zack Witten我觉得未来我们会更多地利用提示工程来让模型为我们生成、调整提示词。尤其是对于那些没有太多提示工程经验的人来说,提示词生成器可以帮他们开始自己的“提示工程之旅”,我认为这是一个重要的发展路径。

Amanda Askell是的,我现在就在大量使用元提示。

关于提示工程将何去何从的问题,我认为这是一个非常难的问题。还记得之前那个例子吗?我觉得未来会像是那些请来的临时工会转变为更熟悉各种边缘情况的专业外包团队。至于提示工程是否会消失,我觉得对于一些领域如果模型做得足够好,还真有可能——它们能从你的大脑中提取信息,然后完成任务,那确实可能会发生这种情况。

Alex Albert从你们的回答中,我看到未来的趋势可能是,从用户那里提取信息将变得更加重要。企业方面,这可能会变成提示生成的扩展,能够从客户那里获得更多信息,以便编写更好的提示。在云服务中,这可能不仅仅是文本框中的输入,而是更多的互动式引导。

Zack Witten我觉得现在的提示有点像教学,你试图理解学生的思维方式,帮助他们清晰表达。而未来的提示可能更像是一种自省,模型会尝试理解你,理解你真正在思考什么、需要什么,而不是你去教它。

Amanda Askell现在我在写提示词的时候,会用类似哲学家的方法来定义新概念。比如,我会用语言来表达我想要的东西,有时候这些要求很微妙,比如什么样的图表算好,或者在什么情况下我们应该判断某事对或错。我经常会发明一个概念,然后让Claude理解这个概念,总之我在试图把我脑中的想法传达给模型。目前的模型不会主动去做这些,除非我们给它们提示。所以,将来可能模型会直接从我们那里提取信息,而不是我们去为它们提供所有这些信息。哲学在提示中的应用很有趣。我觉得哲学写作的风格很有帮助,因为它教我如何把复杂的想法变得简单明了,甚至让受过教育但对某个话题不了解的人也能理解。虽然不是每篇论文都能做到这一点,但这是我们在哲学写作中追求的目标。我习惯于把复杂的概念用简单的语言表达出来,这种方式也适用于提示工程。就像我以前对学生说的那样,如果他们写的论文我不理解,我会让他们解释一下他们的观点,然后让他们把解释整理成一篇文章。这种方法也适用于未来的提示工程,所以这种提示工程和人脑的工作很像——从你的大脑中提取信息,充分理解它们,然后随便从大街上找一个受过良好教育的聪明人,把你大脑中的理解外化到他身上。我觉得这就是提示词的核心。


发表评论