作为一名程序员,我们花费数年时间精通一门编程语言。我们需要学习语法、API等。但现在最强大的编程语言并非真正的编程语言如Java、Python,而是学会提出正确的问题,你咋想?
AI领域,提出正确问题,精心设计出完美提示语,可能比学会实现二叉树或优化数据库查询更有价值。我想邀请大家进入提示工程的世界,在这里,文字成为算法,对话成为代码。我想要拿出来辩论的话题是:提示工程是一种新的编程语言,还是仅仅是我们这些开发者用来辅助的工具?没错,我们将就这个问题展开辩论。
我将采用的辩论风格被称为牛津辩论风格,这种风格借鉴了名为牛津联盟学会的辩论社团。它已经有很长的历史了,起源于大约200年前的英国。这种风格包含以下流程。我们将提出一个动议。我们会进行初步投票。在这个环节中,每个人都会参与这场辩论。我们会讨论论点、进行总结陈词,然后进行最终投票。这场辩论的胜负取决于观众投票的最大变化幅度。你的投票至关重要,我们将共同决定这场辩论的结果。
我们面前的动议是:提示工程是否真正是一种新的编程语言,还是只是那些不会编写JavaScript的人的花哨文字游戏?看起来Dilbert有个问题,什么是编程语言?你可能对它有一些了解,但这个问题仍然具有相关性。让我们花点时间来探讨一下。编程语言是一种用于向计算机传达指令的形式语言,以完成任务。这是一种与计算机沟通并告诉它该做什么的方式,是在较高层次上进行的。
Dilbert还有另一个问题,这是一个很好的问题,以确保我们意见一致。根据Claude和OpenAI的说法,提示工程是为AI语言模型精心设计精确的指令和输入,以优化特定任务的输出。关键词是指令和任务。同样,对于OpenAI来说,它是设计和提炼输入指令以有效传达任务和目标给AI语言模型的做法。你们看到了相似之处了吗?现在我们对提示工程是什么已经很清楚了。
这场辩论将围绕以下三个领域展开:语法和结构、知识和专长、影响和持久性。第一个领域将探讨提示工程是否具有与传统编程语言相当的结构、语法和正式规则。支持动议的第一个论点是,提示工程需要一种结构化的语法来产生期望的输出,就像编程语言一样。要产生有效的提示语,需要精心设计遵循以下结构的提示语。首先,你要为AI设定一个角色或身份,以影响输出的语气和视角。
然后,你要告诉它你想做什么,是分类还是总结。接着,我们补充一些关于主题的具体细节,这些是我们希望AI模型去处理的内容。我们还想加入一些背景信息,比如任何背景信息或额外细节。然后,我们要加上一些限制条件,比如任何限制、字数限制、风格指南。最后,是输出格式,比如是项目符号、JSON格式等。这些元素并非绝对必需,但这种结构可以提升AI模型的性能。让我们通过一个例子来说明这种结构。这是一个写得很糟糕的提示语。这几乎就像是在写糟糕的代码。
一个更好的提示语应该是这样的,你先设定一个身份,比如充当网络安全专家,任务是解释,内容细节是关于三大漏洞。这里的背景信息是组织如今面临的现状,你将回应置于当前企业环境中。最后是限制条件,比如提供实际案例并推荐缓解策略。这种结构化的方法确保AI模型正确解读提示语并生成相应的输出,就像编程语言中严格的语法一样。
第二个论点是,模块化提示语使可重用性类似于编程语言中的函数。在编程中,函数或封装代码执行特定任务,因此我们可以多次重用它们。我们也可以在提示工程中做到这一点。这是一个提示工程中的函数示例。你提供文本,它将生成字数统计、情感分析以及最后的解释。一旦你输入这个提示语,随后你只需输入你想要它总结的主题即可。例如,我输入这个提示语或这个主题,“QCon SF是一个很棒的会议”,你看到输出结果了吗?字数统计、情感分析和解释。你可以反复输入不同的主题,它会做同样的事情,为你提供总结。
第三个论点是,提示设计中出现的最佳实践和模式与编程结构相似。近年来,谷歌、Meta和OpenAI的研究探索了各种提示工程技术。其中一些已经出现,比如少样本学习、思维链、思维树等。他们发现,通过以符合AI学习能力的方式构建提示语,它更有可能生成相关且富有洞察力的回应。我要花一分钟时间来谈谈中间的那个,思维链。谷歌在2022年发表了这项技术的研究。他们想要探索AI模型的推理能力,研究如何通过一种非常简单的方法来解锁它,那就是让模型分步骤思考,令人惊讶的是,模型会输出它的思考过程。这与人类在遇到复杂问题时的做法相似。
任何有经验的软件工程师很可能都了解软件设计模式。在提示工程领域,我们也有模式。2023年,范德堡大学的一群研究人员发表了一篇论文,概述了16种不同的模式。我想谈谈我最喜欢的模式之一,即交互翻转模式。我们通常通过提示和回应的方式与AI模型进行交互。我们输入内容,发送过去,然后等待回应。
然而,对于我们在不熟悉的领域中的任务或目标,我们可能希望让AI模型向我们提问,因为我们可能不知道该问哪些问题来引导解决某些问题的过程。我们只需要陈述我们的目标或目的,然后让它向我们提问。
让我们来看一个例子。我要把这个提示语输入ChatGPT,正如你看到的那样,我在最后要求它向我提问,看看它会怎么做。我输入了,它问我的第一个问题是:“你的目标平台是什么?”我说:“两者都有。”你更倾向于单一代码库,还是愿意使用单独的代码库?两者都行。首选的后端设置是AWS Lambda还是传统服务器?我们选择传统服务器。首选数据库是什么?MySQL。对于编程语言,你有没有具体偏好或限制?我们选择Python。你对实时功能的重要性怎么看?不太重要。快完成了。对于前端框架,你有没有偏好?我们选择React,当然。
你打算开发移动应用吗?是的。你看它多聪明啊?托管后端呢?我们选择AWS。这就是提案。你们看这有多有用,如果你不熟悉某些领域,它会向你提问。它收集这些信息,然后提出一个提案。这就是我们之前谈到的交互翻转设计模式。总结一下,对于语法和结构这一动议,提示工程展现出自己的语法和结构形式,这是一种产生期望输出的抽象,就像我们看到的函数一样。此外,最佳实践和模式正在出现。
让我们听听反方的观点。第一个论点是,提示工程缺乏编程语言中固有的形式化语法和语法规则。每种编程语言都有一个使用BNF表示法的形式化定义语法,无论是汇编语言还是Python。这使得编译器能够提前强制执行并检测编译错误。提示语是自由形式的、灵活的自然语言,不受此类约束。第二个论点是,拼写错误不会阻止AI模型做出回应。没有编译器来强制提示语的正确性。拼写错误不会阻止AI生成回应。这与编写代码不一样。第二个论点是,提示工程依赖于自然语言,而自然语言与编程语言相比本质上是模糊的。让我们来看这两个有趣的例子。
第一个例子是:“我看到一个拿着望远镜的人。”这是什么意思?这可能意味着你用望远镜去看那个人,或者你看到的是一个拿着望远镜的人。AI模型在生成回应时可能会选择任何一种解释。再看第二个例子:“工程师们通知经理们他们失败了。”“他们”指的是谁,是工程师还是经理?很可能是后者。重点是,模糊性可能导致意外的解释和输出。这将给寻求可靠和一致回应的开发者和用户带来挑战。代码是明确的和确定性的,就像这段代码一样。它将在任何标准的Python解释器中被一致地解释。
第三个论点是,AI模型的概率性质意味着相同的提示语可能会产生不同的结果,这与一致的代码执行不一样。我们都知道,对于一个函数,相同的输入会产生相同的输出。而提示语是概率性的。我们都知道,相同的输入,你可能会得到略有不同的回应。比如对于“提供一份详细的待办事项清单”这个提示语,你每次输入可能都会得到不同的清单。这将导致在商业用例中出现挫折感和不一致性。总结一下,对于语法和结构这一反动议,提示工程缺乏定义编程语言的形式语法、严格规则和一致解释。它依赖于自然语言的灵活性,使其从根本上与代码指令不同。记住这一点。
现在我们进入下一个部分,技能和专长。支持动议的第一个论点是,提示工程需要专门的知识,就像编程一样。就像程序员一样,我们必须了解API或框架是如何工作的。提示工程师必须了解AI模型是如何生成回应的,以及我们知道可以用来调整模型行为的那些“旋钮”。你可能知道,在较高层次上,这些AI模型被称为下一个词生成器。它并不是随机选择下一个词,而是计算整个词汇表中每个下一个词的概率。这个分布代表了每个词成为下一个词的可能性。
你在这里看到的例子是一个简单的提示语:“太阳从……升起”,你得到了一个带有设计概率的单词列表作为回应。在此基础上,它应用了一种采样方法,将选择范围缩小到一组较小的候选词。接下来,我要讨论两个调整“旋钮”:温度和采样方法。把温度想象成一个调节旋钮,它控制着AI模型在回应中发挥多大的创造力。采样方法是将大量单词筛选到较小集合中的方式。温度设置直接影响创造力水平,就像我之前提到的那样。它通过一个数学函数调整概率分布来实现这一点。当温度较低时,单词之间的概率差距会变大,更倾向于选择高概率的单词。这将产生更确定性的生成回应。
当温度较高时,概率分布变得更加均匀,低概率单词被选中的机会也会增加。一个很好的类比是:在低温下,AI模型就像一个严格按照食谱一步一步操作的面包师。当温度较高时,它就像一个疯狂的实验厨师,随意地将食材混合在一起,希望这道菜会好吃。另一个调整“旋钮”被称为采样选项,这里有两个。我只讲第一个,Top-P。它就像一个过滤器或窗口。
当值较高时,窗口尺寸较大,允许更多单词进入,被选为下一个词,反之亦然,当值较低且窗口较窄时,进入的单词就少了。当我们进入演示环节时,这会变得更清楚。你在这里看到的动画显示了概率分布。紫色的是原始概率,绿色的是根据温度设置调整后的概率。
现在温度较高,所以分布较为均匀,更接近原始概率。如果我降低温度,你会看到单词之间概率差距变大了。现在对于Top-P,记住,它就像一个过滤器。当值较高时,它允许更多单词成为候选词,被选为下一个词。如果我降低它,你会发现它变窄了,所以候选词变少了,高概率的单词更有可能被选中。这就是演示。这个演示是由AI编程助手编写的,我没有写。
第三个论点是,提示工程技术的学习曲线与学习编程语言相似。提示工程技术是多样化的,并且不断发展。这份由OpenAI和微软四个月前发布的报告,本质上是对1500多篇与提示工程相关的论文进行了文献综述,并整理出了各种技术的分类体系。重点是,掌握提示工程不仅仅是使用自然语言。有许多技术,我们作为软件工程师或提示工程师,必须学习并弄清楚如何最好地将其应用于我们的特定用例。
此外,这些技术不断发展,新的技术也在出现。解锁AI推理能力是近年来的一个关键研究领域,你们大多数人可能只知道这一点。两个月前,OpenAI推出了一种名为o1的新系列模型。它们被设计成在回答问题之前先思考。本质上,它们现在可以执行我们所说的系统2级思考。重要的是要问,这将如何影响提示工程?一个好的思考方式如下。
以前,我们与AI模型互动以解决问题,就像与一位资深软件工程师合作一样。我们必须描述得详细,必须提供更多的指导。现在有了这些系统级2思考模型,我们可以调整我们的方法,与它们合作就像与首席工程师合作一样。我们可以描述得不那么详细,提供更少的指导,更开放,让AI模型更自主地推断我们的意图,特别是对于需要高推理能力的用例。随着AI模型的不断进步,以及随之而来的许多关于构建GenAI应用的方法和框架的创新,你在这里看到的是RAG、AI代理、代理RAG。
在这些方法的核心是提示工程和提示的管理。它们对于GenAI应用的重要性和能力极为关键,因此必须像对待代码一样对待它们。提示版本控制、测试、验证等,都必须与生产代码处于同一水平。总之,对于知识和专长这一动议,掌握提示工程需要专门的技能和与学习编程语言相当的专业知识。它需要对行为的理解、精心设计指令以及持续学习生态系统以优化结果。
让我们听听另一方的观点。较低的入门门槛。对于提示工程来说,入门门槛要低得多。提示语的创作更像是试错,而不是真正的专业知识。它不需要多年的正规教育和技术培训。我们在大学里花了四年时间学习计算机科学专业。事实上,它更直观,因为人们从小就已经擅长用自然语言进行交流。你看到那个提示语了吗?不需要设置环境、编译器、安装必要的依赖项。
与Python相比,即使是简单的“Hello World”,你也要知道语法以及如何正确使用print函数、库等。任何一个三年级的小学生可能都会在这方面感到困难。在编程中,记住这个:掌握数据结构和算法是成为一名优秀软件工程师的基础。他们必须知道如何为特定问题选择合适的数据结构,并且他们不仅要学习什么可行,还要学习为什么可行以及如何改进它。相比之下,提示工程处于更高层次的抽象层面。
没有要求去理解AI模型是如何存储信息的,这使得它更容易学习和应用。第二个论点是,缺乏对抽象概念的掌握。如果你从事软件设计已经有10多年了,我相信你们中的许多人会记得这两种范式。它们在我们设计、演变和维护软件的方式上提供了许多好处,而要掌握这些范式需要花费数月甚至数年的学习和实践,并将其应用于实际项目中。相比之下,提示工程需要较少的正规教育。它缺乏深度抽象。记住这个,软件设计模式是另一种形式的抽象。
同样,掌握这些复杂的抽象概念需要非常深厚的专业知识和实践经验。相比之下,尽管提示工程很强大,但它依赖于自然语言命令,而不需要理解这些核心计算概念。这种对比说明了提示工程所需的专长程度较低。总之,对于反对动议的知识和专长,编程需要掌握抽象概念,所有这些都是构建可扩展、可靠和高效软件系统所必需的。尽管提示工程很强大,但它缺乏传统编程所需的深度和复杂性。
进入最后一个领域,影响和持久性。支持动议的第一个论点是,人机交互范式的转变表明了重大影响。你们看到的这张美丽而复杂的图片是通过人机交互生成的,这种交互的形式是一个提示语,但不是普通的提示语。这种提示风格复杂、详细、精致,几乎就像一种DSL,比如SQL或HTML。此外,这种提示风格采用了独特的方言或描述性语言来描述艺术风格、光线、视角,以展现视觉元素、情绪、构图等更多内容。如果你要逆向工程这个提示语来创建这张图片,你觉得它会是什么样子?让我读给你听这个提示语。“远处,一幢具有日本风格建筑的建筑坐落在湖上。金色的余晖照亮了池塘周围的樱花树。
在池塘中,一群人在划船中享受日落的宁静。在樱花树下,一位女士正在黄色格子毯子上布置野餐。”试着写一下这个提示语。下一个,元提示语,为提示语生成提示语。你有没有想过让AI模型帮你解决一个非常棘手的问题,结果你却对着一个空白的提示语发呆?有一种技术可以做到,那就是元提示语,它可以被视为提示语的一种更高层次的抽象,其目标是生成能够从AI模型中引出特定回应的提示语,而不是让模型去执行任务。它带来的好处包括加快这个过程、主动生成提示语以及减少你构思复杂提示语的认知负担。
与编程相比,这与你可能听说过或使用过的4GL等元编程语言非常相似。让我们做一个快速演示,看看它是什么样子。我称它为“软件工程师的提示伙伴”。你可以选择一个主题,比如团队协作。我们将描述一个挑战,也许是开发和QA之间的顺利交接。有人遇到过这种情况吗?我们将点击这个按钮,它会返回一个提示语,我们可以将这个提示语复制粘贴到ChatGPT或Claude等工具中,以获得我们想要的实际回应。对于像公司这样有常见任务集的地方,它非常强大,可以帮助你建立在构思提示语时的最佳实践。
第二个论点是,民主化的开发变得触手可及。在过去六个月里,AI编程助手的数量激增,我相信你们中的许多人对此都有所了解。这种发展速度令人惊叹。人们相信,在未来几年内,我们将看到开发者生产力的显著提升,就像过去引入高级编程语言和语法高亮显示一样。编程作为一种职业在未来五年内仍然存在,然而,它将发生显著变化。真正有趣的是,这些AI编程助手正在自我改进。它们实际上为下一个版本编写代码。这非常令人着迷。
这是来自一位非常知名的人的帖子。他是OpenAI的联合创始人之一,是一位著名的AI研究员。这是他所说的一段话。“在过去的几天里,我的大部分编程工作现在都是用英语编写提示语,然后审查和编辑生成的差异。我仍然认为我没有充分熟悉所有功能。这有点像重新学习编程,但我基本上无法想象回到三年前那种没有辅助的编程状态。”最后一个论点是,提示语是未来的界面。毫无疑问,软件工程正处于一场深刻变革的边缘。它将改变我们进行软件工程的方式,改变我们对构建软件和协作的本质概念。
关于我们将走向何方,有很多讨论,从始终在线的编码助手开始,24小时×7天,作为一个团队成员,对你的代码库了如指掌,能够参与讨论、回答问题,到可以承担开发过程中更积极角色的AI代理,但仍然在人类工程师的指导下。
总有一天,我们会拥有能够承担组织内完整角色的自主虚拟员工,与软件工程师相当。我不知道我们何时会达到那个阶段,但我认为那是我们前进的方向。总之,对于影响和持久性这一动议,提示工程将产生持久影响,并像编程语言一样发展。随着AI在各行业的整合,它将成为一项不可或缺的技能。朝着最佳实践、研究努力和教育资源的方向发展,支持了它的持久性。
让我们听听另一方的观点。趋势,而非变革。这些技术的共同点是什么?我们还在使用其中的任何一种吗?在过去,这些技术曾经相当流行。其中一些被誉为通用数据格式、通用协议。提示工程现在可能看起来具有革命性,但它更像是一个趋势。这些技术很可能会演变或被其他界面所取代,而编程语言经受住了时间的考验。第二个论点是,AI将自我自动化。这是一个有趣的观点。随着AI模型变得更加先进,对提示工程的需求可能会减少,因为模型变得更加擅长解释模糊和含糊的指令。
想象一个世界,AI编程助手注意到开发人员经常使用特定的编码风格,并在每次提示之前自动将其应用于新代码。这可能会使提示工程成为一个临时技能,而不是长期的范式转变。最后一个论点是,软件开发仍然需要编程。尽管提示工程很有用,但软件开发的核心仍然依赖于传统编程语言来处理重要场景:性能、可扩展性、可靠性。高性能应用需要经过精心调整的代码,只有熟练的程序员才能提供。
像操作系统这样的复杂系统仍然需要传统的编程,不能仅靠提示语来构建。它们可能会增强开发过程,但它们并不能取代对编码的基本需求。总之,对于这一领域的反动议,提示工程可能是一个有用的补充,但它并不能取代对编码专业知识的基本需求。编程语言之所以能够持久存在并不断发展,是因为它们能够为构建复杂系统提供精确性、控制力和可扩展性。
以上就是双方在三个领域的论点。现在我们将进入双方的总结陈词环节。支持动议的一方认为,提示工程是未来的新型编程语言。就像传统编程一样,提示需要精心的结构、精确性以及对底层系统的理解。自然语言的灵活性使得前所未有的创造力和快速原型设计成为可能,实现了传统编码无法比拟的实时交互性。
在一个速度、可访问性和适应性至关重要的世界里,提示工程已经彻底改变了我们的工作和创新方式。它是每个人的语言,无论你是否是程序员,使其成为编程的合理演变。未来的自动化将关乎你想要实现什么,而不仅仅是如何编写代码。为进步投票。为提示工程作为新型编程语言投票。记住所有这些要点吗?
让我们听听另一方的观点。尽管提示工程是一个强大的工具,但将其称为新型编程语言有些牵强。编程语言具有严格的语法、明确的规则和可扩展性,而这些都是提示工程无法提供的。提示工程缺乏形式化的语法。其概率性输出使其在关键任务和大规模系统中不可靠。我们不要将可访问性与专业知识混淆。虽然提示语有助于自动化任务和激发创造力,但它们无法替代传统编程语言的深度和精确性。区别很重要。为清晰投票。反对将提示工程等同于真正的编程语言。以上就是双方的总结陈词。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。