# 生成式人工智能的完整过时指南(MEAP)(一)

原文:zh.annas-archive.org/md5/7c375747f4c8e9ca68e177a5d44ba118

译者:飞龙

协议:CC BY-NC-SA 4.0

第一章:了解生成式人工智能基础

本章内容包括

  • 生成式 AI 的简介:在底层到底发生了什么?

  • 区分众多生成式 AI 模型

  • 回顾带领我们走向生成式 AI 革命的全球趋势

欢迎!正如广告所说,这本书已经过时了。这意味着当你打算打开它的时候,这里所写的大部分都行不通,或者已经过时到无用。现在我打赌你一定对把好钱花在这样的产品上感到有点傻。好吧,我向你保证:你买这本书的感觉可能还不如我写这本书的感觉怪异。

我们一定会开始玩乐趣的东西 - 或者至少在我刚开始写这篇文章的以前时代是有趣的东西 - 很快会到来。我们将学习生成式人工智能如何可以用于远远不止独立的 ChatGPT 提示。好奇是否能看到:

  • AI 能够阅读统计数据档案,然后获得重大的见解吗?

  • AI 如何访问互联网,从多个网站汇总数据,并利用该数据选择出真实世界的趋势?

  • AI 能够准确地总结你自己的大量基于文本的内容吗?

  • AI 模型是否可以微调以提供与您需求更匹配的回答?

  • AI 模型是否可以用于生成原创视频和音频内容?

我也很好奇。让我们来找出答案吧。

这本书将专注于使用生成式 AI 工具进行实际任务。这意味着我们将尽量减少驱动这些技术的底层理论和技术背景,并专注于有效的项目执行。期望您几乎马上就能学习到新的强大工具,并在接下来的内容中不断增加技能。

更重要的是:期望您在几乎立即就能变得更快更有效地完成任何事情。这只是部分原因,因为像 ChatGPT 这样生成所有那些“生成式 AI”东西的大型语言模型(LLM)聊天工具可以给出你提出的问题的惊人答案。但是,通过使用我将向您展示的自动化和脚本工具与 LLM 进行交互,您将很快发现这将达到一个完全不同的水平。

尽管如此,我不会撒谎:如果没有对模型温度文本注入等移动部件的逻辑至少有一定的欣赏,您可能无法从您的 AI 提示中充分发挥出 AI 的优势。我们在这里做的每个项目的每个步骤都会起作用,并且在我所展示的情境中甚至会有意义。但是,如果没有一些技术背景,自定义配置可能有时会有一些挑战。因此,我在书的附录中添加了一个完整的定义集合。

顺便说一下,即使不了解上述内容,您也可以在这些技术上有很大的发展空间,但是“GPT”的意思是:生成式预训练转换器(Generative Pre-trained Transformer)。这重要吗?实际上并不重要。

但首先,生成式人工智能究竟是什么,它是如何工作的,以及AI 模型是什么?

1.1 踏入生成式人工智能世界

好的,你进来了。接下来呢?

与现代 AI 工具聊天会让人感到欺骗性地 - 图灵测试 接近 - 就像与真正的人类交谈一样。图灵测试是由人工智能先驱艾伦·图灵三分之一世纪前制定的标准。如果人类无法可靠地区分他们刚刚与另一个人类还是机器进行了交互,那么机器就被认为已经达到了标准。

我可以明确地说,如果我没有故意发起连接,我最近与 GPT 等工具的许多交互将使我对这一点不确定。但我确实在我的描述中加入了“欺骗性”一词。因为,在现实中,这都是假的。至少在这一点上,即使是最好的 AI 模型也不是以人类方式真正智能的,而且绝对不会意识到自己的存在。这实际上只是 clever 软件与大量数据集的结合,给人以智能的印象

这是如何运作的呢?该软件使用自然语言处理来分析您的提示文本,然后在模型的训练和配置的指导下,预测最佳可能的响应。我们将在下一章更详细地讨论模型。但现在,我们要注意,“训练”包括向模型提供(几乎)整个公共互联网。所有这些内容都用于分析人类生成的文本,以便它可以使用概率计算来预测形成自己新文本的最适当方式。

对于您特定提示的初始草稿将根据预设的标准和偏好进行测试,并在最终版本显示给您之前进行迭代改进。如果您以后提出了跟进提示,LLM 将把会话中的先前交互添加到其上下文中,并重复这个过程,努力撰写自己的新响应。

正如我们在本书的其余部分中将一再看到的那样,这些相同的过程可以以快速增长的方式用于多种方式。除了文本响应外,我们已经在多模式学习方面看到了显著的进展,其中文本提示可以用于生成音频、图像、视频等等,还有谁知道什么其他的东西。

1.2 按功能和目标对 AI 模型进行分类

模型是提供特定功能和功能的软件框架。对于我们的目的,术语“模型”通常指的是设计用于理解、生成或操作人类语言的计算框架,并且通常描述为大型语言模型(LLM)。它从大量文本数据中学习模式、语义和语法,使其能够执行翻译、文本生成和问答等任务。LLM 的有效性依赖于其预测和生成连贯词序列的能力,使其成为跨多个应用领域的自然语言理解和生成的多功能工具。

LLM 是驱动特定提供商产品的引擎。因此,OpenAI 目前使用 GPT-(x),而 Google 的巴德是建立在对话应用语言模型(LaMDA)和路径语言模型 2(PaLM-2)上的。我们被告知 PaLM-2 是取代 LaMDA LLM 的 LLM - 后者主要侧重于基于文本的交互。

但事情并不是那么简单。甚至在 LLM 世界,“模型”这个词都可能有不同的含义。现在明确这一点可以帮助避免以后的麻烦。例如,根据他们自己的统计,OpenAI 拥有七个通用顶级模型,包括 GPT-3、GPT-3.5 和 GPT-4。但是,在 OpenAI 产品的上下文中,以下一些专门工具通常也被认为是模型,尽管它们实际上是利用了一个或另一个顶级模型的功能:

  • DALL-E用于从文本提示生成图像

  • Whisper,多语言语音识别模型

  • 专门设计用于优化遵守 OpenAI 使用政策的审查模型 - 以帮助确保 LLM 不被误用

  • 嵌入,一种用于衡量“两段文字之间相关性”的分类工具 - 这是 LLM 所做工作的关键要素

  • Codex,Copilot 使用的编程助手引擎 - GitHub 的人工智能工具,用于生成具有上下文意识的编程代码

但这些不应与长列表的 GPT 模型“风味”混淆,可供选择(如 code-davinci-002 或 gpt-3.5-turbo)。出于某种原因,OpenAI 也将这些都称为“模型”。虽然称这些为“模型”并不完全错误,但将它们描述为顶级 GPT 模型的专门化版本可能更准确一些。

无论你更喜欢如何称呼它们,了解它们的工作原理将是有用的。因此,让我们看看您可以选择的(当前)活动模型的每一个。即使在此列出的确切名称可能与您在深远未来(我不知道,也许是下周四)的官方网站上看到的名称有所不同,熟悉这些名称仍将提供有用的背景知识。

1.2.1 理解使用令牌

将令牌视为语言字符的单位可能会有所帮助。至少在 GPT 的宇宙中,一个令牌大致等于四个英文文本字符。有时我们对任务将消耗的令牌数量感兴趣,其他时候我们对完成任务效果最好的令牌种类感兴趣。各种模型风味之间最明显的区别是它们的最大令牌限制和其训练数据的截止日期。通常按照提示消耗的此类单位数量计费。

例如,基于 GPT-3 的模型只是在 2021 年 9 月之前的数据上进行了训练。它们不允许单个请求在提示和完成(即,响应)之间消耗超过 2049 个令牌。相比之下,更新的 GPT-4 模型将允许每个提示/完成最多使用 8192 或 32768 个令牌(标准模型允许 8192,但您可以通过有限访问 API 获得 32768)。这些限制将影响您可以整合到提示中的内容量,以及您可以从响应中期望的深度。

例如,2049 个令牌的限制意味着您的提示和响应的总内容不能超过大约 1600 个字。所以如果您的提示已经有了 1000 个字,那么剩下的空间就不多了。

然而,正如我们稍后将看到的,目前有各种工具可用于规避至少一些模型的令牌限制。

1.2.2 GPT-4 模型

目前有四个属于 GPT-4 家族的模型,尽管其中两个似乎是短期的“占位符”,将在达到某个内部公司里程碑时被弃用。两个更长久的模型是 gpt-4gpt-4-32k-0314。如果您仔细观察他们使用的命名约定,您会发现第二个模型的名称似乎表明它提供了 32,000 个令牌的限制(32k),并且它是在 2023 年 3 月 14 日发布的(0314)。

我今天早上起床时,至少到目前为止,GPT-4 仍然没有普遍发布,甚至测试版也没有在所有平台或所有国家都可用。此外,洗衣篮还没有收好,我在去浴室的路上撞到了它。

1.2.3 GPT-3.5 模型

基于 GPT-3.5 的模型有四个长期模型。除了 code-davinci-002 外,其余模型允许 4097 个令牌。单个 code-davinci-002 的提示/完成可以使用多达 8001 个令牌。让我们描述一下这些模型。

  • gpt-3.5-turbo 专为聊天(ChatGPT 类型)进行了优化,尽管它仍然是一个很好的通用模型,而且它既更强大又价格显著更低廉,比其他 GPT-3.5 模型都更便宜。

  • text-davinci-003 专注于基于语言的任务,并已经针对“一致的指令遵循”进行了优化。这指的是语言模型能够始终准确地遵循用户或提示提供的一系列指令的能力。

  • text-davinci-002 可与 text-davinci-003 相提并论,但它是使用监督式微调训练的,这是一种机器学习技术,用于改进预训练模型的性能,以使它们适应执行特定任务或使它们更适用于特定应用。

  • code-davinci-002 主要优化用于涉及编程代码补全的任务,以帮助用户解决编程问题。

1.2.4 GPT-3 模型

正如你自己注意到的那样,OpenAI 在给他们的模型命名时使用了科学技术领域伟大创新者的名字。这一点在他们为 GPT-3 使用的名称中尤为明显。

  • text-curie-001 被描述为具有能力,同时价格特别低廉。

  • text-babbage-001 也许不是一个通用工具,但是对于文本分类来说表现出色。这可能包括确定客户评论或社交媒体帖子的情感(积极、消极、中性)。这就是所谓的情感分析。

  • 对于大多数目的而言,text-ada-001 是非常快速的,但是它在简单的自然语言任务(如对话)中效果最好。

  • davinci 是一个出色的通用模型,能够处理更复杂的文本处理以更好地理解人类语言的细微差别。

  • curiedavinci 更快,更便宜。

  • babbagetext-babbage-001 被描述为相同的术语,尽管它的容量(1.25 亿个参数)远远低于 text-babbage-001 的 12 亿个参数。

  • adaada-001 被描述为相同的术语,但是与 text-ada-001 相比,其容量(4000 万个参数)要低得多(12.5 亿个参数)。

训练参数

将更多参数纳入大型语言模型(LLM)的训练中增强了其捕捉复杂语言模式和知识的能力,从而提高了性能。模型越大,对上下文的理解越好,生成的文本就越细致。所以,如果“更大更好”,为什么不所有模型都使用 100 亿个参数?这是因为这需要大量的计算资源、数据和培训成本。

如果所有这些模型用例之间的区别让你感觉有些抽象,不要担心。事实上,所有现有的模型可能在你投入的几乎所有任务上表现出色。重要的是要知道专业化存在,并且如果你有特别前沿的需求,你可能需要寻找合适的模型。

1.3 模型微调

Fine-tuning 是指在特定任务或领域上进一步训练预训练语言模型的过程,使用带标签的数据或提示。Fine-tuning 的目标是使预训练模型适应特定任务,使其更专业化,能够生成更准确和具有上下文相关性的响应。Fine-tuning 可以 是 ChatGPT 提示创建过程的一部分。然而,fine-tuning 的大局远远超出了简单提示的范围,包括更复杂的 AI 模型配置。我将在这里列出整个过程中可以使用的步骤:

**预训练。**语言模型最初在大量的文本数据语料库上进行训练,以学习一般的语言模式、语法和语义表示。这个预训练阶段使模型能够对语言有广泛的理解,并获取关于各种领域和主题的知识。

**任务特定数据集。**为了对预训练模型进行微调以执行特定任务,需要一个带有标签的数据集或与该任务相关的提示。数据集包含与所需输出或正确响应配对的示例或提示。例如,在情感分析中,数据集将包含被标记为积极或消极情感的句子。

**架构适应。**预训练语言模型的架构通常会被修改或扩展,以适应特定的任务或要求。这可能涉及添加任务特定的层、修改模型的注意机制,或调整输出层以匹配所需的任务格式。

**微调过程。**然后,预训练模型进一步在任务特定的数据集或提示上进行训练。在微调过程中,使用梯度优化算法(例如随机梯度下降(SGD)或 Adam)更新模型的参数,以使模型在标记的数据集中的预测与所需输出之间的差异最小化。这个过程使模型能够专门化,并适应其表示以适应手头的特定任务。

**迭代细化。**微调通常是一个迭代过程。模型在任务特定数据集上进行多次 epoch 的训练,调整参数,并随着时间的推移优化模型的性能。微调过程旨在提高模型的准确性、上下文理解,并生成任务特定的响应。

通过对预训练的语言模型进行微调,模型可以利用其对通用语言的理解,并将其调整以在特定任务或领域上更有效地执行并更准确地执行。与从头开始训练模型相比,这种方法节省了大量的计算资源和训练时间。微调允许任务专业化,并使模型能够根据其训练的特定提示或任务生成具有上下文相关性的响应。

1.4 使生成式人工智能运作的技术

我们可以花费大量篇幅描述推动人工智能爆炸的关键软件框架和方法论。事实上,你可以在我刚提到的附录中找到那些页面。但那些只代表了想法,而且通常是数十年前的想法。这些想法到底被拖延了多久?不像是 1970 年、1980 年和 2000 年时没有一大群极其聪明的工程师、数学家和理论研究人员在解决这个问题。也不像是 1970 年、1980 年和 2000 年时没有一大群雄心勃勃的科技企业家在积极寻找下一个大事件。是什么阻止了所有这些事情 30 年甚至 10 年前就发生?

大部分瓶颈都是硬件限制。如果你够老,还记得处理器速度、磁盘存储和易失性内存的成本和物理限制在 1990 年左右带来的非常不同的计算体验。那是我得到的第一台工作电脑的时候,一台由一家商业公司借给我的,之前一直在用于前沿科学研究。那个庞然大物拥有令人瞠目结舌的 640k RAM,10MB 硬盘,和只能显示文本的显示器。视频显存?别逗了。它的 CPU 甚至没有数学协处理器。

我当前使用的工作站的内存比以前多了 20,000 ,存储空间多了 5,000 。而且,价格只有原价的四分之一(根据通货膨胀调整后)。我相信你明白其中的含义。

如果没有廉价的存储、内存、处理器,特别是图形处理单元(GPU)和张量处理单元(TPU),简直无法想象训练和部署像 GPT 这样的原始先驱 LLMs。

此外,云平台上所有这些资源的轻松获取,尤其是微软的 Azure,可能削减了几年的开发时间。从我在 IT 行业的早期职业生涯中,我知道研究、招标、寻求批准、购买、等待交付,然后实际在现场部署硬件需要多长时间。而且那时只是每次购买一两台机架服务器或网络交换机。我几乎无法想象组建驱动 GPT 开发所需的硬件需要多长时间。但是有了云,只需要输入信用卡信息然后点击几下按钮就可以了。

