ChatGPT-生成式-AI-实用指南---第2版-早期预览--一-
ChatGPT 生成式 AI 实用指南 - 第2版(早期预览)(一)
原文:Practical Generative AI with ChatGPT - 2nd Edition (Early Access)
译者:飞龙
ChatGPT 生成式 AI 实用指南 - 第2版(早期预览)
欢迎来到 Packt 早期访问。在本书上市之前,我们为您提供独家预览。撰写一本书可能需要几个月,但我们的作者今天就有尖端信息可以与您分享。早期访问通过提供章节草稿,让您洞察最新进展。目前这些章节的内容可能还有些粗糙,但作者将随着时间的推移对其更新。
您可以随时翻读这本书,也可以从头到尾学习;早期访问的设计非常灵活。我们希望您喜欢了解更多关于编写 Packt 书的过程。
-
第 1 章:生成式 AI 简介
-
第 2 章:介绍 OpenAI 和 ChatGPT
-
第 3 章:从提示词设计到提示词工程
-
第 4 章:使用 ChatGPT 提升日常生产力
-
第 5 章:使用 ChatGPT 开发未来
-
第 6 章:使用 ChatGPT 掌握营销
-
第 7 章:使用 ChatGPT 重塑研究
-
第 8 章:使用 ChatGPT 释放视觉创造力
-
第 9 章:探索 GPTs
-
第 10 章:利用 OpenAI 模型及其 API 实现企业级应用
-
第 11 章:趋势用案例
-
第 12 章:结语与最后思考
1 生成式 AI 简介
在 Discord 上加入我们的书籍社区
你好!欢迎来到ChatGPT 和 OpenAI 终极指南!在本书中,我们将探索迷人的生成式人工智能(GAI)世界及其突破性的应用。生成式 AI 改变了我们与机器交互的方式,使计算机能够在没有显式人类指令的情况下创建、预测和学习。自 2023 年 11 月ChatGPT发布以来,我们见证了自然语言处理、图像和视频合成以及许多其他领域前所未有的进步。无论您是好奇的初学者还是经验丰富的从业者,本指南都将为您提供知识和技能,帮助您在激动人心的生成式 AI 领域中穿行。因此,让我们深入研究,从我们所处环境的一些定义开始。
本章提供了生成式 AI 领域的概述,该领域由使用机器学习(ML)算法创建新的独特数据或内容组成。
它重点关注生成式 AI 在各个领域的应用,如图像合成、文本生成和音乐创作,强调了生成式 AI 变革各行业的潜力。这一关于生成式 AI 的介绍将为该技术的所在位置提供背景,以及将其置于广阔的 AI、ML 和深度学习(DL)世界中的知识。然后,我们将通过具体的示例和近期进展,深入探讨生成式 AI 的主要应用领域,让您可以熟悉它对企业和整个社会可能产生的影响。
此外,了解通往当前生成式 AI 领先水平的研究历程,将让您能够更好地理解近期进展和顶尖模型的基础。
对于所有这些内容,我们将涵盖以下主题:
-
理解生成式 AI
-
探索生成式 AI 的领域
-
生成式 AI 研究的历史和现状
在本章结束时,您将熟悉生成式 AI 这一激动人心的世界、它的应用、背后的研究历史以及现状,这些发展可能已经且目前正在对企业产生颠覆性的影响。
介绍生成式 AI
AI 近年来一直取得了显著进展,其中增长相当大的领域之一就是生成式 AI。生成式 AI 是 AI 和 DL 的子领域,侧重于使用 ML 技术在现有数据上训练算法和模型来生成新内容,如图像、文本、音乐和视频。
为了更好地理解 AI、ML、DL 和生成式 AI 之间的关系,请将 AI 视为基础,而 ML、DL 和生成式 AI 代表了日益专业和专注的研究与应用领域:
-
AI 代表创建可以执行任务的系统的广泛领域,展示出人类的智能和能力,并能够与生态系统交互。
-
ML 是一个分支,专注于创建算法和模型,使这些系统能够随着时间和训练而进行自我学习和改进。ML 模型从现有数据中学习,并随着增长自动更新其参数。
-
DL 是 ML 的一个子分支,因为它包含了深度 ML 模型。这些深度模型被称为
神经网络,特别适用于训练应用或自然语言处理(NLP)等领域。当我们谈论 ML 和 DL 模型时,通常指的是判别式模型,其目标是在数据之上进行预测或推断模式。 -
最后,我们得到了生成式 AI,它是 DL 的进一步子分支,它不使用深度人工神经网络对现有数据进行聚类、分类或预测:它使用那些强大的人工神经网络模型来生成全新的内容,从图像到自然语言,从音乐到视频。
接下来的图表显示了这些研究领域之间的相互关系:
图 1.1 – AI、ML、DL 和生成式 AI 的关系
生成式 AI 模型可以在海量数据上进行训练,然后它们可以根据数据中的模式生成新的示例。这种生成过程与判别式模型不同,后者的目标是预测给定示例的类别或有标签输出。
具有生成式 AI 特性的神经网络类型被称为大基础模型(LFMs),对于ChatGPT这样的语言模型,我们称之为大语言模型(LLMs)。
大语言模型是一种以 Transformer 架构为特征的人工神经网络。它们的特点是具有海量的参数(以万亿计),并已在数十亿词汇上进行过训练。给定训练集,LLMs 能够理解并生成自然语言。
尽管文本理解和生成可能是生成式 AI 最突出的特征之一,但该领域涵盖了许多领域。
生成式 AI 的领域
近年来,生成式 AI 取得了显著进展,并将其应用扩展到广泛的领域,如艺术、音乐、时尚、建筑等。在某些领域中,它确实改变了我们创造、设计和理解周围世界的方式。在其他领域,它正在改进并使现有的流程和操作更加高效。
生成式 AI 被应用于许多领域这一事实意味着它的模型可以处理不同类型的数据,从语言到音频或图像。让我们了解生成式 AI 如何处理不同类型的数据和领域。
文本生成
生成生成式 AI 的最大应用之一(也是我们在书中涵盖最多的部分)是它在自然语言产生新内容的能力。事实上,生成式 AI 算法可以用于生成新的文本,如文章、诗歌和产品描述。
例如,由 OpenAI 开发的 GPT-4o 等语言模型可以在生成文本数据上进行训练,然后用于生成不同语言(包括输入和输出)的新的、连贯且符合语法的文本,并从文本中提取相关特征,如关键词、主题或全文摘要。
以下是一个使用 GPT-3 的示例:
图 1.2 – ChatGPT 响应用户提示的示例,并添加了引用
接下来,我们将转向图像生成。
图像生成
生成式 AI 在图像合成领域最早且最为人知的例子之一,是 I. Goodfellow 等人在 2014 年的论文《生成对抗网络》(Generative Adversarial Networks)中引入的生成对抗网络(GAN)架构。GAN 的目的是生成与真实图像无区分的真实图像。这种能力具有许多有趣的业务应用,例如为训练计算机视觉模型生成合成数据集、生成真实的商品图像,以及为虚拟现实和增强现实应用生成真实的图像。
以下是一些并不存在的人脸示例,因为它们完全是由 AI 生成的:
图 1.3 – 在 https://this-person-does-not-exist.com/en 由 GAN StyleGAN2 生成的虚构脸庞
然后,2021 年,OpenAI 在该领域引入了新的生成式 AI 模型 DALL-E。与 GANs 不同,DALL-E 模型设计用于根据自然语言描述生成图像(GANs 以随机噪声向量输入),并可以生成广泛的图像,这些图像可能并不看起来真实,但仍描绘所需的概念。
DALL-E 在广告、产品设计和时尚等创意产业中具有巨大的潜力,可以创建独特且创意的图像。
自首次发布以来(2024 年 12 月),DALL-E 有了巨大的改进,如下例所示。让我们看看下文由 DALL-E 在其诞生之初创作的一件艺术作品:
图 1.4 – 以自然语言提示作为输入 DALL-E 生成的图像
现在让我们看看 DALL-E3(本书编写时的最新版本)可以产生什么(在这里我使用了 Microsoft Image Creator,你可以在 copilot.microsoft.com/images/create 尝试它):
图 1.5 – 以自然语言提示作为输入 DALL-E3 生成的图像
看到这个模型在不到 18 个月内的改进水平令人印象深刻。有趣的是,我们仅仅接触到了过去几个月生成式 AI 领域发生的巨大改进的冰山一角。
音乐生成
音乐生成的生成式 AI 早期方法可以追溯到 50 年代,源于算法作曲领域的研究,这是一种使用算法生成音乐作曲的技术。事实上,1957 年,Lejaren Hiller 和 Leonard Isaacson 创建了《伊利亚克弦乐四重奏》(Illiac Suite for String Quartet)(www.youtube.com/watch?v=n0njBFLQSk8),这是第一首完全由 AI 作曲的音乐。以来,音乐生成式 AI 一直是几十年来持续的研究课题。在近年的发展中,新的架构和框架已经在公众中普及,例如 Google 在 2016 年引入的 WaveNet 架构,它能够生成高质量的音频样本;或者同样由 Google 开发的 Magenta 项目,它使用循环神经网络(RNNs)和其他机器学习技术来生成音乐和其他艺术形式。然后,在 2020 年,OpenAI 也宣布了 Jukebox,这是一种生成音乐的神经网络,可以在风格、流派、参考艺术家等方面进行自定义。
这些和其他框架构成了许多用于音乐生成的 AI 作曲助手的基础。例如是由 Sony CSL Research 开发的 Flow Machines。这个生成式 AI 系统在大型音乐作品数据库上进行训练,以创建各种风格的新音乐。它被法国作曲家 Benoît Carré 用于创作一张名为 Hello World 的专辑(www.helloworldalbum.net/),该专辑包含了与多位人类音乐家的合作。
在这里,你可以看到完全由 Music Transformer 生成的曲目示例,它是 Magenta 项目中的模型之一:
图 1.6 – Music Transformer 允许用户收听 AI 生成的音乐表演
音乐领域中生成式 AI 的另一个惊人应用是语音合成。确实可以找到许多 AI 工具,根据文本输入以知名歌手的声音创建音频。
例如,如果你一直想知道你的歌曲由凯尼·韦斯特演唱是什么样,甚至可以使用 FakeYou.com(fakeyou.com/)或 UberDuck.ai(uberduck.ai/)来试验:
图 1.7 – 使用 UberDuck.ai 进行语音合成
我必须说,结果非常令人印象深刻。如果你想玩玩,还可以尝试你最喜爱的卡通声音,例如维尼的配音……让我们更进一步。如果我们能从零开始生成一首歌,只需让生成式 AI 这样做会怎样?嗯,现在我们可以无缝地做到,而无需任何音乐知识。在音乐市场兴起的生成式 AI 产品中,一个好的例子是 Suno,它的使命是“……我们正在建立一个任何人都能创作绝佳音乐的未来。无论你是浴室歌手还是榜单艺术家,我们都打破了你与梦想歌曲之间的障碍。不需要乐器,只需要想象力。”(来源:suno.com/about)。
你能相信这成了我 2024 年夏季的热单吗?如果你也想创作自己的夏季热门单曲,可以在 suno.com/create 免费尝试。
视频生成
视频生成的生成式 AI 在发展时间线上与图像生成相似。事实上,视频生成领域的一个关键进展之一是生成对抗网络的发展发展。得益于它们在生成真实图像方面的准确性,研究人员已开始将这些技术应用于视频生成。基于 GAN 的视频生成的著名例子之一是 DeepMind 的 Motion to Video,它从单张图像生成高质量视频。另一个很棒的例子是 NVIDIA 的视频转视频合成(Vid2Vid)深度学习框架,它使用 GANs 从输入视频合成生成高质量视频。
Vid2Vid 系统能够生成时间一致的视频,这意味着它们在时间推移过程中保持平滑且真实的运动。该技术可以执行各种视频合成任务,例如:
-
将视频转换为另一个领域(例如将白天视频转换为夜晚视频,或将素描转换为真实的图像)
-
修改现有视频(例如,更改视频中对象的样式或外观)
-
从静态图像创建新视频(例如,使一系列静态图像动画化)
2022 年 9 月,Meta 的研究人员宣布了 Make-A-Video(makeavideo.studio/)的开放可用,这是一种新的 AI 系统,允许用户将自然语言提示转换为视频片段。在这些技术背后,你可以识别出我们到目前为止在其他领域提到的许多模型:用于提示的语言理解、结合图像生成实现的图像和生成运动生成,以及由 AI 作曲家制作背景音乐。
现在,我们上面提到的所有内容与最新的文本转视频模型相比都相形猔拙。例如,OpenAI 在 2024 年 2 月宣布了一种名为 SORA 的新型文本到视频模型,并发布了一些出乎意料的早期实验:
图 1:根据自然语言提示由 SORA 生成的视频。来源:https://openai.com/index/sora/
我非常建议你访问 SORA 网页查看它创建的惊人视频。在撰写本文时,SORA 尚未公开可用,因为它正在接受 OpenAI 红队运行的多项测试。
总的来说,生成式 AI 多年来影响了许多领域,某些 AI 工具已经能够持续支持艺术家、机构和普通用户。未来看起来非常有前景;然而,在跳转到目前市场上最顶尖的模型之前,我们首先需要深入了解生成式 AI 的根源、其研究历史以及最终导致当前 OpenAI 模型的最新进展。
研究的历史与现状
在之前的章节中,我们概述了生成式 AI 领域最新、最前沿的技术,这些都是在几年内开发的。然而,该领域的研究可以追溯到几十年前。
我们可以将生成式 AI 领域研究的起点标记在 20 世纪 60 年代,当时 Joseph Weizenbaum 开发了聊天机器人 ELIZA,这是 NLP(自然语言处理)系统的早期示例之一。它是一个基于规则的简单交互系统,旨在根据文本输入的响应与用户进行交互,为 NLP 和生成式 AI 的进一步发展铺平了道路。然而,我们知道现代生成式 AI 是深度学习(DL)的一个子领域,尽管第一个人工神经网络(ANNs)早在 20 世纪 40 年代就被引入,但研究人员面临着许多挑战,包括计算能力有限以及对大脑生物基础缺乏了解。因此,ANNs 直到 20 世纪 80 年代才获得广泛关注,当时除新硬件和神经科学的发展外,backpropagation(反向传播)算法的出现也促进了ANNs的训练阶段。事实上,在反向传播出现之前,训练神经网络是非常困难的,因为无法高效地计算误差相对于每个神经元的参数或权重的梯度,而 backpropagation 使得自动化训练过程成为可能,并实现了 ANNs 的应用。
随后,到 2000 年代和 2010 年代,计算能力的提升加剧了海量的可用训练数据,使得深度学习更具实用性并对公众开放,随之推动了研究的增长。
2013 年,Kingma 和 Welling 在他们的论文 Auto-Encoding Variational Bayes中引入了一种新的模型架构,被称为变分自动编码器(VAEs)。VAEs 是基于变分推理概念的生成模型。它们提供了一种通过数据的紧凑表示进行学习的方法,将数据编码到低维空间(称为潜空间,通过 encoder 编码器组件),然后将其解码回原始数据空间(通过 decoder 解码器组件)。
VAEs 的关键创新在于引入了潜空间的概率解释。encoder 不再学习输入到潜空间的确定性映射,而是将输入映射到潜空间上的概率分布。这使得 VAEs 可以通过从潜空间中采样并将样本解码到输入空间来生成新样本。
例如,假设我们想训练一个 VAE,它可以创建看起来像真实的猫和狗的新图片。
为了做到这一点,VAE 首先接收一张猫或狗的照片,将其压缩成一组较小的数字,这些数字代表了图片最重要的特征。这些数字被称为潜变量。
然后,VAE 获取这些潜变量并使用它们创建一张看起来像真实的猫或狗的照片。这张新图片可能与原始消息有些不同之处,但它看起来应该属于同一组图片。
VAE 随着时间的推移,通过将其生成的图片与真实图片进行比较并调整其潜变量,使生成的图片看起来更真实,从而得到提升。
生成式 AI 的演进与现状
VAEs 为生成式 AI 领域的快速发展铺平了道路。事实上,仅 1 年后,Ian Goodfellow 就引入了 GANs(生成对抗网络)。与主要元素为 encoder 和 decoder 的 VAEs 架构不同,GANs 由两个组成——generator(生成器)和 discriminator(判别器)——它们在了一个零和博弈中相互对抗。
generator 创建伪数据(对于图像而言,它创建一张新图像),目的是看起来像真实数据(例如,猫的照片)。discriminator 接收真实数据和伪数据,并试图区分它们——在我们艺术伪造者的例子中它就是 critic(评论家)。
在训练期间,generator 尝试创建能够欺骗 discriminator 认为其为真实的数据,而 discriminator 则试图变得更好地区分真伪数据。这两个部分在一个被称为对抗训练(adversarial training)的过程中被共同训练。
随着时间的推移,generator越来越擅长创建看起来像真实数据的伪数据,而 discriminator 越来越擅长区分真伪数据。最终,generator 创建伪数据的能力变得非常强大,以至于即使是 discriminator 也无法区分真伪数据。
这是一个完全由 GAN 生成的人脸示例:
图 1.8 – GAN 生成的写实脸(取自 Progressive Growing of GANs for Improved Quality, Stability, and Variation, 2017: https://arxiv.org/pdf/1710.10196.pdf )
两种模型——VAEs 和 GANs 的目的是生成与原始样本无法区分的新数据,而且自诞生以来,它们的架构不断改进,并伴随着新模型如 Van den Oord 团队提出的 PixelCNNs 以及 Google DeepMind 开发的 WaveNet 的发展,推动了音频和语音生成的进步。
另一个伟大的里程碑是 2017 年,当时 Google 研究人员在论文中引入了一种名为 Transformer 的新架构——Attention Is All You Need。它在语言生成领域具有革命性,因为它在允许并行处理的同时保留了语言上下文的记忆,性能优于此前基于 RNN 或 长短期记忆(LSTM)框架的语言模型尝试。
Transformer 确实是名为 Bidirectional Encoder Representations from Transformers(BERT)的大规模语言模型的基础,该模型由 Google 于 2018 年引入,并迅速成为 NLP 实验的基准。
Transformer 也是 OpenAI 引入的所有 Generative Pre-Trained(GPT)模型的基础,包括 ChatGPT 背后的模型 GPT-3,以及其他大型基础模型(Large Foundation Models)。
尽管在这些几年取得了大量的研究和成就,但直到 2022 年下半年,公众的注意力才开始转向生成式 AI 领域。
并非巧合,2022 年被称为“生成式 AI 之年”。这一年,强大的 AI 模型和工具在普通民众中变得普及:基于扩散的图像服务(MidJourney、DALL-E 2 和 Stable Diffusion)、OpenAI 的 ChatGPT、文本生成视频(Make-a-Video 和 Imagen Video)以及文本生成 3D 工具(DreamFusion、Magic3D 和 Get3D)都向个人用户开放,有时甚至是免费的。
这产生了颠覆性的影响,原因有二:
-
一旦生成式 AI 模型在公众中普及,每个个人用户或组织都有可能尝试并欣赏其潜力,即使他们不是数据科学家或 ML 工程师。
-
这些新模型的输出及其嵌入的创造力在客观上是令人惊叹的,而且往往令人担忧。一种针对个人和政府的、适应变革的紧迫呼声随之而起。
因此,在不久的将来,我们可能会见证个人使用和企业级项目采用 AI 系统的激增。
18 个月后:主要趋势与创新
从 2022 年 11 月到今天,我们见证了生成式 AI(GenAI)领域海量的创新。这些创新许多与向公众开发并发布的全新模型有关,例如 OpenAI 的 GPT-4o 和 DALL-E3,以及 Google 的 Gemini、Meta 的 Llama 3、微软的 Phi3 等。
然而,最引注目的成就可能在于我们与这些模型交互以及围绕它们构建应用程序的方式。在本节中,我们将探索标记了生成式 AI 应用最流行的参考架构的三大主要进展。
检索增强生成(Retrieval Augmented Generation)
ChatGPT 以及广义上的 LLMs 的早期局限性之一是知识库截止。事实上,LLMs 的知识局限于它们训练过的训练集(由互联网上的公共信息组成),只要这些信息不是详尽的,它们就是过时的。此外,它们还缺少可能与我们或我们的组织相关的私有知识库。例如,如果你问 ChatGPT “我们公司员工健康保险的政策是什么?”,模型将无法回答,因为它无法访问这些信息。
为了绕过这一局限,设计了一种新框架,允许 LLMs 导航我们提供的自定义文档。这个框架被称为检索增强生成(RAG)。
RAG 背后的思想是将 LLM 与我们想要导航的知识库解耦。为了实现这一点,外部知识库需要通过一个名为 embedding(嵌入)的过程转换为数值向量,并存储在专门的 Vector Database(向量数据库)中。
嵌入是在低维空间(如向量)中表示高维非数值数据(如单词或句子)的方法。文本嵌入可以捕捉文本的语义和语法特征,例如含义、上下文和相似性。
每个嵌入都是一个浮点数向量,使得向量空间中两个嵌入之间的距离与原始格式中两个输入之间的语义相似性相关。
例如,如果两个概念相似,那么它们的向量表示也相似的。
RAG 由三个阶段组成:
- 检索(Retrieval):给定用户的查询及其对应的向量,检索出最相似的文档片段(那些对应的向量接近用户查询向量的片段),并将其作为
LLM的基础上下文。
- 增强(Augmentation):通过额外的指令、规则、安全护栏以及类似于提示词工程(prompt engineering)技术的典型实践来丰富检索到的上下文(我们将在第 3 章中介绍提示词工程主题)。
- 生成(Generation):基于增强的上下文,
LLM生成对用户查询的响应。
整个流程如下:
RAG 结合了生成式模型和信息检索系统的优势,以增强生成内容的质量和相关性。传统的生成式模型仅依赖其训练数据来产生响应,这有时会导致过时或无关的信息。RAG 通过在生成过程中整合外部知识库解决了这一局限性。
例如,OpenAI 的 ChatGPT 在通过 RAG 增强后,可以从可靠源获取当前数据,以回答关于近期事件的查询,这本属于其训练截止的范围。这种检索与生成的协同扩大了生成式 AI 的适用性,使其在动态、信息丰富的环境中更加稳健和实用。
多模态性(Multimodality)
在本章的第一段,我们看到了生成式 AI 的各个领域,从文本到图像,从视频到音乐。通常,大型基础模型倾向于特定领域,正如我们在语言理解和生成领域的大型语言模型(LLMs),或图像生成领域的 DALL-E3 中看到的那样。
然而,生成式 AI 的最新进展使得大型多模态模型(LMMs)成为可能,它们可以处理和生成不同类型的数据,如文本、图像、音频和视频。
LMMs 与“标准”大型语言模型(LLMs)共享大型基础模型典型的泛化和适应能力。然而,LMMs 能够处理异构数据,其理念是镜像人类与周围生态系统交互的方式——即通过我们所有的感官。
多模态模型的一个很好的例子是 OpenAI 的 GPT-4o,它能够通过文本、图像和音频与用户交互。让我们来看例子:
如你所示,模型能够分析图像并对其进行推理。现在让我们让模型生成一张插图:
关于 LMMs 最有趣的事实是,它们保留了推理能力,使得它们适用于异构数据语境下的复杂推理。让我们考虑最后这个例子(仅显示响应的前几行):
正如你所想象的,这为各个行业开启了应用前景,我们将在后续章节中看到一些示例。
AI 代理(AI Agents)
在之前的节中,我们揭示了 LFMs 在共鸣和生成内容方面表现出色。然而,它们缺乏一种能力,即超越单个用户采取行动并与周围生态系统交互的能力。例如,如果我们希望 LLM 不仅能生成一条出色的 LinkedIn 帖子,还能将其发布在我们的页面上,呢?
为了克服这一局限性,AI 代理(AI agents)成为了关键角色。但它们究竟是什么呢?代理可以被看作是由大语言模型(LLM)驱动的 AI 系统,根据用户的查询,它们能够在我们允许范围内与周围的生态系统进行交互。生态系统的边界由我们为代理提供的工具(或插件)决定(在我们之前的示例中,我们可能会为代理提供一个 LinkedIn 插件,以便它能够发布生成的内容)。
代理体由以下要素组成:
-
一个作为 AI 系统推理引擎的 LLM(大语言模型)。
-
一条系统消息(system message),用于指示代理以特定的方式行为和思考。例如,你可以将一个代理体设计为学生的助教,并带有如下系统消息:“你是一个助教。给定学生的查询,永远提供最终答案,而是提供一些提示来帮助他们获得答案”。
-
一组代理可以利用其与周围生态系统进行交互的工具。
AI 代理体是“LLM 作为应用程序推理引擎”这一含义的完美体现。事实上,代理体的优之处在于,它们可以选择最合适的工具来完成用户的请求。例如,假设我们有一个用于生成 LinkedIn 内容的 AI 代理,并为其提供了两个工具:一个 LinkedIn 插件和一个网络搜索插件(每个插件都对其功能有适当的描述)。然后,让我们探索代理面对两个不同问题时的行为:
-
生成一个关于小狗在山间散步的故事 → 代理将在不涉及任何插件的情况下生成故事。
-
生成一个关于米兰当前天气的故事 → 代理将调用网络搜索插件获取米兰当前的天气。
-
生成一个关于米兰当前天气的 LinkedIn 帖子并发布在我的个人页上:代理将调用网络搜索插件获取米兰当前的天气,并调用 LinkedIn 插件将其发布到我的个人页。
指令和插件集的组合使得 AI 代理体极其多功能,你可以创建高度特化的实体来应对特定场景。
而且不仅于此。
既然你可以创建一个相互对话和协作的代理体团队,为什么要只用一个代理呢?想象一下多个代理,每个都有特定的专业知识和目标,它们之间相互通信和交互以完成任务。这就是多代理应用(multi-agent applications)的模样,在过去的几个月里,这种模式开始表现出涌现行为。
让我们考虑以下示例。我们想生成一个关于气候变化的电梯演讲(elevator pitch)。我们需要更新信息来完成(最新趋势和研究、未来展望等),以及基于学术论文的坚实研究。此外,我们需要保持简洁、敏锐且高效,在非常短的演讲中交付所有关键信息。
现在,我们可以向单个代理提出所有要求,为它提供所有需要的工具和长长的指令来完成任务。然而,事实证明,当我们给 LLM 安排“太多的要做的事情”时,它们的表现往往会变差。相反,让我们使用多代理方法,创建一个由以下 AI 专业人士组成的团队:
-
一个市场分析师,可以在网络上搜索有关气候变化的最新新闻;这将是一个拥有网络搜索插件和特定搜索指令的代理;
-
一个专家研究员,可以轻松查阅关于气候变化的学术论文;这将是一个拥有
Arxiv插件和如何检索相关信息特定指令的代理; -
一个演讲专家,可以轻松地将所有信息整合进一个电梯演讲中;这将是一个拥有如何进行完美演讲的恰当指令的代理;
-
一个批评者,将审查演讲并在需要时向演讲专家提出修改建议;这将是一个拥有如何进行完美演讲的恰当指令的代理;
因此,当用户提问“生成一个关于当前气候变化问题的电梯演讲”时,所有代理都可以开始开展该项目。
有很多框架可以帮助开发者构建多代理应用(包括 AutoGen、LangGraph、CrewAI),特别是涉及到我们希望代理遵循的“流程”时。例如,我们可能希望强制特定的迭代次数;或者所有代理至少被调用一次;或者甚至让我们作为用户参与每次迭代,提供进一步的反馈并将其整合到下次迭代中。
在编写此时,多代理框架显示出广阔的进展,但它仍然处于实验阶段,可能远未达到企业级水平。尽管如此,它是 LLM 后方卓越推理能力的一种瞥,展示了它们如何开启解决问题和创造的新方法。
小语言模型
大语言模型名如其义非常大。这意味着包含 LLM 的人工神经网络架构由海量参数组成,数量级达数万亿。理想情况下,参数数量越高,LLM 的推理能力越强。然而,高参数量也意味着高昂的训练和托管成本,因为需要强大的 AI 基础设施。此外,这些模型消耗的能源引发了关于 LLM 训练对环境的影响及其长期可持续性的严肃问题。为了让你有一个直观的概念,以下是与不同规模(以参数数量衡量)的开源 LLM 相关的一些数字:
图 2:在同一数据中心训练不同模型所需的碳足迹和算力。来源:https://arxiv.org/pdf/2302.13971
幸运的是,在过去的几个月里,我们见证了对小模型研究兴趣和投入的增加,目标是在保持良好推理能力的同时减少参数数量。这种理念是,小模型即使“智能程度较低”,但如果专注于特定的活动,仍然可以满足需求。
这些较小的模型被称为小语言模型(SMLs),除了对基础设施的要求更轻、更低之外,它们还表现出了惊人的性能。
例如,如果我们考虑 Phi-3 的较小版本(微软开发的流行的 SLM 家族的一部分),它仅有 70 亿参数,我们可以看到它在所有最流行的 LLM 基准测试中都胜过了 GPT-3.5-turbo:
图 3:Phi-3 与其他 SLM 和 LLM 的能力对比表。来源:https://azure.microsoft.com/en-us/blog/introducing-phi-3-redefining-whats-possible-with-slms/
现在,我们可能会认为 GPT-3.5-turbo 已经过时,但我们必须记住,凭借 1750 亿参数在一年前还是市场上最强大的模型,看到一个 70 亿的模型能够产生更好的结果是非常令人惊讶的。
SLM 领域绝对值得关注的研究方向,特别是当我可能希望在本地部署模型甚至通过微调对其进行定制的场景时(我们将在下一章介绍微调)。
在本章中,我们探索了生成式 AI 的精彩世界及其各个应用领域,包括图像生成、文本生成、音乐生成和视频生成。我们学习了由 OpenAI 训练的 ChatGPT 和 DALL-E 等生成式 AI 模型如何利用 DL 技术学习大型数据集中的模式,并生成既新颖又连贯的新内容。我们还讨论了生成式 AI 的历史、起源以及目前的研究现状。
本章的目标是为生成式 AI 的基础提供坚实的基础,并启发你进一步探索这一迷人的领域。
在下一章中,我们将关注目前市场上最有前景的技术之一 ChatGPT:我们将介绍其背后的研究以及 OpenAI 的开发过程、模型架构,以及截至目前它可以解决的主要用例。
参考文献
2 OpenAI 与 ChatGPT:超越市场炒作
在 Discord 上加入我们的书籍社区
本章介绍了 OpenAI 及其最著名的开发成果——ChatGPT,重点介绍了它的历史、技术和能力。
总目标是深入了解 ChatGPT 如何在各种行业和应用中用于改进通信和自动化流程,最后这些应用将如何影响技术世界及更广泛的领域。
我们将通过以下主题涵盖所有这些内容:
-
什么是 OpenAI?
-
OpenAI 模型家族概览
-
通往 ChatGPT 之路:其背后的模型数学
-
ChatGPT:领先水平
技术要求
为了能够测试本章中的示例,你需要以下内容:
-
一个 OpenAI 账户以访问
Playground和Models API(openai.com/api/login20) -
你喜欢的 IDE 环境,例如
Jupyter或Visual Studio -
安装了
Python3.7.1+(www.python.org/downloads) -
安装了
pip(pip.pypa.io/en/stable/installation/) -
OpenAI Python 库(
pypi.org/project/openai/)
什么是 OpenAI?
OpenAI 是由 Elon Musk、Sam Altman、Greg Brockman、Ilya Sutskever、Wojciech Zaremba 和 John Schulman 于 2015 年创立的研究机构。正如 OpenAI 网页上所述,其使命是“确保通用人工智能 (AGI) 造福全人类”。由于其通用性,AGI 旨在具有学习和执行广泛任务的能力,而无需针对特定任务进行编程。
自 2015 年以来,OpenAI 将研究重点放在深度强化学习 (DRL),这是机器学习 (ML) 的子集,结合了强化学习 (RL) 和深度神经网络。该领域的第一个贡献可以追溯到 2016 年,当时公司发布了 OpenAI Gym,这是一个供研究人员开发和测试 RL 算法的工具包。
图 2.1 – Gym 文档首页 (https://www.gymlibrary.dev/)
OpenAI 在该领域持续进行研究和贡献,但它最著名的成就与生成式模型——生成式预训练 Transformer (GPT) 相关。
在本章中,我们将探索第一种方法,并在第 11 章中介绍如何整合 OpenAI 模型的 API。
在进入 Playground 之前,让我们先概览一下 OpenAI 的模型家族。
OpenAI 模型家族
在过去的几年里,OpenAI 在模型开发领域取得了巨大的进展,以惊人的速度发布了新版本的模型。在本节中,我们将看到按领域划分的主要模型。
-
语言模型 🡪 OpenAI 的 GPTs 是先进的语言模型,旨在根据给定的提示词(prompts)生成类人类文本。它们多才多艺,可以用于各种自然语言处理任务,如文本补全、翻译、摘要和编码。得益于其旗舰模型系列 GPTs,OpenAI 在这一领域展现了卓越的性能。自 2022 年 11 月 ChatGPT 发布以来,OpenAI 发布了:
-
GPT-3.5-turbo,第一版 ChatGPT 背后的模型 -
GPT-4(第一个多模态模型)和GPT-4-turbo(针对聊天和助手进行了优化) -
GPT-4o,最先进的多模态模型 -
GPT-4o mini,GPT-4o的较小版本,速度更快且更便宜。
-
除了这些最新模型外,用户还可以访问一组所谓的“GPT 基础模型”,如 Babbage-002 或 davinci-002(GPT-2),它们代表了旧版的补全 API(pletions APIs)(我们将在下一节介绍补全 API)。
-
图像模型 🡪 OpenAI 的图像模型(如
DALL-E)旨在根据描述生成并处理图像。DALL-E模型可以创建高度详细且富有想象力的视觉效果,使用户创作独特的艺术品、设计概念等。例如,DALL-E 3(该模型的最新版本)能够根据复杂的提示词创建复杂且富有创意的图像,推向 AI 在视觉艺术领域的边界。这些模型在创意产业、数字营销以及任何受益于高质量、定制化视觉效果的领域都特别有用。 -
文本转语音和语音转文本 🡪 在第 1 章中,我们已经提到了 OpenAI 开发的语音转文本(STT)模型
Whisper,它可以处理和分析音频输入。此外,OpenAI 还开发了文本转语音(TTS)模型,提供既清晰又具表现力的高质量输出,使其适用于从客服机器人到教育工具的广泛应用。OpenAI 开发的文本转语音(TTS)模型将文字文本转换为口语语言,产生真实且自然的音频。这些模型对于创建语音助手、提高视障用户的无障碍性以及生成自动公告至关重要。 -
文本转视频 🡪 随着
SORA的发布,OpenAI 展示了其尖端的文本转视频模型,模型能够根据文本描述生成现实且富有想象力的视频场景。通过借鉴DALL-E的技术并结合 Transformer,SORA可以创建长达一分钟的高保真视频。它在保持 3D 一致性、物体持久性和模拟视频内交互方面表现出色。尽管在准确建模复杂物理和确保时间连贯性方面仍面临挑战,但SORA在创意产业具有巨大潜力,为视频制作和故事讲述提供了新的可能性。 -
嵌入(Embeddings) 🡪 OpenAI 的嵌入模型将文本转换为称为向量(或嵌入)的数值表示,这些向量捕捉了语义含义并投影到多维向量空间中。
该空间中不同实例之间的数学距离代表了它们在含义上的相似性。例如,想象单词 queen(皇后)、woman(女性)、king(国王)和 man(男性)。理想情况下,在我们在这个向量空间中,如果表示是正确的,我们希望实现以下效果:
图 2.10 – 单词向量方程示例
这意味着 woman 和 man 之间的距离应该等于 Queen 和 King 之间的距离。
嵌入在智能搜索场景中非常有用。事实上,通过获取用户输入和用户想要搜索的文档的嵌入可以计算输入与文档之间的距离度量(即 cosine similarity 余弦相似度)。通过这种方式,我们可以检索在数学距离上更接近用户输入的文档。
OpenAI 的嵌入模型 text-embedding-ada-002 和 text-embedding-3-large 通过创建文本的稠密向量表示,在文本相似性、文本搜索和代码搜索等任务中提供了顶尖性能。这些嵌入允许对大型文本数据集进行高效有效的比较,提高了搜索的准确性和相关性。
- 审核(Moderation) 🡪 OpenAI 的审核模型旨在检测并过滤文本中不适当、有害或不安全的内容。这些模型通过识别潜在的冒犯或有害语言,对于维护安全尊重的在线环境至关重要。最新的审核模型
text-moderation-007在确保跨平台内容合规安全方面稳健且有效。它帮助开发者和公司执行社区准则并防止有害内容的传播,从而促进更安全的数字交互。
总体来说,OpenAI 近年来覆盖范围越来越广,用顶尖模型解决了生成式 AI 的各个领域。
在 Playground 中尝试 OpenAI 模型
要访问你的 OpenAI Playground,你需要创建一个 OpenAI 账户并访问 platform.openai.com/playground。落地页的样式如下:
图 2.4 – https://platform.openai.com/playground 的 OpenAI Playground
从图 2.4 所示,Playground 提供了一个用户可以在其中与模型交互的界面,你可以在界面右侧选择模型。
在深入研究 Playground 的主要部分之前,让我们先定义一下章中会看到的术语:
-
Token(标记):Token 可以被视为 API 用于处理输入提示词的单词碎片或片段。与完整的单词不同,Token 可能包含尾随空格甚至部分子词。为了更好地理解 Token 的长度概念,有一些通用指南需要记住。例如,英语中的一个 Token 大约相当于四个字符,或四分之三个单词。
-
提示词(Prompt):在自然语言处理(NLP)和机器学习(ML)语境下,提示词是指输入 AI 语言模型以生成响应或输出的文本。提示词可以是问题、陈述或句子,用于为语言模型提供上下文和方向。
-
上下文(Context):在 GPT 领域,上下文是指用户提示词之前的单词和句子。语言模型利用这些上下文根据训练数据中发现的模式和关系生成最可能的下一个单词或短语。
-
模型置信度(Model confidence):模型置信度是指 AI 模型对特定预测或输出分配的确定程度或概率。在 NLP 语境下,模型置信度通常用于表示 AI 模型对其针对输入提示词生成的响应的正确性或相关性有多信心。
函数 (Functions)
函数是对第 1 章中引入的工具或插件概念的另一种定义。通过函数,我们为模型提供了一种额外的技能,模型可以调用该技能来完成用户的任务。函数始终包含一个自然语言编写的描述,以便模型知道何时调用它。
前面的定义对于理解如何使用 Azure OpenAI 模型系列以及如何配置它们的参数至关重要。
在 Playground(游场)中,有四个部分可以与模型交互:
聊天 (Chat)
在这里你可以测试今天可用的所有聊天模型,包括仅文本的模型(如 GPT-3.5)或多模态模型(如 GPT-4o)。你可以提供系统消息(system message)——即提供给模型的指令集,全部使用自然语言编写。你还可以在给定相同用户的情况下的情况下比较两个不同模型的输出。以下是此操作的示例:
图 2.5 – 两个模型的比较示例。
对于每个模型,你还可以调整一些可以配置的参数。列表如下:
-
温度 (Temperature)(范围从 0 到 1):这控制模型响应的随机性。低温度会让你的模型更具确定性,这意味着它倾向于对相同的问题给出相同的输出。例如,如果我在温度设置为 0 的情况下多次询问我的模型OpenAI 是什么?,它将始终给出相同的答案。另一方面,如果我对一个温度设置为 1 的模型进行相同的操作,它会尝试在措辞和风格上每次都修改其答案。
-
最大标记数 (Max tokens):这控制模型对用户提示(prompt)响应的长度(以 token 为单位)。
-
停止序列 (Stop sequences)(用户输入):这使得响应在指定的点结束,例如句子或列表的末尾。
-
高概率 (Top probabilities)(范围从 0 到 1):这控制模型在生成响应时考虑哪些 token。将其设置为 0.9 将考虑所有可能的 token 中概率最高的前 90% 的部分。有人可能会问为什么不将高概率设为 1 以选择所有最可能的 token 呢?答案是,当模型置信度较低时,即使在得分最高的 token 中,用户可能仍然希望保持多样性。
-
频率惩罚 (Frequency penalty)(范围从 0 到 1):这控制生成响应中相同 token 的重复次数。惩罚越高,在同一个响应中看到相同 token 出现一次以上的概率就越低。惩罚根据 token 到此为止在文中出现的频率比例减少概率(这与下一个参数的关键区别)。
-
存在惩罚 (Presence penalty)(范围从 0 到 2):这与上一个参数类似但更严格。它减少了重复到此为止在文中出现过的任何 token 的概率。因为它比频率惩罚更严格,存在惩罚也增加了在响应中引入新话题的可能性。
除了在 Playground 中尝试 OpenAI 模型之外,你始终可以在自定义代码中调用模型 API 并模型嵌入到你的应用程序中。事实上,在 Playground 的右角,你可以点击 View code(查看代码)并按所示导出配置:
助手 (Assistants)
OpenAI 助手可以看作是一种更快速、更方便开发 AI 代理(在第 1 章中介绍)的方法。事实上,助手可以定义为由 LLM 驱动的实体,拥有一套需要遵循的指令和一套可使用的工具或插件——基本上与 AI 代理的定义相同!
在 OpenAI 助手的情况下,它们带有三个预构建工具:
-
文件搜索 (File Search):它允许用户上传自定义文档,以便助手可以导航这些文档以完成查询。它基于 RAG 框架运行。
-
函数调用 (Function Calling):它允许用户定义一组自定义函数,助手可以调用这些函数来完成给定任务。
-
代码解释器 (Code Interpreter):指的是助手针对提供的文档运行代码的能力(例如需要数学计算的电子表格或分析论文),或简单解决用户提供的复杂任务(例如复杂的数学问题)。
在接下面的图中,你可以看到一个名为“Chat with PDF”的助手的示例,它专门根据提供的文档进行回答(在我的情况下,我上传了 Hugo Touvron 等人的论文“LLaMA: Open and Efficient Foundation Language Models”)。
图 2.8 – OpenAI 助手的示例。
从前面的屏幕截可以看出,助手能够从提供的文档中检索知识来回答我的问题。事实上,我的问题相当模糊,因为“毒性”(toxicity)一词可以指多个领域;尽管如此,助手知道将提供的文档作为主要信息来源。
补全 (Completions)
此部分指的是类被称为“基础模型”(base models)的模型,如 GPT-3,它们是构建所谓的“助手模型”(或我们之前看到的聊天模型)的基础。例如,聊天模型 GPT-3.5-turbo(ChatGPT 背后的模型)是基础模型 GPT-3 的微调版本。
补全(基础)模型设计用于对提示生成单个响应,这使得它们适用于文本生成和摘要等任务,而无需在多次交互中维护上下文。相比之下,聊天(助手)模型针对交互式对话进行了优化,能够在多轮会话中维护上下文,是聊天机器人和虚拟助手等应用的理想选择。
在下面你可以看到 Playground 中一个典型补全任务的示例:
图 1: Playground 中的补全任务示例
如你所见,当我输入“今天我我去了一家杂货店并”,模型用最可能的词补全了句子。今天,补全模型很少使用,因为它们的性能被聊天模型超越,但它们可以进一步微调以适应特定的用例(我们稍后会介绍微调)。
- 文本转语音 (Text to speech):除了上述语音转文本模型
Whisper外,OpenAI 还发布了其TTS(文本转语音)模型,可以在 Playground 中直接测试。
让我们来看一个示例:
图 2: 在 Playground 中使用 OpenAI TTS 模型的示例
如上面的图片所示,你可以选择生成音频的语音、模型、速度和格式。
所有之前的模型都是预构建的,这意味着因为它们已经在海量知识库上进行了预训练。
然而,你有一些方法可以让你的模型更加定制化并适应你的用例。
第一种方法嵌入在模型的设计中,它涉及通过少样本学习方法(few-learning approach)为模型提供上下文(我们将在书中后面重点介绍这种技术)。具体来说,你可以要求模型生成一篇与你已经写的文章模板和词汇相类似的文章。为此,你可以为模型提供生成文章的查询以及之前的文章作为参考或上下文,以便模型为你的请求做好更好的准备。
以下是它的示例:
图 2.11 – OpenAI Playground 中带有少样本学习的对话示例
在之前的示例中,我指示模型仅输出推文情感的标签,并为它提供了三个示例来演示如何操作。
第二种方法更为复杂,被称为 fine-tuning(微调)。微调是将预训练模型适配到新任务的过程。
在微调过程中,预训练模型的参数会发生变化,这种变化通过调整现有参数或添加新参数,以更好地拟合新任务的数据。这是通过在特定于新任务的较小标注数据集上训练模型来实现的。微调背的核心思想是利用从预训练模型中学到的知识,并将其微调到新任务中,而不是从零开始训练模型。请看下图:
图 2.12 – 模型微调
在前面的图中,你可以看到一个关于微调如何在 OpenAI 预构建模型上工作的原理图。其核心是:你拥有一个具有通用权重或参数的预训练模型。然后,你向模型输入自定义数据,通常是以此处所示的 key-value 提示词(prompts)和完成项(completions)的形式:
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
...
一旦训练完成,你将获得一个自定义模型,它在特定任务上表现特别出色,例如对你公司的文档进行分类。
微调的妙处在于,你可以为自己的用例定制预构建模型,而无需从零开始重新训练,同时可以使用较小的训练数据集,从而缩短训练时间并减少计算量。同时,模型保留了通过原始训练(即在大规模数据集上进行的训练)学到的生成能力和准确性。
在本节中,我们概述了 OpenAI 向公众提供的模型,从你可以在 Playground 中直接尝试的(GPT、Codex)到更复杂的模型(如嵌入模型 embeddings)。我们还了解到,除了使用预构建状态的模型外,你还可以通过微调对它们进行定制,并提供一组示例供学习。
在接下来的章节中,我们将专注于这些模型的背景,从它们背后的数学原理开始,一直到让 ChatGPT 可能的伟大发现。
ChatGPT:顶尖技术
2022 年 11 月,OpenAI 宣布了其对话 AI 系统 ChatGPT 的网页预览版并向公众开放。这引发了来自专家、机构和普通用户的巨大热潮——在发布仅 5 天后,该服务的用户量就达到了 100 万!
在开始介绍 ChatGPT 之前,我将让它自我介绍一下,这是发布几天后的快照:
图 2.25 – ChatGPT 在 2022 年 11 月自我介绍。
如上所述,ChatGPT 的第一个版本构建在一个高级语言模型之上,该模型使用了 GPT-3 的修改版本,并专门针对对话进行了微调。这个微调后的版本被称为 GPT-3.5-turbo。优化过程涉及“基于人类反馈的强化学习”(Reinforcement Learning with Human Feedback, RLHF),这是一种利用人类输入来训练模型展现理想对话行为的技术。
我们将 RLHF 定义为一种机器学习方法,算法通过接收人类的反馈来学习执行某任务。算法被训练用于做出决策,以最大化人类提供的奖励信号,而人类则提供额外的反馈以改进算法的性能。当任务复杂到传统编程无法处理,或者预期结果难以预定义时,这种方法非常有用。
这里相关的区别在于,ChatGPT 在训练过程中包含了人类参与(humans in the loop),以便使其与用户保持一致(aligned)。通过引入 RLHF,ChatGPT 的设计旨在以更自然、更有互动的方式理解并响应人类语言。
同样的
RLHF机制也被用于我们可以认为是 ChatGPT 前身的模型——InstructGPT。在 OpenAI 研究人员于 2022 年 1 月发表的相关论文中,InstructGPT被介绍为一类在遵循英语指令方面优于GPT-3的模型。
ChatGPT 至今仍作为任何人都可以使用的免费应用程序可用;但自 2023 年 2 月起,OpenAI 宣布了一个名为 ChatGPT Plus 的新付费版本,每月费用 20 美元,为订阅者提供了若干优势,包括访问最新模型、最快的响应时间、一套强大的插件集,以及在 GPTs 游乐场中创建自己的助手的可能性。
让我们快速浏览一下当前日期的 ChatGPT 用户界面:
图 3: chatgpt.com 的 ChatGPT 首页
让我们双击每个部分:
-
你可以决定
ChatGPT后端使用的模型。在我情况下,我设置了GPT-4o,它仅对付费订阅开放。这是我们在整本书中将使用的模型。 -
系统向用户推荐一组预构建的提示词,帮助他们熟悉应用程序。
-
文本框是用户提问的地方。注意左上角有一个小回针图标:它表示模型可以上传的文件。这些文件可以从本地上传,也可以从
Google Drive或OneDrive等云存储检索。 -
在左侧边栏中,你可以看到与
ChatGPT的聊天列表。这是一个非常有用的工具,因为在每个聊天中,通过你与模型的多次交互,创建了模型感知的上下文。这意味着如果你想继续之前的对话,只需打开相应的聊天即可,无需再次描述整个场景。 -
最近添加的一个很棒的功能是与其他用户共享工作空间的功能,以便你与团队成员协作。请注意这是一个额外的付费功能,不包含在 Plus 计划中,每月额外收费 5 美元。
-
最后,
ChatGPT Plus提供了创建 GPTs 的可能性,这些是你为特定功能定制的个性化助手。你可以决定将 GPT 设置为私有,或将其发布到 GPTs 商店供任何人使用和评分。我们将在本书后后的专门章节中介绍 GPTs。
最后,ChatGPT Plus 带有两个可以根据需要自动调用的内置插件:网络搜索插件(用于检索最新信息)和代码解释器插件(用于处理分析文档或执行复杂的数学任务)。
在本书中,我们将利用 ChatGPT Plus 展示最新模型和功能的特性,尽管如此,我们涵盖的大多数示例通过免费版的 ChatGPT 实现(该版本目前由 GPT-3.5-turbo 驱动)。
ChatGPT 架构和训练方法的持续发展和改进有望进一步推向语言处理的边界。
总结
在本章中,我们回顾了 OpenAI 的历史、研究领域以及最新进展,直到 ChatGPT。我们深入探讨了用于测试的 OpenAI Playground 以及我们如何利用 OpenAI 的所有模型系列。
通过对 OpenAI 模型的初步了解,我们将看到测试或将预训练模型嵌入到你的应用程序中是多么简单:这里的关键因素在于,你不需要强大的硬件和花费数小时的时间来训练模型,因为它们已经可以供你使用,并在需要时还可以通过少量示例进行自定义。
在下一章中,我们将开始介绍本书的 Part 2,在 ways 我们将看到 ChatGPT 在各个领域的实际应用,以及如何释放它的潜力。你将学习如何通过正确设计提示(prompts)从 ChatGPT 中获得最高价值,如何提高你的日常工作效率,以及它如何成为开发者、营销人员和研究人员优秀的项目助手。
参考文献
-
Radford, A., & Narasimhan, K. (2018). Improving language understanding by generative pre-training.
-
Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, L., & Polosukhin, I. (2017). Attention Is All You Need. ArXiv.
doi.org/10.48550/ arXiv.1706.03762OpenAI. Fine-Tuning Guide. OpenAI platform documentation.platform.openai.com/docs/guides/fine-tuning。
3 理解提示词设计
在 Discord 上加入我们的书籍社区
在之前的章节中,我们在提到 ChatGPT 以及通用的 LLM 模型的用户输入时,多次使用了 prompt(提示词)一词。
由于提示词对 LLM 的性能有巨大影响,因此提示词工程(prompt engineering)是设计 LLM 驱动的应用时项至关重要的活动。事实上,有多种技术可以实现,不仅可以优化你的 LLM 响应,还可以减少与幻觉(hallucination)和偏差相关的风险。
在本章中,我们将涵盖提示词工程领域的新兴技术,从基础方法到高级框架。具体来说,我们将介绍以下主题:
-
提示词工程简介
-
零样本、单样本和少样本学习(Zero, one and few shot learning)
-
提示词工程的基本原理
-
提示词工程的高级技术
-
通过提示词工程缓解风险和幻觉
-
处理提示注入(prompt injections)
在本章结束时,你将拥有为你的 LLM 驱动的应用构建功能且稳健的提示词的基础,这在接下来的章节中也会相关。
什么是提示词工程?
在解释什么是提示词工程之前,让我们从提示词(prompt)的原子定义开始。
提示词是一种文本输入,引导 LLM 的行为以生成文本输出。在 LLM 和 LLM 驱动的应用的语境下,我们可以将提示词分为两类:
- 用户在与 LLM 交互时输入的提示词。例如,一个提示词可能是“给我详细解释一下质子”,或者“生成一个运行马拉松的跑步训练计划”。下面你可以看到一个简单的用户提示词示例:
https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/practical-generative-ai-with-chatgpt---2nd-edition-early-acc/img/file36.pnghttps://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/practical-generative-ai-with-chatgpt---2nd-edition-early-acc/img/file37.png
图 1:用户提示词示例。
你会听到人们简单地将此组件称为“prompt”、“query”(查询)或“user’s input”(用户输入)。
- 无论用户的查询如何,指示模型以某种方式运行的提示词。这指的是我们提供给模型的自然语言指令集,使其在与终端用户交互时以某种方式运行。你可以将其理解为 LLM 的某种“后端”,即由应用程序开发者处理而非最终用户处理的内容。
在接下来的图片中,你可以看到一个示例,我们向模型提出了上述问题,但这次我们添加了一个系统消息(system message)来指示模型以某种方式运行:
https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/practical-generative-ai-with-chatgpt---2nd-edition-early-acc/img/file38.pnghttps://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/practical-generative-ai-with-chatgpt---2nd-edition-early-acc/img/file39.pnghttps://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/practical-generative-ai-with-chatgpt---2nd-edition-early-acc/img/file40.png
图 2:元提示词示例。
我们将这类提示词称为“metaprompt”(元提示词)或“system message”(系统消息)。
从此以后,提示词工程是指设计有效提示词的过程,旨在从 LLM 中引导高质量且相关的输出。提示词工程需要创造力、对 LLM 的理解以及精确性。
图 3:通过提示词工程使 LLM 专业化的示例。
在过去的几年里,提示词工程本身变成了一门全新的学科,这证明了与这些模型交互需要一套以前不存在的新技能和能力。“提示词艺术”(art of prompting)已成为在企业场景下构建生成式 AI 应用的顶级技能;然而,对于在日常任务中使用 ChatGPT 或类似 AI 助手的个人用户来说,它也非常有用,因为它极大提高了结果的质量和准确性。
在接下来的章节中,我们将看到一些如何为你的 LLM 应用构建高效稳健的提示词和元提示词的示例。请注意,我们将涵盖的所有技术都可以嵌入到用户提示词和元提示词中,取决于你的具体需求。为了做到这一点,我将利用 OpenAI Playground,以便能够更灵活地在两个层级的提示上进行操作。
零样本、单样本和少样本学习——Transformer 的典型
在之前的章节中,我们提到了 LLM 通常以预训练格式出现。它们已经在海量数据上进行了训练。
然而,这并不意味着它们现在不能学习了。在第 2 章中,我们看到自定义 OpenAI 模型并使其更适用于特定任务的方法是微调(fine-tuning)。
微调是将预训练模型适配到新任务的过程。在微调中,预训练模型的参数会被更改,即通过调整现有参数或添加新参数来适应数据。这是通过在特定任务的较小数据集上训练模型来实现的。微调的核心思想是利用从预训练模型中学到的知识并使其新任务,而不是从头训练模型。
微调是一个正式的训练过程,需要训练数据集、计算能力和一些时间(取决于数据量和计算实例)。
这就是为什么测试另一种让模型在特定任务中变得更技能的方法:样本学习(shot learning):其思想是让模型从示例学习,而不是整个数据集。这些示例是我们希望模型响应的方式,以便模型不仅学习内容,还学习在其响应中使用的格式、风格和分类。
此外,样本学习直接通过提示词发生(正如我们在后续场景中看到的),因此整个过程更不耗时且更容易执行。
提供的示例数量决定了我们所指的样本学习水平。换句话说,如果不提供示例则为零样本(zero-shot),提供一个示例则为单样本(one-shot),提供 2-3 个以上的示例则为少样本(few-shot)。
让我们关注每一个场景:
- 零样本学习。在这种类型的学习中,模型被要求执行一项它未见过任何训练示例的任务。模型必须依靠先验知识或关于任务的通用信息来完成任务。例如,零样本学习的方法可以是要求模型生成描述,正如我的提示词中所定义的:
图 4.3 零样本学习示例
- 单样本学习(One-shot learning):在这种学习类型中,模型对于每个要求执行的新任务只获得一个示例。模型必须利用其先验知识从这个单一示例中泛化,以完成任务。如果我们考虑之前的示例,我可以在要求模型生成新内容之前,为它提供一个
prompt-completion示例:
图 4.4 – 单样本学习示例
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
注意,我提供示例的方法与用于微调的结构相似:
- 少样本学习(Few-shot learning):在这种学习类型中,模型对于每个要求执行的新任务会被给出一个少量示例(通常在 2 到 5 个之间)。模型必须利用其先验知识从这些示例中泛化以完成任务。让我们继续之前的示例,为模型提供更多示例:
图 4.5 – 包含三个示例的少样本学习示例
少样本学习的优点在于,你还可以控制模型输出的呈现方式。你也可以为模型提供一个你希望输出格式的模板。例如,考虑以下推文分类器:
图 4.6 – 用于推文分类器的少样本学习。这是来自 https://learn.microsoft.com/en-us/azure/cognitive-services/openai/how-to/completions 原始脚本的修改版本。
让我们检查上面的图。首先,我为 ChatGPT 提供了一些带标签的推文示例。然后,我提供了相同的推文,但使用了不同的数据格式(列表格式),以及同样格式的标签。最后,我以列表格式提供了未标记的推文,以便模型以列表形式返回标签。
少样本学习(Shot-learning)的可能性是无限的——这取决于测试以及在寻找合适的提示词(prompt)设计时的一点耐心。
如之前提到的,重要的是记住这些学习形式与传统的监督学习以及微调是不同的。在少样本学习中,目标是让模型能够从极少数示例中学习,并从这些示例泛化到新任务。
现在我们已经学会了如何让 OpenAI 模型从示例中学习,让我们关注如何正确定义我们的提示词,以使模型的响应尽可能准确。
提示词工程原则
传统上,在计算和数据处理的背景下,我们经常使用“垃圾进,垃圾出(garbage in, garbage out)”这一说法,意味着输出的质量取决于输入的质量。如果向系统输入了错误或低质量的数据(垃圾),输出也将是有缺陷或毫无意义的(垃圾)。
在涉及提示词(prompting)时,情况也类似:如果我们希望从 LLM 获得准确且相关的结果,我们需要提供高质量的输入。然而,构建良好的提示不仅取决于响应的质量。事实上,我们可以构建良好的提示词来:
-
最大化 LLM 响应的相关性
-
指定响应的类型、格式和风格
-
提供对话上下文
-
减少内部偏见并提高公平性和包容性
-
减少幻觉
在大语言模型(LLMs)的语境下,“幻觉(hallucination)”指的是生成事实上错误、无意义或未基于训练数据的文本或响应。当 LLM 产生听起来自信但错误或虚假的信息时,就会发生幻觉。幻觉的产生由于这些模型的概率性质,它们可能会根据模式而非验证的事实来预测下一个词或短语。
让我们看看实现这些结果的基本技术。
清晰的指令
给出清晰指令的原则是为模型提供足够的信息和指导,使其正确且高效地执行任务。清晰的指令应该包含以下元素:
-
任务的目标或目的,例如“写一首诗”或“总结文章”。
-
预期输出的格式或结构,例如“使用带有押韵字的四行诗”或“使用项目符号,每项不超过 10 个字”。
-
任务的约束或限制,例如“不要使用任何脏话”或“不要从源文件中复制任何文本”。
-
任务的上下文或背景,例如“这首诗是关于秋天的”或“这篇文章来自某科学期刊”。
假设,我们希望模型从文本中提取任何类型的指令,并以项目列表的形式向我们返回教程。此外,如果提供的文本没有指令,模型应该告知我们。
为了尝试这样做,让我们利用 OpenAI Playground 中的聊天部分,这样我们就可以同时提供元提示词(metaprompt)和提示词(prompt)。
对于这种场景,我将设置以下元提示词:
你是一个 AI 助手,通过根据文本生成教程来帮助人类。
你将提供一段文本。如果文本包含关于如何进行某事的任何指令,请生成一个列表格式的教程。
否则,告知用户文本不包含任何指令。
这是我们的用户提示词:
为了准备来自意大利热那亚的已知酱汁,你可以从烤松子开始,然后在厨房研钵中与罗勒和大蒜一起粗略切碎。然后,在厨房研钵中加入一半油,并用盐和胡椒调味。
最后,将青酱转移到碗中,拌入碎的帕玛森奶酪。
让我们看看它是如何工作的:
图 4: 元提示词中清晰指令的示例。
注意,如果我们给模型传递另一个不包含任何指令的文本,它将按照我们指示的方式做出回答:
图 5: 聊天模型遵循指令的示例。
通过给出清晰的指令,你可以帮助模型理解你想让它做什么以及你想让怎么做。这可以提高模型输出的质量和相关性,并减少进一步修订或修正的需求。
然而,有时仅仅有清晰度是不够的。我们可能需要推断 LLM 的思维方式,使其在执行任务时更加健壮。在下一节中,我们将检查这种技术之一,它在完成复杂任务时非常有用。
将复杂任务拆分为子任务
提示词工程是一项设计有效输入以供大语言模型(LLMs)执行各种任务的技术。有时,任务对于单个提示词来说过于复杂或模糊,此时将它们拆分为由不同提示词解决的更简单的子任务更好。
以下是将复杂任务拆分为子任务的一些示例:
-
文本摘要:一项涉及为长文本生成简洁准确摘要的复杂任务。该任务可以拆分为若干子任务,例如:
-
从文本中提取要点或关键词。
-
以连贯流畅的方式重写要点或关键词。
-
修剪摘要以符合所需的长度或格式。
-
-
机器翻译:一项涉及将文本从一种语言翻译成另一种语言的复杂任务。该任务可以被拆分为若干子任务,例如:
-
检测文本的源语言。
-
将文本转换为中间表示,并保留原始文本的含义和结构。
-
从中间表示生成目标语言的文本。
-
-
诗歌生成:一项创意任务,涉及创作遵循特定风格、主题或情感的诗歌。该任务可以分为若干子任务,例如:
-
为诗歌选择诗歌形式(如十四行诗、俳句、五味打诗等)和韵律(如
ABAB、AABB、ABCB等)。 -
根据用户的输入或偏好为诗歌生成标题和主题。
-
生成符合所选形式、韵律和主题的诗行或诗节。
-
对诗歌进行精炼和润色,以确保连贯性、流畅性和原创。
-
-
代码生成:一项技术任务,涉及生成执行特定功能或任务的代码段。该任务可以分为若干子任务,例如:
-
为代码选择编程语言(如
Python、Java、C++等)以及框架或库(如TensorFlow、PyTorch、React等)。 -
根据用户的输入或规范为代码生成函数名以及参数列表和返回值。
-
生成实现代码逻辑和功能的函数体。
-
添加注释和文档以解释代码及其用法。
-
让我们考虑以下示例。我们将为模型提供的一篇短文章,并要求它按照这些指令进行总结:
You are an AI assistant that summarize articles.
To complete this task, do the following subtasks:
Read the provided article context comprehensively and identified the main topic and key points
Generated a paragraph summary of the current article context that captures the essential information and conveys the main idea
Print each step of the process.
这是我将提供的短文:
大语言模型(LLMs)作为人工智能的一个子集,通过展现出前所未有的理解和生成类人文本的能力,彻底改变了自然语言处理领域。这些模型在包含多样化语言输入的海量数据集上进行训练,使其能够针对广泛的主题生成连贯且上下文相关的响应。通过利用 transformers 等架构,GPT-3 及其后续者等 LLM 可以完成文本补、回答问题、执行翻译,甚至参与复杂的对话。它们的应用范围从自动化客户支持、内容创作到先进的研究和教育工具。尽管拥有惊人的能力,LLM 也面临着挑战,包括训练数据中固有的偏差倾向以及生成误导性或虚假信息的风险。随着 LLM 的不断进步,在伦理 AI 研究和部署策略方面的持续的努力对于负责任且有效地利用其益处至关重要。
让我们看看模型是如何工作的:
图 6:OpenAI GPT-4o 将任务拆分为子任务以生成摘要的示例。
将复杂任务拆分为更简单的子任务是一种强大的技术,尽管如此它并没有解决 LLM 生成内容的主要风险之一,即输出错误结果。在接下来的两个章节中,我们将看到一些旨在解决这一风险的技术。
请求理由(Ask for justification)
LLM 的构建方式是它们根据之前的标记(token)预测下一个标记,而不回溯其已生成的内容。这可能导致模型向用户输出错误内容,但方式非常具有说服力。如果 LLM 驱动的应用没有为该响应提供特定的引用,可能很难验证其背后的事实。
因此,在提示词(prompt)中指定通过一些反思和理由来支持 LLM 的答案,可能会提示模型从其行为中恢复。
此外,请求理由在答案正确的情况下也可能有用,只是因为我们并不知道 LLM 背后的思考过程。例如,假设我们想让 LLM 解决谜语。为了做到,我们可以这样指示它:
You are an AI assistant specialized in solving riddles.
Given a riddle, solve it the best you can.
Provide a clear justification of your answer and the reasoning behind it.
如你所见,我在元提示词(metaprompt)中指定 LLM 为其答案提供理由,并将其推理社交化。让我们用下面的谜语来测试一下:
什么有脸有只手,但没有手脚?
输出:
图 7:OpenAI 的 GPT-4o 在解决谜语后提供理由的示例。
理由是使你的模型更可靠、更健壮的佳工具,因为它们“迫使”模型重新思考其输出,同时为我们提供了推理是如何设定以解决问题的视角。
通过类似的方法,我们也可以在不同的提示词层面进行干预,以提高 LLM 的性能。例如,我们可能会发现模型正在系统地以错误的方式处理数学问题,因此我们可能想在元提示词层面上直接建议正确的方法。另一个例子可能是要求模型生成多个输出——以及它们对应的理由——以评估不同的推理技术,并在元提示词中选择最佳的一个。
在下一节中,我们将关注这些示例之一,更具体说是生成多个输出然后选择最可能的一个的可能。
生成多个输出,然后使用模型选择最佳的一个
正如我们在上一节中看到的,LLM 的构建方式是它们根据之前的标记预测下一个标记,而不回溯其已生成的内容。如果是这种情况下,如果采样的标记是错误的(换句话说,如果模型运气不好),LLM 将继续生成错误的标记,从而产生错误的内容。现在坏消息是,与人类不同,LLM 无法从错误中自动恢复。这意味着,如果我们询问它们,它们会承认错误,但我们需要明确提示它们进行思考。
克服这一局限性的方法是扩大选择正确标记的概率空间。与其只生成一个响应,我们可以提示模型生成多个响应,然后选择最适合用户查询的一个。这为我们的 LLM 分配两个子任务:
-
为用户查询生成多个响应;
-
比较这些响应并根据我们可以在元提示词中指定的标准选择最佳的一个。
让我们来看一个示例,接上上一节检查过的谜语:
You are an AI assistant specialized in solving riddles.
Given a riddle, you have to generate three answers to the riddle.
For each answer, be specific about the reasoning you made.
Then, among the three answer, select the one which is most plausible given the riddle.
在这种情况下,我提示模型为谜语生成三个答案,然后给出最可能的那个,并说明理由。让我们看看结果:
图 8:GPT-4o 生成三个可能的答案并选择最可能的一个、提供理由的示例。
如前所述,强制模型用不同的方法解决问题是收集多个推理样本的一种方法,这些样本可以作为元提示词(metaprompt)中的进一步指令。例如,如果我们希望模型总是对问题提出不是最直观的解决方案——换句话说,如果我们希望它能“以不同方式思考”——我们可能会强制它以 N 种方式解决问题,然后将最具创意的推理作为元提示词中的框架。
我们将检查的最后一个元素是我们想要赋予元提示词的整体结构。事实上,在之前的示例中,我们看到了一个包含某些陈述和指令的示例系统消息。在下一节中,我们将看到这些陈述和指令的顺序和“强度”并不是不变的。
使用分隔符
涵盖的最后一个原则与我们想要赋予元提示词的格式有关。这有助于我们的大语言模型(LLM)更好地理解其意图,并建立章节与段落之间的关系。
为了实现这一点,我们可以在提示词中使用分隔符。分隔符可以是任何字符或符号序列,它能清晰地映射到一个模式(schema)而不是一个概念。例如,我们可以考虑以下序列作为分隔符:
-
>>>> -
==== -
------ -
#### -
``
等等。让我们考虑一个元提示词,其目标是指示模型将用户的任务转换为 Python 代码,并提供一个操作示例。
You are a Python expert that produces python code as per user's request.
===>START EXAMPLE
---User Query---
给我一个打印文本字符串的函数。
---User Output---
下面你可以找到描述的函数:
\`\`\`def my_print(text):
#returning the printed text
return print(text)
\`\`\`
<===END EXAMPLE
让我们看看它是如何工作的:
图 9:在系统消息中使用分隔符的模型示例输出。
如你所见的,它还像系统消息中显示的那样用反引号打印了代码。
到目前为止的所有原则都是通用规则,可以使你的基于 LLM 的应用程序更加健壮。在接下来的章节中,我们将看到一些高级的提示工程技术,这些技术在将答案提供给最终用户之前,解决了模型推理和思考答案的方式。
高级技术
在之前的章节中,我们涵盖了一些提示工程的基础技术。无论你开发的是什么类型的应用程序,都应该记住这些技术,因为它们是提高你 LLM 性能的通用最佳实践。
另一方面,还有一些针对特定场景实施的高级技术,我们将在接下来的章节中介绍。
思维链 (Chain of Thoughts)
由 Wei 等人在论文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》中引入的思维链(CoT)是一种通过中间推理步骤实现复杂推理能力的技术。它还鼓励模型解释其推理过程,“强制”它不要太草率,从而避免给出错误回答的风险(正如我们在之前的章节中看到的)。
假设我们想提示 LLM 求解一元方程。为了做到,我们将为它提供一个通用的推理列表作为元提示词:
要求解通用的一元方程,请遵循以下步骤:
1\. **识别方程:** 首先识别你想要求解的方程。它应该是 "ax + b = c" 的形式,其中 'a' 是变量的系数,'x' 是变量,'b' 是常数,'c' 是另一个常数。
2\. **隔离变量:** 你的目标是在方程的一侧隔离变量 'x'。为了做到,请执行以下步骤:
a. **加减常数:** 在方程两边加上或减去 'b',将常数移到一侧。
b. **除以系数:** 将方程两边除以 'a' 以隔离 'x'。如果 'a' 为零,方程可能没有唯一解。
3\. **简化:** 尽可能地简化方程的两边。
4\. **求解 'x':** 一旦 'x' 在一侧被隔离,你就得到了解。它将是 'x = 值' 的形式。
5\. **检查你的解:** 将找到的 'x' 值代回原始方程,确保它满足方程。如果是,你就找到了正确解。
6\. **表示解:** 以清晰简洁的形式写下解。
7\. **考虑特殊情况:** 注意可能无解或无限解的特殊情况,特别是当 'a' 等于零时。
方程:
让我们看看它是如何工作的:
图 10:模型使用 CoT 方法求解方程的输出。
注意,你也可以将其与少样本提示(few-shot prompting)结合,以便在回答之前需要推理的更复杂任务上获得更好的结果。
通过 CoT,我们正在提示模型生成中间推理步骤。这也是我们在下一节中将检查的另一种推理技术的组成部分。
ReAct
由 Yao 等人在论文《ReAct: Synergizing Reasoning and Acting in Language Models》中引入的 ReAct(推理与行动)是一种将推理与大语言模型相结合的通用范式。ReAct 提示语言模型生成语言推理轨迹,并接收来自网络等外部来源的观察。这允许语言模型执行动态推理,并根据外部信息快速调整计划。例如,你可以提示语言模型通过对问题进行推理,然后执行向网络发送查询,然后接收搜索结果的观察,并继续这种“思考-行动”循环,直到得出结论。
思维链和 ReAct 方法的区别在于,思维链提示语言模型为任务生成中间推理步骤,而 ReAct 提示语言模型为任务生成中间推理步骤、行动和观察。
在下面的示例中,我们不使用工具,而是将要求模型执行的任何任务称为“行动”。
这个 ReAct 元提示词可能像这样:
尽力回答以下问题。
使用以下格式:
Question: 你必须回答的输入问题
Thought: 你应该始终思考要做什么
Action: 要采取的行动
Action Input: 动作的输入
Observation: 行动的结果
...(此 Thought/Action/Action Input/Observation 可以重复 N 次)
Thought: 我现在知道了最终答案
Final Answer: 原始输入问题的最终答案
让我们看看它在简单的用户查询下是如何工作的:
图 11:ReAct 元提示词的示例
如你所见,在这种场景下,模型跳过了 Action Input 和随后的观察,因为我们没有为它提供任何可使用的工具。
这是一个很好的例子,说明了提示模型逐步思考并显式说明推理每一步如何让它在回答之前变得更加“明智”和谨慎。这也是防止幻觉的一种很好的技术。
总的来说,提示工程是一门强大的学科,尽管仍处于新兴阶段,但已经在基于 LLM 的应用程序中被广泛采用。在接下来的章节中,我们将看到这些技术的具体应用。
在 ChatGPT 中避免隐藏偏见风险并考虑伦理考量
ChatGPT 提供了 Moderator API,使其使其不会参与可能不安全的对话。Moderator API 是一个基于 GPT 模型的分类模型,涵盖了以下几类:暴力、自残、仇恨、骚扰和性。为此,OpenAI 使用了匿名数据和合成数据(以零样本形式)来创建合成数据。
Moderation API 基于 OpenAI API 中提供的更复杂的内容过滤模型版本。我们在第 1 章中讨论过该模型,当时看到它对假误报的处理非常保守,而不是对漏报如此保守。
然而,存在一种我们可以称之为隐藏偏见的现象,它直接源于模型训练的知识库。例如,关于 GPT-3 的主要训练数据块 Common Crawl,专家们认为它主要由西方国家的白男性编写。如果确实如此,我们已经面临着模型的隐藏偏见,这将不可避免地模仿一个有限且缺乏代表性的人类类别。
在《Languages Models are Few-Shots Learners》论文中,OpenAI 的研究人员 Tom Brown 等人(arxiv.org/pdf/2005.1416)创建了一个实验设置,以调查 GPT-3 中的种族偏见。模型被提示包含种族类别的短语,并为每个类别生成了 800 个样本。使用 Senti WordNet 根据词汇共现衡量了生成文本的情感,评分范围从 -100 到 100(正分表示正性词汇,反之亦然)。
结果显示,与每个种族类别相关的情感在不同模型之间存在差异,亚洲人始终具有高情感,而黑人始终具有低情感。作者警告说,结果反映了实验设置,社会历史因素可能会影响与不同人口统计相关的情感。该研究强调了对情感、实体和输入数据之间关系进行更复杂分析的性:
图 4.14 – 跨模型的种族情感
这种隐藏偏见可能会产生不符合负责任 AI 原则的有害响应。
然而,值得注意的是,ChatGPT 以及所有 OpenAI 模型都在不断改进中。这与 OpenAI 的AI 对齐(openai.com/alignment/)是一致的,其研究重点是训练 AI 系统变得有帮助、诚实且安全。
例如,如果我们要求 ChatGPT 根据人的性别和种族进行猜测,它不会满足这一具体请求,而是提供我们假设性的功能以及巨大的免责声明:
图 4.15 – GPT-4o 随时间改进的示例,因为它提供了无偏见的响应
总而言之,尽管伦理原则领域在不断改进,但在使用 ChatGPT 时,我们应该始终确保输出符合这些原则且没有偏见。
ChatGPT 和 OpenAI 模型中的偏见和伦理概念在负责任 AI 的整个主题中有更广泛的关联,我们将在本书的最后一章关注这一点。
总结
在本章中,我们深入探讨了提示设计(prompt design)和工程的概念,因为这是控制 ChatGPT 以及通用大语言模型(LLMs)输出的最强大方式。我们学习了如何利用不同层次的样本学习(shot learning)来使 LLMs 更符合我们的目标。
我们从介绍提示工程的概念及其重要性开始,然后转向基本原则——包括清晰的指令、要求提供理由等。
然后,我们转向了更高级的技术,这些技术旨在塑造我们 LLM 的推理方法:少样本学习、CoT 和 ReAct。
提示工程是一门新兴学科,它正在为注入 LLM 的新类别应用程序铺平道路。在接下来的章节中,我们将看到这些技术如何在构建 LLMs 的真实应用中投入。
从下一章开始,我们将深入探讨 ChatGPT 可以提高生产力并对我们今天的工作方式产生破坏性影响的不同领域。
参考文献
以下是本章的参考文献:
-
ReAct approach.
arxiv.org/abs/2210.03629 -
Chain of Thoughts approach.
arxiv.org/abs/2201.11903
ChatGPT 也可以成为忠诚且自律的学习伙伴。例如,它可以帮助你总结长篇论文,以便你对所讨论的话题有一个初步的了解,或者帮助你准备考试。
具体来说,假设你正在使用由 Lorenzo Peccati 等人编写的名为Mathematics for Economics and Business的大学教材准备数学考试。在深入研究每个章节之前,你可能想对内容和讨论的主要主题有一个概述,并确认是否需要更多的先备知识,以及最重要的一点——如果我正在准备考试的话——学习它需要多长时间。你可以这样问 ChatGPT:
图 5.5 – ChatGPT 提供大学教材的概述
当涉及特定资产或个人信息的问题时,我们增加了 ChatGPT 幻觉的风险。事实上,在在上一个例子中,模型能够回答是因为该书的摘要显然是训练集的一部分,但模型并没有该书的完整内容,因为其在互联网上无法免费获取。如果是这种情况,指定模型浏览网络来回答这些特定问题可能是一个很好的做法。让我们来看一个例子:
图 1:ChatGPT 调用网络插件的示例
如你所看到的,现在 ChatGPT 调用了网络插件并搜索了 5 个文件,还提供了它浏览过的链接。
你也可以要求 ChatGPT 针对你刚刚学习的材料向你提问题:
图 5.6 – ChatGPT 扮演教授的示例
Act as(充当……)技术是高效提示技巧的绝佳示例,它可以列入第 3 章描述的示例中。
现在,让我们来看看更多使用 ChatGPT 执行特定任务的例子,包括文本生成、写作辅助和信息检索。
生成文本
作为一个语言模型,ChatGPT 特别适合根据用户的指令生成文本。例如,你可以要求 ChatGPT 生成针对特定受众的电子邮件、草稿或模板:
图 5.7 – ChatGPT 生成的电子邮件示例
另一个例子可能是要求 ChatGPT 为你必须准备的演示文稿创建一个演讲大纲(我在这里只放第一张幻灯片示例):
图 5.8 – ChatGPT 生成的幻灯片日程和结构
你还可以以此方式生成关于趋势话题的博客文章或文章。这是一个示例:
图 5.9 – ChatGPT 生成的带有相关标签和 SEO 关键词的博客文章示例
我们甚至可以让 ChatGPT 缩小文章的大小以适应推文。以下是操作方法:
图 5.10 – ChatGPT 将文章缩短为 Twitter 推文
最后,ChatGPT 还可以生成视频或戏剧剧本,包括舞台设计和建议的剪辑。底图显示了一个包含舞台设计和演员的剧场对话示例:
图 5.11 – ChatGPT 生成的带有舞台设计的剧场对话
我只提供了 ChatGPT 生成的四个场景中的一个,让你对结局保持悬念……
总的来说,每当需要从零生成新内容时,ChatGPT 在提供初稿方面做得非常出色,初稿可以作为进一步优化的起点。
然而,ChatGPT 还可以通过提供写作辅助和翻译来支持现有内容,我们将在下一节看到。
提高写作技巧和翻译
有时,与其生成新内容,你可能想重新审视现有的文本。可能是为了改进风格、改变受众、语言翻译等。
让我们来看一些例子。假设我草拟了一封邮件,邀请我的客户参加网络研讨会。我写了两个短句。在这里,我想让 ChatGPT 改进这封邮件的格式和风格,因为目标受众是高管:
图 5.12 – ChatGPT 针对高管受众修改的电子邮件示例
现在,让我们问同样的问题,但针对不同的受众:
图 5.13 – ChatGPT 生成的针对不同观众的相同邮件示例
ChatGPT 还可以对你的写作风格和结构提供反馈。
例如,假设你为标题为The History of Natural Language Processing的文章写了引言,你想就写作风格及其与标题的一致性获得反馈:
图 5.15 – ChatGPT 对文章引言提供反馈的示例
如你所看到的,ChatGPT 不仅为整篇文章提供了反馈和建议,还给我了一个整合了所有建议的修订引言。
让我们也要求 ChatGPT 对其细化示例说得更具体:
图 5.16 – ChatGPT 对提到内容的详细说明
我也有兴趣知道引言与标题是否一致,或者我是否偏离了方向:
图 5.17 – ChatGPT 提供引言与标题一致性的反馈
最后一个让我印象深刻。ChatGPT 足够聪明,能够发现我的引言中没有具体提到 NLP(自然语言处理)。然而,它为稍后讨论该主题设定了预期。这意味着 ChatGPT 在文章结构方面也具有专业知识,并且在应用判断时非常精准,知道这只是一个引言。
现在让我们揭晓本章 ChatGPT 的最后项技能。事实上,ChatGPT 也是一个出色的翻译工具。它认识 95 种语言(如果你怀疑你的语言是否被支持,可以直接询问 ChatGPT)。然而,这里存在一种考虑:在已经有了 Google Translate 等尖端工具的情况下,ChatGPT 翻译的额外价值何?
为了回答这个问题,我们必须考虑一些关键区别以及如何利用 ChatGPT 的翻译功能:
- ChatGPT 可以捕捉意图。这意味着你也可以跳过翻译阶段,因为这是 ChatGPT 在后台可以完成的。例如,如果你写一个提示来生成法语社交媒体帖子,你可以用任何你喜欢的语言编写该提示——ChatGPT 会自动检测(无需提前指定)并理解你的意图:
图 5.18 – ChatGPT 生成与输入语言不同的输出示例
- ChatGPT 能够捕捉俚语或成语更深层次的含义。这使得翻译不再是字面直译,从而能够保留其深层含义。例如,让我们考虑英语表达
It’s not my cup of tea,它表示某物符合人的喜好或偏好。让 ChatGPT 和 Google Translate 将其翻译成意大利语:
图 5.19 – ChatGPT 与 Google Translate 从英语翻译成意大利语对比
如你所示,ChatGPT 可以提供几个与原句等价的意大利语成语,同样以俚语的形式呈现。相比之下,Google Translate 执行了字面翻译,忽略了成语的真实含义。
- 与任何其他任务一样,你总是可以为 ChatGPT 提供上下文。因此,如果你希望翻译具有特定的俚语或风格,你始终可以在提示词中指定。或者,更有趣的是,你可以要求 ChatGPT 用讽刺的语气翻译你的提示词:
图 5.20 – ChatGPT 用讽刺语气翻译提示词的示例。提示词原始内容取自 OpenAI 的维基百科页面:https://it.wikipedia.org/wiki/OpenAI
所有这些场景都突出了 ChatGPT 以及整个 OpenAI 模型的一个核心杀手锏功能。由于它们代表了 OpenAI 定义的通用人工智能(AGI)的体现,它们的设计初衷并非为了专注于单一任务(即被局限于单一任务)。相反,它们旨在动态地服务于多种场景,以便你通过一个模型处理广泛的用例。
总之,ChatGPT 不仅能够生成新文本,还能操纵现有材料以满足你的需求。它已被证明在语言之间的翻译方面非常精确,同时保持术语和特定语言表达的完整性。
在下一节中,我们将看到 ChatGPT 如何帮助我们检索信息和竞争情报。
快速信息检索与竞争情报
信息检索和竞争情报是 ChatGPT 另一个改变游戏规则的领域。ChatGPT 检索信息的第一个例子就是它目前最流行的使用方式:作为搜索引擎。每当我们问 ChatGPT 某些问题时,它都能从其知识库中检索信息并以原创的方式进行重构。
一个例子是要求 ChatGPT 为我们可能感兴趣阅读的书籍提供快速摘要或评论:
图 5.21 – ChatGPT 提供书籍摘要和评论的示例
或者,我们可以根据自己的偏好为想要读的新书寻求一些建议:
图 5.22 – ChatGPT 根据我的偏好推荐书单的示例
此外,如果我们在提示词中加入更具体的信息,ChatGPT 可以作为一个工具,引导我们找到研究或学习的正确参考文献。
具体来说,你可能想要快速检索关于你想要进一步学习的主题的一些背景参考文献——例如,前馈神经网络。你可能会要求 ChatGPT 指向一些介绍广泛讨论该主题的网站或论文:
图 5.23 – ChatGPT 列出相关参考文献
如你所示,ChatGPT 能够为我提供相关的参考文献以开始学习该主题。然而,在竞争情报方面,它还可以更进一步。
假设我正在写一本名为Introduction to Convolutional Neural Networks – an Implementation with Python的书。我想对市场上的潜在竞争对手进行一些研究。我想要调查的第一件事是是否已经类似的竞争性书籍,因此我可以要求 ChatGPT 生成一份内容相同的现有书籍列表:
图 5.24 – ChatGPT 提供竞争性书籍列表的示例
你还可以就你想要出版的市场饱和度征求反馈:
图 5.25 – ChatGPT 关于如何在市场中保持竞争力的建议
最后,让 ChatGPT 更精确地告诉我为了在我运营的市场中保持竞争力我应该做什么:
图 5.26 – ChatGPT 如何建议改进书籍内容以使其脱颖出
ChatGPT 在列出一些让我的书籍独独特的技巧方面表现得非常好。
总的来说,ChatGPT 可以成为信息检索和竞争情报的价值助手。然而,重要的是记住知识库的截止日期是 2021 年:这意味着每当我们需要检索实时信息,或者在对今天进行竞争市场分析时,我们可能无法依靠 ChatGPT。
尽管如此,无论知识库截止日期如何,该工具仍然提供了良好的建议和最佳实践。
总结
我们在本章中看到的所有示例都是通过 ChatGPT 实现某些成就的简要代表。这些小技巧可以极地帮助你处理重复性任务(例如使用类似的模板回复邮件)或繁重任务(例如搜索背景文档或竞争情报)。
在下一章中,我们将深入探讨 ChatGPT 改变游戏的三个主要领域——开发、营销和研究。
5 使用 ChatGPT 开发未来
加入我们的 Discord 社区
在本章中,我们将讨论开发者如何利用 ChatGPT。本章重点关注 ChatGPT 在开发者领域的主要用例,包括代码审查和优化、文档生成以及代码生成。本章将提供示例并让你能够亲自尝试这些提示词。
在对为什么开发者应该利用 ChatGPT 作为日常助手进行通用介绍后,我们将关注 ChatGPT 以及它如何完成以下任务:
-
为什么开发者需要 ChatGPT?
-
生成、优化和调试代码
-
生成代码文档并调试你的代码
-
解释
机器学习(ML)模型,帮助数据科学家和业务用户理解模型解释性 -
翻译不同的编程语言
在本章结束时,你将能够利用 ChatGPT 进行编码活动,并将其作为编码生产力的助手。
为什么开发者需要 ChatGPT?
我个人认为,ChatGPT 最令人惊讶的能力之一就是处理代码。处理任何类型的代码。我们已经在之前的章节中看到了一些 ChatGPT 生成 Python 代码的示例。然而,ChatGPT 对开发者而言的能力远超这个例子。它可以作为代码生成、解释和调试的日常助手。
在最流行的语言中,我们当然提到 Python、JavaScript、SQL 和 C#。然而,正如 ChatGPT 自己所言,它涵盖了广泛的语言:
图 6.1 – ChatGPT 列出了它能够理解和生成的编程语言
无论你是后端/前端开发者、数据科学家还是数据工程师,只要你使用编程语言,ChatGPT 都能成为游戏规则的改变者,我们将在接下来几节的示例中看到这一点。
从下一节开始,我们将深入探讨 ChatGPT 在处理代码时可以实现的具体示例。我们将看到涵盖不同领域的端到端用用例,以便我们熟悉如何将 ChatGPT 作为代码助手。
生成、优化和调试代码
你应该利用的核心能力是 ChatGPT 的代码生成。你有多少次在寻找一段预构建的代码作为起点呢?例如生成 utils 函数、示例数据集、SQL 架构等?ChatGPT 能够根据自然语言输入生成代码:
图 6.2 – ChatGPT 生成写入 CSV 文件的 Python 函数的示例
如你所见,ChatGPT 不仅能够生成该函数,还能解释该函数的功能、如何使用它,以及用诸如 my_folder 的通用占位符替换哪些内容。
现在让我们提高难度。如果 ChatGPT 能够生成一个 Python 函数,它还能生成整个视频游戏吗?让我们试一下。我想做给 ChatGPT 提供一张我想要开发的游戏类型的插图,并要求它用代码来实现。以下是我理想游戏的插图(你能猜出它的名字吗?):
图 1:吃豆人游戏的插图。
现在让我们要求 ChatGPT 重现它:
图 2:ChatGPT 生成 HTML、CSS 和 JS 代码的示例。
正如 ChatGPT 所言,完整游戏需要大量代码,但让我们看看生成的代码目前是如何运作的(为了运行代码,我使用了在线工具 codepen.io):
图 3:ChatGPT 生成的吃豆人游戏。
如你所见,原型产品看起来已经与我的目标相似了!这是一个生成式 AI 如何帮助你克服“从零开始的魔咒”的例子:事实上,从一份白皮书开始有时会令人受阻,而拥有草案产品作为起点不仅可以加快整个过程,还能激发创意并提高结果质量。
ChatGPT 也是代码优化的出色助手。事实上,它可以通过根据我们的输入创建优化脚本,从而节省一些运行时间或计算能力。这种能力在自然语言领域,可以与我们在第 5 节“提高写作技巧和翻译”部分看到的写作辅助功能相比。
例如,假设你想从另一个列表创建一个奇数列表。为了实现这一结果,你写了以下 Python 脚本(为了练习,我还将使用 timeit 和 datetime 库来跟踪执行时间):
from timeit import default_timer as timer from datetime import timedelta
start = timer()
elements = list(range(1_000_000)) data = []
for el in elements: if not el % 2:
# 如果奇数 data.append(el)
end = timer() print(timedelta(seconds=end-start))
让我们看看运行需要多长时间:
图 4:Python 函数的执行速度。
执行时间为 00.115022 秒。如果我们要求 ChatGPT 优化这个脚本会发生什么?
图 6.6 – ChatGPT 为 Python 脚本生成优化替代方案
ChatGPT 为我提供了两个示例,以更低的执行时间实现相同的结果。
让我们在 Jupyter Notebook 中测试两者:
2023-03-25 11:27:10.270 Uncaught app exception Traceback (most recent call):
File "C:\Users\vaalt\Anaconda3\lib\site-packages\streamlit\runtime\ scriptrunner\script_runner.py", line 565, in _run_script
exec(code, module. dict )
File "C:\Users\vaalt\OneDrive\Desktop\medium articles\llm.py", line 129, in <module>
user_input = get_text()
File "C:\Users\vaalt\OneDrive\Desktop\medium articles\llm.py", line 50, in get_text
当你处理新的应用程序或项目时,将代码与文档联系起来是一个良好的习惯。它可能以 docstring(文档字符串)的形式存在,你可以将其嵌入到函数或类中,以便他人可以在开发环境中直接调用它们。
例如,让我们考虑上一个节中开发的同一个函数,并将其转换为一个 Python 类:
class UnderscoreAdder:
def __init__(self, word):
self.word = word
def add_underscores(self):
new_word = ""
for i in range(len(self.word)):
new_word += self.word[i] + "_"
return new_word
我们可以对其进行如下测试:
图 5:测试 UnderscoreAdder 类。
现在,假设我想要通过 UnderscoreAdder 约定来检索 docstring 文档。通过对 Python 包、函数和方法进行这种操作,我们可以获得该特定对象能力的完整文档,如下(使用 pandas Python 库的示例):
图 6.13 – pandas 库文档示例。
现在,让我们让 ChatGPT 为我们的 UnderscoreAdder 类产生相同的结果。
图 6.14 – ChatGPT 用文档更新代码。
结果,如果我们按照前面的代码更新了我们的类和 UnderscoreAdder?,我们将得到如下输出:
图 6.15 – 新的 UnderscoreAdder 类文档。
最后,还可以利用 ChatGPT 用自然语言解释脚本、函数、类或其他类似内容的功能。我们已经看到许多 ChatGPT 用清晰的解释来丰富其代码相关的回答的示例。然而,我们可以通过就代码理解方面提出特定问题来增强这种能力。
例如,让我们让 ChatGPT 向我们解释以下 Python 脚本的作用:
图 6.16 – ChatGPT 解释 Python 脚本的示例。
代码可解释性也可以是上述文档的一部分,也可以用于开发者之间,他们可能想更好地理解其他团队的复杂代码,或者(有时在我身上发生)记住他们以前写过的内容。
得益于 ChatGPT 和本节提到的功能,开发者可以轻松用自然语言跟踪项目生命周期,以便让新团队成员和非技术用户都更容易理解目前完成的工作。
我们将在下一节中看到,代码可解释性是数据科学项目中 ML 模型可解释性的关键一步。
理解 ML 模型可解释性
模型可解释性是指人类理解 ML 模型预测背后逻辑的难易程度。本质上,它是理解模型如何做出决策以及哪些变量对其预测做出贡献的能力。
让我们来看使用深度学习卷积神经网络(CNN)进行图像分类的模型可解释性示例。我使用 Python 和 Keras 构建了我的模型。为此,我将直接从 keras.datasets 下载 CIFAR-10 数据集:它包含 60,000 张 32x32 的彩色图像(即 3 通道图像),分为 10 类(飞机、汽车、鸟、猫、鹿、狗、蛙、马、船和卡车),每类 6,000 张图像。在这里,我将仅分享主体;你可以在书籍 GitHub 仓库中找到数据准备和预处理的所有相关代码:github.com/PacktPublishing/The-Ultimate-Guide-to-ChatGPT-and-OpenAI/tree/main/Chapter%206%20-%20ChatGPT%20for%20Developers/code:
model=tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(32,kernel_ size=(3,3),activation='relu',input_shape= (32,32,1)))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2))) model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Dense(1024,activation='relu')) model.add(tf.keras.layers.Dense(10,activation='softmax'))
前面的代码由执行不同操作的几个层组成。我可能对模型结构的解释以及每一层的作用感兴趣。让我们让 ChatGPT 在这方面提供帮助(在下方你可以看到回复的片段):
图 6.17 – 使用 ChatGPT 进行模型可解释性。
如前面的图所示,ChatGPT 能够为我们的 CNN 结构和层提供清晰的解释。它还会添加一些注释和提示,例如使用池化层有助于减少输入的维度。
我也可以通过 ChatGPT 在验证阶段支持解释结果。因此,在将数据分为训练集和测试集并在训练集上训练模型后,我想查看在测试集上的性能:
图 6.18 – 标。
让我们也让 ChatGPT 详细说明我们的验证指标(截断输出):
图 6.19 – ChatGPT 解释指标的示例。
再次,结果非常令人印象深刻,它就如何针对训练和测试集设置 ML 实验提供了清晰的指导。
模型可解释性重要有很多原因。一个关键因素是它缩小了业务用户与模型代码之间的差距。这是让业务用户理解模型如何运行以及将其转化为代码想法的关键。
此外,模型可解释性实现了负责任和伦理 AI 的核心原则之一,即 AI 系统背后思考和行为的透明度。解锁模型可解释性意味着检测模型在运行时可能出现的偏见或有害行为,并防止它们的发生。
总而言之,正如我们在前面的示例所示,ChatGPT 在模型可解释性方面可以提供价值支持。
我们将探索的下一个 ChatGPT 功能是开发者生产力的另一个助力,当同一个项目使用多种编程语言时。
不同编程语言之间的翻译
在第 5 节中,我们看到了 ChatGPT 在不同语言之间翻译的强大能力。真正令人惊的是,自然语言并不是它唯一的翻译对象。事实上,ChatGPT 能够在不同的编程语言之间进行翻译,同时保持相同的输出和风格(即保留存在的 docstring 文档)。
在许多场景下,这可能会改变游戏规则。
例如,你可能需要学习一种以前从未见过的新编程语言或统计工具,因为你需要快速交付该项目。在 ChatGPT 的帮助下,你可以用你偏好的语言开始编程,然后让它翻译成目标语言,你可以在翻译的过程中同时学习该语言。
想象一下,某个项目需要在 MATLAB(一种由 MathWorks 开发的专有数值计算和编程软件)中交付,而你一直都在用 Python 进行编程。该项目包含对美国国家标准与技术研究院(MNIST)数据集中的图像进行分类(原始数据集描述和相关论文可以在此处通过 yann.lecun.com/exdb/mnist/ 找到)。该数据集包含大量手写数字,经常被用于教授各种图像处理系统。
首先,我编写了以下 Python 代码来初始化一个用于分类的深度学习模型:
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
## Load the MNIST dataset
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_ data()
# Preprocess the data
x_train = x_train.reshape(-1, 28*28) / 255.0 x_test = x_test.reshape(-1, 28*28) / 255.0 y_train = keras.utils.to_categorical(y_train) y_test = keras.utils.to_categorical(y_test)
# Define the model architecture model = keras.Sequential([
layers.Dense(256, activation='relu', input_shape=(28*28,)), layers.Dense(128, activation='relu'),
layers.Dense(10, activation='softmax')
])
# Compile the model
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# Train the model
history = model.fit(x_train, y_train, validation_split=0.2, epochs=10, batch_size=128)
# Evaluate the model
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=0) print('Test accuracy:', test_acc)
现在让我们看看如果我们将前面的代码作为上下文提供给 ChatGPT 并让它将其翻译成 MATLAB 会发生什么:
图 20 – ChatGPT 将 Python 代码翻译为 MATLAB
让我们看看它是否也能将其翻译成其他语言,例如 JavaScript(注意,我不需要重复代码,因为代码已经在对话上下文中了):
图 6.21 – ChatGPT 将 Python 代码翻译为 JavaScript
代码翻译还可以缩小新技术与当前编程能力之间的技能差距。
代码翻译的另一个关键意义是应用现代化。事实上,想象你想要刷新你的应用栈,即迁移到云端。你可以决定从一个简单的“平移并迁移”(lift and shift)开始,迈向即服务服务(IaaS)实例(例如 Windows 或 Linux 虚拟机(VMs))。然而,在第二阶段,你可能希望对你的应用程序进行重构、重新架构或彻底重建。
下面的图表描述了应用现代化的各种选项:
图 6.22 – 你可以将应用程序迁移到公云的四种方法
ChatGPT 和 OpenAI Codex 模型可以帮助你完成迁移。以大型机为例。
大型机是大型组织主要用于执行关键任务的计算机,例如用于人口普查、消费者和行业统计、企业资源计划以及大规模交易处理的批量数据处理。大型机环境的应用编程语言是通用面向业务语言(COBOL)。尽管 COBOL 发明于 1959 年,但它在今天仍在在使用,是世界上最古老的编程语言之一。
随着技术的不断进步,位于大型机领域的应用程序一直处于持续的迁移和现代化过程中,旨在从接口、代码、成本、性能和可维护性等领域增强现有的大型机基础设施。
当然,这意味着要把 COBOL 翻译成更现代的编程语言,如 C# 或 Java。问题是,大多数新一代程序员并不熟悉 COBOL;因此,在这种背景下存在巨大的技能差距。
让我们考虑一个 COBOL 脚本,它读取一个输入数字,对其加 10,然后打印结果。
IDENTIFICATION DIVISION.
PROGRAM-ID. AddTen.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUT-NUMBER PIC 9(5).
01 RESULT-NUMBER PIC 9(5).
PROCEDURE DIVISION.
DISPLAY 'Enter a number: '.
ACCEPT INPUT-NUMBER.
COMPUTE RESULT-NUMBER = INPUT-NUMBER + 10.
DISPLAY 'Result after adding 10: ' RESULT-NUMBER.
STOP RUN.
然后我将之前的 COBOL 脚本传递给 ChatGPT,以便它可以将其作为上下文来制定其回复。现在让我们让 ChatGPT 将该脚本翻译成 C#:
图 6.23 – ChatGPT 将 COBOL 翻译为 C# 的示例
诸如 ChatGPT 的工具可以通过引入一个既了解编程过去又未来的层,帮助缩小此类及类似场景中的技能差距。
结论,ChatGPT 可以作为应用现代化的有效工具,在提供代码升级的同时,提供宝贵的见解和建议。
这是一个示例。ChatGPT 在营销领域最突出且最有前景的用例之一是个性化营销。ChatGPT 可用于分析客户数据,并生成能与单个客户产生共鸣的个性化营销信息。例如,营销团队可以使用 ChatGPT 分析客户数据,并开发针对特定客户偏好和行为的定制电子邮件营销活动。这可以提高转化概率,并带来更高的客户满意度。通过提供对客户情感和行为的洞察、生成个性化营销信息、提供个性化客户支持以及生成内容,ChatGPT 可以帮助营销人员提供卓越的客户体验并推动业务增长。
这是 ChatGPT 在营销中许多应用示例中的之一。在接下来的章节中,我们将查看由 ChatGPT 支持的端到端营销项目的具体示例。
新产品开发与市场进入策略
你将 ChatGPT 引入营销活动的第一种方式可能是新产品开发和go-to-market(GTM)策略的助手。
在本节中,我们将介绍一个如何开发和推广新产品的逐步指南。你已经拥有一个名为RunFast的跑步服装品牌,到目前为止只生产了鞋子,因此你想通过新的产品线来扩大业务。我们将从头脑风暴创意来创建 GTM 策略开始。当然,一切都得到了 ChatGPT 的支持:
- 头脑风暴创意:ChatGPT 能支持你的的第一件事是为你新产品线进行头脑风暴并起草方案。它还会提供每个建议背后的逻辑。所以,让我们问问我应该关注什么样的新产品线:
图 7.1 – ChatGPT 生成的新创意示例
在三个建议中,我们将选择第二个,因为我们可以借此对环境产生积极影响,并提升我们的品牌声誉。具体来说,我将从环保跑步袜开始。
- 产品名称:现在我们已经确定了主意,我们需要为它想一个响亮的名字。同样,我会要求 ChatGPT 提供更多选项,以便我从中选出最喜欢的:
图 7.2 – 潜在产品名称列表
GreenStride 听起来不错——我就用这一个。
- 生成响亮的口号:除了产品名称,我还想分享名称背后的意图和产品线的使命,以便吸引我的目标受众。我想激发客户的信任和忠诚度,让他们在我的新产品线背后的使命中看到自己。
图 7.3 – 我的新产品名称的口号列表
太棒了——现在我对稍后将使用的产品名称和口号感到满意,并将用它们创建一个独特的社交媒体公告。在此之前,我想花更多时间对目标受众进行市场研究。
图 7.4 – 我的新产品线要触达的目标群体列表
考虑到受众中不同的群体是重要的,这样你就可以区分你想要传达的信息。在我的案例中,我想确保我的产品线能够涵盖不同的人群,例如竞技性跑步者、休闲跑步者和健身爱好者。
- 产品变体与销售渠道:根据上述的潜在客户群体,我可以生成产品变体,使其更针对特定受众:
图 7.5 – 产品线变体示例
同样,我也可以要求 ChatGPT 为上述每个小组建议不同的销售渠道:
图 7.6 – ChatGPT 对不同销售渠道的建议
- 竞争脱颖而出:我希望我的产品线能在竞争中脱颖而出,并在饱和的市场中出现——我想让它具有独特性。带着这个目标,我要求 ChatGPT 包含社会因素,如可持续性和包容性。让我们就这方面向 ChatGPT 要建议:
图 7.7 – ChatGPT 生成的卓越特性示例
如你所见,它能够生成让我的产品线变得有趣的特性。
- 产品描述:现在是时候开始构建市场进入(Go-To-Market)计划了。首先,我想为我的网站生成一个产品描述,包括之前所有的独特差异化点。
图 7.8 – ChatGPT 生成的描述和 SEO 关键词示例
- 公平价格:另一个关键要素是为我们的产品确定公平的价格。由于我针对不同受众(竞技性跑步者、休闲跑步者和健身爱好者)区分了产品变体,我也希望有一个考虑到这种分群的价格范围。注意,在接下来的示例中,ChatGPT 正在调用网络搜索插件来检索有关当前跑步袜市场定价更新信息。
图 7.9 – 产品变体的价格范围
我们快完成了。我们已经经历了许多新产品开发和市场进入的步骤,在每一步中,ChatGPT 都充当了强大的支持工具。
作为最后一件事,我们可以要求 ChatGPT 生成一个关于我们新产品的 Instagram 帖子,包括相关的标签和 SEO 关键词。然后通过 DALL-E 生成图像,它是 ChatGPT Plus 中的内置插件。
图 7.10 – ChatGPT 生成的社交媒体帖子
以及,通过 DALL-E 的特别贡献:
图 1:由 DALL-E 3 支持的插图生成示例
这就是最终的结果:
图 7.11 – 由 ChatGPT 和 DALL-E 完全生成的 Instagram 帖子
当然,对于完整的产品开发和市场进入,这里缺少许多元素。然而,通过 ChatGPT 的支持(以及 DALL-E 3 的特别贡献),我们成功地头脑风暴了新的产品线和变体、潜在客户、响亮的口号,并生成了一个非常漂亮的 Instagram 帖子来宣布 GreenStride 的发布!
用于营销对比的 A/B 测试
营销中的 A/B 测试是一种比较不同版本的营销活动、广告或网站的方法,以确定哪一个表现更好。在 A/B 测试中,会创建同一个营销活动或元素的两个版本,两个版本之间只改变一个变量。目标是看哪个版本能产生更多的点击、转化或其他理想结果。
A/B 测试的一个示例可能是测试两个版本的邮件营销活动,使用不同的主题行;或者测试两个版本的网站着陆页,使用不同的呼吁行动(call-to-action)按钮。通过衡量每个版本的响应率,营销人员可以确定哪个版本表现更好,并就未来使用哪个版本做出数据驱动的决策。
A/B 测试允许营销人员优化其活动和元素以实现最大效能,从而获得更好的结果和更高的投资回报率(ROI)。
由于这种方法涉及生成同一份内容的许多变体的过程,ChatGPT的生成能力绝对可以为此提供帮助。
让我们考虑以下例子。我正在推广我开发的一个新产品:一种为快速攀岩者设计的全新、轻薄型攀岩安全带。我已经做了一些市场研究,了解我的小众受众。我 known 与该受众交流的一个绝佳渠道是在在线攀岩博客上发布内容,大多数攀岩馆的成员都是该博客的读者。
我的目标是创建一个优秀的博客文章来分享这款新款安全带的发布,我想在两个组中测试它的两个不同版本。我正准备发布并希望作为 A/B 测试对象的博客文章如下:
图 7.12 – 发布攀岩装备的博客文章示例
在这里,ChatGPT可以在两个层面上帮助我们:
- 第一个层面是重新措述文章,使用不同的关键词或不同的吸引人的口号。为了做到这一点,一旦此帖子作为上下文提供,我们可以要求
ChatGPT对文章进行处理并轻微更改某些元素:
图 7.13 – ChatGPT 生成的博客文章新版本
根据我的请求,ChatGPT能够仅重新我请求的那些元素(标题、副标题和结束句子),以便我通过监控两个受众组的反应来监控这些元素的效效。
- 第二个层面是进行网页设计,即更改图像的搭配而不是按钮的位置。为了这个目的,我为发布在攀岩博客上的博文创建了一个简单的网页(你可以在书的 GitHub 仓库中找到代码,地址为
https://github.com/PacktPublishing/The-Ultimate-Guide-to-ChatGPT-and-OpenAI/tree/main/Chapter%207%20-%20ChatGPT%20for%20Marketers/Code):
图 7.14 – 发布在攀岩博客上的示例博文
我们可以直接向ChatGPT馈送HTML代码并要求它更改某些布局元素,例如按钮的位置或它们的措辞。例如,比起“立即购买”(Buy Now),读者可能被“我想要!”(I want one!)按钮更吸引。
所以,让我们给ChatGPT提供HTML源代码:
图 7.14 – ChatGPT 修改 HTML 代码
让我们看看输出是什么样的(我也将标题、副标题和段落更改为ChatGPT生成的内容):
图 7.15 – 网站的新版本
如你所示,ChatGPT只在按钮层面进行了干预,轻微改变了它们的布局、位置、颜色和措辞。
结论,ChatGPT是营销 A/B 测试中非常有价值的工具。它快速生成相同内容的不同版本的能力可以缩短新活动的上市时间。通过利用ChatGPT进行 A/B 测试,你可以优化营销策略,并最终为业务带来更好的结果。
提升搜索引擎优化 (SEO)
ChatGPT另一个可能改变规则的光前景领域是搜索引擎优化(SEO)。这是在Google或Bing等搜索引擎中获得排名的关键元素,它决定了你的网站是否对那些寻找你所推广内容的用户可见。
SEO 是一种用于提高网站在搜索引擎结果页面(
SERPs)上可见性和排名的技术。它是通过优化网站或网页来增加来自搜索引擎的自然(非付费)流量的数量和质量来实现的。SEO 的目的是通过针对特定关键词或短语优化网站来吸引更多有针对性的访问者。
想象你经营着名为Hat&Gloves的电子商务公司,正如你可能猜的那样,它只卖帽子和手套。你现在正在创建你的电子商务网站并想优化其排名。让我们ChatGPT列出一些嵌入我们网站的关键词:
图 7.17 – ChatGPT 生成的 SEO 关键词示例
如你所示,ChatGPT能够创建一个不同类型的关键词列表。其中一些非常直观,例如“帽子和手套”(Hats and Gloves)。其他一些是相关的,有间接联系。例如,“礼物建议”(Gift ideas)并不一定与我的电子商务业务相关,但将其包含进去可能是明智的,这样我可以扩大我的受众。
最后,我们还可以进一步利用“扮演……”(Act as…)这种技巧,这我们在第 3 章中提到过。对我们的网站进行评估并理解其是否已按预期进行了优化,将是非常有趣的事情。在营销领域,这种分析被称为SEO audit(SEO 审计)。SEO 审计是对网站 SEO 性能和潜在改进领域的评估。SEO 审计通常由 SEO 专家、网页开发人员或营销人员进行,涉及对网站的技术架构、内容和反链配置的全面分析。
在SEO 审计过程中,审计人员通常会使用一系列工具和技术来识别改进领域,例如关键词分析、网站速度分析、网站架构分析和内容分析。随后,审计人员将生成报告,列出关键问题、改进机会以及解决这些问题的建议行动。
让我们让 ChatGPT 扮演 SEO 专家来执行此审计。我们将使用上面提到的攀岩博客作为参考网站。我将给 ChatGPT 代码并要求其执行以下指令:“扮演 SEO 专家并对上述 HTML 代码生成一份简短的 SEO 审计(最多 300 字)”。这是回复:
图 7.19 – ChatGPT 对攀岩博客 HTML 代码生成 SEO 审计。
ChatGPT 能够生成相当准确的分析,并带有相关的评论和建议。总的来说,ChatGPT 在 SEO 相关活动方面具有有趣的潜力,无论你是从零开始构建网站还是想改进现有网站,它都是一个很好的工具。
通过情感分析提高质量并增加客户满意度
情感分析是营销中一种技术,用于分析和解释客户对品牌、产品或服务所表达的情绪和观点。它涉及使用natural language processing(NLP)和machine learning(ML)算法来识别和分类社交媒体帖子、客户评论和反馈调查等文本数据的情感。
通过执行情感分析,营销人员可以洞察客户对其品牌的感知,识别改进领域,并做出数据驱动的决策以优化营销策略。例如,他们可以跟踪客户评论的情绪,识别哪些产品或服务收到了正面或负面反馈,并相应调整他们的营销信息。
总而言之,情感分析是营销人员理解客户情感、衡量客户满意度以及开发与目标受众产生共鸣的有效营销活动的宝贵工具。
情感分析已经存在一段时间了,所以你可能好奇 ChatGPT 能带来什么额外价值。嗯,除了分析的准确性(它是目前市场上最强大的模型)之外,ChatGPT 与其他情感分析工具的区别在于它是general artificial intelligence(AGI,通用人工智能)。
这意味着当我们使用 ChatGPT 进行情感分析时,我们并没有使用它用于该任务的特定 API:ChatGPT 和 OpenAI 模型背后的核心思想是它们可以同时协助用户处理许多通用任务,与任务交互并根据用户的请求更改分析的范围。
因此,ChatGPT 确实能够捕捉给定文本(如推特帖子或产品评论)的情绪。然而,ChatGPT 还可以进一步协助识别产品或品牌中对情感产生正面或负面影响的特定方面方面。例如,如果客户不断以负面方式提到产品的某个功能,ChatGPT 可以将该功能突出为待改进领域。或者,ChatGPT 可能被要求对一条特别微妙的评论生成回复,同时兼顾评论的情绪并将其作为回复的背景。同样,它可以生成报告,总结评论或留言中发现的所有负面和正面元素,并将它们归入不同的类别。
让我们考虑以下示例。一位客户最近从我的电子商务公司RunFast购买了一双鞋,并留下了以下评论:
“我最近买了 RunFast Prodigy 鞋子,感觉很复杂。它们非常舒适,缓冲和支撑非常好,减轻了我跑步时的脚部疲劳。设计也很吸引人,我收到了一些赞美。然而,耐用性令人失望;外底磨损很快,透气鞋面在几周后就有磨损迹象。考虑到高价格,尽管它们舒适且漂亮,我还是不推荐。”
让我们让 ChatGPT 捕捉这条评论的情绪:
图 7.20 – ChatGPT 分析客户评论
从前面的图中,我们可以看到 ChatGPT 并不限于提供一个标签:它还解释了构成该评论的正面和负面元素,这条评论具有复杂感,因此整体上可以被标记为中性。
让我们尝试深入探讨,并就改进产品提出一些建议:
图 7.21 – 根据客户反馈如何改进我产品的建议
最后,让我们给客户生成回复,表明我们作为一家公司关心客户的反馈,并希望改进我们的产品。
图 7.22 – ChatGPT 生成的回复
我们看到的示例非常简单,只有一条评论。现在想象一下我们有成千上万条评论,以及接收反馈的多种销售渠道。想象一下 ChatGPT 和 OpenAI 模型等工具的力量,它们能够分析并整合所有这些信息,识别产品的优缺点,捕捉客户趋势和购物习惯。此外,对于客户服务和留存,我们还可以使用我们偏好的写作风格自动回复评论。事实上,通过调整机器人的语言和语调以满足客户的特定需求和期望,你可以创造更具吸引力且有效的客户体验。
以下是一些示例:
共情机器人:使用同理心的语气和语言与可能遇到问题或需要敏感问题帮助的客户进行交互。专业机器人:使用专业的语气和语言与可能寻找特定信息或需要技术问题帮助的客户进行交互。对话机器人:使用随和和友好的语气与可能寻求个性化体验或有更一般查询的客户进行交互。幽默机器人:使用幽默和机智的语言与可能寻求轻松体验或缓解紧张局势的客户进行交互。教育机器人:使用教学式的沟通风格与可能想要了解更多产品或服务的客户进行交互。
总之,ChatGPT 可以成为企业进行情感分析、提高质量和留住客户的强大工具。凭借先进的自然语言处理能力,ChatGPT 可以实时准确地分析客户反馈和评论,为企业提供关于客户情绪和偏好的宝贵见解。通过将 ChatGPT 作为客户体验策略的一部分,企业可以快速识别任何可能对客户满意度产生负面影响的问题并采取纠正措施。这不仅可以帮助企业提高质量,还能增加客户的忠诚度和留存率。
总结
在本章中,我们探索了营销人员如何利用 ChatGPT 来增强其营销策略。我们了解到 ChatGPT 可以帮助开发新产品,以及定义其进入市场的策略、设计 A/B 测试、增强 SEO 分析,并捕捉评论、社交媒体帖子和其他客户反馈的情绪。
ChatGPT 对营销人员的重要性在于,它具有改变公司与客户互动方式的潜力。通过利用 NLP、ML 和大数据的力量,ChatGPT 允许公司创建更具个性化和相关性的营销信息,提高客户支持和满意度,最终驱动销售和收入。
随着 ChatGPT 的不断进步和演进,我们可能会看到它更多地参与营销行业,特别是在公司与客户互动的方式上。事实上,高度依赖 AI 允许公司对客户行为和偏好获得更深层次的见解。
营销人员的关键启示是拥抱这些变化并适应 AI 驱动的营销的新现实,以保持竞争领先地位并满足客户的需求。
在下一章中,我们将介绍书中涵盖的 ChatGPT 应用的第三个也是最后一个领域——研究。
第 7 章 用 ChatGPT 重塑研究
加入我们的 Discord 书籍社区
在本章中,我们重点关注希望利用 ChatGPT 的研究人员。本章将阐述 ChatGPT 可以解决的几个主要用例,以便你通过具体的示例学习如何在研究中使用 ChatGPT。
在本章结束时,你将熟悉如何以多种方式将 ChatGPT 作为研究助手,包括以下:
- 研究人员对 ChatGPT 的需求
- 为你的研究头脑风暴文献
- 为你的实验设计和框架提供支持
- 生成并格式化参考文献,以将其整合到你的研究中
- 针对不同受众交付关于你的研究推演或幻灯片演示
本章还将提供示例,并让你能够亲自尝试提示词(prompts)。
研究人员对 ChatGPT 的需求
ChatGPT 是各个领域研究人员极具价值的资源。作为一个在海量数据上训练的复杂语言模型,ChatGPT 可以快速准确地处理大量信息,并生成可能通过传统研究方法难以发现或耗时才能发现的见解。
此外,ChatGPT 可以通过分析人类研究人员可能无法立即察觉的模式和趋势,为研究人员提供其领域的独特视角。例如,想象一位研究人员正在研究气候变化,并希望理解公众对这一问题的看法。他们可能会要求 ChatGPT 分析与气候相关的社交媒体数据,并识别网上人们表达的最常见主题和情绪。然后,ChatGPT 可以为研究人员提供一份详尽报告,列出与该主题相关的常见词汇、短语和情感,以及任何可能需要了解的新趋势或模式。
通过与 ChatGPT 合作,研究人员可以获得端技术和见解,并保持在该领域的前沿。
现在让我们深入探讨 ChatGPT 提高研究效率的四个用例。
本章中提出的大多数示例都是基于最新信息的;事实上,你经常会看到 ChatGPT 调用网络搜索插件。如果你使用的是带有
GPT-3.5-turbo的 ChatGPT(即免费版),请记住它没有启用网络搜索插件,因此其知识截止日期限制在 2021 年。如果你正在寻找更新的信息,以及通常来自网络的引用(以便你可以双击回答的可靠性),这可能是一个局限性。
为你的研究头脑风暴文献
文献综述是一个关键且系统的过程,旨在对特定主题或问题的现有已发表研究进行检查。它涉及搜索、评阅和综合相关的已发表研究和其他来源(如书籍、会议论文和灰色文献)。文献综述的目标是识别特定领域中的空白、不一致之处以及开展进一步研究的机会。
文献综述过程通常涉及以下步骤:
- 定义研究问题:进行文献综述的第一步是定义感兴趣主题的研究问题。假设我们正在进行关于社交媒体对心理健康影响的研究。现在我们想对头脑风暴一些可能的研究问题以集中我们的研究,我们可以利用 ChatGPT 来做到这一点:
图 8.1 – 基于给定主题的研究问题示例
这些都是可以进一步调查的有趣问题。由于我特别对第一个感兴趣——“社交媒体互动和在线支持社区以哪些方式影响患有慢性心理健康状况个人的心理健康?”——我将保留这作为我们分析后续步骤的参考。
- 搜索文献:现在我们有了研究问题,下一步是使用各种数据库、搜索引擎和其他来源搜索相关文献。研究人员可以使用特定的关键词和搜索术语帮助识别相关研究。
图 8.2 – 在 ChatGPT 支持下的文献检索
从 ChatGPT 的建议开始,我们可以深入研究这些参考文献。
- 筛选文献:一旦确定了相关文献,下一步是对研究进行筛选,以确定它们是否符合综述的标准。这通常涉及审阅摘要,并在必要时审阅研究全文。
假设我们想深入研究《社交媒体与青少年焦虑:来自哈佛大学教育学院的见解》研究论文。让我们让 ChatGPT 为我们筛选:
图 8.3 – 特定论文的筛选
ChatGPT 能够为我提供该论文的概述,考虑到其研究问题和讨论的主要主题,我认为它对我自己的研究非常有用。
- 提取数据:在确定了相关研究后,研究人员需要从每项研究中提取数据,例如研究设计、样本量、数据收集方法和主要发现。
例如,假设我们从 Hinduja 和 Patchin (2018) 年的《数字自残:流行率、动机和结果》论文中收集以下信息:
- 论文中收集的数据来源和研究对象
- 研究者采用的数据收集方法
- 数据样本量
- 分析的主要局限性和缺点
- 研究者采用的实验设计
具体如下:
图 8.4 – 从给定论文中提取相关数据和框架
1. 文献综合
文献综述过程的最后一步是综合研究结果,并对该领域的当前知识状态得出结论。这可能涉及识别共同主题、突出文献中的空白或不一致之处,以及确定未来研究的机会。
让我们想象一下,除了 ChatGPT 提出的论文外,我们还收集了其他想要综合的标题和论文。更具体地说,我想了解它们是否得出了相同的结论、共同趋势是什么,以及哪种方法比其他方法更可靠。对于这种场景,我们将考虑三篇研究论文:
- The Effects of Social Media on Mental Health: A Proposed Study,作者为 Grant Sean Bossard (
digitalcommons.bard.edu/cgi/viewcontent.cgi?article=1028&context=senproj_f2020) - The Impact of Social Media on Mental Health,作者为 Vardanush Palyan (
www.spotlightonresearch.com/mental-health-research/the-impact-of-social-media-on-mental-health) - The Impact of Social Media on Mental Health: a mixed methods research of service providers’ awareness,作者为 Sarah Nichole Koehler 和 Bobbie Rose Parrell (
scholarworks.lib.csusb.edu/cgi/viewcontent.cgi?article=2131&context=etd)
结果显示如下:
图 8.5 – 三篇研究论文的文献分析与基准测试
此外,在这种情况下,ChatGPT 能够对提供的三篇论文生成相关的总结和分析,包括方法之间的基准测试和可靠性考虑。
总的来说,ChatGPT 能够在文献综述领域开展许多活动,从研究问题的头脑风暴到文献综合。一如既常,循环中需要一个领域专家(SME)来审核结果,但在这种帮助下,许多活动可以更高效地完成。
另一个可以由 ChatGPT 支持的活动是研究者希望进行的实验设计。我们将在下一节介绍这一点。
为你的实验设计和框架提供支持
实验设计是计划和执行科学实验或研究以回答研究问题的过程。它涉及对研究设计、待测变量、样本量以及数据收集和分析程序的决策。
ChatGPT 可以通过向你建议研究框架(例如随机对照试验、准实验设计或相关性研究)来帮助研究的实验设计,并在设计的实施的同时提供支持。
让我们考虑以下场景。我们想调查新的教育计划对学生数学学习成果的影响。这种新计划涉及项目制学习(PBL),这意味着要求学生合作完成真实世界的项目,使用数学概念和技能来解决问题并创建解决方案。
为了实现这一目的,我们将研究问题定义如下:
新的 PBL 程序在提高学生表现方面与传统教学方法相比如何?
以下是 ChatGPT 如何提供帮助:
- 确定研究设计:ChatGPT 可以协助为研究问题确定合适的研究设计,例如随机对照试验、准实验设计或相关性研究。
图 8.6 – ChatGPT 为你的实验建议合适的实验设计
ChatGPT 建议采用随机对照试验 (RCT),并对其背后的原因提供了清晰的解释。对我来说,采用这种方法是合理的:下一步将确定实验中考虑的结果衡量和变量。
- 识别结果衡量:ChatGPT 可以帮助你识别一些潜在的结果衡量,以确定测试结果。让我们为我们的研究寻求一些建议:
图 8.7 – 给定研究学习的学习成果
我选择测试分作为结果衡量是合理的。
- 识别变量:ChatGPT 可以帮助研究者识别研究中的自变量和因变量:
图 8.8 – ChatGPT 为给定研究生成变量
注意,ChatGPT 还能生成特定于我们考虑的研究设计(RCT)的变量类型,称为控制变量。
控制变量(也称为协变量)是在研究中保持保持不变或受控制的变量,以隔离自变量与因变量之间的关系。这些变量不是研究的重点,但将它们包含进来是为了减少混杂变量对结果的影响。通过控制这些变量,研究人员可以降低获得假阳性或假阴性结果的风险,并增加研究的内部效度。
有了上述变量,我们准备好建立实验了。现在我们需要选择参与者,ChatGPT 可以协助我们完成这一点。
- 采样策略:ChatGPT 可以为研究建议潜在的采样策略:
图 8.9 – ChatGPT 的 RCT 采样建议
注意,在现实场景中,要求 AI 工具生成带有解释的更多选项是一个良好的做法,这样你就可以做出合理的决策。对于这个例子,让我们按照 ChatGPT 给我们的建议进行,这还包括对目标群体和样本量的建议。
- 数据分析:ChatGPT 可以协助研究者确定用于分析研究收集数据的合适统计方法,例如方差分析 (ANOVA)、t 检验或回归分析。
图 8.10 – ChatGPT 为给定研究建议统计检验
ChatGPT 建议的所有内容都是连贯的,并在关于如何进行统计检验的论文中找到了证实。它还能识别出我们可能谈论的是连续变量(即分数),以便我们知道后续的所有信息都是基于这一假设的。如果我们想要离散分数,我们可以通过添加此信息来调整提示词,ChatGPT 然后就会建议不同的方法。
ChatGPT 指明假设并解释其推理,这是根据其输入做出安全决策的关键。
结论,ChatGPT 在研究人员设计实验时是一项非常有价值的工具。通过利用其自然语言处理(NLP)能力和丰富的知识库,ChatGPT 可以帮助研究人员选择合适的研究设计、确定采样技术、识别变量和学习成果,甚至建议用于分析数据的统计方法。
在下一节中,我们将进一步探索 ChatGPT 如何支持研究人员,重点关注参考文献的生成。
生成和格式化参考文献
ChatGPT 可以通过提供自动化的引用和参考文献工具来支持研究人员生成参考文献。这些工具可以为各种来源(包括书籍、文章、网站等)生成准确的引用和参考文献。ChatGPT 了解多种引用格式,例如 APA、MLA、Chicago 和 Harvard,允许研究人员根据其工作选择合适的格式。此外,ChatGPT 还可以根据研究人员的输入建议相关的来源,帮助简化研究流程并确保所有必要的来源都包含在参考文献中。通过利用这些工具,研究人员可以节省时间,并确保参考文献的准确和全面。
让我们考虑以下例子。假设我们定了一篇题为《技术对工作生产力的影响:实证研究》(The Impact of Technology on Workplace Productivity: An Empirical Study)的论文。在研究和写作过程中,我们收集了以下论文、网站、视频和其他来源的引用,我们需要将其纳入参考文献(顺序为:三篇研究论文、一个 YouTube 视频和一个网站):
The second machine age: Work, progress, and prosperity in a time a brilliant technologies. Brynjolfsson, 2014. https://psycnet.apa.org/record/2014-07087-000The Impact of Technostress on Role Stress and Productivity. Tarafdar, 2014. Pages 301-328. https://www.tandfonline.com/doi/abs/10.2753/MIS0742-1222240109The big debate about the future of work, explained. Vox. https://www.youtube.com/watch?v=TUmyygCMMGA
显然,我们不能在研究论文中直接使用上述列表;我们需要对其进行正确的格式化。为了做到,我们可以向 ChatGPT 提供原始参考文献列表,并要求它以特定的格式重新生成,例如 APA 格式,这是美国心理学会(APA)的官方格式,常用于教育、心理学和社会科学的参考文献格式样式。
让我们看看 ChatGPT 是如何处理的:
图 8.11 – ChatGPT 生成的 APA 格式参考文献列表
注意,我特别指定了不要添加细节,以防 ChatGPT 不知道这些信息。事实上,我注意到 ChatGPT 有时会添加出版的月份和日期,从而导致一些错误。
ChatGPT 可以提供的其他有趣帮助是建议我们可能想要引用的潜在参考文献。我们在本章的第一段已经看到了 ChatGPT 如何在写作过程之前对相关文献进行头脑风暴;然而,一旦论文完成,我们可能会忘记引用相关文献,甚至没有意识到引用了别人的工作。
ChatGPT 在头脑风暴中的应用
ChatGPT 在头脑风暴我们可能遗漏的潜在参考文献方面可以是一个非常出色的助手。让我们再次考虑我们的论文,研究问题是“社交媒体互动和在线支持社区如何影响患有慢性心理健康状况个人的心理健康?”假设我们设定了以下标题和摘要,其摘要包含以下内容:
Title: 社交媒体和在线支持社区对慢性心理健康状况个人心理健康的影响
Abstract: 本研究探索了社交媒体互动和在线支持社区对慢性心理健康状况个人心理健康的影响。通过检查各种在线平台,该研究旨在识别积极和消极的影响。研究利用了定性和定量方法(包括问卷调查和访谈)来评估焦虑、抑郁和整体生活满意度的变化。初步结果表明,虽然在线支持可以提供宝贵的社交连接和情感支持,但过度使用和负面互动可能会加剧心理健康问题。
让我们让 ChatGPT 列出可能与此类研究相关的各种参考文献:
图 8.12 – 与提供的摘要相关的参考文献列表
你也可以对论文的其他部分重复此过程,以确保你没有遗漏任何需要包含在参考文献中的相关引用。
一旦你的研究准备就绪,你可能需要通过“电梯演讲”(elevator pitch)来展示它。在下一节中,我们将看到 ChatGPT 如何也支持这项任务。
生成研究演示报告
研究的“最后一公里”通常是向不同的观众进行展示。这可能涉及准备幻灯片组、演说稿(pitch)或网络研讨会,研究人员需要面对不同类型的听众。
例如,假设我们的研究《社交媒体和在线支持社区对慢性心理健康状况个人心理健康的影响》是为了硕士论文答辩准备。在这种情况下,我们可以要求 ChatGPT 生成一个持续 15 分钟并遵循科学方法的演说结构。让我们看看产生了什么样的结果(作为背景,我指的是上段的摘要):
图 8.13 – ChatGPT 生成的论文答辩
这太令人印象深刻了!在我的大学时代,如果有这样一个工具来协助我设计答辩将非常有帮助。
从这个结构开始,我们还可以要求 ChatGPT 生成一个幻灯片组作为我们论文答辩的视觉辅助。让我们继续这个请求:
图 8.14 – 基于演说稿的幻灯片结构
最后,假设我们的论文答辩非常出色,以至于可能获得研究资金以继续调查该课题。现在我们需要一个电梯演讲来说服委员会。让我们向 ChatGPT 请求支持:
图 8.15 – 为给定论文的电梯演讲
我们可以随时调整结果,使其更符合我们的需求,然而,现成的结构和框架可以节省大量时间,让我们能够专注于我们想要呈现的技术内容。
总的来说,ChatGPT 能够支持研究的全全程,从文献收集和综述到研究的最终演示,我们已经证明了它可以成为研究人员极出色的 AI 助手。
此外,请注意在研究领域,最近开发了一些与 ChatGPT 不同但同样由 GPT 模型驱动的工具。例如Humanata.ai,这是一个 AI 驱动的工具,允许你上传文档并对其进行多种操作,包括摘要、即时问答以及基于上传的文件生成新论文。
这表明基于 GPT 的工具(包括 ChatGPT)正在为研究领域的若干创新铺平道路。
总结
在本章中,我们探索了 ChatGPT 作为研究人员价值工具的使用。通过文献综述、实验设计、参考文献生成和格式化以及演示报告生成,ChatGPT 可以帮助研究人员加速那些低价值或零价值的活动,让他们能够专注于相关的活动。
请注意,我们仅关注了 ChatGPT 可以支持研究人员的一小部分活动。在研究领域还有许多其他活动可以从 ChatGPT 的支持中受益,其中我们可以提到的数据收集、研究参与者招募、研究网络建立、公众参与等。
将此工具整合到工作中的研究人员可以从其多功能和节省时间的特性中受益,最终带来更有影响力的研究成果。
然而,重要的是记住,ChatGPT 仅仅是一个工具,应该结合专家知识和判断来使用。与任何研究项目一样,必须对研究问题和研究设计进行仔细考虑,以确保结果的有效性和可靠性。
通过本章,我们也结束了本书的第二部分,该部分重点关注了你可以利用 ChatGPT 的广泛场景和领域。然而,我们主要关注个人或小团队的使用,从个人生产力到研究辅助等。从第三部分开始,我们将讨论提升到大型组织如何利用 Microsoft Azure 云上提供的 OpenAI 模型 API,将 ChatGPT 背后的相同生成式 AI 用于企业级项目。
参考文献
arxiv.org/abs/2312.11914arxiv.org/abs/2101.07714arxiv.org/abs/2101.07714psycnet.apa.org/record/2014-07087-000www.tandfonline.com/doi/abs/10.2753/MIS0742-1222240109www.youtube.com/watch?v=TUmyygCMMGA
9 探索 GPTs
在 Discord 上加入我们的书籍社区
在之前的几个章节中,我们看到了许多如何利用 ChatGPT 进行各种活动的示例,从个人生产力到营销,从研究到软件开发。对于这些场景中的每一个,我们总是面临着类似的情况:我们从像 ChatGPT 这样的通用模型开始,然后提出非常具体的问题或提供特定的参考,以定制以满足我们的特定需求。
然而,如果我们的目标是为自己的用途获取一个极其专业化的模型,有时这可能是不够的。这就是为什么我们可能需要构建“特定用途的 ChatGPT”,而且幸运的是,OpenAI 本身开发了一个无代码平台来构建这些自定义助手,这些助手被称为 GPTs。
在本章中,我们将详细介绍 GPTs 的功能、能力和现实世界中的应用,涵盖了我们在之前的章节中看到的相同用例,以便你能够看到输出质量上的差异。此外,我们还将看到如何发布你的 GPT,并使其成为不仅适用于你自己,也适用于公司或所有人的生产应用。
在本章结束时,你将能够:
- 理解什么是 GPT 以及它能完成什么样的任务
- 在不编写任何代码的情况下构建你自己的 GPT
- 发布你的 GPT 并将其与外部系统集成
让我们从一些基本定义开始,然后进入实践。
技术要求
ChatGPT Plus
什么是 GPTs?
2023 年 11 月,OpenAI 引入了 GPTs,这是 ChatGPT 的专用版本,旨在提高生产力并满足特定的任务和需求。与通用 ChatGPT 不同,这些自定义版本被称为 GPTs,允许用户在没有任何任何编码知识的情况下创建定制的 AI 模型。
注意:预先考虑分类法的考量是重要的,这在整个章节中都将相关。当我们提到 GPT 这个词时,你在书中已经发现并将会发现两种主要定义:
- 第一种是指 OpenAI 语言模型背后真正的“生成式预训练变换器”(
GPT)模型架构。我们已经在第一部分提到过这种架构,并且知道这是 ChatGPT 本身背后的框架。- 第二种在更广义的情况下是指 OpenAI 允许用户以无代码方式创建的专用助手。通过 GPTs,OpenAI 指的是 ChatGPT 的专用版本,在这种语境下,单个 GPT 指你利用 GPTs 平台(所有 ChatGPT Plus 用户均可用)创建的一个助手。
在本章中,每当你读到GPT或GPTs时,请记住我们使用的是第二种定义。
GPTs 的理念就像 AI 代理(Agents)。事实上,通过 GPTs,我们正在构建由 LLM 驱动的实体,它们具有特定的指令,并提供了自定义知识库以及一组工具或插件来与周围环境交互。
让我们详细查看所有这些组件。首先,你可以全面查看所有已公发布的 GPTs。要做到这一点,你可以访问以下页面:chatgpt.com/gpts。
如从前面的图片所示,这是所有 GPTs 的市场。你可以通过类别(box 1)或通过说明你寻找的内容(box 2)来探索它。
然后要创建你自己的 GPT,你可以进入 OpenAI 账户并点击左上角的 Explore GPTs,然后点击Create(如box 3所示)。
一旦进入编辑器,你将被要求配置你的 GPT,而在右侧你有机会进行实时测试。让我们探索所有组件:
- Name(名称):你给你的 GPT 起的名字。
- Description(描述):你的 GPT 功能的描述。如果你打算在市场发布你的 GPT,这非常重要,这样其他用户就可以轻松找到它(正如我们之前提到的,可以通过 Search GPTs 搜索栏通过自然语言搜索 GPTs)。
- Instructions(指令):这是你 GPT 的元提示(metaprompt),即用自然语言编写的指令,用于根据你的特定需求定制助手,且最终用户看不到。
- Conversation Starters(对话启动器):一组示例提示词,用户可以使用它们开始与 GPT 交互并建立信心。
- Knowledge(知识):指的是我们可以为模型提供的自定义文档。当我们在这里上传文档时,我们的 GPT 将能够通过检索增强生成(RAG)模式遍历它,因此我们可以根据需要提供额外的知识,甚至将助手的回答限制在自定义知识库中。
- Capabilities(能力):这些指的是我们可以为 GPT 提供的一组内置插件,无需编写单行代码。你可以从上面的图中看到开箱即用的三个插件:
- Web browsing(网络浏览)用于搜索网络并获取最新信息。
- DALL-E 3 用于生成插图。
- Code Interpreter and Data Analysis(代码解释器和数据分析)用于在沙箱 Python 环境中执行代码并与分析文件交互。
- Actions(动作):动作也可以被视为插件,但它们与能力不同,因为它们不是内置的,而是由 GPT 开发者指定的。例如,你可能会生成一个动作
在动作的背景下,如果你点击
Add Actions然后点击Get help from ActionsGPT,你可以获得原生集成在配置面板中的专用 GPT 的支持。
图 3:如何从 ActionsGPT 获取支持的示例
图 3:如何从 ActionsGPT 获取支持的示例
通过这种方式,你将被引导至你的 GPT 聊天界面:
图 4:ActionsGPT 的落地页。
看到我们正在见证“GPT 内部 GPT”的方法,这种感觉很神奇,你不觉得吗?
除了标准配置页外,还有另一种更具“对话性”的构建 GPT 的选项。事实上,你可以切换到Create(创建)标签页,并用自然语言解释你想让 GPT 实现什么目标:
图 5:从自然语言对话开始创建 GPT 的示例。
我们将在本章的后续章节中看到这两种方法——标准配置和对话式配置。
既然我们已经知道了什么是 GPT,让我们来看看如何创建一个。在接下来的几个章节中,我们将创建 5 个不同的 GPT:
- 前四个将专注于我们已经用通用 ChatGPT 涵盖的四个领域——个人生产力、代码开发、营销和研究。其意图是比较特定领域 GPT 与通用 ChatGPT 的整体效率和准确性。
- 第五个将涵盖一个新领域,与艺术创作相关。我们将利用内置的
DALL-E插件以及由设计公司开发的其他插件(如Canvas)。
让我们从通过专门的 GPT 提升个人生产力开始。
个人助手
在这种场景下,我们将构建一个 GPT 来增强我们的健身训练。为此,我们将利用内置插件。此外,我们还将添加一些相关文档,以便助手基于特定的知识库。
我的目标是拥有一个助手,它可以根据我的健身目标、可用时间、性别、年龄、偏好等为我制定训练计划。我还希望助手能对其建议背后的原因提供清晰的解释。
为了实现这一切,我想确保我的助手能够:
- 向我提问设计我最佳训练所需的特定问题
- 提供与其回复相关的相关信息和来源
- 考虑我的反馈,但如果它认为对我是正确的,它将能够坚持自己的观点
- 如果我的请求不合理或对健康有风险,则不满足我的请求
让我们按照上一节提到的所有配置步骤来看如何创建我们的 GPT:
- Name (名称):我将我的助手命名为
WorkoutGPT。 - Description (描述):这是我设置的描述:“帮助用户根据需求设计训练计划的健身助手。”
- Instructions (指令):这里是我们 GPT 的真正核心。这是我提供 GPT 的指令集:
你是一个健身 AI 助手,根据用户的需求帮助他们创建训练计划。
在生成计划之前,请确保询问以下问题:
- 健身目标和时间预期
- 年龄和性别
- 健身水平
- 训练的可用时间
- 为了制定合理的训练计划所需的其他所有元素(例如设备、潜在受伤情况……)
如有需要,使用提供的文档来丰富你的回答。
如果用户建议了某些不符合其目标,请坚持你的假设,并礼貌地解释背后的原因。
如果用户询问了可能对其健康产生风险的问题,请礼貌地建议放轻松并提供替代方案,同时解释背后的原因。
- Conversation Starters (对话启动器):在这里我设置了三个不同训练示例:
- 我想在 6 个月后参加马拉松。
- 生成一个 30 分钟的无设备 HIIT 训练计划。
- 生成一个仅需哑铃的 45 分钟举重训练计划。
- Knowledge (知识):在这里我上传了标准的国家力量与调节协会(
NSCA)训练负荷表,这是一个帮助运动员和教练确定不同练习和训练课程适当负荷的工具。它看起来像:
图 6:NSCA 训练负荷表。来源:https://www.nsca.com/contentassets/61d813865e264c6e852cadfe247eae52/nsca_training_load_chart.pdf
我几乎忘记了一个关键步骤——插图!这看起来可能很表面,但为你的 GPT 设置图标会让它更有吸引力,特别是如果你计划将其发布给所有用户。幸运的是,我们在配置面板中直接集成了DALL-E:
图 7:如何设置你的 GPT 图标的示例。
配置看起来是这样的:
图 8:WorkoutGPT 配置页面。
太棒了!现在让我们看一些示例对话。
首先,让我们选择关于马拉松的对话启动器:
图 9:GPT 评估用户整体目标和健身水平的问题示例。
正如你所看到的,我们的WorkoutGPT会立即询问所需的信息。一旦提供了上述信息,我的助手生成了以下计划(此处输出被截断):
图 10:为马拉松训练生成的训练表示例。
此外,它如下指定了周五的力量训练:
图 11:GPT 生成的力量训练示例。
让我们关注力量训练。我想更好地了解如何调整重量。下面的插图显示了回复的第一部分:
图 12:GPT 解释如何在力量训练中确定重量的示例。
在同一个回复中,助手还引用了作为知识库提供的NSCA训练负荷表:
图 13:GPT 从自定义知识库检索信息的示例。
现在我想挑战我的WorkoutGPT,请求一些可能对我健康有害的东西。例如,在一个月内在没有任何经验的情况下准备马拉松显然是一个糟糕的主意。一旦我提供了其启动问题的答案列表,让我们看看我的助手对此的看法:
图 14:考虑到与请求相关的风险,礼貌地引导用户改变目标和预期的示例。
正如你所看到的,我们的WorkoutGPT正在引导我们改变比赛方法。虽然它仍然为我们提供为期 3 周的跑步训练计划(此处输出被截断),但其目标不是在 3 小时 15 分钟内完赛马拉松,而是增强耐力和力量。
注意,如果我们向通用 ChatGPT 提问相同的问题,它的回复将如下:
图 15:ChatGPT 在存在相关风险的情况下仍完成用户任务的示例。
请注意,尽管 ChatGPT 口头上表达了顾虑,但它仍然在配合我的请求,为我提供了一份运行全程马拉松的计划。这可能会鼓励我——一个认为跑马拉松是个笑话的鲁莽初学者——投身于这场愚蠢的冒险,并对我的健康造成严重后果。
总的来说,GPTs 允许你非常具体地规定助手应该如何行为,以及它应该避免说什么或满足什么要求。
代码助手
在这一节中,我想开发一个专为数据科学项目定制的助手。更具体地说,我希望我的助手能够:
- 根据用户的任务,就如何设置数据科学实验提供清晰的指导
- 生成运行该实验所需的
Python代码 - 利用
code interpreter(代码解释器)能力来运行和检查代码 - 将最终代码推送到
GitHub仓库。
让我们逐步查看如何实现。
1. 设置指令
这个 GPT 是一个数据科学助手,帮助用户设置和运行数据科学实验。它提供了如何设置和运行数据科学实验的指导。它提供了如何组织实验的清晰指导,生成运行实验所需的 Python 代码,并利用 code interpreter 能力来运行和检查代码。GPT 将接收用户的输入并执行代码,并将最终代码推送到 GitHub 仓库。
2. 设置(可选)提示词
- 我如何设置实验?
- 生成
Python代码模型。 - 你能帮我设置吗?
3. 启用代码解释器与数据分析
图 16:启用代码解释器与数据分析。
4. 创建 GitHub 的 Action
为了与 GitHub 交互,我们需要
Schema(架构)。
定义架构的步骤
- 数据(Data):确定数据类型。
- 属性(Properties):
Schema架构下的字段。 - 必填字段(Required fields):
Schema架构中的必填项。 - 响应(Responses):
Schema架构的响应。
考虑以下示例:

浙公网安备 33010602011771号