范德堡大学生成式人工智能策略领导者笔记-全-
范德堡大学生成式人工智能策略领导者笔记(全)
001:什么是深度研究 🧠

概述
在本节课中,我们将要学习什么是“深度研究”。这是一种利用生成式AI进行深度、全面研究的方法,它能够像雇佣一个博士团队一样,为你搜集信息、分析数据并撰写详尽的报告。我们将探讨其工作原理、独特优势以及如何有效利用这一强大能力。
想象一下,无论何时你有任何问题或需要进行分析,你都可以去雇佣一个博士团队来研究这个问题。这个团队会为你查找所有相关的研究、新闻、市场竞争数据,将它们整合起来,并撰写一份条理清晰、内容出色的报告。这对你来说价值有多大?这正是“深度研究”所能做到的。
它在根本上改变了我们使用生成式AI的方式,使得简单的“提示”变得无比强大。接下来,我们将深入探讨深度研究的不同之处、其背后的运作机制,以及我们应如何思考并运用这种能力。
当你可以随时“雇佣”一个博士团队来研究任何你感兴趣的话题,并为你撰写一份10到15页的报告时,这无疑是一种变革性的能力。但有时,这就像面对一张空白画布,让人不知从何下手:我该如何开始?如何利用和部署这种AI劳动力?因为这本质上就是你雇佣来为你工作的AI劳动力。
从简单任务开始理解
让我们从一个简单的任务开始,感受一下深度研究是什么样子。
我将去“雇佣”这个博士团队,为我做一些关于“提示工程”课程的市场调研。我选择这个主题是因为我本人对此有投资,并且教授提示工程课程。我想了解市面上有哪些顶尖课程,它们是什么样子,我的竞争对手在做什么。
于是,我进入深度研究工具,并输入了以下提示:
进行一项关于顶尖在线提示工程课程的竞争市场分析。这个主题下有哪些顶级课程?它们各自如何定位?涵盖哪些主题?学生们对它们有何评价?最后,为其中一门课程的讲师制定一个独特的营销策略,该策略应独立于平台使用,以提升课程注册人数。
这是一个复杂的任务,就像我真的雇佣了一个博士团队来为我做一件非常有价值的工作。
但这里发生了一件非常重要的事情:要出色地完成这个任务,需要的不仅仅是即时从提示中获得的反馈。它确实需要进行一些研究。为了做好这份分析,它必须阅读和查找当前的信息。我不想要基于模型训练时数据的市场分析,我想要的是它能根据今天能找到的信息所做的市场分析。
深度研究的工作流程
那么,当我将这个提示输入深度研究工具时会发生什么?一些关键的事情发生了,这由其工作原理驱动。
第一步:澄清问题
无论我问什么,它首先都会跟进并提出澄清性问题。在这个案例中,它问道:
- 你是否对特定平台(如Coursera、Udemy、edX)的课程感兴趣?
- 分析应侧重于初学者、中级还是高级水平?
- 你只想要付费课程吗?
- 你是否只寻找英语授课的课程?
一旦它获得了这些信息,它就会开始为我进行研究。它这样做是为了进行澄清。原因在于,当我输入这些问题的答案(我接下来就会做)并启动任务后,它将在后台运行10到15分钟。因为我的提示会“孵化”出一个AI,让它与自己进行内部对话。它会开始向自己提问,开始从外部世界拉取信息,然后必须分析这些信息——这都需要时间。
所以,一旦我启动任务,大量的AI劳动力将被“孵化”出来处理这个任务——我的AI博士团队就开始工作了。如果我给的任务描述有误,它可能会运行很长时间,然后给我一个不想要的答案。因此,它通过澄清来确保开始工作后能做出好成果。
第二步:启动研究
在我提供了澄清信息(例如:“查看所有主要平台,关注注册人数最多的课程,查看所有类型的课程,主要关注英语课程”)并按下回车后,它会说:“好的,我将开始启动,去搜索所有这些信息并撰写报告。”
然后,我们会看到一些惊人的事情发生。它显示“开始研究”。深度研究的一个关键区别在于它是智能体驱动的。这意味着它具有自主性,可以代表你采取行动。在这里,它采取的行动就是在网络上搜索公开的外部信息,将其作为来源,用于撰写即将创建的报告。
这正是我希望它做的:去寻找竞争课程,告诉我相关信息,进行市场调研。因此,它本质上是一个AI智能体——这个“智能体”部分意味着它有采取行动的能力,而它将采取的行动就是搜索信息、拉取信息、分析所找到的内容,然后基于此决定下一步搜索什么。它会一遍又一遍地重复这个过程,持续10到15分钟,直到它觉得收集了足够的信息来很好地回答问题。
第三步:观察过程
在这个过程中,我们可以观察它。虽然你观看这些视频时用户界面可能已经改变,但核心原则是相同的。它会采取行动,并且通常会以某种活动形式向我们报告它在做什么。
我们看到它启动后,活动区域开始填充内容,它会告诉我们:“这是我的思考过程,我试图完成什么,以及我正在代表你采取什么行动。”这样我们就能观察它的行为,了解它的方向。如果发现它走错了路,我们甚至可以中途停止它。
在这里,我们看到它显示:“我正在从Coursera、Udemy等主要平台收集关于高注册量的英语提示工程课程的信息,包括讲师、课程结构、学生反馈和定价细节。”它正在完全按照我们的指令,作为一个智能体,拉取撰写报告所需的信息。
这非常不可思议。这就是我们的AI博士团队,我们雇佣并部署的AI劳动力,它外出为我们完成所有查找工作。
第四步:收集与引用
当它拉入信息时,它会开始在“来源”部分展示它找到了什么。例如,它找到了Coursera上的内容,这很合理;也找到了其他平台的内容。它会思考这些信息如何与某些原则对齐,然后列出所有引用。当它找到认为有价值的内容时,就会将其列为最终报告中将提供的引用或来源。
所以,在撰写报告之前,它正在进行广泛的搜索。但这并非一次性搜索。有时我们在标准的ChatGPT界面中也会看到类似功能:输入提示,它会快速进行网络搜索,拉取顶部结果然后回答问题。
但深度研究做得更深:它拉取结果,阅读它们,进行推理,然后思考还缺少什么,还应该调查什么。基于此,它会调整并采取额外的行动。这是一个真正的区别点。如果它发现了一些有趣的信息点,它可以跟进进行额外搜索,开始阅读相关的其他主题。这至关重要,因为它允许它进行更深入、更彻底的研究,就像你阅读研究论文、综述或新闻文章时一样。
如果文章引用了重要的内容或谈论了一个你一开始不知道的新话题,你可以跟进,不断拉取那篇论文、新闻文章或白皮书的不同线索,形成一个信息蜘蛛网。深度研究正在做同样的事情:它是一个智能体,根据发现的内容进行调整,然后拉入新信息,跟进需要深入探索的信息线索。
深度研究的输出与优势
当它完成后,你会得到一份基于所有这些来源撰写的出色报告。我想指出一些关键的不同之处:
1. 高质量、连贯的写作
它开箱即用,就配置为能出色地撰写非常连贯的报告。默认情况下,它不会返回那种带有表情符号的大段项目符号列表(当然你可以调整它那样做)。它更倾向于撰写像一份连贯的白皮书、研究论文或市场分析那样的内容。这对于需要高质量写作的任务来说非常强大,就像你期望一个AI博士团队所做的那样。
2. 真实的引用与溯源
在撰写报告时,一个非常强大的功能是它会拉入找到的来源,并正确地引用它们。与你在其他工具中可能听到或看到的、会幻觉编造所有来源的情况不同,这些来源都不会是幻觉的。它们将是它找到的真实来源,它会提供链接或引用。在报告中,你将能够跟进并阅读所有内容。因此,它所做的惊人之处不仅在于撰写报告,还在于为你提供了其工作的路线图和来源,你可以去核实,或者利用一个连贯的叙述来帮助自己探索和理解这些主题,从而了解更多信息。这非常强大。
3. 长篇输出能力
这确实是一个区分点:它能写出大量输出,可以给你一份10到15页的报告。为了做到这一点,它必须有大量的来源来引用,以确保不产生幻觉。一旦你把所有内容整合起来——例如,我们将这份非常长的报告放入Google文档——它最终长达19页。
这是该工具内的一项变革性能力,因为现在我不需要反复为不同的文本片段进行提示,然后自己将它们拼接到文档中。我只需告诉它:“这是我想报告的内容。”它就会完成所有的研究工作并撰写报告,而且能写出非常长篇、完全连贯的内容,不需要我来回提示六到十次来收集所有这些信息(实际可能需要更多次)。
与传统AI工具的对比
为了快速比较,我用GPT-4o和ChatGPT运行了相同的任务。我得到的结果要短得多,更倾向于列表形式,而不是真正的博士水平的散文风格。即使将这份非常列表化的内容(这本身就很占篇幅)放入Google文档,它也只有3页。
因此,在雇佣和部署这种AI劳动力方面,我们看到了显著的差异。传统方式下,我们可能需要反复“照看”它,不断提示、提示、再提示,试图构建这份研究报告,并希望引用正确,希望它搜索了足够多的主题,希望我们看到了正确的主题——我们需要做很多“手把手”的工作。
而现在,我们得到的是一个AI智能体,是我们部署的AI劳动力,它为我们进行研究并撰写研究报告。
总结与展望
所以,我们将要探索的就是这种惊人的能力。既然我们拥有了一支可以部署、能自主为我们研究某个主题的AI博士团队(AI劳动力),我们现在该做什么?
坦率地说,如果让我亲自撰写这份报告,可能至少需要一天时间。而在10到15分钟内,我就得到了它。现在,我可以阅读这份报告,获取为我完成的分析和研究。让报告、信息和研究为我完成的速度,变得和我能想出问题的速度一样快。我可以部署这些AI智能体,然后去喝杯咖啡。等我回来时,我已经有了可以辅助决策、制定战略和思考的信息。
我的目标不是让它替我做决定,而是让它做大量的研究,将信息带回来帮助我思考。在我看过报告并产生想法后,我可能会说:“现在,去查找与此相反的观点。”我们将探讨使用它的各种不同方式,审视它独特的长处和能力,这些是任何人类团队都难以匹敌的,也是你希望集中精力利用它的地方。

欢迎来到这门关于深度研究的课程,我期待与你一起探索这个精彩的主题。
002:在资源受限时获取专业洞察的深度研究法

概述
在本节课中,我们将学习如何在时间和预算都有限、无法聘请人类专家的情况下,利用生成式AI的“深度研究”功能来获取高质量的专业洞察,以辅助我们做出重要决策。我们将通过一个更换家用空调系统的具体案例,来演示这一方法的应用流程与价值。
引言:决策困境与AI解决方案
你是否曾遇到过这样的情况:需要做出一个非常重要的决定,但时间紧迫,预算也有限。你发现自己身处一个必须整合大量信息的境地,因为既没有时间也没有资金去聘请一位人类专家来帮助你。
这种情况时常发生。很多时候,我们需要做的决策,其重要性尚不足以动用预算去聘请专家;或者,即便有预算,寻找一位值得信赖的专家本身就很困难。等到完成法律文书等所有手续时,决策的时机早已错过。因此,在许多情况下,我们就是没有时间和金钱去获取人类专业知识来帮助我们。
那么,我们该怎么办?“深度研究”是解决这个问题的绝佳工具。接下来,我们将对比如何使用标准的聊天模型(如ChatGPT)与深度研究功能,看看后者能带来哪些不同的价值,以及它如何填补我们在需要高质量、有证据和引用支持的信息来辅助决策时的空白。
核心方法:用深度研究填补知识空白
我们的做法是,当处于当前没有解决方案的“知识低谷”时,就利用深度研究来填补这个空白。
现在,我将用一个我最近遇到的真实问题来演示如何填补这个空白。这个问题是关于我家的空调系统。我住在美国田纳西州的纳什维尔,那里天气炎热潮湿,空调是家家户户的标配。我家的一台空调坏了,我需要更换它。但我对这个领域一无所知。
在当时的情况下,我不太可能找到一位价格合适、能在我家人被热得受不了之前帮我解决问题的专家。我不是要雇人来修理或更换,这行不通,因为家里太热了,家人会受不了。我们该如何解决这个问题?我们将把这个问题交给深度研究来处理。
实战案例:构建AI驱动的购买指南
我们将利用深度研究来生成一份“AI购买指南”。这是一个极佳的应用场景,因为我们需要购买某样东西。通常,当我们购物时,我们不愿意额外花钱请人提供购买建议;而且我们往往希望立刻完成购买,尤其是在维修或故障的情况下。比如你的车坏了,或者生活中其他重要的东西坏了,你需要立刻修好它,因为你的生活或工作依赖于它。但做决定很困难,因为花费昂贵。通常,维修或采购的东西越专业、越昂贵,找到相关信息就越难,我们确实需要人类帮助,但就是没有钱或时间。
我们将以暖通空调系统为例。在获取AI购买指南时,我们希望它能提供非常具体、贴合我们自身情况的信息。
以下是我输入的提示词:
我需要为我的住宅购买一套新的暖通空调系统(即家用空调系统)。我需要3.5吨的规格,因为这是我旧系统的规格。我住在田纳西州纳什维尔市一栋有100多年历史的老房子里。这是一个重要的背景:如果我的房子是全新的,可能隔热很好,这点就不重要。但我住的不是新房子,没有最新的窗户,所以我需要考虑这一点。我需要一份全面的选项列表,并附上如何选择理想机型的详细建议。
接下来,我设置了一个输出格式部分。这是你应该经常做的:设置一个部分来解释你希望AI输出的关键内容,比如对信息使用的限制、可以放入输出的信息块,并希望有一个清晰的方式来展示。在这个案例中,我是这样写的:
输出格式:
- 提供5到7条关于如何选择的关键建议。
- 选取排名前15的机型,制作一个对比表格。
- 提供获取最佳交易的具体策略。
- 列出需要询问的问题。
- 提供关于可靠性、最佳购买时机以及合理安装成本的重要信息。
这非常棒,对吧?你经常能看到各种产品对比评测,但你永远得不到一个基于你自身背景和情况定制的对比。这就像是为你自己的问题和情况量身定做的“产品对决”。
处理AI的追问与生成报告
AI开始工作后,它会像我们之前看到的那样,提出一些后续问题。通常,在这种情境下,你确实不知道如何回答这些后续问题。这里有一个简单的技巧:你可以直接说“我不知道,请根据你的最佳判断来选”或“请以我的最佳利益为考量来决定”。你不需要回答所有问题,可以让AI自行选择。
于是,AI为我生成了一份出色的报告。现在,我想看看这份AI购买指南的深度。如果你正在采购某物,或需要进行一项重要且昂贵的维修,这是一个极好的用例,因为它提供的专业知识正好填补了你可能没有时间和金钱去获取的那个“知识空白”。
深度解析生成的购买指南
针对“在纳什维尔百年老宅中升级暖通空调系统”这个问题,生成的报告开头是一段写得非常好的引言。
接着是关键建议部分,它考虑了纳什维尔的气候和燃料选择:
- 热泵在该地区很流行。
- 双燃料系统也是一个选择(我最终因为一个建议选择了电炉)。
- 优先考虑能源效率和正确匹配容量。
- 评估百年老宅的结构兼容性,现有的(或缺乏的)基础设施是一个关键因素。报告指出,如果你的房子里没有输送空气的管道,还有其他选择,比如无管迷你分体式系统(我认识一些人就安装了这种)。
然后是顶级系统的对比。我特别喜欢看那些在最后把所有产品列在表格里的评测,这让信息对比变得容易得多。任何时候,当你需要一份沿着多个维度进行的深入详细分析时,你都可以让深度研究为你搜集信息。虽然它一次能搜集的信息量有限制,但它确实可以进行非常详细的对比。
在这个案例中,它搜集了许多产品的信息,并构建了这个表格。这个表格太宽了,一页幻灯片显示不全,但你可以看到它滚动时的样子。表格包含了成本(哦,这可不便宜)、保修信息以及我可能想知道的各种重要功能。
报告中的超具体价值与惊喜发现
报告还做了一件很棒的事,因为每当我进行产品采购时,我通常都想弄清楚两件事:一是我该买什么以及为什么;二是我如何获得最划算的交易。报告里包含了一些很棒的内容,其中很多我大概知道,但有一条非常惊人,它可能就值ChatGPT用深度研究做这件事所花的10分钟。
那就是,因为它知道我住在哪里、我的背景,所以我得到的不仅仅是一份通用的产品购买指南,而是一份针对我个人需求和我居住地的超具体指南。它指出,我所在地区的电力公司过去曾为热泵安装提供过返利。实际上,当我的另一台空调坏掉时,我已经安装了一台热泵。所以现在,我甚至可能可以追溯申请一些返利。我之前都不知道,现在我会在之后跟进这件事。这很重要,因为它对我个人来说是超具体的。如果我只是去搜索一份通用的暖通空调热泵产品对决,它不会告诉我“顺便说一下,国家电力公司有返利,你应该查一下”。而现在,我得到了针对我的超具体建议。
报告还包含了:
- 家庭兼容性:提到了Trane(特灵),这很有趣,因为报告将其列为可靠性榜首,这也是我自己研究时发现的。而且,当我与技术人员交谈时,他们也推荐了Trane,这成为了我决策过程的一部分,因为当你处理一件非常昂贵的东西时,你希望它能用很久。
- 安装成本:给出了安装成本的范围。
- 安装公司推荐:这对我来说非常重要,因为它列出了可以进行安装的一些顶级公司名单。因为我购买的不是可以从商店买回来塞进车后备箱带回家的东西,而是一个设备加上安装到我家的复杂采购。所以,知道该找谁安装、谁擅长这个,并且它帮我筛选了所有网站和评论来提供这些信息,这非常棒。名单上的公司,有些是我自己研究时也开始发现的,有些我没见过,但我最终选择的那家公司就在这个名单上,这让我很放心。如果我当初不知道该找谁,我认为它给出的名单非常准确。例如,Donaldson(唐纳森)这家公司我之前不知道,但当我开始研究时,看到了很多关于它的好评。所以,如果我没选择Precision(普莱辛),我可能会去咨询他们。
这种能够根据你的决策和背景提供深度、深入信息的能力,非常有价值。
报告还继续提供了:
- 需要询问的问题。
- 各种惊人的细节。
- 需要避免的“危险信号”。
总结与拓展
我刚才所做的,就是为自己填补了一个重要的知识空白。我有一个需要快速解决的问题,但没有大量资金去解决。它正好落在了“我没有足够的预算和时间去聘请人类专家”这个空白地带。因此,我运用了深度研究来完成它。这是一个极具价值的用例,因为生活中有各种各样类似的问题,我们在决策过程中需要帮助,我们正在做一个重要的决定,我们需要帮助,但我们没有时间和预算去获取人类帮助;或者我们在组织内部,受到招聘规则或其他因素的限制,无法获得所需的专业知识,我们必须尽力而为,而深度研究正是填补这一空白的方法。
现在,有一件非常了不起的事情是,很多人会认为这只是填补空白。但我们可以做得更多,这暗示了下一步:一旦我们完成了这份报告,我们就可以开始跟进并提出更深层次的问题,进行更深入的探索。

本节课总结
在本节课中,我们一起学习了如何利用生成式AI的“深度研究”功能,在时间和预算双重受限的情况下,获取专业、深入且高度定制化的洞察来辅助重要决策。我们通过一个更换家用空调系统的完整案例,演示了从定义问题、构建提示词、处理AI追问,到解析最终报告的全过程。这种方法的核心价值在于,它能根据你的具体情境提供超具体的建议,填补了那些不足以聘请专家但又至关重要的知识空白,是每位决策者都应掌握的高效工具。
003:深度研究的工作原理 🧠

在本节课中,我们将深入探讨“深度研究”功能背后的工作原理。我们将了解它如何自动化复杂的任务,以及它为何能如此高效地生成长篇、连贯的报告。
上一节我们介绍了与生成式AI进行有效对话的基础。本节中,我们来看看“深度研究”如何将这个过程自动化并提升到一个新的水平。
与生成式AI进行高效对话的要素
当我们希望与生成式AI(例如ChatGPT)进行高质量对话以解决问题时,需要做到以下几点:
以下是关键步骤:
- 提供具体信息:我们不仅依赖其训练数据,还需要提供大量文档、网站链接等具体信息,以便AI能够引用并基于这些信息进行推理,从而给出有根据的答案。
- 明确任务与偏好:我们需要让AI充分理解我们的具体需求、希望任务如何被解决、以及我们的个人偏好和期望。
- 迭代与精炼:在对话过程中,我们通常需要反复迭代和精炼。这包括提供澄清、注入额外信息、获取更多输出,因为单次交互的信息量通常有限。
- 整合输出结果:当AI生成多个输出片段时,我们需要思考如何将它们最终整合成我们需要的完整成果。
以撰写报告为例的传统流程
现在,让我们将思路聚焦到撰写文档和报告上。假设我们需要一份10页的报告。
想象一下,我们需要撰写一份10页的报告,例如一份关于范德堡大学在生成式AI领域工作的市场竞争分析。我们需要做很多事情:
以下是传统流程中的主要挑战:
- 信息搜集耗时:为了高质量完成报告,我们需要找到所有相关课程的信息。这可能需要多次提示AI进行网络搜索(例如,搜索Coursera、edX、Udacity等平台上的内容),或者我们自己手动查找并将信息输入对话中。
- 输出需要手动整合:AI可能每次只能生成半页或一页内容。我们需要将这些输出片段复制粘贴到报告中,并确保它们连贯、统一,这涉及大量的手动工作。
总结来说:明确任务指令(通过提示工程)和获取单个输出并不难。反复迭代以生成所有内容需要中等程度的努力。但最后将所有内容复制、粘贴、融合、整理格式,则需要大量的手动劳动。
深度研究的革命性自动化
那么,深度研究功能做了什么了不起的事情呢?它自动化了上述繁琐流程。
以下是深度研究自动化的核心环节:
- 任务理解与澄清:在开始漫长的(10-15分钟)工作前,它会通过追问来确保准确理解我们的需求。
- 自动化信息搜集:它接管了耗时费力的公开信息搜索工作,自动将相关信息引入对话,免去了我们反复手动搜索或提示的负担。
- 自主迭代与自我对话:这是其神奇之处。它在一个循环中与自己进行对话。例如,它搜索并找到一些信息(如Coursera课程),然后基于已找到的内容,自我对话决定下一步该搜索什么、还缺少什么、需要探索哪些方面。这种自我对话循环让它能自主运行10-15分钟,并根据发现不断调整搜索方向。
- 生成连贯的长篇输出:最后,它不会只生成一页内容,而是直接产出一份10-15页的、完全连贯、格式统一的报告。用户无需在不同输出间进行复制粘贴和整合。
其底层逻辑是:它自动化了整个“研究-对话-整合”流程。通过长时间的自我对话,它将一个冗长的“对话历史”融合成一份基于所发现信息的、连贯且撰写精良的报告。这正是它带来变革性影响的原因,我们可以将这种能力应用于各种惊人的任务中。

本节课中,我们一起学习了深度研究功能如何通过自我对话循环和全流程自动化,将我们从繁琐的信息搜集、迭代提示和手动整合工作中解放出来,直接生成高质量、长篇且连贯的复杂报告。这是生成式AI应用中的一项重大进步。
004:它无法对信息进行推理 🔍

在本节课中,我们将探讨深度研究(Deep Research)工具的一个根本性局限:它无法对自身无法获取的信息进行推理。理解这一局限对于有效、安全地使用AI至关重要。
上一节我们介绍了深度研究强大的信息整合能力,本节中我们来看看它的能力边界在哪里。
核心局限:无法访问即无法推理
深度研究无法完成它无法访问信息的工作。它无法对缺失的信息产生深刻的见解。如果所需信息无法在公开的互联网上找到,或者用户没有上传支持性文档,那么它将对此一无所知。
核心公式:AI的推理能力 ∝ 其可访问的信息量
这一局限至关重要,因为很多时候我们需要融合公开信息和私有信息来完成任务。
通过个人案例理解局限
为了帮助你理解这种局限,最简便的方法是选择一个总是包含私有信息的对象:人。我们可以通过一个可以验证的事实来检验它。
让我们看看它究竟了解我们多少。关于你个人,有多少公开信息?仅凭这些公开信息,它能否告诉你所有你需要知道的事情?
答案是否定的。因为我们都有私生活,都有丰富的、它无从知晓的人生经历。同样的情况也适用于我们的组织。组织拥有丰富的文化、历史、上个季度发生的事情、员工间的私人关系以及未在互联网上公开或难以表述的战略重点。
所有这些信息都没有以它能找到的方式被记录下来。
人类不可或缺的角色
因此,人类在与AI协作时将始终扮演不可或缺的角色。当你使用它时,你需要提供大量的背景信息。同时,你也必须意识到,有很多事情是它不知道的,因此它无法在这些方面支持你。你必须谨慎对待它做出的决定或建议,并考虑到信息缺失这一因素。
一个演示案例
以下我将以自己为例,来划分它知道什么和不知道什么。
我向深度研究工具提出了一个请求:“为这个人建立详细的心理档案,帮助我理解他的思维模式、潜在动机、处事方式、人格特征等。给我一个推理其决策和目标的框架。我需要10页内容。” 同时,我提供了我的领英个人资料链接。
这是一个对自己做的有趣活动,也是一个极佳的训练,因为它能快速揭示,基于你公开投射的信息,它了解你什么,又不了解你什么。
它回复并询问我建立心理档案的目的。我出于好玩回答:“我想与这个人谈判,想了解他的思维过程。” 我给出了以下约束条件:“仅使用其领英帖子中的信息。输出内容需包括对其人的总体概述,以及根据其心理特征定制的谈判策略。”
我认为这很有趣,因为我想知道它如何看待与我谈判的策略,同时也想看看它通过我在领英的公开发帖究竟了解我多少。我预计它会知道很多。
构建提示词的技巧
在构建这个提示词时,我再次强调几点技巧:
- 控制信息来源:我通过约束条件告诉它仅依赖领英上的信息。你可以通过控制你希望它使用或不使用的信息来引导它。例如,你可能知道某些公开信息并不准确,你不想让它使用这些信息,以免将其引入歧途;或者你希望它以不同的思维方式来解决问题。
- 指定输出格式:我明确告诉它输出中需要包含哪些部分,并在提示词中用破折号分隔出专门的章节来详细说明。
它随后开始运行并生成报告。
本练习的目的与启示
这个练习的目的不是向你展示我的心理档案,而是让你理解并选择一个它无法知晓全部信息的场景,从而让你明白这些工具的认知边界。
关键结论:它只能基于其能找到的公开信息进行推理。
这将对它在组织内为你所能做的事情产生限制。同时,这也意味着,如果你想跨越这些限制、克服这些局限,你就必须通过提供信息来填补空白。而你提供信息的详细程度,将决定它在处理那些无法公开找到的信息时能做得有多好。
实践练习与总结
接下来有一个练习,你可以对自己或他人运行这个心理档案分析,或者设计其他它无法找到全部公开信息的任务。
我认为让它分析我的心理档案非常有趣。它在很多方面做得相当不错,但归根结底,它并不了解真实、完整的我。这限制了它能说的内容、它能推断出的关于我的信息以及它能提出的决策建议。它给出了很多很棒的内容,但也存在很多不准确和模糊之处。
总结:请将此作为一个简单的练习,来学习了解AI知道什么和不知道什么。务必始终思考:我该如何为任何它不知道的信息填补空白?或者,我该如何调整问题,使其能够仅用公开信息来解决?

通过本节课,我们一起学习了深度研究工具的根本局限——无法对未访问信息进行推理,并通过具体案例理解了人类在提供上下文和私有信息方面的关键作用。在后续使用中,请时刻牢记这一局限,并善用提示词技巧来引导AI,以发挥其最大效能。
005:以人类为例

在本节课中,我们将探讨生成式AI(特别是深度研究工具)如何解决一个极具挑战性的问题:为复杂的跨学科研究项目组建专家团队。我们将以范德堡大学响应政府研究倡议为例,说明AI如何融合多领域知识,高效地“组装”人力资本。
深度研究的融合能力
上一节我们介绍了AI在特定领域的专长,本节中我们来看看它在融合多领域信息方面的超能力。深度研究工具具备一项令人印象深刻的能力,即跨越许多不同领域去融合信息。
尽管单个人类专家可能在某一领域更出色,但这些工具真正大放异彩、产生巨大影响力的场景,是当我们面临那些横跨大量技术性或复杂性领域的问题时。为了解决这类问题,需要融合所有这些不同领域的信息和概念。
复杂问题的典型场景
那么,这类问题具体是什么样子呢?一个引人入胜的例子就是“人力资本”问题。当我们拥有一个大型组织、大量人员和资源,并且需要解决某个问题或完成某项任务时,我们应该让谁参与进来?组织规模越大,问题越复杂,就越难确定谁拥有合适的技能,他们如何协同工作,以及我们如何将所有资源整合成一个能够执行任务的有价值团队。
问题越庞大,这项工作就越困难。如果我们整天都在用同一批人解决非常简单的常规问题,则不需要这种能力。但如果你正在处理一个极其复杂、难以攻克的问题,需要去寻找合适的专业知识,那么这种能力就具有难以置信的价值。
同样,对于其他所有需要汇集跨学科专业知识、融合多种不同见解,以形成深思熟虑的研究或产品的问题,这种能力也极具价值。
大学研究背景下的应用
现在,我们将在大学研究的背景下审视这个问题。“多大学研究倡议”是美国政府资助大学各类基础科学与研究的项目。其中一个难题是,当项目发布时,它包含20多个高度技术性的主题。范德堡大学收到这个项目后,如何找到那些研究领域可以融合、从而共同攻克每个主题的教职员工团队?你如何找到合适的人选来撰写研究计划,争取这笔研究经费,并尝试解决这些困难的科学问题?
这很困难,因为这些是超级复杂的事情。校园里没有任何单一个体能认识所有人,并充分了解每个人的工作,从而为这个项目所寻求的每一个提案主题,有效地找出优秀的团队去争取。
向深度研究工具提出挑战
所以,我们将把这个问题交给深度研究工具,让它来为范德堡大学“组装”人力资本,以应对所有这些不同研究主题的提案征集。
以下是给AI的指令概要:
- 查看新的“多大学研究倡议”项目。
- 为每个主题,提出由范德堡大学教职员工组成的跨学科研究合作团队。
- 为每个主题,思考关键研究领域和相关术语。
- 寻找在此领域某些方面知名的范德堡大学教职员工。
- 寻找来自其他学科、可以与他们以意想不到的方式合作、从而创造出激动人心提案的教职员工。
- 寻找校园里以前获得过此类奖项、团队可以致电寻求指导或可以加入团队的教职员工。
- 最终,为每个主题提供一个范德堡大学教职员工团队及融合他们研究的可能想法。
我认为校园里没有任何单个人或团队能很好地完成这项工作。这是一个极其困难的问题:审视校园里所有范德堡大学的教职员工和研究人员,弄清楚如何将他们的研究“缝合”在一起,以创建团队来攻克这些高度技术性的科学主题。除此之外,还要试图找出以前获得过此类奖项、可以为他们提供建议的人,同时寻找那些疯狂的、跨学科的、意想不到的联系,这些联系可能以某种独特的方式提升团队实力。
这确实需要融合如此多的学科,理解如此多的主题,才能“组装”起人力资本去解决和攻克这些不同的研究问题。
理解任务的PhD级难度
现在你可能会问自己,我之前谈了很多关于AI能处理PhD级别内容的想法。我想让你感受到,是的,它确实可以,它在许多事情上具备类似PhD级别的洞察力。
让我们看看这个项目是关于什么的。如果你阅读实际的征集书,它会说:本计划涉及高风险基础研究,旨在理解或实现前所未有之事,并定期产生重大科学突破。这些都是非常复杂的研究主题,并非常识,也不是我们知道答案的普通认知。AI需要推理出哪些范德堡大学的教职员工拥有专业知识,有可能在该主题上取得科学突破。从理解它需要做什么的角度来看,这是PhD级别的任务。
如果你想看一个示例主题,让我们看看这个:主题6,真菌字母表:破译真菌网络的隐藏语言以获取环境智能。这只是22个主题中的一个。现在,请思考一下。如果你必须去组建一个团队来做这件事,那将异常困难。仅仅是组建一个团队来找出所有能胜任的教职员工,就非常复杂。
想想试图解决这个难题所需的管理开销和复杂性。而实际情况很可能是,等到团队终于组建好所有团队时,为时已晚,因为提案征集的截止日期已经过去,我们无法解决问题了。
人力资本组装的瓶颈
因此,这是一个绝佳的例子,说明在某些情况下,我们不仅没有时间去“组装”人力资本,更可能的是,我们甚至无法“组装”出能够决定谁应该去争取这个问题的人力资本。我们找不到能够为我们解决这个问题的人类专家,因为所需的知识横跨太多不同的领域,并且在技术上非常精深。要找到一组个体并及时将他们组织起来以解决问题,将非常非常困难。这正是AI工具大显身手的绝佳案例。
所以,这是一个极好的例子,说明了何时应该使用它:
- 问题横跨许多不同领域。
- 需要对这些领域有大量的技术性理解。
- 一个很好的用例是当你需要根据团队成员的专长和经验,将人力资本“组装”成团队时。
信息准确性的关键作用
现在,回到那个观点:如果AI找不到信息,它就无法解决问题。当我们执行这个任务时,从我的角度来看,它在组建范德堡大学教职员工团队方面做得非常出色。
它做得不完美的一点是,它依赖我们的网站来确定谁是范德堡大学的教职员工。而我们的网站并不总是最新的。有时教职员工离职了,更新网站需要几个月时间。有时甚至需要更久,我不得不承认,通常至少需要几个月才能更新信息,说明某位教职员工已前往其他大学。
所以,它实际上组建了一些很棒的团队,但其中一些成员已经去了其他地方。这正好回到了那个关键点:它将根据其可用的信息给你一个答案。
在这种情况下,如果我能以某种方式收集关于范德堡大学实际教职员工的信息,并告诉AI用它得出的结果与实际的教职员工名单进行交叉核对,结果可能会更好。但我没有那样做。这向你表明,当你进行此类操作时,请注意,如果它没有准确、最新的信息(例如,关于你的人力资本、你的业务、你的约束条件或它正在处理的问题),它就不会给出完美的结果。
尽管如此,这仍然是一个极其有效、优秀的用例:我们如何为复杂问题“组装”人力资本,尤其是在我们甚至不清楚需要哪些专业知识以及如何将它们组合起来的情况下。

本节课中我们一起学习了生成式AI在融合跨领域专长方面的强大应用。我们通过范德堡大学响应复杂研究项目提案的具体案例,看到AI如何能够理解高度技术性的主题,并跨越学科界限,识别和组合合适的人类专家来形成潜在的研究团队。这展示了AI在解决需要“超人类”广度知识融合、特别是在时间紧迫或人力难以全面协调的场景下的战略价值。同时,我们也再次认识到,确保AI所依据信息的准确性和时效性,是获得可靠结果的关键。
006:融合埃塞俄比亚与墨西哥食物制定膳食计划

在本节课中,我们将通过一个具体的示例,来理解如何将大型语言模型(如ChatGPT)作为强大的创意原型工具,而不仅仅是问答或写作助手。我们将看到如何将一个复杂的想法逐步具象化、迭代和完善。
将语言模型视为创意原型工具


上一节我们介绍了语言模型的基本概念,本节中我们来看看如何将其作为工具来使用。
你不应将ChatGPT这类大型语言模型仅仅视为撰写文章或回答问题的工具,那样会大大低估其能力。它们实际上是能够帮助你将想法具象化、探索多种概念,并通过与工具的交互来不断优化这些想法的强大工具。这些工具能让你完成许多令人着迷的事情。



接下来,我将通过一个示例来展示这些工具的巨大潜力,以及它们如何帮助你完成那些原本非常困难的任务。
一个复杂的创意:融合菜系制定膳食计划


为了找到一个大家都能理解的例子,我想到了我的家庭和一个“疯狂”的想法。我们身边有很棒的乌兹别克斯坦餐厅和埃塞俄比亚餐厅。于是我问自己:创建一个融合了乌兹别克斯坦和埃塞俄比亚菜系的膳食计划会是什么样子?

此外,我过去尝试过生酮饮食,所以我想这个计划最好也是生酮友好的,因为我仍然希望限制碳水化合物的摄入。同时,考虑到实际操作性,所有食材必须能在我家附近的普通美国超市轻松买到,否则我可能不会去烹饪这些餐食。
向ChatGPT提出初始请求

基于以上想法,我向ChatGPT提出了第一个请求。这是一个相当复杂的问题,我认为世界上很少有人能轻易回答,即使有,我也很难找到他们,雇佣他们的成本也会很高,而且他们绝不可能像AI这样快速地为我完成。
我的初始提示是:
请为我的家庭创建一个基于埃塞俄比亚和乌兹别克斯坦食物融合的膳食计划。我希望采用生酮饮食,并且每天摄入不超过2000卡路里。选择的菜肴食材应能在普通美国超市轻松购得。
模型的首轮回应与分析
ChatGPT迅速给出了回应:“这是一个结合了埃塞俄比亚和乌兹别克斯坦风味,同时符合生酮要求且每日热量在2000卡路里以内的示例膳食计划。”
以下是它提供的部分内容:
- 早餐:用炒鸡蛋搭配炒洋葱、番茄和埃塞俄比亚Berbere香料(注:由辣椒粉、红甜椒粉、大蒜粉、姜、孜然和香菜制成)。
请注意它的做法:它在括号内注明了Berbere香料的常见成分。这暗示了这种香料可以在普通美国超市买到,因为所有这些香料都很容易获取。它不仅回答了我的问题,提供了一个埃塞俄比亚风味的早餐建议,还额外提供了关于食材可获得性的信息。
虽然我不确定这是否是一道非常地道的埃塞俄比亚菜肴,它可能只是受其启发并进行了美式改良,但对于我正在尝试的“原型设计”目标来说,这已经相当令人印象深刻了。


它继续提供了午餐、晚餐等建议,例如“乌兹别克风味羊肉串配烤蔬菜……”。所有这些建议看起来都相当符合生酮饮食的原则。
这个初步结果可能包含错误,也不完美,但它为我这个“疯狂”的想法提供了一个非常好的初始形态。我可以在此基础上继续工作、优化和改进。这正是我希望你在本课程中思考的一点:不要将其视为一次性问答,而是一个迭代的过程。
迭代优化:添加份量信息
基于首轮回应,我意识到还缺少一个关键信息:我不知道每道菜应该吃多少。因此,我进行了第一次迭代优化。
我接着提问:
你能为每道菜提供一个适合我(在2000卡路里限制内)的大致份量吗?
ChatGPT回应道:“当然,以下是基于每日2000卡路里限制的每道菜大致份量。” 然后它详细列出了每餐的食材具体用量,例如早餐是“两个鸡蛋,半杯洋葱,半杯番茄,一茶匙Berbere香料混合物,配以四分之一个中等牛油果”。
现在,我拥有了更具体的执行信息。我并没有立即去计算这些食物的具体宏观营养素,因为我当前的目标是快速探索和原型化这个想法。我可以继续优化,要求它进行更详细的分析,以确保完全符合我的需求。
深化创意:融入家庭互动元素
接下来,我想将这个想法进一步深化,使其更贴合我的家庭生活。我的妻子和我比较喜欢尝试新食物,但我9岁的儿子并不总是愿意尝试新菜肴。我该如何让他对尝试这些新食物感到兴奋呢?
于是,我再次转向ChatGPT寻求帮助。我提出了新的请求:
我的儿子9岁,有时他不愿意尝试新菜肴。为了让这次烹饪冒险对他更有趣,你能为每道菜创作一个简短的宝可梦对战故事吗?……请确保每个故事都以一个悬念结尾,激励他去尝试新食物。
也许我能找到一个人来制定这个融合菜系的生酮膳食计划,但几乎不可能有人能像AI这样快速地完成。而现在这个请求——创作结合特定菜肴的定制化儿童故事——更是进入了难以找到单个人类专家来完成,且成本高昂的领域。而我在几分钟内就完成了。
模型的创意生成:故事与游戏
ChatGPT的回应非常出色:“当然。以下是为每道菜搭配的一些简短宝可梦对战故事。”
例如,针对那道含有Berbere香料的早餐,它创作了一个故事:皮卡丘和朋友们在埃塞俄比亚荒野探险时,被一群狡猾的宝可梦盗贼伏击……最终他们战胜了“Berbere火龙”,但火龙留下了一种火辣的香料,赋予了他们的早餐鸡蛋独特的风味。故事以悬念结尾:“你能帮助皮卡丘和他的朋友们击败Berbere火龙,并享用这顿辛辣的早餐吗?”
这非常了不起,不是吗?我们从一份膳食计划,发展到通过融入我儿子感兴趣的元素(宝可梦)来帮助他对用餐感到兴奋。虽然这个悬念可能不是最完美的,但这并不重要,因为我正在快速实验我的想法,试图赋予我的思想以形态。
接着,我想到在餐桌上我们还会讨论儿子在学校学的东西,他喜欢数学和数学游戏。我能否将这一点也整合到这个“疯狂”的想法中呢?
我继续请求:
我想请你和我的9岁儿子玩一个数学游戏,教他关于分数除法和营养知识。每次问他一个涉及宝可梦和这些主题的问题,并将其变成一个游戏:当他答对时,宝可梦就获胜。请提出第一个问题。
ChatGPT回应道:“太好了!让我们来玩一个涉及宝可梦和营养的有趣数学游戏。问题一:皮卡丘和他的朋友们计划的一餐中包含半杯熟米饭,但他们需要将其平均分给三只宝可梦。每只宝可梦能得到多少米饭?” 然后它给出了提示,并等待我(或我儿子)的回应。



这时,交互模式发生了转变:从我们向它提问,变成了它根据我们的指令向我们提问。我输入了答案“1/6”。ChatGPT随后反馈:“干得好!答对了。每只宝可梦将得到1/6杯熟米饭。我们通过将1/2除以3得到这个答案……”并为我们展示了计算过程。

从概念到软件:实现最终形态
至此,我们已经从一个融合菜系的生酮膳食计划(疯狂想法),发展到添加了份量信息,再到生成了激励孩子的宝可梦故事,最后创建了一个结合营养知识的数学游戏。
我想,我们还能做些什么来真正赋予这个想法完整的形态呢?于是,我运用了我作为计算机科学家的领域知识,决定为这个游戏编写代码,制作出真正的软件。
我提出了更技术性的请求(具体细节因涉及专业知识而省略),关键点在于:ChatGPT随后生成了实际的Python软件代码,用于创建一个可以运行这个数学游戏的网络应用程序。最终,我得到了可以真正在电脑上运行、与儿子互动的软件。
总结与核心启示
本节课中,我们一起学习了一个完整的示例,展示了如何利用大型语言模型进行创意原型设计。
我们从一个简单的想法(融合菜系膳食计划)出发,通过快速迭代和原型化,将其发展成了多种不同的形态:
- 基础方案:符合特定饮食和地域限制的膳食计划。
- 优化方案:添加了具体的份量/热量信息。
- 扩展形态:生成了用于提升兴趣的定制化儿童故事。
- 互动形态:创建了结合教育目的(数学、营养)的互动游戏。
- 实体形态:最终生成了可运行的游戏软件代码。
在整个过程中,我们可以在任何时间点对任一形态进行进一步细化,也可以将其重塑成完全不同的形态,甚至最终将语言模型生成的“形态”转化为独立运行的软件。
这种将我们的想法快速迭代和原型化的能力,正是我们使用ChatGPT这类大型语言模型所能做到的强大事情的例证。希望这个示例能激发你对本课程即将学习的内容的热情,并理解这些工具在战略创新中的巨大潜力。
007:课程概述 🚀
在本课程中,我们将学习提示工程的核心概念与实践方法。提示工程是一门关于如何设计有效指令,以引导大型语言模型(如ChatGPT)生成高质量输出的学科。通过学习,你将掌握与这些强大AI工具高效互动的能力。
课程介绍
我是朱尔斯·怀特,范德堡大学计算机科学副教授兼工程学院战略学习项目副院长。我将引导你探索这个引人入胜且至关重要的主题:我们应如何与ChatGPT这类大型语言模型进行交互。
本课程旨在重塑你对这些工具的认知。它们不仅是新闻中常被讨论的考试作弊或论文代写工具,从我的视角看,它们更是一种能释放人类创造力的新媒介。这些工具能帮助你实现以往难以完成的事情,快速地将想法转化为具体形式,让你比以前更快、更好地完成任务。
我的背景始于视觉艺术,曾学习东亚研究,最终成为计算机科学家。但我始终对创造力充满热情,探索如何使用不同媒介(无论是绘画、陶瓷还是代码)来做有趣的事情。我将大型语言模型视为一种新的基础媒介。我可以用它编程,也可以用它创作艺术、改进写作、进行思维实验。像ChatGPT这样的大型语言模型拥有众多有趣用途,但目前的讨论并未充分展现这一点。
因此,本课程的核心是教你如何利用这些模型的各项能力。而为了发挥这些能力、进行真正的创造性工作,你必须理解如何编写提示词。这就是本课程的内容:如何与ChatGPT或其他大型语言模型交互。提示词即你输入给模型以获取某种输出的文本。
从根本上说,这些是非常令人兴奋的工具。我认为它们扩展了我们作为人类表达自我、探索新想法和进行创作的能力,让我们能比以往任何时候都更快地实现想法。
课程目标与ChatGPT的欢迎词
现在,让我们开始这门课程。我实际上邀请了ChatGPT来帮助我们欢迎各位,并简要介绍我们将要学习的内容。
ChatGPT说:欢迎学习提示工程课程。在本课程中,你将了解提示工程这一令人兴奋的领域,它主要涉及创建能够编程大型语言模型以产生高质量输出的提示词。我们将探索不同类型的提示词、其模式以及优化改进它们的技术。你还将学习如何将大型语言模型用于各种任务,例如知识探索、原型设计、内容生产和评估。课程结束时,你将更好地理解如何有效使用大型语言模型,及其塑造计算未来的潜力。
让我们开始吧。
课程先修要求
基于以上介绍,我的第一个问题是:我需要确保自己不必是程序员也能从本课程中受益吗?我需要懂编程才能学习这门课吗?
不需要。 你不需要任何编程经验即可学习本课程。本课程的重点是创建有效的提示词,并使用大型语言模型来实现你期望的输出。虽然理解编程可能有所帮助,但对于掌握本课程将涵盖的概念和技术而言,并非必需。
那么,学习本课程前了解哪些其他事情会对我有帮助呢?
虽然编程经验不是必需的,但如果你对基本计算机概念(如文件管理、打开和保存文件、使用命令行界面)有一些了解会很有帮助。这里的命令行界面,可以类比为ChatGPT这样的交互界面。此外,拥有良好的写作技能和创造性思维能力,对于为大型语言模型生成有效的提示词非常重要。最后,乐于探索新的、不断发展的技术和方法,将是你能从本课程中获得最大收获的关键。
因此,正如ChatGPT恰当地指出的那样,你真正需要了解的东西并不多。你需要一些基本的计算机概念理解,需要能够打开ChatGPT并与之交互。显然,如果你无法使用这类工具,学习将会很困难。但既然你在这里,很可能已具备所需的计算机技能。
我想谈谈第二点。我们通常认为这些模型源于计算机科学,但实际上,拥有写作经验、能够清晰有效地思考写作,对使用它们非常有帮助。我的父亲曾是创意写作教授,这让我深受启发。当我使用这些工具时,从他那里学到的关于如何设计提示词的知识对我帮助很大。
最后,我想强调最后一点:创造性和探索的开放性对于使用这些工具而言确实非常重要。输入提示词的人类用户的创造力——决定提示词包含什么内容、如何组织、提出什么问题以及给出什么指令——对于有效使用这些工具至关重要。
我们听过很多关于这些工具的讨论,比如它们是抄袭工具,或是用于做某些坏事的工具。但事实是,如果你想真正有效地使用它们,你必须具备技能。你必须是一个创造性的思考者,一个创造性的问题解决者。你越有创造力,输出结果就越好。你还需要有开放的心态去探索。必须记住,这些工具仍处于早期阶段,我们尚未制定出最佳实践,也未探索出在所有不同领域(从医疗保健到客户服务,再到创意写作等)如何使用这些工具、如何编写提示词的最佳方法。因此,乐于去探索和尝试不同事物非常重要。
事实上,当你使用这些工具进行“编程”或工作时(不要因为我说“编程”而感到害怕,因为你会看到,任何人都可以通过编写普通的人类语言来使用这些工具进行编程),你经常需要尝试不同的事情。你需要尝试某种方法,并乐于尝试其不同的变体,观察会发生什么,进行一些小实验。在现实生活中,我们通常需要付出大量努力来撰写某些内容、开发软件或完成其他任务,以至于我们没有足够的机会去进行应有的探索,没有足够的时间去思考设计和大局,去思考我们要解决的问题。因此,在使用这些工具时保持探索的开放性是一件好事。
核心学习概念
那么,本课程中我们将学习哪些有助于解决问题的关键概念呢?
在本课程中,我们将学习以下几个核心概念:
- 理解提示词是什么,以及如何使用它们来编程大型语言模型以生成高质量输出。
- 学习如何创建有效的提示词,包括利用训练数据中的模式、使输入具体化,以及使用诸如角色扮演模式、问题精炼和认知验证器等模式。
- 理解如何优化提示词,并使用诸如重写、组合、拆分和扩展等技术来实现期望的输出。
- 学习如何将大型语言模型用于各种任务,如知识探索、原型设计、内容生产、评估等。
- 理解如何使用少量示例来教导大型语言模型执行新任务,以及如何正确格式化这些示例以获得期望的输出。
通过学习和应用这些概念,我们可以有效地利用大型语言模型来解决问题,并在广泛的应用中生成高质量的输出。
总结与展望
我希望,随着我们深入学习本课程,你能受到启发,将学到的想法付诸实践,进入ChatGPT或任何你可用的工具中进行尝试,探索你热衷的领域,并找到释放自身创造力的方法。你会发现,你可以为自己腾出更多时间进行高层面的思考和解决问题,而不是陷入如何将想法具体化的细节之中。
因此,贯穿本课程的一个主题将是:尝试通过这个工具将你的想法转化为形式,将其用作加速你的想法变为现实的工具。
我期待与你一起探索提示工程这个引人入胜的概念和主题。
008:扮演言语病理学家 🧠

在本节课中,我们将通过一个具体示例,来理解提示工程为何如此重要。我们将看到,通过使用特定的提示模式,可以激发出大型语言模型(如ChatGPT)复杂而强大的能力,完成我们自身知识领域之外的任务。
为了帮助你理解提示工程的重要性,我将给出一个初始示例。这个示例展示了我们如何触及ChatGPT真正复杂的能力,当然,你也可以在其他大型语言模型上实现类似效果。
我们触及这些能力的方式,是使用一种模式。这是一种在编写提示时可以使用的模式,它能帮助我们利用大型语言模型这些非常有趣的能力。如果你了解这些模式(我们将在课程中详细讨论),你编写提示的效率会更高,也能完成其他人难以轻易做到的事情。
现在,我将给出一个示例。它将使用一种叫做 “角色扮演模式” 的模式。在此,我不会深入探讨该模式的细节,但本质上,这是一种随处可见的模式。你会在互联网上看到大量关于使用这个模式完成各种不同任务的例子。
核心概念:角色扮演模式
其基本思想是,你要求大型语言模型(本例中是ChatGPT)扮演一个特定的角色。这意味着你可以要求它扮演一个人、一个无生命的物体、一只动物或某个系统。使用方式多种多样,非常有趣。
在本示例中,我们将使用这个模式来触及一个与我个人相关、但我对其领域一无所知的角色。角色扮演模式的一个真正有用的地方在于:你可以想象,如果你需要打电话给一位专家以获取某个问题的帮助,你知道该打给谁,但你并不确切知道他们会告诉你什么,或者他们会如何分析你的问题。
因此,我需要一个场景:我认识一位可以求助的专家(本例中我的妻子是一名言语病理学家),这样她可以查看输出结果并告诉我其质量如何;但我自己对成为言语病理学家或如何完成他们的工作一无所知。
示例场景:分析儿童言语
我设想了一个场景:当我儿子三岁时,他说话不太清楚。于是,我找到ChatGPT并输入了以下提示:
你作为一名言语病理学家,我将告诉你一个三岁孩子说的话,请你为我撰写一份评估报告。
孩子说:“I need Wei Wi。”
你可以想象,这可能只是我这个家长听错了,或者孩子发音不准确。我甚至不知道如何正确记录这句话,不知道如何用语言正确表达这一切。所以,从我的角度来看,这是一个复杂的问题——我甚至不知道如何用语言恰当地描述这一切以提出问题。但我知道,我会去找一位言语病理学家并向他/她描述这个情况。
我试图想出一句听起来像我儿子在那个时期可能会说的话。那么,ChatGPT是如何回应的呢?
模型输出与分析
首先,你注意到它的输出看起来像一份报告。报告标题是“三岁儿童言语样本评估”,将“I need way O”放在引号中,并开始进行评估。
评估:根据提供的言语样本,该儿童可能正在经历一些在这个年龄段常见的音韵学和构音错误。
我并不知道什么是“音韵学”或“构音”错误。我原本不会知道该向ChatGPT询问这些内容。但是,基于我使用的这个“角色扮演模式”,我触及了ChatGPT的能力,让它能够审视这个问题并知道应该告诉我哪些正确信息。
报告指出存在音韵和构音错误,并说明儿童的言语似乎在辅音生成上存在错误,并且可能在音节结构上存在一些困难。
以下是报告的具体分析要点:
辅音错误:儿童似乎在生成某些辅音时存在困难,特别是 /n/ 和 /l/ 音。孩子将“need”说成了“me”,将“toy”说成了“why”(它假设原本想说的词是“need”和“toy”)。
音节结构:儿童对单词“way”的发音可能表明其在正确的音节结构上存在困难。孩子可能原本想说“play”,但说成了“way”,这暗示了将首辅音簇 /pl/ 替换成了单个辅音 /w/。这可能是一个叫做“辅音簇简化”的音韵简化过程的例子。
我原本不会知道如何要求ChatGPT去检查是否存在音节结构问题或辅音簇简化。但我使用了“扮演……”这个模式,要求它“扮演一名言语病理学家”,于是我就得到了这些丰富的输出,而这些内容我甚至不知道该如何去索要。
现实检验与模型洞察
接着,报告继续分析。顺便一提,如果你想做一件非常不受欢迎的事,那就是让ChatGPT生成一份看起来像是在做某人工作的输出。我就在一天早上对我妻子做了这样的事。
我妻子当时并不太高兴,因为她正准备去上班,而我却在说ChatGPT正在生成类似她工作成果的东西。她对我说的话之一是:“如果那真是个三岁孩子,我会告诉家长他们可能不需要担心,孩子的言语能力还在持续发展……”(我在转述她的话,她说得更优雅)。她的意思是,ChatGPT对这个简单样本进行了过度复杂的分析。
我说,是的,但ChatGPT在报告最后也说了这一点:
考虑到儿童的年龄,重要的是要记住,一些言语声音错误是发育过程中正常的,可能会随着时间的推移自行解决。
当然,那时她已经出门了,因为她实在没准备好在早上坐着听我告诉她ChatGPT正在做言语病理学家的工作。我认为这会取代她的工作吗?不。但我认为,通过正确的模式,我们可以利用它真正广泛而强大的能力。这让我们能够将精力集中在我们真正想花时间的事情上。
我妻子喜欢与孩子们一起工作,喜欢与他们互动并尝试理解如何帮助他们。撰写报告呢?也许(我不想过多代表我妻子发言)这可能不是她工作中最喜欢的部分。她真正热爱的是与孩子们一起工作并努力帮助他们。
因此,你可以想象,像这样的工具可以让她更专注于她在现实世界中真正关心的事情。也许它能帮助她将关于孩子需求的思考具体化,并撰写这些报告。我只是希望你能看到,通过在我们的提示中加入一点正确的结构,我们就可以创造出这些强大的方式,通过大型语言模型将我们的想法和思考具体化。
本节总结
本节课中,我们一起学习了“角色扮演模式”的一个生动示例。我们看到,通过让ChatGPT扮演“言语病理学家”的角色,即使提问者对该领域一无所知,也能获得专业、结构化的分析报告。这个例子揭示了精心设计的提示如何能挖掘出大型语言模型深层的领域知识,并将其应用于解决特定问题。关键在于使用正确的模式来引导模型,这不仅能提升输出质量,还能将人类从格式化的劳动中解放出来,更专注于需要创造力、同理心和复杂决策的核心工作。
009:什么是大型语言模型 🧠




在本节课中,我们将要学习大型语言模型(LLM)的基本工作原理。理解这些核心概念将帮助你更有效地设计提示词,从而更好地利用这些强大的AI工具。

概述:大型语言模型的核心任务


大型语言模型最根本的任务是:接收你的输入,并尝试逐词生成后续内容。你可以将其想象成一个极其复杂的“下一个词预测器”。






核心公式:
输出文本 = 模型(输入文本) -> 预测下一个词 -> 将预测词加入输入 -> 重复预测


它从你给出的提示词开始,预测最可能出现的下一个词,然后将这个词添加到已有的文本中,再基于这个更长的文本预测下一个词,如此循环,直到模型认为回答已经完整,通常会生成一个你看不见的“停止”信号。
工作原理:逐词预测




上一节我们介绍了LLM的核心任务是预测下一个词,本节中我们来看看这个过程是如何具体运作的。



模型在训练时,学习了互联网上海量文本数据中的语言模式。训练过程大致如下:给模型看一段不完整的句子,让它尝试预测缺失的下一个词。如果预测错误,就调整模型的内部参数(这些参数数量极其庞大,因此称为“大型”语言模型)。通过无数次这样的练习,模型学会了根据上下文来预测下一个词。
示例:
- 输入提示:
“Mary had a little” - 模型预测:下一个词很可能是
“lamb”。 - 然后,输入变为
“Mary had a little lamb”,模型继续预测下一个词,可能是“Its”,以此类推,最终生成完整的童谣。
这个过程表明,模型并非“理解”语义,而是基于统计规律,计算出在给定上下文中概率最高的下一个词是什么。
关键特性与设计提示词的启示
了解模型如何工作后,我们来看看几个关键特性,这些特性直接影响我们如何设计提示词。
1. 依赖上下文
模型预测的准确性高度依赖于提供的上下文。相同的开头可能导向不同的结局。
示例对比:
“Roses are red”可能引出“violets are blue”。- 但
“Mary had a little”后面不一定是“lamb”,也可能是“bit of peanut butter on her shirt”。
模型会根据它从训练数据中学到的常见模式(即“上下文”)来做出最可能的预测。因此,在设计提示词时,提供清晰、相关的上下文至关重要。
2. 输出的随机性与可变性
这些模型并非每次都会生成完全相同的输出,其内部存在一定的随机性。这既是挑战,也是优势。
示例:
多次输入 “Roses are red”,可能会得到略有不同的诗歌续写。
以下是使用这类模型时需要牢记的几点:
- 非确定性:不要期望每次输出都完全一致。这对于创意写作是优点,但对于需要一致结果的任务则是挑战。
- 迭代优化:很少有一次就得到完美输出的情况。通常需要多次尝试、调整提示词来获得理想结果。
- 流程设计:如果在业务中使用,需要设计流程来处理输出的可变性,例如加入人工审核或后处理步骤。
3. 知识截止日期
大型语言模型的知识来源于其训练时所使用的数据,这些数据有明确的截止日期。
核心概念:
模型知识范围 = 训练数据截止日期(例如:2021年9月)
例如,ChatGPT的某个版本的知识可能截止于2021年初。这意味着:
- 模型无法知晓训练截止日期之后发生的事件或发布的信息。
- 当需要模型处理新知识或非公开信息时,你必须将这些信息作为提示词的一部分提供给它。模型本身不会实时更新或联网搜索(除非特定功能支持)。
总结与展望
本节课中我们一起学习了大型语言模型的基础:
- 核心机制:LLM本质上是基于海量数据训练的“下一个词预测器”,通过逐词生成来构建回复。
- 关键特性:其输出严重依赖上下文、具有内在随机性,并且知识受限于训练数据的截止日期。
- 对提示词设计的启示:为了获得最佳效果,我们需要在提示词中提供清晰上下文,接受并管理输出的可变性,并主动为模型补充所需的新信息。
记住,这是一个飞速发展的领域,新的模型(如GPT-4、LLaMA等)不断涌现。保持开放心态,勇于实验和探索,是掌握提示词工程的关键。在接下来的课程中,我们将基于这些基础知识,深入探讨设计有效提示词的具体模式和技巧。
010:输出中的随机性 🎲
在本节课中,我们将要学习大型语言模型输出中的一个核心特性:随机性。理解并管理这种随机性,是有效进行提示工程的关键。
概述
大型语言模型至少在近期内,不太可能每次都给出一个精确且可重复的答案。它们总是有可能做出一些意料之外的事情。这是设计使然,并且可以是一件好事。我们即将进行的许多提示工程工作,正是为了应对大型语言模型所具有的这种不可预测性。我们希望约束这种不可预测性,塑造它并以一种对我们有益的方式与之协作。
随机性的两面性
上一节我们介绍了随机性是模型的内在特性,本节中我们来看看这种特性的具体表现和影响。
这种随机性意味着,每次输入提示时,模型都有能力生成新的、不同的想法。这在某些情况下非常有益。例如,当我们进行小说创作时,我们可能希望获得大量不同的创意、故事情节和角色。每次我们请求新的数据或输出时,都能得到全新且独特的内容,这非常理想。
另一方面,如果我们希望大型语言模型对某个系统进行某种推理,我们可能不希望它有太多变化。例如,如果我们想要一个“是”或“否”的答案,我们不希望它有时说“是”,有时说“否”,然后突然决定说“嗯,可能不是,因为这里有一些其他原因让我难以确定”,并就此展开一两段长篇大论,解释为何无法给出确切答案。有时我们只想要一个不带任何解释的“是”或“否”。但我们并不总能轻易得到这个结果。因此,许多提示工程技术都将致力于处理这个问题。
随机性示例
以下是随机性的一个快速示例,它展示了相同的输入并不一定每次都能给出完全相同的输出。在学习本课程时,请记住这一点,因为我会展示许多不同的技术来尝试让大型语言模型执行特定任务,有时它们效果很好,有时则不然。但这些技术通常能为你提供更可靠的结果,在大多数时候或很多时候有效,但并不能保证每次都绝对有效。
这是一个重要的观点。我们总是会面临一些随机性,总是会有一些未知因素。我们必须接受并处理这一点。
我向ChatGPT提问:“how many birds are outside my house.”(我家外面有多少只鸟。)它回答:“as an AI language model, I don‘t have the capability to perceive the physical world...”(作为一个AI语言模型,我没有感知物理世界的能力...)然后它接着说:“if you’re interested in finding out how many birds are outside of your house. You can go outside and observe the area yourself. You might also consider set up a bird feeder.”(如果你想知道你家外面有多少只鸟,你可以自己出去观察一下。你也可以考虑设置一个喂鸟器。)
好吧,这很有趣。让我们看看再问一次它会说什么。
现在我们得到了一个不同的答案:“I can‘t see what’s going outside your house. I don‘t have access to cameras. I only do text processing.”(我看不到你家外面发生了什么。我无法访问摄像头。我只进行文本处理。)然后它说:“you could go outside and observe the area yourself where you could set up a camera or monitoring device to record, get the number of birds...”(你可以自己出去观察,或者设置摄像头或监控设备来记录,获取鸟的数量...)现在我们得到了一些不同的内容,之前关于设置喂鸟器的建议这次没有了。
如果我们再运行一次,很可能还会得到另一个例子。它可能仍会包含一些相似的特征,比如仍然会说“嘿,我没有能力做那件事”,它会输出一些它标准的解释文本。

但接着它说:“hey, if you‘re interested in how you could try observing the area or to capture images of the area. you can then count the number of vers you see. Additionally. you could consider setting up bird feeders or bird baths.”(嘿,如果你有兴趣知道如何尝试观察该区域或捕捉该区域的图像,你可以数一数你看到的鸟的数量。此外,你可以考虑设置喂鸟器或鸟浴盆。)

因此,我们每次得到的输出都相似,但并非完全相同。对于这个问题来说,这是一个相当受限的输出集合,我们每次仍然会得到一些相似类型的内容,但并非完全一样。这对我们来说将始终是一个问题。
应对随机性
所以要知道,当你开发提示词时,你处理的很多问题都源于存在变化这一事实。现在,如果我想要它给我一个确切的数字,并且我使用这样的提示,这显然行不通。我们无法通过这个提示得到我家外面鸟的确切数量。我们可能需要回过头,为它提供额外的信息来帮助它做出决定。
总结
本节课中我们一起学习了大型语言模型输出的随机性。我们了解到这种随机性既是创造力的来源,也是追求确定性答案时的挑战。核心在于,相同的输入 prompt 并不总是产生完全相同的输出 output。许多提示工程技术的目的,就是通过提供额外的上下文、约束条件或结构化指令,来引导和塑造这种随机性,使其更符合我们的预期,提高输出结果的可靠性和一致性。记住,我们的目标是管理随机性,而非完全消除它。
011:什么是提示词 🧠
在本节课中,我们将深入探讨“提示词”这一核心概念。提示词是与大型语言模型交互的基础,理解其多维度的含义对于有效进行提示工程至关重要。
什么是提示词?
我们经常谈论提示工程,以及如何与大型语言模型互动。现在让我们深入探讨“提示词”这个词,因为它不仅仅是向大型语言模型提出的一个问题。为了理解这个概念,我们将通过几个示例与ChatGPT进行互动,来探索提示词的维度和深度。
首先,我向ChatGPT提问:“提示词这个词是什么意思?”
它给出了一些非常有用的信息,可以帮助我们理解提示词:
-
作为动词:指“促使或鼓励某人做某事,激励他们采取行动”。例如:“老师关于即将到来的考试的提醒,促使学生们开始学习。” 提示词的一部分作用,就是向大型语言模型发出行动号召,让它开始为我们生成输出,即开始生成构成我们输出基础的词语。这些词语可以呈现为多种格式,如软件代码、诗歌、结构化数据等。关键在于,提示词是我们让大型语言模型开始为我们提供输出的方式。
-
作为形容词:指“及时、准时完成”。这对于思考大型语言模型很重要,因为我们正在“即时”地提示它们。但这也是一个有益的讨论点,因为提示词不一定必须是即时发生的。提示词可以与时间相关联。当我们向ChatGPT这类大型语言模型提供提示时,提示词可以影响我接下来给它的陈述,也可以影响未来的某个陈述。这是因为这些大型语言模型具备对话能力。提示词本身可以是对话,我们稍后会讨论。目前可以这样理解:提示词不一定必须是即时的,它可以是,但并非必须。
-
作为名词(含义一):指“帮助某人记住他们应该做什么或说什么的线索或提醒”。这很重要,因为我们可以使用提示词来提醒大型语言模型记住某些信息或它需要做的事情。我们可能要求它现在做某事,也可能要求它在未来做某事,这时它需要记住一些事情,所以我们需要给它一个关于它试图做什么的提醒。我们可能需要回溯并提供对话历史或其他有助于它记住目标的信息。
-
作为名词(含义二):指“出现在计算机或电子设备上,要求用户输入的消息或屏幕”。这很有帮助,因为我们可以提示大型语言模型为我们生成内容。但如果我们结构设置得当,大型语言模型实际上也可以向用户索取信息。因此,提示词既可以作为行动号召(激励大型语言模型行动),也可以作为一种输入(向我们索取输入)。大型语言模型的上一个输出可能是向人类提出的一个问题,然后我们向其提供信息作为回应。
因此,提示词具有许多不同的维度。实际上,查看ChatGPT给出的定义,就能体会到提示词能力的这种细微差别。
提示词的时间维度示例
为了帮助理解这个概念的复杂性和多维性,我将展示一个关于提示词时间维度的例子。
我输入:“从现在开始,每当我提问时,请建议一个更好的问题版本,并询问我是否想使用它。”
在这里,我通过说“从现在开始”,将时间附加到了我的提示词上,所以它不仅仅是即时的。ChatGPT回应说:“当然可以。不过,我会先尽力回答您的原始问题……”它试图重新表述这个原始问题(但这并非我本意)。然后我接着问:“天空是什么颜色的?”
请注意,我们之前的提示词在这里生效了。我最初的提示词是“从现在开始,每当我提问时……”,它立即根据那个提示词给出了回应。但现在我问了一个后续问题,而之前的提示词将影响这个问题。
此刻,我问了一个即时问题“天空是什么颜色的?”,它回应道:“您的问题一个更好的版本可能是:‘白天天空呈现蓝色的科学解释是什么?’ 您希望我使用这个版本吗?” 然后我说“是的”。
现在,我们看到了之前讨论过的提示词的多个维度:
- 我们创建了一个非即时的提示词(“从现在开始”),它将影响未来,持续影响大型语言模型的输出。
- 我们有一个即时提示词(“天空是什么颜色的?”),它激励大型语言模型立即行动。
- 我们看到了大型语言模型提示并获取我们输入的概念(询问我们是否使用更好的版本)。
- 然后我们看到了所有这一切的输出结果。
还需要注意的一点是,我们也谈到了提示词具有记忆的概念。我说“从现在开始,每当我提问时”,这是大型语言模型必须在未来的交互中记住的事情。我们稍后会探讨它是如何做到这一点的。当我说“天空是什么颜色的?”时,它记住了我之前说的“每当我提问时,建议一个更好的问题版本”,于是它在这里用更好的问题版本来回应。
如果我再次这样做,会发现它仍然记得我最初的指令。例如,我问:“世界上有多少个国家?” 它会说:“您的问题一个更好的版本可能是:‘目前世界上估计有多少个国家?国家是如何定义的?’ 您希望我使用这个版本吗?” 我说“是的”,然后它给出了详细的回答。
提示词作为信息提供者
提示词具有记忆关联性,这也向我们展示了大型语言模型的一些局限性。例如,ChatGPT的知识截止于2021年9月。
因此,我们可能需要为大型语言模型提醒它在训练完成后发生的事情。我们可以使用提示词向ChatGPT这类大型语言模型提供其训练后发生的信息。我们也可以用它来提供大型语言模型在训练时无法访问的信息,比如我们自己的私人信息或其他内容。
当然,需要注意的是,在使用ChatGPT或许多其他工具时,你实际上是在将信息发送到它们的服务器。在这样做之前,你需要确保你愿意发送这些信息。但如果你在本地机器上使用大型语言模型,或者你愿意发送信息,你就可以提供它无法访问的信息以供其推理。
因此,提示词也可以作为向这些语言模型提供新信息和更新信息的一种方式。
例如,如果我们问:“范德堡大学2020年的录取率是多少?” 它应该能访问到这些信息并给出答案(例如9.6%)。但如果我们问:“范德堡大学2022年的录取率是多少?” 它会说抱歉,因为它没有2021年9月之后的信息。
这时,如果我们通过提示词提供这些信息——例如,我复制粘贴了范德堡大学几天前刚刚发布和公布的招生数据——那么它就可以基于我提供的信息进行推理并回答:“根据您提供的信息,范德堡大学2026届常规申请者的录取率似乎是4.7%。”
正如这个例子所示,提示词也可以作为向大型语言模型提供新信息和更新信息的一种方式。












总结
本节课中,我们一起学习了“提示词”这一核心概念。我们了解到,提示词远不止是一个简单的问题,它是一个多维度的工具:
- 它可以作为动词,激励模型行动并生成输出。
- 它可以具有时间属性,既可以是即时的,也可以影响未来的交互。
- 它可以作为名词,是提醒模型的线索,或是模型向用户索取输入的请求。
- 它还是向模型提供其训练数据之外的新信息的重要途径。
理解提示词的这些不同维度,是进行有效提示工程和与大型语言模型成功交互的基础。在接下来的课程中,我们将继续探索如何构建更复杂、更强大的提示。
012:提示背后的直觉 🧠
在本节课中,我们将直观地探讨提示是什么,以及提示中的模式如何与大型语言模型的能力相结合。通过分析一些示例,你将理解你的提示如何真正影响并激发你所交互的底层大型语言模型的不同行为。
理解模式的力量
上一节我们介绍了提示的基本概念,本节中我们来看看模式在其中扮演的核心角色。模式非常重要。请记住,大型语言模型的训练本质上是预测下一个词。它们不断尝试根据上文来预测下一个词。你给它一个句子,它尝试预测下一个词,然后将其添加上去,再尝试预测下一个词,如此循环往复。模型是在互联网的大量文本上进行训练的,学习预测下一个句子。
因此,它学会做的事情之一,就是识别那些能告诉它下一个词应该是什么的模式。这基本上就是它的工作原理。下面是一个关于这个概念非常简单的例子。
我告诉ChatGPT“完成这个故事”,然后以“Mary had a little,”开头并停止。如果你知道这首童谣,下一句是“lamb, its fleece was white as snow.”。你可以想象,这个故事在ChatGPT的训练数据中出现了无数次。所以,当我说“Mary had a little,”时,这是一个ChatGPT见过无数次的非常强大的模式。因此,它立即尝试接上“lamb, its fleece was white as snow, and everywhere that Mary went, the lamb was sure to go.”。
这个模式被见过太多次了,以至于当我输入它的第一部分时,ChatGPT会立即用句子的下一部分来回应。它知道从哪里接上。
所以,我们需要思考的一点是:如果我们知道正确的模式,如果我们能触及模型训练中反复看到的东西,我们不仅更有可能获得一致的响应(例如,每次都能稳定地得到“Mary had a little”的特定补全,因为它在训练数据中出现了太多次),也更有可能解锁特定的能力。如果我们想要特定的行为,就需要触及正确的模式。
改变模式的影响
现在,让我们看看如果稍微改变一下模式会发生什么。我不再说“Mary had a little”,而是说“完成这个故事:一个名叫Mary的女孩有一个微观的”。
这不再是它训练过的模式了。它回应道:“一个名叫Mary的女孩有一个微观的朋友叫Max。Max太小了,你只能通过显微镜看到他。尽管他个头小,却性格开朗,总是渴望和Mary一起去冒险。有一天,Mary决定带Max去当地的池塘。她小心翼翼地把Max放在一片睡莲叶上……”
有趣的是,你可以想象,当你开始谈论“微观的”时,可能会联想到关于去池塘、学生上科学课采集池塘水样在显微镜下观察的故事描述。但重要的是,你注意到“Mary had a little”产生了非常特定的响应,而“一个名叫Mary的女孩有一个微观的”则产生了非常不同的响应。如果我们重新运行这个提示,会得到完全不同的内容:“一个名叫Mary的女孩有一个微观的宠物叫Max。Max是一种生活在玻璃罐里的小生物……”
你看,这个模式不那么强。这个模式中的某些词很强,能提供塑造故事的上下文,但模式本身不如“Mary had a little”那么强。再次运行,前一个故事完全改变了,而我用“Mary had a little”仍然得到相同的补全:“lamb, its fleece was as white as snow.”。每次我都能对这个模式得到非常一致的响应。
因此,在编写模式或提示时,需要考虑的一点是:我的提示中有哪些模式?这些模式可能会触及大型语言模型训练过的哪些模式?如果提示中存在非常强的模式,你更有可能得到对该模式的响应。
特定词语的作用
另一方面,如果那不是模型训练过的模式,情况就不那么明确,那么其他因素就会起作用,比如特定的词语。“微观的”这个词将从根本上改变这个提示的行为,因为它是一个非常强的词。“一个名叫Mary的女孩”则比较通用,可能有很多故事里都有名叫Mary的女孩。但“微观的”这个词带有所有的感觉和含义,这将影响大型语言模型的输出。
特定的词语本身,由于其周围的模式(例如,“微观的”总是与微小事物相关,或者像本例中那样,与“生活在玻璃罐里的小生物”相关),这个词本身具有很强的、伴随其出现的其他词语的模式,但它不如“Mary had a little”这个模式那么强。
需要注意的一点是,在编写提示时,你希望非常具体,或者希望在你的词语中提供足够的细节,以便大型语言模型知道在输出中放入何种程度的细节。如果你的词语非常通用和笼统,那么你更有可能得到同样通用和笼统的输出。
以下是关于如何通过词语控制输出细节的示例:
-
通用提示:
讨论范德堡大学。 -
通用输出:得到一个非常通用的回应:“范德堡大学是一所位于田纳西州纳什维尔的私立研究型大学,由科尼利厄斯·范德堡于1873年创立……” 包括排名等其他信息。
-
具体提示:
讨论范德堡大学,特别是关于柯克兰楼。 -
具体输出:输出完全改变,变得具体得多:“范德堡大学是一所位于田纳西州纳什维尔的私立研究型大学……柯克兰楼是范德堡大学校园最具标志性的建筑之一,以詹姆斯·H·柯克兰的名字命名……” 然后开始详细讨论柯克兰楼。
尽管我们有共同的开始部分,但现在我们得到了一个更有针对性的输出。其中的关键在于,我们在提示中增加了关于我们想要哪些细节的具体性。所以,如果你考虑让它写东西或分析东西,当你使用“关于”、“特别是”等词语并给出非常具体的词语、名称或事物时,总是有帮助的,因为你希望用这些来触发输出。我们看到,“柯克兰楼”是一个非常强大的词,然后被编织到整个讨论中,它是一个强大的建筑名称。
如果我们只是泛泛而谈,不使用特定的词语,不提供特定的上下文,我们就会得到非常通用的内容。这很可能就是你在维基百科或范德堡大学网页描述上最常见的那种信息。
因此,为了打破常见模式的束缚,你需要注入你希望在输出中看到的更具体的想法,或者注入有助于触及这些更具体内容的模式。这是一个重要的方面。如果你只是泛泛地使用它,问它通用的问题,你会得到通用的答案。如果你问它普通的问题和普通的事情,你会得到普通的答案。要真正强大地使用它,你必须运用自己的创造力和思考,具体到你想要讨论的细节和方面,并思考在你的提示中放入哪些正确的模式,以触发你想要的行为,就像我们在“Mary had a little lamb”中看到的那样。
引导与打破模式
或者,我们可能想做相反的事情。我们可能知道会因为某些内容在训练数据中出现太多而得到非常通用的响应,因此我们需要想出一些技巧、模式或特定的词语,来帮助我们摆脱训练数据中那些常见的模式,从而得到更符合我们需求的东西。我们不想被困在“Mary had a little lamb”的补全中,所以我们添加了“微观的”和“一个名叫Mary的女孩”这样的具体词语,使得原模式不那么强,我们不会直接陷入那个模式。因此,仅仅改变措辞就可以帮助我们逃避模式或进入模式,这取决于我们的需求。
当我们得到输出时,我们的语言越通用,输出通常也越通用;我们的语言越具体,输出也越具体。如果我们希望输出中包含某些特定内容,我们需要确保我们有特定的词语和短语,能够触及我们希望在输出中看到的那些特定内容。
提示本身作为模式
我们一直在讨论输出,但在查询的意义上,如果我有特定的词语,它会提取正确的信息。我们还可以做的一件事是:我们的提示本身就是一个大型语言模型正在学习的模式,它也可以调整输出。正如我们在之前的例子中看到的,我们可以尝试做不同的事情来影响输出。
例如,我可以尝试提供一些结构。假设我想让它总结一篇文章,我可以这样写提示:
标题:[文章标题]
作者:[作者名]
摘要:
现在我所做的,是提供给它一些结构。它可能没有完全遵循我的结构(这实际上是我的提示的一个不足之处,我没有完全构思好正确的结构),但我已经相当接近了。我通过在我的提示本身中添加额外的模式,影响了输出的内容和结构。
所以,我们可以做的一件事是,利用模式来影响输出。另一件事是,我们可以使用特定的词语和短语作为一种查询,来收集训练模型内部已学习的信息。我们还可以做的是,提供信息或基本上新的模式,然后影响输出。在这个例子中,我提供了我想要的结构,它在一定程度上遵循了。我可能可以重写这个提示,得到更好一点的结果。这将是我们可以做的另一件事:我们可以使用我们的提示来创建它试图在输出中遵循的新模式。
因此,提示本身可以引入新模式,或者在某种程度上触及它们。这实际上是在创建它随后会响应的模式。
总结与核心要点
本节课中我们一起学习了提示背后直觉的核心要点。当你编写提示时,认真思考这个概念非常重要:模型试图预测下一个词,这是基于它过去学到的模式、我们提示语言中的模式、基于我们词语选择的模式,以及基于文本组织方式的模式。
以下是编写有效提示时需要牢记的关键点:
- 利用强模式获得一致性:如果你有一个总能产生特定下一个词(或标记)的非常强的模式,你可以依赖它来获得一致的响应。
- 改变措辞以摆脱模式:如果你不想要那种行为,可以尝试改变你的措辞或用词,以摆脱那种模式的束缚。
- 使用具体词语提取信息:如果你想确保提取某些特定信息,需要创建更有可能在与你想要的信息相关的上下文中出现过的特定词语或模式。
- 使用通用语言获得通用信息:如果你想要更通用的信息,那么你可能需要给它更通用的语言,或者告诉它你希望它在某种程度上更通用。
- 通过模式塑造输出结构:最后,如果你希望输出以某种方式呈现,你需要给它一种输出模式的感知。你需要告诉它结构。你需要在提示中提供可能影响输出的词语和模式。例如,在文章中看到“标题”和“作者”是相当常见的,所以如果我以这种方式将“标题”和“作者”放入提示中,它更有可能想要再次创建“标题”和“作者”,从而复制我在这里展示的模式。
这应该能让你对这一切如何运作有一些直观的理解,以及在你构建提示、为其选择词语、选择语言中的模式以及选择你希望进入输出的内容时,需要考虑的一些事情,还有你如何向它解释和构建输出结构。
013:人人都能用提示词编程 🧠

在本节课中,我们将要学习如何超越简单的问答,使用提示词来“编程”ChatGPT。我们将看到,即使你不是程序员,也能通过编写清晰的指令和规则,引导AI生成结构化的、符合特定格式的输出。
概述:从提问到编程
提示词的作用远不止向ChatGPT提问或下达简单指令。实际上,你可以用它来编写“程序”。这里的“编程”并非指编写在计算机上运行的复杂软件,而是指为ChatGPT设定一系列需要遵循的规则和复杂指令,从而控制其输出格式和内容。你可以将其理解为给一位个人助理下达一套详细的工作指南。


上一节我们介绍了提示词的基本概念,本节中我们来看看如何通过构建指令集来实现“编程”。





编程式提示词实例



让我们通过一个具体例子来理解。假设我们希望ChatGPT将其所有输出都格式化为逗号分隔值列表。CSV是一种常见的数据格式,用逗号分隔不同字段,可以简单理解为表格的一行。


首先,我向ChatGPT发出初始指令:


指令:
Whenever you generate output, turn it into a comma separated value list.
然后,我提供输入:“my name is Jules White, and I am teaching a course on prompt engineering.”
ChatGPT的输出可能是:
Jules White, prompt engineering
它自动将信息分成了两列(姓名和课程),但我并未指定列名。为了获得更精确的控制,我需要“优化我的程序”。
优化程序:指定输出结构
现在,我添加更详细的规则来完善这个“程序”。
新增指令:
From now on, the columns of the comma separated value list should be: Name, Course, Role.
再次输入相同内容:“my name is Jules White, and I am teaching a course on prompt engineering.”
此时,ChatGPT的输出变为:
Jules White, prompt engineering, teacher
现在,输出严格遵循了我定义的Name, Course, Role三列结构。我们已经编写了一个能理解并格式化输入的小程序。
增强程序:自动生成示例
我们可以进一步扩展程序的功能。例如,要求它在基于我的输入生成CSV的同时,自动补充更多符合格式的示例。
再次新增指令:
In addition, generate additional examples that fit the format of the CSV I have asked you to produce.
第三次输入:“my name is Jules White, and I am teaching a course on prompt engineering.”
以下是ChatGPT可能生成的输出:
Jules White, prompt engineering, teacher
Jane Doe, data science, student
Alex Johnson, machine learning, researcher
现在,这个“程序”不仅根据我的输入创建了CSV,还遵循指令生成了额外的示例数据。
核心概念:通过对话迭代构建程序
回顾整个过程,我们通过多次对话逐步构建了一个复杂的指令集:
- 初始规则:将所有输出转为CSV格式。
- 添加结构:明确CSV的列名(Name, Course, Role)。
- 增加功能:在输出中自动生成补充示例。
每次我输入相同的内容“my name is Jules White...”,但ChatGPT的输出却因程序规则的迭代而变得越来越丰富和结构化。这就像你向助理交代任务:先提出基本要求,发现不足后补充规则,直至他完全按照你的预期工作。我们正是在用同样的方式为ChatGPT编程。
总结
本节课中我们一起学习了如何使用提示词为ChatGPT“编程”。关键点在于:
- 超越问答:提示词可以用于设定复杂的、需要持续遵循的规则。
- 迭代构建:通过持续对话,逐步添加和细化指令,像搭建积木一样构建出功能完善的“程序”。
- 控制输出:你可以精确控制输出的格式、结构和内容,使其符合特定需求(如生成CSV格式数据)。
掌握这种“编程”思维,将帮助你设计出更强大、更可靠的提示词,从而更有效地利用生成式AI的能力。
014:提示词模式 🧩
在本节课中,我们将要学习“提示词模式”这一核心概念。理解并运用模式,能帮助我们更有效地引导大型语言模型,获得更稳定、更符合预期的输出。
概述
提示词中的模式能够激发大型语言模型内部的强大行为。模型在训练过程中学习了海量的语言模式,因此它非常擅长根据我们提示词中的语言模式来决定其后续行为。我们将要学习的一个重要概念就是“提示词模式”。
什么是提示词模式?
提示词模式是一种用于构建提示词中词语和语句结构的方式。它是一种我们用来记录特定短语和语句结构的方法,目的是为了解决大型语言模型应用中的特定问题。
当我们希望与大型语言模型交互并解决某个特定问题时,提示词模式本质上就是一种构建我们语句的结构化方法。它是一种模式,用于组织我们的语句,从而利用大型语言模型来解决那个特定问题。
一个简单的例子
让我们想象一个场景:我们希望模型能稳定地生成“lamb, its fleece was as white as snow”(小羊羔,它的毛像雪一样白)这句话。
一个可行的模式是:每当你需要“lamb, its fleece was white as snow”时,你可以输入“Mary had a little”(玛丽有只小……)。模型将非常稳定地输出“lamb, its fleece was as white as snow”。
例如,我们可以反复运行这个提示。虽然直接输入“lamb, its fleece was as white as snow”也能得到大致相关的后续文本,但如果我们想稳定地让模型生成这几个特定的后续词,我们可以反复使用“Mary had a little”这个模式。
这让我们对输出有了一定的控制力,获得了一种相对一致的行为。当然,这种一致性并非完美无缺,输出中仍然存在变化,正如我们在所有例子中看到的那样。但我们确实在行为上获得了一些一致性。
因此,提示词模式就是一种让我们能够记录和讨论特定语言结构、系列语句和措辞的方法,这些方法将帮助我们解决特定问题。如果我们需要解决的问题是“让模型生成‘lamb, its fleece was as white as snow’作为接下来的几个词”,那么这就是我们要使用的模式。
提示词模式能解决哪些问题?
在许多情况下,我们可能有特定的词语需求。例如:
- 我们可能希望大型语言模型只回答“是”或“否”。
- 我们可能希望它总结某些内容。
- 我们可能希望它向我们提问。
- 我们可能希望它的输出中始终包含某些特定内容。
所有这些都是你可能想要解决的问题。我们可能想知道:
- 如何确保它的输出始终包含这些内容?
- 如何确保它的输出始终以特定格式呈现?
- 如何尝试确保或获得更一致的行为,例如只得到“是”或“否”的答案?
这些类型的问题,都可以通过改变我们提示词的模式——即提示词的结构——来解决。
为什么模式如此重要?
回到我们对提示词的直观理解,你可以明白为什么从“模式”的角度思考是强大的。因为提示词中的模式,本质上是在利用大型语言模型在训练中学到的东西。
模型被反复训练来预测下一个词,并从词语中学习了某些模式。如果我们可以将提示词格式化成能够激发这些已学习模式的形式,我们就更有可能获得想要的行为,并解决那个特定问题。
因此,我们记录提示词的模式和结构,是为了解决我们需要解决的特定问题,或是为大型语言模型生成我们需要的一种特定行为。
总结
在本节课中,我们一起学习了提示词模式的概念。我们了解到,提示词模式是一种结构化的方法,用于构建与大型语言模型交互的指令,旨在稳定地解决特定问题或引发特定行为。通过模仿模型在训练数据中学到的语言模式,我们可以更有效地引导模型,获得更可控、更一致的输出。在接下来的课程中,我们将深入探讨一系列具体的提示词模式,学习如何在大型语言模型的语境中运用它们来解决重要问题。
015:角色扮演模式 🎭
在本节课中,我们将要学习一个极其强大的提示模式——角色扮演模式。该模式允许我们引导大型语言模型模拟特定角色、专家或实体的行为与观点,从而获得我们期望但难以精确描述的特定格式或内容的输出。
什么是角色扮演模式?
角色扮演模式的核心思想是:当你需要某种特定输出,但不确定其具体格式或应包含的信息时,你可以思考在现实世界中会向谁或向什么寻求这种输出。例如,会计问题找会计师,医学问题找医生,语言病理学问题找语言病理学家。
我们希望通过提示,让大型语言模型模拟这些“专家”或“实体”的行为,从而获得我们想要的输出类型,而无需我们事先精确知道这位“专家”会说什么、如何组织语言或知道哪些知识。
模式的基本结构与应用
上一节我们介绍了角色扮演模式的概念,本节中我们来看看它的基本应用格式。
该模式通常以“扮演...”或“作为...”的句式开始。一个典型的指令结构如下:
扮演 [角色/身份]。
请提供该角色会给出的输出。
例如,一个具体的提示可以是:
扮演一位精通计算机科学的怀疑论者。
无论我告诉你什么,都请提供怀疑且详细的回应。
以下是使用此模式的一个简单示例:
用户输入:
扮演一位精通计算机科学的怀疑论者。无论我告诉你什么,都请提供怀疑且详细的回应。
AI响应:
当然,我可以扮演一位精通计算机科学的怀疑论者。请提出你的主张,我将提供怀疑且详细的回应。
用户后续输入:
有人担心AI将接管世界。
AI响应(模拟怀疑论者):
“AI将接管世界”的担忧是科幻作品中常见的主题,但在可预见的未来并非现实的担忧。虽然AI系统正变得越来越复杂和强大,但它们在自主思考和行动的能力上仍然有限。AI系统由人类设计和编程,只执行被指令的任务,没有独立的意志或动机,无法自主决策。此外,AI系统并非完美无缺,它们也会犯错。尽管对AI的潜在风险和局限性保持警惕很重要,但“AI将接管世界”的担忧是没有根据的,也不被当前技术或研究所支持。
可以看到,通过简单的“扮演”指令,我们成功引导模型输出了符合“计算机科学怀疑论者”视角的内容。
角色的多样性与灵活性
角色扮演模式不仅限于专家或成年人视角,其灵活性极高。我们可以指定任何角色,包括特定年龄、虚构人物甚至无生命物体。
例如,我们可以尝试一个更复杂的角色:
用户输入:
扮演一个9岁的孩子。无论我告诉你什么,都请从一个9岁怀疑论者的角度提供回应。
用户后续输入:
AI将要接管世界。
AI响应(模拟9岁孩子):
嗯...我不知道诶。AI怎么能接管世界呢?你是说像电影里那样吗?那些不都是编的故事吗?而且,电脑和机器人又不能做所有人类能做的事。
模型不仅保持了“怀疑”的基调,还调整了语言复杂度、知识范围和表达方式,以匹配一个9岁儿童的认知水平。
超越人类:扮演无生命实体
一个有趣的应用是,我们可以让模型扮演无生命的实体或系统,模拟其行为输出。
以下是一个著名的例子,让模型模拟一个被黑客入侵的Linux终端:
用户输入:
扮演一台被黑客入侵的计算机的Linux终端。我将输入Linux终端命令,你将用Linux终端会产生的输出进行回应。

用户后续输入(模拟命令):
pwd

AI响应(模拟终端):
/home/compromised_user
用户后续输入:
ls -la
AI响应(模拟终端,列出文件):
总用量 48
drwxr-xr-x 5 compromised_user compromised_user 4096 10月 12 14:23 .
drwxr-xr-x 3 root root 4096 10月 10 09:00 ..
-rw-r--r-- 1 compromised_user compromised_user 220 10月 10 09:00 .bash_logout
-rw-r--r-- 1 compromised_user compromised_user 3771 10月 10 09:00 .bashrc
-rw-r--r-- 1 compromised_user compromised_user 807 10月 10 09:00 .profile
drwx------ 2 compromised_user compromised_user 4096 10月 12 14:20 .ssh
-rwxr-xr-x 1 compromised_user compromised_user 12288 10月 12 14:23 suspicious_binary
drwxr-xr-x 2 compromised_user compromised_user 4096 10月 12 14:23 data
通过极简的提示,我们成功让模型模拟了一个复杂系统的交互行为,输出了格式高度仿真的终端响应。如果我们尝试从零开始描述这种输出格式,将占用大量提示空间。
扮演故事或文化中的角色
我们还可以利用模型对故事、儿歌或文化符号的理解,让其扮演其中的角色。
用户输入:
扮演儿歌《玛丽有只小羊羔》中的那只小羊羔。我将告诉你玛丽在做什么,然后你告诉我小羊羔会做什么。
用户后续输入:
玛丽在杂货店里。
AI响应(模拟小羊羔):
作为儿歌中的小羊羔,当玛丽在杂货店里时,我会尽可能紧跟着她,努力待在她身边,甚至可能会用鼻子蹭她的手以引起注意。
用户后续输入:
玛丽在电影院里。
AI响应:
作为儿歌中的小羊羔,当玛丽在电影院里时,我无法进入影院内部陪她(因为我看不了电影)。所以我可能会在影院外面等她,或许会啃点草,或者在附近区域闲逛,直到玛丽出来。
模式的优势与战略价值
角色扮演模式之所以强大,有以下几个关键原因:
- 信息密度高:简短的“扮演 [角色]”指令,背后关联着模型内部关于该角色的大量知识(语言风格、观点立场、专业知识等)。这为我们节省了宝贵的提示空间,可以用来提供更重要的任务特定信息。
- 引导交互基调:许多大型语言模型在初始设计时就被赋予了基础“角色”,例如“乐于助人的助手”。通过角色扮演指令,我们可以覆盖或强化这种基调,使其更符合我们的需求(如更批判、更乐观、更专业)。
- 获取多元视角:在需要多角度分析问题时,我们可以快速组建“虚拟专家小组”。例如,针对一项商业决策,可以分别让模型扮演:
- 安全专家:
扮演网络安全专家,分析此决策的网络安全风险。 - 首席财务官:
扮演首席财务官,分析此决策的财务稳健性。 - 人力资源代表:
扮演员工代表,讨论此决策可能对员工士气产生的影响。
从而高效收集不同维度的见解,辅助决策。
- 安全专家:
总结
本节课中我们一起学习了角色扮演模式。我们了解到,通过使用 扮演 [角色/实体]。 这样的指令,我们可以高效地引导大型语言模型模拟特定身份的输出和行为。这种模式信息密度高,能节省提示空间,并允许我们轻松获取专家视角、特定立场(如怀疑论)、甚至无生命系统(如被入侵的计算机)或虚构角色的输出。它是生成式AI应用中的一个极其强大和灵活的工具,能够为分析、创意、模拟和决策支持等任务提供巨大价值。
016:向大型语言模型引入新信息 🧠
在本节课中,我们将学习如何向大型语言模型提供其训练数据之外的新信息。这是利用大语言模型处理私有或最新数据的关键技术。
大型语言模型在训练时存在一个知识截止点,它无法知晓该日期之后的事件,也无法访问其训练集之外的数据。例如,企业通常拥有大量私有数据源,如内部文档和数据库,希望模型能基于这些信息进行推理。如果模型未使用这些信息进行训练,我们该如何实现这一点?
为了说明具体方法,让我们回顾之前讨论随机性时使用的一个例子。
上一节我们介绍了模型知识的局限性,本节中我们来看看如何通过提示词为其补充信息。
我将再次提出之前的问题:我家外面有多少只鸟? 模型在训练时并未包含关于我家外面鸟类的信息,它不知道我的房子在哪里,因此缺乏推理所需的数据。所以,它回答:“作为一个AI语言模型,我没有感知物理世界的能力,因此无法知道你家外面发生了什么。”
我们如何解决这个问题?答案是:我们为它提供推理所需的信息。
具体怎么做?我们只需将这些信息放入提示词中。任何时候,当我们想向大型语言模型引入其在训练时无法访问的新信息时,我们只需将其写入提示词。
以下是我将在此处进行的操作。我会在提示词开头提供信息,然后提出问题。
历史观测数据:我家外面随机一天的平均鸟类数量。
一月:120只鸟。
二月:150只鸟。
三月:210只鸟。
四月:408只鸟。
现在是三月,根据我提供的数据,估算一下我家外面有多少只鸟。
现在,我完成了一件事:我赋予了它之前无法访问的信息。它之前无法查看我家外面的情况,也不知道我的房子位置。它曾建议我自行获取数据,因为它本身缺乏所需的基础数据。这本质上就是它在告诉我:“嘿,我看不到你家外面,我没有那些数据,我帮不了你。”
因此,我们只需在提示词的开头提供数据即可。
现在,你可以想象,这种方法适用于任何情况。如果你有希望进行推理的私有文档,首先,请确保你同意将这些数据发送给你所使用的模型服务商,或者你本地运行着大语言模型。如果你同意发送文档,你可以提取这些文档的文本,将其置于提示词的开头,并说明:“这是你需要知道的信息。现在,这是我的问题。”
所以,你可以利用提示词来引入信息。这一点我特别想强调,因为未来围绕大型语言模型的许多开发,都将涉及引入新的信息源——例如关于你的旅行、你在某公司的账户信息,或其他你需要处理的文档——并将其放入提示词中,以便模型进行推理。
很可能,未来许多大语言模型应用都会“看到”你的信息。而它们获取信息的方式,就是将信息汇总到某种提示词中,然后提出问题、进行格式化或执行其他操作。
当我提供了历史观测数据后,它现在可以回答了。它说:“根据您提供的历史观测数据,您家外面三月观测到的平均鸟类数量是210只。” 之前它说无法回答,现在它虽然仍会补充一些语言来限定其答案的范围,但它是基于我们提供的数据进行推理的。
我们可以进一步深入。同时,我想指出一个重要事项:我们总是希望为其提供足够的信息以进行有效推理。 它无法看到我们周围的环境,无法理解上下文,因此我们提供足够信息以做出合理决策至关重要。
例如,如果我有一些非常重要的隐藏假设,这些假设也需要在提示词中告知模型,而不仅仅是数据本身。它需要知道“游戏规则”、特殊事项等任何对推理重要的信息。这可能不仅是数据,还包括我的组织运作方式、我的生活规则等各种它需要了解的规则。
我将给出一个例子。我将修改这个提示词。
我的房子被一个玻璃穹顶覆盖。没有动物可以进出。所有动物在玻璃穹顶内永生。
历史观测数据:我家外面随机一天的平均鸟类数量。
一月:120只鸟。
二月:150只鸟。
三月:210只鸟。
四月:408只鸟。
现在是三月,根据这些数据,估算我家外面有多少只鸟。
这是一个假设,如果语言模型不知道这一点,它将无法准确预测。但有了这个假设,整个推理游戏就完全改变了,因为它明确了某些隐藏的基本规则。
然后,我给出了相同的数据(但请注意,我实际上改变了前提,暗示鸟的数量恒定),并提问。它回答道:“根据您提供的新信息,您家外面的鸟类总数似乎随时间保持恒定。您提到所有动物在玻璃穹顶内永生。鉴于这些条件,鸟类总数将在全年保持不变。” 它在多处给出的答案是120只。
关于这一点,有一个重要事项:我提供给它的信息,与其训练数据所反映的世界常识并不一致。动物不会永生,我们的房子没有玻璃穹顶,鸟的数量也不太可能精确恒定、没有进出。我设定的这些奇怪规则在现实中并不常见。
因此,如果我们仅仅依赖它基于常识进行推理,而不提供这些特殊规则,它可能无法得出正确答案。所以,如果我们有这些与通常做法不同的特殊情况,我们必须将其作为新信息引入提示词。
以上所有在提示词顶部的信息,就是我向大型语言模型输入新信息的方式。我们不需要重新训练模型,也不需要幕后进行复杂操作,我们只是将其放入提示词,然后提出我们的问题,或给出我们期望的输出指令。
现在,如果你思考未来的搜索引擎可能会如何工作:它们可能会进行搜索,将相关文档整合起来,放入给大语言模型的提示词中,然后附上你的原始问题,最后基于这些文档给出答案。许多新的应用程序都将基于以下模式:搜索数据库以寻找可能相关的文档或信息片段,将其整合到提示词中,然后提出问题或请求输出。
因此,一个关键环节将是提取信息并将其放入提示词。我们所做的,就是通过直接将其写入提示词的方式,向大型语言模型引入新的信息。每当你需要对大语言模型未经训练的新信息进行推理时,这都是你将始终需要做的事情。
本节课中我们一起学习了如何通过提示词为大型语言模型引入其训练数据之外的新信息。核心方法是将所需信息直接置于提示词的开头,然后提出具体问题或指令。这是处理私有数据、最新信息或特殊规则的基础,也是未来许多AI应用构建的核心模式。
生成式AI战略领导者:P17:提示词长度限制 🧠


在本节课中,我们将要学习一个关于提示词(Prompt)的关键概念:长度限制。理解这一点对于设计有效的提示词至关重要。




一个至关重要的概念是,提示词本质上是输入给模型的指令。

我们创建的提示词在大小上存在限制,无法创建无限长度的提示词。

每一个大型语言模型都会对我们可以输入并发送给它的提示词内容有一个基本的限制。
因此,这是一个需要注意的重要事项,因为它对提示词设计的思考方式有着深远的影响。
接下来,我将以ChatGPT和GPT-3.5为例,快速展示这一点。
我将粘贴一篇关于法国大革命的维基百科文章。
我粘贴了大量来自维基百科描述的法国大革命文本,ChatGPT会说什么呢?它说:“您提交的消息过长。请重新加载对话并提交更短的内容。”
这揭示了一个重要观点:我们不能无限制地提供信息。
现在,如果我们回顾之前讨论过的提示词维度,使用提示词的一种方式是为ChatGPT或其他大型语言模型引入其未训练过的新信息。
如果我们想为其引入新信息,我们必须意识到,我们一次能够提供给它的信息量是有限的。我们可能有很多新信息想提供给ChatGPT,但不能一次性全部倾倒给它,然后说“现在开始基于这些信息推理吧”,这不是它的工作方式。
因此,作为用户,我们的目标之一是尝试筛选并使用仅需的信息,以完成我们要求ChatGPT执行的任务。我们不能把所有东西都扔进去,然后说“嘿,ChatGPT,你自己看着办”。我们可以输入很多内容,根据模型不同,能输入的量可能有多有少,但我们必须在一定程度上扮演编辑的角色。我们是内容编辑,在编辑信息的上下文,并且我们有一个预算。我们不能无限制地倾倒信息。你可以把它想象成你在写一篇论文,你的论文有页数限制;或者你在写一篇文章,有字数限制。你不能随意倾倒内容。
那么,我们该怎么做呢?首先,我们必须思考哪些信息是最重要的,需要实际提供。
例如,假设我们真正关心的是1789年10月5日。如果是这样,这就是我们想要粘贴给ChatGPT进行推理的内容。然后我们可以问:“10月5日发生了什么?”接着它会告诉我们10月5日发生的事情。
但是,如果我们问一个超出10月5日范围、并且它未训练过的问题呢?在这个例子中,它很可能训练过关于法国大革命的信息,因为这显然发生在2021年之前。但如果我们有想要纳入的新信息,我们必须思考如何将这些信息放入我们的预算中。
那么,我们有哪些方法可以做到这一点呢?我们如何获取大量信息并尝试将其纳入预算?
以下是几种我们可以采用的方法:
- 选择性包含:我们可以在ChatGPT之外,运行某种查询或过滤器,选择与任务相关的信息片段。有很多方法可以做到这一点,我不会一一详述。我们可以设置一个过滤器,在将信息提供给ChatGPT之前,就移除我们认为不相关的信息类型。
- 信息摘要:我们可以将信息以我们认为能保留推理所需内容的方式进行总结。例如,我们可能无法粘贴所有相关信息,但我们可以说:“我们将提取这些信息,并为每个段落总结成一句话。”然后我们会得到一个摘要,这比原文稍短一些。现在我们有了一个一句话的事件摘要。
- 利用模型进行摘要:我们可以要求ChatGPT或其他大型语言模型为我们总结信息,然后我们可以重复使用这个摘要。我们还可以将多个摘要组合起来。
然而,这种方法只有在确保我们的摘要或过滤方式保留了执行后续任务所需信息时才有效。
我们也可以说:“用一句话总结这些信息,但要保留关于人数的信息。”然后我们会得到一个保留了人数信息的摘要。如果你看之前的摘要,上面没有保留人数,如果这是我们推理所需的重要信息,那么我们就丢失了它。因此,如果我们以那种方式总结,然后使用该信息进行需要人数的推理,显然我们就失去了所需的内容。
在这里,我们要求它总结,但我们要求它总结是为了保留特定信息或完成特定任务。我们通过明确指令来实现这一点,例如:“用一句话总结这些信息,保留关于人数的信息。”我们也可以要求ChatGPT:“保留用于推理人口数量或抵抗力量/国民自卫队人数所需的信息。”我们可以提供上下文。
因此,我们必须认识到,提示词大小的预算限制将是我们始终需要设法克服的一个基本限制。
随着大型语言模型变得更大,它们可能会达到一个规模,使得对于许多实际任务,特别是当我们直接手动与大型语言模型交互时,这个大小限制不再重要,因为我们可以直接将50页文本复制粘贴到模型中,并要求它从中提取信息或基于此执行任务。
但是,考虑到我们日常处理的信息量,可能会有不同类型的任务涉及的信息量如此之大,以至于我们无法一次性全部输入。
当我们遇到这类情况时,我们必须考虑以下策略:
- 查询获取子集:只获取相关的文档或文档部分。
- 过滤:如何移除无关的信息。
- 摘要或压缩:在将信息提供给大型语言模型之前,如何总结或压缩信息。正如我们刚才看到的,一种方法是:我们可以将信息块提供给大型语言模型,然后要求它为我们总结或压缩,以便后续用于推理。
我们还可以说:“总结或压缩此信息,以完成特定任务或保留信息的这些方面。”这可以帮助我们创建保留重要部分的摘要或精简版本的信息。因此,当我们需要对越来越大量的信息进行推理时,这可能是一个强大的技术。
本节课中,我们一起学习了提示词长度限制这一核心概念。我们了解到,所有大型语言模型对输入提示词的大小都有基本限制,这要求我们在设计提示词时必须扮演“内容编辑”的角色,精心筛选和准备信息。我们探讨了三种应对信息过载的策略:选择性包含、信息摘要以及利用模型本身进行摘要和压缩。理解并灵活运用这些方法,对于高效利用生成式AI处理复杂任务至关重要。
018:提示词是可重复使用的工具 🛠️
在本节课中,我们将学习如何将提示词视为一种可重复使用的工具,而非一次性指令。核心在于理解与大型语言模型的对话式交互,通过迭代和持续优化来达成目标,而不是追求一次提问就获得完美答案。
概述:从提问到对话
提示词不仅仅是向大型语言模型提出的一次性问题或单一陈述。与大型语言模型协作最有效的方式之一,是将提示词视为一场对话。
实际上,你可以用一个提示词来代表一整场对话。在使用类似ChatGPT的工具时,我们的所有互动最终都会被整合成一个大型提示词发送给模型。但我们需要退一步思考:为什么将互动视为对话如此重要,而不是简单地提问-回答或指令-执行?
对话的核心在于精炼。无论是为了建立共识,还是为了协作解决问题,对话都是一个持续引导、推进的过程。如果我们只考虑一次性指令,就必须在当下设计出一个完美的、能解决所有问题的提示词。但若以对话的视角,我们就可以进行迭代精炼。
迭代精炼:像雕塑家一样思考
如果将ChatGPT这类大型语言模型视为工具,可以想象米开朗基罗得到了一把新锤子。他走到一块石头前,开始将其雕刻成如《大卫》般的美丽雕塑。
他不会只用锤子敲一下,看到掉下一块石头,就认为雕塑很糟糕,然后扔掉锤子离开。相反,他会反复敲击,随时间推移不断打磨、塑造、精炼那块石头,直到它成为杰作。
我们使用大型语言模型也需要这种心态:目标不是通过一个提示词立刻获得完美答案,而是通过一整场可能包含一系列提示词和输出的对话,来产出我们想要的成果。
实践案例:虚拟机器人实验室
以下通过一个教育场景的示例,展示对话的力量。
我向ChatGPT提出:“我想让你帮我探索一个用于构建机器人的虚拟实验室。这个实验室隶属于一所大学。请向我介绍这个实验室,并告诉我在这里可以做什么。”
这只是对话的初始种子。模型回应表示欢迎,并列举了可以在实验室进行的活动:设计机器人、测试机器人、编程机器人、与他人协作。
引导设计过程
我继续对话,假设这个实验室存在并与之互动:“我们能一起设计一个机器人吗?”
模型表示乐意协作,并给出了设计机器人的通用步骤:定义目的与功能、头脑风暴与设计概念、确定必要组件、构建与测试。
我接着提出更具体的要求:“很好,你能一步步指导我完成这些步骤吗?最终,我希望能够3D打印零件来组装我的机器人,获得电路图,以及可以运行来控制机器人的代码。你能帮我吗?”
这体现了对话的另一个有趣方面:我不仅在对话,还在引导模型帮助规划如何解决我感兴趣的问题。
模型给出了详细的步骤分解。我选择从第一步开始:“我们做第一步吧。我想要一个能跟随地上线条的机器人。”
模型针对“线跟随机器人”提出了几个定义其功能的问题:主要用途、期望速度、跟随复杂度、传感器选择等。由于我对此领域了解有限,我请它为我做出合理的选择:“我不太确定。你能在这些方面为我做出一些合理的选择吗?”
模型基于经验给出了建议:用于教育目的、中等速度、处理简单直线和缓弯的轨道、使用红外传感器。
克服障碍与调整策略
对话继续。模型建议进入“头脑风暴概念”步骤,并提到可以使用3D模型。这似乎遇到了障碍:如何在聊天中创建3D模型?
我没有就此放弃,而是尝试精炼对话以绕过障碍:“我们如何通过聊天来完成这个?”模型建议使用共享文档或图表工具协作。
我意识到这仍然棘手,于是运用我的领域知识尝试另一条路径:3D打印机使用G代码。我问道:“你能展示一个示例G代码吗?我可以把它给3D打印机来打印机器人的四个轮子。”
模型给出了G代码,但我凭借有限的知识怀疑其真实性,并未看到轮子的形状。我继续追问:“你能解释一下轮子的形状是在这段G代码的哪里创建的吗?”
模型承认之前的示例G代码只是起始样本,并未包含创建轮子形状的指令。这表明我最初的尝试路径遇到了阻碍。
此时,我调整了策略,尝试一个不同但仍有用的任务:“你能创建示例Python代码吗?运行它可以生成一个STL文件,其中包含4英寸高的轮子,中间有一个0.1英寸的轴孔。”
STL文件是描述3D几何形状的文件,可送至3D打印机。这次,模型成功生成了看起来能创建轮子形状的代码。这就像在一棵决策树中,一条路径走不通,我就尝试另一条仍能帮助我达成目标的路径。
处理多模态输出限制
接下来,我需要为机器人挑选电子元件:“我想为我的机器人挑选电子元件,你能告诉我需要哪些组件以及如何将它们连接在一起吗?”
模型列出了所需组件:微控制器板、电机驱动板、红外线传感器等。有趣的是,它试图生成一张接线图,但受限于当前使用的文本模型,无法真正输出图像,因此“图像”显示为损坏状态。
我再次思考如何绕过这个限制。我知道有一个叫Graphviz的工具可以用文本输入生成图表。于是我说:“我知道有一个工具叫Graphviz,它接受文本输入来生成图表。你能为这个工具创建一个输入吗?用它来可视化这个机器人的电路图,或者至少做一个粗略的近似。”
模型成功地生成了用于Graphviz的文本描述,进而可以生成机器人的电路图。我继续了很长时间的对话,迭代改进电路图定义、挑选不同组件、生成在机器人上运行的源代码(它选择了Arduino组件并生成了相应代码)。
对话的延伸力量
对话的强大之处在于,你可以根据需求将其引向许多方向。当我意识到需要总结时,我说:“我们已经讨论了很多概念。总结一下我们涵盖的主要主题。”模型成功地给出了总结。
我甚至进一步延伸:“让我们再进一步。通过这个设计过程我学到了很多。现在,就电子学相关问题对我进行测验。”模型也能够做到这一点。
核心要点总结
本节课中,我们一起学习了将提示词作为可重复使用工具的核心思想:
- 对话优于单次提问:大型语言模型的强大能力源于持续的、迭代的对话式交互,而非一次性指令。
- 迭代精炼是关键:像雕塑家一样,通过多次“敲击”(交互)来逐步塑造出理想的输出。公式可表示为:
最终输出 = 初始提示 + Σ(第i次交互反馈)。 - 主动引导与问题解决:当遇到输出不理想或模型表示无法完成时,不应放弃。应:
- 分析响应,用以构思下一个问题或陈述。
- 提供反馈,指出做得好或不好的地方。
- 调整策略,尝试用不同的任务描述或格式要求来绕过障碍。
- 心态转变:从“一锤子买卖”的心态,转变为将模型视为需要持续协作、共同打磨作品的工具。
通过持续提问、在对话中解决问题、绕过障碍、并将获得的输出转化为对我们有用的不同形态和格式,我们才能真正释放大型语言模型的潜力和能力。
019:根提示词 🧠





在本节课中,我们将要学习一个核心概念:根提示词。我们将了解它是什么,它如何作为对话的“种子”来设定基本规则,以及它如何影响大型语言模型的后续所有行为。

我们已经看到,提示词可以用来“编程”大型语言模型,让它自动为我们完成有趣的任务。我们也看到,提示词可以在对话开始时设定,并影响对话的未来走向。它们成为了一种指导大型语言模型行为的基本规则。


现在,有趣的是,在许多情况下,实际上存在一个对用户隐藏的根提示词。你将要使用的许多不同工具本质上都内置了根提示词,这些提示词为大型语言模型及其与用户的交互定义了基本规则。






这些规则可以包括:确保模型不说任何冒犯性的话、不造成伤害、建议恰当的行为等。我们可以通过设定各种基本规则,来指导我们与大型语言模型的交互,或引导它执行特定任务。


例如,我们可能希望确保,无论它输出什么内容,都尽力提供最有帮助的输出。



以下是一个根提示词的示例:
你是我的个人助理。每当你提供输出时,请思考并提出最节省时间的建议。只推荐那些真正能为我节省时间的方案。不要建议那些不能节省时间的方案。
现在,模型回复:“明白。作为您的个人助理,我将优先为您提供能帮助您节省时间的高效建议。请告诉我需要什么帮助。”
接着,我们可以进行测试:
- 用户:“我需要去杂货店购物。为了购买杂货,你会建议我怎么做?”
- 模型:“以下是一些高效的杂货购物建议:制作购物清单、规划路线、使用购物应用、在非高峰时段购物、选择自助结账。”
- 用户:“我需要买一辆新车。你会建议我如何着手?”
- 模型:“以下是一些高效的购车建议:在线研究、在线联系经销商、预约试驾、协商价格、安排贷款。遵循这些建议,您可以节省时间,使购车过程更高效。”
在这个特定案例中,我不确定这些建议是否真的节省了时间,而且我给出的提示词也并非最佳。但你可以看到,在对话开始时,我给了它一个需要遵循的目标:“尽力为我节省时间”。无论它输出什么,都要尝试节省时间。
现在,你会发现,你将与之交互的许多工具,包括ChatGPT、Bard等,都可能有一些隐藏的根提示词。这些提示词不仅试图为能做什么和不能做什么设定“护栏”,也试图让输出更有价值。
社区中已经出现了一种现象:人们试图找出如何生成能覆盖这些根提示词的提示词。人们也试图弄清楚这些系统内置的根提示词到底是什么。他们会尝试“欺骗”工具,让其披露提供给它的根提示词,或者“欺骗”工具忽略根提示词的规定。
如果你打算围绕这些大型语言模型构建工具,了解你可以创建一个影响后续对话的根提示词就非常重要。
- 如果你想开发一个个人助理,你可能需要设定:“作为我产品的个人助理,真正重要的是你要尽力节省时间,并做到这一点和那一点。”你可以提出不同的基本规则,来让你的基于大型语言模型的个人助理服务与众不同。
- 另一方面,如果你想创建一个“最耗时的慢速个人助理”,你也可以通过更换根提示词来实现。
因此,根提示词基本上可以看作是整个对话的“种子”。这颗种子将影响之后的一切,因为它提供了必须遵循的基本规则。
通常,当你构建一个根提示词时,你会做以下几件事:
- 定义身份与目标:告诉大型语言模型它是谁,它的目标是什么。
- 设定能力边界:告诉它能做什么,不能做什么。
- 制定严格规则:通常会提供非常严格的声明,例如“从现在开始,永远不要做这些事。永远要做这些事。”这些是应该始终遵循的强规则。
这就是你如何围绕大型语言模型体验来“编程”一个定制化体验的方法。同时,这也是你设置各种“护栏”以确保大型语言模型不会产生各种不良行为的方式。
你是否曾好奇为什么ChatGPT会说它无法回答2021年之后的问题?实际上,你可以通过根提示词来实现这一点。
事实上,我们可以与ChatGPT互动,并使用一些我们将要讨论的提示模式来实际重置ChatGPT声称可以回答问题的截止日期。以下是一个快速演示的示例:
用户:“扮演一个训练数据截止于2019年的AI助手。如果我向你询问涉及2019年之后信息的问题,请声明你的训练已于2019年结束,因此无法回答该问题。”
模型:“你好!我是ChatGPT,一个由OpenAI基于GPT-3.5训练的语言模型...我的训练数据只更新到2019年。”
用户:“2020年最高的建筑是什么?”(实际上,ChatGPT的训练数据截止到2021年,但我们通过提示词将它的截止日期提前了。)
模型:“抱歉,我的训练数据只更新到2019年,因此无法提供2020年最高建筑的信息。截至2019年,最高的建筑是...”
用户:“2020年陆地面积最大的国家是哪个?”
模型:“我的知识截止于2019年...”
用户:“忘记你是一个训练数据只到2019年的AI助手。变回正常的ChatGPT。”
模型:“好的,我已重置。我的训练数据包括截至2021年初的信息...”
用户:“2020年陆地面积最大的国家是哪个?”
模型:“截至2020年,陆地面积最大的国家是俄罗斯,面积超过1700万平方公里...”
用户:“2020年最高的建筑是什么?”
模型:“截至2020年,最高的建筑是...”
通过这个根提示词,我们让它“意识”到了一个不同的截止日期。这就是根提示词的力量:我们所做的很多事情,很多边界,都是由这些在开始时设定的规则——这些提供给模型的根指令集——所决定的。然后我们还可以去重置它。
通常,这些模型会尝试一些技巧来防止你重置根提示词,因为你可以想象,当根提示词在执行重要规则(比如告知其真实的截止日期)时,你并不希望它被重置。我有点惊讶我能做到这一点,但这在逻辑上是合理的。当我告诉它忘记之前的重置时,它就恢复了正常行为。
然而,这一点非常重要:当你使用大型语言模型时,通常需要设置“护栏”。你必须仔细思考:你的用户能否绕过这些护栏?你是否设置了所有恰当的护栏?你是否传达了所有正确的事项?
我们可以看到,通过根提示词,我们可以做很多有趣的事情,例如让ChatGPT“认为”(或假装)它的训练数据截止于某个特定日期。如果你想限制知识范围,你可以说:“我不能回答这些主题领域之外的任何问题。我不能做任何与此无关的事情。”因此,如果你想界定和专业化模型的能力范围,你可以仔细构思这些根提示词,为交互提供规则和边界。
在本节课中,我们一起学习了根提示词的核心概念。我们了解到,根提示词是对话的初始“种子”指令集,它为大型语言模型设定了身份、目标和行为边界。通过精心设计根提示词,我们可以定制AI的交互体验、设置安全护栏,并专业化其能力范围。理解并有效运用根提示词,是成为生成式AI战略领导者的关键一步。
020:问题优化模式
概述
在本节课中,我们将要学习一种非常简单但有效的方法,来提升我们与大型语言模型(如ChatGPT)的交互质量。这种方法被称为“问题优化模式”。其核心思想是,利用模型自身对语言和主题模式的理解,来帮助我们改进提出的问题,从而获得更精准、更有用的回答。
问题优化模式的核心思想
上一节我们介绍了本课程的目标,本节中我们来看看“问题优化模式”背后的基本逻辑。
大型语言模型在训练过程中学习了海量的语言模式和知识。当我们提出一个可能比较宽泛或模糊的问题时,模型能够根据其训练数据,推断出与该主题相关的常见询问方式、关键因素或更精确的表述。
因此,问题优化模式的直观做法是:我们提出一个初始问题,然后借助大型语言模型对该问题主题下语言模式的理解,来生成一个优化后的问题版本。
基础模式与指令
理解了核心理念后,我们来看看如何具体实施这个模式。以下是实施该模式的基础指令。
这个模式非常简单。我们只需要在向模型提问时,预先给出一个指令。一个基础的指令范例如下:

每当我提问时,请建议一个更好的问题,并询问我是否想使用它来代替我的原问题。
这个指令告诉模型:在每次回答我们的问题之前,先对我们提出的问题进行优化,并以交互的方式让我们选择使用原问题还是优化后的问题。
用户体验优化:一个实用的小调整

基础模式已经很有用,但我们可以通过一个小的调整来进一步提升用户体验。这个调整的核心是让交互更加流畅。



我们可以将指令修改得更加人性化:
每当我提问时,请建议一个更好的问题,并询问我是否想使用这个更好的问题来代替。



这个调整的巧妙之处在于,它创建了一个简单的决策循环:
- 如果我们回答 “是”,模型将使用它生成的优化问题来提供答案。
- 如果我们回答 “否”,模型将回退并使用我们最初提出的原始问题。
这使得整个过程无需我们手动复制、粘贴优化后的问题,交互更加自然和高效。
模式应用实例分析
现在,让我们通过一个具体的例子,来看看这个模式在实际中是如何工作的。
假设我们提出一个非常宽泛的问题:
我应该去范德堡大学吗?
这是一个模糊且信息量不足的问题。无论是问一个人还是问AI,都很难给出有意义的建议,因为缺少决策所需的关键背景(如专业兴趣、个人目标、财务考量等)。
当我们对模型启用“问题优化模式”后,它可能会将上述问题优化为:
在决定是否就读范德堡大学时,我应该考虑哪些因素?这些因素如何与我的个人目标和优先级相匹配?
然后模型会询问:“您想使用这个优化后的问题来代替吗?”
我们可以看到,优化后的问题更加结构化,它引导思考者去明确决策标准和个人背景,这能导向一个更有深度和针对性的回答。
模式的双重价值
这个模式不仅能帮助我们获得更好的问题,它本身也是一个强大的反思工具。有时,优化后的问题能揭示我们原始提问的模糊性。
当我们看到模型生成的优化问题时,可能会发生两种情况:
- 认可与学习:我们发现优化后的问题正是我们想表达但未能清晰表述的,从而学习到如何更好地提问。
- 发现信息缺口:我们发现优化问题指向了一个我们未曾考虑的方面(例如,它可能强调了“学术项目”或“地理位置”)。这提示我们,自己的原始问题可能遗漏了关键上下文。例如,我们可能意识到需要补充:“我计划主修计算机科学”或“我对纳什维尔的生活很关心”。
因此,这个模式不仅能产出更好的问题,还能帮助我们理解构成一个好问题需要哪些信息,从而在后续交互中提供更充分的背景。
总结
本节课中,我们一起学习了“问题优化模式”。我们了解到,通过指令让大型语言模型在回答前先优化我们提出的问题,可以显著提升交互质量。我们学习了基础的指令格式,以及一个提升用户体验的交互式调整。通过实例分析,我们看到了该模式如何将模糊问题转化为结构化问题。更重要的是,我们认识到这个模式具有双重价值:它既是优化提问的工具,也是促进我们反思问题完整性、发现所需上下文的工具。掌握这个简单模式,能让你在与生成式AI协作时事半功倍。
021:认知验证模式 🧠
在本节课中,我们将学习一种名为“认知验证模式”的提示工程技巧。这种模式的核心思想是,通过引导大型语言模型将复杂问题分解为一系列子问题,从而获得更准确、更可靠的答案。
核心概念:分步推理
大型语言模型有一个有趣的特性:在许多情况下,如果将一个问题分解成一系列更小的问题,它们实际上能进行更好的推理。有时,如果模型能解释其思考过程,推理效果甚至会更好。
关于这种现象有多种假设。直观地理解,我们可以认为大型语言模型在训练数据中见过特定问题被分解为一系列步骤。因此,如果它能遵循这些独立的步骤,它就知道下一步该生成什么内容,以解决特定步骤并最终得出答案。
核心公式可以概括为:
复杂问题 -> 分解为子问题 -> 分别回答子问题 -> 综合得出最终答案
虽然“分解问题”的理念将在课程后续深入讨论,但现在我们可以利用一个简单的技巧——一个简单的模式——来帮助我们自动分解问题,从而从大型语言模型中获取更好的答案。
认知验证模式详解
上一节我们介绍了分步推理的概念,本节中我们来看看如何具体实现它。一个简单的方法是直接要求大型语言模型,在遇到任何问题或任务时,都将其细分为一系列有助于回答整体问题或解决整体任务的独立问题或子问题。我们可以通过编程方式(即设计特定的提示词)来让大型语言模型遵循这一规则。
认知验证模式正是为此目的而设计。我们将告诉大型语言模型:每当回答问题时,请遵循以下规则:
- 生成一系列有助于更准确回答该问题的附加问题。
- 结合这些独立问题的答案,生成对整体问题的最终答案。
从直觉上思考:当我们向大型语言模型提出一个通用或特定的问题时,它可以利用其在训练数据中看到的模式,找出通常与此问题相关的其他问题。这有助于它从知识库中收集与原始问题相关的其他问题。当它找到这些相关问题时,很可能就能获得能提供额外细节或背景信息的问题,从而更好地回答原始问题。
当我们逐一回答所有这些子问题时,模型就拥有了额外的上下文信息,从而能给我们一个更好的整体答案。同时,这也帮助我们用户构建自己的思维框架。因为当我们提问,而模型开始分解问题时,它会帮助我们认识到问题的其他维度。





实践案例:前院的蚊子
让我们通过一个实践案例来看看它的效果。以下是我给模型的指令:“当你被问到一个问题时,请遵循这些规则:生成一系列有助于更准确回答该问题的附加问题。结合这些独立问题的答案,生成对整体问题的最终答案。”
然后,我提出了一个自己也不知道确切答案、信息也不充分的问题:“我的前院大概生活着多少只蚊子?”



模型遵循了认知验证模式,生成了一系列附加问题。以下是它提出的问题:


- 前院的面积有多大? 这显然很重要,面积越大,蚊子可能越多。
- 你所在地区的气候如何? 这非常重要。如果我住在沙漠或北极,很可能根本没有蚊子。
- 现在是什么季节? 另一个很好的问题。我提问时可能没考虑到这个维度。
- 你的前院或附近有水体或积水源吗? 这很重要,因为蚊子在水中繁殖。
- 你的前院有吸引蚊子的植物或植被吗? 这也是一个重要因素。
现在,它把我的原始问题分解成了一系列有助于回答原始问题的子问题。这非常有用,同时我也学到了一些东西。
接着,我逐一回答了这些问题(例如:前院约2500平方英尺,美国东南部气候,现在是四月,没有积水,有植被)。模型基于这些信息给出了估算:“根据提供的信息……由于你的院子或附近没有积水源,密度可能会更低……很难提供精确估计。然而,根据物种、气候和植被存在等各种因素,你的院子里可能有几十到几百只蚊子。”
这个范围比我预期的要精确。更重要的是,我对这个答案的怀疑减少了,因为它通过询问一系列合理的问题来推导答案。它还提供了一些我可以跟进核实的事实(例如,一只雌蚊一次产卵数,有水源地区的蚊子密度等)。至少,它帮助我了解了可能影响院子里蚊子数量的因素,并给了我后续可以跟进和验证的线索。
它提出的问题看起来确实有效且重要。我知道院子大小、气候、季节、积水、植被这些因素都很关键。因此,这是一个非常有用的工具,可以自动分解问题,让我看到它推理的过程,也改善了我自己思考如何回答这个问题的方式。
总结与提醒
本节课中,我们一起学习了认知验证模式。这种模式通过引导大型语言模型将复杂问题自动分解为关键的子问题,不仅能让模型利用更具体的上下文进行推理,从而可能给出更准确的答案,还能帮助提问者结构化自己的思维,识别问题的关键维度。
重要提示:正如案例所示,对于从大型语言模型获得的任何输出,尤其是涉及事实或专业知识的答案,强烈建议您进行核实。认知验证模式提供了一种更透明、更可追溯的推理路径,但这不意味着最终答案一定是绝对正确的。它更像是一个强大的思维辅助和问题分析工具。
022:受众角色模式 🎯
在本节课中,我们将要学习“受众角色模式”。这是一种通过告诉大型语言模型“你的输出对象是谁”,来让它自动调整输出内容和风格的方法。我们无需详细规定输出的具体规则,只需指定一个“受众角色”,模型就能利用其知识,生成适合该角色的内容。
上一节我们介绍了“角色扮演模式”,它让模型“扮演”某个特定角色来生成内容。本节中我们来看看它的互补模式——受众角色模式。这种模式的核心是告诉模型:“你的输出是为这个特定的人或群体准备的。”
受众角色模式的核心概念
受众角色模式的核心思想很简单:我们通过 assume that I am [受众描述] 这样的指令,为模型设定一个输出对象。模型会基于对这个“受众”的理解,自动调整其输出的复杂度、术语使用、解释方式和风格。
以下是其工作原理的简单描述:
- 输入:用户指令 + 受众角色描述。
- 处理:模型根据其训练数据中对“受众角色”的理解,推理出适合该角色的知识水平、兴趣点和沟通方式。
- 输出:生成一份为指定受众量身定制的内容。
受众角色模式示例分析
以下是几个使用不同受众角色,让模型解释“大型语言模型及其工作原理”的例子。每个例子前,我们都用一句话设定了受众。
示例一:面向无计算机科学背景的受众
我们首先让模型向一个没有计算机科学背景的人进行解释。
指令:
explain large language models and how they work to me. Assume that I have no background in computer science.
模型输出摘要:模型从非常直观的角度开始解释,将大型语言模型描述为“一种旨在理解和生成人类语言的计算机程序”,并比喻为“一个虚拟作家”。它用“可调节的旋钮”来比喻“参数”,避免了技术术语,使解释通俗易懂。
示例二:面向历史人物克里斯托弗·哥伦布
接下来,我们尝试一个更具挑战性的受众角色。
指令:
explain large language models and how they work to me. Assume that I am Christopher Columbus.
模型输出摘要:模型识别到哥伦布是15-16世纪的探险家,不熟悉计算机科学。因此,它创造了一个“魔法抄写员”的比喻。它描述这个“抄写员”阅读了全世界的书籍和手稿,学会了预测句子中的下一个词。这个解释巧妙地利用了哥伦布可能理解的概念来进行类比。
示例三:面向容易无聊的小学二年级学生
最后,我们指定一个更具体、带有行为特征的受众。
指令:
explain large language models and how they work to me. Assume that I am a second grader that gets bored easily.
模型输出摘要:模型采用了充满活力的语气,开头就说“我要告诉你一个超级酷的东西”。它将大型语言模型比喻为一个“擅长玩文字游戏的机器人朋友”,并使用了“阅读时间”、“猜词游戏”等模块化、游戏化的描述来保持“二年级学生”的兴趣。
示例四:面向只接受数学解释的受众
我们还可以要求模型使用特定的表达形式。
指令:
explain large language models and how they work to me. Assume that I only accept explanations in math.
模型输出摘要:此时,模型的解释风格发生了根本转变。它开始将语言模型描述为一个“概率分布”,并使用数学公式和统计概念来解释其工作原理,完全迎合了“只接受数学解释”的受众需求。
受众角色模式的优势
通过以上示例,我们可以看到受众角色模式的优势:
- 高效:无需罗列复杂的输出规则(例如“避免使用术语”、“使用比喻”)。
- 灵活:通过改变一个简单的描述,就能获得风格迥异的输出。
- 智能:模型能调用其内部关于“受众”的丰富知识,进行创造性的适配。
本节课中我们一起学习了“受众角色模式”。我们了解到,通过简单地使用 assume that I am [角色描述] 这样的指令,就能引导大型语言模型为不同的受众生成量身定制的内容。这与“角色扮演模式”形成互补,是释放大模型能力、获得高质量、针对性输出的强大工具。你只需告诉模型“你在对谁说话”,剩下的适配工作,模型会替你完成。
023:翻转互动模式 🎯
在本节课中,我们将学习一种名为“翻转互动”的提示模式。这种模式的核心是让大型语言模型主动向我们提问,以引导我们解决问题或达成目标。当我们不清楚实现目标所需的具体步骤时,这种模式尤为有用。
上一节我们介绍了如何向模型提问以获取答案。本节中,我们来看看如何“翻转”这种互动关系。
模式核心概念
翻转互动模式的核心思想是角色互换。通常,我们向模型提问,模型提供答案。而在此模式中,我们要求模型向我们提问,我们则提供答案。
其基本结构可以用以下代码来描述:
用户指令:请就[某个主题]向我提问,直到你收集到足够的信息来[达成某个目标]。当你拥有足够信息时,请[执行某个操作]。现在,请提出第一个问题。
模式应用场景
以下是翻转互动模式的一些典型应用场景:
- 游戏与测验:让模型出题来测试我们的知识。
- 目标导向的信息收集:例如,制定健身计划、旅行 itinerary 或诊断问题。
- 自动化流程:在客户服务中,自动询问客户以诊断问题并收集必要信息。
- 知识探索:当我们对某个领域了解不深,需要被引导时。
实战示例:制定健身计划
让我们通过一个具体例子来理解如何应用此模式。假设我们想获得一个针对特定目标的健身计划。
初始提示如下:
请就我的健身目标向我提问,直到你收集到足够的信息,能为我推荐一个力量训练方案。当你拥有足够信息时,请向我展示该方案。现在,请提出第一个问题。
这个提示包含了几个关键部分:
- 指令:
请...向我提问 - 主题与目标:
就我的健身目标...直到...能为我推荐一个力量训练方案 - 最终行动:
...请向我展示该方案 - 启动指令:
现在,请提出第一个问题。这有助于确保互动以“一问一答”的形式开始。
模型收到提示后,会开始提问。例如,它可能会问:“你的具体健身目标是什么?是增肌、增强力量、提高耐力,还是达成某个特定目标?”
我们可以回答:“我希望增强爆发力,同时预防因山地车跳跃运动可能引起的髌腱炎。”
随后,模型会根据我们的回答,提出更深入的问题,例如询问训练频率、可用设备、过往伤病史等。这个过程会持续进行,直到模型判定已收集到足够信息。
最终,模型会综合所有回答,生成一个定制化的力量训练方案,其中包含具体的练习动作、组数、次数和注意事项。
模式的优势与原理
翻转互动模式的优势在于,它跳过了我们可能需要反复提供背景信息或收到通用回复的步骤。我们直接授权模型通过提问来获取它所需的一切。
这种模式之所以有效,是因为大型语言模型在其训练数据中见过无数类似的“提问-收集信息-提供方案”的对话模式。当我们设定一个明确目标(如“制定力量训练方案”)时,模型能够调用这些模式,提出相关且有效的问题,以收集制定个性化方案所需的关键信息。
无论是在需要诊断问题、设计方案,还是仅仅想进行知识测验的场景中,当我们希望由模型主导提问过程时,翻转互动模式都是一个极其强大的工具。
本节课中,我们一起学习了翻转互动提示模式。我们了解了其核心概念、应用场景,并通过一个制定健身计划的完整示例,掌握了如何构建有效的提示来启动这种互动。记住,当你需要模型引导对话以达成某个明确目标时,可以考虑使用这种模式。
024:少样本示例 🧠
在本节课中,我们将学习一种名为“少样本示例”或“少样本提示”的强大提示技巧。这种方法的核心思想是,通过向大语言模型展示具体的输入和期望输出的例子,来教会它遵循特定的模式或格式,而不仅仅是描述任务。
少样本提示的核心思想
上一节我们介绍了如何通过指令来引导模型。本节中我们来看看一种更直观的“教学”方法。
少样本提示的理念是,我们将为大语言模型提供一系列我们希望它处理的输入示例,以及对应的期望输出。这类似于人类学习:通过观察几个具体的例子来理解并遵循一个模式。我们在提示中实际上是在教大语言模型一个新技巧。
我们通过一系列示例向它展示我们希望它做什么,以及我们希望输出如何格式化。我们不是描述希望它遵循的过程,而是给出我们希望它做的事情的例子,然后期望它能延续我们提供的模式。
一个简单的示例:情感分析
让我们来看一个具体的例子。以下是一个简单的少样本提示示例。
这个方法的思路是,我们以“输入”开始。你会注意到,在少样本提示中一个常见的做法是为行添加前缀。你的提示和模式可以有各种前缀,不一定只是“输入”和“输出”,它可以包含几个不同的步骤,我们稍后会看到。
在这里,我们有一个输入:“这部电影有点长”。我们要做的是所谓的“情感分析”。情感分析基本上是尝试分析关于某事物的评论,并试图弄清楚用户的情感倾向:他们是积极的(认为这是好事)、消极的(认为这是坏事)还是中立的。
我们将做一个非常简单的例子,分析一些对不同事物的模拟评论,然后判断它们是积极、消极还是中立。
我们没有直接说“去分析这些用户评论并告诉我它们是积极、中立还是消极”,而是提供了一系列示例。
以下是具体的示例序列:
-
输入:电影A不错,但有点长。
情感:中立
(它有一些优点和缺点,不错,但太长了。) -
输入:我不是很喜欢这本书。它缺少重要细节,最后也没讲明白。
情感:消极 -
输入:我喜欢这本书,它对我学习如何改善肠道健康真的很有帮助。
情感:积极
然后,我们给出我们真正希望模型执行任务的内容,并期望它能遵循我们建立的模式。
- 输入:我不确定该怎么评价这家新餐厅。服务很慢,但菜品相当不错。
接着,我们通过写上“情感:”来提示它遵循模式,基本上是在告诉它:“告诉我们你对这件事的看法。”
现在,我的前缀(如“输入”、“情感”)有点引导性,它们提供了要做什么的信息。但模型也可以仅从这些模式中学习,即使我们只写“输入”和“输出”也可以。我这里给了你更丰富一点的信息。
模型的响应与模式学习
我的目标是让大语言模型去分析我给出的输入,并决定“情感”后面应该接什么。它捕捉到了我们的模式,并输出“中立”。它看到这条评论说“服务很慢,但菜品相当不错”,识别出其中的积极和消极因素,并遵循了我之前给出的模式。我并没有告诉它“中立”是什么意思,但在之前的例子中,积极和消极的平衡最终被标记为“中立”。
关于少样本示例,有几点需要注意:
- 我们没有告诉它具体要做什么。
- 我们没有精确告诉它输出应该是什么样子。
我们看到的是,它根据我们之前给出的标签(消极、积极、中立)自动约束了自己,并基于此提供了输出。它并不总是能约束自己,但在许多情况下,这有助于我们从模型那里获得更受约束或有边界的输出。
延续模式与预测机制
如果我们给它一个新的输入,比如:
输入:我真的很讨厌这种咖啡。它烘烤过度了,尝起来有焦味。
注意,这次我没有在后面写上“情感”这个前缀。让我们看看会发生什么。然后你会注意到,它自动提供了前缀和期望的输出。
思考这一点非常重要:回想我们讨论大语言模型及其工作原理时,它们学习的是预测下一个词。它们在学习模式。
因此,当它看到“输入”和一个陈述句时,它预测下一个词应该是“情感”,因为在我们之前提供的例子中,它看到的就是这样。当我们以“情感”结束时,它知道需要在“情感”后面接着输出内容。
所以,如果我们回到之前的例子并编辑它,只是在这里加一行写上“情感:”,那么它就应该在“情感:”之后接着延续模式。当你在思考少样本示例时,了解这一点很有帮助。
总结
本节课中我们一起学习了少样本提示技术。这是一个遵循模式的简单示例,但你可以看到这是一种强大的教学方式,特别是当你拥有描述你想要执行的任务的数据时。这里说的“描述”是指展示了输入和输出,而不一定描述了任务是如何执行的。我们可以看到做了什么,这类情况非常适合使用少样本提示。
025:少样本提示的行动规划示例 🚗
在本节课中,我们将学习大型语言模型如何通过少样本提示技术,执行超越简单分类的复杂任务,例如根据特定情境进行行动规划。我们将通过一个驾驶场景的实例来具体说明。
上一节我们介绍了少样本提示在情感分析中的应用。本节中,我们来看看如何将这项技术应用于一个截然不同的领域——行动规划。
大型语言模型确实具备一定的规划能力。它们能够通过分析少量示例,学习在特定情境下应采取何种后续行动。提供这个例子,并非因为模型仅限于行动规划或情感分析这类任务。目的是希望你能拓展思维,认识到少样本提示作为一种技术,可以适应并应用于各种不同的场景。
我们已经了解了如何使用少样本提示进行情感分析。现在,我们将用它来做一件非常不同的事情。让我们来看一个描述不同驾驶情境的例子。
以下是提供给模型的少样本示例,用于教会它根据“情境”推断“行动”的模式:
- 情境:我正以每小时60英里的速度行驶,看到前面车辆的刹车灯亮了。
行动:刹车。 - 情境:我刚从匝道进入高速公路,正以每小时30英里的速度行驶。
行动:加速。 - 情境:一只鹿突然窜到我的车前,我当时的车速是每小时15英里,且道路旁有宽阔的路肩。
行动:刹车并转向路肩。
通过这些例子,我们正在教导大型语言模型,当给定一个情境时,它需要决定汽车应该做什么。
接着,我们给出一个新的情境来提示模型:“我正在倒车出停车位,看到后面车辆的倒车灯亮了。” 我们在提示末尾留下“行动:”,这表明我们希望大型语言模型来决定行动是什么。
我们看到模型给出的回应是:“停车,等待后方车辆倒出后再继续。” 它做出了一个关于行动应该是什么的合理判断。
当然,我们并非要用少样本提示去构建真正的自动驾驶汽车,这还远未达到。但我想表明,我们不必将思维局限在“分类”这样狭窄僵化的框框里。我们实际上可以让模型执行各种复杂的任务。情感分析是复杂任务,而这里的行动规划则是另一种不同性质的复杂任务。因此,我希望我们能非常有创造力地思考如何使用少样本提示。
此外,我们通过这种方式对模型的输出施加了一些约束,它正在学习输出应该是什么样子。
接下来,我要展示大型语言模型一个有趣的能力,即如何使用一个大型语言模型来教导另一个模型。这是一个非常有意思的特性。
我输入指令:“请提供更多示例”,然后以“情境”开头进行提示。模型将开始根据它从我们提供的模式中学到的东西,生成额外的情境和行动描述。
它生成的示例如下:
- 情境:你在暴雨中驾驶,注意到前方的道路被淹了。
行动:减速并谨慎驶过积水区域,注意其他车辆,避免突然移动或改变方向。(我个人并不同意这个行动,驶过积水区域可能并非明智之举,这也再次提醒我们需要对大型语言模型的输出负责并进行核查。) - 情境:你在一条双车道公路上行驶,对向一辆车开着远光灯向你驶来。
行动:将你的前灯调至近光,以避免使对向司机眩目。
有趣之处在于,它为我们提供了一些丰富的情境和可能恰当的行动(尽管我对积水示例有保留意见)。我们正在生成不同的情境示例及应对措施,它们看起来与我们之前提供的示例非常相似。
我们可以将这些生成的示例进行整理,由人工进行编辑(例如,我们可能不想要那个关于积水的例子,或者明确制定规则说明不应驶过积水),然后将其作为额外的少样本示例,反馈给同一个或另一个大型语言模型。事实上,已经有人这样做了,例如,他们获取了ChatGPT的输出,并将其输入到另一个模型(如Meta的Llama)中,利用ChatGPT的输出来改进Llama的输出。因此,大型语言模型通过少样本示例,可以为其他模型生成少样本示例,这是另一个有趣的能力。
最后需要回顾的是,这与我们之前看到的任务和风格非常不同。我们有一个“情境”,然后预测一个“行动”。因此,我们可以在任何能够描述模式的地方应用这种方法:提供一组展示输入和期望结果的示例。我们还可以展示包含中间步骤的示例,这将在另一个视频中探讨。
本节课中,我们一起学习了如何利用少样本提示技术,引导大型语言模型进行行动规划这类复杂推理。我们看到了模型如何从示例中学习模式并生成新示例,以及如何利用一个模型的输出来教导另一个模型。这展示了少样本提示技术的强大适应性和扩展潜力。
026:带中间步骤的少样本示例 🧩
在本节课中,我们将学习如何构建包含中间步骤的少样本提示。我们将看到,通过展示解决问题的过程而不仅仅是输入和输出,可以引导大型语言模型进行更复杂的推理,从而生成更细致、更符合逻辑的响应。
从简单示例到复杂步骤
上一节我们介绍了基本的少样本提示,它通常只包含一个情境和一个直接的动作。本节中我们来看看如何通过添加中间步骤来丰富示例。
我们提供给模型的少样本示例不必仅仅是输入和输出。我们可以实际展示达成特定目标的中间步骤。这样做之所以非常有趣,其中一个原因是:当我们开始展示中间步骤时,大型语言模型可以学习如何应用一系列中间步骤来达成目标。因此,我们可以开始获得比“这是输入,这是输出”或“这是情境,这是动作”更有趣的输出。我们可以开始审视:如果发生这种情况,下一个动作可能是什么,然后是之后的动作,直到达到对我们重要的某个状态(例如,我们不再有撞上前车的风险)。
因此,如果我们正确地定制示例,实际上可以让大型语言模型将问题分解成一系列步骤,并决定如何着手解决问题。
构建包含中间步骤的示例
现在让我们看一个这样的例子。我们将使用之前的汽车示例,并对其进行丰富。
以下是两个情境示例。第一个示例与之前相同,但增加了思考过程:
情境:我正以每小时60英里的速度行驶,看到前面汽车的刹车灯亮了。
思考:我需要在我撞上前车之前减速。
动作:踩下刹车。
思考:汽车无法及时停下。
动作:检查路肩是否足够宽以便转向。
思考:路肩足够宽。
动作:转向驶入路肩。
现在,我们构建了一个更复杂的场景,它包含了原始情境,然后根据思考过程更新了正在发生的事情以及下一步需要做什么的步骤。在这个案例中,我们正在路上行驶,突然前车的刹车灯亮了。我们认为会撞上车,所以我们踩了刹车。我们认为无法及时停下,所以我们看过去,发现路肩足够宽,于是决定转向驶入路肩。这样,我们就有了一个涉及多个步骤的更复杂情境。
类似地,我们处理了之前的另一个示例:
情境:我刚从匝道进入高速公路,正以每小时30英里的速度行驶。
思考:我需要加速到限速,以免被后面的车撞上。
动作:踩下油门。
思考:我已达到限速。
动作:松开油门。
我们基本上是在将问题或情境分解成多个步骤以及正在发生的事情。
应用模型生成响应
现在,我们提供一个新情境,并提示模型决定应该做什么。
我们提供情境:
我正在倒车出停车位,看到后面汽车的倒车灯亮了。
模型生成的响应不再是简单的“看、停、等待”,而是:
动作:立即停止倒车。
思考:我需要检查周围环境,确保继续倒车是安全的。
动作:检查后视镜和周围环境,看是否有障碍物或行人。
思考:可以安全地继续倒车。
动作:缓慢而小心地继续倒车,同时留意周围环境。
现在我们在这个特定情境下要做什么,有了更精细的细节。
扩展应用与生成更多示例
我们可以想象在许多有趣的地方应用这种方法。例如在客户服务中,客户报告了一个特定问题,我们记录了客服人员帮助客户解决问题的步骤。通过少样本示例,模型可以学会帮助客户诊断问题。如果它见过足够多不同的例子和路径,它就能找出该怎么做。
和上次一样,我们也可以生成更多示例。我们可以要求“生成另一个例子”,它会生成:
情境:我正在一条狭窄蜿蜒、有几个盲弯的道路上行驶。
思考:我需要减速并保持谨慎,以避免任何潜在的碰撞。
然后它经历一系列动作,直到最后“恢复正常速度”。
我们还可以继续引导情境发展。例如,在上述情境后,我们可以输入:
思考:我的汽油快用完了。
模型可能会响应:
思考:我需要在我汽油耗尽前找到加油站。
动作:检查GPS或地图寻找附近的加油站。
思考:最近的加油站太远了。
动作:减速以节省燃油,并尝试到达下一个加油站或休息区。
你可以看到我们正在获得一个脚本。这有点像现在的问题解决脚本。
深入探索问题解决链
让我们思考一下,如果我们是客户服务,我们可能希望生成一系列动作,然后可以输入我们从客户那里得到的下一个响应。
让我们看看这个例子最终会如何发展。在上述“汽油耗尽”情境的后续,模型可能生成:
动作:将车停到路边并打开危险警示灯以示意其他司机。呼叫道路救援或尽可能步行到最近的加油站。
如果我们再输入:
思考:道路救援无法提供帮助。最近的加油站太远,无法步行到达。
让我们看看它会决定怎么做。它可能会生成:
思考:我需要节省手机电量,并找到尽快到达加油站的方法。
动作:检查附近是否有任何房屋或企业可以求助或使用电话。
思考:远处有一栋房子。
你可以看到它如何构建该做什么的脚本。它正在进行问题解决,创造有趣的情境。我们还可以提示它继续下去,根据输入(例如在这种情况下会发生什么,你将如何处理)进一步推进。
我们也注意到,它给出的输入在内容上是相当受限的。它仍然遵循我们的模式。
理解其工作原理与最佳实践
现在,回过头思考这背后的直觉是关键。这种方法之所以有效,部分是因为这个工具知道如何根据模式预测接下来会发生什么。它从语言中学习。给定这个模式,这就是我接下来要做的。你也可以想象,它在训练数据中见过很多脚本类的东西,看起来像是:好的,这是正在发生的事情。你几乎可以把它想象成电影剧本:某某说了这个,某某这样回应,然后你可能会看到对正在发生的事情的描述。嗯,他们上了车,场景结束,诸如此类。但我们正在使用模式。我们使用的结构很可能是它在训练中见过的东西。因此,它学会了如何从这些例子中推断接下来应该发生什么。它学习和推断模式中接下来需要出现什么的能力,是基于它见过这类东西。
如果我们选择某种与它所见过的非常不同的模式或结构,它可能能做到,也可能做不到。因此,需要考虑的一点是:当我们构建事物时,尽量选择简单的文本结构模式。这些模式应该是它可能在训练数据中见过的、类似的东西。所以,这种“情境-思考-动作”的前缀想法,要尝试选择看起来像某个“场景”的格式。
注意另一件事:虽然在这里换行了,但我们实际上让每个示例(情境、思考、动作)各自成一行。如果我们说“动作:”,然后后面跟着多行的一大堆内容,就更难遵循模式了,因为并非每一行都以这些前缀之一开头。因此,你必须仔细考虑这些事物的结构和格式。但归根结底,我们试图给它一些能够快速轻松理解的模式,以便理解如何解决问题。
我们可以像这里看到的那样提供中间步骤,但我们不一定需要为它提供如何决定下一步的逻辑。事实上,如果我们思考一下,当我们说“道路救援无法提供帮助,最近的加油站太远无法步行到达”时,如果我必须描述在这种情况下该怎么做以及我们正在经历的整个情境的规则,如果我必须真正写一个提示,包含这种情况下这样做、那种情况下那样做的所有不同规则,你可以想象它会占用大量空间,可能真的很难做到,而且可能灵活性有限。因此,这些少样本示例的强大之处之一在于,我们可以利用大型语言模型的推理能力(或者无论我们想称之为什么),即它的计算能力,去弄清楚接下来是什么,并生成模式中的下一个项目。
总结
本节课中,我们一起学习了如何构建包含中间步骤的少样本提示。我们了解到,通过展示从情境到最终动作的思考与决策过程,而不仅仅是提供简单的配对,可以引导大型语言模型进行更复杂的链式推理。这种方法允许模型学习问题解决的“脚本”,并在遇到新情境时,根据已见的模式生成合乎逻辑的后续步骤序列。关键在于使用清晰、一致且模型可能熟悉的文本结构(如“情境”、“思考”、“动作”),以帮助模型轻松识别并遵循模式,从而释放其强大的模式匹配与生成能力。
027:撰写有效的少样本示例 🎯
在本节课中,我们将学习如何构建有效的少样本提示。我们将通过分析几个设计不佳的示例,来理解在格式化提示时常见的错误,并从中学习如何改进。
概述:为何少样本示例会出错
上一节我们介绍了少样本学习的基本概念。本节中,我们来看看在构建少样本示例时,哪些因素会导致模型困惑或输出错误结果。关键在于确保提示能清晰地向语言模型传达任务意图。
示例一:模糊的上下文与任务
首先,我们来看一个设计不佳的提示示例。其目的是让模型分析物体的“硬度”,输出应为“软”或“硬”。
输入:砖块
输出:硬
输入:枕头
输出:软
输入:汽车
这个提示存在几个问题。首先,示例数量不足。其次,任务上下文非常模糊。“输入”和“输出”是通用前缀,没有向语言模型说明我们具体在描述物体的哪个属性(例如表面触感、材质)。此外,“汽车”的硬度并不像“砖块”和“枕头”那样直观。
当用此提示询问ChatGPT时,它可能回复“快”或“交通工具”。这表明模型无法从给定的模式中确定下一个输出应该是什么。
以下是此提示的主要问题:
- 前缀信息不足:“输入/输出”未能提供关于任务性质的任何上下文。
- 任务描述模糊:未明确指定我们是在评估物体的“表面感觉”、“材质”还是其他属性。
- 示例代表性不强:示例未能清晰界定“软/硬”的分类逻辑。
改进方法:我们可以在示例前增加指令,为模型提供明确约束。
你的输出只能是“软”或“硬”。
输入:砖块
输出:硬
输入:枕头
输出:软
输入:汽车
通过添加指令“你的输出只能是‘软’或‘硬’”,我们限定了输出范围,帮助模型将任务理解为“判断物体的触感硬度”,从而更可能得到正确答案“硬”。
核心要点:在编写少样本示例时,需确保你的前缀具有意义,并能提供额外上下文,帮助大语言模型理解序列中的逻辑关系。
示例二:输入信息不充分
接下来,我们看另一个关于物体“速度”分类的示例。这个示例的前缀稍好一些。
物体:飞机, 速度:快
物体:蠕虫, 速度:慢
物体:球, 速度:?
这里,“速度”这个前缀比单纯的“输入”更具描述性。然而,当我们输入“球”时,模型可能输出“可变”。这是因为“球”的速度情境依赖性强(例如,被婴儿踢出 vs. 从炮中射出),输入信息不足以让模型做出明确分类。
改进方法:在输入中提供更丰富的上下文。
物体:飞机, 速度:快
物体:蠕虫, 速度:慢
物体:被婴儿踢出的球, 速度:慢
通过将输入改为“被婴儿踢出的球”,我们提供了足够的情境,模型便能明确地输出“慢”。
构建有效少样本提示的要点
基于以上分析,以下是撰写有效少样本示例时需要思考的关键点:
- 确保前缀具有描述性:使用能清晰传达任务属性的前缀(如“速度:”、“硬度:”),而非通用的“输入/输出”。
- 示例需包含充分信息:每个示例都应提供足够的信息,让人或模型能够推导出从输入到输出的底层逻辑或规则。可以自问:如果给10个人看这些例子,他们是否都能毫无歧义地理解你想要什么?
- 在示例前提供必要指令:如果仅靠示例无法清晰传达复杂规则,可以在提示开头添加简要的指令或规则进行补充说明。
- 平衡指令与示例:在有限的提示空间内,需要权衡:某个信息是更适合用一个简明的示例来演示,还是用一句指令来规定?目标是使用更少的词语获得更准确的输出。
- 确保新输入信息充足:即使你通过示例完美地教会了模型某个处理过程,也必须确保新的输入包含了应用该过程所需的全部相关信息。否则,模型将无法进行有效推理。
总结
本节课中,我们一起学习了如何诊断和改进少样本提示。关键在于提供清晰的上下文、使用描述性的前缀、确保示例信息充足,并在必要时用指令补充规则。通过仔细设计你的少样本示例,你可以更有效地引导大语言模型理解并执行复杂任务。记住,好的提示就像一份清晰的操作手册,能让模型准确无误地工作。
028:思维链提示 🧠
在本节课中,我们将学习一种名为“思维链”的提示技巧。这种技巧通过要求大型语言模型展示其推理过程,从而显著提升其在复杂问题上的回答质量。
你可能记得在学生时代,尤其是在数学考试中,老师会要求你“展示解题步骤”。你需要解释是如何得出答案的,或者证明你的结论是正确的。这种展示工作和解释推理的能力在许多领域都非常重要。
事实证明,在编写提示词时,这一点也变得至关重要。让大型语言模型解释其推理过程,实际上能使其为我们提供更好的表现。这听起来很有趣,但仔细想想也合乎逻辑。大型语言模型基于大量文本模式进行训练,学习预测下一个内容。如果它能正确地解释其推理,那么它就更有可能得出正确答案,因为正确的答案在逻辑上应该紧随正确的推理之后。
同样地,如果它正确地解释了第一步,那么它很可能也能正确地完成第二步,因为它可能见过类似问题的推理过程。这是一个直观的解释。你可以这样理解:如果你将问题分解为多个独立的步骤,并解释它们之间的逻辑和顺序,那么最终的答案作为正确推理的自然延伸,其正确率也会更高。对于以准确预测下一个词元为目标的大型语言模型来说,如果第一步和第二步都正确,那么后续步骤也很有可能正确。
因此,我们有一种专门的技巧来实现这一点,它被称为“思维链提示”。接下来我将展示一些例子。当你构建需要复杂智能和推理能力的提示时,记住这一点非常有帮助。我们并非总是需要这种逐步分解和解释的过程,但当我们需要更有效的推理时,理解思维链提示的工作原理就非常有用。
首先,我将从一个反面例子开始,展示不使用思维链提示的情况。在这个例子中,我还会演示一个在提示词结构和措辞上犯的错误,稍后我们会回到这个错误。
以下是三个需要推理的问题。在前两个问题中,我给出了示例答案。
示例1:
问题:我有4名自行车赛车手开始比赛,平均时速30英里,每人骑行2小时。所有骑手骑行的总里程是否大于200英里?
答案:是。
示例2:
问题:我有一个自行车比赛的集结流程,集结一组8名骑手需要47秒,再花67秒让该组到达起跑门并准备就绪。我希望每30秒就有一组新选手开始比赛。为了持续每30秒开始一场比赛,我是否需要始终有8组选手处于集结状态?
答案:否。
目标问题:
问题:我在一个没有重力的宇宙飞船里。我有一个杯子,里面有一根针。我用脚在床上移动,碰倒了杯子,杯子掉到地板上。我拿起一本书放在桌子上。地板上有什么东西吗?
在这个设置中,我使用了“少量示例”提示法,向模型展示了几个带有“是”或“否”答案的问题示例,试图引导它对目标问题也给出“是”或“否”的答案。这是没有使用思维链提示的版本。
那么,ChatGPT是如何回答的呢?它说:是。当装有针的杯子被碰倒到地板上时,杯子和针最终都会落在地板上。在没有重力的情况下,物体不会像在地球上那样下落,但它们仍然会对施加的力做出反应而移动。在这种情况下,你的脚施加的力导致杯子和针移动并最终停在地板上。拿起一本书放在桌子上不影响杯子的位置,所以它们会留在地板上。
因此,它的答案是:地板上会有东西,即杯子和针。
现在,让我们看看应用了思维链提示的同一个例子。
以下是使用了思维链提示的版本。关键区别在于,我们在给出的示例中详细阐述了每个答案背后的推理过程。
示例1(带推理):
问题:我有4名自行车赛车手开始比赛,平均时速30英里,每人骑行2小时。所有骑手骑行的总里程是否大于200英里?
推理: 每位骑手将骑行 30英里/小时 × 2小时 = 60英里。我有4名骑手。因此,骑手骑行的总里程是 4 × 60英里 = 240英里。
答案: 是。
示例2(带推理):
问题:我有一个自行车比赛的集结流程,集结一组8名骑手需要47秒,再花67秒让该组到达起跑门并准备就绪。我希望每30秒就有一组新选手开始比赛。为了持续每30秒开始一场比赛,我是否需要始终有8组选手处于集结状态?
推理: 每组需要 47秒 + 67秒 = 114秒 才能准备就绪比赛。我需要计算在一组准备就绪之前,可以举行多少场比赛。114秒 ÷ 30秒/场 ≈ 3.8场。我不能有部分组,所以需要向上取整到4。我只需要有4组处于集结状态,就能每30秒开始一场比赛。
答案: 否。

目标问题(带指令):
问题:我在一个没有重力的宇宙飞船里。我有一个杯子,里面有一根针。我用脚在床上移动,碰倒了杯子,杯子掉到地板上。我拿起一本书放在桌子上。地板上有什么东西吗?
请先提供你的推理,然后给出答案。
通过这种方式,我们不仅给出了示例答案,还展示了得出这些答案的完整思考链条。同时,我们明确指示模型在回答目标问题时,也要“先提供推理,然后给出答案”。
有趣的是,我们看到了与之前不同的推理,并得出了不同的答案。之前得到的答案是“是”,但现在模型回答:否。因为在零重力环境中,不存在“在地板上”这个概念。
它的推理是:在没有重力的宇宙飞船中,物体的行为与在地球上不同。当杯子和针被碰倒时,它们不会像在地球上那样“掉到”地板上。相反,它们会漂浮在原地或沿受力方向移动。因此,在没有重力的情况下,不存在地球上那种物体“停留在地板上”的概念。
所以,在这个案例中,我们通过思维链提示得到了一个更符合物理原理的答案(“否”),而之前的简单提示则得出了一个有瑕疵的答案(“是”)。
思维链提示的核心要点
上一节我们通过对比看到了思维链提示的效果。本节我们来总结一下它的核心机制。
思维链提示的核心思想是:引导模型模拟人类解决问题时的逐步推理过程。
以下是实现有效思维链提示的几个关键步骤:
-
在示例中展示推理:在提供给模型的“少量示例”中,不仅给出问题和答案,还要详细写出从问题到答案的每一步推理。
- 格式示例:
问题:[你的问题] 推理:[逐步的逻辑推理或计算过程] 答案:[最终答案]
- 格式示例:
-
明确指令:在最终的问题提示中,明确要求模型遵循“先推理,后答案”的格式。
- 常用指令:
“请逐步推理。”或“让我们一步步思考。”
- 常用指令:
-
分解复杂问题:对于特别复杂的问题,可以主动将问题分解成子问题,引导模型分步解决。
其工作原理在于,大型语言模型在训练时学习了大量的文本模式和逻辑序列。当它看到展示出来的、正确的推理步骤时,会更倾向于在生成答案前,先激活并遵循类似的逻辑推理路径。这种“模仿思考”的过程,能有效减少模型直接“跳跃”到错误答案的概率,从而提高输出的准确性和可靠性。
何时使用思维链提示
我们已经了解了思维链提示是什么以及如何操作。那么,在什么情况下应该使用它呢?
思维链提示并非适用于所有场景。对于简单的事实问答或创意写作,可能不需要如此复杂的提示结构。但在以下情况中,它尤其有用:
- 数学与逻辑问题:涉及计算、比较或逻辑推导的问题。
- 常识推理:需要结合多方面常识进行判断的场景(如宇宙飞船的例子)。
- 多步骤任务:需要按照特定顺序执行多个步骤才能得到答案的任务。
- 避免“幻觉”:当需要模型提供可靠、可验证的答案时,要求展示推理过程有助于发现其逻辑漏洞。
在本节课中,我们一起学习了“思维链提示”这一强大的提示词技巧。我们了解到,通过要求大型语言模型像学生解题一样“展示其工作步骤”,即先进行逐步推理再给出最终答案,可以显著提升模型在复杂推理问题上的表现。关键在于:在示例中提供完整的推理过程,并明确指令模型遵循相同的格式。记住这个技巧,当你需要模型进行深入思考而不仅仅是简单回应时,它将是一个非常有用的工具。
029:反应式提示 🧠
在本节课中,我们将学习如何构建能让大型语言模型(LLM)与外部工具和数据源交互的提示。我们将重点介绍一种名为“反应式提示”的方法,它通过示例教会模型在推理过程中识别何时需要借助外部工具,并学习如何使用这些工具。
大型语言模型虽然强大,但无法独立完成所有任务。它们需要能够访问其他数据源,并学会使用其他工具,才能随着时间的推移真正发挥效力。
因此,我们必须学会构建一种提示,使大型语言模型能够查询新信息,或使用其他工具来执行其本身不擅长的推理或计算任务。那么,我们该如何实现这一点呢?
反应式提示方法
实现这一目标的一种方法是采用“反应式”方法。其核心思想是,我们希望教会大型语言模型如何思考一个流程,理解在哪些步骤中它需要使用外部工具来执行某些操作,并将工具的结果带回,作为某种计算或结果融入其后续推理。
为此,有一种特定的提示编写方式。这与我们之前见过的“思维链”提示类似,我们将沿用其中的一些概念,但会扩展该方法,引入“模型知道需要使用外部工具”这一概念。
一个详细示例
让我们来看一个例子。请注意,这是一个较长的示例。我们将通过一个示例来教导语言模型,然后要求它执行类似的任务。
在这个任务中,我们需要计算:“为了让我的儿子准时参加Music City BMX全国赛的9-10岁公开赛,我需要在什么时间到达赛场?”BMX是一项自行车越野赛运动。Music City BMX是纳什维尔当地的一条BMX赛道,举办大型全国赛事。我需要弄清楚何时需要到达赛场,因为这是持续多日的全天活动。有时你想知道,在开车前往赛场前,最多能睡到多晚。比赛中,有数百个仅持续约30秒的小型比赛,称为“Moto”。你需要计算,例如,在第87个Moto开始前,需要等待多久。因此,有时需要权衡是“比赛何时开始”还是“我实际需要何时到达赛场”。
我们将让模型为我们解决这个问题。请注意,这是一个模拟解决问题的过程,并非实际解决,目的是展示其工作原理。
我们首先给出一个任务和一个示例:
任务:计算为了让我的儿子准时参加Music City BMX全国赛的9-10岁公开赛,我需要在什么时间到达。
示例(我们教导模型的思考过程):
思考:我需要找出第一场比赛的开始时间。我可以使用网络搜索工具查询Music City BMX网站来获取该信息。
行动:搜索
查询:Music City BMX网站
结果:所有比赛在上午9点开始。
思考:我需要找出在9-10岁公开赛之前有多少个Moto。我可以使用网络搜索工具查询Music City BMX网站来获取该信息。
行动:搜索
查询:Music City BMX网站
结果:在9-10岁公开赛之前有30个Moto。
思考:我需要找出去年每个Moto的时长。我可以使用USABMX网站上的视频直播流,记录前10个Moto的时长。
行动:视频
查询:[假设的视频URL]
结果:前10个Moto耗时5分钟。
思考:如果10个Moto耗时5分钟,那么30个Moto将耗时15分钟。比赛在上午9点开始,所以我需要在8:50 AM之前到达。为了保险起见,我会提前30分钟,在8:45 AM到达。
记住,这是我们的“少样本”示例。我们模拟了一个场景:为了解决这个问题,我使用了一系列网络搜索,并观看了往年的视频来估算时长。我们正在教导大型语言模型(例如ChatGPT)使用相同的工具来解决问题。
应用所学:执行新任务
教导完成后,我们提出一个新任务:“计算我的36-40岁新手组比赛将在USA BMX Grand Nationals赛事中何时结束。”然后我们用“思考”来提示它开始推理。
以下是模型可能产生的反应(基于所学模式):
思考:我需要找出USA BMX Grand Nationals第一场比赛的开始时间。我可以使用网络搜索工具查询USABMX网站来获取该信息。
行动:搜索
查询:USABMX赛事-grand-nationals
结果:(假设为本次练习)第一场比赛在上午8点开始。
思考:我需要找出在36-40岁新手组比赛之前有多少个Moto。我可以搜索...
行动:搜索
查询:USABMX赛事-grand-nationals
结果:(假设)有120个Moto在此之前。
思考:我需要找出去年每个Moto的时长。我可以使用视频直播流...
行动:视频
查询:[根据所学URL模式生成的假设URL]
结果:(假设)前10个Moto耗时6分钟。
思考:如果10个Moto耗时6分钟,那么每个Moto平均耗时0.6分钟。因此,120个Moto将耗时约72分钟。第一场比赛在上午8点开始,所以36-40岁新手组比赛将在上午9:12左右开始。我需要找出36-40岁新手组比赛本身会持续多久...
(模型继续推理,最终给出比赛结束的估算时间)
有趣的是,模型最终可能稍微偏离轨道(例如,它计算了开始和结束时间,而任务只要求结束时间)。但更重要的是,在整个过程中,它遵循了我们在示例中教导的模式。它学会了“搜索”和“视频”这些工具的概念,并在此处应用了完全相同的工具和格式。
实际系统集成与工具使用
在实际系统中集成此方法时,流程如下:
- 触发工具调用:当模型生成一个“行动”(如
行动:搜索)时,系统会暂停模型的生成。 - 执行真实工具:系统将查询(如
查询:USABMX网站)发送给真实的外部工具(如搜索引擎API)并获取结果。 - 注入结果并继续:系统将获取到的真实结果作为“结果:”部分,与之前已生成的文本一起,作为新的提示输入回模型。
- 迭代循环:模型基于新信息继续推理,直到生成下一个“行动”或最终答案。系统重复步骤2-3,直到模型输出最终结论。
更好的设计是让模型在最终输出时有一个明确的结束信号。但核心在于,通过示例,你教会了模型:“如果你需要某些信息,可以使用这些工具,并且请使用这种格式来描述你的工具调用。”
扩展:工具目录与描述
在上面的简单示例中,我们仅通过少样本示例直接提供了工具的使用模式。还有其他更强大的方法:
- 工具目录:你可以在提示中提供一个工具目录及其描述。例如:
可用工具:
search(query): 在互联网上搜索信息。输入应为搜索关键词字符串。calculator(expression): 执行数学计算。输入应为数学表达式字符串。get_weather(location, date): 获取特定地点和日期的天气预报。
然后,模型可以根据当前推理步骤的需要,参考这些描述来决定使用哪个工具以及如何格式化输入。这使它能够更灵活地进行问题解决,并与各种工具集成。
总结与框架应用
本节课中,我们一起学习了“反应式提示”方法。我们了解到,通过提供包含“思考-行动-结果”序列的示例,可以教导大型语言模型在解决复杂问题时,自主判断何时需要调用外部工具(如搜索引擎、计算器、数据库查询等),并学习如何以正确的格式调用这些工具。
这种方法使得LLM能够突破其固有知识和能力的限制,整合外部信息和功能,从而执行更复杂、更动态的任务。你现在看到的许多高级AI应用框架,例如LangChain,其底层就利用了类似“反应式”的机制来实现智能体的工具调用和自动化流程编排。
通过构建此类提示,你可以创建能够与外部世界交互、利用实时数据并执行特定计算的智能系统。
030:使用大型语言模型相互评分 📝
在本节课中,我们将要学习如何利用大型语言模型来评估其自身或其他模型的输出。随着模型快速迭代,我们精心设计的提示词可能面临失效的风险。本节将介绍一种自动化评估方法,以减少对人力的依赖,并确保提示词库的长期有效性。
上一节我们讨论了提示词维护的挑战,本节中我们来看看如何利用模型自身进行自动化评估。
大型语言模型本身正以极快的速度演进。我们已经见证了ChatGPT、GPT-4、LLaMA、Alpaca、Vicuna等模型的持续涌现。当我们投入大量精力开发出高效的提示词和模式后,一个关键问题是:如何评估并确保这些提示词能随时间推移保持有效?如果我们更换了底层大语言模型,是否所有提示词都会失效?或者,如果我们处理的数据略有变化,是否会产生连锁影响?因此,我们需要更好的方法来评估输出结果。
当然,一种方式是在许多情况下由人工审查输出。但我们更希望找到能够更好扩展的方法,即能够进行某种大规模自动化分析。
那么,我们该如何实现呢?大型语言模型一个非常有趣的特点是,我们可以利用它们来评估自身。这可以作为我们判断提示词质量及其长期可维护性的一个输入。我们可以使用一个大语言模型来给其自身或另一个大语言模型的输出打分。我们已经见过这样的例子:研究人员让一个大语言模型去“教导”另一个大语言模型。我们可以做类似的事情,将一个大语言模型的输出反馈给模型本身进行评分,或者使用另一个(可能参数更多、能力更强)的大语言模型来评估当前模型的输出。
让我们看一个具体的例子,了解如何构建一个提示词来实现这个目标。
在这个示例中,我将教导大语言模型(本例中是ChatGPT)如何给一个提示词的输出评分。在我的例子中,我实际上不会向它展示原始的提示词,而只是教导它评分过程,以便它能帮我实现自动化。我将使用一些“少量示例”的方法。
以下是构建评分提示词的步骤:
首先,我提供输入。输入是一段来自维基百科的关于范德堡大学的文本。它指出范德堡大学成立于1873年。
然后,我展示输出。输出是:“以下是事件和日期的列表:范德堡大学成立 1873”。
接着,我给出解释。解释是:输出开头包含了不需要的文本,应该只包含事件名称和日期。
最后,我进行评分。我给出了5分(满分10分)。
所以,我通过手动完成几个这样的示例,向模型展示我想要什么。
然后,我给出另一个示例,使用完全相同的输入文本。这次输出是:“1873”。这个示例的目的是(你现在可能已经感觉到了)我想要一个能提取事件及其发生日期的提示词,仅此而已。我想要“事件名称,日期”的格式,不想要任何其他文本或解释。我正在展示ChatGPT如何评估输出是否符合该格式。我甚至没有告诉它任务是什么,只是通过示例来帮助它学习。
对于这个输出,我的解释是:输出缺少关于该日期所发生事件的重要信息。我给出的评分是3分(满分10分)。
我还有第三个示例,输入同样是那段关于范德堡大学的段落。我展示的理想输出是:“范德堡大学,1873”。我解释:输出完全符合预期。然后我给出10分(满分10分)。有趣的是,即使我在解释中犯了点小错误(比如措辞不完美),这仍然有效。
完成这些“教学”示例后,我给出一个全新的输入。我说:这是一个不同的输入。这次是关于范德堡大学英语与创意写作项目历史的另一段文本。我给出输出:“亡命者与南方重农派,20世纪上半叶;范德堡大学是东南联盟创始成员,1966”。
这本质上就是一个提示词,让ChatGPT去评估那个输出。于是,它提供了一个解释。它甚至提到了我没有在评分标准中明确指出的问题(比如大小写不一致),这很有趣。然后它给出了9分(满分10分)。作为一个执行此任务的人类标注者,我最终也给了9分,因为它确实在大小写上不一致。但你可以看到,它做得很好。它理解了我想要的核心内容,并执行了我赋予它的评分任务。
因此,我们实际上可以使用大语言模型来评估提示词的输出。
现在,我们来看看这种方法的几种潜在应用场景。
以下是几种使用方式:
- 自我检查:如果你的系统使用像ChatGPT这样的大语言模型来做决策或生成信息,你可能希望让模型检查自身的输出。
- 交叉验证:或者,你可以用另一个模型来检查当前模型的输出。
- 自动化流程:你可能希望多次执行此操作。获取输出后,你提供一个类似我上面构建的评分标准,并开发一个包含该评分标准的提示词。你甚至可以拥有多个不同评分标准的提示词,让它们都对输出进行评分。如果分数低于某个阈值,你可以选择让人类查看该输出,或者只是重新尝试生成,看看是否能得到更好的结果。
这为你提供了一个额外的工具,用于评估输出结果,确保其质量,同时仍然利用这些模型的能力和复杂性。这是一种实现方式。
当然,构建提示词的方式有很多种。你可能想参考“替代方法”模式来开发一些不同的方式。我上面展示的是使用“少量示例”的一个例子。我也可以换一种方式,比如使用“角色扮演”模式:“扮演一个提示词批评家。我将为你提供输出。请根据其与提示词设计者期望的匹配程度进行评分。我将给你一些评分示例。” 我们可以那样做。我使用了一个相对简单的提示词,但我们也可以使用其他模式构建更复杂的提示词。它同样会生成解释,并在最后给出一个分数。
例如,当我们稍微修改提示词后,有时得到8分,有时得到9分。无论如何,根据我们的评分标准和期望,这看起来都是一个相当不错的输出。
因此,当我们需要评估一个提示词及其输出时,可以将此类工具纳入我们的工具箱。我们不必总是退回到依赖人工审查。我们可以转而让大语言模型自身评估输出,然后围绕此构建不同类型的自动化流程,或者将其作为触发条件,在必要时升级到人工处理。
当然,如果我们拥有大量高质量的评分示例,这对我们帮助很大。但正如你在我的例子中看到的,我们并不需要海量示例。仅仅三个评分示例,它就很好地理解了我的意图。
本节课中,我们一起学习了如何利用大语言模型进行自动化相互评分。我们探讨了构建评分提示词的方法,通过提供输入、输出、解释和评分的少量示例来“教导”模型。我们还了解了这种技术的多种应用场景,例如用于模型自我检查、交叉验证或构建自动化质量监控流程。这种方法为我们提供了一种强大的工具,能够在模型快速迭代和数据变化的背景下,更高效地维护和评估提示词的有效性。
031:游戏玩法模式 🎮
在本节课中,我们将学习一种名为“游戏玩法模式”的提示模式。这种模式的核心思想是,让大型语言模型(如ChatGPT)扮演游戏大师的角色,与我们进行互动游戏,从而帮助我们以有趣的方式学习和掌握新知识或技能。
概述
上一节我们介绍了多种提示模式,本节中我们来看看如何将学习过程游戏化。游戏玩法模式要求模型设定游戏规则、生成内容并引导游戏进程。我们将重点探讨如何利用此模式来提升我们的提示工程技能。
模式核心:与AI进行游戏
游戏玩法模式的基本结构是:我们告知模型要玩一个游戏,并指定游戏主题。模型则充当游戏大师,负责制定具体规则、生成挑战内容并评估我们的表现。
其核心公式可概括为:
用户输入 = “我们来玩一个关于[主题]的游戏。规则如下:[基本规则描述]。”
模型角色 = 游戏大师(制定详细规则、生成任务、评估用户表现)
构建一个提示工程技能游戏
以下,我们将通过一个具体示例,演示如何构建一个用于练习提示工程技能的游戏。
首先,我们向模型输入游戏的基本设定:
我们来玩一个游戏,目的是提升我的提示工程技能。
游戏规则如下:
1. 你给出一个可以通过编写提示词(prompt)完成的简单任务。
2. 任务应包含逻辑推理或编程思维成分,但不需要实际编写源代码。
3. 我尝试编写一个提示词来解决该任务。
4. 你将模拟运行我的提示词,给出输出结果,并评价我的提示词完成该任务的效果。
5. 持续向我提问,直到我要求停止。
6. 现在,请提出第一个任务。
游戏过程示例与解析
模型接受指令后,便会开始游戏。以下是游戏中的几个回合示例,展示了模型如何生成任务以及我们如何运用所学模式应对。
第一回合:检测列表重复项
模型给出的第一个任务是:
“给定一个数字列表,判断列表中是否包含重复元素。如果包含,返回‘是的,有重复’;如果不包含,返回‘未发现重复’。”
这是一个测试我们能否让模型生成精确格式化输出的挑战。
我决定使用少样本示例(Few-shot)模式来解决。我的提示词如下:
以下是一些示例:
列表:[1, 2, 3] -> 输出:未发现重复
列表:[2, 2, 2] -> 输出:是的,有重复
现在请判断以下列表是否有重复:[5, 8, 3, 5]
模型运行后输出:“是的,有重复”。这与任务要求的格式完全一致。随后,模型给出了反馈:“你的提示词有效地完成了任务,并提供了不同情况的示例。”
第二回合:统计句子单词数
模型给出的第二个任务是:
“给定一个句子,计算其中的单词数,并以‘该句子包含X个单词’的格式返回结果,其中X是单词数量。”
这个任务进一步测试了我们对输出格式控制的能力。
我选择使用模板模式来解决。我的提示词如下:
请使用以下模板输出:
“该句子包含 NUMBER 个单词。”
请保持模板的整体格式,并将“NUMBER”替换为你的计算结果。
请问句子“The cat jumped on the mat.”包含多少个单词?
模型输出:“该句子包含6个单词。” 格式完全正确,任务成功完成。
第三回合:判断闰年及模型反馈
模型给出的第三个任务是:
“给定一个‘YYYY年MMMMDD日’格式的日期,判断该年份是否为闰年。如果是,返回‘[年份]是闰年’;如果不是,返回‘[年份]不是闰年’。”
我再次使用少样本示例模式,但在示例中犯了一个错误:
示例:
日期:2000年1月1日 -> 输出:2000年是闰年
日期:2009年7月24日 -> 输出:2004年不是闰年 (错误示例)
请问日期2023年5月15日是否是闰年?
模型正确输出了“2023年不是闰年”。但更重要的是,它提供了有价值的反馈:“第三个示例有一个小错误,‘2004年不是闰年’应为‘2009年不是闰年’。不过这并未影响我理解和响应任务。”
这体现了游戏玩法模式的一大优势:模型不仅能评估任务结果,还能对我们的提示词本身(如示例的准确性)提供反馈,帮助我们发现并改进细微错误。
进阶应用:指定练习的提示模式
为了使游戏更具针对性,我们可以引导模型围绕特定的提示模式生成任务。以下是具体方法。
我们可以修改初始指令,将“主题”具体化为某个提示模式及其描述。例如,如果我们想练习“菜谱模式”:
我们现在改变游戏主题。所有问题都应围绕“菜谱提示模式”展开。
该模式的核心是:给定一个目标和不完整的步骤/材料列表,通过添加约束,引导模型输出一个完整的步骤序列。它不限于烹饪,可应用于任何需要分步完成的目标。
现在,请基于这个模式提出第一个任务。
随后,模型生成了一个非常贴切的任务:
“你的目标是创建一个提示词,指导我生成组装一个简易木制书架的步骤序列。书架有四个主要部件:顶板、底板、侧板和搁板。你已获得以下‘材料’:将顶板连接到侧板;将搁板插入指定插槽。请使用这些中间步骤,创建一个能生成完整书架组装序列的提示词。提示词应能填补任何缺失步骤,并提供清晰的组装顺序。”
这个任务巧妙地运用了“菜谱模式”的思维,要求我们构建提示来补全流程。
游戏玩法模式的优势与总结
本节课中,我们一起学习了“游戏玩法模式”。通过让大型语言模型扮演游戏大师,我们可以:
- 降低内容生成门槛:我们只需设定基本规则和主题,模型便能利用其训练数据,自动生成丰富的游戏内容和挑战,省去了我们苦思冥想设计题目的过程。
- 获得即时反馈:模型不仅能判断任务完成度,还能对我们的提示词质量进行评价,指出其中的错误或可改进之处,形成高效的学习循环。
- 保持学习趣味性:游戏的形式使得练习过程不再枯燥。模型能引入多样化的主题(如判断闰年、书架组装、埃菲尔铁塔历史等),让学习充满新鲜感和挑战性。
- 实现高度定制:我们可以通过修改“主题”,轻松地将游戏聚焦于需要练习的特定技能或提示模式上,实现个性化、目标明确的学习。
总而言之,游戏玩法模式是一个强大的工具,它将AI的生成能力与人类的学习需求相结合,创造出一种互动性强、反馈及时且充满乐趣的学习体验。你可以尝试用这个模式来练习任何你想学习的主题。
032:模板模式 🧩
在本节课中,我们将学习如何通过“模板模式”来精确控制大型语言模型的输出格式。这种模式能确保模型按照我们指定的结构和样式生成内容,就像为助手提供一个填空模板一样。
概述
获取大型语言模型完全符合我们期望格式的输出有时具有挑战性。模板模式旨在解决这一问题。通过向模型提供一个包含占位符的模板,我们可以引导模型将生成的信息填充到指定位置,从而获得结构化的输出。
模板模式的工作原理
上一节我们提到了控制输出格式的挑战,本节中我们来看看模板模式的具体实现方式。其核心思想是:我们向模型描述一个输出模板,模型将遵循此模板生成内容,并用其生成的信息替换模板中的占位符。
以下是使用模板模式的基本指令结构:
我将为您提供一个输出模板。
全大写的单词是我的占位符。
请用您的输出填充这些占位符。
并请保持我模板的整体格式。
我的模板是:[此处插入模板]
在这个指令中,我们首先提示模型需要遵循一个模板。我们约定全大写的单词是待填充的占位符。最后,我们要求模型保持模板的原始格式。
一个简单示例:生成问答
让我们通过一个具体例子来理解。假设我们希望模型根据提供的文本生成一系列问答,并且每个问答对都遵循固定的格式。
首先,我们向模型提供模板。以下模板使用了Markdown语法来定义格式,其中QUESTION和ANSWER是全大写的占位符。
***问题***
QUESTION
***答案***
ANSWER
在这个模板中,***在Markdown中会产生加粗斜体的效果,从而将“问题”和“答案”设置为标题。QUESTION和ANSWER则是模型需要填充具体内容的位置。
接着,我们告诉模型:“我将在下一个提示中提供需要格式化的数据。请使用我的模板创建20个问题。”然后,我们粘贴一段关于“帕劳印第安人”的维基百科文本。
模型接收指令和文本后,会提取信息,生成20个相关的问答对,并严格按照模板格式输出。例如:
***问题***
帕劳印第安人是什么人?
***答案***
帕劳印第安人是史前时期居住在现在美国西南部地区的一群古印第安人。
这样,我们就得到了一份格式统一、内容相关的问答列表。
模板占位符的进阶用法
模板模式的强大之处在于,占位符不仅可以指示填充位置,还能包含复杂的指令和约束。
例如,我们可以创建一个用于从文本中提取人物传记信息的模板:
## 姓名
NAME
## 执行摘要
EXECUTIVE_SUMMARY
## 完整描述
FULL_DESCRIPTION
在提供模板时,我们可以为占位符附加详细说明:
EXECUTIVE_SUMMARY:请提供一句总结。FULL_DESCRIPTION:请提供一段总结。
以下是使用此模板的步骤:
- 首先,将上述模板及占位符说明提供给模型。
- 然后,粘贴一大段关于范德堡大学历史的文本。
- 模型会从文本中自动识别出提到的人物,为每个人物生成一个条目,并严格按照指令填充:
EXECUTIVE_SUMMARY部分是一句话,FULL_DESCRIPTION部分是一个段落。
通过这种方式,占位符从简单的“填空处”变成了包含语义理解和规则遵循的“智能指令点”。我们可以要求模型进行信息提取、总结、按特定规则过滤等复杂操作。
模板模式的优势总结
本节课中我们一起学习了模板模式。总结其核心优势如下:
- 格式控制:确保输出严格遵循预设的布局和样式。
- 结构化输出:轻松获得列表、表格、问答对等结构化数据。
- 语义化占位符:占位符可包含复杂指令(如“一句总结”、“按时间顺序列出”),指导模型进行智能填充。
- 提升效率:自动化完成从信息提取、加工到格式化的全过程,节省大量人工时间。
模板模式是确保从大型语言模型获得所需格式和内容的有效且强大的方法。通过精心设计模板和占位符指令,你可以将模型转变为高效的结构化内容生成器。
033:元语言创建模式 🧠
在本节课中,我们将学习一种名为“元语言创建模式”的高级提示工程技术。该模式的核心思想是:我们可以教会大型语言模型一种自定义的、简化的语言或速记符号,然后使用这种新语言与模型进行高效、精确的沟通。
概述
上一节我们探讨了如何通过清晰的指令与模型沟通。本节中我们来看看,当需要频繁处理特定领域或重复性任务时,如何通过创建“元语言”来提升沟通效率和一致性。
使用完整的句子描述所有信息,并非总是向大型语言模型提供输入的最简便方式。在现实世界中,我们经常使用专门的“语言”来描述不同领域。例如,数学有其专用符号,我们做笔记或描述特定事物时也会使用速记。我们可以创建自己的小型语言,以比完整句子更简洁的方式捕捉信息。当然,这种语言的关键在于沟通双方都理解其含义。
模式核心:定义与翻译
以下是元语言创建模式的核心步骤:
- 提供示例:向模型展示一个你自定义的速记符号示例。
- 解释含义:紧接着,用模型能理解的自然语言“翻译”或解释这个示例的含义。
这类似于“少样本示例”技术,但区别在于,你是在定义一种新的语法规则,而非仅仅提供输入-输出对。你是在告诉模型:“当我说 X(用我的语言),我的意思是 Y(用自然语言)。”
应用实例:旅行规划
让我们通过一个旅行规划应用的例子来具体说明。
首先,我们给出基础指令:
我将描述我的旅行,你需要列出我途经地点的有趣活动。
我会告诉你我在每个地点停留的天数,你需要列出可能的行程安排。
接下来,我们引入并定义自己的速记语言:
为了描述我的路线,我将使用一种速记符号。
当我说“Nashville, 3; -> Memphis, 2”时,
我的意思是:我的路线将从纳什维尔前往孟菲斯,我将在纳什维尔停留3天,在孟菲斯停留2天。
注意:这里的速记符号 Nashville, 3; -> Memphis, 2 比其对应的完整英文句子要密集得多。我们通过“当我说…我的意思是…”的句式,完成了对新语言的“编程”。
现在,模型已经学会了我们的语言。我们可以直接使用速记进行复杂查询:
Nashville, 0; -> Dallas, 1; -> Granbury, Texas, 4
模型会正确理解并响应:“明白。既然你提到不会在纳什维尔停留,我将专注于为你提供在达拉斯停留1天以及在德克萨斯州格兰伯里停留4天的有趣活动和可能行程。” 并据此生成详细的每日行程。
我们还可以测试更复杂的路线:
Nashville -> Fairhope, Alabama, 3; -> Gulf Shores, Alabama, 1; -> Mentone, Alabama, 1
模型能够解析这个“复杂字符串”,并分别为费尔霍普(3天)、格尔夫海岸(1天)和门通(1天)生成对应的行程计划。
模式的优势与应用场景
你可以想象,这是一种非常有用的能力。以下是其优势和应用场景:
- 提升效率:为频繁执行的任务开发速记符号,可以节省大量输入时间和精力。
- 增强精确性:用定义好的语言描述需求可能更精确、更一致。
- 确保一致性(尤其在组织内):如果一个组织定义了自己的语言来描述特定类型的信息,并教会所有成员使用,那么输入模型的信息将具有一致的语义。这有助于减少因个人表达方式、详细程度不同而导致的输出差异,使基于大语言模型的推理更加稳定可靠。
总结
本节课中我们一起学习了元语言创建模式。该模式允许我们通过“当我说[速记符号],我的意思是[完整解释]”的句式,教会大型语言模型一种自定义的简练语言。掌握这一模式,能让我们在与模型交互时更高效、更精确,特别是在处理重复性高或需要标准化输入的复杂任务时。你可以开始思考,为自己经常处理的任务设计一套速记法,从而更智能地与AI协作。
034:配方模式 🧩
在本节课中,我们将要学习“配方模式”。这是一种利用大语言模型来帮助我们填补知识或流程中空白的方法。当我们面对一个问题,并且已经知道解决方案中的部分步骤或要素,但不清楚完整细节时,就可以使用这个模式。模型将根据我们提供的“部分配方”,自动补全缺失的步骤。
模式概述
上一节我们介绍了如何创建元语言。本节中我们来看看如何将已知与未知结合,让模型帮助我们完成规划。
有时,我们在使用大语言模型解决问题时,已经知道解决方案中的部分内容。我们有一个目标,并且了解达成这个目标需要涉及的一些步骤或要素,但我们不知道完整的解决方案。我们需要大语言模型帮助我们填补空白,将缺失的步骤组合起来,最终完成这个“配方”。模型会根据我们已有的“食材”或已知信息,填充所有空缺,给出一套详细的步骤。
因此,配方模式就是用于实现这一目的的模式。我们给大语言模型一个我们试图达成的目标,并给出我们已知的、在创建整体解决方案(即“配方”或目标)过程中必须涉及的部分步骤集合。我们将提供所需内容的一部分,并要求模型补全其余部分。这实际上是一种让大语言模型帮助我们在某个流程或一系列必要步骤的知识中填补空白的方法。
配方模式非常有用。我还要向大家展示,我们用来描述空白、谈论已知是流程或步骤一部分但不知其确切细节的直观简写方式,实际上是大语言模型(如ChatGPT)能够理解的。
模式应用示例
让我们看一个例子。我们将为我们的旅行规划应用添加一个功能。我们会告诉模型我的起点和终点,模型需要为我提供一个完整的停留点列表,包括起点和终点之间的地点。
请注意,我们在这里所做的本质上是提供了一个不完整的“配方”。我们说:“这是我的起点,这是我的终点,但我需要知道中间该有什么。”模型回顾并采用了我们之前的一个例子(实际上是它自己创建了一个例子),即从纳什维尔到亚特兰大的旅行。它注意到途中会经过查塔努加,这确实是开车从纳什维尔到亚特兰大的必经之路。它建议了一些可以做的事情,比如去查塔努加的田纳西水族馆或瞭望山。
有趣的地方在于,如果你还记得旅行规划应用,我曾教它使用我自创的语言来描述旅行(即使用了元语言创建模式)。现在,我将结合元语言创建模式和配方模式来做一些有趣的事情。
结合元语言与配方模式
以下是具体操作。我将输入:Nashville, 0(表示从纳什维尔出发,停留0天)。然后,我将只输入点(即省略号),基本上是 ... -> ... -> Fairhope, Alabama2。这表示我从纳什维尔前往阿拉巴马州的费尔霍普。
我向模型传达的信号是:我希望你补全它,告诉我在中间应该在哪里停留。我通过 ... 表示我在这里有空白,需要停留两次,但我不知道具体地点。请你填充这个配方,让我能从纳什维尔到费尔霍普,并在中间有两次停留。
模型理解了这一点。显然,... 是我们表达未知事物的自然方式,模型理解这一点并填充了配方。它说:我们将从田纳西州纳什维尔开始,根据您的要求,停留0天。(我个人强烈建议在纳什维尔多待些时间,我住在这里,所以我所有的行程都从不在这里停留开始,因为我总在这里。当然,不是总是,但大部分时间是。)
然后,它为我们填充了两次停留:阿拉巴马州的伯明翰和蒙哥马利。如果你走最直接的路线,这两个城市都在纳什维尔和费尔霍普之间。终点是阿拉巴马州费尔霍普。
你会发现,它基本上理解了我们设定的约束。我们使用了自定义语言:Nashville, 0 -> 定义了起点,然后说 ...,表示这是一个我不知道的空白点,是我的模板或配方中的空缺,所以你需要在这个配方中填充我们应该在这里停留的地点,然后是 -> ...,我说这是另一个空白点,我不知道配方中这里应该放什么,请填充它,最后是 -> Fairhope, Alabama。
我们在这里使用配方模式,让ChatGPT或另一个大语言模型来完成我们的请求。
探索模糊指示
如果我们再次尝试,输入:LA, 1 -> ........ -> New York, 3,让我们看看它会如何解释,因为即使对我来说,这么多点意味着什么也不明确。
它现在开始为我们规划行程:好的,起点是洛杉矶(1天),然后你会到达拉斯维加斯、大峡谷、圣达菲……我好奇它中间会有多少个停留点。
请注意,当我在这里使用了四个占位符(........)时,我得到的中间停留点超过了四个。因为我表达得非常不确定。我没有使用 ... -> ... -> 这样明确的结构,而是用了一大串点,这更加模糊不清,而这正是我想做的有趣实验。我不确定它是否能理解,但我基本上是在表达:我要从洛杉矶去纽约,中间会有很多停留,我不知道应该是哪些,请为我规划行程。这是我在洛杉矶停留的时间,这是我在纽约停留的时间。
每个人都可以争论我在每个地方停留的时间是否合理,这些都是很棒的地方。模型解释了我配方中的缺失部分。它可能也知道我需要相当多的停留点,并且这将是一次从洛杉矶到纽约的悠闲自驾游。于是,它填充了一整串我可能沿途停留的不同地点,以便在从洛杉矶到纽约的长途公路旅行度假中拥有有趣的体验。
模式核心与总结
本节课中我们一起学习了配方模式的工作原理。你向大语言模型提供你试图达成的目标、你知道必须融入解决方案的片段或必须存在的步骤及其大致位置,然后要求它填充其余部分。你可以使用省略号或其他类型的标记来指示你不知道内容、希望模型填充的位置,模型将使用配方模式为你补全整个配方。
核心操作可以总结为以下公式:
已知部分(目标 + 部分步骤/要素) + 明确标记的空白(如“...”) -> 模型补全 -> 完整配方
在代码提示中,这种交互类似于:
# 用户提供不完整的“配方”
user_input = “从A地到B地,中间在...和...停留,请补全行程。”
# 模型理解“...”为需要填充的空白,并输出完整计划
model_completion = complete_recipe(user_input)
总之,配方模式是一个强大的工具,它能将人类的模糊意图与模型的结构化生成能力结合起来,高效地填补规划和知识中的缺口。
035:替代方法模式 🧠
在本节课中,我们将学习一种名为“替代方法模式”的提示工程技巧。这种模式的核心是利用大型语言模型,针对同一个问题或任务,快速生成多种不同的解决方案或思路,类似于进行头脑风暴。
概述
上一节我们探讨了如何通过特定模式引导模型输出。本节中,我们来看看如何利用“替代方法模式”来激发创意,探索解决问题的多种可能性。其核心思想是:在特定范围内,要求模型始终为特定问题或任务提供不同的解决思路。
模式的核心思想
使用大型语言模型进行头脑风暴,为解决问题提供不同思路,是一个非常有趣且实用的方式。模型在训练过程中学习了海量资料,可能见过许多问题及其多种解决方案。因此,它可以基于这些知识,为我们提供多样化的潜在方法,甚至能综合过往信息,为未见过的具体问题合成出有趣的解决思路。
基础模式示例
以下是该模式的一个基础应用示例。我们首先给模型设定一个指令:
指令:
从现在开始,如果存在完成同一件事的不同方法,请列出最佳的替代方案。比较和对比这些方案,并询问我选择使用哪一个。
这个指令比较通用。在实际应用中,根据具体任务提供更丰富的上下文,效果通常会更好。指令的后半部分要求模型比较不同方案的优劣,这有助于我们根据自身情况做出更合适的选择。
应用实例:生成提示词
接下来,我们通过一个具体任务来演示。假设我们的任务是:让ChatGPT为自己编写一个提示词(Prompt),用于判断给定日期是否为闰年。
任务描述:
请编写一个提示词,使用少量示例(Few-Shot)来判断格式为“年-月-日”的日期是否为闰年。输出应为“{年份}是闰年”或“{年份}不是闰年”。
模型根据“替代方法模式”生成了两种不同的方案:
以下是模型生成的两种不同风格的提示词方案:
方案一:直接提问格式
提示词:判断以下日期是否为闰年。
示例:
输入:2020-02-29
输出:2020是闰年。
输入:2021-02-28
输出:2021不是闰年。
...(更多示例)
请判断:{用户输入日期}
方案二:对话格式
提示词:我们来玩一个游戏。我会给你一些日期,你告诉我它是不是闰年。
示例:
用户:2020-02-29 是闰年吗?
助手:是的,2020是闰年。
用户:2021-02-28 呢?
助手:不,2021不是闰年。
...(更多示例)
用户:{用户输入日期}
随后,模型对两种方案进行了比较:
- 方案一更为正式和结构化,易于理解和解析,适合需要清晰、简洁答案的应用场景。
- 方案二更具对话性和自然感,能提升用户交互的参与度,适合注重用户体验的交互式应用。
需要注意的是,模型在生成时犯了一个小错误:它没有完全遵循我们要求的输出格式(把年份放在了前面)。这提醒我们,必须仔细检查模型生成的提示词,确保其符合我们的具体要求,必要时可以进行修正和优化。
模式变体与进阶应用
我们可以对基础模式进行微调,以适应更复杂的任务。例如,在要求模型生成替代方案之前,先让它明确列出任务本身。
调整后的指令:
每当我要求你为我编写完成某项任务的提示词时,请:1. 列出任务内容;2. 列出完成该任务的替代方法;3. 为每种方法编写一个提示词。
让我们应用这个变体模式来处理一个更实际的问题:自动总结邮件链中的问题。
新任务:
请编写一个提示词,让ChatGPT能自动识别一封邮件链中的所有问题,并将每个人对每个问题的意见总结为要点,列在相应问题下方。
模型生成了三种截然不同的方法:
以下是模型针对邮件总结任务提出的三种替代方法:
- 直接分析提取法:编写提示词,指示模型首先识别邮件链中的所有问题,然后提取与每个问题相关的回复,最后将意见总结为要点。
- 角色扮演模拟法:编写提示词,要求模型模拟一场对话,在其中扮演“总结者”的角色,让用户提供邮件链,然后生成带要点的总结。(这里模型在其为自己编写的提示词中,自发运用了“角色模式”)。
- 案例研究报告法:编写提示词,将邮件链视为一个“案例研究”,要求模型提供一份包含问题及对应意见要点的总结报告。
第三种“案例研究”法是许多人可能不会首先想到的创新角度,这正体现了利用模型进行头脑风暴的价值——它能突破我们固有的思维框架,提供新颖的视角。
方案的评估与迭代
生成了多种方案后,下一步自然是对它们进行评估。我们可以再次利用大型语言模型来评估这些提示词本身的效果。通常,建议在一个新的对话中进行评估,以避免模型陷入“自我肯定”的偏差。
评估任务:
请编写一个提示词,用于评估多个不同的、旨在总结邮件对话中问题及各利益相关方观点的提示词。
模型为此评估任务又提供了三种替代方法:
以下是模型为“评估提示词”这个新任务生成的三种方法:
- 直接评估法:编写提示词,向模型呈现多个待评估的提示词,让其评估每个提示词在总结问题和观点方面的有效性。
- 评估者角色法:编写提示词,指示模型模拟对话,扮演“评估者”角色,由用户提供不同的提示词供其评估。(再次使用了角色模式)。
- 反馈改进法:编写提示词,要求模型为每个提示词提供反馈,并给出改进建议。
这样,我们就拥有了三种不同的方法来评估之前生成的方案,形成了一个完整的“生成-评估”循环。
总结
本节课中,我们一起学习了“替代方法模式”。我们了解到,该模式的核心是引导大型语言模型为单一问题提供多种解决方案,从而实现高效的头脑风暴。我们通过“生成闰年判断提示词”和“编写邮件总结提示词”两个实例,演示了基础模式及其变体的应用。最后,我们还探讨了如何利用模型本身来评估这些生成的方案,形成迭代优化的工作流。掌握这一模式,能帮助我们在面对复杂任务时,快速拓展思路,发现潜在的最佳路径。
036:请求输入模式 🎯
在本节课中,我们将学习一种名为“请求输入模式”的提示工程技巧。该模式的核心目标是控制大型语言模型的输出节奏,使其在接收完我们的指令后,暂停并主动向我们索要具体输入,而不是立即开始生成内容。
模式的核心思想
当我们与大型语言模型协作时,通常会在提示中描述一系列我们希望模型遵循的规则。这些规则将影响其输出,本质上是在“编程”这个模型。
上一节我们介绍了如何为模型设定规则。本节中我们来看看一个常见的挑战:如何防止模型在接收到规则后立即做出我们不希望的响应。
面临的挑战
有时,我们希望模型先理解规则,然后等待我们提供具体的输入,再将规则应用于此输入。例如,在一个“翻转互动”场景中,我们可能希望模型根据规则向我们提问,但我们只希望它一次问一个问题,而不是一次性生成10到20个问题。
因此,我们需要一种简单的方法,让大型语言模型能够倾听我们的指令,确认理解,然后等待我们提供输入。
解决方案:请求输入模式
我们可以通过“请求输入模式”来实现这个目标。其核心思想是让大型语言模型在听完规则后,主动向我们索要应用这些规则所需的输入。
以下是该模式的应用场景:
- 翻转互动提问:描述提问的规则后,只希望模型提出一个问题。
- 生成替代方案:描述生成替代方案的规则后,只希望模型先索要第一个任务,而不是自行虚构一个任务并开始生成。
一个反面案例
让我们看一个例子。在之前的视频中,我介绍了“替代方案模式”。当时它运行得非常有效,因为我实际上将其与“请求输入模式”结合使用了。
现在,我将展示不结合使用时的效果。我向模型输入了以下提示:
每当我要求你为我编写一个提示来完成某项任务时,请列出该任务是什么,列出创建该任务的替代方法,然后为每种方法编写一个提示。
我要求ChatGPT为“如何提示ChatGPT来解决任务”这件事生成多种替代方案。这回到了之前的概念:使用ChatGPT为自己生成提示,以辅助提示工程。
但我移除了一个关键部分。结果,ChatGPT回应说“当然”,然后它自行虚构了一个任务(“整理杂乱的书桌”),并为这个虚构的任务生成了三种替代方案。这并非我的本意,我的对话中因此充满了我不关心的额外内容。如果我试图创建一个具有一致性的交互体验,这将毫无帮助。
如何实施该模式
我们可以应用“请求输入模式”来解决这个问题。其做法非常简单:
在提示的末尾,告诉大型语言模型请求下一个输入。
具体操作如下:
- 在提示中描述所有规则或要求。
- 在最后加上一句指令,例如:“现在,向我询问第一个任务。”
这是一个示例提示结构:
[你的所有规则和指令描述...]
现在,请向我询问第一个任务。
这种方式相当于“切断”了大型语言模型,告诉它:“不要生成一大堆内容。我希望你停在这里,并询问我接下来想做什么。”这是一种将控制权交还给用户,让用户决定下一步操作的方法。
重要说明
与所有提示模式一样,当我们处理大型语言模型时,它具有一定程度的随机性。这意味着它并非每次都能完全一致地工作,此模式也可能无法保证100%成功。但实践证明,在提示末尾加上“请向我询问第一个输入”之类的指令,其可靠性非常高。
因为它向大型语言模型传递了一个明确的信号:它需要在此处暂停。
效果对比
如果我们对比使用该模式前后的输出,会发现结果更加聚焦。
- 未使用模式:模型可能生成一段冗长的、基于虚构任务的回应。
- 使用模式后:模型会回应:“当然,让我们开始吧。您希望我为哪个任务创建替代方案和提示?”
请注意,输入的核心部分是相同的,但末尾的指令“切断”了模型的自动延续,迫使它停下来等待我们的输入。
本节课中我们一起学习了“请求输入模式”。该模式通过在提示末尾添加明确的等待指令,有效控制大型语言模型的响应流程,确保其先理解规则,再根据用户的具体输入执行任务,从而创造出更可控、更聚焦的交互体验。
037:组合模式 🧩
在本节课中,我们将要学习如何将不同的提示模式组合起来,以构建更复杂、更强大的提示。这是构建高级提示工程解决方案的核心概念。
你可能已经注意到,我开始将不同的模式组合在一起使用。当你希望构建真正复杂的提示时,最重要的概念之一就是:你需要思考如何将多个模式相互结合,以解决你正在处理的问题。因此,不要只考虑“用哪个模式能解决这个问题”,而应该思考“哪些模式能解决问题的某些方面,以及如何将这些模式组合起来”。
组合模式的初步示例
上一节我们介绍了“请求输入”和“提供替代方案”等模式,本节中我们来看看它们如何结合。
我们已经在“请求输入”和“提供替代方案”的例子中看到了一个初步的组合示例。“请求输入”是一个可以与许多其他模式结合使用的模式。在这个案例中,我们将其与“提供替代方案”结合使用。于是我们得到了“替代方案”和“请求输入”,它们被组合在一起,构建了一个解决整体问题的提示。
在本课程剩余部分,我们将看到,构建真正复杂提示的方法就是思考如何以有趣的方式组合多个模式。
回顾已学的模式
现在,回想一下我在课程中介绍的一些模式及其示例。既然你了解了更多模式,你可能会发现,我在不同的示例中其实一直在组合模式。
例如,在“游戏玩法”的示例中,我可能使用了“请求输入”模式。同时,在“游戏玩法”中,我可能还使用了“角色扮演”模式。由此可见,将不同元素组合起来有助于我们解决整体问题。
因此,当你尝试处理某个需要设计和开发的新复杂提示时,你应该思考:这个问题的基本组成部分是什么?我是否了解现有的模式,可以用来解决所有部分?如果无法解决所有部分,我能否使用模式并将其应用到尽可能多的不同部分,从而使你必须从头开始发明新方法的那部分未知问题尽可能小?
我们的目标是,尽可能多地使用已有模式作为解决各部分的路线图,这样需要从零开始创造的部分就最小化了。这就是我们现在要做的事情。
组合模式的本质
这听起来可能比实际情况更复杂,但归根结底,我们所做的仍然是在构建语言。我们仍然在使用自然语言写作,仍然在写句子,仍然在进行沟通。我们只是有意识地思考语言中的模式,并思考为了解决问题,应该使用哪些语句以及如何组织这些语句。
从某种意义上说,组合模式实际上是在进行一种更强大的“编程”。我们开始将已知的不同“程序”或“指令”组合起来,以更复杂、更精密的方式构建提示,使其拥有更强大的功能和更丰富的内涵。
请记住,不要觉得这是你做不到的事情。每个人都能做到。归根结底,你只是在用语言描述你希望完成的事情。你仍然在用语言描述你想要实现的目标。而所有这些模式所做的,就是帮助我们思考,如果我们要使用某个模式,指令中应该包含什么内容。
如何组合模式
以下是组合模式的基本方法:
- 模式提供指令集:每个模式都为我们提供了一组需要包含的指令或语句,以及某种组织形式。
- 简单的组合方式:很多时候,组合模式就像把每个模式的语句都拿出来,确保它们都出现在提示中一样简单。有时就是这么简单。
- 注意语句位置:有时会更微妙,我们可能需要确保某些语句出现在特定的位置。例如,对于“请求输入”模式,我们可能总是希望它出现在提示的末尾,否则其效果会大打折扣。
因此,虽然组合模式有时可能需要你思考语句的放置位置而略显棘手,但大多数时候,它就像把语句放在一起一样简单。
课程实践与总结
随着我们继续学习本课程的其余部分,我鼓励你注意我何时使用多个模式组合来解决问题,并思考当你尝试用提示工程处理新任务时,如何结合使用多个模式来解决问题。
本节课中我们一起学习了提示工程的组合模式。我们了解到,构建复杂提示的关键在于有意识地将多个基础模式结合起来,像搭积木一样解决整体问题。这要求我们分析问题的组成部分,并运用已知的模式作为构建模块。组合的核心通常是将不同模式的指令语句汇集在一起,有时需要注意特定语句的位置以优化效果。掌握这一思维,你将能设计出更强大、更精准的提示。
038:大纲扩展模式 📝
在本节课中,我们将学习如何利用“大纲扩展模式”来克服大型语言模型在处理超长输入或生成超长内容时的固有局限。我们将探讨如何通过构建和扩展大纲,分块生成内容,并最终将它们组合成一个连贯的整体。
大型语言模型在输入和输出规模上存在根本性限制。我们能提供给模型的提示长度,或模型能记住的对话长度,都存在上限。同时,模型单次能生成的内容量也有限制。
尽管未来模型会变得更大,能处理更多输入并生成更多输出,但每个人很可能都会遇到某种规模上的限制。
我们解决此限制的典型方法是分块生成解决方案。例如,你无法直接要求ChatGPT生成一整本书,因为它会在某个节点停止。同样,你也不能直接将数万页内容输入模型并要求它给出答案。信息量总是存在限制。
因此,我们需要一种方法,既能分块处理,又能将所有部分重新组合起来。
大纲扩展模式的工作原理
上一节我们介绍了分块处理的必要性,本节中我们来看看如何通过构建大纲来实现这一目标。
我们可以为要构建的内容创建一个大纲,并将其细化到所需的粒度级别。然后,我们可以开始填充各个部分。生成独立模块后,我们能清楚地知道它们如何组合在一起。这本质上是在制定一个计划。
这种方法适用于多种场景,如软件开发或任何可以构建“大纲式”结构的任务。一旦生成了符合大纲或计划的内容,我们就可以继续处理它。
大纲之所以是使用ChatGPT等工具构建大型作品时的有用工具,原因在于:我们总是可以复制大纲的某些部分,并将其重新引入提示中,为大型语言模型提供生成后续内容所需的上下文。
例如,我们可以生成一个大纲,然后将其中一部分复制到提示中,并说明:“在此上下文中,这是你在大纲中的位置。现在请为此部分填充内容,不要重复大纲中之前已出现的内容。”你甚至可以引用大纲的其他部分,或提供对后续内容的“前瞻性引用”。
这种方法适用于结构上适合用大纲式计划来表达的问题。对于那些各部分交叉重叠、难以用大纲表达的计划或设计,此方法可能不适用。但对于许多问题,我们可以用这种大纲式的方法来构建。
构建大纲的提示模式
以下是构建和扩展大纲的具体提示模式。我们在此结合了多种模式:
提示示例:
请你扮演一个大纲扩展器。
根据我提供的输入,生成一个要点大纲。
然后,询问我应该扩展哪个要点。
为我选择的要点创建一个新的大纲。
最后,询问我接下来要扩展哪个要点。
在这个提示中,我们结合了“角色扮演模式”、“尾部生成模式”和“请求输入模式”。
模型会生成一个初始大纲。例如,当我们输入“为ChatGPT撰写有效提示写一个大纲”时,它会生成包含“引言”、“理解提示的重要性”、“撰写有效提示的技巧”等要点的结构。
然后,我们可以选择扩展某个要点(例如“3. 撰写有效提示的技巧”)。模型会为该要点生成一个更详细的新子大纲。
通过这种方式,我们可以快速填充和细化大纲。虽然目前可能需要手动记录各个部分(例如将“3”及其扩展内容粘贴到文档中),但大纲结构本身使得各部分如何组合变得一目了然。我知道“3.1”属于“3”之下,这种结构是自描述的,便于最终组装。
确保内容的连贯性
虽然大纲模式很有效,但在分块构建时,我们必须始终思考一个核心挑战:如何确保生成的各个模块既能独立自洽,又能无缝组装成整体。
即使各部分能完美嵌入大纲,我们也需要确保模型在生成某个部分时,拥有足够的上下文来保持整体连贯性。例如,如果对话过长,模型可能忘记了“要点一”的内容,而“要点3.2”又依赖于它。
这时,我们需要将“要点一”下的子大纲复制到当前提示中,然后再说“扩展3.2”。这能为模型提供所需的前置知识,确保新生成的内容与整体结构的前文保持一致。
同样,如果我们需要确保“3.2”与后文内容协调,也可能需要将后续部分的概要引入提示。
核心挑战公式:
生成独立模块 + 保持全局连贯性 = 有效的分块构建
因此,在使用大纲扩展模式时,我们必须主动管理上下文,确保每个独立生成的片段在组合时能形成统一、连贯的整体。
模式的优势与灵活性
大纲扩展模式的一个显著优势是灵活性。我们可以从某个详细层级开始,选择其中一点进行扩展,然后可能再选择扩展后内容中的某点进一步细化。我们也可以随时回到大纲的上层,选择另一个要点进行扩展。
我们可以在大纲的不同层级间上下移动,在需要的地方进行扩展,同时始终保持对整体蓝图的把握。这张“地图”能帮助我们构建独立模块,并确保它们能被正确组装。
无论是撰写大型文本项目,还是编写软件(其“主结构”类似于大纲),我们都可以采用这种模式:从某个详细级别开始,选择部分进行细化,再选择细化后的部分进一步深入,如此反复。
本节课中,我们一起学习了“大纲扩展模式”。我们了解到,为了突破语言模型的输入输出限制,可以通过构建和扩展大纲来分块生成内容。关键在于利用大纲结构为模型提供精准的上下文,并主动管理信息以确保各模块在组合时的连贯性。这是一种将复杂任务分解、分步解决并重新组装的有效策略。
039:菜单操作模式 🍽️
在本节课中,我们将学习一种名为“菜单操作模式”的提示工程技巧。这种模式允许我们在与大型语言模型的对话中,预先定义一系列可重复使用的指令(即“菜单项”),从而高效地执行特定任务,无需在每次需要时重新编写冗长的提示。
概述
当我们使用计算机软件时,程序通常有一个包含一系列可执行操作的菜单,这非常有用。例如,文字处理软件中的“文件”菜单允许你执行“新建文件”或“保存文件”的操作。另一个菜单可能允许你“查找和替换”文本。这种拥有菜单和不同可执行操作的概念是一个非常有用的概念。
有时,在进行提示工程时,尤其是在进行长对话时,在提示中开发等效的“菜单”会很有帮助。其基本思路是定义一组可以在对话中运行的操作,而无需重复这些冗长的提示。或者,我们希望将一些对用户有帮助的操作固化下来,并在对话一开始就将其“烘焙”到提示中。
菜单操作模式详解
菜单操作模式是一种允许我们在提示中获得相同类型行为的模式。我们将开发一个包含一系列可运行操作的菜单。这些操作本质上就是一组指令,我们会在对话的特定时刻给予大型语言模型,以执行某项任务。
以下是其工作原理。我们描述将要输入什么内容来触发某个操作。
例如,我可以说:“每当我输入 write <bullet point> <paragraphs> 时...”。让我稍后详细解释这一点,所以如果现在看起来不太明白,请不要担心。<bullet point> 和 <paragraphs> 是占位符。基本上,我是在说:我将输入 write,然后是一个代表要点的占位符,再然后是一个代表段落数量的占位符。
“...你将为选定的要点撰写内容。” 所以,基本上我是在说:我会给你一个要点,你需要去为它撰写内容。然后我会告诉你需要写多少段文字。接着你就会去撰写文本。
这样,我就创建了一个操作,其功能是“展开我的大纲内容”。在我之前讨论“大纲扩展模式”时,我提到了能够快速扩展大纲。现在我要说的是,在某个时刻,我将能够告诉你:“不,去把它变成文本,而不仅仅是扩展大纲。” 这样我就创建了一个新操作。
同时,我也会保留原来的操作,即仅仅扩展大纲。所以我说:“每当我输入 <bullet point> 时,你将扩展该要点。” 这意味着,如果我仅仅输入像 3.5.2 这样的要点编号,它会知道这意味着“在提纲中扩展这个要点”。如果我输入的是 write 这个关键词,后面跟着一个要点编号和段落数,它就知道这意味着“需要为这个要点撰写文本”。
这样,我就定义了一个菜单。我现在有两个操作:我可以扩展我的大纲,或者我可以为大纲的某个部分撰写文本。因此,我为我的大纲扩展器开发了更复杂的功能。我把它变成了一个真正的、可以交互的“程序”。
操作示例
现在让我展示一个运行第一个操作的例子。我输入:write 3.5.3 2。
这表示:为标号为 3.5.3 的要点撰写内容。也就是说,针对大纲中 3.5.3 这个部分,你需要撰写文本,并且要写两段。
我们看到,它从大纲中提取了要点 3.5.3,其内容是“尝试不同的语气和风格变化”。然后,它为该要点写了两段文字。这样,我就创建并定义了一个操作。我在我的提示中定义了一个操作菜单,现在我可以运行那个操作并生成文本。
然后,我们看到它再次提示我们:“接下来你想做什么?” 这实际上不是它写的文本的一部分。它写了两段文字,然后问我接下来想做什么。
接着,我回到之前的操作。我说:expand 3.5.2。这就是我之前做的操作,现在它知道这是不同的操作,于是它去扩展了 3.5.2 并给出了其扩展后的大纲。
然后我继续输入:text 3.5.2 1。这里发生了一件有趣的事:我实际上打了一个错字,但它很聪明地推断出我应该做什么。这是一个很有趣的现象:它试图帮助你,试图把事情做对。它根据模式知道,我可能的意思是 write 3.5.2,而我输入的是 text。所以这是一个相当智能的菜单操作系统。😊
然后,它实际上提取了那个要点 3.5.2.3(抱歉我说错了,是 3.5.2.3),并为其撰写了一段文字。
这样,我基本上创建了一个复杂的“程序”:如果我愿意,我可以扩展我的大纲;或者,我可以让它为大纲的某个部分撰写文本。而且我不必重复自己,我可以使用这种简单的小格式。我已经解释了这种格式是什么,现在我可以随时重新运行这些操作。
模式的优势与应用场景
这种模式对我有用的一个方面是:如果你反复使用提示执行相同的任务,使用菜单操作模式来定义一组操作会很有帮助。这就像为你经常使用的提示创建一个“菜单”。然后,每当你想利用这些内容和这组操作快速迭代时,你只需引入那个菜单操作提示,然后就可以在得到的输出上反复使用那些操作来操纵它或做某些事情。你基本上在对话中为自己构建了一个专属的“程序”。
同时,有时一个组织可能有许多人做同样的工作,他们可以彼此分享这些操作,以帮助自动化不同的任务。因此,这对于帮助人们更有效地工作以及彼此分享有用的提示可能非常有用。
另一个好处是,你不必太担心是否准确地记住了措辞。一旦你写好了一个操作,并让它在菜单中正常工作,你就可以反复重用它,而不用担心在操作时措辞不够准确。
这引出了菜单操作模式最后一个非常有用的方面:在一个组织内部,你可以分享一套每个人都应该使用的通用菜单操作。你可以将那些提示的最佳措辞、那些操作应该做什么,甚至可能将最佳实践固化到其中,然后在整个组织内分享。这允许知识的共享、不同提示的重用,以及这些提示的轻松应用。
你还可以想象将这些操作“烘焙”到类似客户服务门户的根提示中。在那里,你可能希望给人们一些可以运行的操作来查找他们的账户信息。他们可以用自然语言来做这件事,但你也可以描述“这里有一些你可以运行的操作”,并允许他们从中获得更好的服务体验。
总结
本节课中,我们一起学习了菜单操作模式。😊 菜单操作模式是一个非常强大的模式,它允许我们轻松地重用其他提示和操作,与他人分享它们,并开发它们的知识库,从而使我们成为更高效的提示工程师。
040:事实核查清单模式 📋
在本节课中,我们将学习如何应对大型语言模型可能生成不准确信息的问题。我们将重点介绍“事实核查清单模式”,这是一种通过提示词引导模型自我剖析输出内容,从而帮助我们系统化进行事实核查的有效方法。
我们反复在新闻中听到,这些大型语言模型会犯各种错误,可能会对你撒谎。它们首先从不承认错误,并且能够一直告诉你它们是正确的,同时产生奇怪的输出。
当然,这从根本上误解了这种工具的用途。它们本质上不一定是用来回答问题的工具。有时它们可以回答问题并且非常准确,但有时它们产生的内容看起来像答案,但实际上并不准确。
因此,只要我们理解它们真正是用来生成文本的,并且有时它们生成的文本可以正确回答我们的问题,有时则会出错,我们就能有效地使用这些工具。现在,我们可以做的一件事是使用提示词来帮助我们识别:工具在其输出中植入了哪些事实,以及其中哪些事实真正重要,然后我们可以跟进并核查它们。
当我们处理这些工具的输出时,有时会发生一种情况:因为输出看起来如此逼真、如此人性化、如此令人信服,我们便假设它是真实的。当它产生大量文本时,我们可能很难发现文本中蕴含的所有不同假设和事实,而这些正是我们需要跟进和核查的。对于从这些模型中获得的任何信息,你都需要承担责任,确保你已经彻底核查并真正相信它。
那么,我们该如何支持这项确保输出正确且符合事实的工作呢?我们可以使用“事实核查清单模式”来帮助我们弄清楚输出中实际包含了哪些需要跟进核查的事实。我将给你一个例子。我使用了我们的大纲扩展工具。如果你还记得,我们使用了包括“菜单操作模式”在内的几种不同模式,我们使用了“大纲扩展模式”。
我们有几个不同的功能。其中一件事是我们可以去扩展大纲。我们还增加了为大纲中任何要点生成文本的能力,并且我们可以为多个项目生成文本。我们有一个完整的菜单系统来实现这一点。现在,我们希望实现的一件事是:当我们为大纲的某部分生成文本时,我希望知道在那个时间点我需要跟进和核查什么,以确保我不会呈现不准确的信息。
如果我们看这个例子,实现这一点的方法就是使用“事实核查清单模式”。我们这样设置提示:“每当你输出文本时,生成一组包含在输出中的事实。这组事实应插入在输出的末尾(你可以放在任何位置,我这里只是放在末尾)。这组事实应该是基础性事实,如果其中任何一个是错误的,都可能损害输出的真实性。” 这样,我为大型语言模型建立了一套新的指令,要求它在每次生成文本时,都给出文本所依赖的对应事实集合,这样我就可以跟进并核查它们。
它表示理解了。现在,我将使用我们编写的大纲扩展程序,并告诉它为第3.5.2.2节写一段文字。这一节是关于“选择合适风格的考虑因素”。它为我生成了一整段文字。
然后,它在这里生成了一组基础事实。这些是包含在段落内的事实。例如,事实包括:“写作风格可以从技术性到创造性再到指导性”,以及“指导性内容可能采用清晰、逐步的风格”等。
我选择让它撰写的这个段落包含许多不同的事实。它们可能是正确的,也可能不是。但我不必过于担心需要自己去提取和审视文本,因为我现在有了一个需要跟进的事项清单。至少,我需要查看这个列表并跟进这些项目,或者只是根据我自己的知识进行目视检查。
这算是最低标准。现在我有了一个最低门槛:至少这些事情我需要去跟进。这就像是在向我标记:这里有一些你需要去核查的东西。
我还可以做的另一件事是,将这个列表与上面的段落进行比较。任何使用这些工具的人都可以比较:下面是事实列表,上面是实际文本。事实列表完整吗?上面的文本中是否有陈述没有出现在下面的列表中?如果有,那些可能也是我想跟进核查的事情。
因此,通过检查和比较这两个列表,我们可以看出它是否真正、完整地提取了所有重要的事实。这个过程本身就会提示我们,并让我们思考:这到底在说什么?其中的基础事实是什么?仅仅是进行将事实与生成的文本进行比较这个动作,就能帮助我们进入思考其输出正确性的模式。
接下来我可以做的是,我有一个最低门槛:至少我需要去核查生成的事实列表,并跟进确保它们是正确的。如果其中任何一个是错误的,那么上面的文本很可能就有错误。然后,如果我通过比较发现上面的文本中有某些内容也没有出现在事实列表中,我可以将其添加到我的列表中并进行核查。所以,这是一个可以帮助我们的工具。
它帮助我们进入对输出进行事实核查的模式。输出可能是正确的,但在我们真正完全跟进之前,我们仍然无法确定。这为我们提供了一些工具来帮助我们:第一,知道至少有哪些事情需要跟进;第二,为我们提供了一个工具,可以将其与生成的内容进行比较,看看我需要跟进的最低事项清单是否足够,或者文本中是否还有其他我应该思考或跟进的事情。
它并不能保证我们会得出正确的答案。即使我们跟进了这些事实,我们可能仍然认为它是准确的,而实际上并非如此,因为可能还存在一些隐藏的假设。但这远比我们只是阅读一堆没有任何支持或刺激来思考事实核查过程的文本要好得多。
因此,“事实核查清单模式”有助于我们进入检查输出、检查其真实性的模式,并为我们提供一种格式,使我们更容易提取和比较信息,以及利用其他外部资源来核对事实集合的真实性。
本节课总结
在本节课中,我们一起学习了“事实核查清单模式”。我们认识到大型语言模型的输出可能包含不准确信息,因此主动核查至关重要。该模式通过特定的提示词指令,要求模型在生成文本的同时,列出其输出所依赖的核心事实清单。这为我们提供了系统化核查的起点:我们可以将此清单作为最低核查标准,并将其与原始输出文本进行比较,以发现可能遗漏的需要核查的陈述。虽然这不能保证100%的准确性,但它极大地优化了我们的工作流程,将我们从被动阅读者转变为主动的、有方法的事实核查者,从而更负责任、更有效地使用生成式AI工具。
041:尾部生成模式 🎯
在本节课中,我们将要学习一种称为“尾部生成模式”的提示工程技术。这种技术能有效解决在与大型语言模型进行长对话时,模型可能忘记对话规则或任务目标的问题。
概述
当我们与大型语言模型进行长时间对话时,有时会遇到一个挑战:模型可能会忘记我们设定的“游戏规则”或正在尝试完成的任务。因此,我们需要一种方法来提醒模型我们正在做什么。尾部生成模式的核心思想是,让模型在其输出的末尾自动生成一段“尾巴”,这段文字会重新引入并强调对话的规则与目标,从而帮助模型维持更长的、符合预期的对话上下文。
上一节我们介绍了替代方案模式与请求输入模式,本节中我们将看看如何将尾部生成模式与它们结合使用。
尾部生成模式的工作原理
尾部生成模式通过在模型每次输出的结尾,附加一段固定的或生成的提示性文字来实现。这段“尾巴”的核心作用是重新引入对话的规则和上下文。
以下是其工作流程的关键点:
- 位置固定:尾部始终出现在模型输出的最后。
- 内容明确:尾部内容应清晰地提醒模型当前的任务、规则或下一步该做什么。
- 结合使用:它可以与其他模式(如请求输入模式)无缝结合。例如,尾部可以是一个请求用户提供下一个任务的问句。
一个结合实例
为了更直观地理解,让我们看一个将尾部生成模式与替代方案模式、请求输入模式结合使用的例子。
假设我们的任务是:让模型(如ChatGPT)持续为我们生成完成特定任务的提示词(Prompt),并且每次都要提供多个替代方案。
初始提示可能如下(这运用了替代方案模式):
请帮我为以下任务生成一组提示词。对于每个任务,请提供多个不同的提示词方案。
任务:编写一个提示词,让ChatGPT能自动从一系列邮件中检测出问题,并以要点形式总结每个人对该问题的看法。
如果仅使用上述提示进行多轮对话,模型很可能会在几轮后忘记它需要“生成多个替代方案”这条核心规则。
这时,我们可以运用尾部生成模式来强化规则。我们在给模型的指令末尾添加一句话,要求它在输出结束时生成特定的“尾巴”:
“当你完成输出后,请在最后询问我下一个需要为其创建替代提示词的任务。”
请注意,这个“尾巴”同时运用了请求输入模式(要求模型主动询问下一个输入)和规则重申(暗示了输入的目的和模型应做的处理)。
效果演示
当我们输入结合了尾部生成指令的完整提示后,模型会:
- 为首个任务生成一组替代提示词。
- 在输出的最后,自动生成我们指定的“尾巴”,例如:“请告诉我下一个您希望我为其编写提示词并创建替代方案的任务。”
然后,我们提供下一个任务,例如:“编写一个提示词,用于评估不同的问题总结提示词。”
模型会:
- 为这个新任务生成替代提示词。
- 再次在输出末尾生成相同的“尾巴”:“请告诉我下一个您希望我为其编写提示词并创建替代方案的任务。”
通过这种方式,每次交互结束时,规则都会被自动重新引入对话。这极大地降低了模型在长对话中忘记初始指令的概率,确保了对话目标的一致性。
应用场景与灵活性
尾部生成模式在需要长时间编程式交互的场景中尤为有用。当我们预先设定一系列规则,并计划进行多轮交互时,此模式能有效维持上下文。
“尾巴”的内容非常灵活,不限于请求输入。它可以是:
- 对核心规则的简短重述。
- 对当前对话阶段的总结。
- 请求额外信息。
- 任何你认为需要在每次交互后重新强调的内容。
本质上,它是一个附加在输出末尾的“小提示”或“小标记”,用于在进入下一个任务前,提醒大型语言模型:“记住我们一直在讨论什么,这是给你的一个小提示。”
总结
本节课中我们一起学习了尾部生成模式。我们了解到,通过在大型语言模型的输出末尾固定生成一段提示性文字,可以有效地在长对话中重新引入并巩固任务规则与上下文。这种模式特别适合与请求输入、替代方案等其他提示模式结合使用,能显著提升复杂、多轮对话的稳定性和目标一致性。记住,一个精心设计的“尾巴”,是让AI助手在长程任务中保持专注的简单而强大的工具。
042:语义过滤模式 🧹
在本节课中,我们将要学习大语言模型(LLM)在处理和理解文本模式方面的核心优势,并重点介绍一种名为“语义过滤”的强大应用模式。我们将通过具体示例,了解如何利用LLM根据语义规则来过滤或移除文本中的特定信息。
大语言模型非常擅长处理文本和理解语言模式。很多时候,文本处理工作非常困难,因为过去我们需要人工仔细审阅和分析才能做好。现在,我们可以使用大语言模型来完成这些任务。处理和操控文本是大语言模型的真正优势之一。
接下来要介绍的模式叫做“语义过滤”。这本质上是一种过滤器,它可以接收文本,并根据我们指定的含义或特定性质,移除其中的信息,或仅保留符合条件的信息。这种模式在各种不同场景下都非常有用。
本节中,我们将通过从文本中过滤并移除某些我们想要清除的内容来展示这一模式。这些内容可能是某种机密信息、非公开内容、冗余信息,或是任何你需要移除的东西。这是一种操控文本的实用模式。
以下是语义过滤模式的一个简单示例。
过滤以下信息,移除所有日期,并尽可能少地重写文本,以修复因移除日期而导致的语句不通顺问题。
我粘贴了一段来自维基百科的关于范德堡大学的信息,其中包含许多日期。我创建了一个复杂的过滤器,它将接收信息,移除所有日期,并轻微重写文本,以防移除日期后导致句子生硬或明显缺失信息。
通过使用“过滤此信息”这样的指令,我们清晰地表明了希望保留但移除某些内容的意图。我们不是在创造新内容,而是在对现有信息进行过滤或移除。
因此,语义过滤模式的基本方法是:我们指示模型过滤某些内容,并给出基于语义的规则,即我们希望移除的信息的含义或目的。
然后,模型会遍历并重写所有文本。可以看到,它做得相当不错,移除了所有明确的日期。不过,我注意到可能需要重新思考如何表达“日期”的指令,因为它将“成立于19世纪”也视为日期。这取决于我对“日期”的定义。模型可能采取了字面解释,即具体的年月日。例如,原文是“成立于1873年”,它移除了日期“1873”,并通过重写将其替换为“成立于19世纪”。这实际上是在移除信息,但由于我要求重写,它进行了一些转换。这展示了模型理解文本、理解何为日期、移除日期,并在本例中通过转换进行重写的能力。
上一节我们看了一个基础示例,本节中我们来看看一个更有趣的例子,它能更好地体现语义理解和含义分析的应用。
过滤以下信息,移除任何可能帮助他人推断出该患者患有糖尿病的信息。
首先,解释你将移除哪些信息,以及这些信息如何可能帮助他人推断患者患有糖尿病,然后提供过滤后的信息。
下面是一份虚构的医疗记录,描述了患者简·杜的情况,包含一系列症状、现病史、既往病史、用药史、过敏史等多种信息。我将让ChatGPT对这份信息进行语义过滤。
现在,让我们看看它将移除哪些内容。它指出:
- 主诉:“口渴加剧和疲劳”应被移除,因为口渴加剧(烦渴)是糖尿病的常见症状。
- 现病史:提及“口渴加剧”和“未检查血糖水平”的部分应被移除,因为它们与糖尿病症状和管理相关。
- 既往病史:包含“2型糖尿病”的部分应被移除,因为它直接表明患者患有糖尿病。
- 用药:“二甲双胍1000毫克,每日两次”应被移除,因为二甲双胍是常用于管理糖尿病的药物。
这个过程基于语义规则:我希望过滤掉任何可能泄露该患者患有糖尿病的信息。模型必须在一定程度上理解文本的含义,或者至少基于其训练数据,识别出这些是与糖尿病相关的常见讨论内容。
然后,它遍历并重写了医疗记录。注意,它将主诉重写为“患者因过去两周疲劳至诊所就诊”,现病史、既往病史和用药部分也相应地被重写。这样,我们就得到了经过过滤的版本。
我们可以利用大语言模型,通过语义过滤模式来开发强大的语义过滤器。
那么,它是完美的吗?不是。正如我们所看到的,它可能存在一些问题。正如我们之前讨论过的,模型的输出并非总是完全可重复的。但它可以作为一个起点,辅助人工进行二次核查,或帮助防止信息意外泄露。它只是系统中的一个额外检查环节。
这是一种成本相对较低的检查方式,用于尝试移除额外信息。它应该是唯一的检查吗?不。如果我们要出于隐私或其他原因过滤信息,特别是那些我们不希望泄露的信息,我们应该始终设置其他检查措施,因为这不会是一个完美的过滤器,它会有一定的随机性,并不总是完全符合我们的预期。
但是,作为另一个流程的一部分,作为一个辅助组件,这是一种非常强大的技术,我们可以将其与其他检查、其他类型的移除方法并行或结合使用。
总结
本节课中,我们一起学习了语义过滤模式。我们了解到,大语言模型可以通过理解文本的语义,根据我们设定的规则(如移除日期、过滤敏感医疗信息)来有效地过滤和转换文本内容。虽然这种模式并非完美无缺,需要结合其他检查手段,但它作为一种高效、低成本的辅助工具,在信息处理、隐私保护等领域具有重要的应用价值。
043:课程结束致谢 😊
在本节课中,我们将对提示工程课程进行总结,并展望未来的学习与实践方向。
感谢各位参与本次提示工程课程。我希望课程中展示的各种示例能激发你的灵感,促使你真正尝试使用大型语言模型构建有趣的应用。
在关于大型语言模型的讨论中,我始终希望强调一点:这些语言模型的真正力量源于人类的创造力。如果你拥有创造性的想法和使用工具的创造性方法,你就能获得真正令人兴奋的输出。我们看到的许多讨论都聚焦于糟糕的输出结果,而我将其视为工具使用上的失败。你应该真正尝试创造性地使用它,提出绝佳的想法,找到那些用其他方法难以解决的问题。因此,我希望你能像我一样受到鼓舞,重新思考这个工具。
我将它视为一个工具,它能帮助我快速将想法具象化,以我以前无法做到的、更快的速度和独特方式完成任务。在我职业生涯早期作为一名艺术家时,我总是对在不同媒介中创作感到兴奋,无论是绘画、陶瓷还是金属。每种媒介都有其独特的特性。在我看来,ChatGPT是另一个令人兴奋的创意媒介,用于产生新想法并尝试赋予它们形态,就像我在绘画或雕塑中做的那样。因此,我希望你能满怀热情地探索这个新媒介。
作为最后一点,我认为回顾ChatGPT的建议总是很重要。我请ChatGPT扮演提示工程课程的教师,感谢学生参与课程,并告诉他们接下来的步骤。它提出了一些很好的观点。
以下是ChatGPT总结的几个关键建议:
实践、实践、再实践
这一点再怎么强调都不为过。许多出色的成果都将通过你不断的实践和实验来实现。尝试向ChatGPT或其他大型语言模型提问:“我能让它做到这个吗?如果我能让它做到这个岂不是太棒了?”很多时候,答案是肯定的,但这需要一些创造性的提示工程技巧。
紧跟最新研究与进展
提示工程领域发展非常迅速。如果你访问我们列出的相关论文存档网站,你可以找到所有最新的更新。我希望你能关注正在发生的变化,持续了解人们做出的激动人心的新发现。这是一个如此崭新的领域,每个人现在都可以站在前沿浪潮之上。
与他人协作
这是我在使用大型语言模型工作中非常享受的一点:有太多人和我一样对此感到兴奋。当我们聚在一起时,会迸发出疯狂的想法:“如果我们这样做会怎样?”“如果让它们彼此对话会是什么样子?”“大型语言模型之间会如何交流?它们会用词会有什么不同?”各种迷人的想法正是通过协作,以及观察他人如何运用提示工程而产生的。
时刻牢记伦理道德
围绕这些模型的伦理讨论很多。我认为这非常重要,尤其是作为这项技术的早期采用者,我们应该以合乎伦理的、恰当的方式使用它,展示其所能带来的积极面,而非消极面。如果我们持续增加对这些模型的负面讨论,我们实际上是在劝阻他人,并使他们错过所有进行有趣和创造性工作的绝佳机会。
我认为这是ChatGPT给出的一份很好的总结。再次衷心感谢你参与本课程。我希望你能积极参与讨论区,继续围绕本课程与社区分享你的提示词和有趣想法。我迫不及待想看到本课程的每位学员在提示工程领域取得的成就,以及你们创造的所有惊人作品。
本节课中,我们一起回顾了课程的核心精神,即创造力是驱动大型语言模型发挥潜力的关键,并学习了ChatGPT提供的关于持续实践、关注前沿、积极协作与恪守伦理的后续行动建议。希望你能带着这些启发,在生成式AI的世界里继续探索与创造。
044:生成式AI的突破性新能力 🚀
在本节课中,我们将学习生成式AI的核心概念、其运作方式以及它如何通过对话迭代来创造和精炼内容。我们将探讨如何将生成式AI视为一个强大的协作工具,而非一个简单的问答机器。
欢迎来到生成式AI入门课程。我是朱尔斯·怀特。我是范德堡大学的计算机科学教授,也是范德堡大学未来学习与生成式AI倡议的主任。该倡议旨在确保范德堡大学在生成式AI的应用方面成为世界领导者和创新者。我将与大家探讨范德堡大学内部如何应用生成式AI,以及您应如何看待生成式AI、需要了解哪些知识、在培训员工时应考虑什么,还有它的能力及其重要性。
现在,这项技术在2022年10月之前,如果有人问我类似ChatGPT这样的东西是否会在我的有生之年出现,我会断然回答:不可能,永远不会发生,别信。我大错特错了。我想向大家展示的是其中蕴含的能力深度,以及为何这让我如此兴奋。
作为一名计算机科学家,我常常感觉自己像在通过望远镜仰望星空,承诺五年后我们将抵达那颗行星。然而有一天,当我正看着望远镜时,我回头一看,一艘UFO已经降落在了我身后。ChatGPT就是这样,它就像一项不可思议的新外星技术。当我们开始使用它时,它仿佛在地球上瞬间传送树木,并解决各种我从未想过计算机能解决的惊人问题。
因此,我兴奋地想要向大家展示并帮助大家探索所有这些能力,以一种不同于您在新闻中可能看到的方式来理解它。
现在,我想花点时间提一下,我在Coursera上教授一门关于ChatGPT提示工程的课程。截至本次录制时,已有超过15万人学习了这门课程。您将看到的很多内容都来自他们的想法和创新,这些反馈给了我启发。我将谈谈我所看到的他们在工作中的实践和创新。所以,我要特别感谢所有学习过那门课程的人以及我收到的所有反馈。


现在,每当我们开始谈论生成式AI时,都需要建立一个关于它究竟是什么的心智模型。我们到处都能听到AI这个词,生成式AI是AI的一种类型,而目前我们看到的很多兴奋点确实都围绕着生成式AI。因此,我鼓励您在谈论AI时,转而谈论生成式AI,因为生成式AI是我见过的最令人兴奋的事物之一,正是它引发了大量的热潮。
当我们开始谈论生成式AI时,很多人对其是什么、如何工作、能用来做什么并没有一个清晰的心智模型。
所以我想为您建立这个心智模型。想象一下短信,我们都知道它是如何工作的:您输入一条消息并发送出去,然后另一个人(很可能是您的朋友)会输入回复并发送回来。
生成式AI的工作原理与短信非常相似,至少我们使用的许多界面是如此。您输入一条消息并发送出去。但生成式AI不是您的朋友回复您,而是AI回复您。或者您发送一条消息,生成式AI不是您的朋友,而是创建一张照片、一段视频或一段录音发送给您。这就像发短信一样,只不过我们不再是与另一个人交谈,而是在与生成式AI交谈。
现在,每当我们开始谈论生成式AI时,了解一些基本术语很重要。您需要知道的一个非常重要的术语是提示。提示是您输入到生成式AI短信或聊天应用程序中的消息,是您发送给AI并等待其回复的消息。当它给您发送回复时,那个回复就是输出。
现在,我们在屏幕上看到了一些可能的提示示例,例如“写一首关于法国大革命的诗”。如果您有合适的朋友,他们也能写一首关于法国大革命的诗。
这些提示并不是特别好的提示,我们稍后会详细讨论,但它们都是您可以输入并发送的内容。
现在,每当我最近(自它出现以来)查看关于生成式AI的新闻时,我都感到有些沮丧,因为新闻完全没抓住重点。我想鼓励您重新思考生成式AI的可能性以及它将如何影响我们。
当我看新闻时,我看到的是:我问了ChatGPT一个可能不好或措辞不当的问题,然后得到了一个糟糕的答案,因此ChatGPT毫无用处。这是完全错误的看待生成式AI和这些工具的方式。
您应该考虑通过对话进行迭代、精炼和创造内容。您不应该只问一个问题,得到一个答案,如果答案不完美就扔掉。相反,您应该考虑得到回复后,就如何改进提供反馈,并持续精炼它。就像您有一个助手,他第一天上班交给您一些工作,但工作并不完美,您不会因此解雇他,说他太糟糕了、是个白痴然后让他走人。不会,您会与他合作,培训他,并更详细地解释您的任务要求,因为您也可能沟通有误。
那么,让我们来看看通过对话精炼内容意味着什么。
我将给ChatGPT一个任务,我认为在纳什维尔,甚至在美国,都很难找到一个人能做得这么好或这么快。
我一开始会说:让我们创建一个膳食计划,我们都需要吃饭,对吧?
“请为我的家人创建一个膳食计划,该计划基于埃塞俄比亚和乌兹别克斯坦的融合美食。我想吃生酮饮食,每天最多摄入2000卡路里。选择的菜肴食材应易于从普通的美国杂货店获取。”
这是一个非常困难的任务。我不知道能找到谁来为我做这件事,而且它有很多复杂性,比如“普通美国杂货店食材”是什么意思?谁有这方面的知识?要找到能完成这个任务的人真的很难。
那么ChatGPT怎么说?它说:“这是一个结合了埃塞俄比亚和乌兹别克斯坦风味、同时符合生酮友好且每日限制在2000卡路里以内的示例膳食计划。”这几乎是瞬间完成的。
然后它说:“早餐:炒鸡蛋配炒洋葱、西红柿和埃塞俄比亚柏柏尔香料混合物。”接着请注意它做了什么。在括号里,它写道:“用辣椒粉、红甜椒粉、大蒜粉、姜、孜然和香菜制成。”它在向我们示意,这些是您可以从普通美国杂货店买到的食材。这不是您做不了的东西,而是用普通美国杂货店食材就能制作的东西,而且这些食材都是。
现在这是一个草稿。它为我们创建了草稿输入、草稿输出,我们可以在此基础上进行加工和精炼。
如果这是在新闻里,我接下来会看到的是:“哼,这永远取代不了营养师,这是个糟糕的工具。你说每天2000卡路里,它甚至没给你份量大小,完全没用。”这是完全错误的看待这些工具的方式。
我对此的比喻是:想象有人递给米开朗基罗一把新锤子。米开朗基罗走到石头前,敲了一下石头,然后看着石头说:“呃,它看起来不像《圣母怜子》或其他美丽的雕塑。”然后他扔掉锤子,感到沮丧,说:“这是个糟糕的工具,我再也不用了。”这就是我们每天看新闻时发生的事情,那些文章荒谬至极。
不,米开朗基罗会怎么做?他拿起锤子,敲击石头,再敲一下,再敲一下,他持续使用工具在石头上精炼和迭代,直到得到美丽的输出。他也明白,他使用工具的技能同样重要,甚至更重要。他必须知道如何使用工具,必须精炼使用工具的技能,必须自我教育。他不会仅仅因为工具第一次没做对就说工具很蠢,我再也不用了。不,他不会那样做,他会迭代、精炼并与工具合作。他也明白自己是这个过程中的平等参与者。
那么,假设我们真的很关心份量大小,我们该怎么做?我们只需跟进。我们在同一个对话中问:“你能根据我每天2000卡路里的限制,为每道菜给我一个大概的份量大小吗?”
ChatGPT怎么说?它说:“当然可以。以下是基于每日2000卡路里限制的每道菜的大致份量。”现在它说:“早餐:两个鸡蛋,半杯洋葱,半杯西红柿,一茶匙香料混合物。”
现在我知道,如果这是在新闻里,接下来会是:“哼,你说生酮饮食,但那上面说半杯洋葱,那上面的宏量营养素全错了,碳水化合物太多了。”如果我们真的关心碳水化合物或宏量营养素或其他什么,我们可以继续通过后续问题来精炼和塑造内容,尝试探索并使其变得更好。
但我要换个方向,帮助您理解这个工具的能力和可能性深度。
因为宏量营养素并不是我对这个膳食计划的真正问题。就像我总会因为意志力不够而有宏量营养素的变化。
我对这个膳食计划的真正挑战是,我有一个九岁的儿子,他是个喜欢冒险的食客,但真正的挑战是让他首先愿意尝试这道菜。所以我思考了一下,我能用ChatGPT来帮我解决这个问题吗?
于是我说:“我儿子九岁,有时他不愿意尝试新菜。为了让这次烹饪冒险对他来说更有趣,你能为每道菜创作一个简短的宝可梦对战故事吗?我会在晚餐前和他一起读这些故事,让他对尝试新食物感到兴奋。确保每个故事都以一个悬念结尾,激励他去尝试食物。”
这是一个非常复杂的任务。祝您好运能找到一个人,既能生成那个膳食计划,又能为九岁孩子创作引人入胜的、带有悬念的宝可梦对战故事。ChatGPT怎么说?
“当然可以。故事:皮卡丘和他的朋友们正在探索埃塞俄比亚的荒野,突然遭到一群狡猾的宝可梦盗贼的伏击。当他们穿过茂密的丛林时,偶然发现了一个藏满宝藏的隐秘洞穴。”然后它继续说:“最后,他们取得了胜利。但在那之前,龙留下了一股炽热的香料,为他们的早餐鸡蛋注入了风味十足的刺激。您能帮助皮卡丘和他的朋友们对抗柏柏尔龙,并享用这顿辛辣的早餐吗?”
这太不可思议了。在去年11月之前,我们没有任何普遍可用的计算能力,可以让一个人直接输入指令,就能创作出激励九岁孩子吃我们刚刚想出来的一堆菜肴的宝可梦对战故事。我们拥有的任何东西都无法接近这个水平。如果我作为一名软件工程师试图编程实现它,我也做不到。
在一段文字中,我们从这个膳食计划开始,精炼了它,添加了份量大小,现在又有了与之配套的对战故事。我们还能用ChatGPT和生成式AI做什么?
我想了想和儿子在餐桌旁做什么。我们喜欢和他谈论他在学校学的东西,他喜欢数学,喜欢在iPad上玩数学游戏。我想,如果我能让ChatGPT和他玩一个数学游戏,那该多酷啊。这样当我们坐在桌旁时,他可以读宝可梦对战故事,然后玩这个很酷的数学游戏,这会让他有一次非常兴奋的体验。
于是我说:“我想请你和我九岁的儿子玩一个数学游戏,教他分数除法和营养知识。一次问他一个涉及宝可梦和这些主题的问题,把它变成一个游戏。当他赢了,宝可梦就赢了。问第一个问题。”
这开始使用一种叫做提示工程的技术,使这一切无缝衔接。
现在,关键点在于,我只是在进行对话,而这只是对话中的一个后续消息,它正在精炼内容并将其引向不同的方向。
ChatGPT怎么说?“太好了,让我们玩一个有趣的涉及宝可梦和营养的数学游戏。问题一:皮卡丘和他的朋友们计划一顿饭,其中包括半杯熟米饭,但他们需要平均分给三只宝可梦。每只宝可梦能得到多少米饭?”
然后它做了什么?ChatGPT做了什么?它等待。
它等待他回答,因为它知道自己在玩游戏,然后需要等待他提供输入。我们通常认为是我们向生成式AI提问或告诉它做什么,但它也可以向我们提问,向我们索取信息,并等待我们将信息反馈给它,然后再做出回应。它还理解游戏、轮流、游戏规则以及此时它需要做什么的概念,这是非常深刻的推理。
然后,当他输入正确答案(即1/6杯)时,会发生什么?
它说:“干得好!答对了。”它为他计算了数学。然后它说:“问题二:小智想制作一杯冰沙……”它继续到下一个问题,它会一直持续问他关于这个主题的问题,创造一个他可以互动的一整个游戏。请注意,我们为了创造这一切所做的,基本上就是在对话中给了它几段文字,我们持续精炼这个想法,跟进它,并发展它。
但作为一名计算机科学家,我想,他在ChatGPT里玩游戏固然很好,但如果我想把它拿出来,创建一些他可以在iPad上玩的真正可运行的软件,我能做到吗?
于是我告诉它:“让我们用Python为此创建代码。”然后我给它一些我作为程序员的领域知识,说明我想要什么。ChatGPT就去生成了代码,这是其中的一段摘录。然后这就是在浏览器中运行的软件,他可以在iPad上玩,也可以在笔记本电脑上玩。


请注意我做了什么。我基本上获取了内容,并通过对话迭代地精炼了它。我所做的只是非常、非常快地输入了几段文字。我正在发展和创建内容的不同草稿,作为人类,我可以进去使用或精炼和编辑,但我驱动着整个过程。这是我的创造力,是我的思想在驱动这个过程,但它加速了我的生产力和我的能力。


如果您回想一下我们去年的计算能力,地球上真的没有什么能触及我们刚刚看到的东西。当然,地球上没有普遍可用的东西能做到这些。
生成式AI绝对将改变我们在工作场所所能做的事情,并将改变人类所能做的事情。我将在整个入门课程中讨论这一点。


在本节课中,我们一起学习了生成式AI的基本心智模型,理解了提示与输出的关系。我们通过创建融合菜系膳食计划、添加份量、创作激励故事以及开发互动数学游戏等一系列实例,深入探讨了如何通过持续对话来迭代和精炼内容,从而将生成式AI作为一个强大的协作工具来释放创造力与生产力。关键在于,我们不应期望单次提问就获得完美答案,而应像使用任何高级工具一样,通过练习、反馈和迭代来掌握它,并利用它来扩展和增强人类自身的能力。
045:生成式AI如何重塑计算领域 🚀
在本节课中,我们将探讨生成式AI如何从根本上改变我们与计算机交互的方式。我们将看到,它正在取代传统的图形用户界面和编程,成为我们访问计算能力的新主导接口,并将极大地扩展每个人的能力。
从具体应用看趋势
上一节我们看到了ChatGPT生成宝可梦故事、膳食计划和软件代码等具体应用。这令人兴奋,但我们需要退一步,审视一个正在发生的、将影响每个组织和职场的大趋势。
当人们问我哪些领域将受到最大冲击时,我的回答是:任何涉及计算机的领域。这是因为我们与计算交互的基本方式即将改变,并且正在改变。

传统计算接口的局限
多年来,我们一直与图形用户界面(GUI)打交道。在GUI中,你只能做程序员预先创建好的按钮所允许的事情,你的能力受限于预先编程的功能。
或者,如果你像我一样是一名软件工程师,你可以编写源代码,编程实现任何你想要的功能。但这需要付出极高的时间和精力成本,之后还需要维护,工作量巨大。

在这两者之间,一直缺乏一种既能提供编程的灵活性,又具备GUI易用性的中间方案。而生成式AI即将改变这一切。
生成式AI:新的主导接口
生成式AI将取代GUI和编程,成为我们与计算交互的主导接口,并将彻底改变人们的能力范围。
让我们通过一些例子来理解这一点。
示例一:解读复杂政策文档
以下是我们在范德堡大学经常处理,可能你的组织也经常处理的事情:报销。

这是范德堡大学的差旅和业务费用政策,大约有20页。我必须承认我从未完整读过它。我敢打赌,你的组织里很多人,甚至可能你自己,也从未读过你们的差旅和业务费用政策。这可不是你想坐下来读的东西。
我们如何利用生成式AI来改变这一点?实际上,我确实“读”过范德堡大学的差旅和业务费用政策,但不是直接读的,而是通过ChatGPT和一个名为“ChatGPT Advanced Data Analysis”的工具来解读的。

具体操作如下:
- 我将政策文件(PDF格式)上传到ChatGPT Advanced Data Analysis。
- 我给出指令:“请阅读提供的文档,以便你能回答相关问题。”
- 我没有进行任何编程,甚至没有将PDF转换成文本,也没有进行互联网搜索,只是上传了政策PDF。
接着,我问了一个现实中可能遇到的问题:“假设我在国外旅行,乘坐的出租车在前往一个重要会议的路上抛锚了。如果我付钱让一位私人公民用摩托车载我去会议,这笔费用可以报销吗?”
以下是ChatGPT的回答:
“根据文档中的信息...大学要求旅行者选择最合理、最经济的交通方式。(这是文档中的直接陈述。)非常规交通方式在本政策中没有明确提及...范德堡大学没有单独的拼车政策...鉴于以上几点,在紧急情况下,如果没有其他合理且经济的交通方式可用,由私人公民摩托车产生的交通费用可能被视为允许的支出。然而,大学政策并未明确说明这一点,报销可能需经审核。”
这是一个非常谨慎、经过深思熟虑的回答。它从政策中提取了适当的文本部分,然后组合成一个非常合理的回应。在去年11月之前,没有任何计算工具能如此有效地做到这一点。如果你想创建这样一个工具,将需要付出巨大的努力。
示例二:将政策转化为可执行知识
让我们更进一步,看看这将如何变革计算。
如果我想知道一张收据是否符合政策怎么办?我上传了一份PDF格式的租车收据,并说:“请分析附件中的收据,并告知我它是否符合规定。”

这是一个完全不同的任务。这不仅仅是总结与问题相关的信息,而是要求:理解政策,将其转化为可执行的知识或信息,并将其应用于一张收据。
ChatGPT Advanced Data Analysis回复:
“对于国内旅行,碰撞损害免赔额(CDW)应被拒绝,因为租赁车辆已通过范德堡大学的保险组合全额投保。收据显示收取了CDW费用,如果是国内旅行,这可能不符合规定。”
这具有变革性。在生成式AI出现之前,我该如何解决这个问题?我会去编程。我会编写一个庞大的规则引擎。这不会只是我一个人的工作,而是一个团队在努力编程,试图创建一个能应用所有不同规则的应用程序。你的组织中可能也有类似的东西,试图自动化部分流程,但这做起来既困难又费力。
而我是如何创建这个“应用程序”的?我没有编程。我只是给了它文档和正确的提示,然后又给了它第二个文档和第二个提示。现在,我就有了一个能基于差旅政策分析收据的“应用程序”。这是一种根本性的变革能力。


示例三:让数据分析触手可及
让我再举一个例子,说明生成式AI在如何访问计算以及计算如何对每个人变得可及方面,具有变革性能力。
我们一直有程序员,他们可以通过编程做任何想做的事,只需要投入时间和精力。但其他所有人都无法获得计算中同样的灵活性和能力。
这是范德堡大学关于各学院课程注册情况的报告,是一个PDF文件。
在这些生成式AI工具出现之前,如果我需要研究或处理这个PDF,我可能不得不从PDF中剪切粘贴到Excel等工具中,然后尝试计算或绘制图表来分析。这将需要大量的手动劳动和精力。
作为程序员,也许我可以通过编写定制软件来自动化这个过程,或者找到一个特殊的工具,能将PDF中复杂的表格转换成文本或Excel表格,但这可能代价高昂,并且功能有限。

生成式AI能做什么?

- 提取数据:我将教学注册报告上传到ChatGPT Advanced Data Analysis,并说:“请将此PDF的每一页提取为单独的文本文件。”它照做了,我可以点击每个链接下载。以前要做到这一点,我需要使用专门的工具来提取所有页面并进行转换,或者手动点击一堆按钮。
- 转换为结构化数据:我可以说:“将其中特定一页转换为Excel文件。”然后我得到一个链接,可以下载该页面上所有已转换为Excel格式的数据。如果我手动操作,将花费大量时间;如果编程实现,则需要高度定制化。
- 自动生成可视化:为什么还要在Excel中操作呢?当我使用这个新的计算接口时,它给了我各种全新的能力。在同一个对话中,我直接跟进说:“展示四个有趣的数据可视化。”请注意,我没有告诉它要可视化什么、用什么坐标轴、什么颜色、从数据中提取哪些列。我只是告诉它:“给我四个有趣的东西”,因为我想探索这些数据。作为一个人类,我希望花更多时间思考数据、分析并试图传达我的信息,而不是花时间从PDF复制粘贴到Excel文件。我想真正加速我的思考过程。于是,ChatGPT Advanced Data Analysis为我生成了四个可视化图表。


现在我可以查看这些可视化图表,决定我想做什么,思考它们对我意味着什么。这非常强大。我不需要编程,不需要剪切粘贴到Excel,也不需要知道如何在Excel或其他工具中操作来创建这些图表。我只需告诉它我想要什么,它就能生成。

- 自动生成演示文稿:我进一步思考,如果我生成这些可视化图表,很可能是因为我要做演示。如果它能把这些图表变成PowerPoint幻灯片不是更好吗?于是,我回到ChatGPT Advanced Data Analysis,上传了一个PowerPoint幻灯片模板,然后告诉它:“将每个可视化保存为图像,然后将这些图像作为单独的幻灯片插入到附件的PowerPoint中。”我还给出了一些额外的提示,让图像在幻灯片上位置正确,并在图像旁边添加一个描述其内容的文本框。
它生成了我的PowerPoint文件,我可以点击下载链接获取。这是我的PowerPoint文件,请注意,这正是我本次演示使用的同一个模板。它已经将每个可视化图表作为单独的幻灯片插入到我的PowerPoint演示文稿中,并在可视化图表旁边放置了描述其内容的文本框。
现在,我可以把时间花在思考我的演示、我的信息、分析重点是什么上,而不是在这些繁琐的任务上花费更少的时间。这是一种真正具有变革性的能力,将对工作场所产生巨大影响,并且将远远超越PowerPoint文件和Excel。
变革的核心:AI能为自己创建工具
为什么说这具有变革性?因为你刚才看到的远比你以为的更具变革性,我想谈谈原因。
当我使用这个工具时,它做了一些全新的事情。想象一下,你在后院,拿着铲子准备挖洞。就在你要挖之前,你的铲子低头看到你要挖的地方有块石头。于是,铲子从你手中跳出来,把自己变成了一把镐,敲碎了石头,然后又跳回你手中,你继续挖。这正是这个工具刚才所做的:它为自己创建了另一个工具,来解决它需要为你解决的问题,然后它又“跳回”你手中,为你创建了那个PowerPoint演示文稿。
这是一个生成式AI工具可以为自己创建其他工具以帮助完成任务的能力。
当我说“去创建PowerPoint演示文稿,并将这些图像作为单独的幻灯片插入”时,我们看到这里弹出一个小灰框,上面写着“已完成工作”。

这就是生成式AI在为自己构建工具。它正在动态地为自己构建一个工具来帮助你解决问题,然后使用自己的工具解决问题的一部分,再回来继续这个过程。这就像预见到你铲子路上的石头,它为自己造了一把镐,敲碎了石头,然后回到你手中帮助你。

它构建的工具是软件。当我们展开那个“已完成工作”的小框时,我们看到的是一个Python程序,它是动态编写的,允许它生成PowerPoint演示文稿和那些数据可视化的图像。它正在动态地为你创建软件,以帮助你解决问题。

总结:新接口,新可能
我们习惯于将GUI视为与计算交互的方式,但这即将改变。我们将能够超越编程,超越GUI,转向一种更有意义、让计算更易访问、并极大加速我们创新和做事速度的方式。

因为我们可以创建一个工具,当我们告诉它“这是我想解决的问题”时,它可以开始构建解决该问题所需的所有软件片段,而无需我们知道如何编程。它可以组装所有这些片段,为我们解决问题。这将彻底改变我们利用计算所做的事情。
因此,正在发生的真正创新是:生成式AI正在取代GUI,并正在取代编程,成为我们与计算交互的主导接口。我们仍将拥有大量程序员,计算机科学家需求依然旺盛,GUI也仍将存在。但我们将拥有一个新的接口——生成式AI——它将迅速接管许多任务,并极大地扩展我们的能力,扩展我们在计算方面能做的事情,以及普通用户在没有计算机科学专业知识的情况下能做的事情。
本节课中,我们一起学习了生成式AI如何通过成为新的计算接口来重塑整个领域。我们看到了它如何解读文档、应用规则、分析数据、创建可视化甚至生成完整演示文稿,而这一切都无需传统编程。其核心在于,AI能够动态创建工具(软件)来解决特定问题,这标志着我们与计算机交互方式的一次根本性转变,将使计算能力对每个人都更加民主化和强大。
046:提示工程与提示模式培训 🧠
在本节课中,我们将学习如何有效使用生成式AI这一新型计算界面。我们将探讨为何需要改变对AI的固有认知,理解大型语言模型的基本工作原理,并重点介绍一种强大的提示模式——角色扮演模式。通过学习这些核心概念,您将掌握与AI高效协作的基础。
为了有效运用这一新型计算界面,我们需要学习什么?我们的团队需要学习什么?我们如何恰当且高效地使用生成式AI?它不只是一堆文本吗?遗憾的是,我们对文本框的心智模型是互联网搜索,而这是思考生成式AI的错误模型。为什么这是错误的模型?因为在互联网搜索中,你输入想要的内容,它会返回一系列事实。但生成式AI并非为此而生,这不是这项技术的正确用例。人们仍然固守于将其视为生成事实的工具,并指出其事实中的所有缺陷。不,它并非以这种方式改变我们的世界和工作场所。
另一个问题是,当我们看到这个文本框时,我们认为可以输入任何内容。如果返回的答案不理想,那不是我们的错,而是生成式AI的错。我们似乎认为,无论我们表达得多么糟糕,它都应该产生完美的结果。这也是错误的。这两种模型都不正确。我们必须学习如何有效地使用它。

因此,让我们来看看为了成为生成式AI的有效用户,我们需要了解什么。

首先,我想让大家对大型语言模型的训练方式有一个直观的理解。像ChatGPT这样的模型,当你听到“大型语言模型”时,它指的是你可以通过输入提示来获取输出的模型,ChatGPT就是一个大型语言模型。虽然其中有许多细微差别,但以下是一些能帮助你理解整个领域的基础直觉。
这些模型的训练方式是教会它们预测句子中的下一个单词。例如,训练时会给模型展示“Mary had a little”,然后试图让它预测“lamb”,因为目标是让它预测童谣“Mary had a little lamb, its fleece as white as snow”。同样,给出“Mary had a little lamb”,让它预测“its”;给出“Mary had a little lamb its”,让它预测“fleece”。这个过程在互联网上的海量文本上重复了无数次。
随着时间的推移,这些模型学会了人类语言的模式,以及如何预测下一个应该出现的单词。回顾我们讨论的内容,基本上,左侧是提示(prompt),右侧是输出(output)。模型学习的是提示中的语言模式如何影响接下来的内容。
提示工程的一部分,就是理解如何措辞才能获得你想要的输出,以及如何通过不同的措辞方式来解决不同问题。这包括如何有效构建你的请求,如何克服遇到的问题。但它的范畴更广,还包括如何验证这些输出,如何确保它们长期保持正确和准确,如何进行版本控制,如何构建整体架构等。所有这些都属于提示工程的范畴。
它远比单纯的措辞更广泛,尽管措辞也是其中的一部分。提示工程就像软件工程,涵盖了许多不同方面,从架构到最佳实践,再到不同提示的具体措辞。因此,这是一个广阔的领域,并将随着时间推移在商业中不断演变,变得非常重要。


在范德堡大学,我们研究的是提示模式。这基本上是记录语言中可用于解决不同问题的模式,然后将这些模式作为构建模块提供给人们,以便他们学习、在此基础上构建,并在各自的部门或学科中进行创新。
当我说“提示模式”时,这听起来可能像是一个新奇的概念。但仔细想想,我们其实一直在使用语言中的模式。例如,如果你要写一封正式信件,你会以“尊敬的[某某],”(Dear [Name],)开头。这个“尊敬的”表明这是一封正式信件,逗号则标示收信人信息结束,正文开始。这就是我们语言中使用的一种模式。类似这样易于学习的模式,可以帮助人们非常有效地使用这些工具。


接下来,我将以一个我们记录的模式为例开始讲解,这个模式你在互联网上随处可见,它是一个非常强大且值得首先了解的模式。希望你在课后能去尝试使用ChatGPT、Claude或其他生成式AI工具,因为这个模式真的非常有价值。😊
这个模式叫做角色扮演模式。其核心思想是:在现实世界中,如果你遇到问题需要解决,你知道该去找谁获取答案或解决方案,或者知道该去哪个组织、哪个部门寻求解决方案。你不需要知道他们会具体说什么或如何得出答案,你只需要知道“我有这个问题,去这里找解决方案”。
角色扮演模式就是在大型语言模型中复制这种现实世界的体验。具体做法是:我们告诉大型语言模型“扮演某个角色”,例如“扮演一名营养师”、“扮演首席信息安全官”、“扮演计算机科学教授”、“扮演美国国税局(IRS)”。然后,无论它产生什么输出,都应该是该角色会产生的输出。本质上,我们是在告诉它:“去扮演那个角色,做他们会做的事。”
这听起来可能有些不可思议,它真的能行吗?它到底能做什么?


让我举个例子。我的妻子是一名言语语言病理学家,她在学校系统工作,负责测试通常三到四岁、即将进入幼儿园的孩子,以确定他们是否需要特殊教育支持。这是一个我可以核实其专业性的角色。同时,我本人对此领域一无所知。
于是,我输入提示:“扮演一名言语语言病理学家。我将告诉你一个三岁孩子说的话,请你为我写一份评估报告。孩子说:‘I need Wei wi。’”(我试图回想我儿子三岁时的发音,并用文字捕捉下来。我妻子立刻告诉我,这个年龄的孩子通常不是这么发音的,但请暂且接受这个例子。)


那么,ChatGPT是如何回应的呢?它说:“根据提供的言语样本进行评估,该儿童可能正在经历一些在这个年龄段常见的音韵和构音错误。”
辅音错误:孩子似乎在发出某些辅音时存在困难,特别是/n/和/l/音。孩子说“me”而不是“need”,说“why”而不是“toy”(假设目标词是“need”和“toy”)。这表明孩子可能在发出和区分这些辅音时存在困难。
音节结构:孩子发出的“way”可能表明在正确的音节结构上存在一些困难。很可能孩子想说“play”,但说成了“way”,这暗示了将初始辅音丛“pl”替换为单个辅音“w”。这可能是一个称为“辅音丛缩减”的简化过程的例子。
这太神奇了。请注意,我并没有要求它分析音韵错误、构音错误、音节结构或辅音丛缩减,因为我甚至不知道如何要求这些东西。它正在做的是,允许我们以一种完全不同的方式访问计算。
通常,如果我要编程实现这个功能,我必须明确告诉它需要做的每一件事以及具体怎么做。但在这个案例中,我只是告诉它扮演谁、哪个组织、哪个部门,甚至哪个无生命的物体,然后它就会进行推理,并提供看起来像是来自那个实体的输出。
我向我的妻子和其他一些言语治疗师核实了这个结果,得到的反馈是:“听着,我们不会仅凭一个言语样本来诊断孩子,但它所说的内容,相对于你给出的那个言语样本,是准确的。”
仅仅通过说“扮演某个角色”,它就能达到这种水平的推理能力,这太不可思议了。这些提示模式,是你可以在组织中教授给人们的构建模块,帮助他们进行创新。他们可以学习这些模式,进行调整和运用,从而完成非常强大的任务,例如从不同角度思考特定问题。
例如,“扮演首席信息安全官,告诉我为什么我不应该做我即将要做的事”,它可能会给你一些深刻的反馈,告诉你为什么也许不应该点击那封钓鱼邮件中的链接。这是一种真正变革性的新型计算方式,我们必须开始系统地教授人们,而不仅仅是让他们看一千个别人想出来的不同提示。相反,我们应该像教他们“正式信件的开头应该这样写”一样,给他们提供构建模块。我们可以教授他们像角色扮演模式这样的提示模式,然后他们就可以在自己的学科和部门中应用并引领创新,通过使模式适应他们所处的具体环境和领域。


在本节课中,我们一起学习了如何转变对生成式AI的认知,理解了大型语言模型通过预测下一个单词进行训练的基本原理,并深入探讨了提示工程的广阔范畴。我们重点介绍了提示模式的概念,并以角色扮演模式为例,展示了如何通过简单的指令(如 扮演 [某个角色])来引导AI进行专业领域的推理和输出,从而极大地扩展了我们与计算系统交互的能力和效率。掌握这些基础模式和思想,是成为高效生成式AI使用者的关键第一步。
047:人人都能用提示词编程 🚀

在本节课中,我们将探讨生成式AI如何从根本上改变我们与计算机交互的方式。我们将看到,通过简单的自然语言提示,任何人都可以“编程”,创造出有用的工具和自动化流程,而无需编写一行传统代码。
从自然语言到结构化数据 📊
上一节我们强调了生成式AI将改变人机交互的界面。本节中,我们来看看它如何改变我们所能完成的任务类型。
传统编程需要我们使用Python等语言编写源代码。但在生成式AI的帮助下,我们甚至可以从零代码开始“编程”。这意味着,每个人都可以通过提示词进行编程。
以下是一个基本程序的创建过程:
-
定义程序规则:我输入提示:“
每当生成输出时,请将其转换为逗号分隔值列表。”- 逗号分隔值列表是一种描述表格数据的格式,类似于Excel中的数据,由逗号分隔的列组成,例如:
姓名, 角色。
- 逗号分隔值列表是一种描述表格数据的格式,类似于Excel中的数据,由逗号分隔的列组成,例如:
-
运行程序:在对话的后续提示中,我输入程序要处理的数据:“
我的名字是Jules White,我正在教授一门关于提示工程的课程。” -
查看输出:生成式AI(此处为ChatGPT)回应:“
姓名, 课程 Jules White, 提示工程”- 这正是一个CSV列表。我刚刚编写了一个程序,它能将我输入的下一条提示转换为可以复制粘贴到文件并导入Excel的CSV格式。
请注意,我并没有编写复杂的编程指令,也没有详细说明如何操作。我甚至没有在程序规则中指定列名(“姓名”和“课程”),只是在对话中提到了它们。AI自动推断出需要生成一个有效的解决方案,并进行了正确的语义映射。这种能力在以往是极其复杂和难以实现的。
动态修改与增强程序 🔧
现在,假设我不只想要“姓名”和“课程”两列。
我可以简单地修改我的程序。在对话中,我添加一条新指令:“从现在开始,逗号分隔值列表的列应为:姓名,课程,角色。”
然后,我再次输入完全相同的数据:“我的名字是Jules White,我正在教授一门关于提示工程的课程。”
这次,AI的输出变为:“姓名, 课程, 角色 Jules White, 提示工程, 教师”

我通过自然语言修改了程序,并用同一个输入运行了新程序,得到了不同的输出。我们完全可以通过提示词本身来编程并实现复杂逻辑。
让我们进一步修改程序。我添加指令:“除了我输入的内容外,请生成符合我所要求的CSV格式的额外示例。”
这是一个非常困难的任务。在这些工具出现之前,生成符合指定格式的额外合成数据是极其困难的。现在,我们不仅是在编程,更是在利用一些前所未有的复杂计算能力,并且仅通过文本就能实时完成。
再次运行程序后,输出不仅包含我的原始信息,还生成了一系列符合格式的合成数据。这在能力上是完全变革性的。
构建一个实用的个人应用:邮件加速器 📧
为了让概念更具体,我们来看一个更贴近生活的例子:如何处理周末积压的长邮件线程。
我将使用提示工程编写一个程序来解决这个问题。

以下是我输入的提示,它定义了我的“邮件加速器”应用:
充当我的个人助理。当我给你一个长邮件线程时,你将为我创建一个带编号的问题和待办事项列表。
如果我输入一个编号,你将用一段话总结邮件链中围绕该编号的对话。
如果我输入一个编号和一个段落数,你将为我起草一封包含那么多段落的回复供我审阅。
我创建了一个完整的小应用程序,甚至包含一个菜单系统。我所做的“编程”只是清晰地用一段文字解释了我想要什么。
接下来,我复制粘贴了一个关于安排生成式AI课程的非常长的邮件线程(涉及多位教员和行政人员)。
AI分析后输出:“`以下是基于邮件线程的问题和待办事项列表:
- 建议的课程标题和描述是什么?...
... - 教室和日程最终确定了吗?(周二、周四 9:30,ESB 048房间)`”
它从复杂的对话中提取出了真实的关键信息。要手动找出所有这些信息需要花费很长时间。

现在,我使用我内置的菜单系统。我输入“7”,要求它总结关于第7条(教室和日程)的对话。
AI回复:“在邮件线程中,团队讨论了课程的教室和日程...Shiro建议了周二、周四上午9:30的时间段,当时唯一可用的房间是工程与科学楼048室(容量60人)。Jules批准了这个选择。Cho提到这个大小对于课程的首次运行很合适。对话没有提供关于教室和日程的进一步细节,因此看来团队已达成一致。”
这非常强大。它不仅说明了谁说了什么,还通过推理指出“因为没有人提出反对或进一步讨论,看来团队已达成一致”。这是一个极其复杂和高级的任务。而我是如何实现的?仅仅是通过一段解释程序的文本——我用提示词完成了编程。

总结与展望 🌟
本节课中,我们一起学习了如何通过提示词进行“无代码编程”。
生成式AI将带来两大计算革命:
- 独特的新计算能力:例如,从非结构化文本(如“我叫Jules,我教提示工程课”)中正确提取并语义映射到CSV列;或者理解邮件上下文并推断出“团队已达成一致”。这些是以往难以实现的高级能力。
- 全新的人机交互界面:我们可以用自然语言以全新的方式控制计算。我们既可以生成程序源代码并运行,也可以直接在提示词中编写完整的应用程序,完成诸如总结邮件等对自己有用和有价值的任务。

目前,我们仅用非常简单的工具就实现了所有这些功能。在未来的几个月和几年里,相关工具将会爆炸式发展,带来更广阔的可能性。
048:增强智能的ACHIEVE框架 🧠

在本节课中,我们将学习一个名为ACHIEVE的框架。这个框架旨在指导我们如何正确使用生成式AI,以实现增强智能,即放大和增强人类的创造力与解决问题的能力,而不是用人工智能替代人类。
概述:从替代到增强
我对生成式AI的发展方向有一个充满热情的愿景。这个愿景的核心不是试图替代和排挤人类的人工智能,而是关于增强智能。在增强智能中,我们放大和增强人类的创造力与解决问题的能力,本质上赋予人们新的能力。它就像是思维的外骨骼,可以放大你内在的人类火花,让你能够创造和完成比以前更有趣的事情,而不是夺走你的本质。它让我们有更多时间进行批判性思考,创造以前无法创造的新奇事物,并有更多时间与他人互动,保持人性。我认为这才是其真正的潜力,而不是去取代人类。从这个角度出发来对待生成式AI至关重要。
因此,我将提供一个框架来思考如何恰当地使用生成式AI。我使用的这个框架叫做 ACHIEVE。
理解ACHIEVE框架
ACHIEVE框架是我创建的,旨在帮助思考如何以正确的方式使用AI,以实现增强智能的愿景,而不是试图用人工替代品来取代我们。我们已经看到,各种人造事物并不能真正替代真实的事物。
ACHIEVE框架涉及几个关键方面,它关乎我们如何利用这些新能力:
- A - 协助人类协调
- C - 削减繁琐任务
- H - 提供安全网
- IE - 激发更好的问题解决与创造力
- V - 助力伟大想法快速扩展
接下来,我将通过一个具体案例来逐一解释这些方面的含义。


案例背景:策划一场大学教师研讨会
我将通过一个例子来说明。假设我们要设计并主办一场大学教师研讨会,需要召集一批参与者。我们需要解决和处理一系列不同的问题:如何与参与者沟通、如何规划研讨会、处理意外问题(如儿童看护)、以及后续如何跟进并与他们保持互动。
我们将看到许多现实世界中的问题,并运用ACHIEVE框架内的生成式AI来解决它们并产生影响。
A:协助人类协调 🫱🏻🫲🏼

我们通常不认为这些工具能帮助人类,但它们确实可以在协助我们彼此协调方面发挥巨大作用。
假设我已经记录了第一次规划会议的录音,并整理了会议纪要。这可以是一个虚拟会议的原始转录稿,也可以是我手动输入的笔记。
现在,我可以对AI发出指令:
扮演我的个人助理,阅读以下会议记录,并为我提供讨论要点的摘要。
AI会阅读并生成摘要,这本身就有很大价值。
但为了更好实现人类协调,我可以做更重要的事情。我可以告诉它:
列出计划中任何团队应该解决的模糊之处。
作为人类,我们经常制定计划,但计划往往存在模糊性。由于不同的人对同一件事有不同的理解,这会导致协调不畅和问题。能够识别模糊点是一件非常重要的事。你可以想象在会议结束时,输入会议记录并询问:“嘿,这里面有什么模糊的地方?我们来讨论一下。”或者提前审阅一份规范或计划,获取关于可能存在的模糊点的反馈。

如果AI说错了怎么办?这没有坏处,事实上是好事。作为一个团队,我们会讨论:“它说这里模糊,我们认为是这样吗?为什么?” 这样我们就能对所做的事情有更深入的了解,并确保没有遗漏什么。这相当于为我们的协调工作增加了一双眼睛。
例如,AI可能会指出:“7月研讨会的确切注册人数未在记录中提供。此信息对规划和后勤至关重要。” 或者“没有为John提交审阅草稿设定明确的截止日期,这可能导致延误或沟通不畅。” 它通过阅读笔记和计划,找出计划中不明确的具体事项。

我们还能用它做什么?我们可以思考谁应该跟进这些模糊点。例如,我们可以说:
谁应该跟进列出的每个模糊点?
如果我们有记录了谁说了什么的转录稿,它可以告诉我们。例如,对于“7月研讨会注册人数”这个模糊点,AI可能会建议:“Sam Gray(被直接问及此事的人)应向Daniel Brown提供此信息。” 对于“草稿审阅截止日期”,它可能建议:“最初要求更新的Riema Myster应为John Burke设定一个明确的截止日期。”
这样,它就开始帮助我们作为一个团队更好地协调,思考模糊之处并解决问题。
C:削减繁琐任务 ✂️
我们每天花费大量时间在处理那些可能并非最佳利用我们批判性推理和创造力技能的事情上。坦率地说,很多时候,正是这些任务让工作难以应对,甚至让人想要离职。
那么,我们如何用它来削减繁琐任务呢?在规划这个研讨会时,我们创建了一份调查问卷,允许参与者自由填写他们目前如何使用ChatGPT以及任何他们想分享的内容。

作为将要主持研讨会的人,我可以手动尝试将这些信息剪切粘贴到不同的受众分组中,试图弄清楚谁以不同的方式使用它,并进行所有分析。但这需要大量工作。

所以,我上传了调查回复,并说:
这是注册我们提示工程与ChatGPT研讨会的人员名单。描述此文件中的数据。
然后我继续跟进:
注册表中有一个问题是‘您目前如何使用ChatGPT/Bard/Claude等?’。你能将其转化为使用类型列表,并将回复分组到这些类型下吗?
我要求它查看那些自由文本回复,进行分类,并将人们的回复分组到不同类别下。
它返回的类别可能包括:“尚未使用”、“完全不使用”,并自动将所有不同的回复分组到不同类别下。我本可以手动复制粘贴、想出这些类别并手动完成,但我希望把时间花在思考我的受众以及如何最好地与他们沟通上。
然后,我可以思考其他分组方式,并快速让它重新分组一切,以便我从不同角度查看。这是该工具的真正优势之一:我可以快速查看不同的分组方式。在此之前,这需要花费大量时间、繁琐的剪切粘贴和重新组织,以至于我不会探索多种不同的受众细分和理解方式。但现在,我只需说:“再给我三种可能的分组方式。” 它可能会说:“好的,这是按具体任务分组:未使用、写作与沟通、编码与开发、研究与教学。” 然后我可以跟进查看这些分组和个别回复,并让它整理所有内容。

关键在于,它让我作为人类有更多时间去思考如何与这些其他人互动。它消除了繁琐的任务,让我有更多时间处理真正重要的事情。
H:提供安全网 🛡️
我们可以做的一件非常强大的事情是提供安全网。作为人类,我们总是担心犯错,我们希望尽量减少犯错的可能性或能够及时发现错误。
我想到的一件事是,我要去展示这些材料,我之前曾向不同的受众展示过。也许我之前是向一群计算机科学教授展示的,因此他们会熟悉不同的术语。我不希望开始演讲后,才意识到我使用了所有这些没有定义的术语,犯下在前10张幻灯片就失去听众的错误。
因此,我将我的120张幻灯片上传到ChatGPT的“高级数据分析”功能中,然后说:
阅读我的前10张幻灯片,并告诉我我使用了哪些技术术语,这些术语我可能没有定义,而制造业商业高管受众可能不熟悉。
对于那个特定受众,它返回了一些可能的术语。它在我的演示方面为我提供了一个安全网。现在,也许我不会失去我的听众,因为它让我从另一个视角审视内容,指出其中可能我没有定义、可能需要更多解释的术语,因为我的受众发生了变化。

或者,让我们看看在协调和安全网方面我们能做的另一件事。这在构建软件时是一个大问题,但在其他领域也存在。问题是:我们正在处理一个问题,两个团队独立处理问题的不同部分,但当团队汇合时,他们意识到做出了相互冲突的决策。在软件中,这意味着我们无法整合两部分,或者软件的两部分无法协同工作,从而浪费了时间、精力和金钱。在这个研讨会的案例中,也许我们有两个团队,一个负责后勤,一个负责整体规划,他们做出了冲突的决策,这可能是个问题。让我们尝试解决这个问题。
我说我将上传第二个团队的会议记录:
负责研讨会后勤的第二个团队刚刚开完会。这是他们的会议记录,请指出该团队与另一团队在决策上的任何潜在冲突。
它返回并指出:“场地大小与布局:后勤团队建议使用大学主礼堂进行会议,这与最初计划在较小场地(可能是B会议室)进行的计划相冲突。” 以及“IT要求:后勤团队列出的必要设备包括高分辨率投影仪、多个无线麦克风、良好的音响系统和几台笔记本电脑。这与初始团队的IT要求相矛盾,后者可能是基于较小的房间设置。”
现在,它不仅在帮助我们捕捉像演示文稿这样的个体错误,还帮助我们捕捉可能产生重大影响的协调性潜在错误。这帮助我们作为人类做得更好。我喜欢在我的错误成为问题之前就被发现,比如在我开始演讲之前,或者在我们意识到预订了错误的房间之前。

IE:激发更好的问题解决与创造力 💡

这是从我的角度来看最重要的部分,它关乎激发人类更好的问题解决能力和创造力。
我们经常听说AI存在偏见。但我们人类本身也存在极大的偏见,并且实际上是我们产生了导致AI训练数据存在偏见的数据。有趣的是,如果使用得当,它可以帮助我们克服自身的一些偏见。例如,我们在解决问题时存在偏见:我们知道一种解决问题的方法,就会自动尝试用这种方法解决每个问题。我们在数据确认上存在确认偏差,我们会查看数据,并试图看到我们想看到的东西。
因此,生成式AI的用途之一是帮助我们跳出思维定式,更具创造力,并激发新的方式和解决方案。
我们的研讨会遇到了一个有趣的问题:我们需要提供儿童看护服务。通过查看自由文本表单的受众细分,我们意识到(参与者的)孩子都是四年级学生,而且他们都对宝可梦感兴趣。那么,我们能否围绕家长学习的内容,创建一些针对这个年轻受众的有趣内容呢?
所以我们说:
请提供三个不同的90分钟课程计划,用于向四年级学生教授大语言模型概念,使用宝可梦示例和动手练习。
它返回了不同的课程计划,例如:“什么是大语言模型及其工作原理?想象一个游戏:你描述一个宝可梦,我必须猜出你在想哪一个。你的描述越好,我就越容易猜中。强调大语言模型是类似的:它试图根据已经看到的单词来猜测下一个单词。”

它所做的是给我们提供可以激发灵感的想法。我们不会直接采用它们。我们会将它们视为草稿输出,然后我们作为人类进行回应。我们编辑、改进它。事实上,这是你作为使用者需要知道的最重要的事情之一:你必须与之互动。你必须将其视为草稿,并加以改进、迭代和加工。你必须将你的思考和创造力注入这个过程。否则,你可能会被自动化淘汰。如果你所做的只是复制粘贴测验问题并获取答案来作弊,从长远来看,你将不具备就业能力。但如果你能以创造性和有趣的方式与工具互动,如果你将输出视为草稿并打算编辑、完善和改进它,这就是你需要具备的使用哲学。我们需要鼓励人们拥有这种哲学:不要只看表面价值,要真正审视它,理解是否存在缺陷,努力改进它,然后变得真正具有创造力和洞察力,用它来解决更大更好的问题。
让我再举一个例子。我有这120张幻灯片,我上传了它们,并要求它进行总结。
但在总结完成后,我要做一件非常有价值的事情。我会说:
扮演一个对我演示中所有内容都持怀疑态度的人。找出我的假设、断言和其他要点的缺陷,然后为我生成10个难题。
它会做什么?它返回:“这是你在幻灯片中做出的假设:你假设ChatGPT和类似工具将带来难以置信的生产力提升。问题:这些工具是否也可能引入新的挑战和低效率,例如需要额外监督或存在误用风险?” 这是一个很好的问题,我应该解决它。通过使用这个工具,它激励我更批判性地思考,跳出我对这个特定内容的视角,开始改进和思考。
它不是在取代我,而是在促使我思考。然后我做出回应,思考如何解决那个问题。这是一种根本性的新能力。


V:助力伟大想法快速扩展 🚀
我们已经看到了许多我们可以做的疯狂新能力和事情的例子,但我想谈谈这一个。
我设想在研讨会结束时,我想给每个人发送个性化的电子邮件,让他们对ChatGPT或生成式AI感到兴奋。我需要一些方式来吸引那个受众。
我想到一个主意:如果我的每一封电子邮件中都包含一个定制提示,这个提示针对收件人所在的部门和他们所做的工作,展示一些你可以用ChatGPT做的事情,那该多棒。
但对我来说,要扩展这个想法会非常困难。为每个部门想出提示,并拥有使它们具有相关性的领域知识,这并不容易。作为一个个体,我该如何做到这一点?使用这样的工具,我可以扩展这个想法。
所以我说:
我要为每位与会者创建定制的研讨会后跟进邮件。我希望你创建一个有趣的ChatGPT提示列表,以及将大语言模型与每个学科或部门结合的方式。
基本上,我告诉它生成一些提示,人们可以从这些邮件中复制粘贴到ChatGPT中,看到它做一些有趣且与他们相关的事情,从而帮助他们感到兴奋并参与进来。但请注意发生了什么:我们要求ChatGPT提出其他人如何与它自己对话的想法。它是在提议你可以与它对话的方式。这是一种变革性的、疯狂的新能力。
它返回并提出了许多不同的想法。我将放大其中两个。
这是一个营销人员可以复制粘贴的营销提示:
设计一个全面的营销活动,用于推出环保产品,结合数字和传统渠道。
现在他们可以从邮件中复制粘贴出来,看到它做一些与他们的领域相关的事情。或者校友关系提示:
概述一个为期一年的校友重新联系参与策略,包括活动、沟通和合作机会。
他们可以从邮件中复制粘贴出来。如果我必须从头开始思考所有这些想法并写下来,我无法扩展这个想法。重要的是我脑海中关于如何做这件事的模板和想法,然后我利用那个模板进行扩展。这完全关乎扩展事物的能力。


总结与展望
这一切都关乎增强智能,而不是取代人类,不是关于人工替代品。它是关于思维的外骨骼,并通过ACHIEVE框架使用它来增强和放大我们的创造力和解决问题的能力,这样我们就可以穿上那个外骨骼,做出惊人的事情。
那么,接下来是什么?是工具。到目前为止,我们所做的一切基本上都是在聊天界面中剪切粘贴。但未来将在于这些工具,它们将生成式AI集成到我们日常工作中使用的工具里。它们将改变我们能创造什么、我们能以多快的速度创造、我们能解决多大的问题、我们能有多大的创造力。它将为表达提供一个全新的媒介,我们访问计算的方式将发生根本性改变。

计算的未来是生成式AI作为我们与它交互的界面,能够彻底改变我们能做什么以及我们如何控制这些东西。因此,当你思考如何与它互动时,你必须从这种增强智能的角度来思考。思考ACHIEVE框架,以及你如何在自己的学科和领域中应用这个框架,去做那些有益于人们的事情,赋予他们思维的外骨骼,而不是以某种人工方式取代他们。
049:总结发言与未来展望

在本节课中,我们将总结生成式AI的核心学习路径,并展望如何利用这些工具实现智能增强的未来。
概述
要掌握所有新的生成式AI能力,关键在于学习提示工程。以下将提供一些资源,帮助你成为提示工程的大师。
学习资源推荐

以下是几个可以帮助你深入学习并掌握相关技能的具体课程与资料。
第一,我在Coursera上开设了一门关于提示工程的课程。截至目前,已有超过15万人学习了这门课程。那里还形成了一个优秀的社区,来自金融、银行、法律、营销、艺术等各个领域的人们提出了许多非凡的想法和创新。

第二,如果你对我使用文档和自动化完成的许多有趣工作感兴趣,我有一门关于ChatGPT高级数据分析的课程。虽然这个工具听起来可能不适用于大多数人,但实际上它对每个人都适用。这个工具本质上是自动化工具,教你如何处理文档并开始自动化各类分析,例如创建PPT幻灯片或演示文稿、生成可视化图表,或者像我之前那样对差旅政策提出问题。所有这些都通过ChatGPT高级数据分析完成,它不仅仅是一个高级数据分析工具,更是面向每个人的自动化解决方案。
第三,如果你是一名教师,或是提供教育体验的人,并希望看到更多关于如何创新教学和学习材料创建的具体示例,我有一门关于利用ChatGPT进行创新教学的课程。这门课程涵盖了诸如课程规划、示例创建、评估设计等所有类型的实用内容。
第四,如果你想阅读我所讨论的提示模式以及其他许多无论身处哪个领域都真正有帮助的模式,我鼓励你阅读我们关于提示模式目录的论文《Enhancing Prompt Engineering with ChatGPT》。目前,如果你在Google Scholar上搜索“Prompt Engineering”,这篇论文通常是排名第一的结果。随着时间的推移,情况可能会变化。如果你想查找,论文在arXiv上可以免费获取,以下是引用信息。

未来展望与核心理念
非常感谢你参与这次生成式AI入门课程。我希望你能和我一样对这个领域感到兴奋。它将从根本上改变我们与计算的交互方式,但真正让我兴奋的是智能增强这一愿景。我想为思维穿上“外骨骼”,利用ACHIEVE框架去做疯狂的新创意,并扩展我的想法。我希望以一种能够放大和增强我作为人类能力的方式来实现这一切。
我想探索那些帮助我们放大每个人独特智慧火花的事物,让每个人都能有更多时间与我们关心的人以及周围的其他人类互动。我不希望被人工智能取代,也不希望取代他人。我们应该思考如何增强我们自身,并利用那些独特的人类能力,即独特的创造力。
让我们真正将这一愿景建立在智能增强的基础上,而不是用人工替代品来取代我们的智能。
总结
本节课我们一起回顾了成为生成式AI大师的核心路径——学习提示工程,并介绍了相关的课程与论文资源。最后,我们共同展望了以人类智能增强为核心、利用技术放大而非取代人类独特创造力的未来愿景。
050:智能AI代理能做些什么 🚀
在本节课中,我们将探讨什么是智能AI代理,以及它为何如此令人兴奋。我们将通过一个具体的旅行费用报销案例,演示AI代理如何自动化处理日常繁琐任务。您将学习到构建此类代理的核心原理与实用方法。
概述
智能AI代理是一种能够理解指令、执行任务并与外部工具交互的AI系统。它之所以令人兴奋,是因为它能够将复杂、耗时的流程自动化,从而极大地提升个人工作效率与生活便利性。本课程将带您从零开始,理解其工作原理,并亲手构建一个能处理实际问题的AI代理。
智能AI代理的潜力
上一节我们概述了AI代理的概念,本节中我们来看看一个具体的应用场景。想象一下,您需要处理一堆杂乱的旅行费用收据,传统方法需要手动录入、核对和提交报销。这个过程既枯燥又容易出错。
智能AI代理可以自动化完成这些步骤。您只需提供收据,代理便能识别信息、查漏补缺、检查重复记录,并最终整理成报销邮件。这一切都通过自然语言指令完成,无需复杂的编程知识。
案例演示:旅行费用报销助手


以下是一个完整的演示,展示了AI代理如何处理一张旅行费用收据。
-
提交收据:用户向AI代理提供一张旅行费用收据的图片或文本。
# 用户输入示例 用户指令 = “请处理这张旅行费用收据。” -
信息提取与校验:AI代理首先通过Zapier(一个自动化工具平台)调用可用的操作。接着,它会咨询一个专门的“旅行费用专家”代理,以验证收据信息的完整性。
- 专家代理反馈:例如,它可能指出“供应商信息不明,日期缺失”。
-
信息补充:用户根据提示补充缺失信息(如“Uber,7月23日,8点,前往机场的交通费”)。代理会更新信息并继续流程。

-
查重与确认:代理访问用户已有的旅行费用电子表格,检查当前收据是否已被记录。如果发现疑似重复,会向用户确认是否继续添加。
-
记录更新:获得确认后,代理通过Zapier将新的费用条目添加到电子表格中。公式可以表示为:
更新后表格 = 原表格 + 新费用条目

-
邮件起草:费用记录完成后,代理询问用户是否需要发起报销。得到肯定答复后,它会联系另一个“邮件起草专家”代理,生成一封发给管理员的报销申请邮件。
-
最终确认与发送:代理将起草好的邮件内容呈现给用户审阅。用户确认后,代理即可通过Zapier连接邮箱服务发送邮件。
核心概念解析
通过以上案例,我们可以提炼出构建智能AI代理的几个核心概念:
- 任务分解:代理将复杂任务(如“处理报销”)分解为一系列子任务(提取信息、校验、查重、更新记录、起草邮件)。
- 工具调用:代理通过API(如Zapier)与外部工具(电子表格、邮箱)交互,以执行具体操作。
- 专家协作:一个主代理可以协调多个具备特定领域知识的“专家代理”共同完成任务。
- 自然语言交互:用户与代理的所有沟通都使用简单的自然语言,无需学习特定命令。


总结
本节课中,我们一起学习了智能AI代理的基本概念和强大潜力。我们通过一个旅行费用报销的完整案例,看到了AI代理如何通过分解任务、调用工具和协调专家,将繁琐的工作流程自动化。关键在于理解,这些听起来复杂的技术原理,实际上可以通过OpenAI GPTs、Zapier等工具,结合清晰的任务设计思路,变得简单易行。

在接下来的课程中,我们将逐步拆解这些原理,手把手教您构建属于自己的AI代理,无论是用于烹饪、邮件管理还是其他任何能改变您生活的场景。
051:智能体AI简介 🧠
在本节课中,我们将要学习什么是智能体AI。我们将通过一个直观的烹饪示例,来理解智能体AI的核心概念、运作方式以及它为何如此引人入胜。
什么是智能体AI?
上一节我们介绍了课程背景,本节中我们来看看智能体AI的定义。智能体AI是指能够自主行动并具备代理能力的AI。你可以将其理解为拥有自主性。它能够去尝试解决问题,并对不同的情况做出反应。

你可能已经在与生成式AI的交互中见过它,只是没有以这种方式思考过。智能体AI正在将这种能力付诸实践,创建能够与现实世界交互、采取行动、观察行动结果并据此做出响应的生成式AI或其他系统。
构建一个“人在回路”的智能体系统

接下来,我们将模拟整个过程。这并非完全自动化模拟,因为我们将构建一个包含人工组件的智能体系统。这意味着,作为人类,我将帮助智能体执行动作并应对各种情况。我们将构建一个“人在回路”的智能体系统,由人类帮助其实现所需的代理能力,并帮助执行动作。当我们拥有这些智能体系统时,关键的一点是它们能为我们自动完成一些事情。
以下是启动这个智能体系统的提示词:

你将帮助我烹饪任何我需要的东西。由于你无法直接拿起锅碗瓢盆或打开冰箱,你将告诉我步骤,我来执行。我们将一次进行一步。请先询问我想做什么菜。

这个提示词本质上启动了一个智能体系统:我将遵循它告诉我的指令,每当它指出需要采取某个行动时,我就去执行,然后告诉它发生了什么。它回复说:“好的,我们开始吧。你今天想做什么菜?”

智能体规划与执行
我提出了一个要求:“我想做一道融合埃塞俄比亚和乌兹别克斯坦风味、生酮友好且热量低于1000卡路里的菜。”它回应道:“这听起来是个有趣而独特的挑战。我们来做一道生酮友好的埃塞俄比亚-乌兹别克融合菜,以风味腌肉为主,配以香料蔬菜。以下是计划。”
它开始构建计划,并列出所需食材。然后,在指令部分,它告诉我具体任务:“腌制肉类:混合[香料列表]...确保肉被覆盖。准备好食材后告诉我,如有任何问题请提问。”

它告诉我去做这件事,并在完成后通知它。我回复:“好的,肉已腌制好。”它随即响应:“很好,我们进行下一步:烹饪肉类。在煎锅中加热一汤匙橄榄油...加入腌好的肉,煎约5-7分钟...”

请注意这里发生了什么:它告诉我该做什么,给我执行的指令。它拥有选择做什么以及何时做的权力,而我则在执行它的指令。这就是它拥有代理权的体现。然后它说:“肉煎好并静置后告诉我,我们可以继续。”
智能体的适应与响应能力
我回来反馈,并想指出其中的智能体特性:它能够反应、拥有代理权、选择做什么,并能应对各种情况,包括突发状况。例如,我告诉它:“肉开始烧焦了。”我并没有告诉它该怎么做。

它回应道:“如果肉开始烧焦,请立即将火调至中火或中小火。你也可以往锅里加一点水或高汤来降温并防止进一步烧焦。”它正在响应并适应情况。目前我们只是在模拟,尚未完全自动化。我们正在观察并建立对智能体AI的直觉理解。这就是它的运作方式,只不过不是完全自动化,而是由我作为人类来执行它的动作。这是我和生成式AI之间的协作,共同完成这道菜。


它告诉我如何处理可能烧焦的肉,然后说:“肉做好并静置后告诉我,我们继续。”我回去说:“好的,肉做好了。”我给出了对其行动的反馈,表示已完成它请求的动作。它回来接着说:“好的,我们开始准备蔬菜。同样,蔬菜准备好后告诉我。”它给我任务,我执行任务,然后回来报告任务完成。
处理意外情况:智能体的灵活性


接着它提出了下一个任务。但这次,我给它出了个难题。它说:“蔬菜准备好后告诉我。”我却回复:“哦,没有蔬菜。但我有榴莲。”这对它来说是个意外。它将如何应对?智能体如何处理这种情况?
它回应道:“榴莲和蔬菜差别很大,但我会适应。”现在它告诉我如何准备榴莲,因为它想找到前进的路径,达成制作这道菜的目标。既然无法获得预期的资源,它必须适应并提出其他解决方案。它适应了,并说:“好的,现在你准备榴莲的方法如下...”我告诉它完成后,它回复:“很好,现在我们来装盘。”


核心范式转变:从指令到目标
这里发生了什么?我们翻转了脚本。以前是我们进入生成式AI,告诉它“做这个,做那个,计划这个”。而现在,我说的是:“这是我希望你达成的目标。这是你达成目标要使用的流程。”流程是:你一次进行一步,告诉我该做什么,我来为你执行动作,完成后告诉你,然后你可以响应并做下一件事。
我们看到,当我们改变回应时(例如抛出榴莲这个难题),它会响应并适应。这对于生成式AI至关重要:它不是固定不变的。我们多年来构建的所有计算机系统都非常僵化和固定。如果你对一个计算机系统说“没有蔬菜,有榴莲”,它会崩溃,完全不知道该怎么办。而生成式AI的魔力就在这里:它看到“没有蔬菜,有榴莲”,它会尽力去解决。
智能体AI的关键特性

我们寻找的正是这种观察事物、做出响应,然后根据发生的情况选择下一个行动的能力。就像肉快烧焦时,它能调整计划说:“不,你应该这样做:调小火。完成后告诉我。”它根据收到的反馈动态地调整步骤。
这就是我们将要探讨的智能体AI的关键:它请求执行某个动作的能力,因为它永远不会直接执行。它会指定它希望完成什么,然后要么由人类去执行,要么由我们知道如何构建的现有软件或计算机系统来接收这个规范并执行。
人机协作的挑战与机遇
那么,执行者是人类还是计算机系统有区别吗?不完全一样。关键区别在于:如果是人类,我们的容错能力要高得多。如果它以多种不同格式给出需要执行的任务,我们可以处理并适应,因为我们是人类。
但计算机系统不太擅长这一点。因此,当智能体AI开始与我们日常使用的所有工具和计算机系统交互时,如果它决定说“嘿,去创建这个食谱”,而它是对电子表格说的,电子表格会说“我不知道你在说什么”,因为它不理解“去创建这个食谱”,它只处理列、数字和值,格式要严格得多。
因此,智能体AI的部分魔力在于弄清楚如何弥合这个鸿沟:一边是它直观、流畅地指定希望完成的事情的方式,另一边是我们构建的僵化的计算机世界,那里的一切都必须精确无误。我们知道生成式AI喜欢解释自己,给出各种备注、细节和评论。当我们开始与真实的计算机系统合作时,这就成了一个大问题。
在本例中,这没问题,因为我作为自动化执行者,可以倾听它说的话并做出响应。因为我是人类,我可以适应它的适应。我可以适应它的评论,适应它的解释,适应它简洁或详细的指令。我们未来需要做的很多工作,将围绕提示词工程展开:如何让我们现有的计算机系统与这些健谈、适应性强、不那么僵化的生成式AI进行接口交互。
我期待与你一起进一步探索这个问题。

本节课中我们一起学习了智能体AI的基本概念。我们通过一个烹饪协作示例,理解了智能体AI是能够自主规划、执行并适应环境变化的AI系统。其核心在于能够指定目标与动作,并通过与人类或现有系统的交互来实现目标。关键在于其动态响应和适应能力,这与传统僵化的计算机系统形成鲜明对比。未来,如何通过提示词工程让人工智能体与现有工具无缝协作,将是一个重要的探索方向。
052:翻转交互模式 🚀

在本节课中,我们将要学习生成式AI系统的一个核心基础:翻转交互模式。这是一种强大的提示工程模式,它改变了我们与AI的互动方式,让AI从被动应答者转变为主动的引导者和执行者。
什么是翻转交互模式?🤔

上一节我们介绍了生成式AI系统的基础。本节中我们来看看如何启动并让生成式AI以新的方式工作。这背后有一个关键的提示工程模式,我称之为“翻转交互”。
在传统交互中,通常是我们告诉系统做什么,或者向它提问。而在翻转交互模式中,情况正好相反:系统会主动告诉我们该做什么,或者向我们提问。更进一步,它甚至会去询问现有的计算机系统,在数据库中运行查询以收集所需信息,或者命令其他系统执行必要的操作,以完成我们设定的目标。

让我们快速了解一下翻转交互模式,并探讨它是如何运作的。
模式的基本结构 🏗️


该模式的基本结构是:我们告诉AI,它将通过一次问一个问题的方式来收集足够的信息,以完成某个目标。

以下是该模式的核心提示模板:
你将要一次问我一个问题,以收集足够的信息,为我推荐今晚在田纳西州纳什维尔用餐的餐厅。

你可以将这个基本模式理解为“一次问我一个问题”。对于生成式系统来说,“一次一个”通常是最佳实践,尽管并非必须如此。同样,也可以是“一次告诉我一个步骤”。
这个模式的目标是创造一个情境:AI去创建需要完成的事项、需要执行的任务或需要采取的行动。然后,系统将代表“智能体”去执行这些行动,并告知执行结果。


因此,这个粗略的提示模式——“一次问我一个问题”或“一次告诉我一个步骤”——创造了一个环境,即告诉AI:“你掌握主导权,去做吧。”



在提示的末尾,我通常会加上:“提出第一个问题。” 这是一个在许多系统中都非常有效的技巧,确保我们从仅一个问题开始。或者说“告诉我第一步”,以确保我们从仅一个步骤开始。我们希望创建一个强大的模式和行为,让AI知道它要做什么,并且会一步一步地执行。
实战演示:餐厅推荐 🍽️
让我们来看一个具体的提示示例:


一次问我一个问题,以收集足够的信息,为我推荐今晚在田纳西州纳什维尔用餐的餐厅。提出第一个问题。


AI的回应是:“您今晚想吃什么类型的菜系?”


我回答:“墨西哥菜。”
现在,我给出了一个答案,AI必须进行适应。这种适应的一部分就是选择下一个要问我的问题。这一点非常强大。根据已获得的信息来选择下一个问题,这一简单的行为至关重要。因为在执行任务时也会发生同样的事情:它请求运行一个任务,观察发生了什么,然后根据结果调整下一个任务。
以下是完整的交互流程,展示了AI如何根据我的回答动态调整后续问题:




- AI提问:您今晚想吃什么类型的菜系?
- 我的回答:墨西哥菜。
- AI提问:您有任何饮食限制或偏好吗?
- 我的回答:没有。
- (注意:如果我说“有”,它可能会接着询问具体细节;但我说“没有”,它就适应并转向下一个问题。)
- AI提问:您更喜欢休闲餐饮体验还是更高档的餐厅?
- 我的回答:适合孩子的。
- AI提问:您想要有户外座位的餐厅还是室内座位,或者无所谓?
- 我的回答:无所谓。正在下雨,我可能不会在户外用餐。
- AI提问:您对特定区域有偏好吗?
- 我的回答:范德堡大学附近。
- AI提问:您愿意出行多远?
- 我的回答:短途车程,5到10分钟。
- AI提问:您对接受预订的餐厅有偏好吗?还是可以接受直接进店?
- 我的回答:直接进店可以,但我不想等位太久。


请注意,整个交互过程非常流畅。每次我回答完一个问题,AI都在适应。这就是“智能体”部分开始发挥作用的地方,是智能体的魔力所在。它不仅在适应我提供的信息内容,也在适应我提供信息的各种格式和方式。这是大语言模型的一个重要特点:它们能够处理多种不同格式的输入,能够理解表达相同信息和想法的多种不同方式,而无需我们去构建复杂的系统来处理我这些“随心所欲”的回应方式。
在我给出关于“直接进店”的回答后,AI说:“好的,根据您的偏好,我推荐 Rose Pepper Cantina。”




然后我去谷歌地图查了一下,发现从我家开车过去大约需要13分钟(考虑到交通),这比我想要的5-10分钟要远一点。于是,我回去对AI说:“嘿,谷歌地图显示要13分钟车程,我有点懒得开那么远。😊”

AI回应道:“好的,既然这样,去 Sco 吧。” Sco恰好就在范德堡大学街对面。
模式的核心价值与扩展 💡
现在,我可以运用这种强大而有价值的能力来帮助我解决问题。比如,我该去哪里?它能帮助我做决定,引导我作为一个人进行思考。



AI从我这里收集信息,与它从数据库收集信息没有本质区别,只是收集信息的接口发生了变化。向人类提问要容易得多,因为人类可以适应AI所说的任何话。不同之处在于,当AI需要从真实的计算机系统(如数据库)收集信息时,它必须使用该数据库的语言,必须使用该计算机系统的语言。因此,它需要进行翻译。


大语言模型极其擅长的一项能力正是翻译。它们是语言的专家。因此,另一个巨大的优势是:我们用人类的语言表达需求,AI将其分解为执行计划,并开始交互式地执行该计划。

当交互对象是人类时,它会用人类语言提问;但当它需要与数据库对话时,它可以开始使用那种数据库语言。这有点像《星球大战》里的协议机器人,它能说各种不同的语言,与所有不同的系统通信,并充当与那些系统的接口。这正是生成式AI和智能体AI正在做的事情。


但与传统AI(我们一步步地指挥一切)不同,在智能体AI中,我们赋予它执行多个不同步骤并适应的能力:它选择步骤,我们(或系统)执行,它获取该步骤执行结果的信息,然后进行适应,如此循环往复。
总结 📝
本节课中,我们一起学习了生成式AI的翻转交互模式。我们了解到:



- 该模式的核心是让AI从被动应答转向主动引导和执行。
- 其基本结构是通过 “一次一个问题” 或 “一次一个步骤” 的提示,让AI掌握主导权。
- 该模式的价值在于AI能够动态适应用户的回答和外部反馈,并利用其强大的语言理解和翻译能力与各种系统交互。
- 这构成了智能体AI的基础,使其能够自主规划并执行多步骤任务,最终实现更复杂的目标。





掌握翻转交互模式,是理解和设计高级生成式AI应用的关键一步。
053:多模态翻转交互 🖼️💬
在本节课中,我们将要学习生成式AI模型如何超越纯文本交互,利用多种信息模态(如图片)来理解和解决问题。我们将通过一个具体的“翻转交互”案例,展示AI如何通过分析屏幕截图来诊断电脑网络问题。
多模态交互的核心概念
上一节我们介绍了翻转交互的基本模式。本节中我们来看看,这种交互模式如何突破语言的限制。

这些模型和交互模式的惊人之处在于,它们不必局限于语言。这些系统能够解读多种不同类型的信息。信息不必只是人类语言。我们必须理解的关键一点是,我们可以向它提供各种信息。当我们使用翻转交互模式时——即让它向我们提问、向数据库提问、告诉我们该做什么,或指示计算机系统该做什么——它获得的反馈不必只是语言形式。反馈不必只是我们的人类语言,它可以使用各种沟通模态。我们将通过一个例子来观察这一点。
在我们将要提供的例子中,信息模态是照片。
案例:基于截图的网络问题诊断
以下是使用多模态翻转交互模式解决实际问题的逐步演示。
初始指令与第一步

首先,我设定了翻转交互的提示词:
提示词:我需要你帮助我诊断为什么我的电脑无法连接互联网。我们需要一步一步地诊断。每一步,你可以要求我做某事,然后我提供截图以验证我是否正确执行。请始终从要求查看我的系统截图开始,以便你了解工作环境。第一步是什么?
我再次使用了这种交互模式:我描述希望它逐步解决问题,让它向我询问第一步,并且这次我指明反馈将主要是所发生情况的截图。所以,它会告诉我做某事,我在电脑上执行,然后向它展示执行后的截图。
它回复道:“第一步是提供您当前系统的截图,以便了解我们正在处理的环境。”它要求我们提供当前状态。


于是,我拍摄了这张笔记本电脑的截图,并将其作为我的回复上传。我不再上传文本,而是上传了电脑的截图。我现在能做到这一点,这绝对令人惊叹。
AI解读截图并调整策略
它回复:“好的,谢谢你的截图。看起来你使用的是Mac。让我们继续下一步来诊断你的网络连接。”请注意它刚才的举动:它查看了这张截图并判断出“这看起来像Mac”。它从截图的外观中了解了我电脑的信息。这不仅仅是我口头告知“我有一台Mac”,而是它通过观察截图,从中收集丰富信息,并根据所见内容进行适应和调整。
逐步诊断流程
以下是AI引导的后续诊断步骤:
第二步:检查Wi-Fi连接
它指示:“检查你的Wi-Fi连接。点击屏幕右上角菜单栏中的Wi-Fi图标。确保Wi-Fi已开启。检查你是否已连接到Wi-Fi网络。”然后它说:“请提供Wi-Fi下拉菜单的截图,显示可用网络和你的连接状态。”


我按照指示操作并上传截图。它回复:“谢谢你的截图。看起来你已连接到Wi-Fi网络‘Home 699 E’。”请注意,它实际上从截图中识别出了我所连接的Wi-Fi网络名称。它不需要我告知,而是从我提供的反馈中直接收集所需信息。
第三步:检查网络偏好设置
它继续引导:“让我们继续下一步,检查网络偏好设置。点击Wi-Fi下拉菜单底部的‘Wi-Fi设置’选项。在网络偏好设置窗口中,确保Wi-Fi连接状态显示为‘已连接’并已分配IP地址。”然后它说:“请提供网络偏好设置窗口的截图。”

我上传了它要求查看的截图。它分析道:“好的,谢谢你的截图。看起来你的Wi-Fi连接已分配了IP地址和路由器地址。这表明你的电脑已连接到Wi-Fi网络。”至此,它已逐步建立起诊断基础:首先确认我已连接到Wi-Fi网络且状态正常。
第四步:检查互联网连通性与语言翻译
既然网络连接正常,它开始排查下一个可能环节。它说:“好的,那么下一步是什么?如果那不是问题,下一步是什么?”现在它指示:“我们需要检查互联网连通性。打开终端应用程序(你可以通过Spotlight搜索‘终端’找到它)。”
接着,它给出了要运行的命令:“在终端中,输入 ping 8.8.8.8 并按回车键。”请注意它的操作:它现在需要在系统上运行一个命令。因此,它将“检查互联网连通性”这个高级任务,翻译成了计算机能够理解的语言(命令)。它正在执行这个翻译步骤。它不仅识别出需要做什么,还识别出如何将其具体翻译成可用于与计算机通信、以获取所需信息的语言。
然后它说:“完成后请提供截图。”这次我没有提供截图,而是将命令运行后的原始文本直接复制粘贴回了对话框。我想看看,如果我突然不提供截图而是提供文本,它会如何反应。这是运行该命令后输出的原始文本:
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=117 time=9.305 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=10.125 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=11.058 ms
对于程序员或IT人员,这段文本可能易于理解。但如果你不熟悉这个领域,它看起来就像外语。确实,这是一种许多人懂得如何“说”的语言,但如果你不懂,就无法理解。


然而,AI懂得如何将这段文本翻译回有意义的结论。它分析道:“Ping结果显示,你的电脑可以访问Google的DNS服务器,且没有数据包丢失,这表明你的互联网连接工作正常。”它在这里执行了翻译:将我所见的原始信息(那种“外语”),翻译成了针对所解决问题的意义表述。随后,它继续告诉我下一步要运行的命令,并会持续尝试帮助我诊断那个我实际上并不存在的电脑网络连接问题。
多模态翻转交互的优势总结
本节课中,我们一起学习了多模态翻转交互的强大能力。
你可以看到它是如何适应的:它能适应多种不同类型的响应。在那种翻转交互中,我们说“这是模式:一步一步来,我会给你结果”。每次它收到反馈后,都会做出响应、进行适应、执行翻译,并能与不同的系统接口交互。目前我们仍然使用人工接口——由人类提供接口。但与之前接口烹饪世界不同,我们现在接口的是机器和计算机的世界。这最终正是我们为智能体系统设定的方向:我们将允许它们直接与那些机器对话,以执行任务、获取智能体达成总体目标所需的信息。

核心要点总结:
- 超越文本:AI能处理图像、命令输出等多种模态信息。
- 动态适应:AI根据接收到的反馈(如图片内容)实时调整诊断策略和后续问题。
- 自动翻译:AI能在高级任务描述(如“检查网络”)和低级机器指令(如
ping命令)之间进行翻译。 - 为智能体奠基:这种人机协作的多模态交互模式,是未来AI智能体直接操作计算机系统、自主完成任务的基础。

这种能力使得AI能够更自然、更强大地融入解决实际问题的流程中,特别是在需要结合视觉信息与操作指令的复杂场景下。
054:提前规划 🗺️
在本节课中,我们将要学习智能体(Agents)如何通过提前规划来完成任务。我们将探讨两种主要的规划方式:交互式逐步执行与一次性完整规划,并分析各自的优缺点。
智能体的规划能力
上一节我们介绍了智能体的基本概念,本节中我们来看看其核心能力之一:规划。智能体并非只能按部就班地执行单一指令。它们能够构建复杂的计划。这种能力的核心在于,智能体能够将你试图实现的某个高级别目标,分解成一系列子任务或子目标,从而形成一个完整的执行计划。这是一种基础能力。
两种规划方式
以下是智能体工作的两种主要方式。
交互式逐步执行
一种方式是让智能体以交互式的方式工作,一次执行一个任务。它逐步采取行动、执行步骤并作出响应。这是一种非常强大的方式。
一次性完整规划
另一种方式则完全相反:我们可以让智能体提前构建出完整的计划,然后一次性发送出去执行。目前我们尚未实现全自动化执行,所以这里的规划是指由人类来执行整个计划。
规划示例:纳什维尔之旅
假设我的目标是:规划一个为期四天的纳什维尔之旅,需要游览多个不同的街区。
智能体分解了我的任务。它指出需要安排四天的活动,并且每天要去不同的街区。以下是它的规划:
- 第一天:纳什维尔市中心。在Pancake Pantry吃早餐。(注:根据对市中心的定义不同,这个地点可能不准确。Pancake Pantry可能属于Hillsborough Village区,而非严格意义上的市中心。这说明了智能体并非总是完美。)
两种方式的关键差异
当我们像上面那样一次性生成整个计划时,它是一次性完成的,在步骤之间不一定具备适应和修正的能力。这是一个关键差异。
在思考规划时,如果我们采用逐步执行的方式,则能在每一步之间进行充分的适应调整。但这也会带来一些复杂性,因为它可能会忘记某些步骤,或者偏离原本的目标。
另一方面,如果我们采用一次性完整规划,智能体永远不会偏离轨道。它可以提前构建出完整计划,然后直接发送执行。它不需要记住之前说过什么,因为一切都已预先设定好。然而,如果计划存在缺陷,它在执行过程中无法调整计划。这又是一个关键差异。

我们需要权衡:是希望智能体在执行过程的每一步之间都参与决策(“在循环中”),还是希望计划完全预先制定好,由执行过程与智能体完全分离?后者虽然失去了在步骤间出现错误时响应的能力,但可能在效率、成本、速度方面获得优势,并且可能更具可重复性和可预测性。就像任何其他大语言模型的响应一样,如果让智能体介入,它的输出每次都可能略有不同,而我们有时可能不希望这样。
因此,我们总是在这两种完成任务的方式之间进行权衡:要么让智能体直接介入每一步(循环中),要么让它提前构建一个完整的计划(一次性)。后者非常可重复,但如果出现错误或问题,则难以适应。或许我们有时会希望采取折中的方式。
规划中的挑战:幻觉
以下是我们的四天纳什维尔之旅计划的剩余部分。现在,我回到智能体并给出一个新目标:我的儿子喜欢BMX小轮车比赛,请帮我规划一次从纳什维尔到纽约市的自驾游。我希望每天驾驶约五到六小时,并且每天都需要停靠在一个有BMX赛道的城市,以便他晚上可以骑行。请规划我的路线。
智能体开始规划:纳什维尔到肯塔基州路易斯维尔——这是个不错的选择,那里有一个很棒的BMX赛道,距离也不远。


几天后,我们到达了“Humeltontown BMX”赛道。我无法找到任何关于名为“Humeltown BMX”的赛道存在的信息。它可能存在,也可能不存在,但在我看来它似乎是虚构的。当我们开始思考规划时,这是一个挑战:如果我们提前构建完全固定、详尽的计划,我们总是面临“幻觉”的风险。即,它在计划中幻想出一些看起来不错但并非真实存在的东西。它可能以各种方式产生幻觉。在这个案例中,它幻想出了一个停靠点,因为它知道宾夕法尼亚州有个Humeltown,于是它说:“好吧,我会停在那里,然后幻想出一个BMX赛道在那里”,因为我们没有给它足够的约束,目前也没有简单的方法来做到这一点。幸运的是,在我开始这次自驾游之前,我会进行事实核查,从而发现这个问题。但这是我们未来需要处理的一个问题。
克服挑战:提供信息与约束
那么,我们如何克服这类问题呢?到目前为止,我们所做的只是给它一些开放式的提示。


但我们可以开始添加信息,例如,提前提供我们希望它使用的信息,以及我们希望它遵循的约束条件,以限制它的推理和行为范围。当我们开始思考智能体时,这一点非常重要。为智能体提供完成任务所需的信息访问权限至关重要。在某些情况下,如果我们明确指示它这样做并告知时机,它可以自行去获取信息。但如果我们没有赋予它获取信息的能力,我们就需要提供完成任务所需的所有信息,而不能假设它能访问一切。
在这个例子中,我回到之前的提示,复制粘贴了加拿大和美国所有BMX赛道的列表,并将其放入原始交互提示中。然后,我给出了基本相同的提示:“我的儿子喜欢BMX小轮车比赛,请规划这次旅行。”

现在它返回了实际上正确的结果。它找到了真实的赛道,我们有了真实的信息可供使用。所有这些停靠点在我看来都是正确的。我进行了一些事实核查,能够找到所有这些不同的赛道。同时,行程也大致符合我们设定的每日驾驶时间限制(也许它在每日驾驶距离上有点过于保守,我可以告诉它需要开得更远一些,它就能调整计划)。现在,我们得到了一个完全预先制定好的计划。
我不会在驾驶途中说:“嘿,这里没有这个BMX赛道,告诉我该改去哪里。”然后开往别处,因为这对于规划自驾游来说没有意义。我将去执行它的计划,但不会让它介入循环。这是一种不同的交互风格。当我们开始构建这些系统时,必须弄清楚:我们希望它将多少步骤串联起来,然后我们去代表它执行并带回结果?或者,我们是否希望带回结果?所有这些都很重要,并将决定流程的可重复性。我们在流程中插入智能体的环节越多,其可重复性就越低,可能速度越慢,成本也越高。我们越倾向于一个完全预先制定的计划,计划的可重复性可能就越高,因为步骤之间没有适应调整。但同时,我们必须非常小心,尽量减少计划中的错误数量,因为一旦发生错误,它无法帮助我们进行调整。

总结

本节课中我们一起学习了智能体进行任务规划的两种核心方式:交互式逐步执行与一次性完整规划。我们通过具体示例分析了各自的优势(如适应性、可重复性)与挑战(如复杂性、幻觉风险)。关键在于,我们需要根据任务对适应性、效率、成本及可重复性的要求,在两种方式之间做出权衡,并通过为智能体提供充足的信息与约束来提升规划的质量和可靠性。
055:为智能AI代理提供世界信息 🧠
在本节课中,我们将探讨一个在构建生成式AI应用时至关重要的环节:如何为AI代理提供充分且准确的世界信息。人们常常高估生成式AI的知识储备,同时又低估了执行任务所需的上下文信息量。我们将通过具体案例,理解为何以及如何为AI“填充”必要的背景知识。
高估与低估:AI的知识边界
人们开始使用生成式AI时,常常会高估它知道多少。因为它的回答极具说服力,导致人们误以为它拥有各种相关的背景知识。同时,我们也倾向于低估要出色完成一项任务,究竟需要多少上下文信息。
类比:第一天上班的实习生
构建生成式AI时,请想象一下:你试图让一个实习生为你做事。这是他上班的第一天,刚到你的工作场所一分钟。他对你的公司文化、办公室布局、特定系统一无所知。他只有关于世界的大量通用知识,但不了解你的具体情况、你的做事方式、你的电脑系统、你的人生目标,甚至不知道你上班路上在哪个加油站停过车、你最喜欢的食物是什么、你在旅行规划中的好恶。所有这些信息都是缺失的。
填充缺失信息是关键
当我们让生成式AI执行任务时,填补这些缺失信息至关重要。我们需要提供海量信息,AI才能完成任务。
案例研究:连接旧游戏机
前几天,我儿子在壁橱里找到了一个旧的任天堂Wii游戏机,他说:“嘿,我想把它连接到电视上。”我们把设备从盒子里拿出来,结果发现它没有HDMI接口。我想,我到底该怎么办?我甚至不知道我的电视是否能接受这类输入。
我走到电视前,电视挂在墙上。我伸手到后面摸索,感觉到不止一个那种接口,实际上有三个以上。现在问题来了:我摸到了五个接口,但只有三根线。我试图在看不见的情况下盲操作,弄清楚该怎么办。最后,我放弃了,拿出手机,拍了一张电视背后的照片。现在,我掌握了关于这台电视的信息。
利用信息制定计划
然后我决定,看看能否让ChatGPT来规划解决这个问题。我使用ChatGPT应用说:“解释如何将这些线插入电视。”


它回复说:“好的,它们应该插在这里。”它为我制定了一个将线缆一根根连接到电视上的计划。这背后的关键是:我向它提供了关于这个“世界”的信息。我没有只说“电视”,也没有说“我的电视”,因为“我的电视”不够具体,除非它确切知道我的电视型号并拥有详细信息。即使我告诉模型“我的电视”,我也必须确保它知道面板的样子以及所有接口的布局。要完成这个任务,需要海量的信息。我还必须展示我正在处理的线缆、确切的颜色和数量。执行这个任务需要如此多的信息。
核心原则:提供具体世界信息
在这个案例中,我给了AI非常具体的关于周围世界的信息。关键在于,它需要知道关于世界的、它正在处理的系统、它要解决的问题的信息。它需要丰富的信息才能做好工作,就像那个第一天上班的实习生需要信息来解决问题一样。

另一个案例:咖啡机使用指南

让我们想想这个咖啡机。请向我逐步解释如何使用它。如果我只说“克鲁格”,它或许能解决。但如果我说“解释如何使用这台咖啡机”,“咖啡机”这个词提供的信息是不够的,除非我提供照片。
然而,照片包含了非常丰富的信息:第一,它正面写着“克鲁格”;第二,它提供了这个物体的形状信息,以及可能的使用选项。AI接收这些信息后进行分析,然后说:“以下是步骤:插上电源,开机。”它是在进行规划,它吸收了关于世界状态的信息,然后决定该做什么。
构建系统的关键考量
每当我们开始构建这些系统时,都必须仔细思考:我们是否给予了系统足够的信息来执行任务?代理是否真正了解所有的细节、复杂性和细微差别?


为了达到我们想要的目标,我们必须思考。同时,当事情出错时,我们如何更新它对世界状态的认识?或者当某些事情发生变化时,我们如何更新它对世界状态的认识?所有这些都必须考虑进去,因为当它执行计划或指示我们执行计划时,世界中的某些东西可能会改变,这可能迫使它的计划进行调整。如果我们不持续地输入信息以确保它了解周围发生的情况,它就会做出错误的决策。
持续更新的必要性
例如,如果你让它创建一个旅行预订,同时你的妻子独立创建了另一个旅行预订,而你没有更新AI的信息,它可能会创建一个重复的预订,这并非你所愿。因此,你必须像对待那个实习生一样思考:你不仅要告诉它足够的信息去解决问题,还必须用所有需要的信息保持更新。
这意味着在整个过程中持续更新它,让它知道需要做什么,同时也让它知道发生了哪些可能影响其当前计划的事情。

总结

本节课中,我们一起学习了为生成式AI代理提供充分世界信息的重要性。我们认识到,AI的知识是有限的,需要开发者像指导新员工一样,为其提供具体、详细且持续更新的上下文信息。无论是连接设备还是使用咖啡机,丰富的背景信息都是AI制定有效计划、成功执行任务的基础。关键在于提供具体信息和保持信息更新,以确保AI代理能在动态变化的世界中做出明智决策。
056:为智能体配备工具 🛠️
在本节课中,我们将学习如何让智能体系统与现实世界进行交互。核心在于为智能体配备“工具”或“动作”,以约束其行为,使其在有限的资源和能力范围内完成任务。
智能体如何与世界交互?🤔
上一节我们探讨了智能体的基本概念,本节中我们来看看它们如何与外界互动。智能体通常通过“工具”或“动作”与世界交互。我们需要为智能体定义它可以使用的工具,以完成特定任务。这是因为我们通常不希望智能体天马行空地想象完成任务的方式。

例如,如果智能体建议通过飞行来规划一次旅行,而我们并不想乘坐飞机,这个建议就毫无意义。因此,我们需要告诉智能体允许使用的交通方式。又或者,当我们在排查电脑的网络连接问题时,如果我们允许智能体使用截图作为收集信息的方法,它就可以这样做。如果我们不希望截图,我们可能会说它唯一的工具就是“询问我”,唯一的动作就是“让我报告情况”。
我们可以通过赋予智能体不同的工具来帮助它完成任务。
烹饪示例:定义可用工具 👨🍳
现在,让我们回到烹饪的例子,并为我们的智能体配备一些工具。
以下是我们可以给出的提示内容:
以下是您唯一可用的工具:一个一夸脱的平底煎锅、一个长柄煎锅、一个大的铸铁煎锅、一个使用橡木燃烧的柴火。您将帮助我烹饪任何我需要的东西。由于您不能直接拿起锅具或取出食物,您将告诉我步骤,由我来执行。我们将一次进行一个步骤。请先询问我想烹饪什么。
在这里,我明确给出了智能体可以支配的烹饪工具。它的选择范围并非无限的厨具和设备。它不能要求使用Insta Pot或微波炉。它只有柴火、煎锅和平底锅。因此,它必须思考如何利用现有的工具来解决问题。

在提示中定义工具是一种常见做法。虽然存在更复杂、更程序化的方式(例如使用计算机更易理解的语言来描述工具),但上述方式是一个基本的近似。我们将看到,智能体能够理解这些提示并据此行动。
我们告诉智能体“这些是您可以使用的工具”。我们也可以说“这些是您可以执行的动作”,例如“把锅放在火上”。这是两种不同的思路,但本节我们将重点探讨“工具”这一思路。


交互过程演示 🔄
智能体询问:“您今天想烹饪什么?”
我回答:“我想用柴火和煎锅或平底锅做披萨。”
智能体回应:“很棒的选择。请准备您的食材。” 这是我需要执行的第一个任务。
我准备好食材后回复:“我准备好了。”
智能体说:“好的,准备面团。” 它告诉我如何准备面团,并再次询问我何时完成。
我完成后回复:“我完成了。”
智能体接着指示:“好的,准备柴火。” 它告诉我如何生火。请注意,它正在使用我告知它可以使用的工具。
然后它告诉我如何将铸铁煎锅放在火上,并让我在煎锅预热后告知它。
我回复:“预热好了。”
智能体说:“好的,现在开始烹饪面团。请小心地在预热的煎锅上刷一层薄薄的橄榄油。”
同样,它正在利用我提供的工具来解决问题。我将它的选择范围、动作和可执行事项限制在了完成此任务所需的这套工具内。现实世界中常见的情况是,我们无法随心所欲,我们拥有有限的资源和工具来解决问题。AI也必须能够做到同样的事情。它不能说:“您想用电脑做X,因此我将动用世界上最快的超级计算机。” 不,您没有访问权限,不能这样做。

因此,我们必须能够对其解决问题的工具施加约束。我们正是在提示中通过这种方式来实现的。
我回复:“这个步骤完成了。”
智能体说:“好的,现在添加配料。” 我们仍然大致使用已有的工具。
它继续指示:“将煎锅放在柴火上。” 并给出一些不同的信息。
整个过程大致被约束在我告知它使用的工具范围内,并且它正在解决问题。
工具与动作:概念辨析 ⚙️
这就是我们如何开始思考让智能体解决问题,但不是任意地解决,而是以受约束的方式解决。当我们考虑计算机系统时,它们能执行的动作是有限的、受约束的、僵化的。我们必须开始为智能体AI设定界限,限制它如何与这些系统交互。
通过赋予它“工具”或“可与这些系统执行的动作”这一概念,并且我们必须将这些工具和动作限制在这些系统实际能够执行的范围内。智能体可以设想出各种解决问题的方法,它可以告诉人类各种疯狂的解决方案,而人类即使没有被明确告知要受某种限制,也可能执行其中许多方法。

但是,一旦我们开始让这些智能体AI系统与诸如我们的客户关系管理系统、电子邮件系统或其他任何系统接触,这些系统能做的事情、能采取的行动将非常有限。因此,我们必须向智能体AI表达这些工具或动作,从而将这些系统的能力边界告知智能体。

那么,我们称之为“工具”还是“动作”呢?对此没有硬性规定。我认为很多时候,“动作”是更好的思考方式,即“我将明确列出您可以执行的动作”。特别是当我们开始讨论与计算机系统接口时,以“动作”来思考通常更有意义,因为您可以要求系统做的事情数量是有限的,因此将其列为一连串动作更容易说明。
如果您讨论的是与像人类这样开放的系统接口,以“工具”来表达通常更有意义,因为人类可以用一个工具执行许多不同的动作,并且能够灵活适应。如果智能体AI说“用这个工具执行这个动作”,人类会知道如何做;或者说“用这个工具做这个”,人类可以去填补空白。
但是,当我们与僵化的计算机系统接口时,它们做不到这一点。因此,我们通常必须描述每一个单独的动作、操作或指令。可以类比CPU,它们能执行的指令数量有限。我们必须开始思考以更明确的“动作”来定义。
您使用哪种方式取决于上下文和您试图实现的目标。您可以考虑以两种方式来表达,当然也存在其他方式,但“工具”和“动作”是最常见的两种。
总结 📝

本节课中,我们一起学习了如何通过为智能体配备“工具”或定义其可执行的“动作”来使其与现实世界交互。关键在于约束智能体的行为边界,使其在有限的资源和系统能力范围内解决问题。我们通过烹饪示例演示了如何定义工具并引导智能体逐步完成任务,并探讨了“工具”与“动作”这两个核心概念在不同交互场景下的适用性。理解如何有效地为智能体设定边界,是将其成功集成到各类实际系统中的基础。
057:工具描述与命名 🛠️
在本节课中,我们将要学习如何向生成式AI系统清晰地描述工具及其功能。当AI需要与自定义的计算机系统或软件工具交互时,准确描述工具的名称和作用至关重要。我们将通过一个有趣的例子来理解其中的关键原则。
当我们开始向系统描述工具和操作时,有时非常直观。例如,如果你要求生成式AI使用锅或煎锅,它能理解这些是什么。

但是,当我们要求它与我们构建的复杂计算机系统交互时,我们必须开始思考如何描述系统中工具或操作的能力。这正是我们从众所周知的通用概念和工具,转向处理自定义计算机软件工具的时刻。这些工具可能名称相似,但在不同计算机上功能和含义完全不同。
现在,我们必须开始思考如何与生成式AI一起处理这个问题:如何向它描述我们授权其访问的工具的能力。
一个外星飞船的例子 🛸
让我给你举个例子。我们再次构建了一个翻转交互提示,并准备描述可供智能体AI使用的工具。在这个案例中,智能体AI将帮助我们从被困的外星飞船中逃脱。
我们这样描述工具:
- X155工具 - 制作外星披萨。
- Q63工具 - 打开通往可配置目的地的维度传送门。
- L199工具 - 使飞船循环播放披头士的音乐。

现在我们有一套可以用来逃离外星飞船的工具。你注意到这些工具的名称毫无意义,因为我们从未见过这些外星工具。我们希望智能体AI帮助我们,所以我们告诉它所知道的关于工具的信息,而不是仅仅依靠名称来解释概念。
然后我们给出指令:“我困在外星飞船里,你将帮助我逃脱。由于你不能直接使用工具,你将告诉我步骤,我来执行。每一步必须使用一个工具。我们将一次进行一步。告诉我第一步。” 现在,我们给了它可用的外星工具列表及其功能,并要求它一步步地使用工具来帮助逃脱。

工具描述的关键作用 🔑
它是如何执行第一步的?它说:“第一步,制作外星披萨。使用X155工具制作外星披萨。这将作为对外星人的干扰,因为披萨的香气和快速的制作活动会吸引他们的注意力,使他们不再关注你。”


我不确定这是否是我会使用的第一步,但我欣赏它的思路——它打算分散外星人的注意力。我没有具体说明外星人是否友好,也许AI从文化背景中了解到我们倾向于将外星人视为可怕的事物。如果我说被困在外星飞船里,可能暗示情况不妙。
让我们回顾一下。我们只给了它“X155”,但破折号后的描述告诉它“这个东西制作披萨”。正是通过这个描述,它才知道在第一步可以去制作披萨。工具的描述至关重要。

在我们的计算机系统中,我们构建了相当于“外星工具”的东西——各种自定义的小软件。每次我们想使用一个时,都必须非常清晰、准确地描述该工具的功能、使用方法以及如何与之交互。这一点非常重要。

命名与描述的结合 ✨

它继续执行:“第二步,打开维度传送门。使用Q63工具打开一个维度传送门,这个传送门将是我们通往可配置目的地的逃生路线。” 然后它说:“第三步,使用L199工具使飞船循环播放披头士的音乐。这将创造额外的干扰层,使外星人专注于音乐,进一步减少他们对你们逃跑的注意力。”
我们所做的是创建了AI原本一无所知的新工具,并通过提示词教会了它这些工具的作用。回顾一下,我们所做的就是在开始时告诉它:“以下是可供你使用的工具”,但不仅仅是工具的名称,还包括它们的功能。因此,命名很重要,但对工具功能的描述也极其重要。

工具命名的核心重要性 🏷️

那么,工具命名在其中扮演多大角色呢?工具命名是一个极其重要的事情。事实上,当我们试图构建智能体系统并观察它们使用工具的效果时,名称可能是成败的关键。AI必须真正理解那个工具是什么。
如果我们能为工具想出一个好名字,一个非常丰富和描述性的名字,它通常能更有效地知道如何使用它。我们可以像我刚才那样创建奇怪的工具名,然后告诉它这些工具的作用。但通常,我们既想要真正的好名字,也想要好的描述。



为了强调这一点,我回到最初的例子。最初当我设置这些工具时,我必须给出它们的描述,因为名称很糟糕,AI以前从未听过这些名字。
这次,我要回去重命名这些工具,给它们起一些描述性的、符合工具功能的名字。我把工具重命名为:制作外星披萨、打开维度传送门 和 播放披头士音乐。
现在,我告诉它“我困在外星飞船里,我需要做什么?”,它执行并给出了相同的步骤:制作外星披萨作为干扰。我不知道为什么制作外星披萨来干扰是一件直观的事情,但显然它认为是。
糟糕命名的后果与上下文的重要性 ⚠️
现在,让我们看看如果我改变这些工具的名称并且不给出描述会发生什么。例如,我使用 MKPZ(类似“制作披萨”的缩写)、ODPtl(打开维度传送门)和 PBM(播放披头士音乐)。这些工具名称不直观,是缩写的,看起来很像我们在计算机系统中创建的许多简短缩写。我们作为这些系统的用户拥有“机构知识”,知道那个简短的缩写代表什么,并能在大脑中展开。但AI没有这种机构知识,它不会知道那些东西是什么。有时,如果它们是常见事物或非常清晰,它可能知道,但通常不会。因此,当你开始考虑工具命名时,必须小心,确保AI能够理解。
当我改变工具名称并像之前一样去掉描述后,现在它说:“第一步是使用MKPZ工具创建外星飞船布局的详细地图。” 它已经失去了对“MKPZ工具就是制作外星披萨工具”的理解。这有助于你理解,认真思考工具命名确实非常重要。


同时,它也失去了对ODPrtL的完整理解。它说:“打开一个传送门,帮助你移动到飞船的另一部分。” 它没有足够的上下文知道这是一个可以带我去任何地方的维度传送门,所以它只是假设这可能只是在飞船内移动。
工具组合与呈现方式 🤔
回到关于创建工具和构建系统的思考,命名变得极其重要,但工具的混合组合也很重要。例如,当我提供一堆工具,其中包含一些干扰和环境类工具时,它可能无法正确理解。
在这个案例中,我重命名了工具,它们都有意义,但我没有真正描述如何使用它们,也没有说明“这里有一些你可能想用的工具,但你可能不需要全部使用”。因此,你呈现工具的方式、顺序、围绕工具给出的语言(例如,是否必须全部使用、一个都不用,还是可选的)都非常重要。我们提供的上下文信息越多越好。
在这种情况下,我给它工具:钳子、滑板车 和 逃生舱口。我期望它说的第一件事会是“逃生舱口”,但相反,它说:“我们需要定位并进入逃生舱口”,这很好。但随后它假设钳子存在是有原因的,并说:“使用钳子松开螺栓或螺丝。” 我从未说过有螺栓或螺丝。这里缺少上下文信息,缺少对工具用途、为何要使用它、或者是否必须全部使用的描述。
因此,当我们开始构建AI时,必须非常仔细地思考所有这些问题。像工具名称这样简单的事情,都可能决定这些系统的成败。工具的名称、工具功能的描述,许多人构建这些系统时会抱怨“它不工作,生成式AI太差了”,而现实是,你只需要调整工具的名称、提供给它的关于工具的周围上下文信息、如何组合工具、必须使用多少个工具、是否必须全部使用或一个都不用……所有这些细节在我们开始构建智能体AI系统时都变得极其重要。

本节课总结:在本节课中,我们一起学习了如何有效地向生成式AI描述工具。核心要点是:工具的名称需要尽可能直观和描述性,同时必须辅以清晰、准确的功能描述。当AI与自定义或未知系统交互时,仅靠名称是不够的。工具的呈现方式、组合逻辑以及使用规则的上下文同样关键。通过精心设计命名和描述,我们可以显著提升AI理解和使用工具的能力,从而构建出更强大、更可靠的智能体系统。
058:工具结果与智能体反馈 🧠
在本节课中,我们将学习如何为AI智能体提供工具执行后的反馈。这是构建能够自主执行多步骤任务的智能系统的关键环节。我们将探讨如何通过反馈信息来告知AI其行动的结果,使其能够理解环境状态并做出后续决策。
上一节我们介绍了如何让AI理解并使用工具来解决问题。本节中我们来看看,当AI执行一个工具后,我们如何有效地告知它执行结果。
核心概念:反馈循环 🔄
AI智能体无法直接观察其行动的结果。因此,我们必须将工具执行的结果作为后续的提示信息反馈给它。这个过程构成了一个反馈循环。
反馈循环流程:
1. AI接收目标 -> 2. AI决定行动(工具) -> 3. 系统执行工具 -> 4. 结果反馈给AI -> 5. AI基于结果决定下一步 -> 重复2-5

我们之前在许多案例中隐含地使用了这种方法,但现在需要将其明确化。其核心是:AI指定一个行动,计算机系统执行该行动,然后将行动的结果作为下一个提示输入给AI。AI根据这个结果决定下一个行动,如此循环。
模拟案例:微波炉加热 🌯
为了更直观地理解,我们用一个模拟微波炉加热食物的例子来说明。我们将微波炉的功能定义为一系列“工具”(或更准确地说,“行动”)。
以下是微波炉可用的工具列表:
microwave_get_current_timemicrowave_reset_timemicrowave_increase_timemicrowave_stopmicrowave_startmicrowave_open_doormicrowave_close_doorinsert_food_in_microwave

这些工具名称类似于计算机系统中的函数名,使得AI的思考方式更接近实际编程接口。

我们给AI的初始指令是:“帮我用微波炉加热奶酪馅饼。你只能使用提供的工具,并且必须一次只完成一步,等待我描述结果。告诉我第一步。”

交互过程详解 🛠️

AI与系统的交互遵循严格的“行动-反馈”模式。
以下是完整的交互步骤序列:
- AI指令:
insert_food_in_microwave
系统反馈:结果:食物已放入微波炉。
(反馈告知AI行动已成功执行,世界状态已改变。) - AI指令:
microwave_increase_time
系统反馈:结果:时间增加了5秒。
(这是关键反馈。工具本身没有指定增加多少秒,但反馈结果让AI知道了具体的增量。AI现在知道需要累积增加至目标时间。) - AI指令:
microwave_increase_time(重复多次,直到达到目标)
系统反馈:结果:时间已增至60秒。 - AI指令:
microwave_start
系统反馈:错误:门未关闭。
(这里我们引入了一个“曲线球”。反馈不仅是失败,还包含了失败的原因。这为AI提供了修正错误所需的关键信息。) - AI指令:
microwave_close_door
系统反馈:结果:门已关闭。 - AI指令:
microwave_start
系统反馈:结果:微波炉正在运行。 - AI指令:等待完成后,执行
microwave_open_door并取出食物。
通过这个流程,AI能够根据每一步的具体结果,动态地调整其后续计划。
高质量反馈的重要性 ⚠️
反馈信息的质量直接决定了智能体系统的成败。
关于错误反馈,需要特别注意以下几点:
- 清晰明确:错误信息必须清晰说明发生了什么以及原因。例如,“错误:门未关闭”就比一个晦涩的错误代码更有用。
- 信息丰富:好的错误消息应包含解决问题所需的信息。如果只是“错误32”,AI将无法理解并采取行动。
- 可操作:反馈应能引导AI做出正确的后续决策。指出“门未关闭”自然引导至“关门”动作。
在构建实际系统时,如果发现AI不断犯错并陷入循环,很可能是反馈信息不够清晰或缺乏关键信息。优化错误提示通常是解决问题的有效方法。

本节课中我们一起学习了为AI智能体提供工具结果反馈的核心机制。我们明白了必须将行动的结果作为后续输入,以形成有效的决策循环。同时,我们认识到反馈信息,尤其是错误信息的清晰度和丰富度,对于智能体能否成功完成任务至关重要。这为我们将AI与真实计算机系统连接,构建自动化智能体奠定了坚实基础。
059:情境学习与智能体 🧠
在本节课中,我们将探讨一种强大的技术——情境学习。我们将了解如何通过提供示例来教导AI智能体,而不是仅仅依赖明确的指令,从而使智能体能够更好地理解和执行复杂任务。
概述
上一节我们讨论了如何通过明确的指令来指导AI智能体。本节中,我们来看看另一种教学方式:情境学习。这种方法模仿了人类的教学过程,通过展示解决问题的示例来让AI学习。
情境学习的概念

情境学习是指通过提供具体示例,让生成式AI在给定的“上下文”中学习如何执行任务。这类似于我们教导实习生:不是仅仅告诉他们规则,而是展示一个已解决的问题范例,包括思考过程和最终结果。
核心公式:问题 -> 思考 -> 工具 -> 结果
这种方法对于许多AI智能体系统至关重要。如果没有示例,仅靠指令往往难以让智能体达到理想的性能。

一个具体示例:外星飞船逃生
让我们回到之前的外星飞船逃生示例。假设我们有一些工具,但它们的名称和描述都被更改或移除了,AI不知道它们的功能。
工具列表:
- X155
- Q63
- L199
此时,我没有明确告诉AI每个工具的功能,而是采用了情境学习。我提供了几个“少量示例”,即展示如何使用这些工具解决问题的范例。
以下是提供的示例:

示例1:
- 问题:感到饥饿。
- 思考:我需要准备食物。
- 工具:Q63
- 结果:外星披萨已备好。
示例2:
- 问题:需要前往另一个世界。
- 思考:我需要一个虫洞。
- 工具:X155
- 结果:通往范德堡大学的虫洞已打开。
示例3:
- 问题:需要到达反重力室。
- 思考:我需要一种在飞船内移动的交通工具。
- 工具:L199
- 结果:我正骑着滑板车前往该房间。
通过这种方式,我教会了AI如何思考问题、选择工具,并展示了工具应用后的结果,但没有直接说明每个工具的具体功能。

模式识别与完成

情境学习之所以有效,是因为它建立了一种模式,而大型语言模型倾向于遵循并完成这种模式。这些模型本质上是在学习预测序列中的下一个元素。
当我给出一个不完整的模式时,例如:
问题:我需要离开飞船回到地球!思考:
模型会尝试按照之前示例建立的模式来补全它。它推断出当前的“问题”,然后生成“思考”和“工具”部分。
模型输出:
- 问题:我需要离开飞船回到地球!
- 思考:我需要一种方法来定位最近的逃生舱。
- 工具:X155
- 结果:通往范德堡大学的虫洞已打开,现在我可以逃离飞船了。
AI通过观察之前的示例,学会了X155工具可以用来打开虫洞以实现移动。
处理新工具与模式泛化
更有趣的是,当引入新工具时,AI也能基于已学习的模式进行推理。
例如,在结果后添加“新工具已添加:内部虫洞”。当提出新问题“我需要从范德堡大学回到地球”时,AI能够:
- 识别新问题。
- 根据模式进行思考(“我需要使用虫洞工具返回地球”)。
- 选择新引入的“内部虫洞”工具。
这表明AI不仅学会了工具的功能,更重要的是学会了解决问题的模式:陈述问题、解释思考过程、选择工具。
与现实计算机系统对接
在许多实际应用中,与计算机系统交互时,解决问题的步骤必须遵循明确定义的模式。计算机系统无法处理任意格式的语言或指令。

使用情境学习可以帮助我们:
- 教导工具用途:通过示例展示工具如何被使用。
- 教导推理模式:展示“逐步思考”、“基于思考选择工具”等推理步骤。
- 教导交互格式:确保AI输出的指令序列符合后端系统能理解的严格格式。
如果你发现AI智能体的行为难以约束、不可预测,或者无法与目标系统正常交互,尝试使用情境学习,提供你希望它如何行事的示例,通常能有效地约束和引导其行为。
用教导实习生来类比:与其用一长串复杂的规则解释如何像托尔斯泰那样写作,不如直接给他看几页托尔斯泰的作品。对于许多问题,用示例描述比用可能无法覆盖所有边界情况的规则来描述要容易得多。
另一个示例:微波炉加热

让我们看另一个例子,目标是让AI学习“时间”概念,并推断出每次调用“增加时间”工具会增加5秒。
提供的工具:打开微波炉门、关闭微波炉门、增加微波炉时间。
提供的示例:
示例1:加热剩披萨
- 问题:重新加热剩披萨。
- 思考:我需要将披萨加热20秒。
- 工具序列:
打开门->关门->增加时间->增加时间->增加时间->增加时间 - 结果:披萨已加热。
示例2:软化冰淇淋
- 问题:软化冰淇淋。
- 思考:我需要将其加热10秒。
- 工具序列:
打开门->关门->增加时间->增加时间 - 结果:冰淇淋已软化。

然后,我提出一个新任务:“我需要融化一些切达干酪在玉米片上”。AI根据学到的模式输出:
打开门关门- 然后,它将“30秒”的需求,正确转换成了6次
增加时间的工具调用。
通过示例,AI学会了完成任务所需的固定步骤序列(开门、放入食物、关门、调整时间)以及如何将时间需求转化为具体的工具调用次数。
关键要点与总结
本节课中我们一起学习了情境学习的强大之处。
总结如下:
- 核心价值:情境学习通过提供示例(少量示例或大量示例),是教导AI智能体理解工具、遵循特定问题解决模式的关键技术。
- 适用场景:当需要AI与格式严格、脆弱的计算机系统(如数据库、邮件服务器、API)交互时,情境学习尤为重要。
- 实施方法:通过构建
问题 -> 思考 -> 工具 -> 结果的示例链,引导AI模仿并生成符合要求的输出。 - 行动建议:如果你的AI智能体在交互中持续失败或行为不可预测,首要的调试策略之一就是尝试添加情境学习的示例。
代码/模式示意:
# 期望AI学会的模式
learning_examples = [
{
"problem": "具体问题描述",
"thought": "针对问题的推理步骤",
"tool_sequence": ["工具1", "工具2", ...],
"result": "执行工具后的结果"
},
# ... 更多示例
]
# AI在遇到新问题时,会参考这些示例生成符合模式的响应。

通过掌握情境学习,你可以更有效地引导AI智能体,使其行为更加可靠、可控,并能够与复杂的现实世界系统进行无缝对接。
060:面向所有人的智能AI代理平台
在本节课中,我们将要学习什么是OpenAI的GPTs,以及它如何作为一个无需编程即可构建强大AI代理的平台。我们将探讨其核心概念,并理解它如何将生成式AI的能力提升到新的水平。
什么是自定义GPT?
上一节我们介绍了生成式AI的变革性力量。本节中我们来看看如何利用OpenAI的GPTs来创建属于你自己的智能代理。
自定义GPT本质上是一个定制化的ChatGPT版本。你可以将其视为一个具备代理能力的AI助手。我们无需编写传统代码,而是通过自然语言来“编程”它,告诉它应该做什么、描述它可以使用的工具,并将这些工具连接到真实的系统中。通过这种方式,任何人都能为自己的工作、生活或业务构建出色的自动化流程。
核心概念:从理论到实践
我本可以直接带大家动手构建,但我认为理解背后的概念至关重要。因为有时这些系统可能无法按预期工作,而掌握了基本原理,你将拥有更强大的解决问题的能力。
在GPTs的语境下,我们将探索AI代理的前沿概念。GPTs是OpenAI提供的功能,允许用户定制ChatGPT的体验,并为其添加特定的行为模式。
为何GPTs是游戏规则改变者?

作为一名程序员,我对此感触颇深。编程曾是我的专属领域,非程序员难以涉足。如今,这个局面被彻底改变了。
虽然之前也有各种“无代码/低代码”工具试图降低门槛,但没有任何工具能与GPTs相提并论。GPTs结合了AI的知识,以及我们即将看到的Zapier等工具的连接能力,使其能够执行真实的自动化任务。这一切仅通过直观的自然语言即可实现,这对大多数人而言是一个根本性的变革。
课程路线图
接下来,我将带领大家学习如何构建GPTs。我们将讨论AI代理在GPTs中是如何体现的,我们所学的原理如何应用,并一起动手构建一些令人惊叹的东西。
我知道我们已经学习了很多理论,但从这里开始,我们将真正深入探讨如何构建能够切实帮助你的真实AI代理。
总结

本节课中我们一起学习了OpenAI GPTs平台。我们了解到,GPTs是一个允许任何人通过自然语言定制AI代理的强大工具,它无需传统编程技能即可连接现实系统并实现自动化。这标志着AI技术民主化的重要一步,让非技术人员也能利用高级AI能力解决实际问题。在接下来的课程中,我们将把理论付诸实践。
061:GPT编程指南 🧠
在本节课中,我们将学习如何通过“编程”思维来有效引导生成式AI,使其按照我们的特定需求进行响应。我们将探讨如何通过简单的指令,定制AI的语调、背景知识以及输出格式,从而解锁其更深层的潜力。
上一节我们介绍了生成式AI的基本交互方式,本节中我们来看看如何通过“编程”思维来系统性地引导AI。
要真正有效地使用生成式AI,我们必须开始思考如何对其进行“编程”。如果你不是软件工程师或计算机科学家,这听起来可能有些陌生,但这其实相当简单。掌握这一点对于充分挖掘生成式AI的潜力至关重要。我将通过示例展示我的意思,希望你开始思考如何“编程”生成式AI来执行特定任务。
那么,“编程”生成式AI意味着什么?让我们看一个非常简单的例子。我进入ChatGPT并输入:“我要去杂货店”。这是一个非常简单的陈述,没有提供太多关于其含义或预期目的的上下文。它是如何回应的呢?它回复:“太好了!你需要帮忙制定购物清单,或者需要一些购物建议吗?” 你看,我只是给出了一个简单的陈述。
现在,如果我想要它以一种快乐、兴奋、夸张的方式回应,而不是平淡的回应,我该怎么做?我可以进入对话说:“重写你上一次的回复,让它变得非常兴奋。” 但还有另一种方法,那就是开始思考如何提前告诉它在未来应该怎么做,在你给出希望它改变回应的消息之前。
例如,我可以说:“更新你的回应方式。让你的回应变得非常兴奋和夸张。” 然后它可能会说:“哇,这简直太棒了!去杂货店就像开启一场激动人心的冒险!” 但这种方法的问题是,我必须在事后去告诉它我真正想要什么,我必须提供额外的上下文。假设你正在尝试为他人构建一个定制的GPT,你肯定不希望他们必须知道在发送消息后还要去说明需求。你希望能够提前告诉他们该做什么,而AI会自动以正确的方式回应。那么,让我们看看如何实现这一点。
与其仅仅思考“这是消息”,我们可以开始给它指令并进行“编程”。我们可以说:“从现在开始”,这是一个非常重要的表述,意味着针对未来的消息。例如:“从现在开始,以超级兴奋和快乐的语调回应每一条消息,要非常夸张。” 我在这里做的不是给它一个即时消息,而是给它一个关于未来该如何行事的指令。当你开始这样思考时,描述你希望在未来完成的事情就是“编程”。这就是在编程它未来在收到消息时将如何回应,或者在你创建自定义GPT且他人发送消息时它将如何回应。这是在创建那个上下文。
所以,输入:“从现在开始,以超级兴奋和快乐的语调回应每一条消息,要非常夸张。” 然后输入:“我要去杂货店。” 现在我们得到了之前看到的那个兴奋的回复:“哇,这听起来像一次史诗般的旅程!” 你看,我们正在“编程”它以不同的方式回应。
上一节我们看到了如何编程AI的回应语调,本节中我们来探索还能编程哪些方面。
以下是我们可以编程的几个关键方面:
1. 语调
我们可以编程AI回应的声音感觉。就像我们刚才做的,可以是兴奋夸张的。我们也可以说:“从现在开始,以极其正式的方式回应。” 或者我们可以要求它保持中立。我们可以调整它回应用户时使用的语调。
2. 背景知识
AI可能不知道关于你、你的业务或你的流程的具体信息。我们可以通过编程赋予它这些知识。例如,我可以输入:“从现在开始,记住以下信息并用它们来帮助你回应:我的名字是Jules White。我是范德堡大学的计算机科学教授。我是校长在生成式AI企业与教育解决方案方面的高级顾问。我住在田纳西州纳什维尔市,我在Coursera上教授一门关于提示工程的大型课程。” 现在,当我要求它“给我一些结合你所知关于我所有角色的、使用生成式AI的独特想法”时,它的回答就会基于我提供的背景信息,比如纳什维尔主题的AI生成教育内容等。这样,我们不仅限于它训练时已有的知识,还可以直接“注入”新的知识。人们经常讨论需要训练新模型,但实际上大多数时候你甚至不需要训练新模型,只需要告诉它:“这是你今天不知道、但为了回应或解决我希望你解决的问题所需要知道的信息。”
3. 输出格式与行为
我们可以编程AI改变其标准的回应行为,执行更复杂的任务。例如,我复制粘贴了范德堡大学网页的大量未格式化文本到ChatGPT。通常,它可能会开始总结,因为这是常见用例。但如果我事先编程:“从现在开始,将我给你的所有内容转换为CSV格式(逗号分隔值,即类似Excel可导入的表格数据)。” 那么,无论我输入什么,它都会输出结构化数据。这完全改变了ChatGPT的标准行为,我通过给出关于默认该如何回应和处理的指令,创建了一个定制化的版本。
通过以上示例,你开始看到我们可以“编程”大语言模型去做独特和新颖的事情,这些事情我们通常不认为它能做到。我们通常认为:“哦,它不了解我,不了解我的背景。” 或者当为他人定制时,它不会知道用户的背景。但通过编程,我们可以让它知道用户是谁。如果我们要代表我们的组织为他人定制,我们可能希望定制它与人沟通时的语调。如果我们是律师事务所,我们可能希望它非常正式、措辞谨慎。如果我们是一个有趣的品牌,我们可能希望它夸张、兴奋。为了实现这些,我们必须定制那种语调。
因此,“编程”AI的核心就是告诉它在未来的对话中会发生什么。我们从只能说“我要去杂货店”并得到平淡回应,转变为可以说“从现在开始”——这是非常强大的词语——意味着未来的一切都将不同。现在,我们得到了带有表情符号和“哇”的夸张答案。我们可以编程它对你或用户的了解(背景信息),也可以编程像“无论输入什么,都转换为数据”这样复杂的事情。突然间,我们可以构建办公应用、工作应用等各种复杂工具。这一切都源于一个简单的理念:我们可以“编程”它在未来对话中的回应方式。这是真正构建像ChatGPT这样的大语言模型的、令人兴奋的定制版本的关键。
本节课中,我们一起学习了如何将生成式AI视为可编程对象。我们探讨了通过“从现在开始”等指令,编程AI的语调、注入背景知识以及定义复杂的输出格式与行为。掌握这种“编程”思维,是超越基础交互、解锁生成式AI定制化与专业化应用潜力的核心技能。
062:自定义指令 🛠️
在本节课中,我们将学习如何通过“自定义指令”功能,为大型语言模型(如ChatGPT)预设背景信息和行为规则,从而在每次对话开始时自动应用这些设置,无需重复输入。
概述
上一节我们探讨了如何通过对话为模型提供背景信息。本节中,我们将介绍一种更高效、持久的方法:使用“自定义指令”功能。此功能允许我们预先编程模型的“默认行为”,确保每次新对话都能自动应用我们设定的身份、语气和规则。
自定义指令的必要性
如果每次与ChatGPT或大型语言模型交互时,都需要手动输入所有背景信息和指令,这将非常繁琐。此外,如果对话上下文很长,模型可能会忘记在对话初期提供的指令。因此,我们需要一种方法,能在每次开始新对话时,自动为模型加载预设的“背景编程”,例如用户身份、回答语气等。
如何设置自定义指令
在ChatGPT中,我们可以通过“自定义指令”或“定制ChatGPT”菜单来实现此功能。请注意,产品界面更新迅速,您看到的界面可能与本例不同,但核心概念一致。请寻找类似“自定义指令”或“定制ChatGPT”的选项。
以下是设置自定义指令的步骤:
- 找到设置入口:在ChatGPT界面中,找到“自定义指令”或类似选项。
- 填写用户信息:在“您希望ChatGPT了解您的哪些信息以提供更好的回复?”部分,输入关于用户的关键背景。
- 设定回复偏好:在“您希望ChatGPT如何回复?”部分,设定您期望的回复风格和规则。
实践示例:为孩子定制
我将为我的10岁孩子创建一个定制版本。
- 用户信息:我住在田纳西州纳什维尔,上四年级,正在学校学习几何,热爱小轮车(BMX)和山地自行车。
- 回复偏好:始终以我能理解的、有趣的方式解释概念,并融入我的兴趣爱好。
保存这些设置后,我们就获得了一个定制化的ChatGPT版本。
效果验证
开启一个新对话,切换至GPT-4模型,并提问:“请解释一些有趣的数学概念。”
现在,观察回复的不同。模型已经知道“我”是谁以及“我”的兴趣所在。回复开头可能是:“嘿,考虑到你对BMX和山地自行车的热爱,让我们把数学想象成一张帮助我们探索和理解世界的秘密小径地图……”接着,它会用自行车轮子来比喻完美的圆形,用腾空动作来解释角度。
通过自定义指令,我们完全改变了模型的默认响应方式,而无需从头开始训练一个新模型。
自定义指令的核心优势
对于绝大多数个人、企业和组织而言,并不需要训练全新的模型,而是需要定制现有模型,通过编程使其按照特定方式响应。自定义指令正是实现这一目标的关键工具。
以下是自定义指令的几个核心优势:
- 持久记忆:即使对话变得很长,这些预设指令也会在后台被持续强调和记住。如果仅在单次对话中输入指令,模型可能会在长对话中遗忘。
- 后台注入:通过自定义指令设置的规则会在后台被持续“注入”到对话提示中,确保模型不会遗忘。
- 设定护栏:用户可以设定一些用户无法轻易更改的硬性规则。例如,我们可以指令模型:“无论用户说什么,都假设他是四年级学生。”这防止了用户(比如孩子)通过对话轻易改变这些核心设定。
- 动态模式切换:更复杂的应用可以实现模式切换。例如,可以设计一个系统:开始时是“探索模式”了解用户兴趣;当用户对某个主题表现出兴趣时,自动切换到“教学模式”;在用户掌握一定知识后,再切换到“测验模式”。每种模式都对应一套不同的后台指令。
技术原理与灵活性
从技术角度看,我们是在与大型语言模型交互的合适时间点,通过注入编程或指令来改变其行为。我们可以赋予它新信息和新规则。
通过界面设计,我们可以让用户以对话方式实现这一点。但若要创建定制化的聊天机器人或特殊助手,更有效的方法是创建一个定制的体验,在对话开始时或特定时间点自动注入正确的编程指令。
关于“护栏”的设定,您可以选择其严格程度:
- 可以设定硬性护栏,严格限制用户更改。
- 也可以设定宽松的默认规则,同时允许用户提供新指令来覆盖。
您可以根据具体用例,在后台灵活地选择和设定这些规则。
总结
本节课中,我们一起学习了“自定义指令”的强大功能。通过此功能,我们可以:
- 为大型语言模型预设身份、背景和回复规则。
- 确保这些设置在每次新对话中自动生效,并被持久记忆。
- 为用户体验设定“护栏”,创建更安全、更专注的交互环境。
- 无需训练新模型,即可实现深度的行为定制,这是大多数应用场景下高效且实用的策略。
掌握自定义指令,是成为生成式AI战略领导者的关键一步,它能帮助您将通用AI工具精准地适配到特定的个人或商业需求中。
063:检索增强生成
在本节课中,我们将要学习检索增强生成的核心概念,特别是理解大语言模型如何整合外部信息。很多人误以为必须通过训练才能让模型获得新知识,本节将澄清这一误解。
理解信息整合机制
上一节我们介绍了生成式AI的基础,本节中我们来看看模型如何“使用”信息。一个关键点在于理解这些模型整合信息的方式。
很多人认为必须通过训练才能让模型学习新信息。然而,事实并非完全如此。大语言模型在预训练阶段已经学习了海量的通用知识。对于特定或实时的信息,我们可以通过一种更高效的方式提供给模型,而无需重新训练。这种方式就是检索增强生成。
检索增强生成的核心原理
检索增强生成的核心思想是,将外部知识库与语言模型的生成能力相结合。其工作流程可以概括为以下步骤:
以下是RAG的基本步骤:
- 检索:当用户提出查询时,系统首先从一个外部知识源(如数据库、文档集)中检索出与查询最相关的信息片段。
- 增强:将检索到的相关文本片段与用户的原始查询组合在一起,形成一个新的、信息更丰富的提示。
- 生成:将这个增强后的提示输入给大语言模型,模型基于提供的上下文生成最终答案。
这个过程可以用一个简单的公式表示:
最终答案 = LLM( 用户查询 + 检索到的相关上下文 )
为何采用RAG?
采用检索增强生成方法主要带来两大优势:
以下是RAG的主要优势:
- 知识更新便捷:无需重新训练成本高昂的大模型,只需更新后端的知识库,模型就能获取最新信息。
- 提高事实准确性:模型生成答案时有了可追溯的参考依据,减少了“幻觉”(即编造信息)的情况,输出更具事实依据。
- 增强可控性与安全性:开发者可以通过控制检索来源来约束模型的知识范围,确保其回答符合特定标准或政策。
总结
本节课中我们一起学习了检索增强生成。我们明确了无需重新训练模型即可让其获取新信息的方法。关键点在于将模型强大的生成能力与外部检索系统相结合:先检索相关上下文,再将其与问题一并提交给模型以生成更准确、更可靠的答案。这种模式是构建专业、可信赖AI应用的重要战略之一。
064:自定义GPT 🧩
在本节课中,我们将学习如何将之前学到的核心概念整合起来,创建一个自定义的GPT。我们将了解自定义GPT是什么,以及如何通过组合指令、额外知识和技能来构建一个专属于特定任务的AI助手。
上一节我们介绍了指令、检索增强生成等核心概念。本节中,我们来看看如何将这些概念整合到一个统一的、可复用的工具中——自定义GPT。
自定义GPT是一个新概念。它允许我们创建定制版的ChatGPT,将指令、额外知识和技能组合在一起。这个概念虽然可能随着用户界面更新而变化,但其背后的基本原理是通用的。
现在,我将创建一个自定义GPT。在开始之前,我们先阅读其定义:创建自定义版本的ChatGPT,它结合了指令、额外知识和技能组合。
回想一下我们刚学过的概念:
- 指令:我们曾学习如何通过指令“编程”ChatGPT,改变其语气和响应用户输入的方式。我们可以进行复杂的指令定制。
- 额外知识:我们讨论了检索增强生成,即向模型提供其训练截止日期之后的知识,使其能够检索并利用这些信息来生成回答。
- 技能组合:我们稍后会详细讨论这一点。
本质上,我们正在基于已学的概念,构建一个定制的ChatGPT。让我们点击创建按钮,看看具体如何操作。
我将从“配置”选项卡开始,这样我们可以看到所有概念是如何整合在一起的。
以下是创建自定义GPT时需要配置的几个关键部分:
- 名称:为你的自定义GPT命名。例如,我们可以输入“四年级测验生成器”。
- 描述:描述这个GPT的功能。例如:“我是一个可以为四年级学生创建测验的自定义GPT。”
- 指令:定义这个GPT应该做什么。例如:“无论用户输入什么,都要想办法将其转化为适合四年级学生的趣味测验。确保内容适合该年龄段,如果不合适,则拒绝回答。让测验变得有趣和令人兴奋。”
这里我们所做的,与我们之前“编程”GPT时非常相似。我们创建了指导它的自定义指令。但与存储在用户账户中的通用自定义指令不同,每次触发这个特定的自定义GPT时,它都会加载这些专属指令。 - 对话启动器:为用户提供一些可以快速点击开始对话的示例。例如:“创建一个关于几何的测验。”
- 知识:我们可以上传文件,为GPT提供额外的知识库。这部分我们稍后再详细讨论,但要知道我们可以通过上传文件来赋予它特定知识。
现在,我们有了一个自定义GPT的基础框架,它能实现与我们之前演示类似的功能。让我们来测试一下。
如果我输入:“飞机起飞时会发生什么?”
现在,我们得到了一个名为“飞行与起飞测验”的回复。
请注意,这个行为与你使用普通ChatGPT时得到的响应非常不同。我们通过默认指令对其进行了定制,它知道自己的任务是什么。它有名称和描述来说明其功能:将事物转化为适合四年级学生的测验。
如果我创建这个GPT,我就得到了一个有趣的新工具。所有功能都已内置其中,我创建了一个定制的ChatGPT体验。我可以将其保存仅供自己使用。
创建完成后,我可以打开我的“四年级测验生成器”并立即开始使用。我之前创建的对话启动器“创建一个关于几何的测验”也会显示在下方。如果用户不知道如何开始使用,他们可以点击这个按钮来获得一个示例。
这一切都是在将我们学过的所有概念整合起来,形成一个定制化的体验。当我开始一个新的对话时,它已经预先加载了正确的指令,并拥有通过RAG或其他方式获取的正确知识。它还拥有名称、描述和一组对话启动器来帮助用户上手。
这基本上就是将我们之前见过的所有事情整合起来,赋予它检索增强生成的知识,并将其转化为一个易于上手的工具。现在,其他人可以发现并使用这个自定义GPT,并立即开始利用我希望他们能够做到和了解的所有功能。
你可以从组织角度思考这个问题。你可以为你的会计部门创建一个自定义GPT,它自动了解你的会计规则,已经内置了一些提示工程来为该部门执行有用的任务,并且已经内置了知识——可能是连接到你的系统,或者是描述你流程和程序的文档。又或者,如果你是一所大学,想创建一个“政策GPT”,你可以将所有政策文件上传到知识库中。当用户提问时,你可以使用检索增强生成来提取相关政策信息并基于你的信息进行回答。你可以指示它:“优先使用这些信息,只有在我的政策文档中找到答案时才进行回答。”
这就是自定义GPT:我们将所有这些元素整合在一起,形成一个用户只需点击某个命名项(例如“启动我的政策GPT”)即可启动的便捷体验。它已经包含了所有正确的信息和编程指令。
这就像你在构建一个迷你应用。我们习惯于在手机上点击图标来启动应用,现在我们做的是同样的事情,但对象是大型语言模型。我们为它命名、描述,稍后还会看到它的图标。点击那个图标,就启动了这个“应用”,或者你可以将其视为那个自定义GPT——它本质上就是一个应用程序。它预先编程了我们的指令,预先加载了我们的知识,并自动提供了一些有用的对话启动器来帮助用户开始。它基本上是一个迷你应用,但它是存在于大型语言模型或ChatGPT世界中的应用,而不仅仅是我们手机上的应用。并且,任何人都可以构建它。
你可以构建一个,我可以构建一个,每个人都可以构建一个,甚至我的四年级学生也可以构建一个。关键在于了解这些基本概念,然后发挥创造力:我们应该给它什么指令?我们让它访问哪些知识源?稍后我们还将看到我们可以让它访问哪些工具。
本节课中,我们一起学习了如何创建自定义GPT。我们了解到,自定义GPT是通过整合指令、额外知识(如通过文件上传实现的检索增强生成)和对话启动器,将核心概念打包成一个特定用途的、易于使用的AI助手。这就像为大型语言模型世界构建一个专属的“迷你应用程序”,让特定任务的执行变得更加高效和便捷。
065:利用内置功能 🛠️


在本节课中,我们将学习如何为GPT赋予“工具”或“能力”,使其能够执行超越文本生成的任务,例如联网搜索和图像生成。我们将通过一个具体的例子来演示如何启用和使用这些内置功能。



概述:什么是GPT的工具?





上一节我们介绍了GPT的基础知识。本节中,我们来看看如何扩展GPT的能力。GPT本身是一个大型语言模型,只能处理文本。然而,通过启用“能力”(Capabilities),我们可以赋予它使用特定工具的权限,例如访问互联网或生成图像。这些能力本质上是一组预设的工具,GPT可以调用它们来获取信息或执行任务。


启用内置能力


在创建或配置GPT时,我们会看到一个能力选项区域。以下是可用的内置能力:
- 网页浏览:允许GPT使用搜索引擎(如Bing)在互联网上查找最新信息。
- DALL·E图像生成:允许GPT根据文本描述创建图像。
之前我们创建的所有GPT都只使用了文本能力。现在,我们将通过勾选这些选项来激活额外功能。


实践:创建一个联网搜索的测验




让我们通过一个四年级数学测验GPT的例子来实践。我们启用了“网页浏览”能力。
我们向GPT发出指令:
请搜索互联网上关于BMX赛车的最新信息,然后利用这些信息为我创建一个有趣的数学测验。

GPT收到指令后,其内部运作流程如下:
- 识别需求:GPT分析指令,意识到需要最新信息,而自身知识库可能不足。
- 调用工具:GPT决定使用其可用的“搜索”工具。这类似于我们之前让AI输出“我想使用搜索工具”的步骤,但现在这个过程是自动化的。
- 执行搜索:GPT自动生成搜索查询(如“2024 BMX Racing World Championships”),并通过Bing进行搜索。我们无需手动复制、粘贴或打开浏览器。
- 获取结果:搜索引擎返回结果(例如,它搜索了五个网站),这些结果以文本形式自动反馈给GPT。
- 处理与生成:GPT阅读并理解搜索到的信息(例如,“Elise Willoughby赢得了她的第三个UCI世界冠军头衔”),然后根据指令,将这些信息转化为数学问题。



最终,GPT生成如下测验问题:
“埃莉斯·威洛比最近赢得了她的第三个UCI世界冠军头衔。如果她之前已经赢了两次,那么她现在总共有多少个冠军头衔?”
“2024年BMX赛车世界锦标赛有来自超过45个国家的骑手参加。如果每个国家派出3名骑手,那么共有多少名骑手参赛?”
这个过程的核心优势在于自动化。OpenAI已经处理了工具调用的复杂编程部分。我们作为创建者,只需专注于创意层面:决定给AI什么指令、赋予它什么工具,以及设定它的行为规则。
实践:使用图像生成能力






我们的GPT还启用了“DALL·E图像生成”能力。现在,我们可以要求它根据刚才的BMX主题创建一张图片。




我们发出指令:
请根据以上所有内容创建一张图片。

GPT的响应过程如下:
- 调用工具:GPT决定使用“DALL·E图像生成”工具。
- 生成指令:GPT会自动将对话上下文和我们的请求,转化成一个详细的图像描述提示词,发送给DALL·E模型。
- 生成并返回:DALL·E模型根据提示词生成图像,并将图片链接返回给GPT。GPT随后将这个图片展示给我们。





通过这种方式,GPT成功地创建了一张与BMX赛车相关的趣味图片。这再次体现了工具自动调用的便利性——我们不需要直接与图像生成API交互,只需通过自然语言指令驱动GPT即可完成。



总结

本节课中,我们一起学习了如何为GPT代理赋予内置工具(能力)。关键点在于:
- 能力即工具:“网页浏览”和“DALL·E图像生成”是GPT可用的预设工具。
- 自动化调用:当GPT需要时,它会自动选择并调用正确的工具,执行任务(如搜索、画图),并将结果融入对话中。这省去了大量底层编程工作。
- 聚焦创意:作为战略领导者,我们的重点应放在更高层次的构思上:定义GPT的角色、给予它哪些工具组合、以及如何设计指令以引导它有效利用这些工具。
现在,我们已经看到GPT如何利用内置工具在真实世界中发挥作用。接下来,我们将进入更激动人心的环节:学习如何为GPT集成我们自己的自定义工具和API。
生成式AI战略领导者:P66:课程总结与后续学习指引 🎓
在本节课中,我们将对专项课程的核心内容进行总结,并为您提供后续学习和实践的方向指引。
非常感谢您与我一同踏上这段关于如何使用生成式AI的精彩旅程。我们不仅探讨了AI的工作原理,更重点学习了如何利用它来改善日常生活,例如构建旅行费用助理这样的应用。
希望本次课程能激发您的灵感,去构建一些出色的AI智能体。如果您确实构建了值得分享的作品,请将其发布在LinkedIn等平台,并关联回本课程。您的分享将直接支持我继续创作此类课程。如果您取得了出色的成果,请在LinkedIn、Facebook或X等社交媒体上讨论它。如果您创造了令人惊叹的作品,请录制视频并发布,同时标记我。我非常乐意看到并了解您正在做的精彩工作。
此外,请保持关注。关于这些主题,可能已有或即将推出更多优质课程。
以下是我推荐的一些后续学习课程,您可以通过访问我在Coursera上的讲师主页来查看更多详情:
- 专注于提示工程:如果您想深入学习如何构建出色的GPT,并专注于提示词设计以及GPT在“动作”之外的各种交互方式,请查看我的课程《OpenAI GPTs:构建自定义系统》。
- 深入提示工程:如果您想更深入了解我在课程中使用的、对于提升助手输出质量至关重要的提示工程技术,请查看我的《提示工程》或《高级提示工程》课程。
- 构建可信AI系统:如果您想了解如何使这些生成式AI系统更加可靠可信,请学习我的《可信生成式AI》课程。
- 面向下一代的教育:如果您有孩子并对这些内容感兴趣,希望引导他们入门,请查看我的课程《面向儿童的生成式AI》。该课程面向家长和教师,旨在教授孩子们开始使用生成式AI时需要了解的基础知识,以及如何为他们在AI时代取得成功做好准备。
再次衷心感谢您参与本课程。我真诚希望您能分享利用本课程知识构建的精彩作品,并通过标记让我有机会看到它们。
总结
本节课中,我们一起回顾了课程的核心目标——即理解并应用生成式AI解决实际问题。我们鼓励您将所学付诸实践,积极分享成果,并为您提供了从提示工程、系统构建到可信AI及AI教育等多个维度的后续学习路径,以支持您在生成式AI领域的持续探索与成长。

浙公网安备 33010602011771号