除了实际的硬件基础设施外,还有三个关键趋势使现代人工智能成为可能:

  • 获得大规模数据集的访问(即互联网):存在大量经过标记的(意思是:已经用验证过的描述标记的数据或图像)和未经标记的数据,通常称为大数据,通过提供丰富多样的、真实世界的样本,促进了生成式人工智能模型的训练。

  • 提高计算效率:优化技术,例如并行处理、分布式计算和模型压缩,在提高生成式 AI 模型的效率、使其更适用于实际应用方面起着至关重要的作用。

  • 研究合作和知识共享:研究社区内的积极合作和思想交流加速了生成式 AI 的进展,实现了技术、方法和最佳实践的相互交叉。

最后,还有摩尔定律:由英特尔联合创始人戈登·摩尔在 1965 年提出的观察和预测。它指出,微芯片上的晶体管数量大约每两年翻一番,从而在降低成本的同时显著提高计算能力。换句话说,集成电路上的晶体管密度往往会每 18 至 24 个月翻一倍。晶体管数量的指数增长是推动技术飞速发展的驱动力,使计算机更强大、更高效,以及电子设备更小巧、更强大。虽然摩尔定律不是物理定律,但它已经保持了几十年,并指导了半导体行业的进步。

1.5 AI 和数据隐私和所有权

通过本书,我们将以各种方式使用各种生成式 AI 工具。当我说“使用生成式 AI 工具”时,我真正指的是将你的提示和在许多情况下数据资源暴露给在线服务。这可能引起有关个人数据收集和使用的担忧,特别是如果数据敏感或包含可识别个人身份信息(PII)。了解 AI 如何收集和使用数据,并只提供必要和适用于预期目的的数据是很重要的。

一些 AI 工具可能会监控用户活动并收集有关用户与技术交互的信息。这可能会引起有关监视和个人信息滥用的担忧。用户在使用 AI 之前应了解正在收集什么信息以及将如何使用。

如果公开可用的生成式人工智能没有得到适当的安全保护,它们可能会带来安全风险。例如,如果攻击者获得了 AI 的训练数据或模型架构,他们可能会利用这些信息对用户(也就是你)发起有针对性的攻击。在将 LLMs 集成到诸如电网或金融网络等关键基础设施系统中存在风险。因此,如果你在 - 哦,我不知道 - 某个核武器设施工作,那么在公司引入 GPT 之前,你应该慎重考虑。

抱有最好的期望始终是一种方法。但至少考虑安全和隐私问题可能也是一个好主意。请考虑以下最佳实践:

  • 选择来自声誉良好的开发者的 AI 工具,这些开发者优先考虑隐私和伦理。

  • 查阅工具的文档和服务条款,了解它们如何收集、使用和保护用户数据。

  • 养成只提供必要和适用于预期目的的数据的习惯。

  • 保护自己的编程代码和基础设施,防止未经授权的访问和利用。

另一方面,通过使用生成 AI 服务,您也应该考虑,可能会侵犯他人的权利。虽然不太可能,但 AI 可能会生成与其训练内容非常相似而令人不舒服的文本。如果其中任何内容不属于公共领域或是具有免版权的,您可能会发布其他人的受保护财产作为自己的。我们称之为抄袭

话虽如此,出于好奇,我曾让一个朋友向一家专业的学术抄袭检测服务提交了一份大量 GPT 生成的文字样本,看看会有什么结果。在样本中的数以万计由 AI 生成的文字中,没有一个被识别为问题。所以在现实世界中,你很少会遇到这种麻烦。话虽如此,当你进入第三章时,你会亲眼见到一个恶劣的现实情况,那时你会明白保持一丁点的多虑没有坏处。谨慎总比后悔好。

1.6 AI 和可靠性

我们也应该谈谈幻觉。尽管在我们开始之前,你可能要确保 GPT(以及朋友们)不能听到。从经验来看,我可以告诉你,他们对这些讨论反应不太好。

直白地说,有时候 AI 生成的输出更多地属于创作而不是聪明。它们已被发现创造法律先例、学术论文、作者,甚至整个大学。把这放在背景中,我曾经有一个高中学生也会做这些事情。但他只是开心地戏弄系统,看看有没有人注意到。他取得了成功的学术和职业生涯。相比之下,友善的大语言模型完全不知道有什么问题,并且经常礼貌地暗示这一切都是你的错(“对于混淆我向您道歉…)”。

同样地,AI 通常不会比它们所接收到的内容更好。尽管 OpenAI 和其他 AI 公司已经尽力减小这个问题,但有一些证据表明,有时 LLM 会采纳其训练内容中的主观政治或社会观点,并在有争议的话题上显露出自己的立场。在使用 AI 响应时,这也应该成为一个考虑因素。

LLMs 在简单算术方面也是出了名的差。最近我把一份包含历史销售数据的 PDF 文件输入到一个 AI 中。文件中有些书名有多个条目 - 表示同一本书的多个版本。我想让 AI 做计算,以免花费我五到十分钟的时间设置一个简单的电子表格。

这是我的提示:

提示工程

根据 PDF,你能告诉我每个标题的总销售数量吗?我希望您忽略个别的 ISBN 号,只看书名。

无论我多么频繁和精确地重新表述提示,AI 都坚持选择一个数值,似乎是随机的,忽略了其他所有的内容,并将这个单一的数字呈现为总数。但它总是非常礼貌:

对于造成的混乱,我感到抱歉。您是正确的,我错过了一些条目。以下是修正后的每本书总净销售量,考虑到 PDF 中的所有条目:

教训是我们应该像记者对待消息源一样对待 LLMs:“如果你的母亲说她爱你,要求证实。” 换句话说,在发布 AI 输出之前,请自行核实事实和来源。

1.7 未来展望:

在继续之前,我想让你了解大局。这是我们计划要涵盖的内容:

  • 根据您组织的数据和具体需求定制文本、代码和媒体内容创作

  • 在本地数据存储或实时互联网上对 AI 模型进行训练

  • 探索 AI 的商业智能和分析应用

  • 构建您自己的 AI 模型

  • 展望生成 AI 的未来

从这一端看,情况就是这样了。现在开始阅读吧。我们在另一端见。

1.8 摘要

  • 生成 AI 建立在数十种工具、方法和技术之上,包括自然语言处理、强化学习和神经网络。

  • 数据存储、图形处理和网络连接技术的技术进步,以及硬件成本的稳定降低,推动了生成 AI 革命。

第二章:管理生成型 AI

本章内容包括

  • 掌握如何以最高效的方式访问和使用 AI 模型进行交互

  • 配置模型以尽可能地满足你的具体需求

  • 利用 OpenAI Playground 来更好地了解控制 AI 的关键工具

把巧妙的提示投给一个 AI 聊天界面肯定会产生令人印象深刻的结果。但是如果忽视模型配置中的细节,你就会错过大部分 AI 的潜在价值。所以在本章中,我们将开始找出应该转动哪些旋钮以及转动到什么程度的过程。(以及你绝对应该避免的哪个大红按钮!)

当然,我不知道,等你读到这里,整个过程可能已经自动化了。你键盘上轻轻闪烁的蓝色光?那将是 GPT 现在用来直接下载你最内心的目标和欲望的脑波扫描仪。

你的结果现在可以使用了。

2.1 访问 GPT 模型

如果你还没有这个荣幸,大多数流行的交互式 AI 平台在你尝试它们之前都需要你创建一个帐户。对于 OpenAI 的 ChatGPT,你可以在 chat.openai.com/auth/login 进行注册。即使你被要求提供信用卡信息,你在实际上被收费之前会有足够的警告。只要别忽略了这些警告。

一旦你注册成功,ChatGPT 的界面在这里。

现在怎么办?

除了 ChatGPT,你不需要拥有电气工程博士学位就可以意识到,微软的必应搜索引擎让你可以在 Edge 浏览器内访问 GPT-4。我想在这里也提一下谷歌的 GPT 竞争对手 Bard,但是我在加拿大。Bard 在这里还没有出现。事实上,你会发现在不同的地理、商业或者技术上,对于访问不同的 AI 服务会有各种各样的限制。要耐心和灵活。

除了那些由它们的创建者直接提供的网络服务,还有很多第三方网络项目,比如 ChatPDF(用于分析 PDF 文档)和 Rytr(用于生成写作内容),它们提供了优秀的托管应用程序,适用于各种特殊用例。对于使用这些工具来说,并没有什么特别复杂的。我们以后会更详细地讨论这些服务。

但是那些都是消费级的东西。没关系。但是你可能会说,严肃的工作是在“校外”发生的。也就是说,高生产力的交互,比如仔细配置你的模型,让你的 AI 在大量的自己的数据中自由运行,或者自动化多轮的提示和完成,并将回答融入到你的代码驱动工作流程中。

无论你使用的是哪种模型,种访问都将通过应用程序编程接口(API)进行。如下图所示,API 充当软件应用程序之间的桥梁,允许它们进行通信和交互。它定义了一组规则和协议,允许一个应用程序向另一个应用程序请求服务或数据。API 提供给具有适当授权的开发人员访问服务的特定功能。它们通过指定请求应如何结构化以及响应将如何格式化来实现无缝集成。

图 2.1 典型的 API 架构

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本书后面你将看到的很多技术示例将通过 API 实现。出于实际原因,这些示例大多将使用 OpenAI 的模型和基础设施。但是广义的基础方法应该也大多适用于其他服务(一旦它们变得广泛可用)。

所以编写自己的 AI 的道路通过 API。但是如果你以前从未做过这种事情,不用担心。我会为你提供所有背景和技术细节,以确保一切都能正常运行。

在我们进入那里之前,我们应该先查看 OpenAI 的 Playground。

2.2 通过“游戏”学习

Playground,如下图所示,甚至在 ChatGPT 之前就已经存在了,那是我第一次与 GPT 进行互动的地方。尽管要记住,与 AI 世界中的其他一切一样,界面可能在你使用之前至少会变化两次。我们将在本章中使用 Playground 来学习如何与 GPT 互动。

图 2.2 OpenAI 的 Playground 界面

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你可以通过你的 OpenAI 登录账户进入 Playground。与之前的持续对话不同,后续交互不会受到先前提示和完成的影响,Playground 中的默认文本字段一次只提供一个交换。其基于的模型可能也比 ChatGPT 版本要旧一些,也不太精细。

但是有两个方面使得 Playground 与 ChatGPT 不同。一个是屏幕右侧显示的配置控件,如上图所示,第二个是右上角的查看代码功能。正是这些功能使 Playground 主要成为一个教育工具,而不仅仅是另一个 GPT 接口。

2.3 获取 Python 代码示例

我们将在本章的下一部分逐个查看这些功能。但是,使用代码访问 GPT API 可能会在长期内为您提供最大的价值,我真的想立即向您展示查看代码的功能是什么。下面的图像显示了一个典型的 Playground 会话,我在其中键入了提示,然后点击了“查看代码”按钮,选择了“Python”选项。我看到的是可工作的代码,假设您在第 4 行添加了有效的 OpenAI API 密钥,可以从任何连接到互联网的计算机上复制并运行。

图 2.3 Playground 的查看代码工具显示的 Python 代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在不要担心细节,但请花点时间浏览包含在openai.Completion.create()方法中的参数。右侧游乐场中当前选择的模型在“模型”字段中(text-davinci-003),“Explain the purpose of…​”实际提示也在其中。事实上,我选择的每个配置选项都在其中。换句话说,我可以在游乐场中尝试任何组合的配置,然后复制代码并在任何地方运行它 - 或其变体。

事实上,这正是您学习如何使用 API 的地方。

2.4 访问 CURL 代码示例

下一个图像向我们展示了如果我决定使用命令行工具 curl 而不是 Python,那么完全相同的提示会如何工作。除了 Python 和 curl,您还可以在 node.js 和 JSON 中显示代码。

图 2.4 Playground 的查看代码工具显示的 curl 代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

curl是一个备受尊敬的开源命令行工具,通常默认可用。要确认它在您的系统上可用,请简单地在任何命令行提示符下键入curl。您应该会看到一些帮助消息,其中包含了正确使用的建议。

还有一件事。下表显示了每个可用的 OpenAI 模型以及它们关联的 API 终端点。端点是您在代码中可以使用的地址,用于访问资源。除了具有这些信息的价值之外,这也很重要,因为它向我们展示了您可以发送的种类提示。除了您预期的 completions 操作之外,还有 editstranscriptionstranslationsfine-tunesembeddingsmoderations。我们将在本书后面更多地讨论如何使用它们。但请记住所有这些。

终端点模型名称
/v1/chat/completionsgpt-4, gpt-4-0314, gpt-4-32k, gpt-4-32k-0314, gpt-3.5-turbo, gpt-3.5-turbo-0301
/v1/completionstext-davinci-003, text-davinci-002, text-curie-001, text-babbage-001, text-ada-001
/v1/editstext-davinci-edit-001, code-davinci-edit-001
/v1/audio/transcriptionswhisper-1
/v1/audio/translationswhisper-1
/v1/fine-tunesdavinci, curie, babbage, ada
/v1/embeddingstext-embedding-ada-002, text-search-ada-doc-001
/v1/moderationstext-moderation-stable, text-moderation-latest
要点

无论你使用哪种 AI,确保你了解所有可用选项,这样你就可以优化你的环境。

2.5 完成配置

你可以把“完成配置”看作是一种微调,这样说也不算错。但是,在 AI 的背景下,“微调”这个术语可能有更具体的含义。我们将在第六章和第九章花更多时间讨论这个话题。

在我开始解释每个配置的工作方式之前,这是一张图片,应该可以帮助你想象 AI 模型在生成响应之前对你的提示做些什么。

图 2.5:参数如何应用于 AI 提示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正如你所见,一个典型的语言模型可能会立即产生一个初步的草案响应(图中的“生成输出”)。但是,在与你分享之前(“返回输出”),它将首先测试其是否符合你可能设置的任何偏好(即,温度、频率等)。我们很快就会看到这些偏好起作用 - 它们可以控制提示的语调、创造性、焦点、冗长甚至成本。

现在看看游乐场中的这些控件是什么样子的。

图 2.6:游乐场 UI 中的工具上半部分选择

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在让我们看看这些到底是什么。为了让你保持方向,我们将涵盖每个配置类别:

  • 模式

  • 温度

  • 最高 P 值

  • 停止序列

  • 频率惩罚

  • 存在惩罚

  • 最佳选择

  • 注入起始文本

为了让你有些背景,想象一下你正在构建一个 Web 应用程序,为用户提供关于你的酒店的问题的即时响应。你可能最初会要求用户从一系列类别中进行选择(“餐饮和娱乐”,“旅行规划”等)。根据他们选择的类别,你希望微调你的聊天工具,以便响应与用户的期望相匹配。

这些配置可以帮助你创建这样的定制。

2.5.1 设置模式

根据你使用的模型不同,模式下拉菜单可能有三个选项:聊天、完成和编辑。完成和聊天提供了我们已经习惯的熟悉的完成和聊天体验。如果你有一些文本想要以某种方式重新处理,你可以选择编辑模式,在输入部分输入你的文本,并在下面的说明字段中输入你想要更改的文本。游乐场建议“修复语法”作为可能的指令,但你可以自由使用你自己的指令。我们将在下一章中了解更多关于这种操作的信息。

模型下拉菜单中预置的列表显示了当前选定模式下可用的所有 OpenAI 模型。此列表将根据您选择的模式动态变化。显然,您会想要选择一个最适合您的需求和预算的模型(如上所述)。

2.5.2 设置温度

温度控制生成输出时所使用的随机性程度。它允许用户调整输出中的创造性和不可预测性水平。通过将温度设置为介于02之间的值(默认为1),AI 可以生成不同类型的输出,从高度创造性和不可预测性(即 2)到高度结构化和保守性(即0)。

