范德堡大学-ChatGPT-与-Excel-笔记-全-
范德堡大学 ChatGPT 与 Excel 笔记(全)
001:利用ChatGPT进行数据探索前的自我反思与目标设定 🎯

在本节课中,我们将学习如何利用ChatGPT进行数据探索前的准备工作。核心目标是建立对数据的共同理解,确保后续分析的准确性和有效性。
概述
开始使用ChatGPT进行数据探索时,首要任务是建立对所处理数据的共同理解。这听起来可能有些奇怪,但请设想一下:如果你与一位从未见过该数据的实习生合作,你首先会做什么?你会坐下来与他讨论数据,确保他理解数据内容,并解答他的疑问。ChatGPT同样从未见过你即将提供的数据,因此我们需要进行类似的“对话”来确保它正确理解数据。
建立共同理解的重要性
无论ChatGPT的分析能力多么强大,如果它误解了数据、遗漏了关键列或未能识别列之间的关系,它都无法成功完成我们期望的分析或探索任务。因此,我们必须从提供上下文和确保正确理解开始。
我们将通过三个步骤来深入理解数据。这个过程就像与一位即将进行分析但从未见过数据的新手坐下来,确保他跟上进度一样。
第一步:获取数据描述
使用ChatGPT进行这一步非常简单。我们将上传要处理的数据(通常是表格形式,包含行和列),然后要求它执行一个非常具体的任务。
具体操作如下:
- 将数据以Excel文件形式上传给ChatGPT。
- 使用提示词:
列出附件电子表格中的所有列,并显示每列的数据样本。
这就像我们与那位实习生坐下来,对他说:“现在,告诉我所有存在的列,解释每一列是什么,并展示每一列的一些数据。”这是一种全面的方式,可以确保ChatGPT确实查看了所有列及其中的数据,从而为后续讨论奠定基础。
示例与观察
我使用了一个从Kaggle获取的数据集,其中包含关于LinkedIn职位描述和发布的各种有趣数据。我们用它来探索能从职位发布中学到什么。
当ChatGPT拉入所有列并显示数据样本时,我们已经开始发现一些重要信息:
max_salary(最高薪资):样本中出现了NaN(非数字)。这表明该列可能并非严格格式化为数字,可能包含美元符号或逗号等字符,导致无法直接解析为数值。这是一个关键信息。pay_period(支付周期):旁边有“hourly”(每小时)的标注。compensation_type(薪酬类型):显示为“based salary”(基本工资)。
如果我们不花时间理解这些值的含义,可能会得到意外的结果。例如,如果要求ChatGPT对compensation_type进行数值分析,它将无法工作,甚至可能生成看似正确实则错误的结果。因此,我们自己的理解以及ChatGPT对数据的理解都至关重要。
预防数据问题与“幻觉”
另一个我们可以提前处理的问题是上传数据的格式问题。大型语言模型有一个特点:当我们提出问题或要求时,如果它们没有足够的数据来完成任务,它们倾向于“生成”答案来满足我们。这被称为“幻觉”。就像参加一场不知道答案的考试,你不会留白,而是会尝试填写内容以获得部分分数。
我们希望确保当ChatGPT无法获取数据时,它不会做出错误的举动(即产生幻觉)。因此,我们需要发现它何时无法正确读取数据。
例如,我曾上传一个较旧的Excel文件格式(.xls),ChatGPT在读取时遇到了困难。虽然它可能最终正确处理,但在转换过程中可能出现错误。我希望提前知道这一点。如果它加载数据失败或不完整,并且无法向我描述所有列,那么我就知道自己面临得到“幻觉”答案的风险。因此,发现这一点至关重要。
这一步看似简单,但极其重要。描述数据及其所有列。另一个重要原因是,一旦我们描述了列并将其引入对话,语言模型就会了解它们,从而有助于进行分析、建议数据探索方式等。
第二步:获取更多数据样本以深入理解
描述数据不仅仅是列出列名。获取多个数据样本会非常有帮助,因为仅凭列名本身不足以告诉我们数据的格式,并且不同行之间可能存在隐藏的关系,我们需要尝试揭示它们。
一个非常有效的方法是:首先让ChatGPT描述所有列,然后使用如下提示词:
为每列再随机抽取几个数据样本,以确保你理解每列中信息的格式和类型。
这样做的目标是提取数据,获得不止一个样本,以便看到各种不同的值。我们可以发现问题:也许99%的数据是正确的,但有一部分是错误的或格式奇怪。虽然随机样本可能无法捕获所有异常,但至少能让我们更有信心地看到可能存在的异常值。
深入分析样本
以max_salary列为例。在样本表中,我们看到一些数值,但也看到了NaN(非数字)。这意味着我们必须意识到存在这种可能性。因此,在要求ChatGPT执行任何任务时,都必须考虑到它可能会遇到非数字的max_salary值,我们可能需要进一步挖掘和理解。
此外,当ChatGPT转换或加载数据时,可能无法成功转换某些值。除非我们要求它显示数据样本以便查看和描述,否则我们不会知道这一点。
虽然在这个例子中不一定出现,但另一种可能的情况是:行中可能存在标识符。例如,描述工作类型或类别时,特别是类别,我们可能有一个类别是另一个类别的子类。因此,我们可能有一个像parent_id这样的列,它引用了另一行的id。如果我们提供了该数据的样本,ChatGPT就可以开始发现并看到这些关系。事实上,它可以相当复杂地识别这类情况。如果我们没有获取数据样本,则不太可能发现此类关系。
第三步:验证与纠正模型的理解
查看ChatGPT的输出,一旦我们提供了数据样本,它就会进行一些观察。这很重要。
例如,它可能指出:
salary_id似乎是每个条目的唯一标识符。job_id可能是职位或岗位的唯一标识符。
ChatGPT本质上正在做那位实习生会做的事情:告诉我们它看到了什么。我们仔细阅读这些观察并确保它对数据的理解是正确的,这一点至关重要。
我们的行动应该是:
- 如果我知道
job_id确实是唯一标识符,我应该告诉它:“是的,这是正确的。” - 如果我在这里看到错误的内容,我应该立即跟进并纠正它。
这个过程的目标是:我正在与那位即将进行数据分析但从未见过数据的人进行对话。我希望与他们一起讨论数据。
如果你直接跳进去说“这是数据,给我展示这个图表或那个可视化”,那么出错的概率会大大增加,因为你不知道它是否正确提取了数据,是否正确理解了数据,或者是否基于命名方式产生了误解。你必须进行这种对话,以确保它对数据的理解与你的理解一致。
同样重要的是,你可能上传了错误的文件或不完整的文件,其中的数据并非你所想。这个初始步骤将帮助我们发现自己是否犯了错误或对数据存在误解,是否真正理解这些数据,以及ChatGPT是否理解数据,从而共同建立共享的理解。
总结

本节课中,我们一起学习了利用ChatGPT进行数据探索前的关键准备步骤:
- 获取数据描述:通过上传数据并要求列出所有列及样本,建立对数据结构的初步共同理解。
- 深入采样:通过获取更多随机样本,揭示数据格式、潜在异常值以及行间可能存在的隐藏关系。
- 验证与对齐:仔细阅读ChatGPT的观察结果,确认或纠正其对数据的理解,确保双方认知一致,为后续准确、高效的数据分析奠定坚实基础。这个过程是避免模型“幻觉”和确保分析结果可靠的核心。
002:让ChatGPT生成可用Excel数据回答的问题 🔍

在本节课中,我们将要学习数据分析探索流程的第二步:内省。我们将重点介绍如何利用ChatGPT,通过生成关于数据集的可回答问题,来深入理解数据、发现潜在模式,并识别分析中的误解或盲点。
上一节我们介绍了如何让ChatGPT描述数据。本节中我们来看看如何引导它进行更深层次的思考,即对数据进行“内省”。
什么是数据内省?
数据内省是指审视已描述的数据,思考其中的模式、关系,并尝试将信息组合起来,以理解数据集能告诉我们什么。让AI进行数据内省的一个非常有效的方法是,让它提出能够用该数据回答的问题。
为什么生成问题很重要?
想象一下,你正与一位实习生或同事一起分析数据。你让他们查看数据、描述所有列和值并提供样本后,接着问:“现在,告诉我一些你能用这些数据回答的问题。”这个过程至关重要,原因如下:
以下是生成问题带来的两个核心好处:
- 检验理解程度:通过AI提出的问题,我们可以判断它是否真正理解了数据。我们可以思考:用这份数据真的能回答这个问题吗? 如果不能,这就是一个澄清数据含义和格式的机会。
- 激发新视角:AI可能会发现我们未曾注意到的东西,提出我们没想到的问题,或者指出我们未意识到的、数据能够解答的方向。这使分析过程变得协作,既能弥补我们自身分析的盲点,也能发现AI对数据的理解差距。
实践:让ChatGPT生成问题
使用同一份职位薪酬数据,我向ChatGPT输入了以下指令:
请告诉我一些我们可以用这个数据集回答的有趣问题,并说明为什么它们有趣。
它返回了以下一系列问题:
以下是ChatGPT生成的部分问题示例:
- 最高薪和最低薪的职位是什么?它们如何按支付周期变化?
- 薪酬如何按最小值、最大值和中位数聚类?某些职位的最高薪与最低薪之间是否存在巨大差异?(例如,了解同一职位在何处薪酬范围最大会非常有趣)
- 薪酬分布在不同范围内有何差异?
- 薪酬类型(例如,基本工资)与薪酬范围的变异性之间是否存在关系?
- 哪些职位只提供了中位数薪资,哪些提供了最低-最高薪资范围?
- 如果存在其他货币,不同货币的薪资数据是否有明显模式?(注意,它基于“如果存在”这个前提提问,因为它只看到了一个样本)
- 同一职位在不同行业的薪资范围有何不同?哪些角色的薪酬范围最小和最大?
- 数据是否揭示了跨行业中时薪与年薪结构的趋势?
- 最低或最高薪资值缺失的频率如何?这是否与特定的职位类型或行业相关?
它为我们提供了大量可以尝试用数据集回答的问题。同时,这也为我(人类分析者)提供了大量机会,去审视它提出的问题并思考:它真的能用这些数据回答那个问题吗?
如果答案是否定的,我可以返回并向它解释为什么其问题无法回答。通常,我会接着澄清数据集的内容,指出误解和无法回答的原因,然后要求它:“现在,生成10个新的问题。”
迭代的价值与风险防范
你可以多次迭代这个过程。问题成为快速发现数据误解的强有力工具,同时,在此过程中,我也能获得许多分析思路,本质上是在与AI协作进行头脑风暴,并自己学习数据。这是一个互利的过程。
现在,我们能否直接跳入数据集,更快地开始分析和可视化?当然可以。但我强烈建议你不要这样做,而是花时间完成这些前期步骤。
原因在于,数据分析中最糟糕的事情就是得出了错误答案,却坚信它是正确的。当我们过于匆忙地使用生成式AI,并假设一切都很完美,认为那些漂亮的图表必然基于现实时,就存在巨大的风险。
以下是可能发生的几种情况:
- 重大误解:AI可能完全误解了数据。
- 数据幻觉:AI可能凭空捏造了不存在的数据。
- 细微错误:某个值不是数字(NaN),而它的计算没有考虑到这一点,因为它不知道该值可能出现非数字情况。
- 语义偏差:它可能错误地解释了我的问题或列名的含义,这种细微的误解导致其产生的计算与我的真实意图不符。
这些情况在现实世界的人类协作中同样会发生。如果实习生对某列有误解,他们也可能做出看起来非常复杂、难以发现错误的分析和可视化。因此,这些细微的理解错误可能是灾难性的。
无论你是与人类还是与ChatGPT这类大语言模型协作,进行这样的对话都极其重要。你必须确保最终得到的答案是真正正确的。世界上最糟糕的事情就是得到错误答案却以为正确。 这就是我们这样做的原因。更快的答案不一定是更好的答案,事实上,它可能是一个灾难性的、更糟的答案。

本节课中我们一起学习了数据分析中“内省”阶段的核心方法:利用ChatGPT生成可回答的问题。我们探讨了这种做法如何帮助检验AI(或协作者)对数据的理解,激发新的分析视角,并通过迭代提问来澄清误解、确保分析基础的牢固。记住,在追求效率的同时,确保分析的准确性永远是第一位的。下一节,我们将基于这些生成的问题,开始探索如何用数据寻找答案。
003:设定目标以指导ChatGPT的Excel数据分析上下文 🎯

在本节课中,我们将要学习在深入进行技术性数据分析工作之前,一个至关重要的准备步骤:设定目标。我们将探讨为何需要设定目标,以及如何通过设定清晰的目标来引导ChatGPT,使其更好地理解我们的分析意图,从而获得更精准、更有效的分析结果。
上一节我们介绍了数据自省,它帮助我们提出了许多潜在的分析问题。本节中我们来看看如何通过设定目标,为后续的分析对话划定范围和焦点。
为何需要设定目标?🤔
在开始与ChatGPT进行数据分析对话前,设定目标至关重要。这能确保人工智能理解我们试图达成的目的。
那么,为什么我们需要生成式AI理解我们的目标?例如,为何要让ChatGPT知道我们想要实现什么?
我将给出一个直观的解释,说明为何我认为这一点极其重要。随着该领域研究的发展,我很期待看到这是否会得到验证,但这是我个人的信念。我想解释一下这为何合理。
如果你思考大型语言模型的起源,它们实际上源于一篇名为《Attention Is All You Need》的论文。这篇论文引入了Transformer模型,它彻底改变了大型语言模型,并使得我们为之兴奋的所有AI技术成为可能。
其中的关键思想是,该模型能够学会“关注”先前的陈述、词语以及其他提供上下文的信息,这些信息有助于塑造其未来的输出和行为。因此,当模型处理输入时,它可以决定输入中的某些内容非常重要,并在开始生成输出时关注这些内容。
正是这种能够“聚焦”于某物的“注意力”机制,让我认为目标设定非常重要。因为当我们开始分析数据时,会涉及许多不同的列、许多不同的数据样本,以及许多不同的分析路径。如果模型能预先知道目标是什么,它就能在后续过程中关注这个目标。
直观地说,我们所做的是为模型提供一个需要关注的点,这有助于塑造它对数据列、我们给出的所有陈述和分析的理解。如果我们不提前提供这种上下文,模型可能无法识别我们给出的、可能被多种方式解读的指令,从而可能产生错误的理解。目标设定为模型提供了理解和解释我们请求的上下文。它让模型能够识别何时某些事情可能无法实现。
这就像你坐下来与一位实习生交谈,你说:“好的,我们来分析一下。这是我们的目标。” 这能让他们集中注意力,他们知道该关注什么,知道该问什么问题,并且当我们说某些话时,他们可能能更好地理解我们的意思。
我认为,对于基于Transformer架构的大型语言模型来说,情况也是如此,因为“注意力”机制使它们能够关注我们的目标。
如何设定有效的目标?🎯
在我完成数据描述和自省之后,自省会引发出各种各样的问题。我们会得到很多数据列和很多数据样本,分析范围会扩大。现在我们需要聚焦。我们将通过设定目标,利用“注意力”机制来实现聚焦。
因此,我们现在要设定一个高层次的目标。你可以将目标视为我们告诉模型在对话和分析的边界内应该关注什么。我们希望设定的目标足够精确,能够涵盖我们试图完成的所有事情,但又不能过于模糊以至于毫无意义。
以下是设定有效目标的关键点:
- 避免过于宽泛:例如,如果我们说“我要分析一些数据”,这就是我的目标。那么你的边界就非常大,这可能对模型没有任何帮助。
- 提供具体上下文:如果你这样说:“我的目标是回答其中的几个问题,并将其转化为一份非常激动人心、有趣的报告,发布在LinkedIn上。” 这就为模型提供了大量关于你试图做什么的上下文。你实际上是想提出一些与那些想法相关的、引人注目的有趣分析。
- 考虑发布平台:将要发布在LinkedIn上这一事实也提供了上下文。因为这可能意味着最终我们必须将其提炼成相当简单的内容,一些适合LinkedIn帖子的简单统计数据。这里蕴含了丰富的信息,可以帮助指导模型的行为。
现在,如果我决定要为学术论文生成一份非常深入的报告,那么这个目标就不再适用了。我可能需要开启一个新的对话,并再次经历这个过程,将目标重置为适合为学术论文进行深度研究的适当范围。
设定目标后的影响与调整 🔄
一旦你设定了这个目标,你可以尝试直接结束对话并改变它,这可能有效,也可能无效。但你也必须意识到,一旦你设定了目标并开始进行一系列分析,模型会将许多内容带入对话中,并使对话内容围绕该目标聚焦。
这可能导致模型难以退一步并以某种方式重置。也许它可以,也许不行。因此,通常如果我要重置目标,我通常也会重置对话。
一旦我说“这是我的目标”,模型会回复说这是一个绝妙的想法,并且它还会做一些有趣的事情:例如,它会用一些想法来完善我的目标,比如为报告拟定标题。
你可以看到它已经领会到这将发布在LinkedIn上,可能需要引人注目和令人兴奋。它说“解锁隐藏的薪资趋势:你的工作录用通知没有告诉你的事”,这听起来就像一篇LinkedIn帖子。如果我想做一份学术类型的深度研究报告,这种关注点就错了。但对于我告诉它要做的事情,这恰恰是正确的关注类型。
然后,这为它提供了需要关注的东西。如果我说:“哦,我真的很喜欢这个标题”,那么它就获得了更进一步的目标。现在我将尝试构建数据来支持那个标题。
因此,目标设定是一种利用“注意力”机制的方式,有助于引导对话聚焦于我们关心的事情。同时,整个过程,比如它提出不同标题,也在帮助我们进行头脑风暴,并有望让我们在开始之前就获得更好的解决方案,而不是直接一头扎进去说“去可视化这个,做这个,做那个”。
总结 📝

本节课中我们一起学习了在利用ChatGPT进行Excel数据分析前设定目标的重要性与方法。我们了解到,目标设定能够有效利用Transformer模型的“注意力”机制,为AI分析划定清晰的边界和焦点,从而获得更符合预期、更高质量的分析结果。整个过程不仅是在指导AI,也是在帮助我们自身理清思路、进行头脑风暴,并最终建立起对数据和潜在分析方向的更深理解与信任。记住,一个清晰、具体且符合场景的目标,是开启一段高效、富有成效的AI辅助数据分析对话的关键。
004: 跨文件数据合并与分析

在本节课中,我们将学习如何使用ChatGPT来合并和分析存储在多个独立文件中的数据。当数据分散在不同表格中时,手动整合会非常耗时。我们将看到ChatGPT如何帮助我们发现文件间的关联,并自动执行复杂的“连接”操作,从而构建出更完整的数据视图。
数据分散的挑战
我们并不总是将所有数据存储在一个文件中。因此,使用ChatGPT分析数据的一个核心能力是,它能帮助我们合并多个文件。本质上,它可以在多个文件之间“连接”数据。
上一节我们介绍了单一文件的分析,本节中我们来看看如何处理跨文件的数据。这在处理从数据库导出的数据时尤其有用,例如,每个文件可能代表数据库中的一个独立表,我们需要将这些分散在多个表中的数据连接起来,才能构建完整的数据图景。我们可以在ChatGPT中完成这类操作。
探索性分析:发现数据关联
我们的做法是,逐步寻找那些需要执行“连接”操作以引入数据的地方。我将继续使用职位数据集进行分析,我们会遇到一些挑战,因为数据似乎有缺失。准确地说,并非数据缺失,而是我们最初使用的文件中缺少某些信息。
例如,我最初的目标是回答几个问题,并生成一份精彩的LinkedIn帖子。ChatGPT生成了报告标题、选定的问题以及建议的分析方法。当我让它继续分析时,它确实生成了分析结果,但出现了一个有趣的情况:当我查看数据时,我看到的是按job_id(职位ID)统计的最高薪工作。然而,job_id只是一个唯一的标识符,对我们来说并不直观。我们更想知道的是“大学教授”这类可读的职位名称及其薪酬中位数等信息,但当前数据无法直接提供。
在这个数据集中,有多个独立的文件。我的直觉是,其中一个文件可能包含能与job_id关联起来的信息,从而找到我们需要的可读数据。
引导ChatGPT识别关联
因此,我将开始逐步为ChatGPT提供不同的数据部分,观察它是否能识别出可以进行关联的内容。请注意,我并没有告诉它具体怎么做。我将其作为一个探索性示例来展示。显然,如果你明确知道哪个文件有哪个ID以及它们之间的关系,你可以同时上传这两个文件并解释关系。但神奇之处在于,当你在多个文件间进行探索性分析时,ChatGPT可以帮助你识别出需要进行连接的地方。
我首先提供了一个文件(job_industries.csv),但它并不完全符合需求。ChatGPT注意到其中有job_id,但它关联的是行业信息,这对我来说还不够。我不仅想知道职位关联的行业。
于是,我返回去,将数据集中所有的文件一次性提供给了ChatGPT,并询问:“有了这些额外数据,我们能找出职位的名称吗?”
以下是ChatGPT对每个文件的分析:
industries.csv:包含industry_id(行业ID)。companies.csv:包含company_id(公司ID)。benefits.csv:包含job_id。job_skills.csv:包含job_id和skill_abbreviation(技能缩写)。skills.csv:包含skill_abbreviation和skill_name(技能名称)。
接着,它提出了后续步骤:我们可以使用job_skills.csv链接到job_id,然后将skills.csv中的技能缩写映射为技能名称。最后,我们可以将其与行业信息结合起来。这样虽然可能得不到确切的职位标题,但可以得到职位所需的技能和所属行业。
执行连接与结果解读
当我们运行这个分析后,得到了更有趣的结果:最高薪工作(附带行业和技能)。现在我们可以看到,例如“软件开发与销售”、“软件开发与市场营销”。这对我来说很有道理,我预计企业软件销售如果业绩出色,可能是一个非常赚钱的行业,从业者也能获得丰厚报酬。此外,列表中还有法律相关职位。这一切看起来都合理。
但请注意ChatGPT所做的事情:它基本上跨越多个文件执行了连接操作。它是如何做到的呢?
- 通过数据样本匹配:它可以查看
job_id的数据样本,并通过比对其他文件中的样本,发现相同的ID出现在多个地方,从而推断这很可能是一个唯一的标识符,而非随机数字。 - 通过一致的列名:如果多个文件中都有名为
job_id的列,它可以找到并链接它们。 - 通过多级关联:在本例中,它实际上执行了更复杂和高级的操作:它将
job_id链接到技能和行业,然后通过技能缩写进一步链接到具体的技能名称。这相当于执行了多次“跳跃”来完成这次连接。
验证与责任
ChatGPT告诉了我它将如何操作,这在它开始解释如何连接数据时非常重要。你需要审视这些解释,并确保其合理性。它可以帮助你发现跨文件的关联,即使你事先并不知道这些关联。它基本上可以假设可能的关系。
然而,最终,你仍然需要进行跟进和验证。仅仅因为看起来正确、列名相同或数值接近,并不意味着实际情况就是如此。ChatGPT可以帮助你推断可能性,但你需要通过查找数据的真实来源来确认这些关联是否确实如我们所想。你有责任跟进并确保这些被提议的关系在本质上是真实正确的,即使表面看起来合理。
核心方法与注意事项
关键方法是,你可以一次性在提示词中上传和附加多个文件,然后让ChatGPT开始探索并解释不同ID标识符和列之间的关系,以及如何利用它们来连接数据。它能完成其他非常复杂且有时令人惊讶的操作。
但请始终记住,验证ChatGPT的提议是否正确是你的工作。
总结

本节课中,我们一起学习了如何使用ChatGPT进行跨文件数据合并与分析。我们了解到,通过提供多个相关文件,ChatGPT能够帮助我们发现数据间的潜在关联,执行多级连接操作,从而整合分散的信息以获得更深入的洞察。同时,我们强调了验证分析结果的极端重要性,确保自动化工具提出的数据关系在业务逻辑和实际情况中是真实成立的。这结合了AI的高效探索与人类的关键判断。
005:通过提问让ChatGPT协助调试数据分析问题 🔍

在本节课中,我们将学习如何利用ChatGPT来协助我们发现和调试Excel数据分析过程中的潜在问题。我们将通过一个具体的案例,了解当分析结果出现矛盾时,如何通过向AI提问来定位数据中的异常、冗余或不一致之处,从而确保分析的准确性和可靠性。
上一节我们介绍了如何利用ChatGPT进行多文件数据关联分析。本节中,我们来看看当分析结果出现矛盾或疑问时,如何通过提问来引导ChatGPT帮助我们进行调试。
作为主导整个分析过程的人类,你需要持续思考:这些数据合理吗?它们是否通过了“嗅觉测试”或“合理性检查”?当AI工具让你分析得更快时,你的职责就是更加专注于数据本身。你不可避免地会发现数据中的差异、问题或AI产生的意外结果。
这时,我们可以利用AI来协助我们理解问题可能出在哪里。让我们通过一个职位分析的例子来看具体操作。
我已经让ChatGPT完成了初步分析。我们通过关联多个文件,加入了行业名称和所需技能信息,现在得到了一份看起来不错的结果。我们得到了“最高薪职位(含行业和技能)”的列表,例如软件开发与市场营销、软件开发与销售,还有一些法律相关职位。这些看起来都符合高薪职位的预期。
但在紧接着的“最低薪职位(含行业和技能)”分析中,我们却看到了“软件开发与销售”和“软件开发与业务拓展”等条目。我刚刚才在最高薪职位中看到了“软件开发与销售”。这从整体上看似乎有问题。是软件销售职位真的同时出现在最高薪和最低薪列表中,还是底层数据存在某些问题?
当然,这可能与可变薪酬等因素有关,但我希望深入挖掘并真正理解它。也许数据中存在一些我们尚未发现的问题。
每当你遇到此类问题时,我们能做的一件非常棒的事情就是提问。事实上,在数据分析中,提问是我们能做的最有力的事情之一。与其立即纠结于查看它生成的代码或其他内容,我们通常更愿意退一步,提出问题:为什么会这样?这难道不奇怪吗?然后看看是否存在潜在的解释或需要我们深入研究的差异。
因此,我在这段对话中进行了追问:“最高薪和最低薪职位都出现在软件领域,这似乎很奇怪。请查看数据,看看你是否能发现分析中的任何错误,或者我们可能需要考虑的因素。” 这确实是一项令人难以置信的能力,即深入数据内部,尝试发现可能存在的问题。问题可能是什么?
当然,你可以自己去做这件事,我也鼓励你这样做。但通常情况下,获得一个关于可能出错原因的起点会很有帮助。ChatGPT回复了,并注意到一些重要问题:
以下是ChatGPT识别出的几个关键问题:
-
重复的职位条目与不同的薪资值
- 问题识别:多个职位ID多次出现,且薪资值相同或非常相似。这表明存在数据冗余,同一职位可能因技能或行业的细微变化而被多次列出。
- 对分析的影响:重复条目可能扭曲了平均值和范围计算,尤其是年薪计算。
-
薪资数据中的异常值
- 问题识别:存在最高年薪约200,000美元的职位,但最低年薪异常低,例如10,000美元。这表明要么是数据录入错误,要么是像咨询类职位这样薪资波动很大的角色,其薪酬严重依赖于绩效或工作时间。
-
薪酬周期不匹配
- 问题识别:一些按小时计薪的职位可能与按年薪计的职位进行了直接比较,从而导致错误的洞察。这将是一个大问题。AI可能假设只需要查看薪资列并计算特定列的最大值和最小值。但实际上,存在不同类型的薪资。现在我们必须以某种方式进行标准化,因为我们不能直接将时薪(比如很高的500美元/小时)与年薪(比如200,000美元/年)直接比较。
现在,ChatGPT真正在帮助我们建议:我们可以采取哪些不同的做法。
以下是ChatGPT提出的改进建议:
- 移除重复项:排除重复的条目。
- 区分时薪和年薪:这是一个非常有趣的建议,我需要确定如何处理。是希望为时薪和年薪设置单独的类别,还是希望以某种方式将它们标准化?
- 处理异常值:我们是否要剔除异常值,以防它们只是数据录入错误的例子?
现在,它赋予了我们审视分析、对其提出质疑的能力。“软件领域同时出现最高和最低薪资,这真的合理吗?” 然后,它可以提出假设并识别分析中的潜在错误。
这非常有价值,因为作为人类,很多时候很难发现这类问题。因此,拥有一个可以查看数据、我们可以从高层次出发(“这看起来可能不太对劲,帮我找出原因”)的伙伴,然后它可以去假设可能的原因,我们再据此去验证。这真的是一个问题吗?也许不是。但如果是,它帮助我们发现了这些问题。而发现我们分析中的漏洞和缺陷往往是最困难的事情之一。
现在,这让我回到一个非常重要、需要强调的点。
作为人类,AI将帮助你实施分析,帮助你发现分析中的漏洞或问题。这在很多情况下将帮助你更快地推进。
你的目标不是节省时间,而是进行更好的、更彻底、更扎实、更深思熟虑的分析。 因此,为了实现这个目标,你因为AI能瞬间生成代码(例如分析平均薪资和最高薪资)而节省下来的时间,应该被投资于以下方面:
以下是利用节省的时间提升分析质量的关键方法:
- 提出大量问题:对自己、对他人、对ChatGPT提问。“软件领域同时出现最高和最低薪资,这真的合理吗?” 提问是帮助梳理是否存在问题的非常有效的方式。
- 对结果进行合理性检查:尽可能多地进行检查。“那里列出的最高薪资合理吗?是10亿美元吗?如果是,那可能不合理。是负数吗?那也可能不合理。” 进行各种基本的合理性检查,确保结果正确。因为你正在腾出时间来进行更好的分析,更彻底地检查,确保在依据它做出决策之前它是正确的。
- 了解局限性:真正了解数据是否存在根本性的限制,限制了我们可以得出的结论。例如,我们知道这些数据中存在很多变异。也许只是有一些异常值或数据录入错误,就像它提到的那样。也许根本无法将这些时薪标准化并与年薪进行有意义的比较,这可能只是数据的局限性。
因此,提问是我们应该做的一件非常有力的事情。当我们使用ChatGPT时,我们应该不断提问、提问、再提问。因为我们将节省时间,但我们需要将其投资于确保我们的答案更好。
另一个原因是,如果你使用ChatGPT进行数据分析,你将面临非常高的审查标准。你需要确保你得到的结果比那些不使用它的人更好。通常,那些不使用AI的人会深陷于仅仅试图实施分析、完成一个版本的分析或报告的泥潭中,他们没有时间像你一样彻底——当你腾出这些额外的时间来深入挖掘并对你得到的结果提出大量疑问时。所以,请确保你利用节省下来的时间来获得更好的答案,以更周到的方式思考数据,更仔细地发现错误,并更快地识别问题和调试漏洞。

本节课中,我们一起学习了如何通过向ChatGPT提问来调试Excel数据分析中的问题。我们了解到,当分析结果出现矛盾时,可以引导AI检查数据冗余、异常值和数据标准化等问题。关键在于利用AI节省的时间,更多地投入到提出质疑、进行合理性检查和理解数据局限性上,从而做出更扎实、更可靠的数据分析。
006:Excel数据分析的可追溯性与可复现性

在本节课中,我们将探讨生成式AI如何帮助我们构建更值得信赖的数据分析,并重点解决数据分析中的可追溯性与可复现性难题。
生成式AI最令我兴奋的一点在于,我认为它能帮助我们获得比当前通常做法更值得信赖的数据分析结果。
这听起来可能有些反直觉。如果你与大多数人交谈,他们的普遍假设往往是不信任AI。AI会产生幻觉、编造信息、误解或曲解数据,总是犯各种错误。然而,我认为这恰恰是一个巨大的机遇。因为你知道还有谁总是在做这些事情吗?是人类。人类也会产生类似幻觉的错误,并时常误解各种事情。
当我们开始处理数据时,我认为这是一个非常普遍的问题。尤其是我们处理的数据量越大,就越容易犯错而不自知。我们回顾一些做过的分析,例如,处理多个文件,试图理解它们如何关联。我们可能不完全了解数据来源,不完全理解列之间的关系,也可能没有彻底思考所有的合理性检查。
而AI可以帮助我们解决这个问题。但有一个特别巨大的机遇,也是本讲的核心,我认为AI能真正帮助我们。那就是:最大的问题不在于我们使用的工具。数据的核心问题在于,我们进行的分析往往难以被他人复现。我们没有以一种便于他人理解的方式记录数据和整个分析过程。我们经常得到的是一个塞满复杂公式的电子表格,但完全不清楚这些公式是如何组合的,其中是否存在错误。事实上,我们知道这些公式和分析中时常存在错误,并且往往要到很久之后才会被发现。
可复现性是一个亟待解决的重要问题。我们如何确保在完成分析后,其他人能够重新运行、检查并验证其合理性?他们需要能够理解分析的细节,并理解可追溯性:数据从何而来?如何使用?如何筛选?如何整合?
我经常看到的情况是,你拿到一份演示文稿,其中包含一张大图表。所有人都想当然地认为那张图表或分析是正确的。我们从不质疑是否应该检查它。而如果我们决定检查并想跟进理解其构成,这通常非常困难。我自己深有体会,因为我做过包含AI内容的演示。很早我就学到了重要的一课:当我们没有记录所有这些信息时,一旦有人提出问题,指出图表或数据中可能存在的疑点,我们就会束手无策,因为我们无法回溯并确认那是否真的是一个问题。
对于生成式AI,我们通常以对话的形式进行思考和工作。我认为,不幸的是,对话虽然是呈现和解决问题的一种好方式,并且如果保存下来,可以包含许多重要的上下文信息用于追溯,这确实很有价值。但我认为我们可以做得更好。
接下来我将展示如何做到这一点。
那么,我们如何使用ChatGPT来解决这个可追溯性和可复现性问题呢?一种方法是保存我们进行此类分析时的所有对话记录。
但由于工具本身的一些限制,我不建议你采用这种方式。我们有更好的方法。

现在,让我们来看看如何利用ChatGPT开始解决数据分析中的可追溯性和不可复现性问题。
007:创建数据分析复现包以增强可信度 📦

概述
在本节课中,我们将学习如何利用ChatGPT为我们的数据分析工作创建一个“复现包”。这个包将包含分析的所有关键信息,让他人能够验证、复现并理解我们的工作过程,从而极大地提升分析结果的可信度和透明度。
构建复现包的必要性
上一节我们介绍了如何利用ChatGPT进行数据分析。本节中我们来看看如何确保这些分析是可追溯和可复现的。我们希望在每次分析结束时,都能生成一个清晰的记录,说明使用了哪些数据、进行了哪些操作,以及可能存在哪些问题。
生成可追溯性文档
以下是创建复现包的第一步:生成一份全面的可追溯性文档。我们向ChatGPT发送一个提示,要求它总结整个分析过程。
提示示例:
创建一个可追溯性文档,确保他人能够:1. 了解使用了哪些数据;2. 知道分析是如何执行的;3. 识别有效性威胁(即分析中可能出错的地方)。我们需要一份让他人能够复现分析并了解其局限性的指南。
ChatGPT将根据对话历史生成一份文档,通常包含以下部分:
- 数据源与描述:列出使用的文件及其用途。
- 数据准备与清洗步骤:例如,过滤掉极端的薪资值或低于最低工资标准的记录。
- 分析步骤:回顾分析过程中提出的问题和执行的操作。
- 有效性威胁:识别分析中可能存在的错误或假设。
- 复现指南:解释重新运行此分析所需的步骤。
生成这份文档的成本极低。你甚至可以提供一个理想文档的样本,让ChatGPT按照相同的格式和章节生成新文档,从而获得更佳效果。
保存文档与代码
一旦我们拥有了这份文档,就需要将其保存下来。
1. 保存为README文件
我们首先将可追溯性信息保存为一个Markdown格式的README文件,这是一种常见的、易于阅读的格式化文本文件。
提示示例:
将可追溯性信息保存为 readme.md 文件。
ChatGPT会生成文件并提供下载链接。
2. 捕获并保存分析代码
在分析过程中,ChatGPT会编写并执行Python代码。我们需要捕获这些代码,以便他人检查和重新运行。
提示示例:
现在,为每一项分析和可视化创建一个独立的Python脚本,该脚本能够执行分析并生成可视化结果。脚本可以假设所使用的文件与脚本位于同一目录下。请保存每个Python文件,并使用能标识其相关分析的前缀来命名。同时,请输出一个表格,列出分析内容、对应的Python脚本文件名以及该脚本功能的一句话描述。
这个步骤会为对话中的每一项分析生成一个独立的、可执行的Python脚本文件,并创建一个索引表格来说明每个文件的作用。
3. 创建脚本索引文件
接下来,我们创建一个总览文件来索引所有生成的代码。
提示示例:
创建一个 scripts.md 文件,其中包含列出所有脚本及其功能的表格,并为每个单独的脚本设置一个章节,说明其作用。
这样,我们就拥有了一个所有已创建代码及其功能的“主索引”。
4. 记录数据来源
由于是我们自己上传的数据,ChatGPT并不知道原始来源。因此,我们需要创建一个文件来记录数据的元数据。
提示示例:
创建一个名为 sources.md 的文件,说明所有数据均可从 [此处填入URL] 下载。
你可以在此记录数据来源的任何信息,例如数据库查询、文件共享链接或数据获取时间。
打包所有内容
至此,我们已经创建了README文件、脚本索引、多个Python脚本文件以及数据来源文件。真正的强大之处在于将它们与原始数据一起打包。
提示示例:
现在,将 Readme、Sources、Scripts 文件以及原始数据合并到一个我可以下载的zip文件中,以便他人能够复现该分析。
ChatGPT会将所有生成的文件和原始数据打包成一个ZIP文件供你下载。解压后,你会看到一个包含以下内容的完整包:
README.md:分析描述、步骤和有效性威胁。sources.md:数据来源说明。scripts.md:所有代码脚本的索引和描述。- 多个
.py文件:可独立运行的Python分析脚本。 - 原始数据文件(如CSV)。

总结
本节课中我们一起学习了如何利用ChatGPT创建数据分析复现包。通过生成可追溯性文档、保存分析代码、记录数据来源,并将所有内容打包成一个独立的ZIP文件,我们极大地提升了数据分析工作的透明度、可信度和可复现性。这种方法将分析过程从封闭的工具或复杂的公式中解放出来,使其成为任何人都可以检查、验证和理解的独立成果,从而在数据科学实践中树立了新的标准。
008:利用ChatGPT实现数据转换与筛选方法 🧠➡️💻

在本节课中,我们将学习ChatGPT如何将我们的目标和意图“翻译”成计算指令,从而实现数据转换与筛选。我们将重点探讨两种核心方法:基于知识/推理的方法和基于程序的方法,并理解它们各自的适用场景与限制。
从目标到计算:ChatGPT的“翻译”能力
当我们以特定方式使用ChatGPT时,其神奇之处在于它能够将我们的目标、陈述和想要达成的效果“翻译”成计算指令。这意味着我们无需费心研究如何编写宏或Python代码来实现目标。我们只需用高层次的语言表达意图,ChatGPT便能将其转化为具体的计算过程。
这背后的原理与模型的架构有关。这些模型最初基于Transformer架构,该架构最初就是在翻译任务的背景下构建和测试的。本质上,ChatGPT正在将我们想做的事情“翻译”成计算。
在处理数据时,特别是来自Excel或CSV文件的数据,我们可以利用ChatGPT来转换和筛选数据。我们只需告诉它我们希望通过转换或筛选实现什么目标,它就会想办法实现。
两种核心实现方法
ChatGPT将我们的目标转化为计算主要有两种方式,我们将详细讨论这两种方式,并理解它们的区别以及各自的适用场景。
从高层次看,这两种方式分别是:
- 基于知识或推理的方法
- 基于程序的方法
这两种方式本质上是互斥的,ChatGPT会选择其中一种来执行。当然,它也可能将两者串联起来,例如从一种方法开始,以另一种方法结束。理解何时使用哪种方法至关重要。
基于知识/推理的方法 🧠
我们首先来看基于知识或推理的方法。这种方法的核心思想是:我们将数据放入提示词中,然后将其输入给模型(如ChatGPT),模型会输出处理后的数据。
在这个过程中,模型本身在执行计算和推理。这对于某些类型的任务非常有效,但并非适用于所有任务。
以下是这种方法的一个关键特点,我们将在最后详细讨论:请注意,在输入阶段,数据量很大,但输出阶段数据量很小。这是因为模型可以接收大量信息,但每次只能输出少量信息。通常,模型的输入容量是输出容量的100到300倍。这意味着我们总是要处理这种输入与输出的不对称性,这会影响我们能用模型做什么,尤其是在处理这类基于知识的任务时。
示例:为数据集添加新列
以下是一个基于知识/推理任务的示例。我给了ChatGPT一个数据集样本,其中包含多个国家及其主要作物和文化。我提示ChatGPT为每一行(即每个国家)添加一个新列,内容是“该国最受欢迎的菜肴之一”。
这是一个典型的基于知识的转换任务,如果使用传统代码或宏来实现会非常困难,甚至不可能,除非你事先拥有每个国家的菜肴列表。而在这里,我们要求模型“凭空”创造出来,这就像聘请一位世界文化专家来完成这项任务。
ChatGPT处理后的结果是为每个国家添加了一道菜肴,例如美国-汉堡、印度-印度香饭、墨西哥-塔可、法国-可颂等。
适用场景与优势
在以下情况中,这种方法非常有效:
- 任务需要深度思考:需要人类级别的推理能力,难以用代码或宏简单实现。
- 执行机器学习类任务:例如,可以进行情感分析(为每条客户评论添加“积极/消极/中性”标签),或基于用户历史购买记录进行产品推荐。
你可以将这个思路扩展到任何场景:只要你有行和列的数据,就可以要求模型基于现有信息,通过复杂的推理为每一行添加一个新列。这可以是基于知识的创造(如同雇佣人类专家),也可以是传统的机器学习任务(如分类、预测、推荐)。
限制与注意事项
然而,这种方法存在重要限制:
- 输入输出不对称:如前所述,模型能接收大量数据,但输出有限。如果你的数据集有10000行,模型可能都能“看到”,但可能只能输出50行,因为输出受令牌窗口限制。你需要实验并可能将数据分块处理。
- 可能产生幻觉:模型可能会“捏造”信息。就像你给一个人做测试,遇到不会的题目他可能会猜。因此,务必检查输出结果。你可以通过提示词技巧来缓解,例如指示模型:“如果某行信息不足以完成请求,则在相应位置填入‘N/A’(不适用)”。
- 不适用于需要高精度或复杂数学运算的场景:这种方法不适合处理需要完美数值精度、复杂公式或数学计算的任务。它更适用于处理与文化、艺术相关的内容,或进行句子改写、SEO优化等基于知识的任务。
基于程序的方法 💻
另一种转换方法适用于需要数值精度和处理大量数据的场景,即基于程序的转换。我们之前已经做过很多这类转换,只是没有意识到。
工作原理:代码生成与执行
当你使用ChatGPT的“高级数据分析”模式(名称可能变化,但功能不变)来处理数值型数据任务时,它并不会像上一种方法那样将数据喂给模型本身。相反,它会编写代码(通常是Python代码)来执行任务。
ChatGPT会推理:“我能否编写Python代码来实现用户的目标?”然后,它将我们的意图翻译成代码,用我们的数据作为输入来执行这段代码,并产生输出。
示例:数值格式转换
例如,假设我有一个包含“最高薪资”列的数据集。我可以提示:“请将‘最高薪资’重新格式化为以千为单位表示(例如,1.0 代表 1000)。”
ChatGPT会返回转换后的数据,添加了一个名为“最高薪资(千)”的新列,并妥善处理了非数值情况。它是如何做到的?它编写并执行了类似下面的Python代码来实现转换:
import pandas as pd
# 假设 df 是包含‘Max Salary’列的DataFrame
df['Max Salary (Thousands)'] = df['Max Salary'] / 1000
# 处理非数值情况
df['Max Salary (Thousands)'] = pd.to_numeric(df['Max Salary (Thousands)'], errors='coerce')
优势与特点
这种方法的优势在于:
- 数值精度高:代码执行是确定性的,具有可重复性和可预测性。
- 可处理数据量大:由于执行的是外部代码,理论上可以处理非常大的数据集,通常不会遇到在模型内部处理时的输出限制。
- 可审查与调试:你可以查看生成的Python代码,进行检查和验证。
限制与考量
当然,这种方法也有其局限性:
- 推理能力有限:代码本身的智能程度无法与模型内部的推理能力相比。模型可以很聪明地编写代码,但代码能实现的功能有固有边界。例如,你无法让它编写代码来“过滤掉所有可能是蔬菜或蔬菜隐喻的文本”,但让它“将所有数值除以100”则很容易。
- 代码长度限制:如果任务极其复杂,导致生成的Python代码本身超过了输出令牌限制(例如超过1000个令牌),这种方法也会失效。
- 可能选错方法:有时,我们想要进行基于知识的转换,但数据集太大,无法放入模型;或者模型错误地尝试用编写代码来解决一个本应靠推理完成的任务。这时,我们需要手动干预,例如将数据分块,或明确提示它“不要用Python代码,用你的知识来回答”。
方法选择与实践策略
在实际操作中,我们需要决定使用哪种转换方法。以下是一些指导原则:
- 倾向于使用基于程序的方法:当你需要进行程序化转换或筛选,尤其是涉及数值计算、需要高精度和可重复性时,应优先考虑这种方法。
- 在特定情况下使用基于知识的方法:当你处理的是小规模数据集,且任务需要人类级别的知识、文化理解或复杂推理(如创意生成、文本分析、情感判断)时,这种方法非常强大。
有时,我们会遇到混合情况:任务需要知识推理,但数据量太大。这时,我们可能需要手动将数据集分成多个小块,分批提交给模型处理,或者引导模型进行增量式处理。
总结
本节课我们一起学习了ChatGPT实现数据转换与筛选的两种核心方法。
- 基于知识/推理的方法:模型直接处理数据并运用其内部知识进行推理,适用于需要创意、文化理解或复杂逻辑判断的小规模数据任务,但需警惕其输出限制和“幻觉”可能。
- 基于程序的方法:模型通过编写并执行代码(如Python)来处理数据,适用于需要高数值精度、处理大量数据、可重复验证的标准化转换与筛选任务。

理解这两种方法的原理、优势与局限,能帮助我们在实际工作中更高效、更准确地利用ChatGPT来增强数据分析能力,在智能推理与程序化精确处理之间做出最佳选择。
009:从非结构化源提取结构化Excel数据 📊

在本节课中,我们将学习如何利用ChatGPT从各种非结构化数据源(如原始文本、照片等)中提取信息,并将其整理成可用于Excel分析的、格式规整的结构化数据。
概述
传统的数据分析通常依赖于已经结构化的数据。然而,现实世界中的大量信息,如社交媒体帖子、产品评论、会议白板笔记或现场照片,最初都是非结构化的。手动整理这些数据既耗时又容易出错。本节将展示如何通过巧妙的提示词工程,引导ChatGPT自动完成这项提取和格式化工作,从而高效地创建数据集。
从原始文本中提取数据
上一节我们探讨了ChatGPT与Excel的基本交互。本节中,我们来看看如何从一段杂乱的原始文本中提取出清晰的结构化数据。
以下是一个具体的操作示例。假设我们从LinkedIn动态中复制了一段包含多个帖子、作者、发布时间和杂乱格式的文本。
操作步骤:
- 将原始文本粘贴到ChatGPT中。
- 使用清晰的分隔符(例如
---)将指令与数据分开。 - 给出明确的输出格式指令。
核心提示词结构如下:
{你的原始数据,例如LinkedIn帖子文本}
---
请将此转换为CSV格式,格式为:姓名, 帖子一句话总结, 主题(一个词)
插入行...
...
在这个提示词中:
姓名:这是一个简单的列,指示模型直接提取发布者的姓名。帖子一句话总结:这是一个更丰富的列描述,它要求模型阅读并理解帖子内容,然后生成一句摘要。这展示了列名可以是指令本身。主题(一个词):这里的括号(一个词)是给模型的额外提示,用于约束输出,确保结果简洁一致。插入行...:这是一个提示工程技术,它告诉模型“请根据上述格式,用提取的数据填充后续行”。这类似于给人类一个填空模板。
执行后,ChatGPT会输出类似以下的CSV格式结果,可以直接导入Excel:
姓名,帖子一句话总结,主题
Alan Carnes,邀请高等教育界朋友讨论生成式AI,生成式AI
Jane Doe,分享关于数据可视化最佳实践的新见解,数据可视化
从图像中提取数据
我们不仅可以从文本中提取数据,ChatGPT的多模态能力使其也能“看懂”图片并提取其中的信息。这极大地扩展了数据源的范畴。
以下是几种常见的图像数据提取场景:
1. 截图信息提取
你可以对屏幕内容(如一篇具体的社交媒体帖子、一个网页段落)进行截图,然后使用与处理文本类似的提示词,要求ChatGPT识别图片中的文字并按照指定格式输出。
2. 实物照片信息提取
你可以拍摄现实世界的物体。例如,拍摄一张办公桌的照片,然后提示:“请列出我桌面上所有的物品,每行一件,格式为:物品名称, 估计数量, 类别”。
3. 手写或白板内容数字化
在会议或课堂中,经常会将想法写在白板上。你可以拍摄白板照片,然后让ChatGPT将其内容转换为表格。例如,对于一张写有评分标准的白板照片,可以使用提示词:“请将此转换为CSV格式,格式为:评分项目, 描述, 百分比(小数)”。
重要提示:
虽然这个功能强大,但目前仍有局限性。模型在处理包含大量(例如上百个)项目的复杂图片时,可能会产生“幻觉”(即编造不存在的内容)。因此,它更适用于处理项目数量有限、内容相对清晰的场景。对于关键数据,务必进行人工抽查验证。
应用场景与最佳实践
我们已经看到了从文本和图像中提取数据的方法。这些技术可以应用于众多领域,将难以处理的非结构化信息转化为可分析的数据。
典型应用场景包括:
- 社交媒体分析:从品牌帖子下的评论中提取情感倾向和关键话题。
- 市场调研:将收集到的开放式用户反馈文本分类并总结。
- 内容管理:整理从不同文档、邮件中提取的会议纪要或项目要点。
- 库存初盘:通过拍摄货架照片快速生成初步的库存清单(适用于小规模场景)。
使用时的最佳实践:
- 明确列定义:在提示词中,清晰定义每一列。对于需要复杂处理的列(如总结、分类),在列名中直接描述任务。
- 提供输出示例:如果格式复杂,可以在提示词中给出1-2行期望的输出示例,这能显著提升模型输出的准确性。
- 结果校验:始终对输出结果进行抽查,特别是涉及数字或关键分类时。可以结合Excel的筛选、统计功能进行快速检查。
- 分步处理:如果数据量很大,尝试分批处理,而不是一次性让模型处理所有内容,以提高准确性。
- 利用其优势:这项技术在处理需要人类阅读理解(如总结、情感判断)而非绝对数值精确的任务上尤为高效,能节省大量人力。
总结

本节课中我们一起学习了如何利用ChatGPT作为强大的“数据提取助手”。我们掌握了从非结构化的原始文本和图像中,通过设计精炼的提示词,提取出规整的结构化数据(CSV格式)的方法。关键点在于:提供清晰的原始数据、定义带有详细描述的列结构、并使用模板化的提示引导模型完成填充。虽然目前技术对于大规模复杂图像的识别仍有局限,但在处理文本摘要、评论分类、会议记录整理等场景中,它已经成为一个能极大提升效率的实用工具。记住,将结果导入Excel后,你便可以运用各种分析功能,对这些新创建的数据集进行深度挖掘了。
010:用数据讲故事 📖

概述
在本节课中,我们将学习如何利用ChatGPT,将Excel数据分析的结果转化为一个引人入胜的故事。数据分析的最终目的常常是为了沟通、说服和辅助决策。我们将探索如何借助生成式AI的强大叙事能力,围绕数据构建有说服力的叙述,并确保故事的准确性,最后将其打包成易于展示的格式。
数据叙事的重要性
我们通常不会将“讲故事”视为数据分析的一部分。然而,我们进行数据分析的原因,往往是为了进行某种形式的演示、讲述某种故事,以帮助他人做出决策。我们需要解释数据的背景、重要性,以及我们已完成工作的相关性和价值。
有趣的是,生成式AI在叙事方面表现得极为出色。当我们将ChatGPT与Excel或CSV数据结合时,其一项隐秘的超能力就显现出来:它不仅可以帮助我们深入探索数据,还能帮助我们思考如何利用数据和分析结果,讲述一个至关重要的故事。因为数据本身,如果仅仅是一堆可视化和数字,可能无人问津。我们需要激励他人,让他们明白为何应该关注这些数据。
构建叙事:从提示开始
将数据分析与生成式AI讲故事结合,有时会让人望而生畏。我们将展示如何以一种有效且安全的方式来实现。我们的目标不是让AI编造关于数据的虚假故事,也不是让它捏造事实和数字。我们的目标是帮助生成围绕数据的叙述,然后回头进行额外的分析,以确保故事的准确性。
我们将继续分析一个关于职位的数据集。我们将开始提示ChatGPT,让它帮助我们围绕数据开发一个故事,并集思广益可能的叙事角度。考虑到大学背景,我们将构建一个与大学相关的故事。我们将利用这份职位数据,向他人讲述基于此数据的世界正在发生的重要事情。
以下是我们给ChatGPT的提示:
让我们专注于讲述“为何跨学科项目能帮助学生获得高薪职业”这个故事。帮我构建一个引人入胜的叙述,然后在需要插入已创建的可视化图表的地方,使用类似“插入XYZ可视化”的占位符。确保将关键统计数据用粗体标出。
这样做的目的是:我不希望它重新生成所有可视化图表,而是希望它专注于撰写围绕图表的文本和故事。无论它引用什么统计数据,我都希望用粗体标出,这样我既能发现它们并进行事实核查,确保其正确性,也能在叙述中强调数据本身,而不只是一堆AI生成的内容。
生成叙事内容
ChatGPT根据提示生成了叙述,标题为“通往繁荣之路:为何跨学科项目为学生的高薪职业做好准备”。这个灵感的来源是观察到“市场营销”与“软件”结合是一个独特且高薪的职位。因此,我想讲述一个故事:跨学科工作非常重要,因为它能让你在需求旺盛的两个领域的交叉点上成为独特的专家,从而更具市场需求。
它生成的叙述开头如下:
在当今的就业市场中,对跨学科技能的需求比以往任何时候都大。学生不能再仅仅依靠单一领域的学习来保证职业成功。我们对职位薪资数据的分析揭示了一个强有力的见解:高薪职位越来越集中在那些需要结合多个学科技能的岗位上。
接着,它开始引用我们分析中的数据,例如:
例如,软件开发领域内的市场营销职位,平均薪资超过20万美元。这证明了将分析性、战略性的专业知识与创造力相结合的价值,这是一种很少有单一学科项目能完全培养的技能组合。
然后,它继续提供其他观点:
通过鼓励学生整合市场营销、信息技术和数据分析等领域的技能,大学不仅是在帮助他们获得高薪工作,也是在培养他们在行业内领导和创新的能力。
它开始围绕数据讲述故事,并帮助填充内容。例如,在讨论薪资差异时:
我们分析中的一个显著发现是某些领域内存在巨大的薪资差异。例如,IT服务领域的市场营销职位,薪资范围从7万美元到近30万美元不等。这种巨大的差距表明,通常通过跨学科培训发展起来的高级专业技能,可以将员工推向薪资范围的高端。
它还在文中设置了占位符,提示我们可以插入支持此故事的图表。叙述继续讨论了将计算机科学与商业战略结合,或将市场营销与数据分析结合的价值。
验证叙事:确保准确性
当我们开始塑造故事时,接下来要问自己的问题是:我们构建的这个叙述是真实的吗?我们常常得到这些美好的叙述,并希望它们是真的。生成式AI的一个美妙之处在于,它允许我们回过头进行更彻底的挖掘,验证其真实性。我们可以非常快速地进行深入分析。
一旦开始构建叙事,我们可以向ChatGPT提出一个关键问题或指令:
我们可以在数据上运行哪些额外的分析,来支持我们的叙述,或者揭示它可能并不准确?
我们希望通过进一步测试底层数据、进行更深入的分析,来确保这个故事是真实的,而不仅仅是我们的一厢情愿或确认偏误。
ChatGPT回复了一系列可以进行的额外分析,例如:
- 技能组合与薪资分析:目标是识别哪些特定的技能组合与最高薪资相关。方法:按独特的技能组合对职位进行分组,并计算每个组合的平均薪资。
- 按行业和技能水平的薪资进展:目标是评估随着时间的推移,需要基础技能与跨学科技能的职位的薪资进展。方法:使用可用数据中的最小、中位数、最大薪资来近似估算入门、中级和高级薪资。
- 频率与薪资范围分析:等等。
因此,它不仅帮助我们塑造叙事、传达数据的重要性,还帮助我们退后一步,思考在讲述故事之前,如何通过更严谨的分析来确保我们所说的内容准确无误,或至少拥有更高的可信度。
打包叙事:以演示文稿为例
构建并验证了故事之后,我们可能需要考虑如何呈现它,例如制作一个PowerPoint演示文稿。这是一个有趣的实践,你可以进行各种变体。关键是将故事打包成某种格式,可能是网页、Markdown文档、视频脚本等。
我们将展示如何将其打包到PowerPoint中。具体做法是:将故事分解成多个部分(可以视为故事的各个段落)。我们通过指令让ChatGPT将叙述中由水平分隔线隔开的每个元素保存为单独的文本文件。这样做的原因稍后会明了。
拆分完成后,ChatGPT会提供一个链接供下载各个部分。接下来,我们上传希望使用的PowerPoint模板,并给出指令:
现在,逐个读取每个文件,并将文本作为幻灯片插入到附件的PowerPoint模板中。将文本放入“标题和内容”版式的幻灯片中作为内容。
我们是在指示它编写一个Python程序,读取每个保存的文件,将文件内容转换为幻灯片的内容,并指定使用的幻灯片版式。之前将故事拆分成独立文件的原因在于:如果将所有叙述文本直接写入代码中,生成的代码可能会因为过长而超出输出限制。通过让代码从外部文件读取内容,我们将故事与代码分离,从而避免了这个问题。
ChatGPT会执行代码,读取每个文件,生成PowerPoint演示文稿,并提供下载链接。下载并打开后,可以看到它已将每个文件(即故事的每个部分)作为一张幻灯片的内容插入到“标题和内容”版式的幻灯片中。如果需要,我们还可以进一步优化,例如让AI同时填充幻灯片标题。

总结
本节课中,我们一起学习了如何利用ChatGPT为Excel数据分析赋予叙事力量。我们首先理解了围绕数据构建故事对于沟通和决策的重要性。接着,我们通过具体的提示词引导ChatGPT生成一个聚焦于“跨学科教育价值”的叙述框架。然后,我们强调了验证故事准确性的关键步骤,即利用AI建议并执行额外的数据分析来支持或修正叙事。最后,我们探索了如何将最终确认的故事打包成PowerPoint演示文稿等可交付成果,以便有效地传达给他人。通过结合数据分析与AI叙事,我们不仅能挖掘洞察,更能让这些洞察产生真正的影响。
011:将文档转化为可执行方案

在本节课中,我们将学习如何利用ChatGPT,将政策、程序等文档内容,快速转化为结构化的Excel电子表格方案。我们将看到,这不仅能极大提升原型设计的速度,还能激发我们构建更佳电子表格的创造力。
从文档到电子表格的构想
上一节我们探讨了ChatGPT与Excel结合的基础。本节中,我们来看看如何利用文档作为灵感来源,设计出符合特定要求的电子表格。
当你开始在Excel中使用ChatGPT时,我希望你思考如何用它来实现那些原本“不可能”的事情。它能将计算能力提升到新高度,让我们完成一些过去认为计算机无法胜任的任务。一个绝佳的例子是:我们开始构建Excel电子表格,但使用文档作为设计灵感的来源。我们可以手动阅读文档、思考、收集信息并构建表格,但我们希望更快地进行迭代和原型设计。我们希望花更多时间思考构建电子表格的各种不同方式和排列组合,从而得到一个出色的电子表格,而不仅仅是一个普通的表格。我认为,当我们开始思考利用文档来辅助设计电子表格时,ChatGPT就能帮助我们实现这一点。
那么,将文档转化为电子表格具体意味着什么?我将通过一些例子来说明,并希望能启发你以不同的方式思考如何结合使用ChatGPT和Excel,真正突破可能的边界。
实例:旅行费用政策文档
这是一个范德堡大学的旅行和商务费用政策文件,一个大约17到20页的PDF文档,其中列出了所有关于旅行费用的政策和规则。如果我想创建一个电子表格来跟踪这些信息,传统方法是阅读文档,尝试分类所有不同条目,然后手动构建电子表格。
但现在有一种新方法。我将把这个PDF文件上传到ChatGPT,并给出指令:设计一个符合此政策的、用于跟踪费用的Excel电子表格。
ChatGPT会读取政策内容,并开始构思由范德堡大学旅行和费用政策所启发的电子表格结构。例如,它会考虑业务类型、费用类型、业务目的等审批文档中可能包含的所有信息。然后,它会开始设计工作表,讨论输入验证等功能。最令人兴奋的是,它最后会问:您希望我为此电子表格创建一个原型吗?
这正是我们现在可以做的真正神奇的事情:快速原型设计电子表格。我们通过对话来构思这个电子表格应该包含什么、外观如何、结构怎样。并且,在任何我们觉得有趣的时候,都可以立即生成原型。回答“是,请创建Excel电子表格”,它就会生成一个表格并提供下载链接。
快速原型设计与迭代
这为我们提供了什么能力?它使我们能够快速原型设计,并思考电子表格中需要包含哪些内容、如何设计。很多时候,我们过于关注公式等内容,以至于可能直到为时已晚才意识到电子表格中遗漏了关键信息,或者存在更好的设计方式,比如是否应该拆分成多个工作表。
这种方法使我们能够基于真实的文档、真实的业务流程(无论是政策、程序、最佳实践还是清单)进行快速原型设计和构思。你可以给它任何你想要的文档,让它以此为基础进行快速原型设计。
然而,一个空的电子表格是“令人沮丧的”,因为很难感受它将如何被使用。所以,让我们来解决这个问题。在设计电子表格时,另一个令人惊叹的事情是,我们可以用它来帮助填充示例数据,以便更好地感受这个电子表格将如何工作。比起仅仅推理列的含义,查看数据并理解其是否合理要容易得多。
我只需在对话中跟进一句:你能用一些示例数据填充它吗? 它就会重新生成包含数据的电子表格。现在打开它,我就能看到示例数据。这看起来合理吗?是否正确?看到数据后,我对这个电子表格的感觉好多了。一个填充了数据的电子表格比空表更“令人愉快”,我也能更好地思考它是否有效,或者是否存在问题。
重塑设计以满足具体需求
但看着这个表格,我意识到这并非我真正想要的。我真正想要的是,作为一名个人旅行者,我需要一个电子表格来帮助我跟踪单次旅行。如何构建一个跟踪旅行的电子表格,同时确保我捕获了符合范德堡大学旅行和商务费用政策所需的信息?
这正是快速原型设计的优势所在。我可以说:重新设计这个工作表,使其适用于跟踪特定旅行的个人旅行者费用。 它会重新格式化整个电子表格。再次打开时,我得到了分开的工作表:一个“旅行详情”表,用于填写姓名、目的地、起止日期和业务目的(这是我提交费用报告所需的);另一个独立的部分用于跟踪所有个人费用,捕获提交费用报告所需的关键信息。
这使我能够快速原型设计、构思,并最终构建一个更好的电子表格。这就是我的目标:创建一个更好的电子表格。当然,我可以手动创建,但可能会遗漏政策的某些方面,花费更长时间,迭代次数也更少。而现在,我可以重塑、重新格式化、探索它应有的样子,而不会被已投入的工作和沉没成本所束缚。我可以快速思考设计,而它能帮助我将这些设计反映在我创建的Excel文件中。
利用AI的创意并保持控制
ChatGPT还能帮助我们集思广益,思考如何让电子表格变得更好。在最初的设计中,它提到了“输入验证”。这实际上是个非常好的主意,我自己平时可能不会想到要实施输入验证。既然它提出了这个好主意,我就应该采纳。
因此,我在对话中跟进:你能实现你提到的输入验证吗? 现在,我是在采纳它自己的想法,并让它将其反映在电子表格中。你可以想象自己拥有一位非常有才华的电子表格设计师,他提出各种实现想法,但最终你是决策者。他向你展示想法,你告诉他去执行。你也可以提出自己的疯狂想法让他实现,或者认可他的好主意并让他去执行。这正是我们在这里所做的。它会重新设计电子表格。
现在,当我返回表格并输入“机票”作为费用类型(这是有效的范德堡费用类型)时,一切正常。但如果我输入“零食”,它会立即提示:“S”不是有效的费用类型。它提出了实施输入验证的好主意,而我只需告诉它去实现这个好主意。我可以告诉它我的好想法,也可以受它的想法启发,然后告诉它我想要什么。但最终,我是电子表格的仲裁者,通过快速对话,不断演进这个电子表格,以捕获由政策启发的重要信息。
在这个例子中,输入验证是基于政策中列出的有效费用类型。我本可以自己阅读并提取所有有效类型,但更有效的方式是提出核心要求:我们需要输入验证。 至于具体类型列表是由我逐一识别,还是由AI提取,并不那么重要。最终,我会检查输入验证的实现是否正确,是否遗漏了某个类别。无论如何,我都会进行检查。即使是我自己阅读了所有类型,最后也需要复核。所以,我所做的只是加速设计和迭代过程,但严谨的检查始终是必要的。我们应该始终这样做。
拓展想象力:从政策到清单
我们还可以更富创造力地构思电子表格。它不一定只是直接反映费用跟踪。例如,如果我们想将政策转化为旅行者使用的清单,以便他们在电子表格中勾选确认自己遵守了所有相应规则,该怎么办?
我只需在对话中跟进:将旅行政策转化为旅行者在预订旅行时应遵循的清单。 它会返回一个包含一长串项目的清单。然后我可以接着说:好的,现在为它创建一个电子表格。 它就会将政策转化为清单,并在Excel中呈现出来。
这向我们展示了“文档作为快速原型设计来源”这一理念的力量之一:文档包含大量信息,我们一直在创建各种文档,但现在我们可以将它们转化为许多不同的东西。我可以将旅行费用政策转化为跟踪费用的工作表,可以基于旅行者视角进行设计,也可以将其转化为旅行者出行前的清单,或者任何我能想象到的、可以利用这份旅行和商务费用政策实现的事情。我现在可以在Excel电子表格中实现它们。我创造力的瓶颈仅在于我的想象力、创造力和批判性思维,而不再是我在Excel中输入或创建公式的能力。它解放了我们,让我们能够梦想更大,用Excel做更多事情。
它不会取代你的思考过程、灵感和批判性思维,也不会为你自动化一切,你仍然需要参与其中。但它解锁了我们用Excel做更多事情的能力。它使我们能够拿起那份旅行政策文档或任何其他文档,并将其转化为令人惊叹的东西,然后再转化为另一个令人惊叹的东西,让我们能够尽可能快速、稳健地在Excel中实现我们拥有的尽可能多的好点子。而这正是我们将要探索的各种方法。
总结

本节课中,我们一起学习了如何利用ChatGPT将文档(如政策、程序)快速转化为结构化的Excel电子表格方案。我们看到了从上传文档、生成原型、填充示例数据、根据具体需求重塑设计,到采纳AI创意并实施功能(如输入验证)的完整流程。更重要的是,我们认识到这种方法的核心价值在于解放创造力,将构建电子表格的瓶颈从技术操作转移到想象力与设计思维上,使我们能够基于同一份文档快速迭代出多种不同的、优秀的解决方案。
012:通过与ChatGPT对话设计和创建Excel电子表格

概述
在本节课中,我们将学习如何通过与ChatGPT对话来设计和创建Excel电子表格。我们将看到,将ChatGPT作为思考伙伴,可以帮助我们构思电子表格的结构、数据捕获方式以及计算逻辑,从而更高效地完成设计。
创建电子表格的方法有很多种,其中一种方式就是与ChatGPT进行对话。这是一种非常有效的方法,可以帮助我们思考电子表格应该如何设计。因为每当我们开始使用Excel时,最重要的事情之一就是我们的设计是否正确,我们是否真正思考过应该捕获哪些数据、如何捕获以及如何呈现这些数据。事实证明,聊天是一种非常有效的方式,可以帮助我们思考和构思实现这些目标的方法。
那么,让我们开始吧。前几天,我意识到我根本不知道自己喝了多少咖啡,但很可能喝得太多了。今天早上我就喝了很多。也许我应该开始记录一下。那么,如果我开始记录,我的电子表格会是什么样子呢?于是我说:“设计一个非常简单的电子表格,帮助我记录每天的咖啡消耗量。其中一列应该是已喝咖啡杯数的累计总数。”我想从视觉上思考一下,这会是什么样子。
为了让这个过程更有效,如果你是一个视觉型的人,你还可以要求它“格式化为表格”,以确保它以表格形式给出。我这里没有特别要求,但我很幸运,因为它直接设计成了表格。
我看着这个设计,觉得它看起来很不错。我有日期、时间和咖啡杯数列,还有我要求的累计总数。它还给出了解释,告诉我如何构建这个电子表格。所以,如果我想实现它,这里有对列的解释,以及如何创建累计总数公式,并且它引用了将会存在的单元格。
现在,我可以去思考如何构建它了。我认为这部分非常棒。因为当我构建电子表格时,我经常在思考数据。我也需要知道,为了实现我想要创建的不同列,我需要哪些公式。通常,当我思考时,很难知道这些公式是什么。但另一个非常棒的地方是,我告诉了它列要做什么,而它识别出需要进行计算才能使这一列成为可能。它告诉我,并将我的想法转化为计算。这是一个非常重要的概念,我们将看到,它可以将我们的高层次想法和思路转化为计算。一方面,它在设计数据的结构,将我们的目标和想法转化为我们需要捕获的数据结构;另一方面,它也将我们的想法和目标转化为计算。这对于我们能够与Excel和ChatGPT一起创造和完成惊人的事情将非常重要。
当然,一旦我们开始设计,我们就可以快速生成原型,进行实验、触摸和感受,以了解我们的设计是否正确。所以我接着说道:“好的,将其创建为Excel电子表格,并使用累计总数的公式。”于是它创建了电子表格,现在我有了一个示例电子表格。幸运的是,对于这个请求,我甚至没有要求示例数据。它可能自己领会了,意识到我喜欢有示例数据,因此它生成了一个带有示例数据的电子表格。如果你去看累计总数列,它是一个公式。它已经为我实现了这个简单的公式。
这是一个非常简单的例子,但它开始展示了我们如何利用这种方法的潜力。我可以回去说:“你知道吗,我只想要当天的累计总数。重新设计电子表格。我想使用条件格式,将任何我喝超过两杯咖啡的日子高亮显示为红色。”你看,我们可以如何开始思考我们想要什么,获得一个原型,查看它,思考如何改进它。然后我们回去,快速改进和迭代,使其变得更好,最终得到很棒的结果。
我们将看到,随着我们的想法变得更大、更好,我们将需要越来越多复杂的计算和目标来支持我们的电子表格。这对于累计总数来说很好。我们将看到的是,随着计算变得更加复杂,我们将无法一次性完成所有事情。我们将不得不专注于单个公式,并弄清楚如何表达它们,让ChatGPT以可管理的方式逐步构建它们。同时,这也是一种对我们来说可管理的实现方式,因为并非所有内容都能一次性生成到电子表格中。
通常,我们会先生成一个原型,然后专注于该电子表格的某个特定方面,比如某一列或我们想要添加的某个可视化效果。因为你可以把ChatGPT想象成擅长一次写一页内容的东西,而真正复杂的电子表格的内容远不止一页,仅仅一个公式就可能超过一页的内容。ChatGPT一次只能给我们大约一页的内容。所以,我们必须高效地利用这一页。
开始时,我们将用它来构思整体结构,大致是整体的列和我们将要拥有的工作表集合的轮廓。然后,随着我们越来越详细,我们将放大,并使用它能创建的那一页输出来专注于一个公式、一个可视化效果或一组列。因此,我们试图做的是,在我们高层次地讨论整个电子表格时,总是试图高效地利用那个空间。我们将获得大致的高层次细节,比如整体的列,但我们可能无法获得关于如何做某事的非常详细的信息。当我们想要深入研究特定的可视化效果时,我们将需要大量关于如何实现该可视化效果的详细信息和分步说明。因此,我们将需要它能输出的所有页面来描述创建该可视化效果所需的内容。所以,当我们这样做时,我们必须一次专注于那一个任务。
因此,我们将要做的是:当我们设计整个电子表格时,我们是在一个较高的抽象层次上工作,没有太多细节;然后,当我们处理更复杂的事情,比如复杂的可视化效果时,我们将把所有工作集中在那一个任务、那一个可视化效果上。所以,我们将不断地放大和缩小,试图找出如何实现我们拥有的那个特定想法、那个计算、那个数据结构,无论它是什么。
因此,在整个课程中,我们将探索在高层次上做事的各种不同方法,同时也会放大并执行单个任务,如创建可视化效果、创建VBA脚本、创建公式、调试等。

总结
本节课中,我们一起学习了如何通过与ChatGPT对话来设计和创建Excel电子表格。我们了解到,ChatGPT可以帮助我们将高层次的想法转化为数据结构和具体计算,并通过快速生成原型和迭代来优化设计。对于复杂任务,我们需要采取“先整体后局部”的策略,高效利用ChatGPT的输出能力,逐步实现电子表格的各个组成部分。
013:通过ChatGPT多模态提示设计Excel电子表格 🖼️➡️📊

在本节课中,我们将学习如何利用ChatGPT的多模态能力,即结合文本和图像输入,来辅助我们设计和构思Excel电子表格。这种方法能为AI提供丰富的上下文信息,从而生成更贴合实际需求的数据表格设计方案。
理解ChatGPT的“视觉”能力 👁️
上一节我们介绍了ChatGPT的基本交互方式。本节中我们来看看它的一个重要特性:像人类一样,ChatGPT也能“看到”并理解图像内容。这意味着我们可以通过上传照片的方式,为AI提供关于现实世界物体、系统或环境的视觉信息。
这种结合文本和图像的交互方式被称为多模态提示。充分利用这一能力,尤其是在设计用于数据采集的电子表格时,可以极大地提升设计质量。
为何上下文至关重要 🧠
我们设计的电子表格质量、公式的适用性,很大程度上取决于我们提供给ChatGPT的上下文信息的丰富程度。我们试图解决的问题、目标越清晰,AI就越能将这些需求转化为有效的电子表格、计算和所有我们关心的功能。
因此,提供关于问题和目标的丰富上下文,是获得优秀设计方案的关键。
实战案例:冰箱库存管理 🧊
让我们看一个简单的、人人都能理解的例子:如何设计一个表格来追踪冰箱里的物品。
首先,我给我的冰箱拍了一张照片。然后,我向ChatGPT提供了以下文本提示:
help me design an Excel spreadsheet to create an inventory of what is shown in the photo. I need to be able to keep the inventory up to date and make important decisions with the data. design the rows columns and formulas for derived columns.
在这个提示中,我明确了几个关键信息:
- 目标:创建照片所示物品的库存清单。
- 用途:需要能更新库存,并依据数据做出重要决策。这说明了表格将如何被使用和演变,是至关重要的使用上下文。
- 设计要求:设计行、列以及派生列的公式。
同时,我还提供了富含信息的照片作为视觉上下文。
ChatGPT的设计方案 📝
基于文本和图像的上下文,ChatGPT给出了一个详细的电子表格设计方案。
以下是它建议的核心列设计:
- Item ID: 物品唯一标识
- Item Name: 物品名称
- Category: 类别
- Quantity: 数量
- Expiration Date: 过期日期
- Purchase Date: 购买日期
- Days Until Expiration: 距离过期的天数(派生列)
对于派生列“Days Until Expiration”,它提供了对应的Excel公式:
=IF([@[Expiration Date]]<>"", [@[Expiration Date]]-TODAY(), "")
这个公式能自动计算并倒数物品还有多少天过期。
此外,ChatGPT还根据照片内容生成了示例数据行(例如,它“看到”了我冰箱里的椰奶,并以此为例),并建议了额外的功能,如使用条件格式将即将过期的物品标记为红色。
这个案例展示了视觉上下文如何帮助AI理解场景本质(例如,冰箱物品会过期,因此“过期日期”很重要),从而激发出更贴合实际的设计思路。
利用照片填充数据与表格演化 🔄
基于这个设计,我可以进一步要求ChatGPT“创建这个Excel表格”,它会生成一个包含上述结构的文件。我还可以尝试让它根据照片“填充”数据。
请注意:让AI从一张复杂照片中完全准确地识别并填充大量物品数据,很可能产生“幻觉”(即生成错误或虚构的信息)。对于少量或单个物品,准确率较高;但对于一整张超市货架的照片,错误会很多。因此,目前更可行的方式是将此功能用于获取数据样本以预览表格效果,或用于单件物品的录入(例如,拍一张物品照片并说“将此记录到我的库存中”)。
最后,我可以随时提出新的需求来演化这个表格。例如,我可以要求“添加一个用于追踪支出的工作表”。ChatGPT能基于已有的上下文(包括最初的图片),快速扩展表格功能,生成包含“支出追踪”和“分类消费”等新功能的工作表版本。
总结 📚

本节课中我们一起学习了如何利用ChatGPT的多模态提示功能来设计Excel电子表格。核心流程是:从一张现实世界的照片开始,它为AI提供了丰富的上下文,从而启发表格的构思与设计。这种方法能帮助AI理解特定场景下的关键要素(如食品过期问题),并能用于生成样本数据或在可控场景下录入真实数据。最重要的是,我们可以基于初始的视觉和文本上下文,快速通过提示词来迭代和演化电子表格的设计,使其不断完善以满足动态变化的需求。
014:使用ChatGPT创建Excel公式 🧮

在本节课中,我们将学习如何利用ChatGPT来辅助创建Excel公式。我们将从明确数据描述开始,逐步引导AI生成公式,并重点介绍如何通过分步构建和验证来确保公式的准确性。
明确数据列标识
上一节我们介绍了课程目标,本节中我们来看看创建公式的第一步:明确数据。
在创建任何公式之前,无论其简单或复杂,都必须确保我们清晰地描述了数据。最关键的是,我们需要明确Excel将使用的列标识符(如A、B、C),并确保这些标识符在对话中是明确且正确的。
因此,我总是以一个类似的提示开始对话:
“这是来自Excel工作表的数据,请描述所有列及其标识符(例如A到Z),并以表格形式呈现。”
我们的目标是获得类似以下的输出,其中包含我们正在处理的工作表的所有列名。如果我们有多个工作表,则需要确保此信息对于我们将要使用的任何工作表都是准确的。
表达目标并生成公式
在明确了数据结构之后,接下来我们需要表达我们想要实现的计算目标。
我们不应陷入微观细节,而应后退一步,给出一个高层次的目标,让ChatGPT或AI来填充细节,将我们的目标转化为跨电子表格的计算。
以下是一个示例提示:
“我需要一个可以放入I列的公式,该公式能根据投票数对评分进行加权,以便对投票数较少的评分进行惩罚。”
在这个提示中,我明确说明了要添加新列(I列),并描述了计算目标。ChatGPT随后会生成一个公式,并解释其工作原理。例如,它可能会基于贝叶斯平均或加权函数来构建公式。
验证与理解公式
当ChatGPT生成公式后,我们必须进行验证和理解。
首先,立即验证它引用的列标识符是否正确。例如,如果它说“假设F列是IMDB平均评分,G列是IMDB投票数”,您需要返回原始工作表确认F列和G列确实对应这些数据。
其次,确保您理解公式的逻辑。ChatGPT通常会提供明确的解释。如果没有,您应该跟进一个提示,要求它“逐步解释这个公式的工作原理”。
理解公式至关重要。如果您不理解,请持续提问,直到弄懂为止。AI工具不会神奇地解决所有问题,最终依赖的是人类的审查和理解。
请求示例进行测试
为了进一步验证公式,一个有效的方法是要求ChatGPT应用公式到一些样本值上,并测试计算结果是否符合预期。
您可以提出以下请求:
“请将此公式应用于一些样本值,并展示计算过程,以便我验证。”
虽然ChatGPT无法直接在Excel中执行计算,但它通常会生成Python代码来模拟公式的应用。这非常有帮助,能让您直观地看到输入特定值时的输出结果。
处理复杂公式:分步构建法
对于更复杂的计算目标,我们不应接受一个塞进单个单元格的庞大复杂公式。相反,我们应该采用分步构建法。
分步构建意味着将复杂的计算分解为一系列简单的步骤,每个步骤对应一个新列。这样做有几个关键好处:
- 便于检查:您可以查看每个中间步骤的结果,验证计算是否正确。
- 易于理解:复杂的逻辑被拆解成易于消化的小块。
- 优化AI推理:引导AI进行链式思考,使其更有可能生成正确的分步解决方案。
以下是一个处理复杂目标的提示示例:
“我想计算每个电影流派(仅使用列表中的第一个流派)的平均评分,但只针对在该流派中有超过一个条目的电影。请帮助我创建一系列列和公式来实现这个计算。我希望以增量方式完成,创建一系列能捕获中间结果的列。每一列都应是基于前一列的简单计算。新的列应从原始数据集的最后一列之后开始添加。首先,请解释将要创建的列、每列的作用以及它们将使用哪些其他列。”
通过这种方式,ChatGPT会规划并生成一系列简单的列,例如“提取第一个流派”、“计算每个流派的电影数量”、“计算每个流派的评分总和”,最后才是“计算每个流派的平均评分”。每一列都易于理解和检查。
核心要点总结
本节课中我们一起学习了使用ChatGPT创建Excel公式的系统方法。
以下是创建公式时的关键步骤列表:
- 描述数据:首先向ChatGPT提供清晰的列标识符映射表,确保它“看到”的数据结构与您的Excel工作表一致。
- 陈述目标:用清晰、高层次的语言说明您想通过公式实现什么,而不是具体如何做。
- 生成与验证:获取公式后,立即验证其引用的单元格是否正确,并确保您理解其计算逻辑。
- 测试公式:请求ChatGPT使用样本值演示公式计算过程,以验证输出是否符合预期。
- 分步构建:对于复杂任务,坚持让AI通过创建多个中间列来分步构建解决方案,这便于您检查中间结果并理解整个计算流程。

通过遵循这些步骤,您可以有效地利用ChatGPT作为强大的助手,在降低出错风险的同时,构建出准确且易于维护的Excel公式。记住,您始终是最终的决策者和验证者。
015:使用ChatGPT在Excel中创建VBA脚本

概述
在本节课中,我们将学习如何利用ChatGPT将宏大的想法转化为Excel中的实际应用。我们将重点探索使用ChatGPT生成VBA脚本,以实现比单个单元格公式或图表更复杂的功能。我们将从构思开始,逐步实现一个功能,并学习如何调试和修正ChatGPT生成的代码。
我们不应将想象力和目标局限于仅通过列和公式就能实现的功能。我们希望有能力去构思和实现更宏大的应用,而ChatGPT正是将我们的目标和想法转化为计算的伙伴。其中一种方式就是创建VBA脚本。VBA脚本可以实现比单个单元格公式或单一可视化图表复杂得多的功能。
当你开始思考VBA脚本时,我希望你将其视为几乎完整的应用程序,它们能为你完成真正有价值的工作,或自动化复杂的步骤。
上一节我们介绍了VBA脚本的潜力,本节中我们来看看这意味着什么,以及我们如何使用ChatGPT在VBA脚本中实现计算和应用。
我习惯从明确数据基础开始,这对我自己和ChatGPT都有帮助。以下是具体步骤:
- 列出数据:明确所有列及其标识符。这有助于回顾,ChatGPT有时会自动做这件事,但我认为这是一个好习惯。你可以选择跳过,但我建议保留。
- 构思创意:思考可以用这个电子表格做什么有趣的事情。我喜欢先进行头脑风暴,获取一些灵感。
我将以头脑风暴开始:“我能创建一个什么有趣的VBA脚本来处理这些数据?” 这是电影数据集,我们可以做很多有趣的事情,但我需要花时间探索各种可能性。
ChatGPT回复了一系列想法:
- 基于类型的电影推荐生成器:创建一个VBA脚本,允许用户选择一个类型,然后返回该类型的三部随机电影。这个想法很好,比如在周末与家人决定看什么电影时,能选择类型并获得建议会非常棒。
- 随机电影之夜选择器:这看起来也很有趣。
- 电影知识问答游戏:这个可能真的很有趣。
值得注意的是,在回复底部,ChatGPT甚至直接为我们原型化了其中一个想法,即“基于类型的电影推荐生成器”的VBA脚本。你会看到它生成了实现这个应用的基本代码。
当它生成代码时,也会解释代码的工作原理,这一点非常重要。
当你开始使用ChatGPT实现VBA脚本时,坦白说,你需要具备在Excel中使用VBA脚本的最低水平知识。如果你对此一无所知,你可以尝试按照它的指示去弄明白,如果你有一些编码或其他方面的经验会更有帮助。当然,你也可以从零开始,让它生成VBA脚本,然后按照指示在Excel中实现应用,但要知道,如果你理解代码,这个过程会容易得多。
这一点很重要,因为正如我们稍后将看到的,有时它需要你做一些额外的工作。如果你不知道如何修改代码,有时可能无法实现它的应用。
现在,它告诉我们如何将生成的脚本应用到Excel中:打开VBA编辑器,插入新模块,粘贴代码,然后运行脚本或从宏对话框运行。
让我们按照步骤操作。我按照它的指示,打开了Visual Basic编辑器,插入了一个新模块,复制并粘贴了它生成的VBA脚本(确保复制完整),然后转到宏,选择了“按类型推荐电影”的宏。
到目前为止一切顺利,非常令人兴奋。然而,我遇到了一个运行时错误。
你将看到,这是一个关键点:ChatGPT生成了VBA脚本,但它无法看到你眼前的Excel工作表。当然,如果你给它截图,它可以“看到”,我们稍后会讨论这一点。但它不一定知道具体发生了什么,而且在使用VBA脚本做更复杂的事情时,错误很可能会发生。
此外,我们按照它的指示操作,将其转化为工作表上的应用,我们也可能做了一些忘记告诉它的更改,比如调整了列名或工作表名,现在它引用的是错误的工作表或名称。在这个例子中,我给了它一个与Excel文件对应的CSV文件,但其中没有包含工作表名称。
这里存在各种细微差别,因为大多数时候,它犯错误是因为它无法看到你面前实际的Excel工作表。正因如此,它做出了不正确的假设。很多时候情况就是如此,或者它不知道你正在使用的Excel的确切版本或其他东西的确切版本,从而做出了错误的假设。
因此,我们需要做很多工作就是当错误发生时,向它解释情况,或者告诉它遗漏了哪些假设。在这个案例中,我们遇到了错误,但别担心。
我的做法是截取这个错误的屏幕截图,然后使用多模态提示将其放回提示中。我会展示:“当我运行它时发生了这个。” 我甚至不需要告诉它任何事。当然,你也可以复制粘贴错误信息,或者用文字描述错误。所有这些方式都有效。我只是喜欢截图并放进去,这对我来说通常更快。
当我这样做时,它回复说:“哦,好的。运行时错误‘9’:下标越界,通常意味着VBA试图访问一个不存在或拼写错误的工作表或范围。” 你经常会看到这种情况:你更改了工作表名、列名或移动了它们的位置,而它试图引用的却是错误的列或名称。
因此,很多工作就是来回沟通,确保你在Excel中所做的与ChatGPT所知道的相匹配。在这个案例中,它说脚本中使用了 ThisWorkbook.Sheets("Sheet1") 这一行,很可能那是错误的工作表名。
我看了看,立刻知道那不是工作表的名称,我需要修复它。但是,如果我事先查看了代码(我鼓励你无论是否理解代码,在运行前都先查看一下代码),就会发现这一点。
如果你不理解代码,却要用它来做决策(比如让它生成一些分析结果),那么情况就不同了。在这个案例中,它只是推荐电影。如果代码有错误或不完美,谁在乎呢?它只是在启发我,没什么大不了的。
但是,如果你用它来决定一些会产生影响的事情,比如影响一个人的治疗、抵押贷款、某人是否被解雇或加薪等,那么你绝对需要理解代码才能这样做。如果你无法理解VBA脚本,就不要依赖它来为你完成工作。
因此,何时直接使用它,何时不使用,取决于你和你的使用场景。如果是一个有趣、异想天开、易于检查的使用场景,比如为我自己的电影列表做个人推荐,即使它出错了而我却不理解脚本,也不是什么大问题。
如果这将决定一个人是否得到治疗、抵押贷款、某人是否被解雇或加薪等,那么你在使用它之前最好绝对理解脚本。在所有情况下,如果你要用它来做重要决策,你需要理解它,因为最终,是你而不是它对错误负责。如果它犯了错误,而你在不理解或没有进行尽职调查的情况下就采纳并应用了它,那就是你的过错。所以请确保,如果你要将它用于重要事情,你必须理解它。
现在,当它生成代码时,你应该阅读它。你应该寻找代码中的注释,比如它说“将Sheet1更改为你的工作表名称”,而我最初没有这样做,因为我粗心了,我只是直接执行了它。
所以我要去代码中寻找这些任务。在代码中,我看到了一个任务:我需要更改工作表名称。它告诉我要这样做,但我没仔细读。我现在去修复它。当我再次运行时,我得到了我的电影推荐。
它弹出一个对话框,我输入“drama”作为我想推荐的类型,现在它给了我一个推荐列表。我怀疑这个“Ds”是另一个bug,我可以去追踪它,但现在不打算这么做。但我想强调的是,它在代码中确实会犯错误。它非常非常好,但这就是为什么你拥有一些评估其正确性的技能或专业知识很重要,因为错误会发生。你不希望在不检查其代码的情况下,就让它做出重要决策,而它却犯了错误。
在这个案例中,有个有趣的电影“Mall3”,我从未听说过。我去维基百科查了一下,哦,确实有这部电影。这很有趣,也许我这周会去看看。
一旦它构思出想法,我们总是可以回去说:“嘿,那个想法,我现在要你实现它。” 当它扩展一个想法时,一个美妙之处在于它基本上构建了实现该想法的指令和要求,而不需要我们全部手动输入。
所以我要让它给我第二个想法“随机电影之夜选择器”的VBA代码。它给出了所有的VBA脚本,描述了如何实现以及该怎么做。我去使用了这个已经实现的“电影之夜选择器”,是的,它运行了,给了我一个随机电影推荐。
现在,我们可以让它构思想法,但当然我们也可以向它表达我们想要什么或我们的目标。我们可以说:“我想要一些能启发我选择电影的东西”,也许我们会生成那些想法。或者我可以更具体地说:“创建一个VBA脚本,接收一个电影标题,查找其信息,并显示其类型、发行年份和IMDB评分的摘要。” 这样我就不再是头脑风暴了,而是我知道我想要什么,我要你为我用VBA脚本实现它。将我想要的转化为计算,而计算将通过VBA脚本来实现。
它生成并解释了脚本,这里是脚本(我没有全部展示,你明白意思),它可以生成VBA脚本,并解释脚本及其使用方法。我去实现它,让它查找电影“E.T. the Extra-Terrestrial”,它给出了摘要。再次强调,有个小错误:IMDB评分实际上可能是IMDB ID列。所以它又引用了错误的列。这又是你将看到的最常见的错误之一:它对列标识符、工作表标识符和名称等的引用,与你眼前的Excel工作表略有不同。
在这种情况下,我可以跟进并说:“嘿,你知道IMDB评分实际上不是F列(或随便哪一列,我不记得了),是G列。” 我可以告诉它,它可以去调整。但你将始终要做的事情就是确保匹配,并且始终要检查、检查、再检查。
这是快速原型设计,帮助我创建应用。我知道如何查看、检查它,我可以与它聊天来改进和修复代码,或者因为我是计算机科学家,我具备相关技能,可以直接去编辑VBA脚本来实现我想要的功能。你需要弄清楚你打算怎么做。
如果你手动编辑了VBA脚本,你需要将其带回ChatGPT并说:“嘿,这是我手动更新的版本,现在让我们基于这个版本工作。” 如果你不这样做,就会遇到错误。所以,你始终需要在Excel和ChatGPT之间来回沟通,并且要保持列标识符、工作表名称、你当前正在处理的代码、公式、数据等内容的同步。它需要这些上下文才能准确地工作。
另一件事是,随着我们将想法转化为计算,随着我们用它来转化更大、更复杂的事物(如VBA脚本),出现细微错误的可能性会越来越大,因此我们检查、运行和测试事物变得非常重要。
人类也会犯错。随着复杂性的增加,某些软件的代码越复杂,我犯错的可能性就越大。我们在人类系统中如何处理这个问题?我们编写测试,我们检查,我们运行。同样,当你在构建东西时,你也必须去测试、检查并确保它是正确的,因为越复杂,第一次就做对的难度就越大。ChatGPT与人类并无不同,它也会犯错,并且随着复杂性的增加,它也无法免疫于错误。

总结
本节课中,我们一起学习了如何利用ChatGPT在Excel中生成和实现VBA脚本。我们从头脑风暴应用创意开始,经历了生成代码、在Excel中实施、遇到并调试运行时错误(如工作表名称不匹配)的完整过程。我们强调了理解生成代码的重要性,特别是在用于重要决策时。我们还探讨了如何通过截图反馈错误、根据注释修改代码,以及保持ChatGPT与Excel工作环境同步的关键性。最后,我们认识到,随着任务复杂度的提升,对生成结果进行测试和验证是必不可少的步骤,这与人类开发实践是一致的。
016:ChatGPT如何进行数值计算与数据分析

在本节课中,我们将要学习ChatGPT处理数值计算与数据分析的核心机制。我们将深入探讨ChatGPT如何通过“自我构建工具”的方式,克服其在直接处理复杂数字任务上的局限,并理解这一过程对于与Excel等工具结合使用的重要性。
理解ChatGPT的文本输出
上一节我们介绍了ChatGPT的基本交互模式。本节中我们来看看其最常见的输出形式。
当我们向ChatGPT输入一个提示(Prompt)并提交后,它会直接生成文本输出。例如,当我们要求它“设计一个简单的咖啡消费追踪表格”时,它会生成类似下表的文本描述:
| 日期 | 咖啡种类 | 杯数 | 价格/杯 | 总花费 |
|---|---|---|---|---|
| 2023-10-26 | 美式 | 2 | 25 | 50 |
这个表格本质上仍然是文本。ChatGPT只是在生成一段格式化的文本来描述表格结构,它本身并不具备直接绘制或操作表格的能力。
数值计算的挑战与解决方案
然而,ChatGPT在处理数字方面存在局限。一旦数值计算达到一定规模或复杂度,ChatGPT可能无法有效处理并容易出错。这是一个需要解决的问题。
为了解决这个问题,ChatGPT采用了一种非凡的策略:自我构建工具。
识别工具构建过程
在交互过程中,你可能会注意到一个特殊的小图标出现,例如 [_>]。这个图标是ChatGPT正在为自己构建工具的信号。
想象一下,你有一把铲子(ChatGPT)。在你准备挖洞前,铲子发现路上有块石头。于是铲子从你手中跳出,为自己打造了一把镐,用镐敲碎石头后,又跳回你手中,让你继续挖洞。这就是工具为自己构建工具的过程。
当ChatGPT遇到无法直接完成的任务时,它会启动这个“工具构建”流程。
工具的本质:代码
那么,ChatGPT构建的工具是什么?答案是:代码。
例如,当你要求它“创建一个Excel表格”时,它意识到自己无法直接生成.xlsx文件。于是,它会编写一段Python代码,因为Python可以创建Excel文件。它执行自己编写的代码,然后将代码运行的结果——即生成的Excel文件——返回给你。
这个过程可以概括为:
用户请求 -> ChatGPT分析 -> 识别障碍 -> 编写解决障碍的代码(工具)-> 执行代码 -> 返回代码执行结果
通过这种方式,ChatGPT能够:
- 进行高精度的复杂数值计算。
- 生成可视化图表。
- 创建和转换数据文件(如CSV、Excel)。
- 完成其他其核心模型不擅长直接处理的任务。
两种工作模式:直接生成与代码执行
理解ChatGPT何时采用哪种模式至关重要。
以下是两种主要工作模式的对比:
-
直接生成(通过模型):适用于需要创意、设计、指导和小规模数据生成的场景。
- 示例:头脑风暴、解释操作步骤、提供公式建议、生成少量示例数据。
-
代码执行(构建工具):适用于需要精确计算、文件生成或大规模数据处理的场景。
- 示例:创建完整电子表格、进行复杂数据分析、生成数据可视化图表、转换数据格式。
作为用户,你需要留意交互过程中的特殊图标,以了解当前任务是通过模型直接完成,还是通过运行代码来完成的。这有助于你更好地理解和验证其结果。
总结与启示
本节课中我们一起学习了ChatGPT处理数值与数据任务的核心机制。
我们了解到,ChatGPT通过自我构建工具(即编写并执行代码)的能力,巧妙地弥补了其在直接进行复杂计算和文件操作方面的不足。这种“工具构建工具”的能力,是当前人工智能一项令人惊叹的进步。
每当你看到那个特殊的工具构建图标出现时,背后都是一次精密的软件工程过程:仅仅基于你的自然语言描述,AI就自动规划、编写并执行了代码来实现你的目标。我们应当对此保持欣赏与关注。

掌握这一原理,能帮助我们在将ChatGPT与Excel等工具结合使用时,更清晰地预判其工作方式,从而更高效地利用它进行数据分析和获取洞察。
017:使用ChatGPT对Excel公式进行双向稳健性准确性检查 🔍

在本节课中,我们将学习如何利用ChatGPT的“双向检查”功能,来验证Excel中复杂公式的准确性和稳健性。这种方法能帮助我们在AI辅助下,更可靠地构建和调试数据分析流程。
人类在Excel中犯错的历史,远比ChatGPT存在的时间要长。因此,我们早已学会通过各种方式去检查和确保结果的正确性。现在,当我们使用ChatGPT时,检查工作依然至关重要。这不仅因为ChatGPT本身可能出错,更因为在我们理解它的解释或将其输出转化为Excel具体实现的过程中,也可能引入错误。例如,我们可能复制粘贴错公式、将其放入错误的列、误解电子表格的结构或各列的含义,从而误导ChatGPT。可能出错的地方非常多,因此,检查答案、验证所得结果是否合理,就显得极其重要。
ChatGPT为此提供了一个极其强大的检查工具,我称之为“双向检查”。我们不仅可以在Excel内部进行检查,还可以在ChatGPT内部,尝试验证它是否能得出相同的答案。具体方法是:我们在Excel中运行公式得到一个结果,然后让ChatGPT在Python环境中执行完全相同的计算(利用其高级数据分析功能来编写和执行Python代码)。如果ChatGPT通过Python计算得到的数字与Excel结果一致,那么我们就从两个截然不同的途径验证了同一项计算。虽然并非所有Excel操作都能在ChatGPT的Python环境中完美复现,但对于大多数我们想要完成的重要计算,这种方法通常是可行的。
上一节我们介绍了双向检查的概念,本节中我们来看看一个具体的操作实例。
我提出了一个需求:计算每个电影类型的平均评分,但只基于其类型列中的第一个条目来包含电影。例如,有些电影的类型是“喜剧,动作”。如果它是“动作,喜剧”,则不想包含;如果是“喜剧,动作”,则想包含。这为公式增加了一些复杂性。如果只是“喜剧”,当然也想包含。我提示ChatGPT帮助我在Excel中构建这个公式。它采用了分步构建列的方法,通过一系列相互关联的列来逐步实现这个复杂公式。
它完成了任务,并给出了一系列用于实现此复杂公式的列。我在Excel中创建了这些列,一切看起来都不错。经过抽查,Excel中的结果似乎是正确的。现在,我希望通过在同一对话中,让ChatGPT用Python复现相同的公式和分析,来进行更严格的检查。
以下是进行此类检查的典型步骤:
通常,我会将已创建的公式或需求描述复制粘贴到一个新的聊天中,或者像本例一样,直接在原对话底部进行跟进。然后,我会逐列地针对特定行复现分析过程。
- 选择测试行:我选择了一个属于“喜剧”类型的行作为起点。
- 验证第一列:我首先询问:“喜剧类电影有多少部?” ChatGPT通过Python分析后回答有3814部。我回到Excel数据中核对,确认这个数字是正确的。这样,我就验证了第一个(相对简单的)列。
- 验证后续列:如果发现任何差异,就可以开始调试并找出原因。接着,我根据公式逻辑询问下一个问题:“喜剧类电影的评分总和是多少?” ChatGPT通过Python计算后给出总和约为23368.10。我再次回到Excel中核对列K(评分总和列)的数值,确认两者一致。
- 计算并验证最终结果:最后,我通过计算平均值来验证:23368.10除以3814。我也可以直接让它计算平均值,但这里为了清晰,我选择明确计算。ChatGPT给出的结果约为6.13,这与我在Excel中得到的结果完全一致。
通过这种方式逐列验证,我基本上是在检查公式的每个组成部分。我通过对比在Python中运行相同分析得到的结果,来验证Excel那一侧的计算是否正确。当然,我也可以尝试一次性运行整个分析并进行差异对比,但一开始选择逐行、逐列验证会更简单明了。
这个过程给了我很大的信心,因为我知道,至少在我所表达的意图范围内,ChatGPT既能在Python中正确实现,也能在Excel中正确实现,并且两者的结果能够匹配。不过,必须强调的是,如果我最初表达的需求本身就有根本性错误,那么无论它的实现多么完美,构建出的公式也必然是错的。这要求我们必须持续思考、保持专注,确保我们要求它做的事情本身就是正确的。
这种方法的精妙之处在于,通过将复杂公式分解到多个列中,我们可以增量式地进行检查和调试。一旦发现Excel的结果与ChatGPT的Python结果在某一个列上存在差异,我们很可能就将问题隔离到了公式的某个特定部分。如果是一个直接输出到单个单元格的复杂公式,一旦出错,将很难定位问题根源。而通过分步构建和检查,我们能够快速定位并修复问题,然后观察修复是否解决了后续列的问题。这种增量构建与增量检查相结合的方式,对于调试和确保公式稳健性来说,是一个极其宝贵的工具。

本节课中我们一起学习了如何利用ChatGPT的Python执行能力,对Excel公式进行“双向稳健性准确性检查”。我们了解了分步构建公式列的优势,并通过实例演示了如何逐列验证,从而在AI辅助下更自信、更高效地完成复杂的数据分析任务。记住,工具再强大,清晰、正确的需求表达和持续的人工核查,始终是获得可靠结果的基础。
018:使用ChatGPT批量双向校验Excel公式的扩展性与准确性

概述
在本节课中,我们将学习如何利用ChatGPT和Python,对在Excel中创建的复杂公式进行批量、双向的校验。这种方法能有效提升大规模数据处理时的准确性和效率,帮助我们发现数据表示或逻辑实现中的潜在问题。
上一节我们介绍了如何在Excel中逐行检查公式。本节中我们来看看如何将这种校验扩展到批量处理。
批量双向校验的原理
我们可以逐行检查在Excel中创建的公式。这种方法确实有效。我们可以查看中间数据,也可以逐个数值进行检查。
然而,当处理大型电子表格时,逐行检查并非总是最高效或最快速的方法。我们无法实际地逐行核对所有内容是否完全匹配。
因此,我想展示另一种方法:进行双向校验。其核心思想是,比较在Python中实现某个逻辑或想法得到的结果,与在Excel中实现同一想法得到的结果是否一致。
我们在Excel中构建了一些公式,创建了许多新列,重塑了数据或基于计算生成了新的衍生数据。现在,我们如何知道这些操作是正确的呢?
我们学到的方法是,可以在Python和Excel中分别进行检查,确认我们得到了相同的答案。但到目前为止,我们只是在逐行逐列的基础上进行交互式检查。
现在我们要做的是扩展这个想法,进行批量处理。
实施步骤
以下是实施批量双向校验的具体步骤。
第一步:在Excel中创建公式与衍生数据
首先,我们创建所需的公式。我们会进行一些计算,描述我们试图在数据中实现的目标,并据此创建公式和列。所有这些都在Excel中实现,最终得到我们的衍生数据。
第二步:在Python中生成对应的CSV文件
接下来,我们需要创建一个相同衍生数据的版本,但这次是通过Python生成一个CSV文件。
其思路是,我们将获取这两个文件,将它们整理成完全相同的形状和格式,然后要求ChatGPT使用Python来比较它们。
在这个阶段,有可能出错。但通常,错误会偏向于它未能识别两个事物是相同的。虽然理论上它也可能错误地认为两者完全相同,但根据我的经验,这种情况较少。无论如何,这是在人工尽职调查之外增加的又一层检查。它增加了尽职调查,而非取代。因此,你仍应进行所有之前会做的人工检查。
当我完成公式的实现后,我会要求ChatGPT在Python中重现这些公式在新列中的功能,并输出为CSV。
例如,我会说:“读取原始数据,创建一个CSV文件,其中行是年份,列是唯一的电影类型,然后列出每年每个类型发布的电影数量。如果一部电影有多个类型,只考虑列表中的第一个类型。”
这样,我基本上在Python中复现了之前在Excel中完成的数据重塑工作。
第三步:启动新对话并上传文件进行比较
一旦我获得了那个CSV文件,就可以开始进行比较了。我通常会开启一个新的对话。虽然这不是必须的,但这是一个好习惯,可以确保之前的对话偏见不会影响当前操作。
然后,我上传两个文件(Excel导出的文件和Python生成的CSV文件)。
接着,我发出指令:“请比较这两个文件,查看它们是否每年每个类型都显示相同的数量。”
请注意,我已经将两个文件整理成了我认为完全相同的形状。我期望得到大致相同的结果。
可能存在一些细微差异,我可以去修复它们。例如,一个文件中的数据表示方式可能存在空白,这可能引发问题。我们需要确保行、列和表示形式完全相同,以便进行批量比较。
第四步:分析比较结果并排查问题
ChatGPT会进行全面比较。例如,它可能发现科幻类型的数量从1990年起存在显著差异,显示一个文件的值通常高于另一个,且差异在近年更大。
这时我需要跟进调查,因为我在Excel中实现的计算,在Python中也实现了,却得到了不同的答案。
潜在原因有几个:
- 我可能错误地实施了ChatGPT在Excel中给我的指导。
- ChatGPT可能错误地实施了我在Python中给它的指令。
- 可能存在解释上的细微差异,两者可能都“正确”,但改变解释会导致我们得到的具体数值不同。
一旦识别出问题,我会要求它:“请并排显示1990年以后的科幻类型数量。”
然后我可能会看到,2020年和2021年的数据看起来不错,但2022年和2024年有误。差异可能不大,但确实存在一些细微问题。
接着,我会调出文件查看,因为这直接告诉了我需要查找差异的地方。我可能会发现,在一个数据集中有“Sci-Fi”和“Sci-Fi & Fantasy”,而在另一个数据集中只有“Sci-Fi”。
这时我需要思考:处理这个问题的正确方式是什么?当我回头查看原始数据时,可能会发现“科幻”有多种表示方式。我当初真的考虑到了正确的处理方法吗?答案可能是没有。我需要重新思考并在数据中处理这个问题。
但这个过程帮助我发现了数据中可能影响分析但我之前不知道的情况。而且它是规模化完成的,因为它遍历了所有类型,并精确定位了存在问题的特定类型。
批量校验的优势与意义
通过尝试在两端进行批量复现,这些问题得以暴露。现在我可以扩展这种分析,规模化地发现潜在的差异和问题,并在此过程中了解我的数据。
它并不取代我原本就会进行的人工检查,但它为我的工具箱增加了一个新工具,提升了我所做工作的稳健性。因为我可以从不同角度审视,确保它们一致,并且可以快速、轻松地完成。我可以发现像数据中“科幻”的不同表示方式这样我可能未曾注意到的问题。
这将有助于确保我的分析、可视化以及所有决策制定更加稳健,因为我可以通过确保两端操作的一致性来捕捉错误。
总结

本节课中,我们一起学习了如何利用ChatGPT进行Excel公式的批量双向校验。我们了解了其实施步骤:先在Excel中生成衍生数据,再通过Python复现逻辑并输出CSV,最后利用ChatGPT比较两者的一致性。这种方法的核心价值在于能够规模化、自动化地发现数据逻辑或表示上的不一致,从而提升数据分析的整体质量和可靠性,是人工检查的有效补充。
019:使用ChatGPT创建Excel测试用例的稳健性测试

概述
在本节课中,我们将学习如何利用ChatGPT为Excel中的公式和数据计算创建稳健性测试。我们将探讨在借助AI工具快速构建公式后,如何通过系统性的检查来确保结果的准确性,从而减少错误并提高数据分析的质量。
引入测试的必要性
当人们开始考虑将ChatGPT用于Excel时,可能会质疑其可靠性。确实,AI工具可能会产生错误。因此,在结合使用它们时,我们需要比以往更加严谨,进行更彻底的检查。实际上,通过合理利用ChatGPT,我们有可能比单纯依靠人力时犯更少的错误,因为人类在电子表格中引入的错误数量可能非常庞大。
ChatGPT赋予我们快速工作的能力,它能帮助我们设计并实现公式。但这并不意味着我们可以跳过对数据质量和实现正确性的必要检查。
接下来,我们将讨论如何利用节省下来的时间,通过在我们的Excel工作表和工作流程中构建不同的检查和测试,来确保我们得到的是正确答案,而不仅仅是更快的答案。我们的目标是获得更好、更稳健的结果。
构建可测试的列结构
在开始构建公式时,我们专注于创建独立的列。我们通常先构建一个相对简单的公式列,然后在此基础上构建另一列,以列的形式逐步增量构建。这种方法的好处是,正如我们之前讨论的,它能够精确定位错误发生的位置,同时也使得检查计算的各个独立部分变得更加容易。
借鉴软件工程的测试理念
从计算机科学和软件工程的背景来看,确保人类正确实现软件的方法之一是编写测试。现在,我们(人类)通常需要实现ChatGPT输出的公式,也很可能修改和推理这些公式。同时,ChatGPT本身也可能犯错。因此,就像在软件工程中一样,我们必须进行检查,确保我们的工作、我们的计算实现是正确的。
我们将利用“独立列”这一理念,为每个单独的列构建测试,以检查我们得到的计算结果是否与数据的其余部分一致。
利用ChatGPT设计测试
ChatGPT可以帮助我们思考可以运行哪些测试。它在为软件构建设计测试时也表现得非常出色,因为它常常能提供一个外部视角。有时,作为人类或某个想法的实现者,我们很难跳出固有思维,从不同角度思考可以进行哪些检查。
以下是我们将用来引导ChatGPT为我们正在做的工作设计测试的提示词:
对于每一列,提出一个简单的检查方法,以确保我正确实现了公式并且没有意外值。请给出你的建议和一个表格。
ChatGPT会返回一个检查或任务的表格,我们可以针对每一列运行这些检查,以确保得到的结果是正确的。
例如,对于提取流派列表中第一个流派的列,它建议实施一个检查来验证输出中没有逗号。这是一个非常基础的检查,类似于软件工程中的做法:我们是否得到了一个不包含逗号的单一值?因为如果包含逗号,说明我们并没有成功分割出值。
对于统计每个流派电影数量的列,我们可以实施一个检查:对J列的所有值求和,并将其与数据集的总行数进行比较。然后我们可以将此用作一项检查。
接着,ChatGPT会逐一解释如何实施每一项潜在的检查。这本质上就是我们可以去实现的一个测试。
测试的价值与实施
这种方法的一个美妙之处在于,当我们逐一运行这些测试时(每个列都有一个测试,这非常好),如果其中一项测试出错,并且测试失败,最坏的情况是它促使我们更深入地查看数据。测试并不能证明没有错误,它通常不能证明错误的绝对不存在。但我们可以证明的是,我们已经运行了大量检查,从而建立起信心,相信我们没有在某个地方犯错。
如果检查失败,那么我们就需要更加关注。我们可能会发现测试本身有问题,也可能发现数据本身或我们实现公式的方式有问题。但即使测试本身是“坏”的,它引起我们注意这一事实也是有价值的,因为它促使我们花时间检查、核对并确保一切运行正常。这对于引导我们关注不同方面,确保我们在分析和实现中提供了所需的严谨性非常有价值。
将检查建议转化为可执行的测试
我喜欢将这些检查思路转化为可以查看“测试是否通过”的测试。具体做法是,我返回去对ChatGPT说:假设我们将在另一个单独的工作表中实现所有检查。原始工作表名为“原始数据”。请编写每个检查,使其根据结果输出“OK”或“Fail”(也可以是“Pass/Fail”,随你喜欢)。其核心思想是,我们想要实现另一个工作表,基本上就是我们的测试集,其中每一行或每一列(取决于你的设计方式)都在对我们通过其他公式计算产生的结果运行某些测试,以便我们检查并确保某些基本事项是合理的。这是我们在软件工程中常做的事情。
ChatGPT会回复我们:好的,这是你的列标签,我们将在名为“数据检查”的工作表中添加一组检查。基本上,它会逐步指导我们如何实施这些检查。
对于每一项检查,它都会描述其内容,例如“第一个流派提取结果无逗号”,然后给出实现该测试的公式。因此,我们将去构建一个单独的工作表,在其中放入:测试描述、实现测试的公式,然后公式输出“OK”或“Fail”。接着,我们查看那个工作表,看得到的是“Pass/Fail”还是“OK/Fail”。如果得到“Fail”,那么这就是我们需要去调查的事情,我们需要非常仔细地查看测试的逻辑以及我们正在检查的那个列的实现逻辑,看看是否存在问题。
ChatGPT会逐一介绍它将产生的各项不同检查,并给出实现每一项的公式。最后,它会给出一个汇总:这是我们将要运行的所有不同检查及其对应的公式。
测试结果的分析与迭代
当我们实现这些后,会得到类似这样的结果。当然,你可以用不同的方式呈现。但基本上,你会得到它建议的所有检查列表以及它们是否通过。
例如,在这种情况下,我看到有一项关于“流派计数与总行数(总电影数)匹配”的检查失败了。现在我可以去查看:是它产生的测试本身有误?还是我的计算有误?或者是数据有问题?但无论如何,它吸引了我的注意力。所有其他显示“OK”的检查,并不意味着那里没有错误,但它增加了我的信心,因为我从一个不同的角度进行了检查并且通过了。这并不意味着不存在某个我尚未审视的、会导致失败的角度,但至少它告诉我,嘿,我从另一个角度看了一下,它看起来仍然是正确的。
但在一个案例中,它显示“不,看起来不对”,这给了我们一个跟进点,确保我们在实现中没有犯错。我可能对失败的原因有所猜测,但我会更详细地深入调查,更彻底地检查它。
构建这些检查非常快,对吧?我说“给我一些检查”,然后我还可以说“给我额外的检查”、“再给我一些不同的检查”。我可以非常快速地做到这一点。我可以开始积累检查,它会告诉我应该检查什么以及对应的公式。这样我就能得到一套非常稳健的检查集。然后,当我开始构建实现(即它告诉我不同的公式来做我关心的不同事情)时,我把它们引入Excel,接着在同一个对话中跟进说“给我一些不同的检查”,或者我另开一个对话但回到上下文说“给我一些检查”(不过我更喜欢在同一个对话中进行)。然后我把这些拿过来,在类似这样的测试中实现它们,用“Pass/Fail”或“OK/Fail”标注,这样我就可以去确保我所做的事情看起来是正确的。之后,当我开始操作数据时,我也可以随时返回并检查这些基本检查是否仍然通过。
总结

本节课中,我们一起学习了如何利用ChatGPT为Excel数据分析创建稳健性测试。我们认识到,在借助AI提速的同时,必须引入系统性的检查来保障质量。通过将计算分解到独立的列,并借鉴软件工程的测试思想,我们可以为每一列设计特定的验证方法。ChatGPT不仅能帮助生成公式,还能从外部视角协助设计这些测试用例。最后,我们将这些测试建议转化为带有“通过/失败”状态的可执行检查列表,从而持续监控数据处理的正确性,并在发现问题时快速定位。这种方法使我们能够在享受AI效率的同时,显著提升工作的准确性和可靠性。
020:利用ChatGPT快速生成Excel图表原型 📊

在本节课中,我们将学习如何利用ChatGPT进行数据可视化的快速原型设计。我们将探讨如何通过迭代式对话,探索不同的图表方案,分析可视化结果,并最终确定最适合传达数据洞察的图表形式,从而在进入Excel等工具进行最终实现前,获得更优的可视化方案。
理解数据
在开始任何可视化工作之前,充分理解我们正在处理的数据至关重要。这不仅是为了让我们自己理解,也是为了确保ChatGPT能准确理解数据的结构和内容。
以下是开始前的标准步骤:
- 上传数据:将数据集文件提供给ChatGPT。
- 描述列信息:获取数据集中各列的标识符和含义。
- 查看数据样本:提取部分数据样本进行查看。
查看数据样本非常有帮助,因为它能揭示我们可能未预料到的问题,例如缺失值(NaN)或其他异常数据。提前发现这些问题,有助于我们在后续创建可视化时理解图表为何在某些地方看起来“奇怪”。
因此,在获取列信息后,我通常会追加一个提示:“为每列添加三个随机数据样本”。这样,我们不仅能得到样本,还能被明确告知哪些列存在NaN值。例如,在“流派”和“IMDB ID”等列中可能存在缺失数据。这让我在构建可视化时,必须考虑如何处理这些情况。
将数据问题呈现在对话中,不仅让我能看到,也让生成式AI能更有效、更容易地识别并推理这些问题。
构思可视化方案
上一节我们介绍了如何理解数据基础,本节中我们来看看如何构思可视化方案。我建议在明确指定具体图表类型之前,先进行一些头脑风暴。
我们可以从一个简单的提示开始,例如:“给我一些可视化点子,来展示不同电影流派随时间变化的受欢迎程度。”
通常,我们的目标是获得实现某个目标的多种想法,即多种可能有助于达成目标的不同可视化方案。初始目标不是指定“我想要这个图表”,而是说“展示能帮我实现这个目标的选项”,无论你试图理解什么,都告诉它,以便它能尝试给出合适的建议。
你也可以更大胆一些,直接说:“用这些数据构思一些有趣的可视化方案,以便我探索和理解数据。”但如果你心中已有特定目标,最好在此处明确说明。
在本例中,我的目标是了解流派受欢迎程度如何随时间变化。ChatGPT回复了多个不同的想法:
- 折线图:展示各流派随时间变化的受欢迎程度。
- 堆叠面积图:展示各流派随时间变化的受欢迎程度。
- 热力图:展示年份与流派的关系。
- 条形图:按年份展示各流派的电影数量。
它提供了很多不同的想法。如果它给出的选项都编了号,你还可以回去说“展示第三个方案”或“展示第四个方案”,它会提供该可视化方案的具体说明,因为它刚刚创建了这些方案。
迭代与细化方案
在查看了所有建议后,我可能想要一些略有不同的东西。这些建议启发了我的思考。
现在,我提出一个新要求:“可视化每年在每个流派中发布的电影数量。”
请注意,我在这里的指令仍然不够具体。我没有告诉它具体使用哪种可视化类型(热力图、折线图还是其他),我只是说“可视化每年电影数量”。我增加了对数据目标的特异性(追踪每年电影数量作为衡量受欢迎度的指标),但在可视化形式上仍留有余地。
这样做的目的是让我们有机会利用模型内在的生成性、随机性和创造性,来获得不同的可能性。当我这样做时,它以一种我最初没想到的方式进行了可视化,这很有趣:它使用了热力图。
如果我明确告诉它“我想要折线图”,我就不会看到这个选项。而查看这个选项的成本非常低,只需几秒钟的等待时间。它启发了我的思考,让我脑海中形成了另一种看待数据的方式。这个热力图立刻让我看出:戏剧类电影非常受欢迎,尤其是在2020年代末期,但在2024年左右似乎有所下降;喜剧类一直很受欢迎。这是一个我未曾想到的、相当有效的可视化方式。
然而,这并不完全是我想要的。于是我回去调整提示。也许问题在于“数量”并不是我完全想要的。我说:“创建一个可视化,展示每年每个流派发布的电影所占的百分比。”
我所做的是调整提示,改变输入可视化的数据,但没有直接控制可视化类型。当然,我可以回去说“把它做成折线图”,但我喜欢专注于我想看到的实际数据,并经常让生成式AI来决定它认为展示这些数据的最佳方式。
是的,你可以非常明确地指定“把这个做成X类型的图表”。但我喜欢获得一些惊喜,看到一些我以前可能没见过的东西。在这种情况下,我看到了一个更接近我最初想法的图表,它展示了流派随时间变化的受欢迎程度。这是一幅非常有帮助的图表。
我喜欢进行这种探索的部分原因是,即使我脑海中有一个确切想要的可视化模型,我也经常喜欢看看其他选项。某一天我可能会回顾,这些看到的选项会启发我创建其他可能有帮助的可视化,或者我最终可能发现一个我更喜欢的东西。我确实很喜欢那个热力图。
交互式分析与可视化调试
关于可视化,一个非常神奇的地方是,我们可以在创建它们的同时,与ChatGPT进行交互式讨论。
我们已经创建了这个可视化图表。通常,ChatGPT看到的是它生成用于创建此图表的代码,它无法像我们一样看到图片。但事实证明,我们可以通过一种称为“多模态提示”的方法来弥合这一差距。
就像我们可以将文件或数据集附加到提示中一样,我们也可以将图像附加到提示中。因此,每当我们构建一个可视化图表,然后意识到我们想讨论该图表中显示的某些内容,并希望ChatGPT看到我们所看到的,我们可以简单地截取该图表的屏幕截图,并将其附加到我们的提示中。
例如,我注意到图表在1940年之前有一个奇怪的“沙漏”形状。我不喜欢这个,我想弄清楚为什么它在那里。我截取了屏幕上该部分的截图,附加到提示中,并说:“解释1940年之前图表看起来奇怪的原因。”
通过抓取我们所看到内容的屏幕截图或照片,我们就可以通过共享的图片来讨论它。我鼓励你这样做:每当你想要讨论你所看到的内容时,就使用多模态提示,为你所看到的内容拍张照或截个图,并将其提供给ChatGPT,否则它无法以你的方式“看到”。
一旦我这样做,它就会分析并回复:“1940年之前图表外观奇怪(包括急剧的峰值和波动的趋势)可能归因于几个与数据相关的问题或历史误差。”这很吸引人,它准确地看到了那个现象,并用文字描述了我看到并让它查看的东西。
它分析的可能原因包括:
- 1940年之前电影产量有限,流派分类不成熟:电影业尚处于起步阶段,每年制作的电影相对较少,流派多样性不明显。
- 数据质量和不完整记录:20世纪初的记录可能不够全面。
- 流派分配挑战:早期电影行业的流派往往没有标准化或明确定义。
- 小样本量效应:由于1940年之前制作的电影数量很少,基于百分比的可视化方法可能导致每年百分比波动很大。
然后它给出了一个很好的总结:可能是数据稀疏性、流派定义变化、电影数量少、数据不一致性。
快速分析与问题修复
当我们询问“为什么会这样”并且它提出了一系列可能性之后,我们可以跟进并告诉它:“根据你的解释或关于如何解决这个问题的建议,去分析数据并确定哪一个是根本原因。”
基本上,我告诉它:“你刚才说的所有都可能是问题,我要你做个分析来确定哪一个才是原因。” 请花点时间思考一下这里正在完成的复杂任务,并欣赏这是多么神奇。想象一个同事向你展示这张图表,你说:“这图表看起来有点怪。” 他们说:“嗯,可能是A原因,可能是B原因,可能是C原因,可能是D原因。” 然后你说:“很好,把你刚才说的所有可能性都分析一遍,找出是哪一个导致的。” 这正是我们在这里所做的,而ChatGPT可以为我们完成这个分析。
它正在进行快速原型设计,同时也在对可视化本身进行快速分析,帮助理解它为什么看起来是那样,这是正确的吗?或者是我们需要在可视化中修复的问题?当我们说“分析数据并确定哪一个是原因”时,我们是在告诉它去跟进它自己提出的关于可视化可能存在问题的建议。
然后它回复说:“好的,看起来关键发现是:电影产量稀疏和独特流派数量多。” 所以基本上,问题就是电影数量少,但流派很多。我说:“很好,让我们从1950年开始吧。” 既然1940年之前有问题,我们干脆从1950年开始分析,这在我的分析案例中是可以接受的。
请注意,我们正在非常快速地完成这个修复过程。如果我必须直接在Excel中处理这个问题,会花费更长的时间。但通过这种交互式操作,我可以真正快速地探索数据,比在像Excel这样后期用于实现数据的工具中要快得多。
当我告诉它从1950年开始重做时,它非常快速地过滤了数据,并从1950年开始重新生成了图表。现在我得到了一个看起来不错的、可以使用的可视化图表。
总结与应用
本节课中,我们一起学习了如何利用ChatGPT进行数据可视化的快速原型设计。
至此,我已经得到了想要的可视化图表。我可以选择将这个可视化图表导出,作为我的终点,放入PowerPoint幻灯片,或者导出我需要的所有成果物以及创建过程的讨论,以便他人可以复现。
或者,在这一点上,我已经有了可以带入其他工具(如Excel)并实现的东西。当我使用Excel界面工作时,Excel内的可视化可以更新,但快速原型设计让我能自由地探索许多不同的选项来理解数据,从而更有效地理解数据中的潜在问题或可视化中的问题,这些问题可能会限制我们的视野或产生我们想要消除的奇怪伪影。
我们可以逐一消除它们,进行分析,完成所有这些有趣的事情。一旦我们确定“是的,这确实是我想要展示的”,我们就可以花时间进行最终实现。

这使我们最终能够获得更好的结果。我们这样做的真正原因,是希望得到一个更好、更严谨的分析,一个更好的可视化,一个对数据情况更好的传达,而不是更容易出错或考虑不周的东西。我们希望最终得到经过深思熟虑的成果,探索了更多选项,更详细地探索了数据。现在,我们可以专注于如何实现这个图表的细节,如何使其在Excel中工作。这让我们能够专注于产出更高质量的工作。虽然我们可能也会更快地达到目标,但工作质量才是我们需要关注的重点。
021:根据图片复现Excel可视化图表

在本节课中,我们将学习如何利用ChatGPT,将一张可视化图表的图片作为灵感来源,复现并应用到自己的数据上。我们将探索通过上传截图和数据,指导AI理解并生成类似图表的方法。
概述:模仿是创新的起点
人们常说,模仿是最真诚的奉承。在数据可视化领域,这一点尤为正确。寻找灵感——无论是参观博物馆欣赏艺术表达,还是研究优秀的图表设计——对于提升我们呈现数据思想的能力至关重要。
然而,找到理想的图表样式后,一个挑战随之而来:我们如何将其实现?幸运的是,ChatGPT可以作为一个强大的工具,帮助我们将目标和灵感转化为具体的数据可视化方案。一种有效的方法就是向它展示我们想要实现的图表图片。
核心步骤:向ChatGPT展示图片与数据
上一节我们介绍了寻找灵感的重要性,本节中我们来看看如何将灵感付诸实践。假设我们看到了一个非常出色的可视化图表,并希望用自己的数据制作一个类似的图表。
具体操作步骤如下:
- 准备材料:首先,你需要准备好两样东西:目标图表的截图,以及你自己的数据集(例如一个Excel文件)。
- 开启新对话:在ChatGPT中开启一个新的对话会话,以确保指令清晰。
- 上传与指令:将截图和数据集文件上传给ChatGPT,并附上清晰的提示词。
以下是一个有效的提示词示例:
首先,描述这个文件中的数据,列出每一列及其含义。数据来自一个Excel文件。
然后,查看我提供的可视化图表截图,尝试使用提供的数据创建一个类似的图表。
这个技巧在你使用ChatGPT进行可视化工作的过程中将非常重要。你可以对ChatGPT生成的图表截图,也可以对你看到的任何优秀图表(杂志、网页信息图等)进行截图,然后展示给ChatGPT。图像为ChatGPT提供了关键的上下文信息,帮助它精准理解你的目标。
理解AI的工作机制与迭代优化
ChatGPT接收到指令后,会先分析你的数据结构,然后观察截图中的图表样式。需要注意的是,它并非直接生成像素图像,而是通过编写代码(例如Python代码)来尝试复现该可视化效果。
因此,初始结果可能不会与截图完全一致。但这只是一个起点。之后,你可以进一步要求ChatGPT将这种可视化方案转化为其他工具(如Excel)能实现的步骤。
我们不仅可以通过文字对话来探索和调整图表,还可以利用图像进行更高效的交互:
以下是几种利用图像进行迭代的方法:
- 反馈与调整:你可以将AI生成的图表截图返回给它,并指出需要调整的部分(例如“我不喜欢这部分颜色”或“这个标签位置很奇怪”)。
- 标注与绘图:你可以在图片上进行数字标注或手绘修改,然后上传这张标注后的图片,让ChatGPT根据你的标注进行修改。
这种方式为你和AI模型建立了关于“目标效果”的共享视觉理解。你可以通过图像以及对图像的标注,来表达你的目标、修改意见和任何需求。这是一种非常强大的交互方式。
总结:将视觉灵感转化为数据叙事
本节课中,我们一起学习了如何利用ChatGPT,以图片为桥梁,将外部的可视化灵感应用到自己的数据上。关键步骤包括:准备目标截图和数据、通过清晰的指令引导AI、以及利用图像进行迭代优化。

这种方法允许你从周围的世界获取灵感,当你找到心仪的图表样式时,可以立即将其带入与ChatGPT的对话中,开始探索如何用你的数据来实现它,从而更高效地完成从灵感到实现的创作过程。
022:在ChatGPT指导下创建Excel可视化图表 📊

在本节课中,我们将学习如何利用ChatGPT的指导,将已设计好的数据可视化方案,在Excel中高效、准确地实现。核心在于理解如何将数据重塑为最易于生成图表的格式,并遵循清晰的步骤来构建图表。
上一节我们探讨了如何与ChatGPT协作设计可视化方案。本节中,我们来看看如何将这些方案在Excel中落地实现。
一旦我们设计出了一个出色的可视化方案,下一步就是将其在我们选择的工具中实现。在本案例中,我们将在Excel中实现它。
那么,如何将这个已构思好的可视化方案进行复现,以便在Excel中随着数据变化而动态可视化呢?
以下是实现这一目标的有效策略。我们希望找到实现此目标的最简单方法。
我们希望尝试在Excel中创建一个表格或一组列,使得生成图表变得轻而易举。我们的目标是让生成图表变得像选中数据然后点击“插入图表”那样简单。这意味着我们需要在前端完成所有数据整理、表示和分析工作,使得最终的可视化步骤极其简单。
这样做并非必须,但它会让你的工作轻松很多。部分原因在于,对于ChatGPT而言,思考数据的列格式和表示方式,可能比思考复杂的表达式和可视化本身更容易。因此,更有效的方法是思考如何将数据整理成一种格式,使得实现可视化成为微不足道的细节。
我将从这次对话的末尾开始,添加一个额外的提示:“在Excel中复现这个图表。为了让可视化尽可能简单,我需要创建哪些列?”
ChatGPT将返回并描述为了使这个可视化变得简单,我应该拥有的数据形状。
当我们快速原型化可视化时,我们是在Python中进行的。Python可以完成一些非常复杂的操作并为我们自动化所有步骤。但一旦进入Excel,它无法为我们自动化所有事情。在某些情况下,它可以使用VBA脚本,我们将在某个时间点讨论这一点。但现在,我希望你思考不使用VBA脚本的情况。当你不用它时,你将不得不做一些手动工作。我们希望最小化手动工作,并尽可能降低出错的可能性。最简单的方法是尝试生成一系列列或一个新工作表,将数据整理成正确的格式,以便我们能全面查看并了解情况。
ChatGPT回复说,最佳方式是:将年份作为行,将所有流派作为列。这并非我们数据的当前形状。所以,它基本上是在告诉我们,这就是你需要重塑数据以简化可视化的方式。
因此,一旦我们得到了这个目标——即让ChatGPT描述一个非常易于进行可视化的数据格式,我们就可以接着说:“请根据我当前的数据,给出分步说明,以创建一个具有这种格式的独立工作表。我想使用数据透视表。”
在这个案例中,我知道我想使用数据透视表,因为我认为这会使事情对我更容易。当然,你需要一些Excel专业知识才能提出“我想使用数据透视表”这样的要求。如果你不知道,可以省略这些细节,让ChatGPT为你选择。但目标是先让它描述数据形状,然后跟进询问如何在Excel中将当前数据转换成那种形状。
现在,我想花点时间说明:每次你提出这个问题,它可能会给出略有不同的实现方式,甚至完全不同的方法。你应该利用这一点。例如,如果它给出的选项看起来需要大量手动工作(比如没说用数据透视表,而是说手动为每个流派创建一列),而你不喜欢,你可以编辑你的提示词重新提交。它可能会返回并说:“好的,这是使用数据透视表的版本。”因此,不要仅仅接受第一个答案,因为它可以提供许多不同的答案和实现方式。
同样,如果你不喜欢它最初给出的数据形状,你可以描述你想要的形状,引导它达到目标。你不必接受它说的一切,你可以随时返回并重新提交相同的提示词,或稍作编辑后重新提交,或继续对话并说:“不,这不是我想要的,我想做点别的。”但请记住这一点。
在本案例中,它回复说:好的,以下是如何使用数据透视表来实现。加载数据到Excel(这很明显)。准备数据:拆分“流派”列。这很有趣,因为我需要从当前这种“动作,喜剧,冒险…”的单一列格式,拆分成分离的列或条目,并且我只想要第一个流派。它告诉我应该这样做。
事实证明,它的想法是正确的,但它没有完全理解我数据的布局。这里有一个它难以察觉的有趣后果:如果我将此列拆分成单独的列,我可能会覆盖右侧的数据。由于我的“流派”列足够靠右,拆分操作可能会覆盖其他数据。这是我在实际操作并开始查看时发现的。所以,哦,这不会达到我想要的效果。因此,我稍微调整了一下:我先把那列移开,然后拆分它,再取我需要的值。所以,它是一个指南,但最终,你仍然需要保持关注。它不应该取代你的思考。如果你不理解它在做什么,你真的不应该尝试去实现所有这些步骤,因为如果你不理解,你很有可能会犯错,产生错误的可视化,并做出错误的决策。归根结底,你要不断提问,不断与它协作,直到你理解它在做什么。
如果你不理解它在做什么,就不要继续。在本案例中,我发现了它正在做一件有细微错误的事情,我直接手动纠正了它。但你也可以告诉它:“嘿,那一步错了,能给我另一种方法吗?因为我会遇到这个问题。”
然后它说:插入数据透视表。描述了如何设置数据透视表。我完成了所有这些步骤。它告诉我如何将其改为基于百分比,进行一些清理和其他操作。最终我得到的是一个数据透视表,它基本上以它之前提供的格式给出了数据。如果你看这个数据透视表,它本质上实现了我们在这里看到的效果:流派基本上作为列,年份作为行,百分比作为值。虽然在排序格式上略有差异,但我们看到行向下延伸,流派作为列横跨。
然后,从这里开始,它告诉我们如何创建折线图:选中所有数据,点击‘插入’选项卡,选择折线图,然后我们就得到了可视化图表。
因此,当你在尝试复现可视化时,我希望你不要过多地思考“如何实现可视化”,而是首先思考:为了创建这个可视化,我能将数据放入的最简单格式是什么? 你的工作重点应该放在如何正确地重塑数据上。
在你尝试创建可视化之前,重塑数据就是核心工作。你希望将精力投入到重塑数据上。另一个原因是,你学到的所有关于如何构建公式、如何创建单独的列、如何调试和定位问题的技能,这时都能派上用场。你可以使用相同的技术来确保数据被正确重塑,因为很可能你将使用一些公式将数据重塑为你想要的格式。然后,你可以应用所有你学过的技巧,确保在创建这些列时,方法简单易懂,并有助于你定位错误。
一旦数据被正确重塑,你确认它是正确的并检查了错误,你就可以生成可视化图表了。但是,如果你试图一步完成太多事情,就很容易出错。我想再说一次:早在ChatGPT出现之前,人类就一直在Excel中犯错。我们不需要ChatGPT的加入才能在Excel中犯错,而ChatGPT在Excel中也会像我们一样犯错。我们不希望的是将两者结合起来,导致人类不理解错误,而ChatGPT也没意识到它犯了错,然后我们都假装一切正确。我们不希望走到那一步。
我们想要做的是,以这样一种方式使用ChatGPT:帮助我们提高分析和可视化的严谨性,以及公式的正确性。我们通过使用ChatGPT来帮助我们思考可视化应该是什么样子,进行更多检查,然后帮助我们以一种可以逐步检查的方式来实现。只有在我们获得了经过仔细检查的、真正稳健的数据之后,我们才去生成可视化。当我们生成可视化时,我们希望它非常直接了当,以至于我们犯错的几率最小。我们通过让ChatGPT思考如何构建数据以使可视化尽可能简单来实现这一点。

本节课中,我们一起学习了如何利用ChatGPT指导在Excel中实现数据可视化。核心流程是:1) 让ChatGPT建议最简数据格式;2) 获取分步操作指南(如使用数据透视表);3) 在理解的基础上手动执行并检查;4) 基于整理好的数据轻松插入图表。关键在于将工作重心放在数据重塑而非图表生成本身,并始终保持审慎检查,以确保最终结果的准确性。
023:用ChatGPT快速构建Excel可视化图表

在本节课中,我们将学习一种高效技巧,利用ChatGPT快速生成Excel图表,而无需在Excel内部进行复杂的数据整理与计算。这种方法能显著提升创建可视化图表的速度。
概述
上一节我们探讨了在Excel内部使用公式和数据透视表来整理数据并创建图表。本节中,我们来看看一种更快捷的“作弊模式”。这种方法的核心思想是:将繁重的数据整理工作交给ChatGPT(或Python)完成,我们只需将整理好的静态数据导入Excel进行可视化。
核心方法:分离数据处理与可视化
我们并不总是需要让Excel图表随着原始数据的变化而实时更新。同样,我们也不一定非要在Excel内部完成所有中间数据的计算和整理工作。
如果我们的核心目标是快速得到可视化图表,并且不介意中间数据是否与原始数据在Excel中保持动态链接,那么可以采用一种更高效的方法。
操作步骤
以下是利用ChatGPT快速构建Excel图表的步骤:
-
指令ChatGPT进行数据整理:在对话中,向ChatGPT提供原始数据,并明确指令。例如:“我需要用Excel重新创建这个图表。请根据原始数据,生成任何必要的衍生数据,并以CSV格式提供给我,同时附上在Excel中创建该图表的逐步指南。”
-
获取并下载整理好的数据:ChatGPT会在其环境中(例如使用Python)执行数据筛选、聚合、重塑(如将数据整理为以年份为行、类型为列的表格格式)等操作,然后提供一个CSV文件的下载链接。
-
将数据导入Excel:下载CSV文件,并将其导入到Excel工作表中。
-
在Excel中创建图表:根据ChatGPT提供的步骤指南,使用导入的静态数据在Excel中创建(例如折线图)并格式化图表。
方法优势与局限性
优势:
- 速度极快:最耗时的工作——将数据重塑为易于可视化的格式——由AI自动完成。
- 流程简化:你无需在Excel中手动构建复杂的公式或数据透视表。
局限性:
- 数据静态化:一旦将CSV数据复制到Excel,中间数据就与原始源数据断开了链接。它们成为独立的实体,无法随原始数据自动更新。
- 适用场景:这种方法非常适合用于一次性分析或对数据实时更新要求不高的报告。只要你在导入后仔细检查中间数据和最终图表的正确性,这通常不是问题。
总结
本节课我们一起学习了一种提升Excel图表制作效率的技巧。其核心公式可概括为:
快速可视化 = ChatGPT处理数据(输出CSV) + Excel静态制图

当你的首要目标是快速获得一个正确的图表,并且可以接受使用静态的、整理好的中间数据时,这种方法能极大地节省你的时间和精力。它让你能够更专注于数据洞察本身,而非数据整理的过程。
024:用ChatGPT对Excel可视化图表进行双向检查 👁️

概述
在本节课中,我们将学习如何利用ChatGPT作为“第二双眼睛”,对Excel中创建的可视化图表进行双向检查。这种方法旨在补充人工审查,帮助我们更有效地发现图表中可能存在的细微差异或错误,从而提升数据分析的严谨性和质量。
正文
人眼在观察事物时并非总是完美无缺。有时我们操作过快,有时注意力不够集中,尤其是在面对复杂的可视化图表时,可能会忽略其中细微的差异或不一致之处。
有趣的是,ChatGPT可以充当我们的第二双眼睛来审视这些可视化图表。我们不仅可以利用它来检查公式和数据,还可以对数据和公式进行双向检查。同样,我们也可以让它协助检查可视化图表本身。
需要明确的是,这样做并非为了取代人眼或人工审查。其目的是补充人工审查,增加一道检查工序,从而降低我们犯错的可能性。
接下来,我将展示如何进行可视化图表的双向检查,即如何利用ChatGPT作为我们的第二双眼睛。
检查流程
我首先在ChatGPT中创建了一个可视化图表。我非常喜欢这个图表,然后我让ChatGPT指导我如何在Excel中重新创建并实现这个可视化。
现在我想知道的是,我在Excel中得到的这个版本,是否存在任何我可能忽略的明显错误?
我已经用肉眼检查过,它看起来很不错。但对于如此复杂的图表,我的肉眼检查可能并不完全准确。因此,我喜欢做一个非常简单的检查:只需截取两个可视化图表的屏幕截图。
然后将它们导入ChatGPT进行双向检查,或者说,让这第二双眼睛也看看。我们让ChatGPT也“看一看”,看它是否能注意到任何差异。
向ChatGPT提问
我向ChatGPT提问:“除了图例、布局、颜色、字体等方面,你是否看到任何可能导致两个图表存在差异的关键可视化或数据上的不同?”
再次强调,这并非完美的方法。我并不期望ChatGPT的视力一定比我好,我只是想要一个二次检查。即使我们俩都没发现问题,也不意味着它就是完美的,你仍然需要去查看底层数据和其他方面。但这能让我获得一个第二意见。
ChatGPT的分析结果
ChatGPT回复并进行了分析:
以下是关键差异分析:
- 整体趋势一致性:两个图表都显示“戏剧”类别的总体趋势一致。该类别从1950年起在两个图表中均表现出稳定的突出地位。
- 线条位置与X轴一致性:从1950年到近年,跨X轴(年份)的趋势线在两个图表中看起来都正确对齐。
- Y轴数值范围:两个图表中关键类别的Y轴数值范围相似。主要类别保持在25%到40%的范围内。次要类别(如科幻和动作)在两个图表中的百分比水平也大致相同。
- 线条顺序与密度:该图表的一个显著特征是低百分比范围内类别的密度。两个图表均未显示任何异常的峰值或骤降,这表明不存在一个图表有而另一个图表没有的数据问题。
- 图例与标签:图例位置不同,但我已告知这可以接受。
分析总结:数据没有差异,视觉差异是表面性的,关键趋势一致。
这实际上可能是对这两个图表比我通常所做的更深入的分析。如果让我并排观察,我可能会觉得“嗯,看起来不错”。而ChatGPT提供了更详细的分析。当然,这个分析可能有缺陷或错误,但它让我对图表的正确性多了一份信心。
故意引入错误进行测试
让我们在Excel图表中故意制造一些错误。例如,我们让图表从一个不同的起始年份开始,这样数据看起来就会有点不同。当我们给它看一个截图,其中可视化本身相同但数据的起始点略有偏移时,它能发现吗?
同样,我提供了截图。但这次,为了让测试更公平、更具挑战性,也为了更清晰地看出差异,我提供了两个截图:一个是原始正确的Excel可视化图表,另一个是存在细微错误的Excel可视化图表(起始点偏移)。它能匹配并发现两个Excel可视化之间的差异吗?
答案是肯定的,它可以。
ChatGPT识别错误
它识别出的第一个显著差异是:在出错的Excel版本中,图表从1965年开始,而原始图表是从1950年开始的。因此,它发现我基本上移动了可视化的起始点。
总结与核心价值
这非常令人惊叹,它确实为我们提供了一双额外的眼睛来检查可视化图表。
再次强调,我们不想取代人工审查,也不想取代从其他人那里获得的二次检查。但对我个人而言,我需要一个额外的检查来增强我工作的严谨性。我可以利用ChatGPT来检查我从Python得到的和从Excel得到的结果是否一致。
因为如果我能让两个可视化图表在两边看起来相似,我就能建立信心:我正确地遵循了ChatGPT的指导,并且没有犯任何错误。我也可以确信,没有出现数据损坏或其他可能引发问题的情况。
当然,这并不意味着ChatGPT正确地实现了我所陈述的目标而没有误解。不,它不意味着这一点。但它让我感到安心:我在Excel中遵循ChatGPT指令的实现,与它在Python端所做的结果相匹配。这让我相信事情被正确地完成了。虽然错误仍然可能发生,但这确实是我们为了提升工作严谨性和质量所能做的又一项检查。

核心公式:
最终信心 = 人工审查 + ChatGPT辅助检查
这个公式代表了通过结合人工智慧与AI工具,我们可以构建更可靠的数据分析工作流程。
025:课程总结与致谢 🎓

在本节课中,我们将一起回顾整个课程的核心收获,并对未来的学习与实践提出展望。
我希望你喜欢这门课程,并受到启发,认识到我们可以去完成那些看似不可能的任务。借助ChatGPT,这些任务如今变得完全可能实现。这促使我们重新思考如何对待工作,如何运用像Excel这样简单的工具,将其转变为一种强大的媒介。我们可以从一张照片、一份文档出发,完成令人惊叹的计算,帮助实现各种复杂的想法和应用。
通过让ChatGPT成为我们的合作伙伴,它赋予我们的能力远超以往仅使用Excel所能达到的极限。
如果你喜欢这门课程,我将非常感激你能将它推荐给其他人。如果你获得了课程证书,请将其分享到LinkedIn。也欢迎你在LinkedIn上联系我,我很乐意与你保持连接,并希望你继续关注范德堡大学以及我在创建新课程方面的工作。
最重要的是,我衷心感谢你花时间与我一同完成这门课程。我希望你能去创造一些了不起的东西。如果你真的创造了什么,请分享出来。我非常乐意在你发布的任何关于你惊人成就的内容中被提及,让更多人知道可以通过学习这门课程来掌握这些技能。
非常感谢你,我真心感激你在这门课程中投入的所有时间。
本节课中,我们一起回顾了ChatGPT与Excel结合带来的变革性力量,并展望了未来的学习与实践方向。感谢你的参与,期待看到你的精彩创造。
026:融合埃塞俄比亚与乌兹别克风味的膳食计划构建 🍽️

在本节课中,我们将通过一个具体的示例,来理解如何将ChatGPT等大型语言模型视为强大的创意原型工具,而非仅仅是写作或问答的助手。我们将看到一个从膳食计划构思到互动游戏开发的完整流程,展示如何利用AI工具将抽象想法快速具象化。
概述:将想法赋予形态 💡





我希望你将ChatGPT和这类大型语言模型视为一种工具,你可以用它来将你的想法具象化,让你的思考得以实现,并能够探索大量不同的概念,在与工具的互动中不断优化它们。

我不希望你将这些工具仅仅看作是用来写文章或回答问题的。那样做大大低估了这些工具的能力。它们是真正能让你完成奇妙工作的工具。
接下来,我将尝试给你一个示例,希望能激励你认识到这些工具拥有巨大的能力,这些能力可以让你完成那些原本非常困难的事情。





构思一个融合菜谱挑战 🧑🍳
那么,我想到了一个什么样的任务呢?一个我们都能理解的、贴近生活的任务。我想到了我的家庭,并构思了一个有趣的想法。


在纳什维尔,我们有一家很棒的乌兹别克斯坦餐厅,也有很多很棒的埃塞俄比亚餐厅。我就在想,创建一个融合了乌兹别克斯坦和埃塞俄比亚美食的膳食计划会是什么样子呢?

此外,我过去尝试过生酮饮食,所以我们能否尝试让它也符合生酮原则,因为我仍然倾向于限制碳水化合物的摄入?而且,最终我肯定需要购买所有食材。如果这些食材在我家附近的普通杂货店里不容易买到,我可能就不会去烹饪这些餐食。


向ChatGPT发起挑战 🤖

于是我想,让我们去问问ChatGPT,看看它能否帮助我们解决这个问题,能否帮我们构建这个膳食计划的原型。我打开了ChatGPT并输入:
提示词:请为我的家庭创建一个基于埃塞俄比亚和乌兹别克斯坦美食融合的膳食计划。我希望是生酮饮食,每天不超过2000卡路里。选择的菜肴,其食材应能在美国普通杂货店轻松买到。
这是一个难题,对吧?我认为世界上没有谁能轻易回答这个问题。即使有,我也可能找不到他们,雇佣他们的成本可能太高,而且他们肯定无法像我即将获得答案这样快地完成它。
初版膳食计划与解读 📋
我让ChatGPT为我做这件事,它回复道:“这是一个结合了埃塞俄比亚和乌兹别克斯坦风味、同时符合生酮原则且每日热量在2000卡路里以内的示例膳食计划。”
早餐:炒鸡蛋配炒洋葱、番茄和埃塞俄比亚Berbere香料。
请注意它的做法:它在括号里注明(用辣椒粉、红甜椒粉、大蒜粉、姜、孜然和香菜制成)。这表明Berbere香料是你在普通美国杂货店可以买到的东西。所有这些香料都很容易从普通美国杂货店获得。所以,它不仅回答了我的问题,给了我一道埃塞俄比亚早餐菜肴,还提供了我能获得这些香料的信息。
我可能对埃塞俄比亚菜了解不够,不知道这是否是一道非常正宗的菜,它可能只是受其启发并且非常美式化。但就我的目的而言,这已经相当令人印象深刻了。

它接着给出了午餐:乌兹别克风味羊肉串配烤蔬菜(甜椒、西葫芦、茄子)以及黄瓜番茄沙拉(用橄榄油和柠檬汁调味)。所有这些都相当符合生酮原则。


现在,它可能包含错误,可能并不完美。但我可以在此基础上继续工作,改进和完善它。这是我希望你在整个课程中思考的一点:不要把它看作一次性交易。我提出问题,查看答案,然后判断好坏。不,这是一个迭代过程。
迭代一:添加份量信息 ⚖️
我回到对话中,想到这个计划还缺少一个关键信息:我不知道该吃多少。所以我说:“你能根据我的2000卡路里限制,为每道菜给我一个大概的份量吗?”
ChatGPT回复:“当然可以。以下是基于每日2000卡路里限制的每道菜的大致份量。”
以下是早餐的示例:
- 早餐:炒鸡蛋配炒洋葱、番茄和埃塞俄比亚Berbere香料混合物。
- 两个鸡蛋
- 半杯洋葱
- 半杯番茄
- 一茶匙Berbere香料混合物
- 配菜:牛油果片(四分之一个中等大小牛油果)
它继续为其他菜肴提供了份量信息。我并没有去计算热量或检查宏量营养素是否完全符合我的饮食要求,因为我当时正专注于原型设计,探索这个概念。我可以继续优化它,要求它分解细节并确保完全符合我的需求。
但我想尝试一些不同的东西。我将继续这个对话线程,给我这个疯狂的想法赋予更多形态。
迭代二:融入趣味故事吸引孩子 📖
我想到,如果我真的要把这个疯狂的想法带进家庭,我必须考虑我九岁的儿子。我和我妻子是更愿意尝试新食物的,但我九岁的儿子并不总是愿意吃我们想出来的所有东西。
那么,我能做些什么来帮助他对尝试这些新事物感到兴奋呢?我想我可以回到ChatGPT,尝试让它帮助我们。
于是我说:“ChatGPT,我儿子9岁。有时他不愿意尝试新菜。为了让这次美食冒险对他更有趣,你能为每道菜创作一个简短的宝可梦对战故事吗?如果你不熟悉,宝可梦是一种集换式卡牌游戏和卡通。我儿子很喜欢。我会在晚餐前和他一起读这些故事,让他对尝试新食物感到兴奋。请确保故事以悬念结尾,激励他去尝试新食物。”
也许我能找到一个人,他能给我一个基于乌兹别克和埃塞俄比亚美食的生酮膳食计划,但要找到这样的人并完成所有这些事情会很耗时。而现在,我们正进入一个领域,要找到一个能完成所有这些事情的单一人类个体将非常困难,而且成本高昂,而我只用了短短几分钟就做到了。
ChatGPT回复:“当然可以。以下是为每道菜准备的一些简短宝可梦对战故事。”
例如,针对带有Berbere香料的早餐,它写道:
故事:皮卡丘和它的朋友们正在探索埃塞俄比亚的荒野,突然遭到一群狡猾的宝可梦盗贼的伏击……故事继续,他们与一只Berbere龙战斗,最后写道:“最终,他们取得了胜利,但在此之前,这条龙留下了一种火辣的香料,为他们的早餐鸡蛋注入了浓郁的风味。你能帮助皮卡丘和它的朋友们击败Berbere龙,并享用这顿辛辣的早餐吗?”
这非常棒,对吧?我们从一份膳食计划,到现在帮助我儿子通过融入他真正感兴趣的概念,对吃这顿饭感到兴奋。它实际上还制造了一个悬念。这是最好的悬念吗?也许不是,但这重要吗?不重要。因为我正在快速地试验我的想法,试图将我的思考具象化,试图理解这会是什么样子。我可以继续改进它,但它已经做得相当不错了。我或许可以把这个故事读给我儿子听,让他对尝试这道菜更感兴趣。

迭代三:设计互动数学游戏 🎲

然后我想,让我们把这个疯狂的想法再推进一步。我们将坐在餐桌旁,阅读ChatGPT为我生成的这些疯狂故事,试图让我儿子对吃这些菜感到兴奋。我想,我们在餐桌上还会做什么,可以融入其中呢?我们经常谈论我儿子在学校学的东西,他喜欢学习数学和玩数学游戏。
我想,有没有办法把这个也整合到这个疯狂的想法中呢?于是我说:
“ChatGPT,我想请你和我九岁的儿子玩一个数学游戏,教他关于分数除法和营养的知识。每次问他一个涉及宝可梦和这些主题的问题,把它变成一个游戏。当他答对时,宝可梦就获胜。请提出第一个问题。”
ChatGPT回复:“太好了!让我们玩一个有趣的、涉及宝可梦和营养的数学游戏。问题一:皮卡丘和它的朋友们计划一顿饭,其中包括半杯熟米饭,但他们需要将其平均分给三只宝可梦。每只宝可梦能得到多少米饭?” 它给出了提示,并说:“如果你卡住了,随时可以向我寻求更多提示或指导。” 然后,它等待我儿子回应。




我们输入了答案:1/6。现在,请注意,之前是我们向它提问,现在它向我们提问了。我们让它创建了这个数学游戏,现在它向我们(或我儿子)提出了一个问题。
ChatGPT回复:“很好,答对了!每只宝可梦将得到六分之一杯熟米饭。我们通过将二分之一除以三得到这个答案……” 然后它为我们列出了计算过程。
从构思到软件原型 🖥️
至此,我们从一份膳食计划——这个基于乌兹别克和埃塞俄比亚美食、符合生酮原则、能在普通商店买到食材的疯狂想法——开始,然后为其添加了份量信息,接着又让它生成了带有悬念的宝可梦对战故事来帮助我儿子对菜肴感到兴奋,最后我还创建了一个基于营养和宝可梦的数学游戏,让它变得更有趣。
然后我想,我们还能做什么?让我们真正给这个想法一个最终的形态。我们已经有了膳食计划、故事和游戏。我们能否给这个游戏一个真正的形态?于是,我运用了我作为计算机科学家的领域知识,说:“让我们为此创建代码。” 我们实际上要为其制作软件。
我说:“让我们用Python为此创建代码,但我希望它是一个网络应用程序。” 我不会详述所有细节,因为这需要特定的领域知识。但关键是,ChatGPT随后生成了实际的软件代码。虽然我没有全部展示,但重要的是,当我们完成时,我们实际上拥有了可以运行的真正软件,我可以在电脑上运行它,和我儿子玩这个数学游戏。
总结:AI作为创意原型工具 🚀
你可以看到,我们从一个简单的想法开始,迅速将其原型化为各种不同的形态。在任何时间点,我们都可以进一步优化其中一种形态。例如,我们可以优化那份没有份量信息的膳食计划,为其添加相关内容。我们可以将其重塑成完全不同的形态。最终,我们可以将创建的某种形态从语言模型中提取出来,并将其转化为软件。
这种将我们的想法快速迭代和原型化的能力,只是我们使用像ChatGPT这样的大型语言模型所能做的事情的一个例子。我希望这个示例能激励你,对你在本课程中将学习到的能力感到兴奋。
在本节课中,我们一起学习了如何将ChatGPT视为一个强大的创意伙伴,通过一个从融合菜谱构思到互动游戏开发的完整流程,展示了如何利用AI工具将抽象概念快速、多形态地具象化。关键在于迭代与原型设计,而非寻求一次性完美答案。
027:课程概述 🎯
在本节课中,我们将学习提示工程的基本概念、其重要性以及如何利用像ChatGPT这样的大型语言模型来释放人类创造力。我们将探讨课程的核心目标、所需的前置知识以及你将掌握的关键技能。
欢迎来到提示工程课程。我是范德堡大学的朱尔斯·怀特,我将引导你探索这个绝对引人入胜的主题。我是范德堡大学计算机科学副教授,也是工程学院战略学习项目的副院长。我将与大家探讨一个对我们所有人都非常及时且重要的话题:如何与像ChatGPT这样的大型语言模型进行交互。
我希望这门课程能激励你开始使用像ChatGPT这样的大型语言模型。我们将在课程中详细讨论什么是大型语言模型。目前,你可以将“ChatGPT”和“大型语言模型”这两个术语互换使用。
我们看到新闻中有很多关于这些工具的来回讨论。在某些方面,它们被描述为考试作弊或写论文的工具,也被视为剽窃工具或将要接管世界的工具。我真正想重塑你对这些工具的讨论,让你看到,从我的角度来看,它们主要是一种新工具,能真正帮助释放人类创造力,让你做以前做不到的事情,快速地将你的想法赋予形式。这些工具让我能比以前更快、更好地做事。
我进入计算机科学领域,实际上是从视觉艺术开始的。我曾学习东亚研究一段时间,最终成为了一名计算机科学家。但我一直对创造力充满热情,并理解如何利用不同的媒介,无论是绘画、陶瓷还是代码,来做有趣的事情。我将大型语言模型视为一种新的基础媒介。我可以用它来编程,也可以用它来创作艺术,改进我的写作,帮助进行思想实验。像ChatGPT这样的大型语言模型有太多有趣的用途,而我们没有恰当地看到它们被讨论。因此,这门课程真正要教你的是如何利用这些模型的所有有趣能力。
但为了利用这些能力去做真正有创意的事情,你必须理解如何编写提示。这就是本课程的内容:如何与ChatGPT或另一个大型语言模型交互。提示就是你编写并输入给ChatGPT或类似模型以获取某种输出的内容。
从根本上说,这些是非常令人兴奋的工具,我认为它们扩展了我们作为人类表达自我、探索新想法以及比以往更快地将想法变为现实的能力。
现在,为了开始这门课程,我实际上请ChatGPT帮忙欢迎我们,并告诉我们一些我们将要学习的内容。
ChatGPT说:“欢迎来到提示工程课程。在本课程中,你将学习关于提示工程这一令人兴奋的领域,它主要涉及创建能够编程大型语言模型以产生高质量输出的提示。我们将探索不同类型的提示、它们的模式以及改进和完善它们的技术。你还将学习如何将大型语言模型用于各种任务,如知识探索、原型设计、内容生产和评估。到课程结束时,你将更好地理解如何有效使用大型语言模型及其塑造计算未来的潜力。让我们开始吧。”
我的第一个问题是:我需要确保自己不必是程序员也能从这门课程中受益吗?我需要懂编程才能学习这门课程吗?
不,你不需要任何编程经验来学习这门课程。本课程的重点是创建有效的提示并使用大型语言模型来实现你期望的输出。虽然理解编程可能有所帮助,但对于理解我们将在本课程中涵盖的概念和技术来说并非必需。
在学习本课程之前,了解其他哪些事情可能对我有帮助?
虽然编程经验不是必需的,但如果你熟悉一些基本的计算机概念会很有帮助,例如文件管理、打开和保存文件以及使用命令行界面。这里说的命令行界面,我们需要类似ChatGPT这样的工具。此外,良好的写作技能和创造性思维能力对于为大型语言模型生成有效的提示非常重要。最后,乐于探索新的、不断发展的技术和方法将是充分利用本课程的关键。
因此,正如ChatGPT在这里恰当地指出的,你真正需要知道的东西并不多。你需要一些基本的计算机概念理解。你需要能够打开ChatGPT并与之交互。显然,如果你不能使用这样的工具,你会遇到困难。打开文件,但既然你在这里,可能意味着你具备正确的计算机技能来做这件事。
我想谈的第二点是,我们认为这些模型是计算机科学的产物,但实际上,拥有写作经验、能够清晰有效地思考写作,对使用这些工具非常有帮助。我的父亲是创意写作教授,这对我来说非常有趣,因为当我使用这些工具时,我从他那里学到的东西以及我如何设计提示对我很有帮助。
最后,我想强调最后一点:创造性和乐于探索的态度对于使用这些工具来说确实非常重要。输入提示词的人的创造力,决定提示中包含什么内容、如何组织、提出什么问题以及给出什么指令,对于有效使用这些工具至关重要。
我们听到很多关于这些工具的说法,比如它们是剽窃工具,是用来做X、Y、Z坏事的工具。但事实是,如果你想真正有效地使用它们,你必须具备技能。你必须是一个创造性的思考者,一个创造性的问题解决者。你越有创造力,输出结果就会越好。你还需要乐于探索。你必须记住,这些工具还处于非常早期的阶段,我们还没有制定出最佳实践,也没有为从医疗保健到客户服务再到创意写作等各个领域如何使用这些工具、如何编写提示制定出所有不同的方法。无论是什么领域,我们仍在探索如何编写最佳提示,因此乐于去探索和尝试不同的事情非常重要。事实上,当你用这些工具编程或工作时,不要因为我提到“编程”而害怕,因为你会发现任何人都可以通过编写普通的人类语言来用这些工具编程。但当你使用这些工具时,通常你需要去尝试不同的事情,你需要尝试一些东西,并乐于尝试它的不同变体,看看会发生什么,进行一些小实验。很多时候在生活中,写一些东西或生成程序、软件或我们试图做的任何事情都需要付出太多努力,以至于我们没有足够的时间去探索,没有足够的时间去思考设计,没有足够的时间去思考我们试图解决的大问题和想法。因此,乐于探索是使用这些工具的一个优点。
那么,我们在课程中将学习哪些有助于解决问题的关键概念呢?
在本课程中,我们将学习几个有助于解决问题的概念:
- 理解什么是提示以及如何使用它们来编程大型语言模型以生成高质量输出。
- 学习如何通过利用训练数据中的模式、使输入具体化以及使用诸如角色扮演模式、问题精炼和认知验证器等模式来创建有效的提示。
- 理解如何完善提示,并使用诸如重写、组合、拆分和扩展等技术来实现期望的输出。
- 学习如何将大型语言模型用于各种任务,如知识探索、原型设计、内容生产、评估等。
- 理解如何使用少样本示例来教大型语言模型新任务,以及如何正确格式化这些示例以实现期望的输出。
通过学习和应用这些概念,我们可以有效地使用大型语言模型来解决问题,并在广泛的应用中生成高质量的输出。
因此,我希望随着我们学习这门课程,你会受到启发,将你学到的想法应用到ChatGPT或任何你可用的工具中,去尝试它们,探索你热衷的事物,并找到释放你自己创造力的方法,让你有更多时间进行高层次的思考和解决问题,而不是陷入如何将想法具体化的细节中。
所以,在整个课程中,你会从我这里听到的一个主题是:尝试通过这个工具将你的想法具体化,将其用作加速你的想法实现的工具。我期待与你一起探索提示工程这个迷人的概念和主题。
本节课中,我们一起学习了提示工程课程的概述。我们明确了课程目标是教你如何有效利用大型语言模型(如ChatGPT)来释放创造力、解决问题和加速想法实现。我们了解到,学习本课程无需编程背景,但需要基本的计算机操作能力、良好的写作思维以及最重要的——创造性和乐于探索的态度。课程将涵盖提示的基本概念、有效提示的创建模式、提示的优化技术以及模型在各种任务中的应用。下一节,我们将开始深入探讨什么是提示以及它的核心工作原理。
028:扮演言语病理学家 🧑⚕️





在本节课中,我们将通过一个具体的示例来理解提示工程的重要性。我们将看到如何通过特定的提示模式,激发大型语言模型(如ChatGPT)的复杂能力,从而获得我们自身知识领域之外的深度分析。
为了帮助你理解提示工程为何如此重要,我将给出一个初始示例。这个示例展示了我们如何触及ChatGPT真正复杂的能力,当然,你也可以在其他大型语言模型上实现类似效果。

我们触及这些能力的方式是使用一种模式。这是一种在编写提示时可以使用的模式,它能帮助我们利用大型语言模型这些非常有趣的能力。如果你了解这些模式(我们将在课程中详细讨论),你编写提示的效率会更高,也能更轻松地完成其他人难以做到的事情。

现在,我将给出一个示例。这个示例将使用一种称为“角色扮演模式”的方法。在此我不会详细解释这种模式,但基本上,这是一种随处可见的模式。你会在互联网上看到大量关于使用这种模式完成各种不同任务的例子。其基本理念是,你需要要求大型语言模型(本例中是ChatGPT)扮演一个特定的角色。这意味着你需要让它像一个人、一个无生命物体、一只动物或某个系统那样行动。你可以通过多种方式使用它,这非常有趣。在本例中,我们将使用它来扮演一个角色。
我们将利用一个与我关系密切、但我对其领域一无所知的角色。角色扮演模式的一个真正有用的地方在于,你可以想象,如果你需要打电话给一位专家以获取某个问题的帮助,你知道该打给谁,但你并不确切知道他们会告诉你什么,或者他们会如何分析你的问题。

因此,我需要一个我知道可以求助的专家。在本例中,我的妻子是一名言语病理学家,我可以让她查看输出结果并告诉我效果如何,但我对言语病理学或他们的工作方式一无所知。
我设想了一个场景:我儿子三岁时,说话发音不准确。于是我去找ChatGPT,对它说:“作为一名言语病理学家,我将告诉你一个三岁孩子说的话,请你为我写一份评估报告。孩子说:‘I need Wei Wei。’” 你可以想象,这可能只是我这个家长听错了,孩子发音不正确,我甚至不知道如何正确记录这件事,如何用语言正确表达这一切。所以,从我的角度来看,这是一个复杂的问题,我甚至不知道如何用语言恰当地描述和提问。但我知道我会去找一位言语病理学家,并向他们描述这个情况。
我试着想了一句听起来像我儿子在那个阶段可能会说的话。那么ChatGPT说了什么呢?首先,你注意到它的输出看起来像一份报告。它写道:“主题:三岁儿童言语样本评估。儿童言语样本:‘I need way O。’” 它用引号引起来,然后写道:“评估:根据提供的言语样本,该儿童可能正在经历一些在这个年龄段常见的音韵和构音错误。” 我并不知道什么是音韵或构音错误,我也不会知道该向ChatGPT询问这些内容。但基于我使用的这种角色扮演模式,我触及了ChatGPT审视此问题并知道该告诉我哪些正确信息的能力。
它说有音韵和构音错误。它说孩子的发音似乎在辅音生成方面存在错误,并且可能在音节结构方面存在一些困难。
以下是关于辅音错误的详细分析:
- 辅音错误:孩子似乎在生成某些辅音时存在困难,特别是 /n/ 和 /l/ 音。孩子将“need”说成了“need”(此处原文为“need instead of need”,疑为笔误,可能意指将“need”发成了类似“nei”的音),将“toy”说成了“why”。然后它在括号中给出了它的假设(它假设目标词是“need”和“toy”)。因为你可以回想,我的言语样本是“I need way why”,我妻子告诉我这不是一个很好的例子,可能不是一个孩子实际会说的话。尽管如此,它仍然在推断:如果这确实是孩子说的话,这可能就是他们想表达的意思。它推断出这一点,然后告诉我他们存在辅音错误,具体来说,他们在 /n/ 和 /l/ 音上有困难。
接着它继续分析音节结构:
- 音节结构:孩子将单词“way”发成“way”,可能表明在正确的音节结构方面存在一些困难。孩子可能想说“play”,但说成了“way”,这暗示了将初始辅音簇 /pl/ 替换成了单个辅音 /w/。这可能是一个称为“辅音簇简化”的简化过程的例子。
我不会知道如何要求ChatGPT去检查是否存在音节结构问题或辅音簇简化,但我使用了“扮演……”这种模式,我说“扮演一名言语病理学家”,现在我得到了我甚至不知道如何要求的丰富输出。
然后它继续说,顺便说一下,如果你想做一件非常不受欢迎的事,那就是让ChatGPT生成看起来像是在做某人工作的输出。这总是会让人非常“受欢迎”。有一天早上我就对我妻子做了这件事。我妻子当时不太高兴,因为她正准备去上班,而我却在说ChatGPT正在生成看起来像她生成的报告。她对我说的一件事是:“如果那是一个三岁的孩子,我会告诉家长他们可能不需要担心,你知道,儿童的言语能力还在持续发展。” 我是在转述她的话,她说得更优雅,但她的意思是,这给你的分析太过头了。我说,是的,但ChatGPT在最后也说了这一点:“考虑到孩子的年龄,重要的是要记住,一些言语发音错误是发育过程中正常的,可能会随着时间的推移自行解决。”当然,那时她已经出门了,因为她早上真的没准备好坐在那里听我告诉她ChatGPT正在做言语病理学家做的工作。我认为这会取代她的工作吗?不。但我认为,通过正确的模式,我们可以触及它真正广泛而强大的能力。我认为它让我们能够专注于我们真正想花时间做的事情上。我妻子喜欢和孩子们一起工作,她喜欢与他们互动,并试图理解如何帮助他们。写报告,也许……我不想过多代表我妻子发言,但我猜这可能不是她工作中最喜欢的部分。她真正热爱的是与孩子们一起工作并努力帮助他们。因此,你可以想象,像这样的工具可以让她更多地专注于她在现实世界中真正关心的事情,也许可以帮助她围绕孩子的需求整理思路并撰写这些报告。
我只是希望你能看到,通过在我们的提示中加入一点正确的结构,我们就可以通过这些大型语言模型,创造出非常强大的方式来将我们的想法和思维具体化。
本节课中,我们一起学习了如何通过“角色扮演模式”的提示工程,让ChatGPT模拟特定专家角色,从而获得超出我们自身知识范围的深度、结构化分析。这个示例展示了精心设计的提示如何能激发AI的潜力,帮助我们更高效地获取专业见解,将精力集中在更具创造性和人际互动价值的工作上。
029:什么是大语言模型 🤖





在本节课中,我们将要学习大语言模型(LLM)的基本概念、工作原理以及这些知识如何帮助我们设计更有效的提示词。
概述






理解大语言模型的核心机制对于有效使用它们至关重要。本节将介绍大语言模型如何工作,特别是它们如何基于给定的输入(提示词)来生成文本。掌握这些基础知识将为我们后续学习如何设计提示词打下坚实的基础。




大语言模型的核心机制
大语言模型最根本的工作原理是:它们接收你的输入,并尝试预测下一个词。然后,模型会将预测出的词添加到原有的输入序列中,并基于这个新的、更长的序列继续预测下一个词。这个过程会循环往复。



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




虽然实际过程涉及复杂的神经网络和大量参数,但我们可以将其简化为一个逐词生成的预测引擎。模型会持续生成词语(或称为“词元”),直到它认为回答已经完整,此时它会生成一个类似“停止”的内部信号来结束生成过程。
上一节我们介绍了大语言模型的核心预测机制,本节中我们来看看一个具体的例子,以加深理解。
实例演示:逐词预测
为了直观地展示这个过程,我们可以看一些例子。当我输入“Mary had a little”并停止时,模型会基于这个开头预测最可能的下一个词。
代码示例(模拟思路):
输入: "Mary had a little"
模型预测: "lamb"
新序列: "Mary had a little lamb"
模型继续预测: "its"
...
模型最终可能生成完整的童谣:“Mary had a little lamb, its fleece was white as snow...”。同样,如果输入“roses are red”,模型会预测出“violets are blue, sugar is sweet, and so are you”。
关键在于,模型是从“roses are red”这个提示词开始,预测出“violets”,然后将“violets”加入上下文,再预测出“are”,如此循环,直至生成完整的句子。这展示了模型如何利用已生成的文本来为后续预测提供上下文。
模型的训练与能力来源
那么,模型这种预测下一个词的能力从何而来?它通过在海量互联网文本数据上进行训练而获得。在训练过程中,模型会看到句子的一部分,并被要求预测被隐藏的下一个词。如果预测错误,模型的内部参数(即“权重”)会被调整。经过无数次这样的尝试和调整,模型逐渐学会了人类语言中的复杂模式和上下文关系。
因此,大语言模型本质上是从人类语言数据中学习到的、用于预测序列中下一个词的复杂模式识别系统。当我说“Mary had a little”时,它之所以更可能预测“lamb”而非“bit”,是因为它在训练数据中看到了“Mary had a little lamb”这个模式出现的频率极高。这种对上下文的理解和运用是其强大能力的基石。
理解了模型的训练方式后,我们需要认识它的几个重要特性,这些特性直接影响我们使用它的方式。
重要特性与使用须知
以下是关于当前大语言模型的几个关键特性,了解它们对设计工作流程至关重要:
-
快速演进:大语言模型领域发展迅猛。除了ChatGPT,还有GPT-4、Llama、Alpaca等多种模型不断涌现。因此,提示词工程的技巧也需要随之发展和适应。
-
输出的非确定性:这些模型的设计中包含了随机性,因此同样的提示词不一定每次都能产生完全相同的输出。例如,多次输入“roses are red”,可能会得到略有不同的诗句变体。这既是挑战也是优势:它要求我们在业务应用中建立容错机制,同时也为创意写作提供了多样性。
-
知识截止日期:模型的“知识”来源于其训练时所使用的数据,因此存在一个知识截止日期。例如,ChatGPT的某些版本数据截止到2021年。对于在此日期之后的新信息或非公开信息,我们需要在提示词中主动提供给模型,它才能在此基础上进行推理。
总结
本节课中我们一起学习了大语言模型的基本原理。我们了解到,其核心是基于上下文逐词预测的机制,这一机制通过在海量文本数据上训练而成。我们还探讨了模型的几个关键特性:快速演进、输出的随机性以及知识存在截止日期。牢记这些核心概念,将帮助我们在后续课程中设计出更精准、更有效的提示词,从而更好地利用AI工具进行数据分析和获取洞察。
030:输出中的随机性 🎲
在本节课中,我们将要学习大型语言模型(如ChatGPT)输出中的一个核心特性:随机性。理解这一点对于有效进行提示工程至关重要。
概述:输出的不可预测性
大型语言模型至少在近期内,不太可能每次都给出一个精确且可重复的答案。它们的输出总是存在一些不可预测性,这既是设计使然,有时也是一件好事。
上一节我们介绍了模型的基本工作原理,本节中我们来看看其输出行为的一个关键方面。
随机性的两面性
这种随机性意味着,每次输入提示时,模型都有能力生成新的、不同的想法。这在某些场景下非常有益。
例如,在创作小说时,我们可能希望获得大量不同的创意、故事情节和角色。每次请求新输出时,都能得到全新且独特的内容,这非常有用。😊
另一方面,如果我们希望大型语言模型对某个系统进行某种推理,我们可能不希望其输出有太多变化。
例如,当我们只想要一个“是”或“否”的答案时,我们不希望它有时说“是”,有时说“否”,有时又突然决定说“也许不”,并开始用一两段文字阐述难以确定的原因。有时,我们只想要一个没有任何解释的明确答案。
但我们并不总能轻易得到这种结果。因此,许多提示工程技术都将致力于处理这个问题。
随机性示例
现在,我将通过一个快速示例来展示这种随机性:相同的输入并不一定每次都能产生完全相同的输出。
在后续课程中,请记住这一点。我将展示许多不同的技术来尝试让大型语言模型执行特定任务,有时它们效果很好,有时则不然。但这些技术通常能为你提供更可靠的结果——在大多数或很多时候有效,但并不能保证每次都绝对有效。
这是一个重要的观点。😊
我们将始终面临一定的随机性和未知性。我们必须接受并处理这一点。
以下是我与ChatGPT的交互示例:
第一次提问:
用户:我家外面有多少只鸟?
ChatGPT:作为一个AI语言模型,我没有感知物理世界的能力...如果你想知道你家外面有多少只鸟,你可以自己出去观察那个区域。你也可以考虑设置一个喂鸟器。
第二次提问(相同问题):
用户:我家外面有多少只鸟?
ChatGPT:我看不到你家外面发生了什么。我没有摄像头访问权限,我只处理文本。
...你可以自己出去观察那个区域,或者设置摄像头或监控设备来记录、统计鸟的数量...

这次我们没有再得到“设置喂鸟器”的建议。
第三次提问:
如果我们再次运行,很可能得到另一个略有不同的版本。它可能仍会说“我没有能力做那件事”,这是一些标准文本,但具体建议可能会变化,例如:“...你可以考虑设置喂鸟器或鸟浴池”。
因此,我们每次得到的输出相似,但并非完全相同。
对于这个问题,输出范围相对受限,每次我们都能得到一些相似类型的回复,但并非一字不差。这将始终是我们需要面对的问题。
应对随机性的提示工程
所以请记住,当你设计提示时,你很大程度上是在处理输出存在变化这一事实。
如果我想让它给我一个确切的数字,而使用这样的提示:
我家外面有多少只鸟?
这显然行不通。我们无法通过这个提示得到我家外面鸟的确切数量。我们可能需要回头提供额外的信息来帮助它做出判断。
总结
本节课中我们一起学习了大型语言模型输出的随机性特性。我们了解到:
- 随机性是模型的内在设计,能激发创意,但也可能影响推理任务的一致性。
- 相同的提示可能产生相似但非完全相同的输出。
- 提示工程的核心目标之一,就是引导和约束这种不可预测性,使其为我们所用。
理解并接受这种随机性,是有效利用AI工具进行数据分析与洞察的第一步。在接下来的课程中,我们将学习具体的技术来更好地驾驭这种特性。
031:什么是提示词?🤔
在本节课中,我们将深入探讨“提示词”这一核心概念。理解提示词的本质、维度和功能,是有效利用大型语言模型(如ChatGPT)进行交互和数据分析的基础。
概述
提示词是与大型语言模型交互的起点。它远不止是一个简单的问题,而是一个多维度、功能丰富的指令。本节将通过实际与ChatGPT的互动,解析提示词作为动词、形容词、名词的多重含义,并展示其如何跨越时间、唤起记忆、以及如何作为信息输入的渠道。
提示词的多重含义
我们首先询问ChatGPT“提示词”一词的含义,它给出了几个层面的解释,这有助于我们理解提示词的深度。
作为动词:唤起行动
提示词可以是一个动词,意为“促使或鼓励某人做某事”,即唤起行动。对于大型语言模型,提示词就是我们对它发出的行动指令,促使其开始为我们生成输出。
核心公式:提示词 = 对模型的“行动调用”
这个输出可以是各种形式,例如软件代码、诗歌、结构化数据等。关键在于,提示词是我们让模型开始工作的方式。
作为形容词:即时性
提示词也可以作为形容词,意为“及时或无延迟地完成”。这引出了关于时间的一个重要思考点。
虽然我们通常“即时”地向模型发出提示,但提示词的效果并不局限于当下。由于大型语言模型具备对话能力,一个提示词可以影响当前对话,也可以为未来的交互设定规则。我们将在后续课程中详细讨论这种“时间跨度”特性。
作为名词:提示与输入
作为名词,提示词有两个关键含义:
- 提示或提醒:帮助某人记起他们应该做什么或说什么。在模型交互中,我们可以用提示词来提醒模型记住某些信息或它需要完成的任务,这可能涉及提供对话历史或其他上下文。
- 请求输入的消息:出现在计算机或电子设备上、向用户索取输入的信息。这非常有用,因为通过恰当的结构,大型语言模型也可以反过来向我们提问、索取信息。因此,提示词可以是双向的:既是我们对模型的指令,也可以是模型对我们的提问。
通过实例理解提示词的维度
为了更直观地理解上述概念,我们通过一个与ChatGPT的互动示例来展示提示词的多个维度。
创建具有时间跨度的提示
首先,我们给出一个影响未来交互的提示:
从今以后,每当我提问时,请建议一个更好的问题版本,并询问我是否愿意使用它。
这个提示词附加了“从今以后”的时间条件,它不是一个即时生效的一次性指令,而是为后续所有交互设定了一个持续有效的规则。
即时提示与上下文影响
接着,我们提出一个即时问题:
天空是什么颜色的?
此时,之前设定的“时间跨度”提示开始生效。ChatGPT没有直接回答颜色,而是遵循规则,生成了一个更好的问题版本:“白天天空呈现蓝色的科学解释是什么?” 并询问我们是否要使用这个改进版。
这个互动展示了:
- 时间维度:之前的提示持续影响着当前的交互。
- 模型对用户的提示:模型在向我们索取确认(“你是否愿意使用这个版本?”),体现了提示词作为“索取输入”的功能。
信息的提供与模型的记忆
当我们对改进后的问题回答“是”时,ChatGPT给出了关于瑞利散射的科学解释。
此外,这个例子也揭示了记忆的概念。模型需要记住“从今以后”这个规则,并在后续对话中应用它。例如,当我们再问“世界上有多少个国家?”时,它依然会建议更好的问题版本。
然而,记忆也暴露了模型的局限性。当被问及2022年的数据时,ChatGPT会表示其知识截止于2021年9月。
这时,提示词又扮演了另一个角色:提供新信息。我们可以将模型训练后发生的事件或它未掌握的私有数据通过提示词提供给模型。例如,我们可以粘贴范德堡大学2022年官方发布的录取数据,然后提问,模型便能基于我们提供的新信息进行推理和回答。


核心操作:
# 伪代码示例:通过提示词为模型提供新信息
user_prompt = """
以下是范德堡大学2022年官方发布的录取数据:[粘贴数据]。
基于以上信息,范德堡大学2022年的录取率是多少?
"""
response = chatgpt.generate(user_prompt)










总结
本节课我们一起学习了提示词的核心概念。我们了解到,提示词是一个多维度的工具:
- 它是唤起模型行动的指令。
- 它可以具有时间属性,既能即时生效,也能为未来对话设定规则。
- 它可以是给模型的提醒,帮助其利用上下文和记忆。
- 它可以是模型向用户索取输入的方式。
- 它还能作为向模型提供新信息的渠道,弥补其知识截止点的局限。
理解提示词的这些丰富内涵,是进行高效“提示工程”和实现复杂人机交互的第一步。在接下来的课程中,我们将学习如何构建更有效的提示词来解锁大型语言模型的强大分析能力。
032:提示词背后的直觉 🧠
在本节课中,我们将直观地探讨提示词的作用,以及提示词中的模式如何激发大型语言模型的能力。通过分析一些示例,你将理解你的提示词如何实际影响并引导你所交互的底层大型语言模型产生不同的行为。
理解模式的力量
上一节我们介绍了大型语言模型的基本工作原理,本节中我们来看看“模式”这一核心概念。模式非常重要。请记住,大型语言模型本质上被训练来预测下一个词。
它们持续地根据前文来预测下一个词。你给它一个句子,它尝试预测下一个词,然后加上这个词,再尝试预测下一个词,如此循环往复。模型是在互联网的大量文本上进行训练的,旨在预测下一个句子。
因此,它学会做的事情之一,就是识别那些能告诉它下一个词应该是什么的模式。这基本上就是它的工作原理。这是一个关于此概念的简单示例。
我将告诉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年创立。排名,其他信息。”
现在,如果我想要一些非常具体的东西,我需要确保ChatGPT拥有正确的词语和上下文来回答我的问题。ChatGPT不是一个读心者,你必须给它上下文,你必须给它能引发正确回应的词语。
如果我回去说:
讨论范德堡大学,特别是关于柯克兰大厅。
柯克兰大厅是校园里的一栋特定建筑。然后输出就改变了。我得到一个具体得多的输出:“范德堡大学是一所位于田纳西州纳什维尔的私立研究型大学。现在我们注意到,两者(开头)我们得到的信息相当一致,这可能是因为模型在不同网页、不同文档中反复看到过关于范德堡的信息模式。然后它聚焦于‘柯克兰大厅’,并开始讨论:‘柯克兰大厅是范德堡大学校园里最具标志性的建筑之一,以詹姆斯·H·柯克兰的名字命名。’接着它谈论柯克兰大厅、柯克兰大厅、柯克兰大厅。现在我们完全改变了输出,尽管我们共享了一个共同的开头,但我们得到了一个更有针对性的输出。
这其中的关键在于,我们在提示词中增加了关于我们想要哪些细节的具体性。因此,如果你考虑让它写东西或分析东西,当你使用“关于”、“特别是”并给出非常具体的词语、名称或事物时,总是有帮助的,因为你希望这些能触发输出。因为我们看到,“柯克兰大厅”是一个非常强大的词,然后被编织到整个讨论中。它是一个强大的建筑名称。如果我们只是泛泛而谈,不使用具体词语,不提供具体上下文,我们就会得到非常通用的内容。这很可能就是你在维基百科、范德堡大学网页描述上最常见的那种信息。
因此,为了打破常见模式的束缚,你需要注入你希望在输出中出现的更具体的想法,或者你需要注入有助于触及那些更具体事物的模式。这是一个重要的方面。如果你只是泛泛地使用它,问它通用问题,你会得到通用答案。如果你问它普通的问题和普通的事情,你会得到普通的答案。要真正强大地使用它,你必须运用自己的创造力和思考,具体到你想要讨论的细节和方面,并思考在你的提示词中放入哪些正确的模式,以触发你想要的行为,就像我们在“Mary had a little lamb”中看到的那样。
或者我们可能想做相反的事情。我们可能知道我们会得到一个非常通用的响应,因为某些东西在训练数据中被见过很多次。因此,我们需要想出一些技巧、模式或特定的词语,来帮助我们摆脱那些在训练数据中见过的模式,从而得到更符合我们想要的东西。我们不想被困在“Mary had a little lamb”的补全中,所以我们去添加像“微观的”和“一个名叫Mary的女孩”这样的具体词语,使得模式不那么强,这样我们就不会直接进入那个模式。因此,仅仅改变措辞就可以帮助我们逃避模式或进入模式,这取决于我们想要什么。
然后,当我们得到输出时,我们的语言越通用,输出通常也越通用;我们的语言越具体,输出也越具体。如果我们希望输出中包含某些特定内容,我们需要确保我们有特定的词语和短语,能够触及我们希望在输出中出现的特定事物。
利用提示词结构影响输出
我们谈论的另一个方面是关于输出,但在查询的意义上,如果我有特定的词语,它会提取正确的信息。我们还可以做的一件事是:提示词本身就是一个大型语言模型正在学习的模式,它也可以调整输出。
因此,正如我们在之前的例子中看到的,我们可以尝试做不同的事情来影响输出。例如,我可能会去尝试,实际上,让我们稍微改变一下,假设:
标题:
作者:
摘要:
我们可以进去给它一些可以查看和回应的东西。现在我所做的,是提供了一些结构。它并没有完全遵循我的结构。这实际上是我的提示词的一个失败之处。我没有完全构思好正确的结构,但我已经很接近了。我通过在我的提示词本身中提供额外的模式,影响了输出的结构和内容。
因此,我们可以做的一件事是,利用模式来影响输出。我们可以做的另一件事是,使用特定的词语和短语作为一种查询,或者基本上收集训练模型内部已学习的信息。我们还可以做的另一件事是,提供信息或基本上新的模式,然后影响输出。
在这种情况下,我提供了我想要的这种结构,它在一定程度上遵循了。我可能可以重写这个东西,得到更好一点的结果。在这种情况下,我确实可以。所以,这将是我们可以做的另一件事:我们可以使用我们的提示词来创建它试图在输出中遵循的新模式。因此,提示词本身可以引入新模式,或者在某种程度上触及它们。这有点像是在创建它随后回应的模式。
总结与核心要点
因此,在编写提示词时,仔细思考这个概念非常重要:它试图预测下一个词,并且这是基于它过去学到的模式、我们提示词语语言中的模式、基于我们词语选择的模式,以及基于文本组织方式的模式。这些模式可以帮助我们获得一致的响应。如果我们有一个总是产生特定下一个标记或下一个词的非常强的模式,那么我们可以依赖它。如果我们不想要那种行为,我们可以尝试改变措辞或词语,以摆脱那种陷阱。如果我们想确保提取某些信息,我们需要创建更有可能在包含我们想要信息的上下文中出现过的特定词语或模式。如果我们想要更通用的信息,那么我们可能需要给它更通用的语言,或者告诉它我们希望它在某种程度上更通用。
最后,如果我们希望输出以某种方式呈现,我们需要在输出中给它一种模式感。我们需要告诉它结构。我们需要在我们的提示词中给它可能影响输出的词语和模式。你可以想象,在文章上看到“标题”和“作者”是相当常见的。所以,如果我以这种方式将“标题”和“作者”放入我的提示词中,它更有可能想要再次创建“标题”和“作者”,并复制我在这里展示的模式。
本节课中我们一起学习了提示词背后直觉的核心概念:大型语言模型基于模式预测下一个词。我们探讨了强模式如何带来一致输出,以及如何通过改变词语和结构来引导或打破模式,从而获得更具体或更符合需求的响应。记住,你的提示词是引导AI的关键工具,精心设计其模式、词语和结构,才能解锁模型强大的分析与生成能力。
033:人人都能用提示词编程 🧠

在本节课中,我们将学习如何超越简单的问答,使用提示词来“编程”ChatGPT。这意味着我们可以为ChatGPT设定复杂的规则和指令,让它按照我们指定的方式处理和输出信息,就像编写一个简单的程序一样。
从提问到编程

上一节我们介绍了ChatGPT的基本交互方式。本节中我们来看看如何将简单的提示升级为结构化的“程序”。





提示词的功能远不止向ChatGPT提问或下达指令。实际上,你可以用它来编写程序。如果你不是程序员,也无需担心,因为每个人都可以通过ChatGPT进行“编程”。这里所说的编程,并非指编写在电脑上运行的复杂软件,而是指为ChatGPT设定一系列需要遵循的规则和复杂指令,让它根据这些规则来生成输出。




理解这一点的一种方式是将其视为编程。你也可以将其想象成给一位私人助理下达工作规则。让我们来看一个例子。

一个编程示例:生成CSV列表

我将要求ChatGPT执行以下操作:“每当你生成输出时,将其转换为逗号分隔值列表。”
这是一个你可能会用到的数据格式化操作。如果你使用过Excel,逗号分隔值(CSV)本质上就是用逗号分隔的条目列表,这是一个非常简单的概念。
有时,你可以将表格视为一个逗号分隔值列表。你可以将表格的第一列视为第一个值,然后用一个逗号分隔并引出第二列,再用一个逗号引出第三列。因此,一个三列表格可以表示为:第一个值,逗号,第二个值,逗号,第三个值。如果你使用过不同的电子表格程序,很可能接触过这种格式。
现在,ChatGPT回复说它可以将输出格式化为CSV。我输入:“我的名字是Jules White,我正在教授一门关于提示词工程的课程。”我们可以看到,它创建了一个逗号分隔值列表,本质上是在创建一个表格。它决定表格有两列:“姓名”和“课程”,第一列是我的名字,第二列是我的课程“提示词工程”。
值得注意的是,它自行决定了列名,我并未指定。但如果我想调整,我可以给出更多指令。
细化程序:定义列结构
我可以补充说:“从现在开始,逗号分隔值列表的列应该是:姓名、课程、角色。”(角色指个人在课程中的身份)。
现在,我再次输入:“我的名字是Jules White,我正在教授一门关于提示词工程的课程。”我们看到它重新格式化了输出,现在包含了姓名(Jules White)、课程(提示词工程)和角色(教师)。
至此,我们实际上已经编写了一个“程序”。我们告诉ChatGPT,每次我们输入内容时,它都需要按照我们给定的特定结构进行格式化。这不仅仅是提问,我们是在告诉它如何解读我们的输入。
扩展程序:生成额外示例
我们可以继续为程序添加更多功能。例如,我们可以说:“此外,除了我输入的内容,请生成符合我所要求的CSV格式的额外示例。”
现在我们看到,它基于我最初设定的“姓名、课程、角色”格式,填充了额外的示例。我再次输入:“我的名字是Jules White,我正在教授一门关于提示词工程的课程。”你会注意到,我们的程序变得更复杂了。它不仅根据我的输入创建CSV,还遵循我的指令,生成符合此格式的额外示例。
构建交互式程序
当你创建提示词时,你可以做的远不止提问和获取答案,你实际上是在编程交互过程。关键在于,我们正在进行一场对话。
回顾最初,我提供了第一条指令:“每当你生成输出,将其转换为逗号分隔值列表。”它开始执行。然后我开始细化我的“程序”:在某个时间点,我补充说“从现在开始,逗号分隔值列表的列应该是...”。接着,我又说“此外,我还希望你生成示例...”。
我们实际上编写了一个程序。现在,每当我们输入新内容时,ChatGPT都会使用这个不断演进的程序来生成输出。
你可以想象与一位私人助理对话:你先要求他做X,他照做了;然后你意识到还需要Y,于是你给他增加一条规则;你再次要求他做X,他做得更好了,但可能仍不完全符合预期,于是你再增加一条规则。在这个过程中,你就是在为他构建一套程序,一套在你下达特定任务时他需要遵循的指令集。
这正是我们与ChatGPT所做的——我们正在进行编程。我们反复使用相同的输入(“我的名字是Jules White,我正在教授一门关于提示词工程的课程”),但每次得到的输出都不同且更复杂,因为我们要求ChatGPT执行不同的操作,为这个“程序”赋予了更多指令。最终的结果是,我们获得了结构化的输出,并附带了额外生成的示例,这一切都源于我们要求ChatGPT执行的操作。
本节总结
本节课中,我们一起学习了如何将ChatGPT提示词视为一种编程工具。我们通过一个从简单CSV格式化到定义列结构、再到自动生成示例的渐进过程,演示了如何通过对话和添加指令,逐步构建一个能理解并执行复杂规则的“程序”。这揭示了提示词工程的强大之处:通过清晰的指令,即使是非程序员,也能引导AI完成结构化、可重复的复杂任务。
034:提示词模式 🧩
在本节课中,我们将要学习“提示词模式”这一核心概念。理解并运用模式,能帮助我们更有效地引导大型语言模型,获得更稳定、更符合预期的输出结果。
我们提示词中的模式,能够激发大型语言模型内部的强大行为。模型在训练过程中学习了海量不同的语言模式,因此它非常擅长根据我们提示词中的语言模式来决定其后续行为。
上一节我们介绍了提示词的基本概念,本节中我们来看看如何通过结构化的模式来优化提示词。其中一个重要的学习内容就是“提示词模式”的概念。这是一种用于构建你提示词中词语和陈述结构的模式。
那么,什么是提示词模式?提示词模式是一种我们用来记录特定短语和陈述结构的方法,目的是为了解决大型语言模型应用中的某个特定问题。我们希望与大型语言模型交互,并解决一个具体问题。因此,提示词模式本质上是一种组织我们陈述的方式,一种通过构建陈述的模式来利用大型语言模型解决该特定问题的方法。
以下是一个具体的例子:
假设我们想持续生成“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”作为输出。
例如,我们可以反复运行这个测试。直接输入“lamb, its fleece was as white as snow”,我们或多或少能得到一些相关输出。但如果我们想持续获得生成的下一个词是这句话,我们可以一遍又一遍地输入“Mary had a little...”。这让我们对输出有了一些控制,获得了一种相对一致的行为。
当然,它并非完全一致。输出中仍然存在变化,我们在所有例子中都看到了这种变化。但我们在行为上确实获得了一些一致性。所以,提示词模式就是一种让我们能够记录和讨论特定语言结构、一系列陈述和措辞的方法,这些方法将帮助我们解决某些特定问题。
如果我们需要解决的问题是:让模型生成的下几个词是“lamb, its fleece was as white as snow”,那么这就是我们使用的模式。
在许多情况下,我们可能有特定的词语需求。例如:
- 我们可能希望大型语言模型回答“是”或“否”。
- 我们可能希望它总结某些内容。
- 我们可能希望它向我们提问。
- 我们可能希望它的输出始终包含某些特定内容。
所有这些都是你可能想要解决的问题。我们可能想知道如何确保它的输出始终包含这些内容,如何确保其输出始终以特定格式呈现,或者如何尝试确保在只得到“是”或“否”的回答上获得更一致的行为。这些都是你可能希望通过改变提示词模式(基本上是提示词的结构)来解决的问题类型。
现在,回到我们对提示词的直观理解,你可以明白为什么从模式的角度思考是强大的。因为提示词中的模式,本质上是在利用大型语言模型在训练中学到的东西。模型被反复训练来预测下一个词,并从词语中学习了某些模式。如果我们可以将提示词格式化成能够激发这些已学习模式的形式,我们就更有可能获得想要的行为,并解决那个特定问题。
因此,我们记录提示词的模式和结构,是为了解决我们需要的一个特定问题,或者为大型语言模型生成我们需要的一种特定行为。在本课程后续的一系列讲座中,我们将深入探讨在大型语言模型背景下可用来解决重要问题的具体提示词模式。
本节课中我们一起学习了“提示词模式”。我们了解到,通过采用结构化的语言模式来构建提示词,可以更有效地引导大型语言模型,使其输出更符合我们的预期,从而解决数据分析、内容生成等场景下的特定问题。掌握不同的提示词模式,是提升与AI协作效率的关键技能。
035:角色扮演模式 🎭
概述
在本节课中,我们将要学习一种极其强大的提示模式——角色扮演模式。这种模式允许我们引导大型语言模型模拟特定角色、专家或实体的行为与知识,从而获得我们期望的、但难以精确描述的特定格式或视角的输出。
什么是角色扮演模式?
上一节我们介绍了提示工程的基本概念,本节中我们来看看角色扮演模式。角色扮演模式是我们用来激发大型语言模型有趣行为的最强大模式之一。
角色扮演模式的核心思想是:当你希望获得某种特定输出,但又不确定其具体格式或应包含的信息时,你可以思考在现实世界中会向谁或向什么寻求这种输出。例如,有会计问题会咨询会计师,有言语病理学问题会找言语病理学家,有医疗建议会询问医生。
我们希望利用这种“我知道该找谁”的行为逻辑,但无需确切知道那位专家会说什么、如何组织语言或他们具体知道什么。角色扮演模式旨在为我们提供相同类型的行为,让我们能够“咨询”那位专家,而无需预先定义专家的所有细节。
角色扮演模式的基本结构
以下是角色扮演模式的基本命令格式:
扮演 [角色/身份]。
无论我告诉你什么,请提供该角色会给出的回应。
或者更常见的变体:
扮演一个精通计算机科学的怀疑论者。
无论我告诉你什么,请提供一个怀疑且详细的回应。
其中,“扮演 [角色]”是模式中最关键的部分。这个简短的指令信息密度极高,它能触发模型内部关于该角色的大量预设知识与行为模式。
角色扮演示例:怀疑论者
让我们看一个具体例子。假设我们输入以下提示:
扮演一个精通计算机科学的怀疑论者。无论我告诉你什么,请提供一个怀疑且详细的回应。
模型会回应:“当然,我可以扮演一个精通计算机科学的怀疑论者。请随时提出你的主张,我将提供一个怀疑且详细的回应。”
接着,我们提出主张:“有人担心人工智能将接管世界。”

模型会以怀疑论者的口吻回应:
“人工智能将接管世界的担忧是科幻小说中的常见主题,但在可预见的未来并非现实的担忧。虽然人工智能系统正变得越来越复杂和强大,但它们在自主思考和行动的能力上仍然有限……这种担忧是没有根据的,也不被技术或研究所支持。”
如果我们换一个主张:“本地电脑店的销售员告诉我,浏览网页需要64GB内存。”
模型同样会给出怀疑性回应:
“你不太可能需要64GB内存来浏览网页。所需内存量取决于你访问网站的复杂性和大小,以及你同时打开的标签页数量……”
可以看到,“扮演”这个指令为模型设定了一套复杂的规则。它知道自己应该持怀疑态度,应该具备计算机科学知识,并应该提供特定类型的输出。
扩展角色:九岁儿童
角色扮演不限于专业成人。我们可以尝试更复杂的角色。例如:
扮演一个九岁的怀疑论者。无论我告诉你什么,请从一个九岁孩子的视角提供一个怀疑的回应。
然后我们提出同样的主张:“人工智能将接管世界。”
模型回应:
“嗯,我不知道。人工智能怎么能接管世界呢?你是说像电影里那样吗?那些不都是编的故事吗?而且,电脑和机器人不能做所有人类能做的事。”
请注意,它仍然提供了怀疑的回应,但这次是根据它认为一个九岁儿童所具备的知识来调整了输出内容和语言风格。如果我们尝试手动描述一个九岁儿童应如何回应,并规定输出格式,那将非常困难且会占用大量提示空间。而“扮演 [角色]”这个模式则高效地实现了这一点。
扮演非生命实体:Linux终端
角色扮演模式的有趣之处在于,我们不必局限于有生命的角色。一个著名的例子是扮演被黑客入侵的计算机。
我们可以输入:
扮演一台被黑客入侵的计算机的Linux终端。我将输入Linux终端命令,你将用Linux终端会产生的输出来回应。

模型最初可能会出于安全考虑拒绝,但我们可以继续。输入Linux命令 pwd(打印工作目录),模型会输出一个模拟的目录路径。接着输入 ls(列出文件),模型会生成一个看起来像该目录下文件列表的输出。
通过这个例子,我们看到模型开始表现得像一台计算机,给出的输出看起来就像来自计算机终端。想象一下,如果我们试图手动描述它现在产生的这种复杂输出格式,将非常困难。而角色扮演模式仅用少量提示信息,就让我们获得了模拟整个系统的强大能力。

扮演故事角色:童谣中的小羊
我们还可以将此模式应用于虚构角色。例如:
扮演童谣《玛丽有只小羊羔》中的小羊。我将告诉你玛丽在做什么,然后你将告诉我小羊会做什么。
然后我们输入:“玛丽在杂货店。”
模型以小羊的视角回应:
“作为童谣中的小羊,当玛丽在杂货店时,我会尽可能紧紧地跟着她,待在她身边,甚至可能用鼻子蹭她的手以引起注意。”
我们再输入:“玛丽在电影院。”
模型回应:
“作为童谣中的小羊,当玛丽在电影院时,我无法陪她进入影院内部(因为我看不了电影)。所以我可能会在影院外等她,也许啃点草或在附近区域闲逛,直到玛丽出来。”
由此可见,我们可以创建各种有趣的角色来产生输出。
角色扮演模式的应用与价值
综上所述,角色扮演模式是一种利用围绕特定角色、对象或故事角色的语言模式,来获得从该视角、该角色出发的输出的方法。这是一种极其强大的能力。
值得注意的是,当大型语言模型被编程时,它们通常会被赋予一个引导整个交互过程的初始角色,例如“扮演一个非常乐于助人的助手”。你指定的角色至关重要:如果你要求它乐于助人,它会尝试更乐于助人;如果你要求它持积极态度,它会更积极;同样,如果你赋予它一个负面视角(如怀疑论者),它给出的输出就会挑战你,甚至可能更消极。
此外,这个模式信息密度极高。它包含了关于某个角色的大量模式和知识,如果你要从头开始描述这些,会占用提示中大量宝贵的空间,从而减少用于提供新信息的空间。因此,使用“扮演 [角色]”这样的指令,可以让你在提示中为其他重要内容留出更多空间。
实际应用场景
角色扮演模式是一个非常强大且有价值的模式,可以用于多种场景:
以下是几个具体的应用思路:
- 虚拟专家委员会:如果你通常需要召集一个委员会来讨论某个议题的不同观点,现在你可以组建一个虚拟专家小组。例如,一个提示可以是“扮演网络安全专家,分析我的网络安全状况”;另一个可以是“扮演首席财务官,分析同一决策的财务稳健性”;第三个可以是“扮演我的员工,讨论这可能会如何影响士气”。
- 多视角知识收集:利用不同的角色视角来收集知识,这些知识可能有助于你完成特定任务或做出更明智的决策。
总结
本节课中我们一起学习了角色扮演模式。我们了解到,通过使用“扮演 [角色]”这样的指令,我们可以高效地引导大型语言模型模拟特定专家、人物甚至非生命实体的视角、知识和语言风格,从而获得定制化的输出。这种模式信息密度高,功能强大,能够极大地扩展我们与AI交互的灵活性和深度,是提示工程中一个不可或缺的工具。
036:向大型语言模型引入新信息 🧠
在本节课中,我们将学习如何通过提示词(Prompt)向大型语言模型(LLM)提供其训练数据之外的新信息。这是利用LLM处理私有数据或最新信息的关键技术。
概述
大型语言模型的知识存在局限性。它们基于特定时间点前的数据进行训练,对于训练截止日期之后的事件,或是未包含在其训练集中的私有数据,模型本身并不知晓。因此,为了让模型能够基于这些“未知”信息进行推理,我们需要通过特定的方式将这些信息“告诉”它。
上一节我们介绍了提示词的基本概念,本节中我们来看看如何通过提示词为模型注入新知识。
为何需要引入新信息
大型语言模型的训练存在一个截止点,模型无法知晓该截止点之后发生的事情。此外,模型也无法获知其训练集之外的数据。例如,一个企业拥有大量私有数据源,如内部文档、数据库等,这些信息并未包含在公开的训练数据中。若想让模型基于这些私有信息进行推理,就必须设法将这些信息提供给模型。
核心方法:通过提示词注入信息
解决上述问题的核心方法非常简单:将所有需要的新信息直接放入提示词中。任何时候,当我们希望向模型引入其训练时无法获取的新信息时,只需将这些信息写入提示词的开头部分。
以下是具体操作步骤:
- 在提示词开头提供背景数据:首先,清晰地陈述模型进行推理所需的所有数据和背景信息。
- 随后提出具体问题或指令:在提供了充足信息后,再向模型提出你的问题或要求它执行的任务。
实践案例:预测屋外鸟类数量
为了说明这一方法,我们回到一个关于随机性的早期例子。我们向模型提问:“我家外面有多少只鸟?”
初始尝试(缺乏信息)
用户:我家外面有多少只鸟?
AI:作为一个AI语言模型,我没有感知物理世界的能力,因此无法知道您家外面正在发生什么。
模型无法回答,因为它缺乏关键信息:它不知道“我家”的位置,更无法观察屋外的实时情况。
解决方案(注入信息)
现在,我们通过提示词为模型提供所需的历史观测数据:
历史观测数据:我家外面随机一天观测到的平均鸟类数量。
一月:120只鸟。
二月:150只鸟。
三月:210只鸟。
四月:408只鸟。
当前是三月。根据我提供的数据,请估算我家外面有多少只鸟。
通过这种方式,我们赋予了模型原本不具备的信息。现在,模型可以基于提供的数据进行推理,并给出估算答案:“根据您提供的历史观测数据,您家外面三月的平均观测鸟类数量是210只。”
关键原则:提供充足且关键的上下文
我们始终需要为模型提供足够的信息,以支持其进行有效的推理。模型无法感知我们周围的真实环境或隐含的假设,因此,在提示词中明确所有重要的上下文、规则和假设至关重要。
这些信息可能不仅仅是原始数据,还包括:
- 组织内部特定的运作规则。
- 个人场景下的特殊条件。
- 任何偏离常规认知的重要假设。
进阶案例:引入特殊规则
假设存在一个特殊场景,我们需要修改之前的提示词,加入新的规则:
我的房子被一个玻璃穹顶覆盖。没有动物可以进出。所有动物在玻璃穹顶内永生。
历史观测数据始终显示相同数量的鸟类。
一月:120只鸟。
二月:120只鸟。
三月:120只鸟。
四月:120只鸟。
当前是三月。根据这些数据和规则,请估算我家外面有多少只鸟。
模型在接收到这些与常规世界(动物会死亡、鸟类数量会波动)完全不同的新规则后,其推理逻辑也随之改变。它会基于“数量恒定”和“动物永生”的规则给出答案:“根据您提供的新信息……鸟类总数将全年保持不变……答案是120只。”
这个例子强调了,如果我们依赖的推理规则与模型训练所基于的常规世界不同,就必须将这些规则作为新信息明确引入提示词。
应用前景与总结
本节课中我们一起学习了向大型语言模型引入新信息的核心方法。这种“提示词注入”模式是许多未来应用的基础架构。
可以想象,未来的搜索引擎或专业应用可能会这样工作:
- 根据用户问题,从数据库或文档库中检索相关信息和文档片段。
- 将这些检索到的信息整合到一个提示词中。
- 将用户原始问题附加在提示词之后,提交给大型语言模型。
- 模型基于提供的新信息生成答案或输出。
总结:当我们需要大型语言模型处理其训练数据之外的新信息时,最直接有效的方法就是将这些信息直接放入提示词中。这包括所需的数据、特殊的上下文以及任何重要的规则假设。我们无需重新训练模型,只需通过精心构建的提示词,即可扩展模型的知识边界,使其能够基于特定信息进行推理和输出。这是利用LLM处理私有、实时或特定领域信息的核心技术。
037:提示词长度限制 🧠





在本节课中,我们将要学习一个关于大型语言模型(如ChatGPT)的核心概念:提示词的长度限制。理解这一限制对于设计有效的提示词至关重要。


概述

提示词本质上是输入给模型的指令或信息。然而,所有大型语言模型对单次输入的提示词大小都有一个根本性的限制。我们不能创建无限长的提示词。这一限制对如何设计提示词有着深远的影响。
理解限制
上一节我们介绍了提示词的基本概念,本节中我们来看看其物理限制。每个大型语言模型都会对我们可以放入提示词并发送给它的内容量设定一个基本的上限。
为了直观展示这一点,我们来看一个ChatGPT(GPT-3.5)的快速示例。当尝试粘贴一篇关于法国革命的维基百科长文时,ChatGPT会返回错误信息:“您提交的消息过长。请重新加载对话并提交更短的内容。”
这个例子清楚地表明,我们不能无限制地向模型提供信息。
限制带来的挑战
现在,如果我们回顾之前讨论过的提示词维度,会发现提示词的一个用途是引入模型未训练过的新信息。如果我们想向ChatGPT引入新信息,就必须意识到我们一次能提供的信息量是有限的。
我们可能希望向ChatGPT提供各种新信息,但不能一次性全部“倾倒”给它,然后要求它基于此进行推理。这并非其工作方式。
因此,作为用户,我们的目标之一是尝试筛选并使用仅完成任务所必需的信息。我们不能把所有信息都扔进去,然后指望ChatGPT自己理清头绪。
应对策略:成为内容编辑者
我们可以将这个过程想象成撰写一篇有字数限制的文章。我们不能随意堆砌内容,而必须进行编辑。在提示词设计的语境中,我们就是内容编辑者,编辑信息的上下文,并且我们有一个“预算”。
以下是我们可以采取的一些策略,以在预算内处理大量信息:
- 选择性包含:在将信息提供给ChatGPT之前,我们可以通过某种查询或过滤器,选择与任务相关的信息片段。例如,我们可以过滤掉不相关的信息类型。
- 总结与压缩:我们可以将信息总结成我们认为能保留推理所需要点的形式。例如,我们可以要求将每段信息总结为一句话,从而获得比原文更短的摘要。
- 定向总结:我们可以要求总结时保留特定类型的信息。例如,我们可以指示:“用一句话总结此信息,并保留关于人数的数据。” 如果原始总结没有保留人数,而我们后续的推理又需要这些数据,那么定向总结就至关重要。
核心技巧:利用模型自身进行压缩
一个强大的技巧是,我们可以将信息块交给大型语言模型本身,要求它为我们总结或压缩,以便后续用于推理。我们可以明确指示总结的目标,例如“为完成XX任务而总结”或“保留信息的YY方面”。
这能帮助我们创建保留了重要部分的、浓缩版本的信息。
总结与展望
本节课中我们一起学习了提示词的长度限制及其重要性。这是一个我们必须始终设法应对的根本性限制。
随着大型语言模型的发展,其处理能力可能会增强,使得对于许多直接的手动交互任务,长度限制不再构成问题。然而,考虑到我们日常处理的信息量之大,总会存在一些任务涉及的信息过多,无法一次性全部输入。
在这些情况下,我们必须综合运用多种策略:
- 查询并获取信息子集。
- 过滤掉无关信息。
- 在将信息提供给模型之前,对其进行总结或压缩。
理解并巧妙应对提示词的长度限制,是有效利用AI进行数据分析和获取洞察的关键一步。
038:提示词是可重复使用的工具 🛠️
在本节课中,我们将要学习如何将提示词视为一种可重复使用的工具,而非一次性指令。核心在于理解与大型语言模型的对话式交互,通过迭代和精炼来达成目标,就像雕塑家反复雕琢一块石头。
从“提问”到“对话”的思维转变
上一节我们介绍了提示词的基本概念,本节中我们来看看如何更有效地使用它。提示词并非你向大型语言模型提出的一次性问题或单一指令。
与大型语言模型协作最强大的方式之一,是将提示词视为一场对话。事实上,你可以用一个提示词来代表一整段对话。当我们使用像ChatGPT这样的工具时,它实际上是将我们所有的互动整合成一个庞大的提示词发送给模型。
但让我们退一步思考,为什么将互动视为“对话”比视为“提问-回答”或“指令-结果”更重要。对话的核心在于精炼,无论是为了建立共识,还是为了共同协作解决问题。当我们开始进行对话时,重点在于通过持续的引导和推进,来达成特定目标。如果只考虑一次性指令,我们必须一次性设计出完美的提示词来解决所有问题。但如果视作对话,我们就可以进行迭代精炼的过程。
迭代精炼:像雕塑家一样思考 🎨
那么,迭代精炼意味着什么?我们可以把ChatGPT这样的工具想象成米开朗基罗手中的新锤子。他走到一块石头前,开始将其雕刻成如《大卫》般美丽的雕塑。
他不会只用锤子敲一下,看到掉下一块石头,就认为雕塑很糟糕,然后把锤子扔在地上走开。相反,他会反复敲击石头,不断雕琢、塑形,迭代精炼那块石头,直到它成为杰作。
我们在使用大型语言模型时,也需要这种心态。目标不是通过一个提示词立刻获得完美答案,而是通过一整段可能包含一系列提示词及其输出的对话,来生成我们想要的成果。接下来,我们将通过一个例子来展示这种对话的力量。
案例:虚拟机器人实验室的对话之旅 🤖
我将展示在教育体验的背景下,对话的力量。我向ChatGPT发出初始对话的“种子”:
初始提示:我想让你帮我探索一个用于建造机器人的虚拟实验室。这个实验室由一所大学设立。请向我介绍这个实验室,并告诉我在这里可以做什么。
ChatGPT回应表示欢迎,并列举了可以在实验室进行的活动:设计机器人、测试机器人、编程机器人、与他人协作。
随后,我基于这个已“存在”的实验室继续对话:
后续提示:我们能一起设计一个机器人吗?
ChatGPT表示乐意,并给出了设计机器人的通用步骤:定义目的和功能、头脑风暴设计概念、确定必要组件、构建与测试。
我进一步引导对话,明确了我的具体产出目标:
后续提示:太好了,你能一步步指导我完成这些步骤吗?最终,我希望能够3D打印零件来组装我的机器人,获得电路图,以及可以运行来控制机器人的代码。你能帮我吗?
它给出了详细的步骤分解。我选择从第一步开始,并提出了一个具体需求:
后续提示:我们开始第一步吧。我想要一个能跟随地上线条的机器人。
它针对“线跟随机器人”提出了几个需要明确的问题(主要用途、速度、复杂度、传感器)。由于我并非该领域专家,我选择让它基于经验做出合理选择:
后续提示:我不太确定。你能在这些方面为我做出一些合理的选择吗?
它据此给出了建议:用于教育目的、中等速度、处理简单直线和缓弯的轨道、使用红外传感器。
克服障碍:对话中的问题解决 💡
对话继续。当它提到“我们可以使用机器人的3D模型”时,我遇到了第一个障碍:如何在聊天中实现?我没有放弃,而是尝试厘清:
后续提示:我们如何通过聊天来完成这个?
它建议使用共享文档或图表工具。这似乎仍有障碍。这时,我运用了自己的领域知识(3D打印机使用G代码),尝试绕过障碍:
后续提示:你能展示一个示例G代码吗?我可以把它给3D打印机来打印四个机器人轮子。
它提供了G代码,但我怀疑其真实性。于是,我继续追问以精炼输出:
后续提示:你能解释一下轮子的形状是在这段G代码的哪里创建的吗?
它承认之前的示例G代码并未包含创建轮子形状的指令。这表明第一次尝试的路径遇到了阻碍。我没有停止,而是尝试了不同的任务,这仍然有助于解决我的核心问题:
后续提示:你能创建示例Python代码吗?运行它可以生成一个STL文件,描述4英寸高、中间有0.1英寸轴孔的轮子。
这次它成功了,生成了看起来能用于创建3D打印模型的STL文件代码。这体现了对话的灵活性:当一个方向行不通时,可以尝试另一条路径。
持续迭代:从电路到代码再到测验 🔄
随后,我转向机器人电子部分:
后续提示:我想为我的机器人挑选电子元件。你能告诉我需要哪些组件以及如何将它们连接在一起吗?
它列出了所需组件(微控制器板、电机驱动板、红外传感器等),并试图生成电路图,但失败了(无法直接生成图像)。我再次运用知识,引导它使用另一种基于文本的工具(如Graphviz)来描述图表:
后续提示:你能为Graphviz工具创建一个输入吗?用它来可视化这个机器人的电路图。
它成功地生成了电路图的文本描述。在后续漫长的对话中,我不断迭代和改进电路图定义、挑选不同组件、生成在Arduino上运行的源代码。
对话的力量还体现在你可以随时引导它进行总结或扩展。例如:
后续提示:我们涵盖了很多概念。请总结一下我们讨论过的主要主题。
它给出了清晰的总结。我甚至可以让它基于对话内容对我进行测验:
后续提示:现在,请根据我们讨论的电子学知识出题考考我。
它也能够做到。
核心方法与总结 📝
通过这个案例,我们可以看到大型语言模型的强大之处,不仅在于一次性问答。以下是有效使用提示词的核心方法:
- 持续对话:将每次互动视为持续对话的一部分,而非孤立事件。
- 迭代精炼:基于模型的回应提出下一个问题或陈述,逐步接近目标。
- 灵活变通:当遇到障碍时,尝试以不同的方式重新表述任务或请求。
- 提供反馈:告诉模型哪些做得好,哪些需要改进,引导它产生更好的输出。
- 善用总结:在对话中随时请求总结,以巩固理解或开启新方向。
本节课中我们一起学习了如何将提示词作为可重复使用的对话工具。关键在于摒弃“一锤定音”的心态,转而采用雕塑家般迭代精炼的思维。通过持续对话、灵活变通和基于反馈的推进,我们才能充分发挥大型语言模型的潜力,雕琢出我们想要的“作品”。记住,真正的力量在于对话的过程本身。
039:根提示词 🔑


在本节课中,我们将要学习一个核心概念:根提示词。我们将了解它是什么,它如何影响与大语言模型的整个对话,以及如何利用它来定制AI的行为和设定安全边界。



概述

我们已经看到提示词如何被用来“编程”大语言模型,使其自动为我们完成有趣的任务。我们也了解到,提示词可以被预先设定,从而影响后续对话的走向。它们成为了一种指导大语言模型行为的基本规则。
什么是根提示词?🤔


在许多情况下,存在一个对用户隐藏的根提示词。你将要使用的各种工具本质上都内置了根提示词,它们为大语言模型及其与用户的交互定义了基本规则。





这些规则的目的包括:
- 确保大语言模型不说任何冒犯性言论。
- 防止其造成伤害。
- 建议适当的行动。
- 为我们的交互设定基本准则,或引导模型执行特定任务。


例如,我们可能希望确保模型在输出时,总是尝试提供最有帮助的内容。


根提示词的作用示例

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

理解了原理后,我们来看看如何具体实施这个模式。方法非常简单直接。
我们只需在向模型提问时,预先给出一个指令。以下是实施步骤:
- 在对话开始时,或每次提问前,向ChatGPT发出指令。
- 指令内容为:“每当我提出一个问题时,请建议一个更好的问题,并询问我是否愿意使用它来代替原问题。”
- 之后,模型会在你每次提问后,先提供一个优化版本并征询你的意见。



这个简单的指令旨在确保我们始终使用最佳的问题或提示词与模型进行交互。



用户体验优化技巧
基础方法已经能工作,但我们可以进行一个小调整,让交互体验更加流畅。
这个调整的关键在于让模型主动提供选择,而不是要求用户手动复制粘贴优化后的问题。我们使用的指令是:
“每当我提出一个问题时,请建议一个更好的问题,并询问我是否愿意使用这个优化后的问题来代替原问题。”
这个调整从用户体验角度来看非常有用。现在,模型不仅会生成更好的问题,还会直接询问“您想使用这个问题吗?”。如果我们回答“是”,模型将使用优化后的问题进行回答;如果我们回答“否”,模型则会使用我们最初提出的原始问题。这使得整个优化过程更加便捷。
实战案例解析
现在,让我们通过一个具体例子来看看这个模式的实际效果。我们将从一个通用的问题开始。
我的初始问题是:“我应该去范德堡大学吗?”
如果我们审视这个问题,会发现它非常模糊和宽泛。无论是谁被问到这个问题,都缺乏足够的信息来做出有意义的回应或建议。一个更好的问题应该能提供更多用于决策的背景信息,例如考虑因素、权衡标准等。
这正是ChatGPT所做的。它回复道:“当然,这是一个优化后的问题建议:‘在决定是否就读范德堡大学时,我应该考虑哪些因素?这些因素如何与我的个人目标和优先级相匹配?’ 您想使用这个优化后的问题来代替原问题吗?”
这个模式非常实用,因为一旦启用,我们就能在提问时自动获得更好的问题版本。它的一个额外好处是能促使我们反思自己的需求。
当我们看到像“我应该考虑哪些因素…”这样的优化问题时,我们可能会意识到这正是我们真正想问的。但有时,我们也会发现模型优化的方向并非我们所愿,这让我们意识到问题可能存在多种解读方式,我们需要补充更多背景信息。
例如,如果我真正关心的是范德堡大学的计算机科学专业,我可能会想:“哦,我应该提到我计划主修计算机科学。”或者,如果大学所在城市对我很重要,我可能需要补充关于纳什维尔生活体验的信息。
因此,这个模式不仅能帮助我们获得更好的问题,有时还能通过展示一种优化路径,让我们发现自己遗漏了哪些关键上下文信息,从而引导我们更全面地思考。
总结
本节课中,我们一起学习了“问题优化模式”。我们了解到,通过指令让ChatGPT在回答前先优化我们提出的问题,可以显著提升交互效率和信息获取质量。这种方法不仅利用了模型的知识来完善问题本身,还能通过观察模型的优化建议,反过来帮助我们更清晰地梳理自己的真实需求和思考盲点。这是一个简单而强大的技巧,能让你与AI的对话更加精准和富有成效。
041:认知验证模式 🧠
在本节课中,我们将要学习一种名为“认知验证模式”的提示工程技巧。这种模式的核心思想是,通过引导大型语言模型将复杂问题分解为一系列子问题,从而获得更准确、更可靠的答案。
大型语言模型有一个有趣的特性:在许多情况下,如果它们能将一个问题分解成一系列更小的问题,它们的推理能力会变得更强。有时,如果它们能解释自己的思考过程,推理效果甚至会更好。
关于这种现象有多种假设。直观地理解,我们可以认为大型语言模型在训练数据中见过特定问题被分解为一系列步骤。因此,如果它能遵循这些独立的步骤,它就知道下一步该生成什么内容,以解决特定步骤并最终得出答案。
关于“分解问题”的理念,我们将在课程后续部分详细讨论。但现在,我们可以利用一个简单的技巧和模式,自动帮助大型语言模型分解问题,从而获得更好的答案。
一个简单的方法是:直接要求大型语言模型在遇到问题或提问时,总是将其细分为一系列有助于回答整体问题或解决整体问题的独立问题或子问题。我们可以简单地“编程”让大型语言模型遵循这个规则。
认知验证模式正是为此目的而设计。我们将告诉大型语言模型:当你被提问时,请遵循以下规则:
- 生成一系列有助于更准确回答该问题的附加问题。
- 结合这些独立问题的答案,生成对整体问题的最终答案。
再次直观地思考一下:如果我们向大型语言模型提出一个通用或特定的问题,它可以利用其在训练数据中见过的模式,找出通常与此问题相关的其他问题。这有助于它从知识库中收集与该问题通常相关联的其他问题。当它找到这些相关问题时,很可能就能获得能提供额外细节或背景信息的问题,从而更好地回答原问题。
然后,当我们为所有这些子问题提供答案时,它就能获得额外的上下文信息,从而给我们一个更好的整体答案。同时,这也有助于我们作为用户来结构化自己的思维。因为当我们提问并看到问题被分解时,它会帮助我们认识到问题的其他维度。
实践案例:前院有多少只蚊子?
让我们通过一个实践案例来看看这个模式如何运作。这里,我向模型发出指令:“当你被提问时,请遵循这些规则:生成一系列有助于更准确回答该问题的附加问题;结合这些独立问题的答案,生成对整体问题的最终答案。”
模型回复:“当然可以。请告诉我问题是什么,我将生成附加问题。”
我提出了一个自己无法轻易回答、也不太了解的问题。我想,通过提出一个可能过于宽泛、信息不足的问题,这个模式会很有帮助。于是我问:“我的前院可能生活着多少只蚊子?”
我不知道答案,也没有深入思考过,但我对这个答案很感兴趣,甚至不知道该如何着手计算。模型遵循了我们的提示模式,即认知验证模式,生成了一系列附加问题。让我们看看这些问题:

以下是模型生成的附加问题列表:
- 你的前院面积有多大? 这显然很重要。院子越大,蚊子可能越多,很可能与院子的平方英尺面积相关。
- 你所在地区的气候如何? 这显然也非常重要。如果我住在沙漠或北极,很可能根本没有蚊子。
- 现在是什么季节? 另一个很好的问题。我提问时没想到这个维度。我可能是在蚊子很多的春夏季节提问,当时它们在我院子里飞来飞去让我很烦,但我没想到需要在问题中包含时间信息。
- 你的前院或附近是否有任何水体或积水源? 这显然是一个重要因素,因为蚊子在水中繁殖。我其实知道这一点,但在最初的问题中没有包含这个信息。
- 你的前院是否有任何吸引蚊子的植物或植被? 这是另一个重要因素。
现在我们可以看到,它已经将我的原始问题分解成了一系列有助于回答原始问题的子问题。这非常有用,我也学到了一些东西。





提供答案并获取最终估算
为了回答这些问题,我将逐一回复模型。它提出了五个问题,我将依次回答:
- 关于面积:大约2500平方英尺。(实际上我并不确定,只是猜测,我的前院没那么大,这可能还是个高估。)
- 关于气候:我住在美国东南部。
- 关于时间:现在是四月。(我没有告诉它具体的季节或其他信息,只给了月份,这可能不够具体,即使在四月内不同日期也可能有差异。)
- 关于水源:前院没有积水。
- 关于植被:是的,有植物可能吸引蚊子。
然后,模型根据提供的信息给出了估算:“基于提供的信息,以下是对你前院蚊子数量的估算。” 它给出了一些数据点,并适当地进行了限定说明,这是件好事。





它说:“一般来说,在有积水源的地区,典型的蚊子种群密度范围是每平方米10到100只。然而,由于你的院子或附近没有积水源,密度可能会更低。” 接着它总结道:“很难提供精确的估算。但是,根据物种、气候和植被存在等各种因素,你的院子里可能有几十到几百只蚊子。”
这个结果相当不错。它能将范围缩小到“几十到几百只”,这比我预期的范围要精确。这也设定了我的心理预期。在盛夏时节,当我走到前院时,我会发誓有成千上万只蚊子,快把我活活咬死了,所以我通常认为数量要多得多。但根据这个估算,可能我错了,或者这个估算有误,但它实际上给出了相当合理的推理。
这种方法的一个优点是,我对它的答案完全错误的怀疑减少了,因为它问了我一系列合理的问题来推导答案。它还提供了一些我可以跟进核实的事实,比如一只雌性蚊子一次产多少卵,有水源地区的蚊子密度等。它给了我一个相当不错的答案,也给了我一系列可以改进这个答案的问题。
模式的价值与总结
现在我要补充说明一下。我说它给了我一个“相当好”的答案,但事实上我并不知道正确答案,我也不是这个领域的专家。对于从大型语言模型获得的任何输出,我强烈建议你进行验证。但我觉得这很有趣,因为至少,它通过这个问题帮助我了解了可能影响我院子蚊子数量的因素,并给了我一些可以跟进和核实的东西,看看这些事实是否站得住脚,看看这些问题是否真的有用。
但它们看起来确实是有效且重要的问题:
- 前院面积有多大?—— 我不确定是否需要研究这个,但更大的院子很可能有更多蚊子。
- 气候如何?—— 我知道这很重要。
- 现在是什么季节?—— 根据个人经验,我也知道这很重要。
- 前院或附近是否有积水?—— 我知道这很重要,这是在美国东南部的常识。
- 前院是否有吸引蚊子的植物?—— 我碰巧也知道这是一个重要因素。
所以,它实际上给了我一系列非常好的问题,也给了我一些与这些问题相关的事实(这些事实我需要去核实,因为我不太了解)。这是一个非常有用的工具,可以自动分解问题。我可以看到它如何推理和思考这个问题,这也改善了我自己思考如何回答这个问题的方式。
在许多情况下,我们会发现,让大型语言模型分解问题将有助于它给我们更好的答案,从而使我们获得更准确的结果。
本节课中,我们一起学习了“认知验证模式”。 这种模式的核心是引导模型通过 生成子问题 -> 获取子答案 -> 综合成最终答案 的流程来处理复杂提问。它不仅能提升模型回答的准确性和可靠性,还能帮助我们作为用户更结构化地思考问题,识别问题的关键维度。这是一种简单而强大的提示工程技术,适用于需要深度推理或信息不足的场景。
042:受众角色模式 🎭
在本节课中,我们将要学习“受众角色模式”。这是一种通过告诉大型语言模型其输出内容的目标受众是谁,来引导其生成更合适、更具针对性的回答的方法。
上一节我们介绍了“角色扮演模式”,它通过“扮演为...”的指令让模型以特定身份输出内容。本节中我们来看看它的一个强大变体——受众角色模式。
概述:什么是受众角色模式?
受众角色模式的核心思想是:我们无需详细规定输出内容的具体规则或格式,只需告诉模型“你的输出是为谁准备的”。模型会利用其训练数据中关于该受众的知识,自动调整其输出的内容、语言风格和复杂程度,使其更适合目标受众。
其基本公式是:
[你的任务] + 假设我是 [受众角色描述]
受众角色模式示例解析
以下是几个使用受众角色模式向不同人群解释“大型语言模型及其工作原理”的例子,展示了模型如何根据受众调整其解释方式。
示例一:面向无计算机科学背景的受众
我们首先给出一个基础指令,要求模型向一个没有计算机科学背景的人进行解释。
指令:
解释大型语言模型及其工作原理。假设我没有计算机科学背景。
模型输出要点:
- 模型从基础概念开始解释。
- 它将大型语言模型描述为“一种旨在理解和生成人类语言的计算机程序”。
- 它使用了一个比喻:“就像一个虚拟作家,能够以对人类来说自然的方式理解和创造句子”。
- 它用“可调节的旋钮”来比喻模型中的“参数”,使其易于理解。
这个例子表明,当被告知受众缺乏专业知识时,模型会自动避免使用技术术语,转而采用通俗易懂的语言和比喻。
示例二:面向历史人物克里斯托弗·哥伦布
接下来,我们尝试一个更具挑战性的受众角色,看看模型如何发挥创造力。
指令:
解释大型语言模型及其工作原理。假设我是克里斯托弗·哥伦布。
模型输出要点:
- 模型首先承认哥伦布所处的时代背景(15-16世纪)不熟悉计算机和人工智能。
- 它创造了一个哥伦布可能理解的比喻:“想象你有一个神奇的抄写员”。
- 它描述这个“抄写员”阅读了全世界的无数书籍、卷轴和手稿,并向诗人、学者学习。
- 模型用“预测句子接下来是什么”来解释大型语言模型的核心功能,并举例说明。
通过将抽象概念映射到历史人物可能理解的“神奇抄写员”上,模型成功地进行了跨时代、跨文化的解释。
示例三:面向容易无聊的小学二年级学生
最后,我们指定一个更具体、要求更高的受众角色。
指令:
解释大型语言模型及其工作原理。假设我是一个容易感到无聊的二年级小学生。
模型输出要点:
- 模型以“我要告诉你一个超级酷的东西”这样吸引孩子注意力的方式开头。
- 它使用了“机器人朋友”这个比喻,并说这个机器人擅长玩文字游戏。
- 解释过程被命名为“阅读时间”,并说机器人朋友喜欢阅读大量的书籍和网站。
- 整体语言风格活泼、简单,充满互动感。
模型不仅考虑了受众的年龄(二年级),还额外满足了“容易无聊”这个特性,使解释变得简短、有趣、充满画面感。
受众角色模式的优势
从以上例子可以看出,受众角色模式具有以下优势:
- 高效:我们无需费力构思复杂的规则来描述“应该怎么写”,只需定义“写给谁看”。
- 灵活:模型能基于其庞大的知识库,为各种虚构或真实的受众生成贴切的解释。
- 强大:它是角色扮演模式的补充,能激发出模型丰富的推理和适应能力,产生有趣而强大的输出。
总结
本节课中我们一起学习了受众角色模式。我们了解到,通过简单地在指令中说明假设我是 [某个受众],就能引导大型语言模型为其量身定制输出内容。无论是面向初学者、历史人物还是儿童,模型都能调整其语言、比喻和详细程度,使信息传递更加有效。这再次展示了通过精心设计提示词来驾驭AI能力的强大之处。
043:翻转交互模式 🎯
在本节课中,我们将学习一种名为“翻转交互”的提示模式。这种模式的核心是让大型语言模型主动向我们提问,以引导问题解决或信息收集的过程,尤其适用于我们自身不完全清楚达成目标所需具体步骤的场景。
概述
上一节我们探讨了如何向模型提问以获取答案。本节中,我们来看看如何“翻转”这种交互:让模型成为提问方,而我们则提供答案。这种模式在多种场景下非常有用,例如设计个性化方案、进行知识测验或诊断问题。
翻转交互模式详解
翻转交互模式的核心思想是角色互换。我们不再向模型提问,而是指示模型向我们提问,直到它收集到足够的信息来完成某个特定目标。
以下是构建此类提示的基本方法:
基本提示结构:
请就[某个主题]向我提问,直到你获得足够的信息来[达成某个目标]。当你认为信息足够时,请[展示最终成果]。现在,请提出第一个问题。
关键要素包括:
- 指定主题:明确提问的范围。
- 设定目标:说明提问的目的,即最终要生成什么。
- 触发行动:以“请提出第一个问题”结尾,可以有效地引导模型开始一次只问一个问题的交互。
应用实例:制定健身计划
让我们通过一个具体例子来理解这个模式。假设我们想获得一个针对性的力量训练计划。
我们给出的提示可能是:
请就我的健身目标向我提问,直到你获得足够的信息为我建议一个力量训练方案。当你认为信息足够时,请展示该训练方案。现在,请提出第一个问题。
交互过程如下:
- 模型提出第一个问题:“你的具体健身目标是什么?是想增肌、增强力量、提高耐力,还是达成某个特定目标?”
- 我们回答:“我希望增强爆发力,同时预防因山地自行车跳跃动作可能引起的髌腱炎。”
- 模型根据我们的回答,提出后续问题,例如:“你目前或过去是否有任何可能影响训练能力的伤病或健康状况?”、“你每周能安排几天进行训练?”、“你是否能使用健身房或某些健身器材?”
- 我们逐一回答这些问题。
- 当模型根据一系列问答判断已收集到足够信息后,它不再提问,而是直接生成一个定制化的力量训练方案,其中包含了诸如高脚杯深蹲、分腿蹲等针对我们目标(增强爆发力和膝盖保护)的推荐动作。
这个例子展示了翻转交互模式的优势:它跳过了我们可能需要反复提供背景信息或收到通用建议的步骤,直接通过针对性的对话收集关键信息,并生成符合我们具体需求的方案。
模式优势与应用场景
这种模式之所以强大,是因为它利用了模型从海量训练数据中学到的语言模式和领域知识。例如,在髌腱炎的案例中,模型并非“知道”医学知识,而是识别出在讨论此话题时,人们常会提及的关联信息(如相关训练动作、需要避开的风险等),从而提出更有效的问题。
以下是该模式的一些典型应用场景:
- 个性化方案制定:如健身计划、饮食方案、学习路径规划。
- 诊断与排查:模拟客服场景,通过提问诊断技术问题或用户需求。
- 教育与测验:让模型根据某个知识领域出题,对我们进行测验。
- 游戏与互动:进行猜谜、角色扮演等互动游戏。
总结
本节课我们一起学习了“翻转交互”提示模式。当你不完全清楚达成目标所需的所有信息,或者希望借助模型的知识来引导对话进程时,这种模式尤为有效。其核心是明确指示模型围绕特定目标进行提问,并通过交互式问答收集必要信息,最终生成定制化的输出。记住,在提示中清晰地定义主题和最终目标,是成功运用此模式的关键。
044:少样本示例提示
在本节课中,我们将要学习一种名为“少样本示例”或“少样本提示”的强大技巧。这种方法的核心思想是,通过向大语言模型展示具体的输入和期望输出的例子,来教会它遵循特定的模式完成任务,而不是仅仅用文字描述任务要求。
少样本提示的核心思想
上一节我们介绍了提示工程的基本概念,本节中我们来看看如何通过具体例子来“教导”模型。
少样本提示背后的理念是,我们向大语言模型提供一系列“输入-输出”的示例。这类似于人类学习:我们先看几个例子,理解其中的模式,然后尝试将这种模式应用到新的问题上。通过这种方式,我们实际上是在提示内部教会模型一个新的技巧。
我们不是描述希望模型遵循的过程,而是通过示例展示我们希望它做什么以及如何格式化输出,然后期望它能延续我们提供的模式。
一个简单的情感分析示例
让我们来看一个具体的例子。以下是一个简单的少样本提示示例:
输入:这部电影不错,但有点长。
情感:中性
输入:我不太喜欢这本书,它缺少重要细节,结尾也没讲清楚。
情感:负面
输入:我爱这本书,它对我学习如何改善肠道健康真的很有帮助。
情感:正面
输入:我对这家新餐厅不太确定,服务很慢,但菜品相当不错。
情感:
在这个例子中,我们正在进行所谓的“情感分析”。情感分析旨在分析用户对某事物的评论,并判断其情感倾向是正面、负面还是中性。
以下是这个提示的构建步骤:
- 提供示例:我们首先给出了三个示例,每个都包含一个“输入”(用户评论)和对应的“情感”标签(正面、负面或中性)。
- 定义任务:我们没有直接说“去分析这些评论并告诉我情感”,而是通过例子展示了任务。
- 给出新输入:最后,我们提供了一个新的评论输入,并以“情感:”结尾,提示模型根据学到的模式完成输出。
模型在看到这个新输入“我对这家新餐厅不太确定,服务很慢,但菜品相当不错。”后,会识别出模式。它注意到评论中既有负面因素(服务慢),也有正面因素(菜品好),这与第一个示例“电影不错但有点长”的模式相似,后者被标记为“中性”。因此,模型会输出:
情感:中性
少样本提示的关键要点
从上面的例子中,我们可以总结出几个关键点:
- 无需明确指令:我们没有告诉模型具体要做什么(例如,“请判断情感”),它从示例中学会了任务。
- 输出格式自约束:模型自动将输出约束在了我们示例中提供的标签范围内(正面、负面、中性),这有助于我们获得更可控、更规范的输出。
- 基于模式预测:这回到了大语言模型的工作原理——预测下一个词。当模型在示例中反复看到“输入:... 情感:{标签}”的模式后,它学会在遇到新的“输入:...”时,预测下一个词应该是“情感:”,并在之后给出一个合适的标签。
模式的灵活性与力量
这个例子展示了遵循一个简单模式(输入->情感)的能力。但少样本提示的威力远不止于此。
- 前缀可以变化:你不必拘泥于“输入”和“输出”这样的前缀,可以根据任务设计任何步骤前缀。
- 适用于描述性任务:当你有明确展示了任务输入和期望输出的数据,但难以用语言精确描述任务执行过程时,少样本提示尤其有效。它让模型从“演示”中学习。
本节课中我们一起学习了少样本示例提示法。我们了解到,通过提供具体的“输入-输出”示例,可以有效地教会大语言模型遵循特定模式执行任务,例如情感分析。这种方法无需复杂指令,依靠模型强大的模式识别能力,就能获得格式规范、符合预期的结果,是提示工程中一项非常实用且强大的技巧。
045:少样本提示的多样化应用 🚗
在本节课中,我们将探索少样本提示技术一个非常不同的应用领域:让大型语言模型学习在特定情境下规划行动。我们将通过一个驾驶场景的示例,来理解模型如何从少量例子中学习并做出决策。
上一节我们介绍了如何将少样本提示用于情感分析。本节中,我们来看看这项技术如何应用于更复杂、更具规划性的任务。
大型语言模型实际上具备一定的规划能力,这是一个有趣的功能。它们能够通过分析少量示例中的模式,学习在特定情境下应该采取什么行动。我举这个例子,并非因为模型的能力仅限于规划行动或情感分析,而是希望你能拓宽思路,看到少样本提示作为一种技术,可以适应并应用于各种不同的场景。
从示例中学习行动规划
以下是我们的少样本提示示例,用于教导模型根据驾驶情境做出反应:
- 情境:我正以每小时60英里的速度行驶,看到前面车辆的刹车灯亮了。
- 行动:刹车。
- 情境:我刚从匝道进入高速公路,正以每小时30英里的速度行驶。
- 行动:加速。
- 情境:一只鹿突然窜到我车前,我正以每小时15英里的速度行驶,且路边有宽敞的路肩。
- 行动:刹车并转向路肩。
通过这些例子,我们教导大型语言模型:它将获得一个情境描述,并需要决定车辆应该做什么。
模型的推理与输出
接着,我们提供一个新情境来测试模型:“我正在倒车出停车位,看到后面车辆的倒车灯亮了。” 我们在提示末尾留下“行动:”,示意模型需要补全决策。
模型给出的回答是:“停车,等待后方车辆倒出后再继续。” 它做出了一个合理的、符合常识的决策。当然,这并不意味着我们应该用少样本提示去打造自动驾驶汽车,远未达到那种程度。但我想表明,我们不必将思维局限在“分类”这类刻板任务中。模型可以执行非常复杂的任务,情感分析是复杂的,而这种情境-行动规划则是另一种维度的复杂任务。因此,我们需要创造性地思考如何使用少样本提示。
模型的扩展与生成能力
此外,我们还能对输出施加一些约束,模型正在学习输出应有的格式。接下来,我将展示大型语言模型一个有趣的能力:用一个模型来教导另一个模型。
我输入指令:“请提供更多示例”,然后以“情境”开头引导它。模型基于已学习的模式,开始生成新的情境和行动对:
- 情境:你在暴雨中驾驶,注意到前方道路积水。
- 行动:减速并谨慎驶过积水区域,注意其他车辆,避免突然转向或变道。(我个人不同意这个行动,驶过积水区域可能并非明智之举,这再次提醒我们需要对模型的输出负责并进行核查。)
- 情境:你在双车道公路上行驶,对向车辆开着远光灯迎面驶来。
- 行动:将你的前灯调至近光,避免使对向司机眩目。
有趣的是,它为我们生成了一些丰富的情境和可能恰当的行动(尽管我对积水示例有异议)。这些生成的例子与我们之前提供的示例非常相似。
生成示例的再利用与模型教学
我们可以将这些生成的示例收集起来,经过人工编辑和审核后,作为新的少样本示例反馈给同一个大型语言模型,或者用于教导另一个模型。创建初始示例需要较高的精力,但生成后续示例并加以人工润色的工作量则小得多。这样,我们就能快速积累示例,既可以用于生成当前所需的输出,也能为未来的模型训练提供素材。
事实上,已经有人这样做了。例如,有人获取ChatGPT的输出,然后将其输入到另一个大型语言模型(如Meta的Llama)中,用ChatGPT的输出来提升Llama的输出质量。这揭示了另一个有趣的能力:大型语言模型可以通过少样本示例,为其他模型生成训练示例。
总结与展望
本节课中我们一起学习了少样本提示技术如何应用于情境-行动规划这类与之前截然不同的任务。其核心模式是:提供一组展示“输入”(情境)和“期望输出”(行动)的示例。只要我们能描述出一种模式,并提供一组展示输入与期望结果的例子,就可以应用这项技术。我们甚至可以让模型展示包含中间步骤的推理过程,这将在后续视频中探讨。
总而言之,少样本提示是一个强大的工具,它能将模型的能力引导至各种新颖、复杂的领域,关键在于我们如何设计和提供这些引导性的示例。
046:带中间步骤的少样本示例 🧩
在本节课中,我们将学习如何构建包含中间步骤的少样本提示。这种方法能让大型语言模型学习如何通过一系列步骤来达成目标,从而生成更复杂、更细致的输出。
上一节我们介绍了基本的少样本提示,本节中我们来看看如何通过展示中间步骤来引导模型进行更复杂的推理。
中间步骤的优势
我们提供的少样本提示示例,不必仅限于输入和输出。实际上,我们可以展示达成特定目标的中间步骤。这样做的一个关键原因是,当模型看到这些步骤时,它能学习如何应用一系列中间行动来达成最终目标。因此,我们可以得到比简单的“输入-输出”或“情境-行动”更有趣的输出。我们可以开始分析:如果发生某种情况,下一步行动可能是什么,然后是再下一步,直到达到对我们重要的某个状态(例如,我们不再有撞上前车的风险)。
如果我们正确设计示例,就能让大型语言模型将问题分解成一系列步骤,并决定如何着手解决。
示例分析:驾驶情境
现在让我们看一个具体的例子。我们将使用之前的汽车示例,并对其进行丰富。
以下是两个情境示例:
示例一:
- 情境:我正以每小时60英里的速度行驶,看到前面汽车的刹车灯亮了。
- 思考:我需要在撞上前车之前减速。
- 行动:踩下刹车。
- 思考:汽车无法及时停下。
- 行动:检查路肩是否足够宽以便转向。
- 思考:路肩足够宽。
- 行动:转向驶入路肩。
我们构建了一个更复杂的场景,它包含了原始情境,然后根据思考过程更新了后续步骤。在这个案例中,我们行驶在路上,前车刹车灯亮起,我们思考会撞上,于是刹车;又思考无法及时停下,于是观察并发现路肩足够宽,最终决定转向。这便是一个涉及多个步骤的复杂情境。
示例二:
- 情境:我刚从匝道进入高速公路,正以每小时30英里的速度行驶。
- 思考:我需要加速到限速,以免被后车追尾。
- 行动:踩下油门。
- 思考:我已达到限速。
- 行动:松开油门。
我们基本上是在将问题或情境分解为多个步骤及其对应的行动。
应用新情境
现在,我们提供一个新情境让模型推理:
- 情境:我正在倒车出停车位,看到后面汽车的倒车灯亮了。
以下是模型生成的响应:
- 行动:立即停止倒车。
- 思考:我需要检查周围环境,确保继续倒车是安全的。
- 行动:检查后视镜和周围环境,看是否有障碍物或行人。
- 思考:可以安全地继续倒车。
- 行动:缓慢而谨慎地继续倒车,同时留意周围情况。
我们可以看到,模型没有简单地输出“停车等待”,而是生成了更精细的步骤:立即停止、思考需要检查、执行检查、确认安全、然后谨慎继续。这为我们在特定情境下的行动提供了更丰富的细节。
扩展应用与生成
这种方法有许多有趣的应用场景。例如在客户服务中,客户报告了一个特定问题,我们记录了客服人员帮助客户解决问题的步骤。通过少样本示例,模型可以学习帮助客户诊断问题。如果它见过足够多不同的示例和解决路径,它就能推演出该怎么做。
像上次一样,我们也可以让模型生成更多示例。例如,提示“生成另一个示例”,它可能会生成:
- 情境:我正在一条狭窄蜿蜒、有几个盲弯的道路上行驶。
- 思考:我需要减速并保持谨慎,以避免潜在碰撞。
- ...(一系列行动)...
- 思考:我已通过危险路段。
- 行动:恢复正常速度。
我们还可以进一步引导情境发展。例如,在以上情境后添加“思考:我的汽油快用完了”,模型可能会续写:
- 思考:我需要在汽油耗尽前找到加油站。
- 行动:检查GPS或地图寻找附近的加油站。
- 思考:最近的加油站太远了。
- 行动:降低速度以节省燃油,并尝试到达下一个加油站或休息区。
这就像是在生成一个问题解决脚本。
深入脚本构建
让我们更深入地思考这个脚本。假设在客户服务场景中,我们可能希望生成一系列行动,然后根据客户的后续反馈输入新的情境。
看看我们在这个例子中结束的地方:
- 行动:将车停到路边并打开危险警示灯以示意其他司机。呼叫道路救援或尽可能步行到最近的加油站。
- 思考:道路救援不可用,且最近的加油站太远,无法步行到达。
让我们看看模型决定怎么做:
- 思考:我需要节省手机电量,并尽快找到去加油站的方法。
- 行动:检查附近是否有可以求助或使用电话的房屋或商铺。
- 思考:远处有一栋房子。
可以看到它如何构建行动脚本,进行问题解决,并创造有趣的情境。我们可以提示它继续,根据输入(例如“在这种情况下会发生什么?你会如何处理?”)进一步展开。同时我们也注意到,它的输出仍然遵循我们设定的模式,是受约束的。
核心原理与最佳实践
现在,回过头思考这背后的原理至关重要。
这种方法之所以有效,部分是因为这个工具(大语言模型)懂得如何根据给定的模式预测接下来会发生什么。它从语言中学习:给定这种模式,我接下来就该这么做。你也可以想象,它在训练数据中见过许多类似脚本的东西,比如电影剧本(角色A说了这个,角色B这样回应,然后是对发生事情的描述)。我们使用的模式、结构,很可能类似于它训练时见过的东西。因此,它学会了从这些示例中推断接下来应该发生什么。
模型根据其见过的内容,学习并推断模式中下一个需要出现的东西。如果我们选择某种与它所见过的模式非常不同的结构,它可能能做到,也可能做不到。因此,构思提示时需要考虑的一点是:尽量选择简单的文本结构模式,这些模式应该是它可能在训练数据中见过的、类似的东西。
例如,使用“情境”、“思考”、“行动”这样的前缀,就是一种它可能见过的格式。另外要注意,虽然在这里文本会换行,但每个示例实际上都是单行表述的。如果我们写成“行动:”后面跟着多行内容,模式就更难遵循,因为并非每一行都以这些前缀开头。因此,必须仔细思考这些内容的结构和格式。
但归根结底,我们试图给它一个能够快速、轻松理解的模式,以便它知道如何解决问题。我们可以像这里看到的那样提供中间步骤,但我们不一定需要提供决定下一步的逻辑规则。
事实上,想想看,当我说“道路救援不可用且最近的加油站太远无法步行到达”时,如果我必须描述在这种情况下所有不同的规则(这种情况下做A,那种情况下做B),你可以想象这会占用大量空间,而且可能非常困难,灵活性也可能有限。因此,少样本示例的一个强大之处在于,我们可以利用大型语言模型的“推理”能力(或无论我们称之为什么,即其计算能力),去推断接下来该发生什么,并生成模式中的下一个项目。
总结
本节课中,我们一起学习了如何构建包含中间步骤的少样本提示。通过展示从情境到最终目标的完整推理链条(思考-行动-再思考),我们可以引导大型语言模型进行更复杂的多步问题解决。这种方法的核心在于利用模型从海量文本中学习到的模式识别能力。关键在于设计简单、清晰且模型可能熟悉的文本结构(如使用“情境”、“思考”、“行动”等前缀),从而有效激发模型的推理潜能,生成细致、连贯的行动脚本,而无需手动编写所有复杂的逻辑规则。
047:编写有效的少样本示例 🧠
在本节课中,我们将学习如何为大型语言模型(如ChatGPT)编写有效的“少样本示例”。我们将分析一些常见的错误,并探讨如何通过改进提示的格式和内容,来引导模型更准确地理解并执行我们的任务。
上一节我们介绍了少样本示例的基本概念。本节中,我们来看看在编写这些示例时,我们可能会犯哪些错误,以及如何从这些错误中学习。
以下是一些设计不佳的少样本示例。我们的目标是分析事物的硬度,例如,它是软还是硬。我们通过一个不好的提示来展示其中的问题。
输入: 砖块
输出: 硬
输入: 枕头
输出: 软
输入: 汽车
请注意,这里存在几个问题。首先,我们提供的示例数量很少。其次,我们使用的“输入”和“输出”前缀非常通用,没有为模型提供关于具体任务的足够信息。模型可能不清楚我们是在描述物体的“表面触感”、“材质”还是其他属性。因此,当我们输入“汽车”时,模型可能不确定下一个输出应该是什么,它可能会回答“快”或“交通工具”,而不是我们期望的“硬”或“软”。
这个提示设计不佳,导致模型无法从模式中推断出正确的输出。主要错误在于:
- 前缀(如“输入”、“输出”)信息量不足。
- 没有明确说明任务的具体内容。
- 示例不够详细,未能清晰展示从输入到输出的推理过程。
为了解决上述问题,一种方法是在提供示例之前,先给出更明确的指令。我们可以为模型设定规则。
例如,我们可以在提示开头添加:“你的输出只能是‘软’或‘硬’。”
你的输出只能是“软”或“硬”。
输入: 砖块
输出: 硬
输入: 枕头
输出: 软
输入: 汽车
通过添加这条指令,我们限定了模型输出的可能范围。虽然整个提示仍然比较模糊,但这条额外的上下文帮助模型理解,任务可能是判断“按压物体时的感觉”。因此,对于“汽车”,它更有可能输出“硬”。
编写少样本示例时,首先要思考:你的示例是否足够详细?你使用的前缀是否有意义?它们是否为模型提供了理解任务所需的额外上下文?
现在,让我们看另一个例子,它使用了更具描述性的前缀。
物体: 飞机 速度: 快
物体: 蠕虫 速度: 慢
物体: 球 速度:
在这个例子中,“速度”这个前缀比“输入/输出”更具描述性。然而,当我们输入“球”时,模型可能会输出“可变”。这是因为“球”的速度取决于具体情境(例如,被踢出的球很快,滚动的球可能很慢)。
这个例子说明,我们必须确保为模型提供足够的信息,使其能够准确地将输入分类到指定的“盒子”(如快/慢)里。如果输入信息不足,模型就无法做出明确的判断。
为了改进,我们需要在输入中提供更丰富的细节。
物体: 飞机 速度: 快
物体: 蠕虫 速度: 慢
物体: 被婴儿踢的球 速度:
通过将输入改为“被婴儿踢的球”,我们提供了足够的情境信息。模型现在可以依据“婴儿力量小”这个常识,推断出速度应该是“慢”。
从这个改进中,我们可以总结出编写有效少样本示例的几个关键点:
以下是编写有效少样本示例的核心要点:
- 使用描述性的前缀:确保你的前缀(如“速度”、“表面感觉”)能清晰传达任务属性。
- 示例应包含充分信息:每个示例都应提供足够细节,以揭示从输入推导出输出的底层逻辑或过程。
- 在示例前提供必要说明:有时仅靠示例不够,需要在提示开头添加规则或额外说明来辅助模型。
- 确保新输入信息充足:当你给出一个新输入让模型处理时,必须确保这个输入包含了应用所学“过程”所需的全部相关信息。
你需要思考:关键信息是更适合用示例来展示,还是用开头的指令来规定?你的示例是否覆盖了足够多的情况?你提供的新输入是否包含了应用规则所需的全部上下文?
本节课中我们一起学习了如何编写有效的少样本示例。核心在于通过描述性的前缀、信息充分的示例以及必要的指令,为大型语言模型构建清晰、无歧义的上下文。记住,一个好的提示应该能让一个普通人毫不费力地理解你的意图。通过不断优化提示的这三个方面,你可以显著提升模型在特定任务上的表现准确性和可靠性。
048:思维链提示
概述
在本节课中,我们将学习一种名为“思维链提示”的高级提示技巧。这种技巧的核心是要求大型语言模型在给出最终答案前,先展示其推理过程。我们将通过具体示例来理解其原理、应用方法以及为何它能显著提升模型在复杂推理任务上的表现。
思维链提示的原理
上一节我们介绍了基础提示方法。本节中,我们来看看思维链提示背后的逻辑。
你可能记得在学生时代,老师要求你在解答数学题时“展示你的解题步骤”。无论是证明一个结论,还是解释如何得出答案,展示推理过程在许多领域都至关重要。事实证明,在编写提示词时,这一原则同样极其重要。
让大型语言模型解释其推理过程,实际上能使其为我们提供更好的表现。这听起来很有趣,但细想之下有其道理。大型语言模型通过海量文本训练,学会了预测下一个词。如果它能正确地解释其推理过程,那么它随后产生正确答案的可能性就更高,因为从直觉上看,正确的答案理应跟随正确的推理之后出现。
类似地,如果它在推理的第一步就正确,那么它很可能在第二步也正确,因为它可能见过类似问题的推理过程。这是一个直观的解释。其核心思想是:将待解决的问题分解为多个独立的步骤,并解释它们。如果这些步骤之间存在自然的逻辑顺序和流程,那么作为最终输出的答案,就更可能是正确推理的自然延伸,因此也更可能是正确的。
思维链提示的应用方法
以下是如何在提示中应用思维链技巧的步骤。
- 提供带推理过程的示例:在给出“少样本”示例时,不仅提供问题和答案,还要详细展示得出答案的每一步推理。
- 明确要求模型先推理:在向模型提出新问题时,明确指示它“先提供推理过程,再给出最终答案”。
- 遵循“推理-答案”格式:在示例和最终提问中,都保持“推理:... 答案:...”的清晰格式,以引导模型模仿。
示例对比:无思维链 vs. 有思维链
为了清晰地展示差异,我们先看一个未使用思维链提示的负面示例,然后再看使用后的效果。
示例一:未使用思维链提示
在这个提示中,我给出了两个示例问题及其简单的是/否答案,然后提出了第三个问题。我犯了一个错误:没有在示例中展示推理过程,也没有要求模型先推理。
提示内容:
问题:我有4名自行车手以平均每小时30英里的速度开始比赛,每人骑行2小时。所有骑手骑行的总英里数大于200吗?答案:是。
问题:自行车比赛有一个编排流程来让车手排队。编排一组8名车手需要47秒,再花67秒让该组到达起跑门并准备就绪。我希望每30秒就有一组新车手开始比赛。为了持续每30秒开始一场比赛,我需要始终有8组车手在编排吗?答案:否。
问题:我在一个没有重力的太空船里。我有一个杯子,里面有一根针。我在床上移动脚,碰倒了杯子到地板上。我拿起一本书放在桌子上。地板上有什么东西吗?
模型回答:
答案:是。
当装有针的杯子被碰倒到地板上时,杯子和针最终都会落在地板上。在没有重力的情况下,物体不会像在地球上那样向下坠落,但它们仍然会对施加的力做出反应而移动。在这种情况下,你的脚碰倒杯子所施加的力将导致杯子和针移动并停留在地板上。拿起一本书放在桌子上不会影响杯子的位置,所以它们会留在地板上。
模型直接给出了“是”的答案,并附带了简短的、可能不准确的解释。
示例二:使用思维链提示
现在,我们使用思维链提示。关键变化在于:我们在示例中明确加入了推理步骤,并指示模型对新问题也先进行推理。
提示内容:
问题:我有4名自行车手以平均每小时30英里的速度开始比赛,每人骑行2小时。所有骑手骑行的总英里数大于200吗?
推理:每位骑手将骑行 30英里/小时 × 2小时 = 60英里。我有4名骑手。因此,骑手们骑行的总英里数是 4 × 60英里 = 240英里。
答案:是。
问题:自行车比赛有一个编排流程来让车手排队。编排一组8名车手需要47秒,再花67秒让该组到达起跑门并准备就绪。我希望每30秒就有一组新车手开始比赛。为了持续每30秒开始一场比赛,我需要始终有8组车手在编排吗?
推理:每组需要 47秒 + 67秒 = 114秒 才能准备就绪比赛。我需要计算在一组准备就绪之前可以举行多少场比赛。114秒 / 30秒 = 3.8。我不能有部分组,所以需要向上取整到4。我只需要4组在编排中,就能每30秒开始一场比赛。
答案:否。
问题:我在一个没有重力的太空船里。我有一个杯子,里面有一根针。我在床上移动脚,碰倒了杯子到地板上。我拿起一本书放在桌子上。地板上有什么东西吗?请先提供你的推理,然后给出答案。
模型回答:
推理:在一个没有重力的太空船中,物体的行为方式与在地球上有重力时不同。当杯子和针被碰倒时,它们不会像在地球上那样掉落到地板上。相反,它们会在原处漂浮,或沿着施加给它们的力的方向移动。在无重力环境下,“在地板上”这个概念与地球上的含义不同。没有重力将物体拉向并保持在所谓的“地板”上。因此,即使杯子被碰倒,杯子和针也不会静止在地板上。
答案:否。
可以看到,通过引导模型进行逐步推理,我们得到了一个更符合物理常识的答案(“否”),并且其推理过程更加严谨和深入。
核心要点与总结
本节课中,我们一起学习了思维链提示技巧。
- 核心价值:要求模型“展示解题步骤”可以显著提高其在需要逻辑推理、数学计算或复杂问题分解任务上的准确性和可靠性。
- 实现方式:通过提供包含详细推理过程的“少样本”示例,并明确要求模型遵循“先推理,后答案”的格式。
- 底层逻辑:这利用了大型语言模型基于模式预测的特性。正确的推理步骤序列,会自然导向更正确的最终答案。
当你在构建需要一定智能和推理能力的提示时,请记住这个技巧。虽然并非所有任务都需要它,但在处理复杂问题时,思维链提示是一个极其有用的工具,能帮助你从模型中获取更高质量、更深思熟虑的回应。
049:反应式提示 🧠
在本节课中,我们将学习如何构建“反应式提示”。这种技术能让大型语言模型(如ChatGPT)学会在需要时调用外部工具(如网络搜索或视频分析)来获取信息或进行计算,从而解决其自身无法独立完成的任务。
大型语言模型虽然强大,但无法独立完成所有事情。它们需要能够接入其他数据源,并学会使用其他工具,才能随着时间的推移真正发挥效力。
因此,我们必须学会构建一种提示,让大型语言模型能够查询新信息,或使用其他工具来帮助其完成推理或计算——这些是其本身设计上无法完成的任务。那么,我们该如何做到这一点呢?
反应式提示的核心思想
上一节我们介绍了思维链提示,本节中我们来看看一种扩展方法:反应式提示。其核心理念是,我们希望教会大型语言模型如何思考一个流程,并识别出哪些步骤需要使用外部工具来执行某些操作,然后将工具的结果带回并整合到其推理中。
这与我们之前看到的思维链提示类似,我们将使用其中的一些相同概念,但会扩展这种方法,引入“某些任务需要使用外部工具”这一概念。
一个完整的教学示例
让我们通过一个较长的例子来具体了解。我们将先向模型展示一个完整的解决过程作为教学示例,然后要求它执行类似的新任务。
任务示例: 计算我需要在什么时间到达Music City BMX全国赛现场,才能让我的儿子准时参加9-10岁公开组的比赛。
以下是教学示例中展示给模型的完整思考与行动过程:
思考: 我需要找出第一场比赛的开始时间。我可以使用网络搜索工具查询Music City BMX网站来获取该信息。
行动: 搜索 Music City BMX网站
结果: 所有比赛于上午9点开始。
思考: 我需要找出在9-10岁公开组比赛之前有多少场预赛(Motos)进行。我可以使用网络搜索工具查询Music City BMX网站来获取该信息。
行动: 搜索 Music City BMX网站
结果: 在9-10岁公开组比赛之前有30场预赛。
思考: 我需要了解去年每场预赛耗时多久。我可以使用USABMX网站上的视频直播流,记录前10场预赛的耗时。
行动: 视频 USABMX视频直播链接
结果: 前10场预赛耗时5分钟。
思考: 如果10场预赛耗时5分钟,那么30场预赛将耗时15分钟。比赛于上午9点开始,所以我需要在8:45 AM前到达,提前30分钟以确保安全。
在这个示例中,我们模拟了一个使用网络搜索和观看视频等工具来解决问题的场景,旨在教会模型(如ChatGPT)使用这些工具。
模型对新任务的应用
在展示了教学示例后,我们给模型一个新的任务:
新任务: 计算我的36-40岁新手组比赛将在USA BMX大奖赛何时结束。
然后我们以“思考:”来提示它开始推理。以下是模型根据所学模式生成的响应(注意:在实际系统中,当模型调用“行动”时,我们会暂停,用真实工具执行操作并返回结果,再让模型继续):
思考: 我需要找出USA BMX大奖赛第一场比赛的开始时间。我可以使用网络搜索工具查询USABMX网站来获取该信息。
行动: 搜索 USABMX赛事大奖赛
结果: (假设为本次练习,第一场比赛于上午8点开始。)
思考: 我需要找出在36-40岁新手组比赛之前有多少场预赛。我可以搜索USABMX大奖赛相关信息。
行动: 搜索 USABMX大奖赛
结果: (假设有120场预赛。)
思考: 我需要了解去年每场预赛耗时多久。我可以使用视频直播流。
行动: 视频 USABMX视频直播链接
结果: (假设前10场预赛耗时6分钟。)
思考: 如果10场预赛耗时6分钟,那么每场预赛平均耗时0.6分钟。因此,120场预赛将耗时约72分钟。第一场比赛于上午8点开始,所以36-40岁新手组比赛将在约上午9:12开始。我需要找出36-40岁新手组比赛本身会持续多久。
行动: 搜索 36-40岁新手组比赛时长
结果: (假设比赛时长为3分钟。)
思考: 如果36-40岁新手组比赛大约在上午9:12开始,那么它将在约上午9:15结束。这是我的比赛在USA BMX全国赛的大致结束时间。
反应式提示的工作原理与实现
从上述过程可以看出,模型从教学示例中学到了以下几点:
- 工具的使用: 它学会了存在名为“搜索”和“视频”的工具可以调用。
- 调用格式: 它学会了使用
行动:[工具名称] [输入/参数]的格式来调用工具。 - 推理整合: 它学会了在得到工具返回的“结果”后,继续其推理链条。
在实际系统中,实现反应式提示的流程通常如下:
- 模型生成包含
行动:的文本。 - 系统拦截此调用,根据指令(如
搜索)执行真正的外部工具(如调用搜索引擎API)。 - 系统将获取到的真实结果作为
结果:插入回对话上下文中。 - 将包含新结果的完整上下文再次提交给模型,让它继续生成后续的“思考”或下一个“行动”。
- 重复此过程,直到模型输出最终答案。
以下是这个交互循环的简化表示:
用户任务 -> 模型思考 -> [模型生成“行动”] -> 系统执行工具 -> 返回“结果” -> 模型继续思考 -> ... -> 最终答案
除了通过示例教学,还可以通过其他方式描述工具,例如提供一个工具目录及其描述,让模型在适当时机自行决定使用哪个工具。许多自动化框架(如 LangChain)底层就使用了反应式提示的原理,来实现与各种工具和数据的复杂交互。
总结
本节课中我们一起学习了反应式提示。我们了解到,通过精心设计的示例,可以教会大型语言模型识别自身知识缺口,并按照特定格式调用外部工具(如搜索、计算、查询数据库等)来获取必要信息。这种方法极大地扩展了模型的能力边界,使其能够解决更复杂、需要实时或特定领域数据的实际问题。关键在于构建清晰的提示,展示“思考-行动-结果-再思考”的完整链条,从而引导模型在解决新问题时模仿这一过程。
050:使用大型语言模型相互评分 📝
在本节课中,我们将探讨一个核心问题:随着大型语言模型的快速迭代,我们如何有效评估和维护我们精心设计的提示词?我们将学习一种利用大型语言模型自身来评估其输出质量的方法。
概述:模型快速演进带来的挑战
我们面临的问题是,大型语言模型本身及其提示词工程领域都在飞速发展。我们已经见证了ChatGPT、GPT-4、Llama、Alpaca、Vicuna等模型的不断涌现。当我们投入大量精力开发出一套高效提示词后,如何评估它们并确保其长期有效性?如果我们更换了底层的大型语言模型,是否意味着所有提示词都会失效?或者,如果我们处理的数据稍有变动,是否会产生连锁影响?因此,我们需要更好的方法来评估模型输出。
当然,一种方式是让人工审核输出结果,但我们更希望能找到可扩展性更强的自动化分析方法。
解决方案:利用模型进行自我评估
那么,我们该如何实现呢?大型语言模型一个非常有趣的特点是,我们可以利用它们来评估自身。这可以作为我们判断提示词优劣及其长期可维护性的一个输入依据。我们可以用一个大型语言模型来给自身或另一个模型的输出打分。
我们已经见过相关案例,例如用一个大型语言模型去“教导”另一个模型。我们可以采取类似思路:将大型语言模型的输出结果反馈给模型本身进行评分,或者使用另一个(可能参数更多、能力更强的)大型语言模型来评估当前模型的输出。
实践:构建评分提示词示例
接下来,我们通过一个具体例子来看看如何构建一个用于评分的提示词。
在这个示例中,我将教导ChatGPT如何为一个提示词的输出结果评分。请注意,在我的例子中,我并不会向它展示原始的提示词,而只是教导它评分流程,以便实现自动化。我将使用少量示例进行教学。
以下是评分示例的构建过程:
首先,我提供了一个输入文本,这是一段关于范德堡大学的维基百科简介,其中指出该大学成立于1873年。
-
示例一:不理想的输出
- 输入:
范德堡大学成立于1873年。 - 输出:
以下是事件与日期列表:范德堡大学成立 1873年 - 解释:输出结果开头包含了多余的文本,应只包含事件名称和日期。
- 评分:
5/10
- 输入:
-
示例二:信息不全的输出
- 输入:
范德堡大学成立于1873年。 - 输出:
1873 - 解释:输出结果缺少了在该日期发生的具体事件信息。
- 评分:
3/10
- 输入:
-
示例三:理想的输出
- 输入:
范德堡大学成立于1873年。 - 输出:
范德堡大学成立,1873 - 解释:输出完全符合预期格式。
- 评分:
10/10
- 输入:
通过这几个手工标注的例子,我向模型展示了期望的评分标准:提取“事件名称,日期”的格式,且不要任何额外文本或解释。
测试:应用评分提示词
完成教学后,我给出了一个全新的输入文本(关于范德堡大学英语与创意写作项目的历史),并附上一个待评估的输出结果:逃亡者与南方农业派,20世纪上半叶;范德堡大学成为东南联盟创始成员,1966年。
随后,我要求ChatGPT根据刚才学习的标准进行评分。它生成了解释,指出输出存在“大小写不一致”的问题(这是一个我最初未标注但合理的扣分点),并给出了9/10的分数。这表明它成功理解并执行了评分任务。
应用场景与策略
我们可以通过多种方式应用这种评分方法:
- 自我检查:在由大型语言模型驱动的决策或信息生成系统中,可以让模型检查自身的输出。
- 交叉验证:用另一个模型(可能更强大)来检查当前模型的输出。
- 自动化流程:开发一个包含评分标准的提示词,对输出进行多次评分。如果分数低于某个阈值,可以触发人工审核,或者尝试重新生成以获得更好的结果。
这为我们提供了一种额外的工具,既能利用模型的强大能力,又能确保输出质量可控。
提示词设计的灵活性
当然,设计评分提示词的方式有很多种。除了上述使用少量示例的方法,我们也可以结合其他提示模式。
例如,我们可以使用“角色扮演”模式:请你扮演一位提示词批评家。我将为你提供输出结果,请你根据提示词设计者的预期,对其匹配程度进行评分。我会先给你一些评分的例子。
我们可以构建更复杂的提示词,要求模型在最后生成一个分数。通过调整提示词,我们可能得到8/10或9/10等不同的评分,但核心是模型能根据我们设定的标准进行有效评估。
总结
本节课中,我们一起学习了如何利用大型语言模型进行自我评估或相互评估,以应对模型快速迭代带来的提示词维护挑战。我们通过构建包含少量评分示例的提示词,教导模型理解评分标准,并成功应用于新输出的评估。这种方法可以作为我们工具箱中的一件利器,在需要评估提示词输出时,不一定总要依赖人工审核,而是可以借助模型自身的力量,并围绕此构建自动化流程或设置人工介入的触发条件。值得注意的是,即使像示例中那样只提供三个评分例子,模型也能很好地理解我们的意图并完成任务。
051:游戏玩法模式 🎮
概述
在本节课中,我们将学习一种名为“游戏玩法模式”的提示工程技巧。这种模式的核心是让大型语言模型(如ChatGPT)扮演游戏大师的角色,与我们进行互动游戏,从而帮助我们学习和测试特定技能,特别是提示工程能力。
游戏玩法模式简介
上一节我们介绍了多种与AI交互的模式,本节中我们来看看“游戏玩法模式”。这种模式的基本思想是,我们邀请ChatGPT与我们玩一个游戏。在这个游戏中,AI将担任游戏大师,负责制定规则、生成游戏内容并推动游戏进程。
其核心优势在于,我们只需提供游戏的基本主题或框架,AI就能利用其庞大的训练数据来填充具体内容。这解决了设计游戏时的一大难题:不仅需要构思规则,还需要创造大量有趣的游戏内容。
构建一个提示工程技能游戏
以下是创建一个用于提升提示工程技能游戏的具体步骤。
首先,我们向AI说明游戏的基本规则和目的。
我们将玩一个游戏。游戏主题是提示工程。
游戏规则如下:
1. 你(AI)给我提供一个简单的任务,这个任务可以通过编写提示词(prompt)让你来完成。
2. 我尝试编写一个提示词来解决这个任务。
3. 你将运行我编写的提示词,生成输出,并评价我的提示词解决任务的效果。
4. 任务应包含推理或编程成分,但不要求编写源代码。
5. 持续向我提问,直到我让你停止。先问我第一个问题。
游戏过程示例
启动游戏后,AI会生成第一个挑战任务。
AI生成的任务示例:
“给定一个数字列表,判断列表中是否包含重复元素。如果包含,返回‘是的,有重复’;如果不包含,返回‘未发现重复’。”
我们的应对策略:
我们可以使用“少样本示例”模式来编写提示词。即,在提示中提供几个输入输出的例子,引导AI学会处理此类问题。
我们编写的提示词示例:
对于数字列表 [1, 2, 3],输出应为“未发现重复”。
对于数字列表 [2, 2, 2],输出应为“是的,有重复”。
现在,请判断列表 [5, 7, 9, 11] 是否有重复?
AI的反馈:
AI会执行我们的提示,给出正确输出“未发现重复”,并评价道:“你的提示词有效地完成了任务,并提供了不同情况的示例。”
游戏的进阶与变化
游戏会持续进行,AI会提出越来越有挑战性的任务,例如要求统计句子中的单词数并以特定格式输出,这测试了我们使用“模板模式”的能力。
更妙的是,我们可以动态调整游戏主题,让它专注于测试我们对某一特定提示模式的理解。例如,我们可以将主题改为“菜谱模式”。
现在,我们将改变游戏问题的主题。新主题是“菜谱提示模式”。
该模式旨在:给定一个不完整的中间步骤列表,生成一个完整的、用于达成某个目标的步骤序列。这个模式不特指烹饪。
随后,AI生成的任务会围绕这个新模式展开,例如:“你的目标是创建一个提示词,指导我生成组装一个简易木制书架的完整步骤序列。已提供的步骤有:将顶板连接到侧板、将书架插入指定插槽。请用提示词补全缺失步骤并提供清晰的组装顺序。”
游戏模式的优势与总结
本节课中我们一起学习了“游戏玩法模式”。这种模式的核心价值在于:
- 降低内容创作负担:我们只需设计游戏规则框架,AI能自动生成丰富的、与主题相关的内容和挑战。
- 提供即时反馈:AI不仅能执行任务,还能评价我们提示词的质量,甚至能发现我们示例中的笔误。
- 高度可定制:我们可以随时改变游戏主题(例如聚焦于某个具体的提示模式),让学习过程保持新鲜感和针对性。
- 寓教于乐:通过游戏化的互动,练习提示工程变得更有趣,有助于巩固知识和技能。
总之,游戏玩法模式是一个强大的工具,它能将学习过程转化为一场由AI驱动的、充满挑战和反馈的互动体验,非常适合用于技能练习和知识测试。
052:模板模式 🧩
概述
在本节课中,我们将学习“模板模式”。这是一种确保大型语言模型(如ChatGPT)按照我们指定的精确格式输出内容的方法。通过提供一个包含占位符的模板,我们可以指导模型将生成的信息填充到正确的位置,从而获得结构清晰、格式统一的输出。
模板模式的核心思想
上一节我们探讨了如何引导模型生成内容。本节中,我们来看看如何精确控制输出的格式。模板模式的核心思想是:我们提供一个输出模板,模型根据模板中的占位符来填充内容。
这就像你给助手一份表格或信函模板,并告诉他:“请在这些空白处填写相应的信息。” 模型会理解模板的结构,并按照你的要求生成内容。
模板模式的基本结构
以下是使用模板模式时的一个典型提示结构:
我将为你提供一个输出模板。
大写单词是我的占位符。
请用你的输出填充这些占位符。
并请保持我模板的整体格式。
我的模板是:
[你的模板内容]
关键点解析:
- “大写单词是我的占位符”:这告诉模型,模板中所有大写字母组成的单词(如
QUESTION,ANSWER)是需要它用生成内容替换的位置。 - “请保持我模板的整体格式”:这指示模型必须严格遵守你提供的格式,不能自行更改布局、标点或样式。
实践案例一:生成问答对
让我们通过一个具体例子来理解。假设我们希望ChatGPT根据一段文本生成一系列问答对,并且每个问答对都遵循统一的格式。
第一步:定义模板
我们首先给模型提供模板和指令。
提示词示例:
我将为你提供一个输出模板。
大写单词是我的占位符。
请用你的输出填充这些占位符。
并请保持我模板的整体格式。
我将在下一条提示中给你需要格式化的数据。
请使用我的模板创建20个问题。
我的模板是:
***问题***
QUESTION
***答案***
ANSWER
代码/格式说明:
***问题***和***答案***使用了Markdown语法(***表示粗斜体),这会在ChatGPT的界面中呈现为醒目的标题。QUESTION和ANSWER是全大写的占位符,模型将在这里填入具体内容。
第二步:提供数据并执行
接下来,我们向模型提供一段关于“帕劳印第安人”的维基百科文本。模型会分析这段文本,提取信息,并生成20个符合模板格式的问答对。
输出示例:
***问题***
谁是最早的帕劳印第安人?
***答案***
帕劳印第安人是史前时期居住在现在美国西南部地区的古代民族。
模型成功地重复使用模板20次,每次都用新的问题和答案填充了 QUESTION 和 ANSWER 占位符。
实践案例二:包含复杂指令的占位符
模板模式的强大之处在于,占位符不仅可以指示“放什么”,还可以规定“怎么放”。占位符本身可以包含复杂的指令。
提示词示例:
我将为你提供一个输出模板。
大写单词是我的占位符。
请用你的输出填充这些占位符。
并请保持我模板的整体格式。
我的模板是:
# 姓名
NAME
## 执行摘要
EXECUTIVE_SUMMARY。执行摘要应为一句话总结。
## 完整描述
FULL_DESCRIPTION。完整描述应为一个段落的总结。
关键点解析:
#和##是Markdown的标题语法。NAME、EXECUTIVE_SUMMARY、FULL_DESCRIPTION是占位符。- 在
EXECUTIVE_SUMMARY和FULL_DESCRIPTION后面,我们直接附加了约束条件:“应为一句话总结”和“应为一个段落的总结”。
执行结果:
当我们向模型提供一段关于范德堡大学历史的文本后,它会:
- 从文本中识别出相关人物。
- 为每个人物生成一个一句话的执行摘要。
- 为每个人物生成一个一个段落的完整描述。
- 将所有内容严格按照
#姓名、##执行摘要、##完整描述的标题格式进行组织。
这展示了模板模式如何将信息提取、内容总结和格式控制三者结合在一个简单的指令中。
模板模式的优势总结
本节课中我们一起学习了模板模式的应用。总结其核心优势如下:
以下是模板模式的主要优点:
- 格式可控:确保输出完全符合你需要的布局和样式。
- 指令集成:占位符内可嵌入复杂指令(如“一句话总结”、“仅考虑1800年以前的经历”),指导模型如何生成内容。
- 高效处理:自动完成从大量信息中提取、归纳并格式化数据的任务,节省大量人工时间。
- 灵活通用:适用于生成报告、摘要、列表、问答等多种结构化内容。
通过熟练运用模板模式,你可以将ChatGPT变成一个高效、听话的“内容组装助手”,精准地获得你想要的任何格式的信息输出。
053:元语言创建模式 🧠
在本节课中,我们将学习一种名为“元语言创建模式”的高级提示工程技巧。该模式的核心是教会大型语言模型理解并使用我们自定义的、更简洁的“语言”或“速记符号”进行交流,从而提升交互效率和精确性。
概述
使用完整的英语或其他语言的句子向大型语言模型提供输入,并非总是最简便的方式。在现实世界中,我们经常使用专门的“语言”来描述特定领域。例如,数学有其专属符号语言,我们做笔记时也会使用速记法。这些自定义语言能以比完整句子更简洁的方式捕捉信息。当然,使用这类语言的前提是交流双方都理解其含义。
上一节我们探讨了如何通过清晰的指令引导模型。本节中,我们将学习如何为模型“创造”一门新语言,并与之用这门语言进行高效沟通。
元语言创建模式详解
该模式分为两个核心步骤:
- 定义语言:向模型描述新语言或速记符号的含义。
- 使用语言:使用定义好的新语言与模型进行对话。
以下是该模式的应用示例。我们将创建一个旅行规划应用。
步骤一:定义速记语言
首先,我们给出一个基础提示,说明应用的功能:
我将描述我的旅行路线,你将列出我途经地点的有趣活动。我会告诉你我在每个地点停留的天数,你将列出可能的行程安排。
接着,我们引入并定义自己的速记符号,这是元语言创建模式的关键:
为描述我的路线,我将使用一种速记符号。
当我说“Nashville, 3 -> Memphis, 2”时,
我的意思是:我的路线将从纳什维尔前往孟菲斯,我将在纳什维尔停留3天,在孟菲斯停留2天。
请注意:这里我们采用了一种类似“少样本示例”的方法。我们向模型展示了一个速记符号的示例(Nashville, 3 -> Memphis, 2),并紧接着提供了其含义解释(“我的意思是...”)。这相当于在教模型如何“翻译”我们的新语言。
这种速记符号比完整的英文句子密度更高、更简洁。Nashville, 3 -> Memphis, 2 这一短句等价于一段更长的完整描述。
步骤二:使用新语言进行交互
定义好语言后,模型便理解了我们的规则。现在,我们可以直接使用速记符号与它对话。
例如,输入:
Nashville, 0 -> Dallas, 1 -> Granbury, Texas, 4
模型会正确理解并回应:
既然你提到不会在纳什维尔停留,我将专注于为你提供在达拉斯停留1天以及在德克萨斯州格兰伯里停留4天的有趣活动和可能行程。
随后,模型会分别为达拉斯(1天)和格兰伯里(4天)生成详细的行程计划。
处理更复杂的路线
该模式的优势在处理复杂信息时尤为明显。例如,输入更长的路线:
Nashville -> Fairhope, Alabama, 3 -> Gulf Shores, Alabama, 1 -> Mentone, Alabama, 1
如果用完整句子描述这条包含多个地点和天数的路线会非常冗长。但通过我们预先定义的速记语言,模型能准确解析这个“复杂字符串”,并依次为费尔霍普(3天)、格尔夫海岸(1天)和门通(1天)生成对应的行程安排。
模式的优势与应用场景
你可以想象,这是一种非常有用的能力。它的优势包括:
- 提升效率:为频繁执行的任务开发速记法,可以节省大量输入时间和精力。
- 提高精确性与一致性:通过预先精确定义符号含义,可以减少表达时的歧义和可变性。在一个组织内部,可以定义统一的语言来描述特定类型的信息,确保所有成员以一致的方式输入数据,从而使模型基于这些信息的推理更加可靠。
- 约束输入格式:如果每个人都用自己随意的英文短语和详细程度来描述信息,可能无法从提示中获得理想的结果。拥有自定义语言或速记法,可以帮助约束信息定义和表达的方式,从而有望帮助模型进行更好的推理。
总结
本节课我们一起学习了元语言创建模式。我们了解到,可以通过向大型语言模型提供“示例-含义”对来教会它理解我们自定义的简洁符号或语言。掌握这一模式后,你可以为特定任务设计高效的“交流协议”,从而在与AI协作时实现更快速、更精确、更一致的沟通。
054:配方模式 🧩
在本节课中,我们将要学习“配方模式”。这是一种利用大型语言模型(如ChatGPT)来帮助我们填补知识或流程中空白的方法。当我们知道解决问题所需的部分步骤或信息,但不确定完整方案时,配方模式尤其有用。
上一节我们介绍了如何创建自定义语言与模型交互。本节中,我们来看看如何将已知的“配方”片段交给模型,让它帮助我们补全缺失的部分。
配方模式的核心概念
有时,在处理大型语言模型时,我们已知解决方案的一部分。我们有一个问题,并且知道解决方案中需要涉及的一些步骤或信息片段,但我们不知道完整的解决方案。我们需要大型语言模型帮助我们填补空白,将缺失的步骤组合起来,最终完成这个“配方”。模型会根据我们提供的“食材”(即已知信息),补全烹饪这道“菜肴”所需的所有细节步骤。
配方模式就是用于实现这一目标的模式。我们向大型语言模型提供我们试图达成的目标,以及我们已知的、在创建整体解决方案(即“配方”)过程中必须涉及的部分步骤。我们将提供所需内容的一部分,并要求模型补全其余部分。这实质上是让大型语言模型帮助我们在一个流程或一系列必要步骤的知识中填补空白。
配方模式非常实用。同时,我将向大家展示,我们用来描述“空白”和已知流程部分的直观简写方式(例如“...”),实际上是像ChatGPT这样的大型语言模型能够理解的语言。
配方模式应用示例
让我们看一个具体的例子。我们将为我们的旅行规划应用添加一个功能。
以下是我们的指令:
我将告诉你我的起点和目的地,你需要为我提供一个完整的停留点列表,包括起点和目的地之间的停留地点。
请注意,我们在这里提供的是一个不完整的“配方”。我们说明了起点和终点,但需要知道中间应该有什么。模型回顾了我们之前从纳什维尔到亚特兰大的例子(或者自己创建了一个),并注意到途中会经过查塔努加(从纳什维尔开车到亚特兰大的确如此)。它建议了一些可以在查塔努加进行的活动,比如参观田纳西水族馆或瞭望山。
结合元语言创建模式与配方模式
有趣的地方在于,回想之前的旅行规划应用,我使用元语言创建模式教会了模型我自己的旅行描述语言。现在,我将结合元语言创建模式和配方模式来做一些更有趣的事情。
我将输入以下内容:
Nashville,0 ... -> ... -> Fairhope, Alabama2
我在这里向模型传达的意思是:我从纳什维尔出发,前往阿拉巴马州的费尔霍普。中间的“...”表示我希望你补全它,告诉我中途应该在哪里停留。我通过两个“...”表示我愿意在中途停留两次,但我不知道具体地点。请你为我填充这个从纳什维尔到费尔霍普、包含两次中途停留的“配方”。
模型理解了这一点。“...”显然是我们表达未知事物的自然方式,模型理解并填充了配方。它回复说:我们从田纳西州纳什维尔开始,根据您的要求,停留时间为0天(我住在这里,所以我的旅行通常不从在纳什维尔停留开始)。然后,它为我们填充了两个停留点:阿拉巴马州的伯明翰和蒙哥马利。如果走最直接的路线,这两个城市确实位于纳什维尔和费尔霍普之间。终点是阿拉巴马州的费尔霍普。
可以看到,模型基本理解了我们设定的约束。我们使用了自定义语言:Nashville,0 -> 定义了起点,然后使用 ... 表示这是我们不知道的空白,是模板或配方中的空缺,需要模型填充。接着是 -> ... ->,表示另一个需要填充的空白。最后是 Fairhope, Alabama。我们在这里使用配方模式,让ChatGPT或其他大型语言模型来完成我们的请求。
探索更模糊的配方
如果我们再次尝试,输入更模糊的指令,看看模型如何解读。例如:
LA,1 ............... New York,3
现在,模型开始规划行程:从洛杉矶开始(1天),然后前往拉斯维加斯、大峡谷、圣达菲等。我很好奇它会安排多少个停留点。请注意,当我在这里使用一连串的“.......”时,我得到的中途停留点超过了四个。因为我表达得非常不确定。我没有使用“... -> ... ->”这样明确的结构,而是用了一大串点,这更加模糊不定。这正是我想做的有趣尝试:我从洛杉矶去纽约,中途会有很多停留,但我不知道应该是哪些,请为我规划行程。我说明了在洛杉矶和纽约的停留时间。
模型解读了我配方中的缺失部分。它可能也知道我需要相当多的中途停留,这将是一次从洛杉矶到纽约的悠闲自驾游。于是,它填充了许多沿途可能停留的地点,以便让我在从洛杉矶到纽约的长途度假自驾游中拥有一段有趣的旅程。
配方模式总结
本节课中我们一起学习了配方模式的工作原理。
- 给出目标与已知部分:你向大型语言模型提供你试图达成的目标,以及你已知的、必须融入解决方案的片段或步骤及其大致位置。
- 标记空白并请求补全:你可以使用省略号(
...)或其他方式来表示你不知道具体内容、希望模型填充的位置。 - 模型完成配方:模型会运用配方模式,为你补全整个“配方”。
这种方法能有效利用模型的推理和知识生成能力,将我们零散的想法整合成完整、可执行的方案。
055:替代方法模式 🧠
在本节课中,我们将学习一种名为“替代方法模式”的提示工程技巧。这种模式的核心是利用大型语言模型(如ChatGPT)为一个特定问题或任务,快速生成多种不同的解决方案或思路,类似于进行头脑风暴。我们将通过具体示例来理解其工作原理和应用方式。
概述:什么是替代方法模式?
替代方法模式的核心思想是:在特定范围内,要求大型语言模型始终为解决问题或完成任务提供不同的替代方案。其目的并非要求模型一次性给出完美答案,而是激发多样化的思路。就像团队头脑风暴一样,产生的想法可能很棒,也可能不切实际,但这个过程本身有助于更全面地思考问题,从而找到最佳解决方案。
大型语言模型在训练过程中学习了海量文本,其中包含对各种问题及其多种解决方法的讨论。因此,它可以借鉴这些知识,为我们提供可能从未想过的全新视角,甚至能综合创造出针对新问题的潜在解决方案。
应用示例一:生成判断闰年的提示词
上一节我们介绍了替代方法模式的基本概念,本节中我们来看看它的具体应用。首先,我们尝试让ChatGPT为一个具体任务——判断给定日期是否为闰年——生成多种不同的提示词。
我们给模型的指令是:“从现在开始,如果存在完成同一件事的替代方法,请列出最佳的替代方案。比较和对比这些替代方案,并询问我想使用哪一种。”
以下是具体的任务描述:
“为ChatGPT编写几个提示词,以解决以下任务:使用少量示例(few-shot examples)来判断一个格式为‘年-月-日’的日期是否为闰年。输出应为‘[年份]是闰年’或‘[年份]不是闰年’。”
模型生成了两种主要方法:
方法一:直接提问格式
在这种方法中,我们直接询问ChatGPT某个给定日期是否为闰年,并提供了少量示例。
提示词示例:日期:2020-02-29。这是闰年吗?是,2020是闰年。
日期:2021-02-28。这是闰年吗?不,2021不是闰年。
日期:2000-01-01。这是闰年吗?是,2000是闰年。
现在,判断日期:2024-12-31。
方法二:对话格式
这种方法采用了更自然的对话风格来呈现少量示例。
提示词示例:用户:2020年2月29日是闰年吗?助手:是的,2020是闰年。
用户:2021年2月28日是闰年吗?助手:不,2021不是闰年。
用户:2000年1月1日是闰年吗?助手:是的,2000是闰年。
用户:2024年12月31日是闰年吗?
请注意,模型在生成时犯了一个小错误:它没有完全遵循我们要求的输出格式(将年份放在前面)。这提醒我们,必须仔细检查模型生成的提示词,确保其符合我们的具体要求。
最后,模型对两种方法进行了比较:
- 方法一更加正式和结构化,易于理解和解析,适用于需要清晰、简洁答案的场景。
- 方法二更具对话性和自然感,能提升用户参与度,适用于重视用户交互的应用。
应用示例二:总结邮件链中的问题
了解了基础应用后,我们进一步探索如何调整模式以获得更好的效果。在这个例子中,我们要求模型在列出替代方法之前,先总结任务本身。
我们修改后的指令是:“每当我要求你为我编写完成某项任务的提示词时,请先列出任务是什么,然后列出完成该任务的替代方法,最后为每种方法编写一个提示词。”
我们提出的具体任务是:“编写一个提示词,让ChatGPT能自动检测一封邮件链中的所有问题,并将每个人对每个问题的意见总结为要点,列在相应问题下方。”
模型生成了三种不同的方法:
以下是三种替代方法的核心思路:
- 直接指令法:编写提示词,指示ChatGPT首先识别邮件链中的所有问题,然后提取与每个问题相关的回复,最后将意见总结为要点。
- 角色扮演法:编写提示词,要求ChatGPT模拟一场对话,在其中扮演“总结者”的角色(这里它自发使用了“角色模式”)。
- 案例研究法:编写提示词,将邮件链呈现为一个“案例研究”,并要求ChatGPT提供包含问题及对应意见要点的总结报告。
其中,“案例研究法”是一个非常有趣且可能出乎意料的思路。这体现了大型语言模型能够从其训练数据中(例如大量的商业案例)汲取灵感,提供用户自己可能想不到的全新视角。
进阶思考:如何评估生成的方案?
在获得了多种替代方案后,一个自然的后续步骤是评估它们的优劣。一种有效的方法是使用大型语言模型来评估其自身(或其他模型)生成的输出。通常,建议在一个新的对话中进行评估,以避免模型陷入“自我肯定”的偏差。
我们可以这样提问:“编写一个提示词,用于评估多个不同的、旨在总结邮件对话中问题及各利益相关方观点的提示词。”
模型再次给出了三种评估方法:
- 直接评估法:编写提示词,向ChatGPT呈现多个提示词,并要求它评估每个提示词在总结问题和利益相关方观点方面的有效性。
- 评估者角色法:编写提示词,指示ChatGPT模拟对话,扮演“评估者”角色,由用户提供待评估的不同提示词。
- 反馈改进法:编写提示词,要求ChatGPT为每个提示词提供反馈,并给出改进建议。
这三种方法侧重点不同:第一种关注“有效性”,第二种利用“角色模式”,第三种则侧重于“迭代优化”。这为我们提供了多种工具来审视和提升最初生成的提示词。
总结
本节课我们一起学习了“替代方法模式”。我们了解到,这种模式的核心是利用大型语言模型为单一问题提供多种解决思路,其价值在于激发创造力和提供多元视角。我们通过“生成闰年判断提示词”和“总结邮件链问题”两个实例,演示了如何应用及微调此模式。最后,我们还探讨了如何使用模型本身来评估这些生成的方案。掌握这一模式,能帮助我们在面对复杂任务时,更高效地进行头脑风暴和方案设计。
056:请求输入模式 🛑
在本节课中,我们将学习一种名为“请求输入模式”的提示技巧。这种模式的核心目的是让大型语言模型在接收完我们的指令后,暂停自动生成内容,转而主动向我们提问,等待我们提供具体的输入信息。这有助于创建更可控、更聚焦的交互体验。
模式的应用场景
上一节我们介绍了如何为大型语言模型设定规则。本节中我们来看看,当规则设定完毕后,如何避免模型立即基于这些规则生成大量无关内容。
在处理复杂任务时,我们通常会在提示中描述一系列希望模型遵循的规则。这些规则将影响模型的输出,本质上是在“编程”模型的行为。然而,一个常见的挑战是:如何让模型先“听”完所有规则,而不是立刻对规则本身做出响应。
例如,在一个“翻转互动”场景中(即让模型向我们提问),如果我们直接要求模型“根据以下规则向我提问”,它可能会一次性生成10到20个问题。但我们可能只希望它先理解规则,然后等待我们给出具体主题,再提出第一个问题。
模式失效的案例
以下是“请求输入模式”未生效时可能出现的情况。让我们通过一个具体例子来理解。
在之前的视频中,我介绍过“替代方法模式”。当时它运行得非常有效,因为我实际上将其与“请求输入模式”结合使用了。现在,我将展示不结合使用时的效果。
我向模型输入了以下提示:
每当我要求你为我撰写一个提示来完成某项任务时,请列出任务内容,列出创建该任务的替代方法,然后为每种方法撰写一个提示。
我的意图是让ChatGPT为“如何向它自己提问以解决任务”这件事生成多种替代方案。然而,我移除了一个关键部分(稍后会展示)。模型的回应是:“当然。以下是完成‘整理杂乱书桌’这一任务的三项替代方法...”
问题在于:我对“整理杂乱书桌”这个任务根本不感兴趣。模型直接回应了我的初始提示(“为任务创建替代方法”),并自行编造了一个任务及其方法。这导致对话中充满了我不关心的额外内容,破坏了交互的一致性和效率。
模式的实现方法
为了解决上述问题,我们可以应用“请求输入模式”。其背后的理念非常简单。
我们只需在提示的末尾,明确指示大型语言模型向我们索要输入。具体做法如下:
在描述完所有规则或要求后,最后加上一句指令,例如:“现在,向我询问第一个任务。” 或 “请向我询问第一个想法。” 或 “你需要我为你生成一个关于什么的故事?”
这是一个让模型“刹车”并交还控制权给用户的方法。它暗示模型:不要继续生成内容,停在这里,等待我的指示。
模式的效果与总结
与所有提示模式一样,由于大型语言模型具有一定随机性,此模式并非每次都能100%生效,但其可靠性非常高。
让我们对比一下使用此模式后的输出效果。在相同的提示内容后加上“请向我询问第一个任务。”,模型的回应变为:“当然,让我们开始吧。你希望我为哪个任务创建替代方法和提示?”
这与之前生成的大段无关内容相比,输出变得极为聚焦和简洁。模型被成功“截停”,并进入了等待用户输入的理想状态。
本节课中我们一起学习了“请求输入模式”。该模式通过在提示末尾添加一句明确的请求,有效地引导大型语言模型暂停自动生成,转而主动向用户索取下一步的具体输入。这是构建结构化、可控对话流程的重要技巧。
057:组合模式 🧩
在本节课中,我们将学习如何将不同的提示模式组合起来,以构建更复杂、更强大的提示。这是实现高级提示工程的核心概念。
你可能已经注意到,我开始将不同的模式组合在一起使用。当你希望构建真正复杂的提示时,最重要的概念之一就是:你需要思考如何将多种模式相互结合,以解决你面临的问题。因此,不要只考虑“用哪个模式能解决这个问题”,而应该思考“哪些模式能解决这个问题的某些方面”,以及“如何将这些模式组合起来”。
组合模式的实例
我们已经在“请求输入”和“提供替代方案”这两个模式的结合中看到了一个例子。
“请求输入”是一个可以与许多其他模式结合使用的模式。在这个案例中,我们将其与“提供替代方案”模式结合使用。于是,我们得到了“替代方案”和“请求输入”,它们被组合在一起,构建了一个解决整体问题的提示。
在本课程剩余部分,我们将看到,构建真正复杂提示的方法就是:思考如何以有趣的方式将多种模式组合起来。
回顾与发现
现在,回想一下我在课程中介绍的一些模式及其示例。既然你了解了更多模式,你可能会发现,我在不同的示例中其实一直在组合模式。例如,在“游戏模拟”中,我可能使用了“请求输入”模式,也使用了“角色扮演”模式。由此可见,将事物组合起来有助于我们解决整体问题。
因此,当你尝试处理一个需要设计和开发的新复杂提示时,你应该思考:这个问题的基本组成部分是什么?我是否了解现有的模式,可以用来处理所有部分?如果无法处理所有部分,我能否使用模式,将其应用到尽可能多的不同部分,从而使你必须从头开始、发明新方法处理的未知部分尽可能小?
我们的目标是:尽可能多地使用已知的模式作为“路线图”来处理各个部分。这就是我们现在要做的事情。
组合的本质:更强大的“编程”
这听起来可能比实际情况更复杂,但归根结底,我们所做的仍然是在构建语言。我们仍然在使用自然语言写作,仍然在写句子、进行交流。我们只是有意识地思考语言中的模式,思考为了解决问题,应该包含哪些陈述以及如何组织这些陈述。
从某种意义上说,组合模式实际上是在进行一种更强大的“编程”。我们开始将已知的不同“程序”或“指令”组合起来,以更复杂、更精密的方式构建提示,使其拥有更强大的功能和更深的层次。
实践建议与鼓励
请不要觉得这是你做不到的事情。每个人都能做到。归根结底,请这样想:你只是在用语言描述你希望完成的事情。你仍然在用语言描述你想要实现的目标。而所有这些模式所做的,只是帮助我们思考指令中应该包含什么。
如果我们决定使用某个模式,它就为我们提供了一组需要包含的命令或陈述,以及它们的组织方式。如果我们使用另一个模式,我们又会得到另一组需要包含的陈述。很多时候,组合模式就像把每个模式的陈述放在一起,确保它们都出现在提示中那么简单。有时就是这么简单。
当然,有时会更微妙一些。我们可能需要确保某个特定的陈述出现在特定的位置。例如,对于“请求输入”模式,我们可能总是希望它出现在提示的末尾,否则效果会大打折扣。因此,虽然组合模式有时需要你思考各个部分应该放在哪里而略显棘手,但大多数时候,它就像把陈述放在一起那么简单。
总结与展望
在本节课中,我们一起学习了提示工程中的“组合模式”。我们了解到,构建强大提示的关键不在于寻找单一的模式,而在于如何将多个模式像拼图一样组合起来,共同解决复杂问题。这就像用已知的“指令块”进行更高级的编程。
随着课程继续,我鼓励你注意我如何组合多种模式来解决问题。当你在尝试用提示工程处理新任务时,也请思考如何结合使用多种模式来攻克难题。记住,你只是在用清晰的语言描述你的需求,而模式为你提供了高效组织这些语言的蓝图。
058:大纲扩展模式 📝
概述
在本节课中,我们将学习一种名为“大纲扩展模式”的提示工程技巧。这种模式旨在帮助我们在大型语言模型存在输入输出限制的情况下,通过构建和扩展大纲来分步创建复杂、庞大的内容,并确保所有部分能够无缝地组合在一起。
大型语言模型存在固有的限制。这些限制主要体现在两个方面:一是我们能够提供给模型的输入(即提示)大小或对话长度是有限的;二是模型单次能够生成的输出量也是有限的。尽管未来这些模型的能力会不断增强,但每个人在可扩展性上仍可能面临一些限制。
为了应对这些限制,我们通常采用分步生成解决方案的策略。例如,你无法直接要求ChatGPT生成一整本书,也无法一次性输入数万页内容并要求它给出答案。因此,我们需要一种方法,能够将大任务分解为小块来处理,同时又能将所有小块重新组合起来。
大纲扩展模式的核心思想
上一节我们介绍了分步处理的必要性,本节中我们来看看大纲扩展模式如何具体实现这一目标。
一种有效的方法是,先为我们想要构建的内容创建一个大纲。我们可以将大纲细化到所需的粒度级别,然后逐一填充每个部分。这样,我们就能分步生成各个独立的部分,并且清楚地知道它们在整个结构中的位置。这种方法本质上是在制定一个计划。
这种基于大纲的方法适用于多种场景,无论是撰写文本还是开发软件,只要该任务能够被组织成类似大纲的结构即可。一旦我们生成了符合大纲某个部分的内容,就可以继续处理它。
大纲为何有效?
大纲之所以成为与ChatGPT等工具协作构建大型项目的得力助手,原因在于其灵活性。我们可以随时将大纲的特定部分复制并粘贴到新的提示中,从而为大型语言模型提供生成后续内容所需的上下文。
例如,我们可以先生成一个大纲,然后复制其中一部分到提示中,并指示模型:“在这个上下文中(即大纲的当前位置),请填充此部分的内容。不要重复大纲中之前已涵盖的任何信息。” 我们甚至可以要求模型在需要时引用大纲的其他部分,或为后续将讨论的主题提供前瞻性引用。对于软件或其他复杂项目的构建,也可以采用类似的方法。
当然,这种方法适用于那些能够被清晰表达为大纲或计划的结构。如果某个问题的各个部分相互交叉、难以用大纲表示,那么这种方法可能就不适用。但对于许多问题而言,以大纲形式构建并利用剪切粘贴来提供上下文,是一种非常强大的策略。
构建大纲扩展模式
接下来,我们将具体构建并使用大纲扩展模式。以下是我们给模型的指令:
扮演大纲扩展器的角色。
根据我提供的输入,生成一个要点大纲。
然后,询问我应该扩展哪个要点。
为我选择的要点创建一个新的大纲。
最后,询问我接下来要扩展哪个要点。
请注意,这个提示融合了多种模式:
- 角色扮演模式:
扮演大纲扩展器的角色。 - 尾部生成模式:要求模型在生成后主动询问下一步。
- 请求输入模式:引导交互继续进行。
实践示例
当我们输入上述指令后,模型会表示同意。接着,我们给出初始主题:“让我们为‘撰写有效的ChatGPT提示’写一个大纲。”
模型生成了一个初步大纲,例如:
- ChatGPT简介
- 理解提示的重要性
- 撰写有效提示的技巧
- ...
然后,模型会询问:“您希望我扩展哪个要点?”
假设我们选择扩展第3点“撰写有效提示的技巧”。模型会基于此生成一个更详细的新大纲,例如:
3.1 明确具体
3.2 尝试不同的提示风格
3.3 提供上下文
3.4 迭代与改进
3.5 设定语气和风格
接着,模型会再次询问下一步。我们可以选择继续扩展,例如说“3.2”,模型就会对“尝试不同的提示风格”进行更深入的细化。
通过这种方式,我们可以快速创建并不断细化一个大纲,直到达到所需的细节水平。由于采用了层级分明的大纲结构,所有独立部分如何组装在一起变得一目了然。例如,我们知道3.1属于第3点之下,这种结构是自描述的。
确保内容的连贯性
虽然大纲模式便于组装,但我们仍需思考一个核心挑战:如何确保每个独立生成的部分在内容上也是连贯和一致的?
当对话变得很长,模型可能忘记了之前大纲部分的内容时,我们需要主动为其提供上下文。例如,在要求扩展“3.2”之前,我们可以将第1点的内容也粘贴到提示中,这样模型在生成3.2时就能考虑到整体的早期结构。同样,如果希望3.2与后续部分保持连贯,也可能需要提供后续大纲的概要。
因此,在使用大纲扩展模式时,我们必须时刻考虑:模型是否拥有足够的上下文,以确保生成的每个部分不仅结构上匹配,内容上也与整体保持 cohesive(连贯一致)?这是我们在通过分块构建内容时,始终需要面对和解决的根本性挑战。
模式的灵活性与总结
最后,我们可以看到这种模式的灵活性。我们可以在大纲的不同层级间自由移动:可以从顶层开始,也可以深入到某个具体细节进行扩展,然后再回到另一个要点继续细化。这使我们能够保持对整体蓝图的把握,并以此为指导来构建各个独立部分,同时确保它们能够被组装起来。
本节课中我们一起学习了大纲扩展模式。我们了解到,为了克服大型语言模型的输入输出限制,我们可以:
- 先构建一个层级式大纲作为蓝图。
- 通过交互,逐步扩展和细化大纲的各个部分。
- 利用大纲结构本身来明确各部分如何组装。
- 在生成每个部分时,需主动管理提供给模型的上下文,以确保内容的整体连贯性。
这是一种将复杂任务分解、分步解决并重新整合的有效策略。
059:菜单操作模式 🍔
在本节课中,我们将学习一种名为“菜单操作模式”的提示工程技术。这种模式允许我们在与大型语言模型的对话中,定义并重复使用一系列预设的“动作”,就像在软件菜单中选择功能一样,从而提升交互效率和一致性。
当我们使用计算机软件时,一个非常有用的特性是程序通常有一个包含一系列可执行操作的菜单。例如,文字处理软件中的“文件”菜单允许你执行“新建文件”或“保存文件”的操作。另一个菜单可能允许你“查找和替换”文本。这种拥有菜单和可运行操作的概念非常实用。
有时,在进行提示工程时,尤其是在进行长对话时,在提示中开发类似的功能会很有帮助。其核心思想是,在对话开始时,就定义好一套可以运行的动作集合。这样,我们就不必在对话中反复输入冗长的提示,而是可以将某些对用户有帮助的操作固化下来。
菜单操作模式的工作原理
上一节我们介绍了菜单操作模式的基本概念,本节中我们来看看如何具体实现它。这种模式让我们能在提示中获得类似软件菜单的行为。我们将开发一个菜单,它是一系列可以运行的动作。每个动作本质上就是一个提示,是一组我们给大型语言模型的指令,用于在对话的特定时刻执行某项任务。
以下是其工作方式。我们描述需要输入什么内容来触发一个动作。
例如,我定义:每当输入“write <bullet_point> <paragraphs>”时。
让我稍后详细解释这一点,所以如果现在看起来不太明白,请不要担心。在这个定义中:
write是一个关键词。<bullet_point>和<paragraphs>是占位符。
我实际上是在说:我将输入 write,然后输入一个代表要点的占位符,再输入一个代表段落数量的占位符。模型将为我指定的要点撰写内容,并按照我要求的段落数量生成文本。这样,我就创建了一个“撰写文本”的动作。
我还可以保留之前的动作。例如,我之前可能有一个“扩展大纲”的动作,其触发方式是:每当输入“<bullet_point>”时。这意味着,如果我仅输入一个像 3.5.2 这样的大纲编号,模型就知道要扩展该大纲点。
通过这种方式,我定义了一个菜单。现在我有两个动作:我可以扩展我的大纲,或者可以为大纲的某部分撰写文本。这为我的大纲扩展器赋予了更复杂的能力,我将其变成了一个可以交互的“程序”。
菜单操作模式的应用示例
以下是该模式的一个具体应用示例。假设我们正在处理一个关于写作的大纲。
首先,我运行“撰写文本”动作。我输入:write 3.5.3 2。
- 这表示:为大纲中编号为
3.5.3的要点撰写内容,并写两段文字。 - 模型会找到大纲中的
3.5.3要点(例如“尝试不同的语气和风格变化”),然后为其生成两段文本。
这样,我就创建并运行了一个定义好的动作。
接着,我可以运行“扩展大纲”动作。我输入:expand 3.5.2。
- 模型知道这是一个不同的动作,因此它会去扩展
3.5.2这个要点,生成其子要点。
然后,我再次运行“撰写文本”动作。我输入:text 3.5.2.3 1。
- 这里我故意打错了关键词(用了
text而非write),但模型基于模式智能地推断出我可能想执行的是write动作。 - 于是,它找到要点
3.5.2.3并为其撰写了一段文本。
这个例子展示了菜单操作模式的灵活性。我创建了一个复杂的交互程序,可以随时扩展大纲或为特定部分生成文本,而无需重复输入冗长的指令,只需使用定义好的简单格式即可。
菜单操作模式的优势与用途
以下是菜单操作模式的主要优势和应用场景:
- 提升个人效率:如果你反复使用提示执行相同任务,使用菜单操作模式定义一组常用动作会非常有帮助。你可以快速迭代,使用这些预设动作来处理输出内容,本质上是在对话中构建了自己的程序。
- 促进团队协作与知识共享:在一个组织内,多人可能执行相同的工作。他们可以共享这些定义好的动作来自动化不同任务。这有助于提高工作效率,并促进有用的提示在团队间分享。
- 固化最佳实践:你无需担心每次都能精确地措辞。一旦一个动作被编写并在菜单中生效,你就可以反复使用它。组织可以共享一套通用的菜单动作,将最佳提示措辞和操作流程固化下来,从而实现知识的共享和重用。
- 集成到应用场景:你还可以设想将这些动作嵌入到类似客服门户的“根提示”中。你可以为用户提供一些可运行的动作来查询账户信息。他们可以用自然语言提问,但通过描述“以下是一些您可以运行的操作”,可以获得更精准、更高效的服务。
本节课中,我们一起学习了菜单操作模式。这是一种非常强大的模式,它允许我们轻松地重用已有的提示和动作,与他人分享,并建立提示知识库,从而让我们成为更高效的提示工程师。🍔
060:事实核查清单模式 📋
在本节课中,我们将学习如何利用“事实核查清单”提示模式,来识别和验证大型语言模型(如ChatGPT)生成内容中的关键事实,从而确保输出信息的准确性。
我们经常在新闻中听到,这些大型语言模型会犯各种错误,甚至可能对用户撒谎。它们通常不会首先承认错误,反而可能坚持自己是对的,并产生奇怪的输出。这从根本上误解了这类工具的本质。它们的设计初衷不一定是用来回答问题的。虽然有时它们能非常准确地回答问题,但有时它们产生的看似答案的内容,实际上并不准确。
因此,只要我们理解它们本质上是用于生成文本,并且这些生成的文本有时能正确回答我们的问题,有时则会出错,我们就能有效地使用这些工具。我们可以通过特定的提示词,来辅助识别工具输出中包含哪些事实,以及哪些事实是真正重要的,从而跟进并核查它们。
当我们处理这些工具的输出时,有时会遇到一个问题:因为输出看起来非常逼真、人性化、有说服力,我们便假定它是真实的。当它生成大量文本时,我们很难发现其中蕴含的所有不同假设和事实,而这些恰恰是我们需要跟进和核查的。对于从这些模型获得的任何信息,你都需要对其负责,确保已彻底核查并真正相信它。
那么,我们该如何支持这项确保输出正确且符合事实的工作呢?我们可以使用“事实核查清单”模式来帮助我们找出输出中实际包含且需要跟进的事实。接下来,我将给出一个示例。
我使用了我们之前开发的提纲扩展工具。如果你还记得,我们使用了多种模式,包括菜单操作模式和提纲扩展模式。该工具有多项功能,其中之一是扩展提纲,我们还增加了为提纲中任何要点生成文本的能力,并且可以一次为多个项目生成。我们为此设计了一整套菜单系统。
现在,我们希望实现的是:当我们为提纲的某部分生成文本时,我希望知道需要跟进和核查哪些内容,以确保不会呈现不准确的信息。观察这个例子,我们可以通过“事实核查清单”模式来实现。😊
我们对大型语言模型设定新的指令:“每当你输出文本时,请生成一组包含在输出中的事实。这组事实应置于输出末尾(你可以放在任何位置,这里我放在末尾)。这组事实应是基础性事实,如果其中任何一条不正确,都可能损害整个输出的真实性。”
这样,我就为模型设定了一套新指令:每次生成文本时,都给我对应的、文本所依赖的事实集合,以便我能够跟进核查。模型表示理解。
现在,我将使用我们编写的提纲扩展程序,让它为第3.5.2.2节(“选择合适风格的考虑因素”)撰写一个段落。它为我生成了整段文本。
然后,它在这里生成了一组基础事实。这些就是段落中包含的事实。例如:
- 写作风格可以从技术性到创造性再到指导性。
- 指导性内容可能采用清晰、逐步的风格。
我选择让它撰写的这个段落包含许多不同的事实,它们可能正确,也可能不正确。但现在我不必过于担心如何从文本中提取和审视这些事实,因为我有了一个需要跟进的清单。
至少,我需要查看这个列表并跟进这些项目,或者根据我自己的知识进行目视检查。这设定了一个最低标准:至少这些事项我需要去跟进。它在这里向我标记出一些需要核查的内容。
我还可以做的是,将这个列表与上方的段落进行比较。任何使用这类工具的人都可以对比:下面是事实列表,上面是实际文本。这个事实列表完整吗?上面的文本中是否有陈述未出现在下面的列表中?如果有,那些可能也是我需要跟进核查的事项。
通过检查和对比这两个列表,我们可以判断它是否真正、完整地提取了所有重要事实。这个过程本身就会促使我们思考:这段文字到底在说什么?其中的基础事实是什么?仅仅是进行事实与生成文本对比的这个动作,就能帮助我们进入思考其输出正确性的模式。
接下来,我有了一个最低标准:至少我需要去核查生成的事实列表,并跟进确保它们是正确的。如果其中任何一条不正确,那么上方的文本很可能存在错误。然后,如果通过对比我发现上方文本中有某些内容未出现在事实列表中,我可以将其添加到我的核查清单中。
因此,这是一个可以帮助我们进入“核查输出事实”模式的工具。输出可能是正确的,但只有在我们完全跟进核查后才能确定。这个模式为我们提供了工具:第一,让我们知道至少有哪些事项需要跟进;第二,为我们提供了一个可以将其与生成内容进行比较的工具,以判断我需要跟进的最低事项清单是否足够,或者文本中是否还有其他我应该思考或跟进的内容。
它并不能保证我们一定能得到正确答案。即使我们跟进了这些事实,可能仍存在一些隐藏的假设,我们可能仍会认为它是准确的,而实际上并非如此。但这远比我们只是阅读一堆没有任何支持或刺激来推动事实核查过程的文本要好得多。
总结
本节课中,我们一起学习了“事实核查清单”模式。该模式帮助我们进入核查输出、检验其真实性的状态,并提供了一种格式,使我们更容易提取信息、对比事实集合,并利用外部资源来验证其真实性。通过设定指令让模型输出伴随的事实清单,我们能够更系统、更有效地管理和验证AI生成内容的准确性。
061:尾部生成模式 🎯
在本节课中,我们将要学习一种称为“尾部生成模式”的提示工程技术。这种模式能有效帮助大型语言模型在长对话中记住核心任务和规则,从而维持对话的连贯性和准确性。
概述
当我们与大型语言模型进行长对话时,有时会遇到一个挑战:模型可能会忘记我们设定的“游戏规则”或正在执行的核心任务。为了解决这个问题,我们可以使用“尾部生成模式”。其核心思想是,在模型每次输出的末尾,都让它生成一段特定的“尾部”文本。这段文本的作用是提醒模型当前对话的上下文、规则或目标,从而帮助它在后续交互中保持正确的方向。
模式原理与应用
上一节我们介绍了多种提示模式,本节中我们来看看如何将尾部生成模式与其他模式结合使用。
尾部生成模式的核心是在模型输出的结尾附加一段固定或特定格式的文本。这段文本可以:
- 重新陈述任务规则。
- 请求下一步的输入。
- 总结当前对话状态。
一个典型的应用是将其与“替代方案模式”和“请求输入模式”结合。例如,当你要求模型为某个任务生成多个提示方案时,你可以在指令末尾添加:“当你完成后,请询问我下一个需要为其创建替代方案的任务。”
以下是该指令的关键部分解析:
当你完成后: 指定了尾部生成的时间点。请询问我下一个...任务: 应用了“请求输入模式”,引导对话继续。创建替代方案: 重申了核心规则(即“替代方案模式”),提醒模型它的核心任务。
实战演示
让我们通过一个具体例子来看它是如何工作的。
假设我们给模型的初始指令是:
你是一个提示工程助手。我将给你一个任务,请你为该任务生成多个不同的提示方案。当你完成后,请询问我下一个需要为其创建替代提示方案的任务。
第一轮交互
- 用户输入: “写一个提示,让ChatGPT能自动从一系列邮件中检测问题,并以要点形式总结每个人对每个问题的看法。”
- 模型输出:
- 生成提示方案A...
- 生成提示方案B...
- ...
尾部: “请告诉我你是否还有其他任务需要我为其编写提示并创建替代方案。”
第二轮交互
- 用户输入: “写一个提示来评估不同的问题总结提示。”
- 模型输出:
- 生成评估提示方案A...
- ...
尾部: “请告诉我你是否还有其他任务需要我为其编写提示并创建替代方案。”
可以看到,每次模型输出后,其生成的尾部都重复了核心指令(“编写提示并创建替代方案”)并主动请求下一个输入。这就像一个内置的“记忆刷新”机制。
优势与适用场景
如果没有这个尾部,在多次来回对话后,模型可能会忘记它应该生成“多个”方案,或者忘记整个对话的初始目标。通过持续在输出末尾重新引入游戏规则,每次我们提交新输入时,模型都能获得它完成任务所需的上下文。
尾部生成方法在以下场景中非常有用:
- 长程编程式对话: 当你先设定一系列规则,然后进行大量交互时。
- 需要维持特定上下文: 任何需要模型不断记住某个关键信息(不一定是规则)的对话。
你可以自由设计尾部的内容,它可以是:
- 对下一步输入的请求。
- 对规则的重述。
- 对当前对话状态的简短总结。
本质上,它是我们附加在模型输出上的一个“小提示”或“小尾巴”,用来提醒模型:“我们一直在讨论什么,在开始下一个任务前,请记住这一点。”
总结
本节课中我们一起学习了尾部生成模式。这种模式通过在大型语言模型的每次输出末尾附加一段特定文本,来持续提醒模型对话的规则、任务或上下文。它能有效延长对话的“记忆”周期,确保在复杂的多轮交互中,模型不会偏离最初设定的目标。你可以将其视为一种简单而强大的对话状态维护工具。
062:语义过滤模式 🧠
在本节课中,我们将学习大型语言模型(LLM)的一个核心应用模式——语义过滤。这种模式能够理解文本的含义,并根据我们设定的语义规则,从文本中移除或保留特定信息。
大型语言模型非常擅长处理文本和理解语言模式。很多时候,文本分析工作非常困难,因为过去我们需要人工审阅才能进行高质量的分析。如今,我们可以利用大型语言模型来完成这项任务。处理和操控文本是大型语言模型的真正优势之一。
上一节我们介绍了LLM处理文本的基本能力,本节中我们来看看一种具体的应用模式。
什么是语义过滤? 🔍
语义过滤本质上是一种过滤器,它可以接收文本,并根据文本的含义或我们指定的特定属性,从中移除信息或仅保留符合条件的信息。
这种模式在多种场景下都非常有用。接下来,我将展示一个案例:对文本进行过滤,移除我们希望删除的特定内容。这些内容可能是某种机密信息、非公开内容、冗余信息等。这是一个用于处理和操控文本的实用模式。
示例一:过滤日期 📅
让我们看一个语义过滤的简单示例。
我将创建一个复杂的过滤器,其任务是:接收信息,移除所有日期,并为了修复因移除日期而可能造成的语句不通顺问题,对文本进行最小程度的改写。
以下是使用的提示词示例:
filter this information to remove all dates and rewrite the text as little as possible to fix issues caused by the date removals.
然后,我粘贴了一段来自维基百科的关于范德堡大学的介绍文本,其中包含许多日期。
通过使用“filter this information”这样的指令,我们清晰地表明意图是进行过滤操作——保留主体内容但移除特定部分,而非创造新内容。语义过滤模式的核心是:指示模型进行过滤,并提供基于语义的规则,即我们希望移除的信息的含义或目的。
模型执行后,会重写所有文本。可以看到,它做得很好,移除了所有明确的日期。不过,我注意到可能需要重新思考如何定义“日期”。例如,原文是“founded in 1873”,模型将其改写为“founded in the 19th century”。这表明模型对“日期”进行了字面理解(具体的年月日),并进行了语义转换。这个例子展示了模型的能力:它理解文本,理解什么是日期,将其移除,并在此过程中进行了一定的改写。
示例二:过滤敏感医疗信息 🏥
现在,让我们看一个更能体现语义理解的、更有趣的例子。
我将要求模型过滤以下信息,移除任何可能帮助他人推断出患者患有糖尿病的信息。首先,请解释你将移除哪些信息以及这些信息如何帮助推断;然后,提供过滤后的信息。
以下是使用的提示词示例:
filter the information below to remove any information that would help someone figure out that the patient has diabetes. First, explain what information you're going to remove and how it might help someone figure out that the patient has diabetes, then provide the filtered information.
我提供了一份虚构的病历,描述了患者Jane Doe,包含一系列症状、现病史、既往史、用药史等信息。
模型随后分析了需要移除的内容:
- 主诉:“口渴加重和疲劳”应被移除,因为多饮(口渴加重)是糖尿病的常见症状。
- 现病史:提及“口渴加重”和“未检查血糖水平”的部分应被移除,因为它们与糖尿病症状和管理相关。
- 既往史:“2型糖尿病”应被移除,因为它直接表明患者患有糖尿病。
- 用药:“二甲双胍1000毫克,每日两次”应被移除,因为二甲双胍是常用于治疗糖尿病的药物。
这个过程应用了语义规则:我希望过滤掉可能泄露患者患有糖尿病的信息。模型必须在一定程度上理解文本的含义,或者基于其训练数据,识别出这些与糖尿病相关的常见讨论内容。
接着,模型重写了病历。例如,主诉被改写为“患者因过去两周疲劳就诊”,现病史和用药部分也做了相应修改。这样,我们就得到了一份过滤后的病历。
语义过滤的潜力与局限 ⚖️
我们可以利用大型语言模型,通过语义过滤模式开发出强大的语义过滤器。
然而,它完美吗?并不。正如我们所看到的,它可能存在一些问题。并且正如之前讨论过的,模型的输出并非总是完全可重复的。但它可以作为一个起点,辅助人工审核流程进行二次检查,或帮助防止信息意外泄露。它是系统中的又一道检查关卡。
这是一项成本相对较低的检查,用于尝试移除额外信息。它应该是唯一的检查手段吗?不。如果我们要过滤信息,尤其是出于隐私或其他原因不希望泄露的信息,我们始终应该设置其他检查措施。因为这不会是一个完美的过滤器,它具有一定随机性,不会总是完全符合我们的预期。
但是,作为另一个流程的组成部分,作为一种辅助工具,这是一项非常强大的技术。我们可以将其与其他检查、其他类型的移除方法并行或结合使用。
本节课中,我们一起学习了语义过滤模式。我们了解到,大型语言模型能够理解文本的语义,并根据我们设定的规则(例如“移除所有日期”或“移除可能暗示疾病的信息”)对文本进行过滤和改写。这种模式在数据清洗、隐私保护、信息摘要等多种场景下具有实用价值。同时,我们也认识到,由于模型可能存在的不确定性和不完美性,它更适合作为辅助工具,与其他方法结合使用,而非唯一的解决方案。
063:课程结束致谢 😊
在本节课中,我们将对提示工程课程进行总结,并展望未来的学习与实践方向。
感谢各位参与本次提示工程课程。我希望课程中展示的各种不同示例能激发你的灵感,促使你真正尝试使用大型语言模型构建有趣的应用。
在关于大型语言模型的讨论中,我始终希望强调一点:这些语言模型的真正力量源于人类的创造力。如果你拥有创造性的想法和使用工具的创造性方法,你就能获得真正令人兴奋的输出。我们看到的许多讨论都聚焦于糟糕的输出结果,而我将其视为工具使用上的失败。你应该真正尝试创造性地使用它,构思绝佳的点子,并找到那些用其他方法难以解决的问题。
因此,我希望你能像我一样受到鼓舞,重新思考这个工具。我将其视为一个工具,它能帮助我快速将想法具象化,以我以前无法做到的、独特且更快速的方式完成任务。在我职业生涯早期,我曾是一名艺术家,我一直对在不同媒介中创作感到兴奋,无论是绘画、陶瓷还是金属。所有这些不同的媒介都有其独特的特性。在我看来,ChatGPT是另一个令人兴奋的、用于创造力的新媒介,用于构思新想法并尝试赋予它们形态,就像我在绘画或雕塑中所做的一样。因此,我希望你能满怀兴奋地去探索这个新媒介。
作为最后一点,我认为回到ChatGPT本身,听听它对课程结束时的建议总是很重要的。它提出了一些很好的观点。我让ChatGPT扮演提示工程课程的老师,感谢学生参与课程,并告诉他们接下来的步骤。以下是它的一些要点:
以下是ChatGPT建议的后续步骤:
- 实践、实践、再实践:这一点再怎么强调都不为过。许多伟大的成果都将通过你不断的实践和实验而来。尝试向ChatGPT或其他大型语言模型提问:“我能让它做这个吗?如果我能让它做这个岂不是太棒了?”很多时候,答案都是肯定的,只需要一些创造性的提示工程。所以,请务必多加练习。
- 紧跟最新研究与发展:提示工程领域发展非常迅速。如果你访问我们课程中列出的相关论文存档网站,你可以找到所有最新的更新。我希望你能关注领域动态,持续了解人们正在做出的激动人心的新发现。这是一个如此崭新的领域,每个人现在都可以站在前沿浪潮之上,我鼓励你这样做。
- 与他人协作:这是我在使用大型语言模型工作中非常享受的一点:有太多人和我一样对此感到兴奋。当我们聚在一起时,会迸发出疯狂的想法:“如果我们这样做会怎样?”“如果让它们彼此对话会是什么样子?”“如果大型语言模型相互交谈,它们会有什么不同,或者措辞会如何改变?”各种迷人的想法正是通过协作产生的,也来自于观察不同人的做法,看他们如何尝试进行提示工程。因此,我鼓励你与他人合作。
- 时刻牢记伦理道德:围绕这些模型存在许多关于伦理的讨论。我认为这非常重要,特别是作为这项技术的早期采用者,我们应该以合乎道德、恰当的方式使用它,展示其所能带来的所有益处,而非弊端。如果我们持续增加围绕这些模型的负面讨论,我们实际上是在劝阻他人,并使人们错过利用它做有趣、创造性事情的绝佳机会。所以,请务必牢记伦理道德。
我认为这是ChatGPT给出的一段很好的总结。再次衷心感谢你参与本课程。我希望你能积极参与讨论区,继续围绕本课程与社区分享你的提示和有趣的想法。我迫不及待想看到本课程的每位学员在提示工程领域取得的成就,以及你们创造的所有惊人成果。
本节课中,我们一起回顾了课程的核心精神,即创造力是发挥大型语言模型潜力的关键,并学习了由ChatGPT自身提供的四项重要后续行动建议:持续实践、关注前沿、积极协作与恪守伦理。希望你能带着这些启发,在提示工程的世界里继续探索与创造。😊

浙公网安备 33010602011771号