让我们考虑一个使用聊天机器人场景的例子,其中用户询问餐厅推荐:

提示

用户:“你能推荐附近的好餐厅吗?”

我们可以使用不同的温度设置来生成具有不同随机性程度的响应。更高的温度(例如 1.3)鼓励语言模型生成更多样化和创造性的响应,即使它们可能不太集中或准确:

响应

温度 1.3:助手:“当然!试试角落里那家舒适的小咖啡馆怎么样?他们供应美味的食物,从美味的汉堡到异国情调的寿司。那里的用餐体验绝对让你大开眼界!”

在这种情况下,高温设置导致了一个更有想象力的回应,提出了各种食品选择,并强调了“冒险的用餐体验”。

另一方面,较低的温度(例如 0.2)鼓励语言模型生成更确定性和集中的回应,通常固守安全和传统的选择:

响应

温度 0.2:助手:“当然!我建议你去主街上的意大利餐厅。那里有正宗的意大利面和令人垂涎的披萨。你绝对不会失望!”

通过降低温度,回应更为直接,并专注于特定的烹饪风格和场所,提供了一个安全可靠的建议。

2.5.3 设置 Top P 值

Top P(也称为核采样或“无惩罚采样”)是帮助控制生成文本多样性的参数。它涉及在序列中选择下一个标记的最有可能的单词,考虑累积概率阈值(P)。它不是从整个词汇表中生成,而是将选择范围缩小到那些累积概率超过 P 的最有可能的单词的子集。这有助于控制输出的长度和多样性,同时保持连贯性。

使用 Top P 抽样方法时,模型根据概率阈值(p)选择最有可能的下一个词,这允许更多样化和受控制的输出。累积概率超过阈值的单词将被考虑,确保在生成的文本中平衡可预测性和创造性。简单来说,“top p”允许模型超越明显的选择,同时保持连贯性。这就像给 AI 一点自由来给你带来惊喜,同时确保生成的文本仍然有意义。当您需要创意回复而不完全偏离主题时,这种技术特别有用。

通过调整 Top P 值,用户可以影响模型响应中的随机性或多样性。较高的值(例如,0.9)包括更大的潜在标记集,使输出更加多样化,而较低的值(例如,0.1)限制了选择,导致更加聚焦和确定性的输出。默认的 Top P 值为1

这是一个用户询问天气信息的例子:

提示

用户:“今天的天气怎么样?”

我们可以探索不同的 Top P 值对响应生成的影响。

响应

Top P 0.2(高度聚焦):助手:“今天的天气是晴朗的,最高气温为摄氏 25 度。是享受户外活动的完美天气。”

使用较低的 Top P 值,模型仅选择最可能的下一个词,导致聚焦和确定性的响应,通常更可靠但变化较小。

响应

Top P 0.8(更多样化):助手:“今天的天气晴朗、温暖、令人愉快。你可能想戴上太阳镜,出去享受充满乐趣的一天!”

使用较高的 Top P 值,模型会考虑更广泛范围的可能的下一个词,从而产生更多样化的响应。这可以在生成的文本中引入变化,提供表达相同信息的不同方式。

尽管 Top P 和 Temperature 看起来相似,但 Temperature 控制语言生成中的随机性:较高的值(例如,1.0)增加多样性,较低的值(例如,0.2)产生更可预测的输出。相反,Top-p 抽样设置概率阈值(p)以从最有可能的词组中进行选择,根据阈值(例如,p=0.9 用于更多多样性,p=0.2 用于较少多样性)调整输出的多样性。

一般情况下,可以更改 Temperature Top P,但不能同时更改两者。

2.5.4 使用停止序列

停止序列是用于指示生成的响应结束或提示模型停止生成进一步文本的特殊标记。这些标记通常添加到输入提示中以控制生成的输出长度。

在英语中,常见的句末标记示例是句号(.),后跟一个空格。在编程语言中,常见的停止序列可能是一对花括号(“{}”)来表示代码块的结尾。在 HTML 或 XML 中,像 “” 这样的闭合标签表示元素的结束。

需要注意的是,像 GPT 这样的现代语言模型不一定依赖于显式的停止序列来生成文本。相反,它们通常使用诸如标记化和上下文窗口之类的技术来理解何时自然结束句子或段落。此外,它们可能在内部使用特殊标记,如 “”(序列结束),但这些细节通常对用户进行了抽象处理。

例如,在解释课程的中途,可以配置虚拟讲师说,“我们今天就到这里吧。请给我复述一下这节课的三个主要观点。” 学生回答了三个主要观点(符合所需的停止序列)后,讲师可以说,“是的,很棒!好了,今天的课到此结束。”

2.5.5 设置频率惩罚

频率惩罚 用于阻止重复或冗余的输出。它有助于解决模型倾向于产生重复或过长短语的常见问题,导致响应不够连贯和多样化。通过应用频率惩罚,用户可以控制生成多样化响应和避免重复模式之间的权衡。

惩罚是根据已在输出中出现的生成标记或标记序列的次数计算的。当应用惩罚时,模型对标记的概率分布进行调整,以减少生成已使用标记的可能性。频率惩罚的目的是鼓励模型探索替代选项并生成更多样化和连贯的响应。

惩罚值(可以介于 -2.02.0 之间)可以根据所需的重复避免级别进行调整。较高的惩罚值导致更强烈地避免重复,而较低的值允许生成的输出具有更多的灵活性。找到正确的平衡很重要,以确保生成的文本保持连贯性和上下文相关性,同时避免过多的重复。

考虑一个用户要求为新智能手机提供一些想法的示例:

提示和响应

用户:为新智能手机提供一些想法。

模型:当然!以下是一些想法:高分辨率显示屏、多个摄像头镜头、快速处理速度、长续航时间和时尚设计。

那个语言模型生成的想法已经很常见了 - 它几乎没有突破性。然而,如果你加上一个频率惩罚:

提示和响应

用户:在使用频率惩罚的情况下,为新智能手机提供一些独特和罕见功能的想法。

模型:当然!如何把智能手机和全息显示器结合起来,以投射 3D 图像,采用石墨烯电池实现即时充电,设计可定制的模块化结构,使用户可以更换硬件组件,内置 AI 语言翻译器实现实时对话,以及读取用户手掌上独特静脉纹理的生物识别系统?

在这种情况下,通过使用频率惩罚,模型更有可能生成涉及不太常见的单词或概念的想法。这导致了更具创新性和想象力的建议,符合您提出独特产品特性的目标。

2.5.6 设置存在惩罚

存在惩罚 是 GPT 模型中的一个参数,有助于控制生成文本中短语和单词的重复。它旨在防止模型在生成的输出中过于频繁地重复相同的短语或单词。存在惩罚修改概率分布,以减少输入提示或种子文本中存在的单词。这鼓励模型生成未明确存在于输入中的单词和涉及的主题。

尽管存在频率惩罚似乎有重叠之处,但它们并不相同。频率惩罚是与特定标记已被采样的频率成比例的贡献。它阻止模型在生成文本中过于频繁地重复相同的单词或短语。另一方面,存在惩罚是一次性的、增加的贡献,适用于至少被采样一次的所有标记。它修改概率分布,以减少输入提示或种子文本中存在的单词。这鼓励模型生成未在输入中的单词。

我们可以探索不同存在惩罚值对响应生成的影响,同时与频率惩罚进行比较。想象一下,您提示模型:“告诉我关于我最喜欢的体育队最近的表现。”

回应

存在惩罚 0.2(减少规避):

助手:“您最喜欢的体育队在最近的比赛中表现异常出色。他们展示了卓越的团队合作和战略性的比赛,取得了几场胜利。”

采用较低的存在惩罚,模型可能更频繁地生成包含所需关键词或概念的响应,因为它不太倾向于避免使用它们。而使用频率惩罚进行相同操作,结果会是:

回应

频率惩罚 0.2(减少重复):

助手:“您最喜欢的体育队最近表现出色。他们展示了出色的技巧、协调能力和改变比赛局势的策略,取得了一系列的成功。”

与存在惩罚相比,频率惩罚侧重于减少特定短语或响应的重复,而不考虑它们与用户输入的相关性。

通过调整存在惩罚,您可以控制 AI 在生成的文本中遵循特定关键字或概念的程度。较低的值可能导致模型更频繁地提到所需的主题,而较高的值则鼓励模型避免过多地重复这些主题。

下面是如何在语言模型提示中使用高存在惩罚的示例。想象一下,您正在使用语言模型来生成一个故事或对话,并且希望确保生成的文本避免提及任何暴力或图形内容。您希望应用高存在惩罚来确保模型严格避免使用与暴力相关的单词或短语。

提示

用户:创建一个关于两位冒险家为了拯救他们的王国免受巨大威胁的故事。应用高存在惩罚,避免描述任何暴力或图形场景。

通过使用高存在惩罚,您可以引导语言模型生成符合特定内容指南的响应,使其适用于各种需要避免某些主题或语言的情境。

除了您在游乐场页面上可以看到的配置控件之外,还有一些其他控件既常见又有用:

2.5.7 使用“最佳选择”

当从生成式 AI 模型生成响应时,有时可能会收到多个候选输出。最佳选择方法涉及根据某些标准从这些候选项中选择最合适或最高质量的响应。默认设置(1)将流式传输所有输出而不进行任何选择或过滤。较高的值(最高可达20)将增加您所看到的可能性生成与输出之间的比率。

“最佳选择”方法的目的是通过手工选择最有利的响应来策划和完善输出中的内容。它使您能够更多地控制最终输出,确保它符合您的期望标准或与生成式 AI 模型的预期目的相一致。但请记住:最佳选择值越高,您为每个输出支付的费用就越多。

例如,在文本摘要任务中,您可能希望识别出捕捉文档或文章精华的最重要的短语或句子。您可以使用“最佳选择”来提取基于其重要性或相关性的前 n 个短语或句子,然后使用这些短语来生成原始文本的摘要。

2.5.8 使用注入起始文本设置

“注入开始文本”或“输入前缀”是指根据用户提供的特定初始文本来指导或约束模型的输出。它涉及在输入序列开头处事先添加或插入提示、问题或上下文,以影响生成的回复。通过注入开始文本,您可以为模型提供额外的上下文或信息,以帮助其将输出引导到所需的方向。与我们之前看到的其他提示工具不同,注入的开始文本成为输入提示本身的一部分,并用作生成的回复的开头。这在您想要生成的文本更加专注、具体或适用于特定上下文的情况下非常有用。

例如,如果您正在使用语言模型在客户支持聊天机器人中生成回复,可以在模型生成回复之前插入“用户:您的产品的退货政策是什么?”等开始文本。这有助于给对话框架并确保模型理解用户查询的上下文。

与指定文本前缀完成不同,“注入重新启动文本”允许用户在一个完成中插入文本,以“继续”某种模式化的对话结构。

想必你可以想象,在 API 的帮助下,GPT 还有很多酷炫和精彩的用途。在本书的剩余部分中,我们肯定会触及其中的许多方面。但是你可以(而且应该)经常去 API 参考页面查看。

要点

除了简单的信息获取请求之外,任何比较复杂的生成型 AI 操作(特别是以程序化方式交付的自动提示)都可以通过调整模型参数来更有效地执行。所以考虑超越默认设置,比如频率和温度等内容。

2.6 小结

  • 生成型 AI 模型有多个类别,包括像 GPT 和 PaLM-2 这样的软件框架,以及像 GPT 的 davinci 和 ada 这样更具体的基于任务的模块。每种模型都有其最佳应用场景。

  • OpenAI 的 Playground 是一个有价值的工具,可用于了解 GPT 提供的配置选项并生成用于通过 OpenAI API 运行提示的代码。您应该将 Playground 作为自定义构建代码的来源,以执行通过 OpenAI API 的提示。

  • 温度、存在惩罚和最优选择等配置控制变量可以用于微调模型提示。无论使用哪个 AI 模型,通常都有互动工具可用于应用这些控制变量。

  • OpenAI API 参考指南是一个重要的资源,把它当做你最好的朋友。

  • 我们探索了微调在更大上下文中的应用,从中快速了解到了 LLM 所具备的一些灵活性。

第三章:创建生成式 AI:文本和代码

本章将涵盖

  • 自动化过滤内容的准确性

  • 基于你可以定义的复杂细节创建新内容

  • 生成与专业领域匹配的定制文档

  • 生成编程代码

直到现在,我们已经探讨了一些生成式 AI 的基础背景和机制:它如何工作以及如何进行微调。从这一章开始,我们将开始处理一些实际的内容生成问题。

但确切地说,这要怎么运作呢?我不认为列举一个 ChatGPT 提示的长列表对你有什么意义。我敢肯定你已经做了大量这样的工作了。而且,如果你还没有这样做,那么在你喜爱的互联网搜索引擎中键入“ChatGPT 的酷提示”很快就会解决问题了。

我将要为你提供的是一些更复杂且有时意想不到的方法来处理更大的问题——包括如何训练你的 AI 模型在一个紧密定义的概念宇宙内工作,以及如何仅仅通过描述来构建真实世界的网站。我们将使用所有其他人正在使用的玩具,但我们将调整它们以更完美地适应我们的特定需求。

Callout(应该是图文之类的)

一个警告。正如我在接下来的章节中指出的那样:我不希望你完全按照我呈现的技巧和配置来使用。相反,目标是提供一些基本技能和激发你的好奇心和创造力,让你看到你的问题的新解决方案。

本章将重点介绍使用生成式 AI 来生成一些基于文本的原始内容。下一章也是这样,但是针对的是非文本内容,例如图像、音频和视频。

3.1 自动化准确性检查

如果你还没有注意到,在本书中我们将主要关注 OpenAI 工具如 GPT。这并不是说没有其他强大和有效的资源可以完成这些工作,事实上是有的。但至少现在,OpenAI 在行业中具有最高的创造力和动力,也是最具突破性的地方。

实话说,我已经可以看到微妙的迹象表明这可能开始改变。我不会惊讶,如果 12 个月后 Meta(Facebook)或甚至独立的平台领先于前面。但你要用你有的工具。而现在,大部分的工具或多或少都与 OpenAI 联系在一起。

所以我们将使用 GPT。关于 GPT Playground 的事情是,它应该让你思考程序代码而不是聊天对话。换句话说,Playground 的View code功能如何帮助你构建自动化工作流程呢?

让我们想象一下,你正在尝试将 GPT 创作整合到一个更大的过程中。也许你的组织正在鼓励它的网站用户在你们的公共讨论论坛上发布自己的想法和评论。

由于您提供的产品或服务在技术上很复杂,您对于在平台上保持高水平的对话很感兴趣。另一方面,您没有时间和资源在每一条用户评论在发布之前进行手动编辑。相反,您决定您宁愿让 GPT 来为您工作。下面是在 Playground 中的效果:

图 3.1 使用编辑模式的 GPT Playground

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意Mode下拉菜单被设置为默认值Chat。这给了我一个附加的SYSTEM字段和一个Output字段添加到 Playground 界面上。这里,我在输入字段中输入了一些包含明显错误的文本:

提示工程

60 年代最著名的音乐家是披头士乐队、鲍勃·迪伦和 J.S.巴赫。

然后,我将Check for accuracy and and output a corrected version作为我的指令输入。当我提交提示时,输出结果中的第三项是"Elvis Presley"。

这是代码的呈现方式:

import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

response = openai.ChatCompletion.create(
  model="gpt-4",
  messages=[
    {
      "role": "system",
      "content": "Check for accuracy and output a corrected version"
    },
    {
      "role": "user",
      "content": "The most famous musicians from the 1960's were the
      Beatles, Bob Dylan, and J.S. Bach"
    }
  ],
  temperature=1,
  max_tokens=256,
  top_p=1,
  frequency_penalty=0,
  presence_penalty=0
)

当我通过 API 运行该代码时,我得到了略微不同的响应:

response

<OpenAIObject chat.completion id=chatcmpl-7l0C8xGXBTM9quFZoPwDHHaSl
7avX at 0x7f07e67109a0> JSON: {
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "The most famous musicians from the 1960's were
        the Beatles, Bob Dylan, and Jimi Hendrix.",
        "role": "assistant"
      }
    }
  ],
  "created": 1691436520,
  "id": "chatcmpl-7l0C8xGXBTM9quFZoPwDHHaSl7avX",
  "model": "gpt-4-0613",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 23,
    "prompt_tokens": 41,
    "total_tokens": 64
  }
}

下面的图片展示了对我们的用例示例,如何通过使用Stop sequences字段基于关键词过滤内容。如果我想要完全捕捉和防止用户发布不恰当的言论,这对我会很有帮助。我敢肯定你可以列出一份你自己的更不合适的词汇表,可以添加到这个字段中。

图 3.2 使用 Stop sequences 的 GPT Playground 编辑模式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自然而然,您需要自己决定是否适合赋予 GPT 有效地审查您的用户的权力。尽管我个人会对给予 AI 这种权力感到紧张,但这个例子实际上只是为了说明可能性。

要点

使用 OpenAI Playground(或其他资源)构建利用 LLM 功能的工作流以实时解析文本并检查准确性。

3.2 创建新的上下文感知内容

这一节会很有趣。除非你对于娱乐没有兴趣,当然了。不要让我挡住你的路。请随意跳过。

但我们其他人将深入研究根据需求生成虚构世界的奇异世界。这并不意味着我会建议你试图通过销售由 AI 生成的虚构作品来赚钱。在 Amazon 上,数百万个标题争相吸引读者的注意力,让真正的人类源小说难以被注意到已经够困难了。相反,虚构角度只是用来激发你的创造力的另一种方式。事实证明,我甚至不读小说。

那么这样的创造力会带领您去哪里呢?嗯,考虑一下您可以节省多少时间和精力来配置一个 AI 模型以生成年度公司报告。该 AI 需要熟悉您公司的运营情况(即“具有上下文意识”)。因此,它需要:

  • 摄取您公司复杂的财务历史

  • 摄取其最近财政年度的详细信息

  • 了解您行业和当地监管机构的报告要求

处理了所有这些问题后,您距离自动化业务文件只有一次鼠标点击的距离。

但模拟这个过程可能有点复杂。所以我会用这个“同人小说”例子来说明这个过程。

我的计划是让 GPT 索引由单一作者撰写的大量现有小说集,其中包括一个基本固定的核心角色阵容。一旦索引存在,我将尝试确认 GPT 是否熟悉完整一套小说的所有事件,然后让它使用原始风格和角色编写新内容。希望新作品也能内部一致且没有“历史”上的矛盾。

无论如何,为了让我的计划启动,我首先问了 ChatGPT 这个问题:

提示工程

是否有一系列著名的英语小说,现在都处于公有领域,通过多本书追随同一组人物?

一如既往,ChatGPT 发挥了作用,提醒我查尔斯·狄更斯的《雾都孤儿》系列,艾格·尼德·伯勒斯的《泰山》系列,露西·莫德·蒙哥马利的《绿山墙的安妮》系列,以及维克多·阿普尔顿的《汤姆·斯威夫特》系列。太棒了。我会选择福尔摩斯。

我将浏览到古登堡计划网站,那里有 70,000 本公有领域的电子书,只等着您来享用。大多数书籍都是根据至少符合美国版权法的法律到期的老经典。正如您从图像中可以看到的,书籍提供了各种各样的格式。

图 3.3 古登堡计划网站上莎士比亚系列页面上提供的多种格式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,我将从原始的福尔摩斯系列中下载大约 25 部小说和短篇故事的纯文本版本。我将这些文件保存到我的 Python 代码将运行的位置下面的data/目录中。

3.2.1 为 Python 设置你的环境

对于这个练习,我会假设您已经安装了 Python 编程语言以及 Python 包管理器pip。有关如何为您的操作系统设置 Python 本身的帮助,请参阅官方下载页面。而这个页面应该会为您提供有关pip的所有信息。

如果您还没有有效的 OpenAI API 密钥,您可以通过在 OpenAI API 参考页面上注册来获取一个。

从现在开始,您需要在 Python 环境中工作。一种使其发生的方法是从命令行键入python。您在这样的环境中输入的所有内容都将由 Python 解释器处理。您还可以创建一个纯文本文件,当您添加了所有所需的代码后,可以使用以下方式从命令行运行它:

python myfilename.py

我个人最喜欢的 Python 环境是 JupyterLab。Jupyter 将为您提供一个基于浏览器的环境,其中包含各种优化,用于管理严肃的数据工作负载。另一个特别受欢迎的用于 Python 工作的环境是 Google Colab。

3.2.2 创建您的提示(使用 Python)

但无论如何,这是您导入将实际运行我们代码的所有必要 Python 模块的方式:

from llama_index import SimpleDirectoryReader
from llama_index.node_parser import SimpleNodeParser
from llama_index import GPTVectorStoreIndex
import os

顺便说一句,这会让您花费一些 API 费用。当我自己运行时,它可能花费我大约$0.25。

如果您尚未在您的系统上安装了一个模块,运行以下内容将帮助您完成:

pip install llama_index

接下来,您将创建一个环境变量来保存您的 OpenAI API 密钥。确保您用您实际的密钥替换我的sk-xxxx

os.environ['OPENAI_API_KEY'] = "sk-xxxx"

这将加载data/目录中任何文档的内容,并将其读取到变量documents中。

documents = SimpleDirectoryReader('data').load_data()

接下来的三行使用parser.get_nodes_from_documents方法将我们的data/目录的实际内容转换为适合 GPT 的索引。根据您的数据量,此步骤可能需要一些时间。

parser = SimpleNodeParser()
nodes = parser.get_nodes_from_documents(documents)
index = GPTVectorStoreIndex(nodes)

最后,我们将传递我们的提示并针对索引运行它。我首先提出了这个关于书籍之间矛盾的问题有两个原因:

  1. 因为这是一个相当可靠的确认模型实际上已经阅读并"理解"内容的方法。

  2. 因为我实际上很好奇道尔本人是否有困难保持所有细节的连贯性

response = index.query("Taking into account the plot and character \
	details of all of the stories in these documents, are there \
	any contradictions between between events in any one story \
        and events in any other?")
print(response)

当我提交该提示时,这是我得到的回复:

提示工程

不,任何一个故事中的事件与其他任何一个故事中的事件之间都没有矛盾。这些文件中的所有故事都由相同的角色和情节点连接起来,每个故事中的事件都与其他故事中的事件一致,包括提供的新背景。死者手指和拇指之间找到的纸片与其他故事中的事件一致,因为它似乎是一个约会,上面提到的时间正是这个可怜家伙命运的时刻。

对于这个实验来说已经足够了,但是对于精度至关重要的项目来说肯定不够。毕竟,当我问常规的 ChatGPT 同样的问题时,我得到了不少于五个事实上的矛盾之处。其中,沃森的战伤同时出现在他的手臂(《血字的研究》)和腿(《四签名》)上,这是唯一真正符合我的标准的矛盾之一。底线:请对您计划依赖于其进行重要操作的任何 AI 输出进行独立确认。

这是我提出的一个提示,要求写一篇全新的福尔摩斯故事的开头段落:

response = index.query("Write the first two paragraphs of a new \
	story using the same characters, ambience, and writing \
	style as the documents in data/ The story should follow a \
	plot involving the theft of an entire passenger liner in the \
	Cunard line.")
print(response)

以下是回来的结果:

提示工程

我曾听说过一桩大胆的抢劫传闻,但我从未想过它是真的。一艘昆尼德航线的客轮被完整地盗走了,当局对此束手无策。我必须找出真相,所以我来到了码头,我知道那里会有我所寻找的答案。

当我等待时,我走下了阶梯,阶梯中间已被醉汉不断的脚步磨得凹凸不平。在门上方闪烁的油灯的光线下,我找到了门闩,进入了一个长长的、低矮的房间,厚重的棕色鸦片烟雾缭绕,像是一个移民船的船头舱一样。透过阴暗,我依稀能看到躺在奇怪、奇妙姿势中的人们的身影,耸肩、弯膝、抬头、下巴指向上方。黑影中闪烁着一点点红色的光圈,时明时暗,如金属烟斗中的燃烧毒品的碗中的火焰。

突然间,我听到了外面街上的骚动声。我匆匆忙忙地走了出去

听起来很黑暗。但实际上比你想象的更黑暗:当我稍微调查了一下,我发现 GPT 几乎完整地从其中一篇现有故事中窃取了那第二段:“扭曲的唇者”。

所以我再次询问,这次添加了但不使用任何直引的引语。新的结果更加原创,我猜,更或多或少可信。

提示

现在可能是谈论版权限制的好时机了。正如你所看到的,原始的福尔摩斯故事都是公有领域的,所以重复使用它们的内容、人物或情节都没有问题。基于受保护作品生成内容 - 就像是粉丝小说一样 - 将会更加复杂。在许多司法管辖区中,可能会对被归类为合理使用、变革性工作或非商业工作的内容做出许可。只要确保提前进行研究。

正如在第一章中提到的那样,你用来喂养AI 模型的任何内容都有可能被归档,甚至被组织提供者(如 OpenAI)使用。这可能对拥有受版权保护的创意或敏感商业数据的所有者构成问题。

但真正的问题是,AI 可以“理解”和索引庞大数据档案的内容,并将其用作构建新内容的资源…像年度财务报告一样。

生成专业文件

拥有对整个互联网的即时回忆级别的知识,即使只是 2022 年之前的版本,也具有一定无法匹敌的优势。现在,即使是非常不常见的技术或家庭问题的排除也很容易。没有太过于晦涩或抽象的细节,没有太复杂的过程,也没有太过晦涩的产品组装指南。摆脱了婚姻矛盾与组装宜家家具之间的相关性。

如果你的名字是 GPT,那就太好了,亲爱的读者。(为什么不呢?有什么能阻止我创建一个 GPT 代理,在互联网上购买所有可用的我的书,并快乐地一遍又一遍地阅读它们?)然而,我们其他人将不得不通过 AI 提示来满足我们的技术需求。

但要充分利用 AI 确实需要我们至少具备一些领域知识。合同法 - 一个需要大量领域知识的领域 - 是 GPT 可以发光的地方之一。毕竟,GPT-4 已经通过了统一法律考试,得分位于 90%以上。

律师在准备新合同时所做的很多工作都涉及操作模板化的文本块。他们通常有两个目标:

  1. 准确识别涉及的资产和主要人员

  2. 为了保护客户免受潜在的权利损失

对于成熟、经过良好培训的 LLM 来说,精确操作模板化的文本块并严格遵守清晰说明的一系列事实,同时预测可能出现的明确文档危险是一个完美的使用案例。为了证明这一点,我向 ChatGPT 提出了这个请求:

提示工程

为我起草一份合同,正式规定了 David Clinton(位于美国俄亥俄州小镇 Smallville 的 123 号 Any St.)与 Manning 出版社之间的关系,其中 David Clinton 将为 Manning 提供持续的咨询服务,以换取所有净收入的 75%份额。

响应非常出色(尽管我不知道为什么它将我对 Manning 的利润份额从 75%随意减少到 15%)。在这里没有理由重现合同,但您 - 还有任何感兴趣的 Manning 高管 - 可以自由查看它在我的网站上。我不是律师,但在我的职业生涯中,我签署了不少合同,而这份草案似乎真的涵盖了所有关键要素。

警告

但我再次必须强调,人工智能仍然只是一台愚蠢的电脑,它并不真正知道自己在做什么。永远不要自动依赖来自 LLM 的任何东西。正如 GPT 在交付合同时警告我的那样,在执行之前寻求专业意见是明智的。

这就是领域知识(对特定主题的专业理解和专业知识)的作用所在。无论你的 LLM 的结果有多么令人印象深刻,如果你自己对一个领域没有通识了解,误解、错误解释和错误应用生成的内容的风险就很高。你还能怎样确保你的输出不缺少重要的背景信息或者出现严重错误呢?

即使你是特定领域内的经验丰富的专家,也很难确定你的人工智能给出的数千字中是否有些许错误或令人困惑的语言。对于许多应用程序来说,“大部分准确”是不够的。

这就是我越来越频繁看到的专业人工智能项目可以发挥作用的地方。以 名为 Harvey.ai 的网站为例。该网站背后的人似乎正在利用他们的法律和技术专业知识为法律公司提供访问专用人工智能的服务。但是,他们所提供的远不止我刚才讨论的愚蠢合同。哈维显然正在利用其创建者的相当专业知识(即领域知识)来使他们的服务更准确、可预测和有用。

无论通用工具如 GPT 等摄取了多少法律相关信息,它们都无法与专用人工智能竞争。领域专家有机会为服务增加重要价值。

这不仅适用于法律领域。你擅长的任何事情都可能与人工智能进行有效合作,为客户提供面向客户的服务。以下是一些特别有用的内容类别,LLM 结合人类领域专业知识可以发挥作用的地方:

  • 对各种技术主题的见解、解释和教程,例如编程语言、人工智能、网络安全、区块链和新兴技术。

  • 科学内容包括解释文、研究摘要和关于物理、化学、生物学、天文学和环境科学等主题的详细文章。

  • 医疗保健内容如患者教育资料、疾病信息、医疗程序和研究进展,以及新兴医疗技术的见解。

  • 金融和经济内容可以包括实时市场分析、投资见解、经济预测、金融概念解释,以及个人理财、预算编制和退休规划的可定制指导。

  • 营销和广告内容可以包括生成营销策略、广告内容、社交媒体帖子、产品描述,以及消费者行为和趋势分析。

  • 教育材料可以包括教案、学术概念解释,以及数学、历史、文学和外语等各种学科的辅助教学。

  • AI 平台可以提供旅行指南、旅游目的地推荐、旅行计划建议以及当地文化和习俗的见解。

要点

使用大量现有数据来训练您的 LLM 生成具有意识到现有约束条件并能够采用特定写作“语音”和风格的内容。并且请注意,该训练应该融入特定领域的知识和约束。

3.4 生成编程代码

在寻求编程代码帮助时,领域知识也是有帮助的。如果您对您所需要的代码的意图有相当清晰的了解,向 GPT 寻求帮助将会更加有效。但是,熟悉常见的编码结构和设计,如循环、变量和条件语句,也很重要。

这意味着一个提示,比如:

提示工程

给我看如何建立一个网站。

…​远不如:

提示工程

给我看如何构建一个响应式的全栈网页,其中包括 HTML、CSS、JavaScript、Node.js 和 SQLite。

您还不应该假设您的 AI 给出的代码实际上会运行。当某些东西无法运行时,请务必记下您看到的精确错误消息,并在寻求更多帮助时使用它们。

3.5 使用 Copilot 进行交互式编码

与 AI 进行的交互式编码会感觉非常像是双人编程。而这是件好事。事实上,他们选择的名称,即现在可能是最受欢迎的基于 GPT 的代码支持工具之一的 GitHub Copilot:这就是一切。

我不会过多深入讨论一般性话题,因为这在网上已经有很好的文档记录,更好的是,因为 Nathan B. Crocker 已经为他的 Manning 书籍:AI-Powered Developer 专注于此。但是,我会快速带您了解 Copilot 的使用过程。

首先要知道的是,在您的 30 天免费试用之后,Copilot 将收取月费。

使用 Copilot 有两种方式:GitHub 个人 Copilot 可供个人 GitHub 账户使用,而 GitHub 企业 Copilot 可供组织使用。“经过验证的学生、教师和受欢迎的开源项目维护者” 可能有资格免费使用。

一旦您在您的 GitHub 账户中启用了 Copilot,并设置了您的支付偏好,您将需要选择一个代码编辑器。此时,Copilot 兼容的编辑器包括 Visual Studio、Visual Studio Code、Neovim 和 JetBrains IDEs。无论您选择哪个 IDE,您都需要找到并安装 GitHub Copilot 扩展。

一旦你已经启用并安装了所有内容,并登录了你的 GitHub 账户,你就可以开始使用 Copilot 了。当你用你喜欢的编程语言编写代码时,Copilot 将根据它从训练数据中学到的上下文和模式提供实时的代码建议。你可以通过按 Tab 键接受建议,Copilot 将生成代码片段以加快你的开发过程。

Copilot 理解代码结构和描述性命名的使用。使用 Copilot 文档中的示例,你可以从仅包含一个类似下面的 JavaScript(.js)文件开始:

function calculateDaysBetweenDates(begin, end) {

Copilot 可以接收这些信息,并构建一个完整的可直接使用的函数。

3.6 摘要

  • 使用 GPT Playground 学习如何将 AI 模型、完成配置和环境控制应用到你的提示中。Playground 也是 API 导向提示和自动化的绝佳源泉。

  • 使用现有数据/内容训练你的 AI 模型,并加入特定领域的约束条件,以创建最适合的新内容。

  • 生成式人工智能工具已被广泛采用,用于辅助编写编程代码,但像 GitHub 的 CoPilot 这样的专用工具可能效果特别好,因为它们已经在整个 GitHub 网站上进行了训练。使用代码助手工具来构建你现有的编程思路和代码。

3.7 试试这个

为什么不像你在上面看到的用骆驼索引 - 如同《福尔摩斯探案集》中的故事 - 尽可能多地应用到的写作中,来训练 GPT 代表你说话?然后提示你的模型回答特定问题或场景,使用你的风格。

第四章:使用生成 AI 创作:媒体资源

本章涵盖内容

  • 生成数字图像和视频

  • 生成 AI 辅助视频编辑和文本转视频

  • 生成演示资源

  • 生成音频到文本和文本到音频

文本和编程代码是生成 AI 的自然目标。毕竟,除了二进制之外,这些是您的计算机具有最丰富经验的语言。因此,直觉上,预计能够生成我们在上一章中讨论的资源类型。

但图像、音频和视频就会有很不同的情况。这是因为视觉和音频数据:

  • 比文本本身更加复杂和高维

  • 缺乏符号表示,具有更加微妙的意义,这使得直接应用传统编程技术变得困难

  • 可能高度主观和模糊,这使得构建能够一致且准确地解释此类数据的自动化系统变得困难

  • 缺乏固有的上下文,这使得计算机系统更难以自信地推断意义

  • 需要大量的计算资源来处理

然而,用于生成媒体资源的工具一直是近期对 AI 兴趣爆发的主要推动力。因此,本章的其余部分将致力于探索 AI 驱动的数字媒体创作服务的实际应用。

4.1 生成图像

首先,一个大型语言模型(LLM)如何将文本提示转换为视觉工件?下图说明了构成使这一过程发生的训练过程的关键步骤。

图 4.1 媒体生成 LLM 的训练过程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以下是该过程的详细步骤:

  1. 收集大量的音频、图像和视频以供学习。这些例子来自互联网各个地方,涵盖了各种风格和主题。

  2. 使用例子来学习模式。对于音频,它学习了不同的声音以及它们之间的关系(比如一个旋律遵循特定的节奏)。对于图像,它学习了不同对象的外观以及它们如何一起出现。对于视频,它找出了不同的镜头是如何组合在一起讲述一个故事的。

  3. 应用数学魔法将音频、图像和视频转换为代表性数字。这些数字帮助系统理解内容中的模式和关系。这就像系统将艺术转换为它可以理解的语言。

  4. 训练模型涉及 LLM 搜索可以重建已见过的音频、图像和视频的最佳模式。

  5. 当 LLM 创建某物时,我们通过将其与真实例子进行比较来应用反馈和调整。模型调整其模式以使其更擅长创建更接近我们想要的内容。

  6. LLM 通过创建新的音频、图像和视频进行(大量)练习。随着每一轮练习,它在理解模式并制作自己的内容方面变得越来越好。

需要注意的是,由 AI 生成的图像和视频只是基于训练数据学到的模式的愚蠢计算机的最佳努力,可能并不总是反映现实世界的准确性 - 对于那些见过 AI 生成的每只手有 6-10 根手指或三只手臂的人来说,这一点应该是显而易见的。对于任何一个人来说,“两只”传统上是附在任何一个人身上的手的最大数量。而且,不,我不知道为什么 LLM 经常在这个显而易见的事情上弄错。

4.1.1 提供详细提示

无论你使用哪种图像生成服务,你构建提示的方式将在很大程度上决定最终输出的图像的质量。你需要描述性地定义你想要的图像风格。因此,类似这样的东西:

一些树木

…​不如:

一片阳光明媚的树木区,风格类似约翰·康斯特布尔

那个例子包含了一个主题(“树木区”),形容词(“阳光明媚”)和一个艺术风格(“约翰·康斯特布尔”)。你应该尽量在你的提示中包含这三个元素中的至少一个。可以随意添加颜色和背景纹理等细节。

如果你感兴趣,这是稳定扩散模型对最后一个提示的响应:

图 4.2 以英国浪漫主义画家约翰·康斯特布尔的风格绘制的稳定扩散图像

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当涉及到风格时,请考虑从这个(部分)列表中添加一些内容:

  • 摄影

  • 立体派的

  • 油画

  • 哑光的

  • 超现实主义的

  • 蒸汽朋克

  • 可爱的生物

  • 幻想世界

  • 赛博朋克

  • 古老的

  • 文艺复兴时期的绘画

  • 抽象的

  • 真实的

  • 表现主义

  • 漫画

  • 墨水

4.1.2 提示生成图像

尽管如此,我决定忽略所有关于风格和细节的建议,并向几个 AI 图像创作平台询问可能用于装饰这本书的封面。正如你所看到的,我的提示没有提供任何具体的描述。相反,我仅仅给了它一个抽象的概念(书名),并假设 GAI 将能够将其暗示的概念转化为图形。

提示工程

为一本名为《完全过时的生成式人工智能指南》的书创建一个 6:9 的封面。图像不应包含任何文本或字母数字字符。

值得注意的是,我如何指定了纵横比(“6:9”)来告诉软件图像应该采取的形状。我还告诉它不要包含任何文本。AI 在处理文本方面是臭名昭著的糟糕

如果曼宁艺术部门的任何人正在阅读,请看一下我收到的一些图像之一。第一个来自梦想工作室,看起来很棒,尽管他们似乎忽略了纵横比的备忘录。

图 4.3 一个梦想工作室的“书籍封面”图像

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这张来自 Stable Diffusion 模型的图片符合很多正确的标志,并且考虑到我给它的内容很少,相当令人印象深刻。

图 4.4 Stable Diffusion 的 “书封” 图像

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每次我在网上搜索时都会发现更多的图像生成服务。但是,目前这些是特别重要的参与者:

Midjourney 起步有点棘手,但似乎能生成非常高质量的图像。您需要在 midjourney.com 创建一个帐户,选择年度或月度费用帐户级别,然后将 Midjourney 服务器添加到您的 Discord 帐户中。从 Discord 中,您可以在直接消息栏中选择应该出现的 “Midjourney Bot”。要获取您的第一组图像,请在底部的文本字段中键入 /imagine 后输入您的提示。一旦生成,四个可能的图像将显示在您的 Midjourney UI 中。我不能说我理解为什么设计成这样,但很多人似乎觉得值得一试。

图 4.5 在 Discord 帐户中访问 Midjourney

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DALL-E - 由 OpenAI 提供 - 是大多数人遇到的第一个数字图像生成工具。在它的时代,它令人震惊,并引起了对相关技术和相关可能性的关注。但或许出于设计考虑,它从未像其他竞争服务一样产生过同样范围和照片般逼真的图像。

图 4.6 OpenAI 的 DALL-E 基于浏览器的界面

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Stable Diffusion 是一个可以通过像 Hugging Face 这样的服务的帐户免费访问的生成模型 - 这是一个提供许多 AI 模型、数据集和其他 AI 工具的托管服务,使用免费和按使用量付费的级别。如果您有一台带有图形处理器单元 (GPU) 并且至少有 8GB 视频内存的计算机,您实际上可以安装和运行自己的私有 Stable Diffusion 服务。

图 4.7 Stable Diffusion GitHub 页面

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DreamStudio 通过他们的网站提供图像生成服务。您可以免费获得有限数量的积分,更多积分可供购买。目前,使用每 1000 积分需要花费 10 美元。每张图片的成本取决于大小和复杂度。DreamStudio 由 stability.ai 提供 - 这是 Stable Diffusion 的负责公司。

图 4.8 DreamStudio 浏览器界面

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.2 生成视频

如果 GAI 能够创建图像,它们也能够用同样的技巧制作视频,是吗?当然可以。但是你必须更具体地说明你所说的 “视频” 是什么意思。

如果你所期望的是写下一个提示(就像我们一直用于图像的那些)然后一个美丽的视频突然活灵活现地呈现在眼前,那么我们还没有完全达到那一步。Meta 和 Google 都大声宣布了技术(Meta 的 Make-a-Video 和 Google 的 Imagen Video)将做到这一点。但请记住,这两种工具绝对、肯定、毫无疑问会在未来的某个不确定日期上推出。

RunwayML 发布了一个有限访问权限的令人期待的工具。但是,考虑到目前每个输出剪辑的最大时长为 4-15 秒以及显著的渲染时间,它还不是我们所期望的一切。

但是,如果你能将“视频”的定义稍微扩展一下,那么我们可能有些东西可以谈论。

4.2.1 AI 辅助视频编辑

目前绝对存在的一个过程涉及采用现有视频并操纵它们,使它们讲述一个完全不同的故事。

使用样式化和遮罩效果,像 RunwayML 的 Gen-1 和开源项目 Text2Live 可以创建类似于高端好莱坞工作室一直在做的事情。不同之处在于,那些好莱坞工作室通常需要花费数月时间和数百万美元购买他们所需要的设备和专家。我们现在可以在一台性能适中的笔记本电脑上在几秒钟内获得几乎相同的质量。事实上,你可以通过下载并在自己的机器上运行它来自托 Text2Live。

你实际上可以做什么?我建议你查看 Gen-1 和 Text2Live 网站的演示视频。它们会向你展示纹理、背景、照明和其他属性如何被替换,以将现有视频,比如一个男人沿着车道跑的视频,转换成一个宇航员在外星球表面奔跑的视频。

4.2.2 文本到视频幻灯片

那些都非常有趣。但我们中的一些人使用视频的任务更接近办公室而不是外太空。换句话说,针对教育、IT 培训、新闻服务、营销和企业通讯等媒体内容的巨大市场存在。以传统方式制作这样的演示文稿可能需要每分钟数小时的时间(我知道,因为我靠这个谋生)。这还没有考虑到为了让你直接上镜头而需要额外的设备和工作室成本。

然而,目前有一些由人工智能驱动的服务可以接受你的脚本,并生成一个由超逼真的计算机生成的声音(使用你选择的男性或女性、口音、年龄和个性)以及相应的支持背景图像和项目符号文本组成的专业视频。你也可以上传自己的图像。这一流派的高端玩家还会添加一个看起来非常接近实际真人的类人化头像。

加上使用 ChatGPT 生成的脚本,就能在几分钟内完成一整套专业视频的制作。

有何陷阱?啊,是的。陷阱。嗯,高端的东西并不便宜。目前许多更专业的服务每年收费数百美元(甚至更多),并将输出限制为每月指定数量的视频分钟数。这个市场的领导者可以说是:

  • Synthesia

  • Elai

  • Steve AI

  • Fliki

  • Synthesys(不要与 Synthesia 混淆)

4.3 生成演示文稿资源

PowerPoint 演示文稿有一种特质,激发了人们对恐惧和厌恶的共鸣。会议参与者对经过粗糙计划和设计的演示文稿感到厌恶。而演讲者则面对着不情愿地逐一构建演示文稿(然后遭受观众的仇恨)的任务,感到恐惧。

当然,幻灯片演示不仅仅是会议演示。它们通常也是商业和教育视频的主要结构。这就是本章的主题所在。

你知道,生成 AI 已经完全能够为你做所有的艰苦工作:有时技术创新确实解决了问题。至少对于演讲者或视频制作者来说是这样。而可怜的观众还是几乎自顾自。

Gamma 是众多文本转演示文稿服务中的一种。我将重点介绍 Gamma,只是因为这是我迄今为止经验最丰富的一个。

利用我被允许的一些免费试用积分,我选择了 New with AI 选项,然后选择了他们的 Text transform 路径,并在说明字段中输入了这段文本(是的:这就是本章的工作标题):

使用以下标题生成有关使用生成 AI 创作:媒体资源的演示文稿:

然后,我将以下主题标题粘贴到内容字段中:

  • 生成图像

  • 生成视频

  • AI 辅助视频编辑

  • 文本转视频幻灯片演示

  • 生成演示文稿资源

  • 生成音乐

之后,我只需从他们的列表中选择一个格式,几分钟之内,Gamma 就为一个非常吸引人的演示文稿生成了文本内容、布局和视觉效果。你可以在我的网站上看到生成的 PDF。

当然,我可以自由编辑任何不符合我的需求的内容。但对于我们渴望逃离 PowerPoint 地狱的人来说,这是一个游戏规则的改变。

4.4 生成语音

不满意您的口音或者只是没有一个好的、安静的地方来录制您的播客或视频解说?有一些服务可以将文本内容转换成您选择的声音、口音、完美的节奏和没有孩子在背景尖叫的音频文件。如果您仍然希望成为叙述者,您也可以克隆您的声音,可以用来生成您的音频文件。

当然,语音转文字已经发展了几十年了。我们都听过有计算机生成声音的语音信箱系统。正在改变的是,人工智能的进步大大提高了质量。

“改进了”,但不一定完美。自己试试。将一些内容上传到比如亚马逊的 Polly 服务,你会印象深刻。但是仔细听了至少一分钟之后,任何听众都可能会得出结论,这实际上不是一个真正的人在说话,尽管它很好,但它的质量永远不会被误认为是奥森·威尔斯或温斯顿·丘吉尔。

另一方面,雇佣一个具有那种口才技巧水平的人来录制您的内容,成本肯定会比亚马逊每百万个字符收取的 4.00 美元高得多。所以就是这样。

Polly 主要面向需要实时生成语音的组织。想象一下交互式网站支持系统。这意味着 Polly 的客户将希望通过编程方式的 API 连接来脚本化其音频的创建和管理。为了向您展示这将如何运作,这里有一个使用 AWS CLI(一种命令行 API 访问工具)的示例命令,它将请求从我称为text.txt的本地文件中生成的文本的音频.MP3 文件。为了使其工作,您需要一个 AWS 账户。您还需要设置和配置 AWS CLI。

aws polly start-speech-synthesis-task \
    --output-s3-bucket-name mypolly345 \
    --text file://text.txt \
    --voice-id Matthew \
    --engine neural \
    --language-code en-US \
    --output-format mp3

注意我如何使用美式英语(en-US)口音指定了Matthew声音。Polly 还有数十种其他声音和口音选项。

一旦生成了指定的 Amazon S3 输出桶中的文件,我可以使用以下 AWS CLI 命令下载该文件:

# Copy all files:
aws s3 cp s3://mypolly345 . --recursive

我可以使用s3 rm删除这些文件的远程副本。

# Remove all existing files:
aws s3 rm s3://mypolly345/ --recursive

因为我认为玩完玩具后应该始终清理好它们。

文字转语音是一个竞争激烈的市场。除了 Polly,其他平台提供了 API 访问服务。这些包括谷歌云的巧妙命名的文字转语音服务和 IBM 的 Watson 文字转语音声音。

除此之外,还有一些服务将允许您通过网站界面逐个将文本文档转换为语音。ElevenLabs 在这个领域有着表现超常的声誉,特别是在创建定制语音或克隆您的声音方面。Speechify 是另一个主要参与者。

4.5 音频转录

这解决了文本转音频的问题。但是音频到文本(又称语音识别)呢?将现有视频或音频文件转录为文本文件有许多商业用途。想不出任何用途?那么试想一下,从你错过的(无聊的)两小时视频会议中提取音频。尽管当时你老板相信了你的狗吃了我的作业的借口,但你仍然需要通过观看会议的录像来重新掌握情况。

你没有不努力变得优秀和懒惰。所以这是你要反击那个邪恶命令的方法。你将录音提交给一个音频转录服务,该服务将为您提供包含完整脚本的文本文档。然后,您将脚本转换为 PDF 文件并将其上传到我们将在第五章中讨论的 ChatPDF 服务中。当 PDF 被上传时,您可以请求脚本的简短但准确的摘要。

更好的是,还有像 mindgrasp 的视频摘要工具这样的服务,可以一步完成所有这些。

一个提供简单但有效摘要的服务的例子是 Summarize.tech。为了测试它们,我将我自己的 YouTube 视频之一的地址输入到他们的 URL 字段中。几秒钟后,我就看到了这个简短但准确的摘要:

本视频讨论了与 AWS EC2 实例相关的安全漏洞。默认情况下,这些实例缺乏防火墙并且具有开放的安全组,使其容易受到攻击。讲师提供了一个真实的例子,演示了如何在几分钟内启动具有开放入站流量的 EC2 实例并收到登录尝试。他强调了在服务器功能和基础设施安全性之间取得平衡的重要性,这将是该课程的主要目标。

看到了吧?生活并不像你今早起床时看起来那么糟糕。

当然,还有用于转录音频的 API。其中两个是 OpenAI 的 Whisper 和 Google 的语音转文本。

Whisper 是一个会做很多花招的狗。除其他外,它可以处理语言识别、语音翻译和多语言语音识别等任务。与许多基于 GPT 的应用程序一样,Whisper 旨在使用有效的 OpenAI API 密钥在您自己的计算机上安装和运行 - 正如您已经看到的那样,可以在 OpenAI 网站上获取。

并且这并不会像你想象的那么复杂。在 Python 环境中,只需使用pip安装Whisper包:

pip install -U openai-whisper

你还需要开源视频/音频管理工具ffmpeg。以下是如何将其安装到基于 Debian/Ubuntu 的 Linux 系统中的步骤:

sudo apt update && sudo apt install ffmpeg

这是使其工作的代码:

import whisper

model = whisper.load_model("base")
result = model.transcribe("MyAudio.flac")
print(result["text"])

我们将使用base模型,将我们转录的文本(基于我使用的MyAudio.flac输入文件)写入变量result,然后显示结果。非常简单。而且非常准确!

当然,你可以使用所有常见的音频和视频文件格式作为输入,并从五种模型中选择(tiny、base、small、medium 和 large)。

4.6 生成音乐

我想在没有谈论人工智能生成的音乐之前,我不能继续了。我不仅仅是在谈论 ChatGPT 驱动的歌词,或者甚至是能够输出乐谱的软件,而是真正的音乐。这意味着软件可以让你指定细节,比如流派、你希望演奏的乐器、情感色彩、速度范围、拍子、调号和和声重复,然后会有真正的音乐出现。

正如你可能听说过的,其中一些服务还可以重新创作出著名歌手的几乎完美的声音,并让其演唱你自己的新音乐。使用这种声音的确切法律意义尚不清楚。

在线 AI 音乐生成工具-大多数主要用于使用不同的流派创建背景音乐,包括 AIVA、boomy、Soundful 和 Mubert。

最近,Meta(Facebook 的所有者)已经发布了两个音频生成工具作为开源项目。

  • MusicGen 会根据文本提示生成音乐。

  • AudioGen 会为你提供音效(想象一下:“警车鸣笛的繁忙街道"或者"风穿过树木”)。

此外,他们还发布了神经音频编解码器 EnCodec 和基于扩散的解码器 Multi Band Diffusion。你可以自由下载代码,但是,就像使用图像生成器一样,你需要大量的系统资源来使其正常工作。

4.7 总结

  • 我们了解了使用稳定扩散和中途旅程等服务生成数字图像(和视频)的方法。

  • 我们了解了可以使用 AI 将现有视频工件转换为新媒体的工具

  • 我们学习了如何使用 Gamma 等 AI 工具根据文本提示生成演示文稿堆栈。

  • 我们了解了使用 Amazon Polly 和 OpenAI Whisper 等工具进行音频转文本和文本转音频的方法。

4.8 试试看

为什么不使用本章中介绍的一些媒体生成工具制作一部原创培训视频呢?以下是你可能想要采取的步骤:

  • 选择一个主题(也许是"如何最大限度地利用生成式人工智能工具"),并为视频转录稿提示一个 LLM(三分钟的视频将需要大约 500 个文字)。

  • 作为 LLM,可以总结脚本,给出一组描述性的要点。

  • 使用 Gamma,选择创建新的 > 文本转换,并将你的要点粘贴到内容字段中。然后生成幻灯片。

  • 使用 Amazon Polly,从 LLM 创建的脚本生成一个解说文件。

  • 使用 Mubert 生成背景音乐。

  • 将你的叙述、幻灯片和背景音乐组合成视频,可以使用,比如,Vimeo 视频制作工具。

  • 最后,只是为了好玩,使用 Whisper 从视频的叙述音轨中提取文本转录,并看看它与原始脚本有多接近。

第五章:将数据提供给您的生成式 AI 模型

本章涵盖了

  • 基于本地数据存档构建索引,然后进行查询。

  • 将 PDF 文档上传到 ChatPDF 服务以像使用 ChatGPT 一样查询它。

  • 使用 ChatPDF API 对 PDF 查询过程进行脚本编制。

  • 使用 AutoGPT 工具让 GPT 引擎代理访问完整和开放的互联网。

在你不断试图从一直友好(偶尔令人震惊)的 AI 中挖掘秘密的新鲜感消失之前,只能持续那么长时间。毕竟,你实际上需要多少个完美简历的版本呢?你真的听到约翰·列侬唱着莎士比亚十四行诗会是什么样子吗?

一个 LLM 的真正力量在于它能够多快地处理 - 并且“理解” - 庞大的数据量。将其范围限制在训练期间显示的内容上将是一种遗憾。而且无论如何,你从你的 AI 处理你的数据的方式中所获得的价值要比从别人那里获得的更多。想象一下通过识别以下内容可以释放多少价值:

  • 健康记录中的模式和趋势

  • 数字网络访问日志中的威胁和攻击

  • 银行记录中的潜在金融机会或风险

  • 在供应链、基础设施和治理运营中引入效率的机会

  • 保险、税收或程序欺诈

  • 政府腐败(以及运营改进的机会)

所以,将 GPT 暴露给计算机上的东西,甚至更好的是暴露给互联网上的东西,是可能的吗?简短的答案是“是的”。对于长答案,也是如此。事实上,至少在我坐下来写这一章的几个小时前,有几种方法可以完成这项工作。在本章中,我将向您展示如何将 LLMs 深入到您的数据丰富的文档中,并将其传播到互联网上。

5.1 索引本地数据存档

即使是当前可用的 AI 系统的全部力量也很难想象。过去一年左右的时间里,我每天都听说有一些新的、疯狂创造性的使用方式的发现。但从我的角度来看 - 至少在历史的这一时刻 - 生成式 AI 的最大潜力在于其即时阅读、消化、组织然后解释大量原始数据的能力。

大型组织花费数百万美元建立和维护用于管理、解析和监视其运营定期产生的数百万字节数据的系统。数据库管理员和安全分析师不是便宜货。但是这些组织有什么选择呢?如果没有正确理解数据的方法,为什么一开始要生成所有这些数据呢?

那么,我们这些为不是“谷歌”、“亚马逊”或“xxxx 政府”命名的组织工作的人怎么办呢?我们的设备和数字活动可能产生它们自己的数据,这些数据可能会被读取。嗯,我们可能负担不起我们自己的 DB 管理员、安全分析师或数据分析师团队,但我们确实拥有大量的数据。LLMs 时代官方已经到来。

迭代的关键是将我们的数据连接到一个友好的 AI。我们将如何做到这一点呢?这将是 LlamaIndex 项目(我们在第三章已经见过了)。LlamaIndex 维护了开源的 GPTSimpleVectorIndex 模块以及一整套用于暴露您自己的数据给 GPT 的资源。

您可以在 LlamaIndex 的 Read the Docs 网站上阅读完整的文档指南。但是这里是一个简明的版本,将演示它在 Python 环境中的工作方式。

很有可能您已经安装了 Python 编程语言以及 Python 包管理器pip。您可以通过从命令行运行以下两个命令来确认这一点。以下是我运行它们时的样子:

$ python --version
Python 3.10.12
$ pip --version
pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)

如果您的系统还没有准备好,您应该转到本书末尾的安装 Python 附录。

一旦所有准备就绪,我们将为这个特定项目安装两个模块(osllama-index):

pip install os llama-index
专业提示!

如果 llama-index 操作失败,首先要解决的故障排除步骤是确保您安装了最新版本。您可以使用以下命令来执行这个步骤:

pip install llama-index --upgrade

现在我们将开始编写我们的 Python 代码。您可以通过导入os模块并添加您的 OpenAI 密钥来搭建您的启用了 GPT 的环境。由于 LlamaIndex 使用公共 OpenAI API,没有这个就什么都不会发生。

import os
os.environ['OPENAI_API_KEY'] = "Your_Key"

如果您还没有有效的 OpenAI API 密钥,请转到 API 参考页面并单击注册按钮。

下面的代码将导入所有的重活儿都交给的模块。pathlib将使我们的代码能够轻松找到我们在本地文件系统中保存数据的位置,GPTVectorStoreIndex处理由llama_index生成的表示我们数据的嵌入,download_loader处理我们将要使用的加载器文件。

from pathlib import Path
from llama_index import GPTVectorStoreIndex
from llama_index import download_loader

为了简化操作,您应该将想要进行 GPT 分析的所有文档都复制到 Python 代码运行的目录下的一个目录中。我选择将我的目录称为data,但您也可以使用任何您喜欢的名称。在本示例中,我从 Kaggle 网站下载了一个包含世界各国人口数量的 CSV 文件。 (这是我使用的数据集,尽管我将其重命名为population.csv。)

该代码将从population.csv文件中读取一个名为documents的变量,然后使用该数据构建一个适用于 GPT 的索引,该索引的名称将为index

SimpleCSVReader = download_loader("SimpleCSVReader")
loader = SimpleCSVReader(encoding="utf-8")
documents = loader.load_data(file=Path('./data/population.csv'))

index = GPTVectorStoreIndex.from_documents(documents)

然后我将我的查询作为query_engine.query方法的参数提交。只是为了演示 GPT 理解 CSV(“逗号分隔值”)数据和我提出的问题,我将询问 2010 年加拿大的人口。请注意,我的提示包含对 LLM 的说明,说明pop2010列包含何种类型的数据。这将大大增加它理解如何回答我的问题的可能性。

query_engine = index.as_query_engine()
response = query_engine.query("Given that the column with the \
	header `pop2010` contains country population data for the \
	year 2021, what was Canada's population in 2010")
print(response)

反应是正确的 - 尽管逗号有点奇怪:

Canada's population in 2010 was 3,396,341,2

让我们再进行一次请求。继续使用pop2010列,我想知道在 2010 年,哪个国家的人口最接近所有国家的人口的中位数。

query_engine = index.as_query_engine()
response = query_engine.query("Given that the column with the \
	header `pop2010` contains country population data for the \
	year 2010, which country in 2010 had the population that \
	was closest to the median of all countries?")
print(response)

这就是反馈的内容:波兰在 2010 年的人口最接近所有国家的中位数,有 38,597,353 人。

好吧,波兰 2010 年的人口确实是 38,597,353。但所有国家的实际中位数人口实际上超过 4900 万,这意味着缅甸是最接近的国家。公平地说,缅甸距离波兰只有八个位置。而 GPT 更倾向于文本分析而不是简单的数学运算是众所周知的。我想随着时间的推移,情况只会变得更好。

尽管如此,这是另一个看起来似乎理解我们意图的 LLM 的例子,但没有完全正确地完成任务。当然,这也是一个健康的提醒,始终手动确认您从人工智能获取的内容是否真实可信。

深入挖掘,你会发现 LllamaIndex 项目的更多内容。例如,Llama Hub 是一个包含代码片段的“加载器”存档,您可以使用这些代码片段将 Llama 连接到您自己维护在数百个流行框架中的数据,包括维基百科、Trello、Reddit 和 Jira。这些加载器简化了在广泛环境中为 GPT 提供对真实世界数据的访问的过程。

这不仅仅是对独立电子表格进行摘要。记住我在本章开头列出的用例场景,想象一下这种工具如何用于聚合多种格式的数据,然后对数据进行深度洞察。

5.2 使用私人数据启动聊天会话(ChatPDF)

让我给你举个例子,说明 GPT 在处理文本时比处理数字要好得多 - 至少目前是这样。我们将利用数不尽的企业之一,他们正在争相提供增值的基于 GPT 的服务。ChatPDF 提供了一个基于浏览器的界面,您可以上传并“与之交谈”任何 PDF 文档。

只需将浏览器指向 chatpdf.com,将 PDF 文档拖到下图中可见的标有“将 PDF 文件拖到此处”的框中,然后开始提问。它的工作原理就像 ChatGPT 会话一样。

图 5.1 ChatPDF 网页

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是那样有什么乐趣呢?相反,你完全可以将提示自动化并集成到复杂而高效的脚本中。为此,你需要通过单击页面底部的API链接时出现的对话框向 ChatPDF 请求 API 密钥。如果你获得了访问权限,你就可以准备好进行一些严肃的脚本编写了。

ChatPDF API 文档 - 至少在当前版本中 - 提供了 Node.js、Python 和 curl 请求的代码片段。对于本例,我将使用我们在第二章中看到的curl命令行数据传输工具。

在我们的情况下,使用curl发送 API 请求将需要两个步骤,这意味着你将运行两种curl命令的变体。以下是该过程的示意图:

图 5.2 使用 ChatPDF API 的请求/响应过程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是第一步的工作原理:

  • 使用指向 ChatPDF API 地址的 POST 方法进行 ChatPDF API 服务器的身份验证

  • 包含包含你的 API 密钥的-H参数(替换为sec_xxxxxx虚拟代码)

  • 添加-d参数以传递 ChatPDF 可以找到你想查询的 PDF 文档的 URL

这就是实际的代码:

curl -X POST 'https://api.chatpdf.com/v1/sources/add-url' \
     -H 'x-api-key: sec_xxxxxx' \
     -H 'Content-Type: application/json' \
     -d '{"url": \
     	"https://bootstrap-it.com/slidedeck_lpi_security.pdf"}'

在我示例代码中的那个 URL 指向一个真实的 PDF 文档。顺便说一下,这只是我最近发布的关于 LPI 安全基础认证的视频课程的一些幻灯片。但是,由于那个文档里面并没有太多的文本,你可能想用你自己的 PDF 替换它。

你也可以将该命令作为单行运行,但是将其格式化为多行使其更易读。在 Bash shell 会话中,请确保每行末尾的\反斜杠(告诉解释器命令将继续到下一行)是该行的最后一个字符。即使是一个不可见的空格字符也会搞乱一切。

如果该命令成功,它将返回一个sourceID值,这是你在以后查询 PDF 时将要使用的会话标识符。你将把该标识符粘贴到第二个curl命令中。在这个例子中,我们使用-d参数发送一个问题(“这个文档的主要话题是什么?”)

curl -X POST 'https://api.chatpdf.com/v1/chats/message' \
	-H 'x-api-key: sec_xxxxxx' \
	-H 'Content-Type: application/json' \
	-d '{"sourceId": "src_xxxxx", "messages": [{"role": "user", \
	"content": "What is the main topic of this document?"}]}'

这是我收到的响应:

响应

{“content”:“这个文档的主要话题没有在给定的页面上指定。但是,根据第 50 页列出的主题,似乎与网络协议、路由、风险类别和最佳实践有关。”}

这是一个更复杂的例子,基于我最近自己做的事情。

这一切都是为了解决一个长期存在的个人问题,这个问题让我受苦已经三十年了。你知道,我一直讨厌想出评估问题。这在我教高中的那些年里是真的,在现在更是如此。

AI 来拯救!为什么不将我正在创建的新视频课程的文字记录转换为一个 PDF 文档,看看 ChatPDF 的反馈是什么?

没问题,我按照之前展示的方法,精确地为 ChatPDF 添加了那个新的 PDF 文档。但这次请求有点复杂。你看,我需要确保获得的评估问题涵盖所有课题,并符合一些基本的格式要求。

我需要创建一个 Bash 脚本,用来逐个为每组课题发送 ChatPDF API 提示,然后将输出追加到一个文件中。这个图示可以帮助你理解我们这里正在做什么:

图 5.3 是使用具有独特、针对课题的请求来提供输入给 ChatPDF API 的流程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了解决第一个问题,我创建了一个包含所有课题的单个文本文件,每行大约有四到五个课题。然后我创建了一个 Bash 脚本,该脚本希望以该文本文件的名称作为单个参数来运行。从命令行运行脚本会像这样:

$ my_script.sh myfile.txt

下面是脚本本身:

# Read the file line by line
while IFS= read -r line; do
  # Construct the command using a heredoc
  command=$(cat <<EOF
    curl -X POST 'https://api.chatpdf.com/v1/chats/message' \
      -H 'x-api-key: sec_xxxxxx' \
      -H 'Content-Type: application/json' \
      -d '{
        "sourceId": "src_xxxxxx",
        "messages": [
          {
            "role": "user",
            "content": "Based on the information in the PDF file at \
            https://bootstrap-it.com/[...].pdf, create multi-select \
            assessment questions that include the question, five \
            possible answers, the correct answers (identified only \
            by number), and an explanation. The questions should \
            cover each of these topics: $line"
          }
        ]
      }' >> multi_select_raw
EOF
  )

  echo "Executing: $command"
  eval "$command"
done < "$1"

让我们将其分解为几个步骤。由于 curl 命令非常复杂,脚本将在 while 循环的一部分中遍历文本文件的所有行。

while IFS= read -r line; do

对于每次迭代,脚本会在 heredoc 格式的内部执行我们的 curl 命令。

curl 命令中的 content 参数定义了我希望 ChatPDF 格式化评估问题的方式。

"content": "Based on the information in the PDF file at \
	https://bootstrap-it.com/[...].pdf, create...

顺便说一句,我没有包含 PDF 的实际 URL - 你只能自己为这门课程付费!

最后,这个脚本将把每次迭代返回的评估问题追加到一个名为 multi_select_raw 的文件中(>> multi_select_raw)。输出是以 JSON 格式返回的,我需要对其进行一些处理才能使其达到我想要的格式。但我想这就是为什么他们付给我高额薪酬的原因吧。

仔细想想,我可能可以以一种形式或另一种形式使用 GPT 来为我进行格式设置。看看你能否自己弄清楚。

要点

在短聊天提示提供的上下文之外,你不必受限于使用 llama_index 和 ChatPDF(包括其 API)工具的使用。你可以使用尽可能多的源材料来训练 LLMs,以便获得对请求的知情回复。

5.3 连接你的 AI 到互联网(Auto-GPT)

这一章的最后一站将是大互联网本身。没错,我们要看看 GPT 在浪费宝贵时间观看可爱小猫视频方面是否比我们更擅长。此外,我们将看到是否让一台非常智能的 GAI 访问全球所有的知识能够带来一些有价值的回报。

我们将使用非常流行的 Auto-GPT 项目的 Python 代码 - 这些代码可以通过名为 Significant-Gravitas 的 GitHub 账户获得。

注意:

Git,如果您还没有正式介绍过,是一种去中心化的版本控制系统,用于跟踪软件项目中的文件更改。它允许多个开发人员协作,同时处理不同的功能,并无缝合并其更改。它提供了项目的完整历史记录,促进了代码审查,并在小型和大型软件开发项目中实现了高效的协作。GitHub是建立在 Git 之上的用于版本控制和协作的基于 Web 的平台。它为托管存储库、管理代码和促进开发人员之间的协作提供了一个集中的枢纽。

如果您尚未安装 Git,您可以在许多地方找到优秀的指南。

一旦这一切都完成了,运行以下git clone命令以下载和解压 Auto-GPT 软件:

git clone -b \
	stable https://github.com/Significant-Gravitas/Auto-GPT.git

对于许多操作而言,最少的配置就足够了,您将进入由git clone命令创建的Auto-GPT目录并编辑名为.env.template的隐藏文件。

在该文件中查找包含文本OPENAI_API_KEY=的行。确保该行已取消注释(即,在开头没有#),然后添加您的 OpenAI API 密钥。最后,将保存的.env.template文件的名称更改为.env(即,删除.template扩展名)。

有了这些,您就可以准备好了。虽然有许多配置设置可供您调整性能。您会在根目录(Auto-GPT)和其下的autogpt目录中找到配置文件。请记住有关诸如您在第二章(我们如何控制生成人工智能)中已经了解的Temperature等设置的详细信息。

启动 AutoGPT 可能就像这样简单:

python -m autogpt

但是,您可能想要查看Auto-GPT目录中的run.shrun.bat文件以查看备选方案。而且,和往常一样,官方文档将会很有帮助。

当 AutoGPT 启动时,您将被询问是否要重新加载先前会话的设置(如果这是您第一次使用该程序,则为预设默认值),还是您是否更喜欢开始新的。如果选择“new”,则将要求您提供“AI 名称”,您希望此 AI 扮演的角色的描述,然后是最多五个目标。抱歉。这在几天前确实是真的。但是,稳定性和可预测性并不与 AI 相容,不是吗?相反,只需输入一个(详细的)提示,您就可以开始了。

一旦您输入了您的目标,AutoGPT 将开始思考如何解决问题,并带着它的思考和建议回来。AutoGPT 很啰嗦。它会告诉您它对您给予它的任务的看法,它可能面临的潜在问题以及如何解决这些问题的方法。它还会呈现一个多步计划。所有这些讨论,默认情况下,都会保存到名为auto-gpt.json的 JSON 格式文件中的AutoGPT目录中。

默认情况下,它会等待您批准其计划的每个新步骤。或者,虽然存在一些风险,但您可以允许它执行,比如,下一个十个步骤而不需要询问许可,只需回复类似以下的内容:

Input: y -10

我应该指出,我即将描述的过程最终花费了我大约 3.00 美元的 OpenAI API 费用。

那么让我们看看我们能做些什么。我最近为我的业务进行了一些严肃的研究。我一直在考虑是否应该创建一本书和一门课程,涵盖相对较新的技术认证的目标。我的疑虑集中在这样一个问题上,即是否会有足够的学生需求来使我的新内容有用。

我要求 AutoGPT 使用互联网对这个特定认证的受欢迎程度进行排名,与其他几个较老的认证进行对比(我更有能力评估其价值)。以下是我提出请求的稍作修改的方式:

AI 名称:评估[…] 认证的受欢迎程度描述:评估[…] 认证的相对受欢迎程度,以了解哪一个可能对新认证学习指南课程最有利目标 1:比较以下认证计划的受欢迎程度:[…] 目标 2:估计潜在学生对每个认证计划的未来需求。 目标 3:估计每个认证计划的培训计划(如 Udemy 课程、图书)的潜在需求。 目标 4:使用 0-100 的比例估计每个认证的受欢迎程度,并将结果保存到本地文件中。 目标 5:关闭。

经过大约四个小时的独立思考、浏览和搜索后,AutoGPT 给了我一个文件,其中排名了三个认证(包括我正在考虑的新认证),得分介于 0 到 100 之间。为了了解背景,我复制了它生成的庞大原始输出(接近 20 万字节)并将其转换为 PDF 格式。然后我将 PDF 上传到 ChatPDF 以尝试了解更多关于方法论的内容。

在所有尘埃落定之后,我实际上对结果印象深刻。根据 AutoGPT 的过程中输出,它似乎利用了广泛的在线资源,包括社交媒体讨论、亚马逊评论以及深藏在各种相关组织网站中的内容。那四个小时似乎过得很慢,但我对所获得的内容很满意。

话虽如此,AutoGPT 有时会迷失方向。我面临的最常见(也是最令人沮丧)的问题是它倾向于一遍又一遍地失败于同样无益的操作。此时,如果代理程序只是在原地打转,那么最好的办法就是简单地关闭它。

谈到让 LLMs 访问互联网,ChatGPT(使用 GPT-4)偶尔可以被说服访问实时互联网 URL。尽管它有时候会在心情不好时变得暴躁。

5.4 总结

  • 我们使用 LlamaIndex 的GPTVectorStoreIndex来让 GPT 读取和分析本地托管的数据 - 这些数据可以包括 CSV 和 PDF 文件(等等)。

  • 我们使用 ChatPDF 来评估和查询我们自己的 PDF 文档,无论是通过网络界面还是通过 ChatPDF API 进行编程。

  • 我们使用 AutoGPT 创建了一个以 GPT 为引擎的代理,能够搜索互联网上的各种数据,以回答复杂的问题序列。

5.5 亲自尝试

确定一个包含 IT 相关认证计划的多个目标的 PDF 文件(也许是类似于 AWS 认证云从业者的东西)。

  • 将 PDF 文件提供给 ChatPDF 和 LlamaIndex,并要求详细总结考试目标。

  • 比较您得到的结果。

  • 请求 AutoGPT 总结该认证的目标。

第六章:提示工程:优化您的生成式 AI 体验

本章内容包括

  • 什么是提示工程

  • 提示工程最佳实践

  • 零样本和少样本提示

  • 为历史时间序列数据集提示 LLMs

我打赌,在真正打开这本书之前,许多 - 也许大多数 - 人都期望提示工程成为主要焦点。然而,我们现在已经到了第六章(书已经过半!)了,我们才刚刚涉及到这个话题?这是怎么回事?

作为我的辩护,我会说这在一定程度上取决于我们使用该术语的含义。对于一些人来说,“提示工程”包含了你通过与 ChatGPT 或 MidJourney 玩得开心来自己摸索出来的许多内容。这很重要,但不需要一整本书。

但我也会认为,到目前为止我给你的东西 - 以及剩下的章节 - 远远超出了提示。当然,你使用的措辞很重要,但我们正在发现的 API 和编程工具将大大拓展你的提示。

这里还有一件事。根据我的经验,随着 GPT 和其他生成式 AI 模型的改进,它们越来越擅长在你提供一个弱提示时找出你想要的东西。我数不清有多少次 GPT 成功地看穿了我的拼写和语法错误,措辞不当,甚至有时甚至是明显的技术错误。因此,许多流行的“提示工程”建议试图防止的问题,AI 本身已经可以轻松处理。

尽管如此,没有人想看起来像个白痴 - 即使唯一能看到的只是一个机器人。而且你永远不知道,甚至 AI 都无法弄清楚你真正想要什么。所以我会把整个章节都献给精心设计你的提示的艺术。我们将从一个有用的定义开始。

6.1 什么是提示工程?

在像 GPT 这样的语言模型的背景下使用的提示工程是一种有效引导模型响应并提高其性能的技术。它涉及制定特定的指令或查询,称为提示,以鼓励(甚至强制)模型产生所需的输出。

提示工程可以通过向模型提供明确的指令、上下文或约束来塑造模型的行为。通过精心构建提示,研究人员和开发人员可以影响模型的输出,并使其更一致、准确或与特定标准更好地对齐。

根据你想要实现的目标,有各种各样的提示工程策略。这些策略可能涉及:

  • 要求模型扮演特定角色(“你是一位专业的投资顾问”)

  • 指定模型响应的格式(“给我一个 .CSV 格式的响应”)

  • 要求模型逐步思考(“你能逐步向我介绍安装软件包 X 的过程吗?”)

  • 提供额外的上下文或背景信息(“这假定变量my_number的值是 10”)。

  • 使用系统消息(如错误消息)来指导模型的行为。

一个常见的技巧是使用“通过示范进行提示工程”,即开发者手动为一组示例输入生成期望的模型输出。然后根据这些数据对模型进行微调,使其能够泛化,并为将来的输入产生类似的响应。

重要的是要记住,提示工程是一个迭代的过程。这意味着你不能指望在第一次尝试时就得到想要的结果。相反,你需要进行实验,分析模型的初始行为,并根据反馈和评估来完善后续的提示。渐进式迭代的过程让你可以在保持输出控制的同时,利用语言模型的强大功能,确保其与您的意图和要求一致。

举个例子,如果你的 LLM 返回的编程代码不能正常工作,你可能需要使用迭代提示,而不是重复提出同样的问题。你可以复制并粘贴收到的任何错误消息,并询问如何避免这些错误。

6.2 提示工程最佳实践

这些建议基于官方 OpenAI 文档中找到的指导原则。

6.2.1 要具体

在提示中要慷慨地提供详细信息和描述。

告诉我关于量子力学的事情。

这样做可能不如这样:

在 200 字以内并且用 12 岁儿童可以理解的术语解释量子力学。

类似地,

给我的老板写一封电子邮件,要求加薪。

不如使用类似这样的提示更可能产生良好的结果:

给我的老板写一封礼貌但坚定的电子邮件,解释我辛勤工作和按时完成的项目如何为公司赢得了新客户。

6.2.2 要清晰

人工智能和人类一样喜欢清晰明了的提示。提示越明确,得到意外结果的可能性就越小。这个例子不一定是坏的:

根据提供的数据,列举所有提到的关键主题、论点和人名。

但你更有可能在第一次就获得成功,使用类似下面这样的提示:

根据提供的数据,列举所有提到的关键主题,然后是呈现的论点,最后是提到的每个人。

期望的格式:

主题:<用逗号分隔的列表>

论点:

人物:

6.2.3 避免不必要的词语

使用这种过于冗长的提示会增加误解和产生不佳结果的风险:

我在寻找关于 1970 年代早期最受欢迎的十款乘用车(按美国国内销售量)的相当长且详细的描述。

反而试试这样:

列举并描述 1970 年代早期美国销售量最高的十款汽车。

当我将这两个示例 - “额外冗长”和“简洁有力”的版本 - 都传递给 ChatGPT 时,我得到的结果都同样令人印象深刻。所以我认为这是我之前提到的 GPT 改进的很好说明。这也表明了提示工程这个话题作为一个整体的日益无关紧要。

6.2.4 将参考文本与您的说明分开。

您应该明确说明您的说明的结束位置以及任何您包含的参考文本的开始位置。这个例子可能行不通:

以下文本的作者是谁:我们只能看到前方的一小段距离,但我们可以看到有许多事情需要做。

但这可能会(注意使用了三重引号 - 虽然我不确定它们是否像以前那样重要)。

以下文本的作者是谁:

文本:“““我们只能看到前方的一小段距离,但我们可以看到有许多事情需要做。”””

顺便说一句,我相信你一定很好奇,这段文字的作者是阿兰·图灵。

6.2.5 要积极,而不是消极。

这在个人关系中也适用。但现在我们更关心您与您喜爱的生成式 AI 的相处方式。看起来 GPT 及其兄弟姐妹有时会因为这样的否定句而感到困惑:

当回应来自被锁定帐户的客户的以下请求寻求帮助时,请勿建议他们更新密码。

重新将提示转述为积极的可能会有所不同:

当回应来自被锁定帐户的客户的以下请求寻求帮助时,请不要建议他们更新密码,而是引导他们查阅可用的在线文档。

还有一些其他的 LLM 训练方法,可以应用在提升完成质量的具体提示上。我们接下来会看看这些。

总结

在撰写提示时,请记住要具体、清晰、简明,并且是积极的,并清晰地划分您的参考文本。

6.2.6 控制温度(随机性)

您可以直接在提示中嵌入温度:

生成一个以句子“这是一个黑暗而多雨的夜晚。”开始的创意独特的故事。使用温度设置为 0.8 以增加故事的一些随机性和创造力。

在这个例子中,温度设置为 0.8 表示生成的响应将具有适度的随机性和创造力。温度值越高,输出的变化和不可预测性就越多。您可以调整温度值来控制生成文本中随机性的数量。像 0.8 这样较高的值将产生更多样化和富有想象力的响应,而像 0.2 这样较低的值将产生更集中和确定性的响应。

6.3 零射和少射提示

零射和少射提示是自然语言处理(NLP)中用于生成响应或执行任务的技术,而无需对特定示例进行显式训练或仅使用有限数量的训练数据。

零样本提示是指模型能够为其尚未明确训练的任务提供有意义的响应或执行任务的能力。该模型能够从其训练数据中泛化以理解和响应新的输入或任务。通过使用提示或指令来引导模型的行为来实现这一点。例如,如果语言模型已经在各种主题上进行了训练,那么它仍然可以通过提供指定所需主题的提示来对新主题生成连贯的响应。

另一方面,少样本提示涉及使用仅有的少量标记数据或示例对模型进行训练。通过利用这些有限的训练数据,期望模型学会如何泛化并在未见过或新颖的示例上执行任务。当标记数据的可用性稀缺或需要快速调整模型以适应新任务时,这种方法就很有用。

零样本和少样本提示都利用了预训练和微调的方法论。在预训练阶段,模型在大型文本语料库上进行训练,以学习通用语言模式和表示。接着是微调,将预训练的模型进一步训练到特定任务或领域,使用有限的标记数据或提示。这种组合使模型能够表现出适应性,并以零样本或少样本的方式生成有意义的响应或执行任务。

这些技术已被证明在各种自然语言处理任务中非常强大,比如:

  • 文本分类

  • 问答

  • 总结

  • 语言翻译

  • 文本生成

它们使模型能够展示一定程度的理解,并且即使没有在特定示例上进行广泛训练,也能够在新的或未见过的输入上表现良好。

这是一个零样本提示的示例。

假设您有一个语言模型,已经在各种主题上进行了训练,但尚未明确在太空探索主题上进行过训练。使用零样本提示,您仍然可以生成关于太空的问题的连贯响应。例如,您可以提供以下提示:

太空探索中的关键挑战和成就是什么?

即使没有针对太空探索进行特定训练,该模型也可以通过利用其对该主题的一般知识和理解生成响应。

这是一个少样本提示的示例。

假设您有一个在大型文本语料库上进行了预训练但尚未进行情感分析微调的模型。但是,通过少样本提示,您可以在包含一些正面和负面情感示例的小型标记数据集上对模型进行训练。然后,该模型可以从这些有限的训练数据中泛化,并对新的、未见过的文本进行情感分析。

这是一个更通用的示例,展示了少样本提示可能的形式。我们首先会使用这些提示/完成示例来训练模型。

英文句子:“I love to travel.”

法语翻译:“J’adore voyager.”

英文句子:“The cat is sleeping.”

法语翻译:“Le chat dort.”

英文句子:“Where is the nearest train station?”

法语翻译:“Où se trouve la gare la plus proche?”

在这一点上,你已经“训练”了模型以预测你想要的结果类型。现在你已经准备好提交一个实际的提示了:

英文句子:“Can you recommend a good restaurant?”

法语翻译:

零样本和少样本提示都利用了模型从其预训练中概括的能力,并对新的输入或任务进行预测或执行任务,无论是最少还是没有具体训练。当 AI 工程师设计他们的 LLMs 时,它们是基本的工具,但相同的基本原则也可以用于我们自己的日常 AI 交互。

6.4 时间序列数据的提示:一个实际示例

当你认识一个碰巧完全掌握整个互联网的人时,从你们关系中创造新价值通常只是要足够有创意地提出正确的问题。正如一个人所做的,我最近有一种难以抑制的冲动,想要可视化服务器硬件组件的历史改进。容量增长是否在多年来保持一致?所有组件类别的容量增长速度是否相似?

但是我应该在哪里找到数据呢?我的好奇心不足以证明为了这个目的连续几个小时搜索供应商网站的存档版本是合理的。我的聪明“朋友”(我的意思是 GPT 或它的 LLM 堂兄弟之一)能帮我吗?

没有理由不尝试。这是我的提示:

给我每年 1994 年至 2021 年的开箱即用、顶级机架式服务器的基本规格。使用以下列显示输出:年份,时钟速度(GHz),最大内存(GB),总存储容量(GB)

由于我期望将输出加载到 Python 程序中,我想省点事,直接要求以逗号分隔的值(CSV)格式提供数据,使用我喜欢的确切列标题。我尝试过使用 ChatGPT 和 Perplexity Labs 的 LLM 服务器。令我惊讶的是,GPT 给了我看起来至少是合理的格式化 CSV 数据。出于某种原因,Perplexity 将"CSV"解释为"Markdown",但修复这个问题并不是什么大问题。

数据本身(以及以下示例中使用的代码)可在该书的 GitHub 存储库的一部分中找到。

6.4.1 数据可视化

当然,正确地可视化我的数据对于评估输出是否合理以及如果合理的话可能给我带来什么见解至关重要。但是,正如我将向您展示的,您可视化这些数据的方式将决定您对其的理解程度。让我通过向您展示如何使用归一化和非归一化数据生成图表来解释一下。

标准化指的是将数据值调整到一个共同的比例或标准,通常是为了方便不同数据点之间的有意义比较。这是数据可视化和分析中常用的技术,可以消除数据中不同比例或单位的影响,从而更容易识别出模式和趋势。在我们的案例中,这很重要,因为用于测量 CPU 时钟频率(GHz)的单位的规模与用于测量内存(GB)和存储(也是 GB)的单位非常不同。

标准化有助于确保保留数据中的相对关系和变化程度,同时消除不同比例的影响。这在比较来自不同来源的数据或在同一图表上可视化具有不同单位或比例的数据时特别有用。

最小最大缩放,也被称为最小最大标准化,是一种数据标准化方法,用于将数据转化为特定范围,通常在 0 到 1 之间。最小最大缩放的目的是标准化数据的值,使其更具可比性,并适用于各种数据分析和机器学习技术。

最小最大缩放的工作原理如下:

  1. 找到要标准化的特征数据集中的最小值(min)和最大值(max)。

  2. 对于该特征中的每个数据点,应用以下公式将其缩放到范围[0,1]:

  3. 缩放值 = (原始值 - 最小值)/(最大值 - 最小值)

每个数据点的结果“缩放值”将落在 0 到 1 的范围内,其中 0 表示数据集中的最小值,1 表示最大值。

最小最大缩放在想要保留数据点之间的关系和比例同时确保所有值都在一致比例上时特别有用。它广泛应用于各种数据分析和机器学习任务中,特别是在神经网络、k-means 聚类或支持向量机等算法对输入特征的比例敏感时。

为了说明,假设您有一个数据集,代表了员工的薪水范围从 40,000 美元到 100,000 美元。您还有代表每个员工的工作年限的数据 - 范围从 2 到 20 年。您想使用最小最大缩放对这些值进行标准化。

没有最小最大缩放,薪水值可能在 40,000 到 100,000 的范围内,而工作经验可能在 2 到 20 的范围内。薪水和工作经验的数据点将处于非常不同的比例上。

现在,如果您将最小最大缩放应用于这两个特征,您可能会将值缩放到 0 到 1 的范围内。因此,50,000 美元的薪水可能缩放为 0.25,而 10 年的工作经验可能缩放为 0.5。

这是我们将在此处使用的工具。但首先,我将向您展示使用非标准化数据进行绘图后得到的结果,这样您就可以亲眼看到为什么标准化是有帮助的。

6.4.2 在不进行标准化的情况下绘制时间序列数据

列表 6.1. 展示了生成我们数据的非标准化图形的完整代码。自己仔细看一下,试着理解正在发生的事情,然后我们将逐个部分地进行解释。

列表 6.1 可视化时间序列而不进行归一化
import pandas as pd
from matplotlib import pyplot as plt

df_all = pd.read_csv('AllServers.csv')

plt.figure(figsize=(10, 6))  # Set the figure size

#1
years = df_all['Year'].to_numpy()
clock_speed = df_all['Clock Speed (GHz)'].to_numpy()
max_ram = df_all['Maximum RAM (GB)'].to_numpy()
drive_capacity = df_all['Total Drive Capacity (GB)'].to_numpy()

#2
plt.plot(years, clock_speed, label='Clock speed (GHz)')
plt.plot(years, max_ram, label='RAM (GB)')
plt.plot(years, drive_capacity, label='Storage (GB)')

#3
plt.xlabel('Year')
plt.ylabel('Values')
plt.title('System Specifications Over Time')

#4
plt.legend()

#5
plt.grid(True)
plt.show()

让我们逐步了解该代码。像往常一样,我们首先导入所需的库。Pandas 将处理数据本身,matplotlib 将帮助我们制作图形。然后我们将 CSV 数据文件导入到数据框中。

import pandas as pd
from matplotlib import pyplot as plt
df_all = pd.read_csv('AllServers.csv')

我将定义图形的尺寸(或者,因为通常是这样描述的),最终我会生成。尽管可以尝试使用替代值来进行实验,看看会有什么变化。但这些应该是完全可行的。

plt.figure(figsize=(10, 6))  # Set the figure size

我们将使用 NumPy 工具来获取每列并将其转换为 NumPy 数组 - 这是一种可用于绘制图形/图的数据格式。我们将从每列数据创建的数组命名。例如,列 df_all['Year'] 将被称为 years

years = df_all['Year'].to_numpy()
clock_speed = df_all['Clock Speed (GHz)'].to_numpy()
max_ram = df_all['Maximum RAM (GB)'].to_numpy()
drive_capacity = df_all['Total Drive Capacity (GB)'].to_numpy()

由于 years 将被用作我们的 x 轴,现在我将绘制其他三个 NumPy 数组。每个数组都将与 years 值关联,并被赋予一个显示标签,如:label='时钟速度 (GHz)'

plt.plot(years, clock_speed, label='Clock speed (GHz)')
plt.plot(years, max_ram, label='RAM (GB)')
plt.plot(years, drive_capacity, label='Storage (GB)')

为了使图形更易读,我们将在 x 轴和 y 轴上添加标签,并给图形本身加上一个标题。我们还将添加一个彩色编码的图例,这样我们就能迅速理解哪条图线代表哪列数据。

plt.xlabel('Year')
plt.ylabel('Values')
plt.title('System Specifications Over Time')

plt.legend()

最后,我们将触发并生成图形本身:

plt.grid(True)
plt.show()

这就是它的全部内容:

图 6.1 使用非标准化数据可视化的硬件组件数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

除了在纸质书籍中阅读本书的人很难区分彩色编码的图线外,这里还有另一个更严重的问题。粗略一看,我们会得出结论,自 1994 年以来处理器时钟速度根本没有改进。但这是荒谬的。

数据本身显示的是在那段时间内平均时钟速度从 1 GHz 增加到 11 GHz。最后那个数字 (11) 很奇怪。我不知道地球上有哪款处理器能以 11 GHz 运行。我怀疑 Perplexity LLM 正在考虑多核系统的扩展,并简单地将每个可能安装在系统上的并行核心的最大速度相加。但无论如何,为什么这种增长没有显示在我们的图线上呢?

答案是 1 GHz 和 11 GHz 之间的差异与 32 GB 和 6,144,960 GB 之间的差异完全不同。这一切都与规模有关。要解决这个问题,我们需要对数据进行归一化处理。

6.4.3 对时间序列数据进行归一化处理的图形化

您会立即注意到列表 6.2 中的代码与之前的非标准化示例有很大的不同。第一个区别是我们从 Sclikit-learn 库中导入了MinMaxScaler模块。然后请浏览整个代码,然后我们将逐个部分地处理其余的代码。

列表 6.2 使用标准化可视化时间序列
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.preprocessing import MinMaxScaler

df_servers = pd.read_csv("AllServers.csv")

#1
years = df_servers['Year'].values
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform\
	(df_servers.drop(columns=['Year']))

#2
plt.figure(figsize=(10, 6))

#3
for i, column_name in enumerate(df_servers.columns[1:]):
    plt.plot(years, normalized_data[:, i], label=column_name)

#4
plt.xlabel('Year')
plt.ylabel('Normalized Values')
plt.title('"All Servers" (Normalized) Specs Over Time')

#5
plt.legend()

#6
plt.grid(True)
plt.show()

我们以与之前相同的方式从Year列中提取数据。这些值作为它们本身就可以使用。但是我们将通过应用MinMaxScaler模块(标识为scaler)将其他列的数据进行标准化。我们将将经过神奇变换的数据赋给变量normalized_data

years = df_servers['Year'].values
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform\
	(df_servers.drop(columns=['Year']))

然后,我们将遍历每列数据(for i, column_name)并将它们的数据与years数据绘制在一起。然后生成这些数据(plt.plot)。label=column_name参数将每个三个常规数据列的现有名称应用于我们正在生成的标准化数据。

for i, column_name in enumerate(df_servers.columns[1:]):
    plt.plot(years, normalized_data[:, i], label=column_name)

最后,和以前一样,我们设定标签和标题,添加图例,然后生成图形。下面是它的样子:

图 6.2 使用标准化数据可视化的硬件组件数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是一个巨大的改进。我们展示了三个组件类别的相对稳定的增长趋势。需要记住的是,绘图线的标准化也是不完美的。这是因为所有三条绘图线的起点和终点分别设定为 0 和 1。因此,通过观察这个图表,将无法判断任何一个类别是否比其他类别增长得更快。但是,鉴于这个限制,我们应该能够在视觉上发现任何显著的趋势-比如 2009 年至 2013 年左右存储能力看似未增长。

当然,这是人工智能生成的数据,所以不要认为它们全部正确。不要根据这些数字来进行投资。

6.5 总结

  • 提示工程技术可用于准确引导 LLM 以满足我们特定的需求。

  • 基本的提示工程最佳实践包括具体、清晰、简洁和积极。

  • 少数示例提示可以使用示例来教导模型你想要的结果种类。

  • LLM 可以要求估计真实世界的时间序列数据,然后可以探索两种方式对数据进行可视化(标准化和非标准化)。

6.6 请你自己试试

用一个简单的“一次性”问题(例如“为 IT 支持专业人员和无经验的客户之间的对话编写一个剧本”)来提示您最喜欢的 LLM。然后,再次要求相同的对话,但这次使用一个少数示例前缀开始请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值