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

生成式人工智能的完整过时指南(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 架构

gai 2 1

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

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

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

2.2 通过“游戏”学习

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

图 2.2 OpenAI 的 Playground 界面

gai 2 2

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

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

2.3 获取 Python 代码示例

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

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

gai 2 3

现在不要担心细节,但请花点时间浏览包含在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 代码

gai 2 4

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

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

终端点 模型名称
/v1/chat/completions gpt-4, gpt-4-0314, gpt-4-32k, gpt-4-32k-0314, gpt-3.5-turbo, gpt-3.5-turbo-0301
/v1/completions text-davinci-003, text-davinci-002, text-curie-001, text-babbage-001, text-ada-001
/v1/edits text-davinci-edit-001, code-davinci-edit-001
/v1/audio/transcriptions whisper-1
/v1/audio/translations whisper-1
/v1/fine-tunes davinci, curie, babbage, ada
/v1/embeddings text-embedding-ada-002, text-search-ada-doc-001
/v1/moderations text-moderation-stable, text-moderation-latest
要点

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

2.5 完成配置

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

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

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

图 2.5

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

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

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

图 2.6

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

  • 模式

  • 温度

  • 最高 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

gai 3 1

注意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 编辑模式

gai 3 2

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

要点

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

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

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

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

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

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

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

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

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

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

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

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

提示工程

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

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

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

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

gai 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 的训练过程

gai 4 1

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

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

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

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

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

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

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

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

4.1.1 提供详细提示

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

一些树木

…​不如:

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

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

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

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

gai 4 2

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

  • 摄影

  • 立体派的

  • 油画

  • 哑光的

  • 超现实主义的

  • 蒸汽朋克

  • 可爱的生物

  • 幻想世界

  • 赛博朋克

  • 古老的

  • 文艺复兴时期的绘画

  • 抽象的

  • 真实的

  • 表现主义

  • 漫画

  • 墨水

4.1.2 提示生成图像

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

提示工程

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

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

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

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

gai 4 3

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

图 4.4 Stable Diffusion 的 "书封" 图像

gai 4 4

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

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

图 4.5 在 Discord 帐户中访问 Midjourney

gai 4 5

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

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

gai 4 6

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

图 4.7 Stable Diffusion GitHub 页面

gai 4 7

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

图 4.8 DreamStudio 浏览器界面

gai 4 8

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 网页

图 5.1 ChatPDF 网页

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

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

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

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

gai 5 2

这是第一步的工作原理:

  • 使用指向 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 的流程。

gai 5 3

为了解决第一个问题,我创建了一个包含所有课题的单个文本文件,每行大约有四到五个课题。然后我创建了一个 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 使用非标准化数据可视化的硬件组件数据

gai 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 使用标准化数据可视化的硬件组件数据

gai 6 2

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

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

6.5 总结

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

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

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

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

6.6 请你自己试试

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

第七章:使用生成式人工智能超越传统研究和学习工具

本章包括:

  • 生成准确可靠的投资指导

  • 将大型语言模型(LLMs)融入您的技能采用流程

  • 将 LLMs 融入您的日常工作中

有人说 AI 不会让任何人失业,但是那些使用 AI 的人会让那些不使用 AI 的人失业。

当然,前提是 AI 不会首先把我们全部杀光,那么我们应该做些什么才能确保我们成为快乐用户组而不是遗憾的局外人?

让我给你提供一些背景。我比你想的要老很多。我用钢笔在纸上写了我的第一本书。它可能是一种非常古老的技术,但它是太阳能供电的(即:只有在我打开灯的时候才能发挥作用)。当然,后来我费了很多力气将整本书打字到电脑中。但是那时候我使用的软件(WordPerfect 4.2 for DOS)甚至没有自己的拼写检查功能。

从那以后,我的出版事业一直在新技术的推动下蓬勃发展。我的第一台打印机(从姐夫那里获得的),我的第一台文档扫描仪,我的第一次上网连接(是的:这确实是在打印机和扫描仪之后),我的第一台 DSL 调制解调器,我的发现和采用 Linux 等等。每一次变化都对我的工作效率和效能产生了明显影响。

但是这些变化都不及我从生成式人工智能中获得的核动力。这不仅仅是因为我可以以惊人的速度获取有关事件、关系、过程和趋势的详细信息。也不仅仅是因为突然间有更多的解析数据可供我使用。而是因为所有的事情现在都变得更快了。我所做的一切都是无缝进行的。

这里只是我在过去的一周里的几个互动实例:

  • 曾几何时,选择一台新(二手)笔记本电脑需要进行长时间的深入研究:HP EliteBook 840 G3 是否具备我所需的所有端口?它使用什么样的视频芯片组?其 CPU 的性能如何与我之前测试过的其他 CPU 的基准性能评分相比?今天呢?只需要问能否比较一下 HP EliteBook 840 G1 笔记本与 Lenovo ThinkPad T420 的规格和性能呢?然后是G3 配备 i5 芯片是否比 G1 配备 i7 芯片更好呢?最后,我能期望它的电池寿命有多长呢?

  • 曾几何时,找出如何访问特定笔记本电脑上的 WiFi 无线电卡可能需要在线搜索正确的用户手册的副本,并且希望手册中有相关信息。今天呢?只需要问:如何访问 Lenovo ThinkPad T420 上的 WiFi 卡?

  • 曾几何时,要了解一些医学问题的背景意味着要在在线医学研究档案中搜索,希望有人已经进行了研究,它已经发表,可以在线获取,并且您能在合理的时间内从中提取意义。如今呢?只需问一下:病人戴着口罩(限制他的气流)进行的 ECHO(超声心动图)应力测试的结果会受影响吗?

当然,你会记得确认 AI 给出的任何信息,尤其是医疗信息。但即便如此,你肯定也想要了解这方面的情况。所以让我举几个例子,让你了解到你过去几乎每一个研究任务如何都可以变得更好、更快、更准确。

7.1 请求投资指导

GPT 能为您挑选股票买卖吗?可以的。GPT 实际上可以在没有您参与的情况下执行交易吗?可以的。这也是可能的。这是个好主意吗?也许现在还不是。坦率地说,我并没有急着按下那个特定的“开始”按钮。

但正如我们一次又一次看到的那样,AI 工具有许多特定的优势,当应用于正确的问题场景时,这些优势就会转化为超能力。嗯,我会说“投资指导”大概是接近“正确问题场景”的问题了。

其中一个明显的原因是做出明智的投资决策涉及消化大量数据。有多少数据?仅一个 10-K 表,公开交易公司每年都必须向美国证券交易委员会(SEC)提交的表格,就可能包含超过 10 万字。而且,通常情况下,它们并不是激动人心的写作。所以不要指望这样的文件会让你在海滩上的悠闲夏日午后着迷。

另一方面,要真正了解一家公司的当前价值,或准确地预测未来的发展,就必须以某种方式阅读并吸收其中包含的基本信息,还有其他文件。不要忽视投资研究的本质是对不止一个公司,而是对数十个甚至数千个公司进行尽职调查。

如果有一种 - 哦,我不知道 - 一种数字工具可以为我们访问和分析所有这些数据,那不是很棒吗?你觉得 GPT 可能在这方面有所帮助吗?

好吧,至少目前来说,先忘了 ChatGPT 吧:10 万字对于一个聊天提示来说太长了。但是到了书的这一部分,你已经熟悉了如何解决这个限制了。所以这就是当我拿着特斯拉 2021 年 12 月 31 日结束的财年的 10-K 表给 ChatPDF 处理时发生的事情。

这份文件本身可以在 SEC 网站上的网页上找到。要将其转换为 PDF 文档,我首先使用wget将 HTML 下载到了我的电脑上。

wget <url>

文件的巨大大小给我带来了一些麻烦,所以我使用了 Cloud Convert 网站将文件转换为 Markdown 格式。然后,免费的文件转换程序Pandoc让我很容易制作 PDF 文件:

pandoc -o tesla_10k.pdf --pdf-engine=xelatex tesla_10k.md

我将该 PDF 文件上传到 ChatPDF,并给出以下提示:

从 10-K 文件中,找出并解释对潜在投资者最重要的项目的意义。必要时,添加表格、摘要和分析。

我得到的回应的一部分如下(图表以 Markdown 格式保存):

在第 66 页的 10-K 表格中,你可以找到截至 2021 年 12 月 31 日的合并资产负债表。以下是一些可能引起潜在投资者兴趣的关键项目:

项目 金额(以百万美元计)
现金及现金等价物 $16,214
有价证券 $9,986
总流动资产 $38,535
固定资产、厂房和设备净值 $22,936
总资产 $121,872
总流动负债 $23,758
长期债务 $12,385
总负债 $63,091
股东权益总额 $58,781

现金及现金等价物和有价证券是潜在投资者关注的重要项目,因为它们代表特斯拉的流动性状况。截至 2021 年 12 月 31 日,特斯拉的现金和有价证券总额达到 262 亿美元。这与上一年底的 194 亿美元相比,有了显著增长。这种流动性的增加对投资者来说是一个积极的信号,因为它表明特斯拉有足够的资源来支持其运营和投资于增长机会。

固定资产、厂房和设备是另一个对投资者来说重要的项目,因为它代表着特斯拉对固定资产(如工厂和设备)的投资。截至 2021 年 12 月 31 日,特斯拉的固定资产、厂房和设备的净账面价值达到 229 亿美元。这与上一年底的 186 亿美元相比有所增加,这表明特斯拉继续大量投资于其制造能力。

总负债也是投资者关注的重要项目,因为它代表着特斯拉的债务义务。截至 2021 年 12 月 31 日,特斯拉的总负债为 631 亿美元,其中包括

要获得一个全面的图像,你可能想要通过更多问题进行深入挖掘。我试过以下一个问题:

公司当前的资源配置是否存在风险?

这促使我作出以下回应:

是的,特斯拉在 10-K 表格中针对其资源分配确定了几个风险。公司计划通过大量现金投资和管理资源来加速业务增长,以满足全球销售、交付、安装、服务和车辆充电目标。不能保证这些计划将产生特斯拉产品的额外销售或安装,或公司将能够避免成本超支或雇佣额外人员来支持它们。此外,特斯拉面临着与供应链中断、政府监管和激励措施变化以及汽车行业其他公司的竞争相关的风险。这些风险可能会影响公司的财务表现和未来前景。

接下来的问题对我们的研究很有帮助:

特斯拉目前的流动比率和债权-资产比率是多少?

返回结果如下:

根据 10-K 表格提供的信息,截至 2021 年 12 月 31 日,特斯拉的流动比率为 1.14,其债权-资产比率为 2.08。这些比率可以在 10-K 表格的“当前负债及融资租赁”的部分和当前年度的“负债总额”下的第 359 页找到。重要的是要注意,这些比率可能随着时间的推移而发生变化,应与其他财务指标一起评估,以获得对特斯拉财务状况的全面了解。

想要一些背景信息吗?一个简单的后续问题可能有所帮助:

能帮我理解那些比率的意义吗?

这只是我收到的回复的一小部分:

流动比率是一种流动性比率,用于衡量一家公司使用其流动资产支付短期债务的能力。当前比率为 1 或更高通常被认为是很好的,因为这表明公司有足够的流动资产来支付其短期负债。在特斯拉的情况下,当前比率为 1.14,表明公司有足够的流动资产来支付其短期债务…

你有了解吗?但这只是开始。通过 AI 分析每个公司仍需要大量时间。但是,借助我们在早期章节中已经遇到的 API 工具,没有什么可以阻止您编写(相对)简单的自动化脚本,以:

  • 下载 10, 100 或 1,000 家公司的 10-K 文件

  • 将 HTML 文件转换为 PDF 文件

  • 通过 API 将每个 PDF 提交到 ChatPDF

  • 提示 GPT 根据其对每份 10-K 的评估为每家公司分配分数

  • 返回一个列表,按其得分对所有评估的公司进行排名

不确定如何编写脚本?向 OpenAI 的您懂的人提问。只是友好提醒:该脚本可能会延伸到数百行,即使有 AI 的帮助,也需要数小时进行调试。

考虑到所有适当的 API 费用,你也可以每天、每周或每月运行此脚本。或者开设自己的全自动市场调研服务(几个月后,乘坐你的超级游艇退休到希腊群岛)。

听起来很有前途?我可以向你保证,我们并不是第一个想到这个想法的人。例如,一个名为 Global Predictions 的组织为个人提供了一项名为 Portfolio Pilot 的免费服务。该应用程序使用复杂的人工智能管道分析宏观市场状况,并将其产生的见解应用于每个用户自己的投资组合概况。使用(希望)可靠的投资原则,该工具可以提供实时投资建议。

重点是,Portfolio Pilot 声明他们不通过用户费用、广告或销售佣金来变现用户参与度,而是“通过与用户学习如何与我们的经济模型进行交互、运行模拟并将见解直接应用于其投资组合。”换句话说,他们正在利用获得大量消费者投资数据的价值。

当然,值得重申的是,LLM 在这个或任何其他主题上的指导只是一台计算机盲目地串联着一和零。计算机可能不像血肉和骨头的股票经纪人那样会故意欺骗你,但它仍然不应该被盲目信任。将这些指导用作明智决策的重要基础。

要点

不管有多复杂,任何 PDF 文档(包含 120 页或更少)都可以提交给 ChatPDF 并接受持续和深入的审查。和任何 API 一样,ChatPDF 的交互可以自动化,因此可以纳入复杂的操作中。顺便说一句,你在这一切中绝对不限于英语文档。

7.2 使用 LangChain 将搜索引擎连接到人工智能

开发者的世界已经爆发出许多巧妙的新工具、应用程序和处理大型语言模型和生成式人工智能的流程。一个特别灵活的例子是 LangChain 项目。总体目标是提供与各种 LLM 模型的轻松集成。但 LangChain 生态系统也是越来越多(有时是实验性的)项目的主场,这些项目将谦逊的 LLM 的极限推向了更远的地方。

花点时间浏览他们的网站,了解一下可能性。你会看到有多少工具是为帮助你构建更强大的应用程序而设计的。但你也可以将其用作连接你喜爱的人工智能与互联网的替代方案。

让我向你展示一下如何使用 LangChain 文档示例的变体来完成这项工作。

就像我们在这里使用的许多工具一样,LangChain 是为与 Python 一起使用而构建的。如果您仍然在运行 Python 环境,请添加这两个包,您就可以为此示例做好准备了:

pip install langchain[all]
pip install google-search-results

那个 google-search-results 包是干什么用的?它将使您能够在程序或脚本中访问 Google 的 SerpAPI,以便访问 Google 的搜索结果。然而,该功能带有一个限制:您需要从 Google 获取一个 SerpAPI 密钥。您可以免费创建一个帐户,并获得您的密钥 - 每月还可以免费使用 100 次搜索。

当然,还有其他方法可以从程序内部访问互联网搜索结果(例如使用 Python 的 googlebeautifulsoup4 包),但是熟悉 SerpAPI 对你来说是件好事。

如果您在运行 LangChain 操作时遇到问题,请首先确保您安装了最新版本。这样做就可以了:

pip install langchain --upgrade

我们的目标是创建一个软件代理(一种使用虚拟网络浏览器收集信息的机器人)。我们将指示代理查找可以回答提示中问题的信息。但是这将需要一个多层次操作(称为“链”),涉及“理解”问题的背景并找出有用信息可能被发现的地方。

这是我们将使用的完整代码:

os.environ['OPENAI_API_KEY'] = "sk-xxx"
os.environ['SERPAPI_API_KEY'] = "xxx"

from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.llms import OpenAI

# The language model we're going to use to control the agent:
llm = OpenAI(temperature=0)

# The tools we'll give the Agent access to.
tools = load_tools(["serpapi", "llm-math"], llm=llm)

# Initialize an agent
agent = initialize_agent(tools, llm, \
	agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

agent.run("How many technology-related books has David Clinton \
	published? What is the most common topic?")

现在让我们一步一步地解释。我们首先创建包含我们的 OpenAI 和 SerpAPI 密钥的环境变量(不要忘记插入您的有效密钥):

os.environ['OPENAI_API_KEY'] = "sk-xxx"
os.environ['SERPAPI_API_KEY'] = "xxx"

接下来,我们将导入模块,为我们的代理提供所需的所有工具,然后将温度设置为 0 - 我们追求的是准确性:

from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.llms import OpenAI

llm = OpenAI(temperature=0)

这些行将定义我们要在此操作中部署的具体工具,然后初始化代理:

tools = load_tools(["serpapi", "llm-math"], llm=llm)

agent = initialize_agent(tools, llm, \
	agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

最后,我们准备启动我们的链条。正如我们所见,这将包括请求代理执行网络搜索,以找出您最喜欢的作者(当然就是我)写了多少本书。然后代理将使用该信息来确定所有这些书的主要主题。

agent.run("How many technology-related books has David Clinton \
	published? What is the most common topic?")

当我运行该代码时,这是我收到的回复:

提示工程

进入新的 AgentExecutor 链... 我应该搜索关于 David Clinton 的书籍的信息。动作:搜索动作 输入:“David Clinton 书籍” 观察:DAVID CLINTON 是一名 Linux 服务器管理员,在学术和企业环境中有 IT 基础设施工作经验。 ... 思考:我应该寻找更具体的关于他出版的书籍的信息。动作:搜索动作 输入:“David Clinton 出版书籍” 观察:前 David Clinton 的标题… 思考:我应该寻找他的书籍评论以确定最常见的主题。动作:搜索动作 输入:“David Clinton 书评” 观察:David Clinton 的书籍(AWS 认证解决方案架构师学习指南作者)。 平均评分:4.06,1,161 条评价,76 条评论。 思考:我现在知道 David Clinton 的书籍最常见的主题了。 最终答案:David Clinton 的书籍最常见的主题是网页开发和云计算。

完成链。“David Clinton 的书籍最常见的主题是网页开发和云计算。”

注意代理向我发送了关于其进展的详细笔记。这些包括其计划的步骤(“我应该搜索信息...”),它在每个步骤中得出的结论(“观察...”),关于其进展的报告(“想法...”),以及“最终答案:David Clinton 的书中最常见的主题是网页开发和云计算。”这并不完全是我会说的方式,但我想这样也可以。

从某种程度上说,我们刚刚看到的是 AutoGPT 在第五章中所做的事情的 LangChain 版本。在您的工具箱中拥有多个工具始终是一个好主意,因为一个工具失败了,另一个工具通常会起作用。但这也是对 LangChain 生态系统的极好的一般介绍。

如果您感兴趣,这次消耗了我本月可用的 100 次 SerpAPI 搜索的三次。

一如既往,我鼓励您使用 LangChain 文档发现更多的用例和令人兴奋的东西等待着您。但是,由于新的应用几乎每天都在出现,您还应该关注 LangChain 社区的发展。

使用 LangChain 分析多个文档

另一个 LanChain 的热门用途是并行加载多个 PDF 文件,并要求 GPT 分析和比较它们的内容。正如您可以在 LangChain 文档中自行查看的那样,现有模块可以加载以允许 PDF 消费和自然语言解析。我将向您介绍一个松散基于该文档示例的用例示例。以下是开始的方式:

import os
os.environ['OPENAI_API_KEY'] = "sk-xxx"

from pydantic import BaseModel, Field

from langchain.chat_models import ChatOpenAI
from langchain.agents import Tool
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import FAISS
from langchain.document_loaders import PyPDFLoader
from langchain.chains import RetrievalQA

那段代码将构建您的环境并设置所需的工具以进行:

  • 启用 OpenAI Chat(ChatOpenAI)

  • 理解和处理文本(OpenAIEmbeddings、CharacterTextSplitter、FAISS、RetrievalQA)

  • 管理一个 AI 代理(工具)

接下来,您将创建并定义一个 DocumentInput 类和一个名为 llm 的值,该值设置了一些熟悉的 GPT 参数,稍后都会调用:

class DocumentInput(BaseModel):
    question: str = Field()
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613")

接下来,您将创建一些数组。files 数组中的三个 path 变量包含了三家软件/IT 服务公司最近发布的财务报告的 URL:Alphabet(Google)、思科和 IBM。我们将让 GPT 为我们挖掘数据,就像我们之前为特斯拉所做的那样。但是这一次,我们将同时为三家公司进行操作,让 AI 比较结果,并且完全不必下载 PDF 到本地环境中。

通常可以在公司网站的投资者关系部分找到这类法律文件。

tools = []
files = [
    {
        "name": "alphabet-earnings",
        "path": "https://abc.xyz/investor/static/pdf/2023Q1\
           _alphabet_earnings_release.pdf",
    },
    {
        "name": "Cisco-earnings",
        "path": "https://d18rn0p25nwr6d.cloudfront.net/CIK-00\
           00858877/5b3c172d-f7a3-4ecb-b141-03ff7af7e068.pdf",
    },
    {
        "name": "IBM-earnings",
        "path": "https://www.ibm.com/investor/att/pdf/IBM_\
           Annual_Report_2022.pdf",
    },
]

这个 for 循环将遍历我刚刚向您展示的 files 数组的每个值。对于每次迭代,它将使用 PyPDFLoader 加载指定的 PDF 文件,loaderCharacterTextSplitter 来解析文本,并使用剩余的工具来组织数据并应用嵌入。然后,它将调用我们之前创建的 DocumentInput 类。

for file in files:
    loader = PyPDFLoader(file["path"])
    pages = loader.load_and_split()
    text_splitter = CharacterTextSplitter(chunk_size=1000, \
       chunk_overlap=0)
    docs = text_splitter.split_documents(pages)
    embeddings = OpenAIEmbeddings()
    retriever = FAISS.from_documents(docs, embeddings).as_retriever()

    # Wrap retrievers in a Tool
    tools.append(
        Tool(
            args_schema=DocumentInput,
            name=file["name"],
            func=RetrievalQA.from_chain_type(llm=llm, \
               retriever=retriever),
        )
    )

到了这一步,我们终于准备好创建一个代理并将我们的提示作为 input 输入。

llm = ChatOpenAI(
    temperature=0,
    model="gpt-3.5-turbo-0613",
)

agent = initialize_agent(
    agent=AgentType.OPENAI_FUNCTIONS,
    tools=tools,
    llm=llm,
    verbose=True,
)

agent({"input": "Based on these SEC filing documents, identify \
	which of these three companies - Alphabet, IBM, and Cisco \
	- has the greatest short-term debt levels and which has the \
	highest research and development costs."})

我得到的输出简短而简洁:

提示工程

'output': '根据 SEC 文件:\n\n- 短期债务水平最高的公司是 IBM,短期债务水平为 4,760 百万美元。\n- 研发成本最高的公司是 Alphabet,研发成本为 11,468 百万美元。'}

总结

LangChain 允许您将多个工具集成到生成 AI 操作中,实现对实时互联网的多层次编程访问,以及更复杂的 LLM 提示。

7.4 自学编程(或学习一种新语言...或其他任何事情)

我们过去一段时间一直在使用的所有专业工具都很棒。但是,当您退后一步思考我们所做的一切时,您会注意到连接它们所有的一个简单的事实:使用自然语言文本提示更好、更快地工作。所以,花一两分钟谈谈如何优化您的 GPT 体验可能是值得的。毕竟,LLM 的用处取决于您给出的提示。

以某种形式提示 ChatGPT“教我如何使用 Python 编程”可能不足以完成任务。以那种方式表达时,这个主题对于 ChatGPT 来说过于宽泛,无法在单次完成中得到妥善解决。而且,除此之外,我不确定你是否希望限制自己只使用 GPT。网络上已经有许多优秀的教学资源:为什么要忽视它们呢?

相反,你可能会更好地从一些适合初学者的在线教程(比如官方 Python 指南)和在自己的计算机上创建简单程序来玩耍的组合开始。一旦你熟悉了你的编程工作环境和所有基础知识,你就可以求助于 GPT 来帮助你克服肯定会遇到的问题和瓶颈。

例如,有时候你可能会遇到特定概念或代码片段,觉得挑战性或令人困惑。每当你遇到困难时,利用 GPT 来获得额外的清晰度。通过在面对特定问题的情境下提出你的问题,你更有可能得到你所需要的答案。

要具体。例如,不要问,“我如何在 Python 中写一个循环?”而是问一个更具针对性的问题,比如,“我如何使用 for 循环在 Python 中对列表进行迭代?”或者,你也可以再往后退一步,问“我如何让 Python 对长列表中的每个项应用一个操作?”

提示工程

准确而专注的提示很重要。而且,众所周知的“提示工程”的很多内容实际上只是花时间确保你的 ChatGPT 提示足够清晰,并提供足够的上下文,以使 AI 能够给出最佳的响应。然而,我怀疑所有这些“规则”随着 GAI 模型变得越来越好地理解你真正需要的内容,将变得越来越不重要。

不确定为什么你的 .NET 编译器失败了?首先与 GPT 分享错误消息。你的代码是否产生了明显错误的结果?分享似乎负责的代码片段,并询问 GPT 告诉你你做错了什么。正如我们已经看到的那样,要具体。要冗长。要坚持。一遍又一遍地向 GPT 提出相同问题(使用微妙的变化)可能会得到不同的结果。

还有:确保你耐心地读完从头到尾的完成响应。在接下来的示例中,ChatGPT 不仅给了我解决此提示中问题的代码:

你能给我一些 Python 代码吗?它可以导入一个 4k MP4 视频并将其转换为 1080p 分辨率吗?

当然可以!你可以使用 Python 中的 moviepy 库来导入一个 4K MP4 视频并将其转换为 1080p 分辨率。以下是一个示例代码片段,帮助你入门:

…​但是,正如你从完整的响应中所看到的那样,它还预见了可能的问题(即,有限的磁盘空间和系统资源),并向我展示了如何确保我的环境包括所有必要的 Python 模块:

from moviepy.editor import VideoFileClip

# Define the input video file path
input_file = "4k-video.mp4"

# Define the output video file path
output_file = "1080p-video.mp4"

# Load the video clip
clip = VideoFileClip(input_file)

# Set the target resolution to 1080p
target_resolution = (1920, 1080)

# Resize the video clip to the target resolution
resized_clip = clip.resize(target_resolution)

# Write the resized clip to the output file
resized_clip.write_videofile(output_file, codec="libx264", \
	audio_codec="aac")

确保你已经安装了 moviepy 库。你可以使用 pip 安装它:

pip install moviepy

在上面的代码片段中,用你实际的 4K 视频文件的路径替换 "4k-video.mp4"。该代码打开视频文件,使用 resize 方法将其调整为 1080p 的目标分辨率,然后将调整大小后的视频写入指定的输出文件路径。

write_videofile 函数使用 H.264 编解码器(libx264)和 AAC 编解码器处理音频和视频。您可以根据您的需求自定义编解码器选项。

请注意,视频处理可能需要很大的计算量,特别是对于大型的 4K 视频。对于您的系统硬件规格,可能需要一些时间来处理和调整视频大小。

请确保您有足够的磁盘空间,并且您的系统符合处理视频任务的必要要求。

这些显然远不止编码。最近 ChatGPT 还成功地指导我完成了必要的故障排除过程,以便使我的车库门开启正常。拥有所有地球上所有头顶式车库门系统的用户手册确实很不错。

请记住:AI 并不是魔法,让它能为你做所有的事情。它是帮助你更快地、更好地创造更多的魔力工具。

让我再举个例子,我认为这会体现我的观点。因为我有些书是自己出版的,所以我必须从排版、编辑、封面设计和营销等方面全力以赴。我在一些任务上变得非常高效,但在其他任务上却变得非常无能。

拿字体家族的工作举例。当然,我可以分辨衬线和无衬线字体之间的区别,但请不要问我何时、何地使用哪种字体。毕竟,这么多年了,我仍然一头雾水。

因此,在为我最近要出版的一本书和在线课程设计封面图片时,我向 ChatGPT 求助。这是我的问题:

快速工程

我应该使用什么开源字体和字体颜色来制作图书封面(一本介绍开源技术的书)呢?顶部的 2/3 是主要是黑色和黄色图片,而底部(文本区域)是黑色。

这里是我得到的智慧建议:

快速工程

字体:Open Sans 或 Lato。这两种字体都是多用途易读的字体,适用于各种情况。它们也有现代感,非常适合介绍开源技术的书籍。

字体颜色:白色或浅灰色。为了与黑色背景形成对比,使用有冲击力的淡色字体非常重要。白色或浅灰色可以是良好的选择,可以创造出干净、现代的外观。

请注意,选择字体和颜色也可能取决于你的书的具体风格和语气。然而,这些建议应该为你选择可完美搭配书籍封面图像的字体和字体颜色提供一个良好的起点。

我敢说,我不可能从一个高价设计顾问那里得到更完整、个性化的建议。这个封面,带有其 DreamStudio.ai 图像和 GPT-insipred 字体,无疑是我创建过的最好的封面(尽管我承认这个标准相当低)。

结论

LLM 作为教学工具可能不是从零开始学习的理想选择,但对于突破学习障碍、强调特定基础细节和解决问题时非常有效。

7.5 将 LLM 集成到您的日常工作中

微软为 GPT 的发展投入了数十亿美元,积极寻求利用他们的投资。一个明显(也是聪明)的方法将包括将 GPT 功能直接集成到他们的商业产品中。大概不需要在 PowerBI 仪表板中编写完整的、可运行的公式,也不需要在 Excel 中弄懂电子表格公式的语法,你只需用自然语言描述你想要的即可。

这是一个革命性的突破。但从我对事物的了解来看,它还有一些未来的发展(嗯,从我的角度来看,它还有一些未来的发展)。显然,它也仅限于微软产品。

好消息是,即使没有直接集成 GPT,GPT 和其他 LLM 已经具备几乎可以解决任何问题的答案。以下是一些示例来说明。

7.5.1 电子表格集成

LLM 可以帮助生成复杂的电子表格公式进行计算(你能向我展示一个能在单元格中生成随机数并将其乘以前一单元格的平方根的 Excel 公式吗?)或数据分析(你能告诉我标准普尔 500 指数基于 CSV 文件取得最高值的日期吗?),无论你使用的是哪个电子表格品牌。你最喜欢的 LLM 可以使你成为电子表格的高级用户,并在创建时提供帮助:

  • 动态公式进行数据操作和分析

  • 根据具体条件进行条件格式设置突出显示数据

  • 使用函数进行重复任务的自动化处理

  • 用数据生成视觉上令人愉悦的图表和图形

7.5.2 看板集成

LLM 可以提供优化任务管理和组织看板、列表和卡片的建议,适用于Trello或其他看板系统。可以依赖它来:

  • 自动化操作和创建定制工作流程

  • 生成报告

  • 从使用数据中获取见解

7.5.3 集成到 Slack

LLM 可以通过 Slack 的集成工具帮助设置自动化工作流程。这可以包括:

  • 创建自定义机器人

  • 创建和管理频道、群组和权限

  • 建议使用应用和集成

7.5.4 集成到 Salesforce

LLM 可以通过协助创建定制的报表和仪表盘来简化复杂的管理任务,在Salesforce中实现:

  • 对数据进行可视化和分析

  • 设置工作流程和自动化规则

  • 生成公式和函数

7.5.5 代码版本控制

LLM 可以帮助设置版本控制工作流程,并使用 GitHub 进行代码协作。例如,如果您无法记住所需的精确语法或过程,可以向自己最喜欢的 LLM 咨询:

  • 创建分支和拉取请求

  • 管理代码审查

  • 问题追踪

  • 项目管理

7.5.6 Photoshop 集成

新的 Adobe 艺术生成工具,Firefly,现在集成到了 Photoshop 应用程序中,允许您使用文本提示来:

  • 使用生成填充来修改现有图像

  • 在 Photoshop 环境中生成全新的图像

简而言之,如果有一个重要的过程,你并不经常执行,以至于无法可靠地记住,或者有一些新的东西,你知道可能有可能,但你不确定怎么做,GPT 及其朋友们就是你的朋友。

7.6 总结

  • 我们了解到 LLMs 如何有效地吸收和生成可以提供有价值的投资指导的见解。更重要的是,它们可以快速地摄取任何类别的大量数据,并生成有价值的见解。

  • 我们看到了 LangChain 集成如何创建代理,使其能够访问实时互联网并参与复杂的、多层次的数据收集和分析。

  • 我们了解到 LLMs 可以增强和加速您执行几乎任何任务的能力 - 特别是通过在流行的生产力软件包内集成。

7.7 亲自试试

通过与 LangChain 工具的替代用途进行实验。例如,您可以尝试使用实验性的 LLMBashChain 创建自定义 Bash 脚本。将由专门设计的工具得到的结果与 ChatGPT 给出的结果进行比较。

第八章:通过生成式 AI 更好地理解事物

本章内容包括

  • 使用 GPT 替代大型数据分析操作

  • 使用 GPT 替代情感分析

自从 GPT 进入我们的生活以来,我们与 AI 的大部分交互 - 以及直到目前为止的大部分书籍 - 都集中在生成各种内容上。毕竟,"生成" 名字中的一部分。但并不是所有事情都是关于创造新事物的。还有更好地理解旧事物的部分。

在第五章中,我们确实使用了GPTVectorStoreIndex Python 库来更好地理解我们自己的一些数据。但是现在我们要更进一步,更深入地探讨。我们将通过使用人工智能来帮助我们在大型数据集中找到模式和关键细节(数据分析),以及使用成千上万的社交媒体帖子来测量人口规模的公众意见(情感分析)来做到这一点。

直到现在,这样的工具和见解通常只对数据专业人士可用。在这里,我们将看到它们如何现在几乎可以被任何人访问。

8.1 使用 GPT 替代分析

在几秒钟内吸收并总结大量内容确实是一件大事。就在昨晚,我收到了一条重要的 90 分钟商务视频会议录音的链接,我错过了几个小时前的现场版本。我错过现场版的原因是因为我没有时间(你必须知道,我正急于在宇宙消失之前写完这本书... 或者至少在他们发布 GPT-58 之前)。然而,几个小时后,我仍然没有时间看视频。令人费解的是,这本书还没有完成。

所以这就是我以 GPT 方式解决冲突的方法:

  • 我使用了 OpenAI Whisper(在第七章已经看到)根据录音生成了一个转录

  • 我将记录转录成了 PDF 文件

  • 我把 PDF 上传到 ChatPDF。

  • 我提示 ChatPDF 提供与我感兴趣的特定主题相关的摘要

"下载"90 分钟电话的关键时刻所需的总时间:10 分钟。这意味着将由大约 15000 个口头语言转换为机器可读格式,然后对其进行消化、分析和总结,需要 10 分钟。

但所有这些都已经是老生常谈了。下一个级别将解决业务分析的问题。好吧。那么"业务分析有什么问题"呢?问题在于要编写复杂的代码来解析大型数据集,使它们始终能够被机器读取(也称为"数据整理"),然后应用复杂的算法来提取有用的见解。下面的图大致概述了这个过程。

图 8.1 使用数据分析从原始数据中得出见解

gai 8 1

符合该描述的许多代码非常复杂,更不用说聪明了。激励聪明的数据工程师编写那种聪明代码当然会给组织带来巨大的成本。那么问题就是成本。因此解决这个问题将涉及解雇每年两十五万美元的工程师,用几百美元的大型语言模型 (LLM) API 费用来替代他们。这是我的计划。

我需要一个繁忙的电子表格来处理,对吧?我知道的获取良好数据的最佳途径是 Kaggle 网站。Kaggle 是一个托管数据集(和数据科学竞赛)的在线平台。它已经成为数据科学家、机器学习从业者和研究人员的重要资源,让他们展示自己的技能,从他人那里学习,并在项目上进行合作。该平台提供各种公共和私有数据集,以及支持数据探索和建模的工具和功能。

与此代码相关联的“投资项目类型预测”数据集 应该完美地运行。据我所知,这是某个世界上某个地方的银行聚合的代表其客户行为的数据。当然,一切都已经匿名化,所以我们不可能知道我们正在谈论哪家银行,客户是谁,甚至发生这一切的地点在世界上哪里。事实上,我甚至不能百分之百确定数据的每一列代表什么。 可以 确定的是每个客户的年龄和社区都在那里。虽然位置已被匿名化为 C1C2C3 等。剩下的一些列显然包含财务信息。

基于这些假设,我的最终目标是寻找列之间的统计有效关系。例如,有没有特定的人口统计特征(收入、社区、年龄),可以预测客户购买更多银行产品的可能性更大?对于这个具体的例子,我将看看是否能确定数据中平均家庭财富最高的地理区域。

对于通常的用途,这种模糊描述的数据将毫无价值。但由于我们只是想展示过程,它将做得很好。我会 虚构 出更或多或少符合其数据形状的列标题。下面是我如何命名它们:

  • 客户 ID

  • 客户年龄

  • 地理位置

  • 年度分行访问次数

  • 家庭总资产

  • 家庭总债务

  • 与银行的总投资额

列名需要非常描述性,因为那将是我给 GPT 唯一的提示,帮助它理解数据。我确实不得不将我的客户 ID 添加到第一列(它们原本不存在)。我能想到的最快的方法是在该列的顶部数据单元格中插入 =(RAND()) 公式(使用电子表格软件如 Excel、Google Sheets 或 LibreOffice Calc 加载文件),然后将该公式应用于其余的数据行。完成后,所有 1,000 行数据将具有唯一的 ID,尽管是 0 到 1 之间带有许多小数位的 ID。

数据准备好后,我将使用我们的老朋友 LlamaIndex(在第五章首次出现)开始分析数字。与之前一样,我将要执行的代码将是:

  • 导入必要的功能

  • 添加我的 OpenAI API 密钥

  • 读取位于名为 data 的目录中的数据文件

  • 构建我们将填充索引的节点

import os openai
from llama_index import SimpleDirectoryReader
from llama_index.node_parser import SimpleNodeParser
from llama_index import GPTVectorStoreIndex
os.environ['OPENAI_API_KEY'] = "sk-XXXX"

documents = SimpleDirectoryReader('data').load_data()
parser = SimpleNodeParser()
nodes = parser.get_nodes_from_documents(documents)
index = GPTVectorStoreIndex.from_documents(documents)

最后,我会发送我的提示:

response = index.query("Based on the data, which 5 geographic \
	regions had the highest average household net wealth? Show \
	me nothing more than the region codes")
print(response)

这是一个更易于理解的格式:

根据数据,哪五个地理区域的家庭净财富最高?

我问这个问题主要是为了确认 GPT 是否理解了数据。测试模型总是件好事,只是看看得到的响应是否合理地反映了你已经了解的数据。要正确回答,GPT 需要弄清楚每个列标题的含义以及列之间的关系。换句话说,它需要知道如何从“总家庭资产”、“总家庭债务”和“与银行的总投资”列的值中计算每行(帐户 ID)的净资产。然后,它需要汇总它生成的所有净资产数字,按地理位置计算每个位置的平均值,最后比较所有平均值并排名。

结果呢?我 认为 GPT 做到了。经过一两分钟的深思熟虑(和大约 0.25 美元的 API 费用),我看到了五个位置代码(G0、G90、G96、G97、G84,如果你感兴趣的话)。这告诉我,GPT 理解位置列的方式与我相同,并且至少试图推断位置与人口统计特征之间的关系。

我所说的“我认为”是什么意思?嗯,我从来没有真正检查过数字是否合理。首先,这不是真实数据,而且我不知道,我可能错误地猜测了每列的内容。但也因为 每一项 数据分析都需要与现实世界进行核对,所以从这个意义上说,由 GPT 生成的分析并无不同。换句话说,每当你处理应该代表现实世界的数据时,你都应该找到一种方法,使用已知值来校准你的数据,以确认整个事情不是一个愉快的幻想。

然后我问了第二个问题,反映了一个真实世界的查询,这个查询会引起任何银行的兴趣:

基于客户的年龄、地理位置、年度银行分支机构访问次数和总当前投资,哪十名客户最有可能投资于新产品推出?仅显示那十个客户的客户 ID列的值。

再次,GPT 回答的问题看起来至少有些合理。这个问题也是设计用来测试 GPT 在协相关多个指标并将它们提交给一个复杂的评估中(“… 最有可能投资于新产品推出”)的能力。

我会把它评为另一个成功的实验。

总结

GPT-和其他 LLM-能够独立解析、分析和从大型数据集中提取洞察。尽管这极大地简化了这个过程,但其成功仍取决于理解数据的真实世界背景,并提出具体而巧妙的提示。

8.2 使用 GPT 代替情感分析

神韵已经透露,这个实验不会像我们在这里看到的其他一些实验那样结束得那么幸福。但是,这真的是学到的教训,不是吗?

好的,那么情感分析是什么,我为什么要做它呢?

8.2.1 情感分析的一些背景知识

情感分析,也称为意见挖掘,是一种用于确定文本中表达的情感或主观语气的技术,例如社交媒体帖子、客户评论或新闻文章。它通常涉及分析文本以将其分类为积极、消极或中性。它的主要目的是了解个人或群体对特定主题、产品、服务或活动的意见、态度和情绪。

情感分析可以帮助企业和组织:

  • 洞察他们的客户如何看待他们的品牌、产品或服务

  • 跟踪他们品牌或产品的提及,以监控和管理他们的在线声誉

  • 了解市场趋势、消费者偏好和新兴模式

  • 规模分析客户反馈

  • 评估公众情感并监测围绕政治事件、社会问题或公共运动的讨论

  • 监测市场情绪并检测潜在的投资风险或机会

传统上,有效的情感分析需要分析代码,通过一系列步骤来尝试正确猜测表达的情感。核心工具涉及评估每个数据单元(通常是简短的调查响应或社交媒体帖子)的极性。这是通过寻找指示帖子是否积极、消极或中性的关键词来完成的。分析可能会然后寻找表达更精确情绪,如愤怒、赏识或惊讶的单词或短语)。软件将编译数据集的大致统计概况,以提供趋势建议。下面的图例提供了示例。

图 8.2 使用情感分析推断短格式内容的潜在情绪(或情感)

gai 8 2

再次强调,“问题”是从头开始构建有效的情感分析软件将会复杂且昂贵。而购买它也不会便宜。

这就是人工智能发挥作用的地方。以 GPT 的方式完成这项工作首先需要对文本进行预处理,去除任何无关信息,如标点符号、特殊字符和停用词(常用词如 "and"、"the"、"is" 等)。文本也可能被转换为小写以确保一致的分析。接下来,从文本中提取相关特征或单词以表示情感。这可以使用词袋等技术来实现,其中文本中每个单词的出现频率被计算并用作特征。

然后使用提取的特征来分类文本的情感。这可以通过各种方法来实现,包括使用预定义的字典将单词或短语与情感标签相关联的“基于规则”的方法,以及已经在带有标记的数据集上进行了训练的机器学习算法,其中每个文本都是手动注释的,标有其相应的情感。

最后,情感分析结果可以根据应用程序的具体需求进行进一步分析和解释。这可能涉及可视化情感随时间的变化趋势,识别与情感相关的关键主题或实体,或者比较不同来源或人群的情感。

需要注意的是,情感分析是一项具有挑战性的任务,因为语言的复杂性,包括讽刺、反讽和依赖语境的情感。这也可能是昂贵的,因为要做好这项工作通常需要针对你正在处理的特定数据集进行定制。

8.2.2 通过 GPT 进行情感分析的测试

这就回到了生成式人工智能。LLM 通常带来的是简单性。也就是说,它们大多数所做的事情都可以使用不同的工具来完成,但 LLM 可以使用更少的复杂编码和环境配置来完成。刚才我们看到的分析提示就很好地证明了这一点。

同样,如果我们可以为 GPT 提供一个大型评论数据集,并且 - 而无需我们手动指导过程或定义自己的情感词典 - GPT 可以快速地输出可靠的情感排名,那么我们就会走在前面。关键是看看 GPT 是否提供了与传统方法相似或至少接近的结果。

为了测试这一点,我下载了一组包含各种公司产品或服务评论的 1,000 条 Twitter 消息。这些消息都是预先标记的(意思是,情感已经包含在内)。以下是几行,这样你就可以看到它们的外观:

公司 情感 评论
微软 负面 @Microsoft 我为什么在我的 @SamsungUS Chromebook 上购买 WORD 时它的功能如此糟糕?
MaddenNFL 正面 感谢 @EAMaddenNFL!!

我的目标是让 GPT 生成它自己的情感标签,而不需要进行大量的准备工作,然后将其与现有集合进行比较。这将向我展示 GPT 距离取代传统的情感分析方法有多近。我将使用 GPT-3 和 GPT-3.5 引擎来测试这一点。

尝试使用多种 API 请求的组合时,我遇到了一些访问 GPT API 的问题。我的计划遭遇了一个意外的RateLimitError错误信息。尝试一致地评估所有的 1,000 条推文都失败了,而每次失败都让我损失了大约$0.40。

即使我从 CSV 文件中删除了 950 条消息(只剩下 50 条),我仍然几乎和以前一样经常遇到RateLimitError错误。无论如何,这都为我们提供了另一个强大的自定义 LLM 服务器的用例,在下一章我们将讨论这个问题。

无论如何,我从 这个出色的 GitHub 情感分析项目中改编了这个实验的 Python 代码。我首先加载了所有必要的库,传递我的 API 密钥,并读取了我的 .CSV 电子表格文件。没有什么新鲜的东西。

import pandas as pd
import openai
import numpy as np
openai.api_key='sk-XXXX'

df = pd.read_csv("data1/twitter_data_labels.csv")

接下来,我将创建两个函数。第一个函数(analyze_gpt35(text))将设置一个上下文和我们将应用于每个评论的 GPT-3.5 模型的提示。这个上下文以一个系统角色的形式存在,告诉 GPT 模型作为一个分析员该如何行动。而实际的提示,即一个用户角色的指令,包含我们具体的要求,要求 GPT 执行情感分析。此请求将 GPT 的输出写入名为response_text的变量中,使用gpt-3.5-turbo引擎。

def analyze_gpt35(text):
  messages = [
    {"role": "system", "content": """You are trained to analyze and \
       detect the sentiment of given text. If you're unsure of an \
       answer, you can say "not sure" and recommend users to review \
       manually."""},
    {"role": "user", "content": f"""Analyze the following product \
       review and determine if the sentiment is: positive or \
       negative. Return answer in single word as either positive or \
       negative: {text}"""}
      ]

  response = openai.ChatCompletion.create(model="gpt-3.5-turbo",\
     messages=messages, max_tokens=100, temperature=0)
  response_text = response.choices[0].message.content.strip().lower()
  return response_text

第二个函数和第一个函数几乎做了同样的事情,只不过针对的是旧的 GPT-3 模型。这里的目标是最终能够比较两个模型的准确性。

def analyze_gpt3(text):
  task = f"""Analyze the following product review and determine \
    if the sentiment is: positive or negative. Return answer in \
    single word as either positive or negative: {text}"""

  response = openai.Completion.create(model="text-davinci-003", \
    prompt=task, max_tokens=100, temperature=0 )
  response_text = response["choices"][0]["text"].strip().lower().\
    replace('\n\n', '').replace('','').replace('.','')
  return response_text

记住:我们创建了一个名为df的数据框,其中包含我们下载的原始数据。现在我们准备好对这些数据框中"评论"列的每一行运行这两个函数,并将分析结果写入新列(代码将创建这些列)。如果遇到了速率限制错误,可以尝试一次只运行这两个命令中的一个。

# analyze dataframe
df['predicted_gpt3'] = df['Comment'].apply(analyze_gpt3)
df['predicted_gpt35'] = df['Comment'].apply(analyze_gpt35)

有了一个数据框,我们可以对比潜在数据和预先存在的标签的 GPT-3 和 GPT-3.5 的结果。我将使用value_counts()方法对这一点进行统计,该方法可以计算数据框列中每个值的出现次数:

print(df[['Sentiment','predicted_gpt3','predicted_gpt35']].value_counts())

最终输出的结果代表了每种可能组合的结果出现的次数。例如,最常见的结果(出现了 12 次)是每个训练数据("Label")、GPT-3 模型和 GPT-3.5 模型都给出了负面评价。有十个实例中三个模型都给出了正面评价。以下是完整的输出结果表:

标签 GPT-3 预测结果 GPT-3.5 预测结果 频率
负面 负面 负面 12
中性 负面 负面 7
无关 负面 负面 2
中性 积极 积极 2
不确定 2
负面 积极 积极 2
负面 负面 2
不相关 积极 积极 2
负面 积极 积极 1
中立 负面 1
不相关 中立 不确定 1
中立 积极 1
积极 负面 负面 1
负面 1
不确定 1
积极 1
中立 中立 不确定 1

在我们的 50 条评论中,GPT-3 和 GPT-3.5 仅在 22 次中成功匹配到了原始标签(12 次所有三个模型都给出了“负面”评分,10 次所有三个模型都给出了“积极”评分)。从根本上说,这两个 GPT 模型在性能上也几乎完全一样。

44%的成功率并不算很高,但对于至少某些用例来说可能已经足够了。也许如果我们对一个更大的数据集运行这个实验,就能获得更好的结果。但我可以想象到一些项目,你是在寻找广泛的趋势而不是绝对的准确性。在这方面肯定还有更多工作要做。

8.3 总结

  • 我们使用 llama_index 对大型数据集进行分析,提供关于消费者行为的复杂金融和消费者洞察。我们展示了如何将结果与现实世界进行核对,以确认我们的 LLM 不是编造出来的。

  • 在结果有所不同的情况下,我们使用 GPT 对消费品和服务的评论进行了情感分析。

8.4 你也来试试吧

现在 GPT-4 已经广为可用,为什么不在我们的情感分析实验中尝试一下,看看是否能获得更好的结果。同时,寻找不同的数据来源,并告诉我们你发现了什么。

第九章:建立和运行您自己的大型语言模型

本章内容包括

  • 为什么您可能想要建立自己的大型语言模型

  • 选择一个 LLM 模型作为您自定义配置的基础

  • 如何(在非常一般的术语中)进行模型微调

建立(或修改)您自己的 LLM?但 OpenAI(及其投资者)花费数十亿美元优化和训练他们的 GPT。通过使用本地硬件进行自己的项目,是否有可能生成甚至远程竞争力的结果?

令人难以置信的是,在 LLM 技术的旋风演变到这一步时,对这个问题的答案是"是的"。由于 Meta 的开源 LLaMA 模型的存在,模型权重的未经授权泄漏(我将在接下来解释),以及许多卓越的公共贡献,现在有数百种高效而又资源友好的 LLM 可供任何人下载、选择性修改和运行。

话虽如此,如果操作到这种技术深度不是你的菜 - 尤其是如果你没有合适的硬件访问权限 - 那么可以跳过到下一章。

9.1 建立自己的模型的一些背景知识

在我们解释所有这些是如何工作之前,我们应该解决一个更大的问题:为什么有人想要建立自己的 LLM?以下是值得考虑的一些事项:

  • 通过建立自己的 LLM,您可以更好地控制其架构、训练数据和微调。这使您能够将模型专门定制到您的需求和领域。您可以为特定任务、行业或应用程序进行优化,这可能会带来更好的性能和更准确的结果。

  • 一些组织可能有严格的数据隐私要求或无法与第三方服务共享的敏感信息。事实上,三星最近禁止其员工使用 GPT 或 Bard,因为他们担心他们的互动可能会意外泄漏专有公司信息。建立自己的 LLM 可以确保所有数据和处理都留在您的组织内部,减少隐私和安全方面的担忧。

  • 如果您的应用需要专业知识或在一个小众领域操作,建立自己的 LLM 可以让您将特定的数据源和领域专业知识纳入到训练过程中。这可以增强模型的理解能力,并生成更符合您特定领域需求的响应。

  • 像 GPT 这样的预训练模型被设计为通用型,并且在各种领域都能工作得相当好。然而,对于特定任务,建立一个定制的 LLM 可能会导致性能和效率的提升。您可以优化架构、训练方法和配置设置,以在特定用例上获得更好的结果。

  • 构建自己的 LLM 可以让你拥有对模型的知识产权的所有权和控制权。你可以修改、扩展和分发模型以满足你的需求,而不受使用现有模型所带来的限制或许可协议的约束。

在 Meta 泄露事件后,社区中许多聪明的人们将注意力集中在构建可以用更少硬件完成更多任务的 LLM 变体上。例如,量化是一种将模型压缩以便在没有图形处理器单元(GPU)的计算机上运行的方法。超高效的微调技术,包括一种称为 Low-Rank Adaptation (LoRA)的技术,使得模型微调所需的资源和时间大大减少。

所有这些内容都在一份 p.html 上被广泛阅读的内部 Google 文档中提到,不知何故,这份文档进入了公开的互联网。未知作者强烈指出,包括 OpenAI、Meta 和 Google 在内的大公司在人工智能领域已经完全失去了竞争优势。从现在开始,技术上的重大进展将发生在野外,远离大公司或政府的控制之外。

那么为什么你可能想要拥有自己的 LLM 呢?因为此时,你可以享受全新的定制和优化水平。它会如何工作呢?嗯,因为我实在想不到你有任何理由从零开始启动自己的 LLM 项目,所以我假设你对现有平台感兴趣。你会面临三个选择:一个模型,一组权重,以及你是否还想对所选择的模型进行微调。

构建一个 LLM 对不同的人可能意味着不同的事情,这是因为我们所谓的"LLMs"由多个组成部分组成。从技术上讲,有输入编码、神经网络架构、嵌入层、隐藏层、注意力机制、训练数据、解码算法以及大量的训练数据。

老实说,我真的不太明白大部分这些是什么,以及它们应该做什么。就我们现在的目的而言,仅仅将定义编码和一般架构的代码视为模型就足够了。至于基于 Transformer 的语言模型(LLMs),至少对于像 GPT 那样的 LLMs,我们可以将"注意力机制"视为定义权重的原因。顺便说一句,注意力机制能够以更复杂的方式对上下文和单词或令牌之间的关系进行建模。

权重到底是什么?在神经网络中,每个神经元之间的连接都被赋予一个权重,表示该连接的强度或重要性。对于一个模型来说,这些权重是可学习的参数,在训练过程中进行调整。在训练过程中,LLM 暴露于大量的训练数据,并学会预测下一个单词或生成连贯的文本。

权重确定了信息如何通过网络流动以及它们如何影响 LLM 的最终预测或输出。通过调整权重,模型可以学习将更高的重要性赋予某些输入特征或模式,并根据其接触到的训练数据进行更准确的预测。没有权重,LLM 模型几乎没有用处。

选择基本 LLM 模型进行配置

一个很好的开始你的研究的地方是 Hugging Face 开放 LLM 排行榜,其中列出了许多免费提供的基于变压器的 LLM 的评估性能。您可以切换每个评估列,以通过特定功能缩小搜索范围。这些功能包括“ARC” - A12 推理挑战 - 它测试模型如何回答有关高中科学的问题。点击该页面上的“关于”选项卡将为您提供所有评估标准的优秀描述。

当您在列表中浏览替代品时,您会注意到有几个关键的 LLM 系列,例如 Meta 的 LLaMA 和 Together Computer 的 RedPajama。还有一些从其他模型派生出来的模型。例如,OpenLLaMA 是一个“复制 Meta AI 的 LLaMA 7B”模型,该模型在“RedPajama 数据集”上进行了训练。

您会注意到模型名称通常包括其参数大小(以十亿为单位):7B、13B、33B、65B 等等。一般来说,用于构建模型的参数越多,您就需要更好的硬件来运行它。点击模型的单独文档页面通常会向您显示模型训练所使用的标记数量。一个较大的模型可能会包含超过一万亿个标记。

一旦您选择了一个模型,您通常会转到其 GitHub 页面,那里通常会有使用说明以及如何克隆或下载模型本身的说明。其中一个很好的例子是 llama.cpp LLaMA 推理。但是即使您已经在您的机器上获得了软件,通常您仍然需要单独下载一组权重。

他们为什么不直接将权重与他们的模型捆绑在一起呢?首先,您可能需要为您的特定任务定制一种权重组合。但还有另一件事情正在进行。有些权重集只有在您的请求获得批准后才能获得。而且,许多免费提供的集合来自……我们应该说……可疑的来源。在这种情况下,将它们都放在一个地方提供可能实际上并不实际。

话虽如此,Alpaca-LoRA 和 RedPajama-INCITE-3B 模型附带了可以在构建过程中为您获取权重集的脚本。我们将在接下来的几分钟内演示一个 RedPyjama 构建示例。

在选择 LLM 时的最后一个考虑因素是,你需要确保模型能够在你拥有的硬件上运行。由于它们严重依赖计算处理能力,大多数模型都需要图形处理单元(GPUs),有时还需要大量的专用视频内存。如果你计划在任务中使用常规的消费者笔记本电脑或台式机,请确保你使用的是仅 CPU 模型。另外,你也可以随时向云提供商(例如亚马逊网络服务)租用所需的所有 GPU 计算能力。

9.3 配置和构建你的模型

如果你尝试以下说明,你可能会发现在你的 LLM 构建时一切都进行得很顺利,但突然间一切都停滞了下来。"但是"你喊道,"我完美地遵循了模型的指令。"

你确实做到了。实际上,太完美了。你知道,这些说明通常需要进行一点定制才能起作用。最常见的更改涉及到这个命令参数:

/path/to/downloaded/llama/weights

那个/path/to/downloaded/...应该被更新以反映存储着你所下载的.bin预训练权重文件的实际文件系统位置。可能看起来像这样:

~/redpajama.cpp/examples/redpajama/models/pythia/

这个文档页面很好地指导我们如何下载和启动他们的模型。你可以从克隆基本存档开始:

git clone https://github.com/togethercomputer/redpajama.cpp.git
cd redpajama.cpp

你将运行make来,在这种情况下,构建一个压缩的(quantized)聊天环境所必需的。

make redpajama-chat quantize-gptneox

这个脚本实际上会下载并构建适当的一组量化(quantized)权重:

bash \
 ./examples/redpajama/scripts/install-RedPajama-INCITE-Chat-3B-v1.sh

最后,你可以使用redpajama-chat命令启动聊天,该命令以ggml-RedPajama-INCITE-Chat-3B-v1-f16.bin权重文件为目标,并传递一个长长的配置参数列表(其中任何一个都可以根据你的需求进行更改)。

./redpajama-chat -m ./examples/redpajama/models/pythia/\
	ggml-RedPajama-INCITE-Chat-3B-v1-f16.bin \
       -c 2048 \
       -b 128 \
       -n 1 \
       -t 8 \
       --instruct \
       --color \
       --top_k 30 \
       --top_p 0.95 \
       --temp 0.8 \
       --repeat_last_n 3 \
       --repeat_penalty 1.1 \
       --seed 0

Git 存档附带了 Python 脚本,帮助你进一步定制你的体验。例如,你可以通过向./examples/redpajama/scripts/quantize-gptneox.py脚本传递诸如--quantize-output-type q4_1之类的参数,来尝试各种量化方法。

9.4 调整你的模型

调整需要比我们刚刚看到的配置更多的工作。如果你有 GPU,那么你可以考虑自己调整下载的模型。作为一个基准,一张流行的高端 GPU 卡,对于许多 LLM 构建操作来说是有效的,可能包括曾经主要用于游戏电脑的 Nvidia 3090。

就我所知(从未拥有过自己的)3090 将配备 24GB 的图形内存。显然,这对于使用我们之前提到的高效的 LoRA 方法进行调整足够了。否则,你可能需要将多个 Nvidia 3090 链接在一起。这不会便宜(3090 似乎每张要价约 1400 美元),但它与 OpenAI、Meta 和 Google 一直在做的事情完全不同。

微调和简单配置模型(我们刚刚看到的方式)之间的一个区别是,微调涉及重新在通常包含数千亿令牌(每个令牌大致相当于一个单词)的数据集上训练您的模型。正是这些大型数据集,有望使模型捕捉到通用的语言模式和知识。真正的定制工作发生在这里,你可以自由使用自己的数据。

尽管说了这么多,我不打算在实践层面向你展示任何工作原理。我不仅缺乏使其工作的硬件,而且我怀疑你也是如此。但至少从一般的角度来思考一下是值得的。

9.4.1 创建数据集

例如,要构建一个专门供律师或医疗专业人士使用的模型,你需要一个包含大量法律或医疗内容的数据集。但考虑到训练有效模型所需的内容量之大,你可以理解为什么你需要一些更强大的硬件。

构建您的数据集,然后执行微调构建已经超出了本书的范围。更不用说,当你阅读这些文字时,它们的执行方式几乎肯定已经发生了不可识别的变化。所以如果在你的未来有微调事件,很遗憾,这里不是你找到答案的地方。

9.4.2 训练您的模型

因为它们在 LLMs 的训练和微调的背景下经常被使用,我应该简要描述一下零样本少样本方法来进行模型训练。零样本和少样本训练通常会在模型暴露于其大型训练数据集的预训练阶段之后进行。

零样本学习涉及使用语言模型执行其没有接受任何特定训练的任务。相反,它利用其对语言的一般理解来根据提示或指令完成任务。关键的想法是模型可以从其预先训练的知识中概括,并将其适应于新任务。通过提供详细的提示,指定所需的任务和格式,模型可以生成相关的输出。

例如,即使模型尚未针对翻译任务进行特定的微调,你也可以使用零样本提示指导模型,比如,“将以下英语句子翻译成法语:Hello, how are you?”。然后,该模型将基于其对语言和提示的理解生成翻译输出。

少样本学习涉及提供少量特定任务的训练示例或演示给语言模型,以便它可以快速适应新任务。虽然零样本学习不涉及任何特定任务的训练,但少样本学习提供了少量示例来帮助模型更好地理解任务。通过在这些少量示例上对模型进行条件设置,它可以学会更准确地执行所需的任务。

例如,如果您想让模型总结新闻文章,您可能会提供一些文章摘要的例子以及文章本身。然后,模型可以使用这些信息为其他文章生成摘要。

零样本学习和少样本学习方法都允许语言模型在不需要进行广泛的微调或在大型数据集上进行训练的情况下执行各种任务。它们展示了这些模型惊人的泛化能力,使它们能够将其语言理解应用于各种任务。

9.5 摘要

  • 定制大型语言模型可以解决那些通用模型不合适的问题。

  • 配置您自己的模型需要从一个 base LLM 开始。

  • 对新模型进行良好的调整需要访问您自己的数据集和重要的硬件资源。

第十章:我是如何学会不再担心并爱上这种混乱的

本章介绍了

  • 持续的生成式 AI 发展对你的下一份工作和你的下一个创业公司意味着什么

  • 什么是人工通用智能,它的未来在哪里?

  • AI 应该受到监管吗?

  • 接下来是什么?

我对改变并不陌生。事实上,我经常面对各种颠覆,勇敢地面对它们。虽然“勇敢地面对”也可以被解释为“故意忽视挑战并希望它们会消失”。

我“勇敢面对”的变化大多在数月或数年内逐渐发展。例如,在我写作这本书的同时,亚马逊网络服务(Amazon Web Services)的仪表板界面的更新频率比我所愿意的要高。但它们的发生频率很少,以至于我可以在我的书籍和课程中主要通过弱化仪表板并重点关注命令行操作来解释它们。

相比之下,我所钟爱的 Linux 的改变发生在我所称之为“政府速度”(the speed of government)的情况下-这意味着它们几乎根本不会发生。耶!Linux。

生成式 AI......嗯,那是另一回事了。就在我写这本书的时候,我见证了产品和服务转变功能,禁用了代码模式,更新了访问策略,放弃了斗争,而且如果我记得正确,还从互联网上完全消失了。其中一些事情发生在几天内!

但你已经知道这一切了。标题上就写着。

因此,在所有这些混乱的背景下,我认为我们将以一些相当不可靠的预测来结束这个已经过时和徒劳的努力。我们将从对即将发生的变化做一些总结开始。

10.1 世界工人可以合理期望什么

这不全是坏消息。而且花更多时间思考这些大趋势实际上可以帮助刺激你的想象力。你可能会发现一个意想不到 - 也有可能是有利可图的 - 的利基。

AI 驱动的自动化可能会导致某些工作岗位的消失,因为机器能够更高效地执行任务。这可能需要工人调整他们的技能或转向新的角色和行业。或者只是学会享受突然多出来的空闲时间。另一方面,正如我们在本书中引用的那样,AI 不会让人们失业。但是将 AI 纳入运营的人将让那些不将 AI 纳入运营的人失业。

LLM 可以通过自动化重复或耗时的任务提高各个行业的效率和生产力,使人们能够专注于更复杂和创造性的事务。换句话说,在你的工作流程中加入 AI 工具可以让你在你所做的任何事情上更快、更好。记住这个永恒的等式:“更快+更好=竞争力”。

LLMs 可以分析大量数据,生成个性化推荐,如个性化购物体验、内容策划和定向广告。这可以提高客户满意度和参与度。如果您销售任何产品,让您的客户更加满意可能会产生重大影响。

AI 可以促进诊断、药物发现和治疗规划的改善。LLMs 可以通过分析患者数据、建议治疗方案和跟踪最新的医学研究来帮助医疗保健专业人员。这样想吧:也许你不是大型制药公司,但有效使用 AI 工具可能会让你获得提高生产力所需的推动力,以使这些庞大的恐龙沦为尘土。

LLMs 可以通过提供个性化学习体验、智能辅导和获取大量教育资源来彻底改变教育。基于 AI 的工具可以帮助教育工作者评估学生的进步,并相应调整教学方法。我猜它们也可能使教师变得不再重要。我很高兴我不以教授为生。

由于基于 AI 的聊天机器人和虚拟助手可以提供全天候服务,您可以提供(或利用)更短的响应时间和增强的用户体验。

基于 AI 的系统,包括 LLMs,可以在金融、物流和战略规划等行业的决策过程中提供帮助。它们可以分析庞大的数据集,识别模式,并提供支持决策的见解。但是,如果您读到了本书的这一部分,如果您还没有深入研究这类工作,我会感到很惊讶。

10.2 您的下一个商业创业将会是什么样子

未来的 AI 进步可能会对商业创业环境产生特别重大的影响,提供机遇和挑战。换句话说,新的创业公司可能比其“传统”前辈更具敏捷性、快速行动和更便宜。这是因为他们可能能够大规模地自动化曾经需要数百甚至数千名工程师和其他专业人员以及维持他们快乐所需的基础设施。与其把时间花在寻找数十亿美元的种子资金来从原型扩展到成熟应用上,一个以人工智能驱动的企业的创始人们可能会无限期地继续下去,只需要几十名员工和一个摇摇欲坠的乒乓球桌。

那么,AI 有什么特点使得所有这些变得可能?

显然,这始于自动化和效率的提高。AI 技术可以自动化各种任务,使创业公司能够简化运营、降低成本并增强效率。想想利用 AI 来完成客户支持聊天机器人、社交媒体管理,或者,如果您想整合一些严肃的技术,为您的库存或制造业控制提供智能质量控制机制。

对于资源受限的初创企业来说,这尤其有益,使它们能够与规模更大的已建立的公司竞争。但是没有理由不能让这种节约成为您企业运营的永久特征。

将增强的决策制定和分析工具交给创始人自己可以绕过昂贵的业务部门。毕竟,每个企业都需要数据分析和预测建模来识别市场趋势并优化战略。但正如我们所见,将这些过程委托给几个 GPU 而不是一屋子的 MBA 和 CFA 会便宜得多。随着对人工智能工具和平台的访问增加并简化,这种内部分析和业务决策工作变得更加合理。

人工智能的进步还可以开启新的商业机会并打破传统行业。拥有创新的人工智能驱动解决方案的初创企业更有可能创建全新的市场,挑战现有玩家的颠覆性商业模式,或者仅仅在某一特定业务周期活动中变得更加优秀。例如,人工智能可以个性化客户体验,提升参与度,并提供定制建议,从而实现更优越的客户服务或营销运营。

当然,人工智能的变革将影响初创企业所需的技能集。创始人和员工可能需要在人工智能相关学科上发展专业知识,以有效利用人工智能技术的潜力并保持竞争力。随着人工智能的普及,初创企业的竞争环境可能变得越来越激烈(毕竟,其他人都将拥有您正在使用的相同工具)。初创企业将需要更加努力地利用人工智能以独特且有价值的方式来区分自己,在拥挤的市场中脱颖而出。

利用人工智能的初创企业必须优先考虑伦理问题,以建立与客户和利益相关者的信任。解决与数据隐私、偏见、透明度和问责制相关的问题对于长期成功至关重要。这意味着您和您的人工智能需要养成相互监督的习惯。您将审核您从人工智能获取的内容,而您的人工智能将审核您。

10.3 通用人工智能:发展方向

AGI 代表通用人工智能。它指的是高度自主的系统或机器,具有理解、学习和执行智力任务的能力,水平等同或超过人类在各种领域的能力。当我写下这些话时,我们似乎尚未达到通用人工智能。尽管随着我们过渡到下一段,这种情况可能会发生变化。

与专注于特定任务或领域的狭义人工智能相比,通用人工智能旨在复制人类的一般认知能力。通用人工智能将表现出推理、问题解决、学习和适应能力,使其能够跨多个领域执行任务,而无需显式编程或人类干预。(更新:通用人工智能似乎仍在等待中。)

AGI 的开发和实现将给社会带来深刻的变革。 AGI 可以自动化各行各业的广泛任务,从根本上改变科学研究,推动问题解决,扩大个人能力和容量,并改变教育、医疗保健、交通运输和治理。它将影响我们与技术的所有互动,并塑造社会的整体结构。

正如许多年前我的高中学生们经常问我:“那是好事还是坏事?”

我通常会回答:“就像所有事情一样,它是复杂的。”

在“复杂且令人担忧”的一面,以下是一些令人担忧的可能性:

  • 如果通用人工智能(AGI)超越了整体人类能力,人们担心其可能迅速获取并巩固超出人类控制范围的权力。确保对齐 AGI 目标与人类价值观的健壮机制并保持控制变得至关重要,以防止意外后果的发生。

  • AGI 可能会以与人类意图不同的方式解释其目标,或者未能准确理解人类价值观。这种不对齐可能导致 AGI 追求对人类有害或不符合我们福祉的目标。

  • 即使出于良好的意图,AGI 系统也可能因其决策过程的复杂性而产生意外后果。这些后果可能是有害的,难以预测或纠正,从而导致对社会的未预见风险。

  • 如果 AGI 在没有足够预防措施的情况下开发和部署,可能会导致竞争性竞赛,没有足够时间进行安全措施和健壮测试。这种匆忙可能会增加风险的可能性,并且不足以理解 AGI 的影响。

  • AGI 技术落入错误的手中或具有恶意意图可能带来重大风险,包括网络攻击、武器化、监视和在前所未有的规模上操纵信息。

  • AGI 的广泛采用可能会扰乱就业市场和经济体系,可能导致失业率上升和不平等加剧。需要管理与 AGI 部署相关的利益和风险,以减轻潜在的社会和经济差距。

  • 确定人类价值观并将其编码到 AGI 系统中存在挑战。不同的文化、伦理框架和个人偏好可能导致分歧,并在确定 AGI 的普遍可接受价值体系方面出现困难。

  • 社会可能会严重依赖 AGI 系统来执行关键任务、基础设施管理和决策制定。这种依赖性会带来漏洞,因为故障、停电或恶意攻击可能对基本服务产生严重后果。

应对这些风险需要跨学科研究、合作,并制定安全措施、规范和框架,以确保 AGI 的负责任开发和部署。优先考虑透明度、强大的测试、价值观的一致性和持续监测,以减轻潜在的危害,并最大化 AGI 的利益。

或者,换句话说,要有效地控制计算机,我们需要社会范围内的卓越合作和政府及行业专家的智能指导。

所以综合考虑,我在这场竞争中投了计算机一票。

10.4 AI 应该受到规范吗?

鉴于 AI 系统固有的潜在危险,特别是具有接入互联网和现实世界的系统,允许任何人在任何地方做任何事情是否有意义?

我个人认为这并不重要。"等一下,"我听到你抗议道。"人类生存的关键在于此,而你却认为这并不重要?" 是的。但这不是因为我不关心人类的福祉。我的一些好朋友都是人类。相反,这是因为我认为监管是不可能的。

这是因为我们在第九章讨论过的一些事情,"构建和运行自己的大型语言模型"。Meta 的开源 LLaMA 模型的权重一泄露,互联网就开始充斥着独立的 LLMs,可供免费下载。它们可以通过所有通常的渠道获取,包括 GitHub。但它们也可以在像分布式星际文件系统(IPFS)这样的非正式网络架构中找到。与早期互联网一样,像 IPFS 这样的网络 - 设计上是去中心化的 - 几乎是不可能受控制的。

无论多少政府签署了旨在限制新 LLM 技术无限发展的措施,LLM 技术将继续无限发展。因为没有人可以阻止独立思考的开发者,当他们完成工作所需的只是性能适中的笔记本电脑和工作站时。无论是好是坏,历史上都有很多失败的(或部分失败的)试图禁止分布式网络上的活动的尝试,包括文件共享、加密、互联网审查以及分发用于 3D 打印枪支的模板文件。

10.5 未来之路

现在,我毫不关心我的个人安全,与任何常识的影子直接冲突,我将为未来几年生成式 AI 进展做出无畏的预测。不客气。

10.5.1 量子计算

量子计算有望显著提高计算能力,并实现更复杂的计算。量子算法和架构可能推进自然语言处理能力,并增强 LLMs 的训练和优化过程,潜在地导致更快、更高效的语言模型。

量子计算是利用量子力学原理进行计算的新兴领域。与依赖于表示 0 和 1 的位的经典计算机不同,量子计算机使用量子比特或 qubit,由于一种叫做超位置的属性,可以同时存在于多种状态。

超位置允许量子比特处于 0 和 1 状态的组合中,使量子计算机能够同时处理和操作大量可能性。这种并行性提供了解决某些计算问题比经典计算机快得多的潜力。

量子计算中另一个重要的属性是纠缠。当量子比特被纠缠时,一个比特的状态与另一个比特的状态不可避免地联系在一起,无论它们之间的物理距离如何。这种相关性允许纠缠的量子比特之间的瞬时通信,使量子计算机能够执行涉及多个变量之间复杂关系的计算。

量子计算有潜力革新各个领域,包括密码学、优化、材料科学和药物发现。它可以解决目前经典计算机无法处理的问题,如快速分解大数、模拟量子系统和以指数加速解决优化问题。

10.5.2 神经形态计算

神经形态计算旨在利用神经形态架构和专用硬件,可能让 LLMs 和生成式 AI 系统实现更高效率、更低能耗和更具生物灵感的学习过程,从而实现更智能和适应性更强的模型。

神经形态计算是一个研究领域,旨在创建受人类大脑结构和功能启发的计算系统。它利用神经科学的原理来开发硬件和软件架构,模仿生物神经网络的行为。

传统计算依赖冯·诺依曼体系结构,其中处理和存储是分开的实体。相比之下,神经形态计算旨在集成处理和存储,实现类似于大脑神经连接的并行和分布式计算。

神经形态系统利用专用硬件,如神经形态芯片或尖峰神经网络,模拟神经元和突触的行为。这些系统以与传统二进制计算基本不同的方式处理信息,使用活动的尖峰或突发来表示和处理数据。

通过模拟大脑的神经结构和功能,神经形态计算提供了几个潜在的优势。它可以实现低功耗和能源高效的计算,因为设计针对大脑的节能机制进行了优化。它还提供了实时处理感知数据的能力,使其适用于需要快速和持续处理传感器输入的应用。

10.5.3 高级硬件加速

未来硬件的进步,如专用的 AI 芯片和处理器,可以显著提升 LLM 的性能和训练速度。专门设计用于语言处理和生成任务的专用硬件可以为更复杂和高效的 LLM 带来新的可能性。AI 驱动的变革已经将图形处理单元制造商 Nvidia 提升到了意想不到的行业领导地位。

高级硬件加速是指利用专门的硬件组件或架构来增强特定计算任务的性能。在 AI 和计算的背景下,它涉及设计用于加速人工智能工作负载(如深度学习和神经网络)的硬件。

传统的中央处理单元(CPU)通常在有效处理 AI 算法的大规模计算需求方面受到限制。高级硬件加速技术通过利用专门的硬件(如图形处理单元(GPU)、现场可编程门阵列(FPGA)或专用集成电路(ASIC))来解决这一限制。

这些硬件加速器旨在执行并行计算并利用 AI 算法中固有的并行性,从而实现显著的速度提升和能源效率增益。它们可以高效地执行矩阵计算、神经网络操作和其他在 AI 工作负载中普遍存在的计算密集型任务。

高级硬件加速的使用可以实现更快的训练和推理时间,使得实时或准实时的人工智能应用成为可能。它还可以减少与 AI 计算相关的功耗和运营成本,使得在更大规模上部署 AI 系统更加可行。

10.5.4 强化学习和元学习

对于 LLM 的训练和微调过程,进一步发展强化学习技术和元学习方法可能会带来改进。这些进步可以增强 LLM 从有限数据中学习、推广到新任务并适应动态环境的能力。

强化学习是一种机器学习方法,其中代理学习在环境中做出顺序决策以最大化奖励信号。代理与环境进行交互,采取行动并以奖励或惩罚的形式接收反馈。通过从这些经验中学习,代理开发出指导其决策过程的策略。强化学习涉及探索不同的行动,评估其后果,并根据收到的反馈调整策略以改善性能。它在解决复杂问题方面取得了成功,如游戏玩法、机器人技术和自主系统。

元学习,也称为“学会学习”,是机器学习的一个子领域,专注于开发能够使模型有效学习如何学习的算法和方法。它涉及设计能够从先前的学习经验中适应和泛化到新任务或领域的模型或系统。元学习算法旨在获取关于学习过程本身的知识,使代理能够快速适应并在少量训练数据的情况下在未见任务上表现良好。通过利用过去学习经验的见解,元学习实现了新技能的高效获取,并促进了对新问题领域的快速适应。

10.5.5 多模式学习

将多种形式的信息,如文本、图像、视频和音频,整合到 LLM 中,可以产生更全面和具有上下文感知的模型。多模式学习技术的进步可以使 LLM 能够生成结合不同形式信息的丰富且连贯的内容,为创意丰富且沉浸式的人工智能应用开辟新的可能性。多模式学习的可能应用包括视频摘要、医疗诊断和与环境密切结合的机器人(仿佛这是我们需要的所有)。

10.5.6 可解释性与解释性

在 LLM 中开发解释型人工智能和可解释性的技术和方法是一个活跃的研究领域。该领域未来的进展可以增强 LLM 的透明度,使用户能够理解和信任人工智能系统的决策过程,从而缓解与偏见和缺乏问责相关的担忧。

可解释人工智能是指开发能够为其决策和行为提供可理解和透明解释的人工智能系统。它侧重于使人工智能模型的内部运作对人类可解释和可理解。可解释人工智能技术旨在揭示对人工智能系统输出有贡献的推理、因素或特征,从而增强信任、责任和用户接受度。通过了解人工智能是如何以及为何得出某些结论,可解释人工智能帮助用户、利益相关者和监管机构洞察决策过程,识别偏见或错误,并确保人工智能系统的公平、道德和透明度。

同样,在人工智能的背景下,可解释性是指理解并解释人工智能模型或系统如何得出其预测或决策的能力。这涉及向人类提供有意义的洞见,了解人工智能系统的内部运作逻辑和推理。可解释性技术旨在使决策过程对人类透明和可理解,使用户能够信任和验证输出,识别潜在的偏见或错误,并深入洞察影响系统行为的因素。可解释性对于确保人工智能的责任、公平和道德使用,以及促进人工智能与人类在关键领域的合作和决策是重要的。

特别需要此类透明度的应用包括自动化的金融信用评分系统、法律合同分析以及教育环境中的评估。

10.5.7 数据效率和少样本学习

当前的 LLM 通常需要大量标记数据进行训练。未来的技术可能会专注于提高数据效率,使 LLM 能够有效地从更小的数据集或更少的迭代中学习。这可以扩大 LLM 的可访问性和可用性,特别是在标记数据有限的情况下。

数据效率是指机器学习算法或模型在用少量标记数据进行训练时能够实现高性能的能力。传统的机器学习方法通常需要大量标记数据进行有效的训练。数据高效技术旨在通过采用迁移学习、主动学习、半监督学习或数据增强等方法来克服这一限制。这些技术能够使模型通过利用先验知识、利用未标记或部分标记数据,或生成合成数据来扩充训练集,从而能够很好地泛化有限数据集。

少样本学习进一步提高了数据效率,重点是训练能够仅通过少量标记示例泛化到新类别或任务的模型。少样本学习的挑战在于使模型能够从少量标记实例中学习,并有效地适应新类别或情景。像元学习这样的方法,模型从任务分布中学习学习,以及基于度量的方法,学习样本之间的相似度度量,通常用于少样本学习。这些技术使模型能够从已见类别泛化到新的、未见类别,并且只需极少的额外训练样本。

数据效率和少样本学习在获取大量标记数据困难、昂贵或耗时的情况下具有实际意义。它们使得机器学习模型能够在有限的标记数据下有效学习和很好地泛化,使得人工智能在数据有限的实际情况下更易于获取和应用。这些方法有助于计算机视觉、自然语言处理和机器人等领域的进展,其中标记数据稀缺是一个常见挑战。

10.5.8 领域特定知识整合

将领域特定知识整合到 LLM 中可以增强它们在专业领域的性能,并实现更加定制和准确的响应。可以实现结构化数据、领域本体论或专家知识与 LLM 的无缝集成的技术可以增强它们在各个行业和专业背景中的实用性。法律、医学和金融领域都是可以从这些整合中获益的行业。

10.6 二阶效应

二阶效应是特定事件、行动或政策的意外间接、长期或级联影响。我们将在本书的最后快速查看一些生成 AI 潜在的二阶效应。

10.6.1 投资市场

让我们想一想当数百万个私人投资者由 AI 算法指导 - 而不是像银行和对冲基金这样的机构投资者 - 同时涌向像 RobinHood 这样的折扣在线券商时,情况可能会是怎样的。

我们已经开始看到一些复杂的实验,涉及向 AI 工具提供大量历史市场分析数据,并将输出提供给消费者。Portfolio Pilot 和 Composer.trade 是两个相对成熟的可能示例。但假设数百万投资者注册。那么,这将如何从宏观角度改变市场本身?

首先,合理地假设 AI 可能被应用于通过提供基于大数据集和复杂算法的更准确的预测和建议来改善投资决策是合理的。当然,AI 的有效性取决于其所训练的数据,而使用开发 AI 模型的训练数据存在偏见的问题。此外,与在金融中使用 AI 相关的监管挑战,包括确保决策过程的透明度和问责制。换句话说,AI 动力的投资飞机可能永远也不会真正起飞。

但超越这种相对不太可能的结果,由于他们的数量庞大和日益增长的影响力,个体投资者可能会在塑造市场趋势方面发挥越来越重要的作用。让我们谈谈可能会出现的一些方式。

例如,当散户进行高频交易或集体买卖时,他们可能会引发突然的价格波动,导致市场波动加剧。这在 COVID-19 大流行期间显而易见,当散户通过像 Robinhood 这样的在线平台推动股价飙升时。散户情绪的大规模变化可能会导致市场情绪的转变,使资产价格上涨或下跌,而与基本面无关。因此,例如,如果散户对某个特定行业或公司感到乐观,即使没有确实强有力的理由支持增长,他们也可能推动对这些资产的需求增加。

Robo-Advisor 和其他数字财富管理平台的崛起可以通过提供低成本、多样化的投资组合来进一步扰乱传统的投资模式,这些投资组合可供更广泛的投资者使用。这种投资的民主化可能会导致新的市场动态,并有可能颠覆金融行业内的既定权力结构。根据您的观点,这可能是好事或坏事。(值得一提的是,我个人倾向于“好事”。)

随着社交媒体和在线平台的普及,散户现在可以轻松地分享想法,围绕特定投资主题形成社区,并迫使机构注意。这种朝向去中心化投资的新趋势可能会诞生新的市场现象,并挑战传统的市场分析形式。

随着散户投资行为的规模增长和影响力的增加,监管机构可能需要调整现有的监管规定或引入新的规定来应对与这种转变相关的风险。例如,可能会跟随更严格的报告和披露要求,或者对在线券商进行更严格的监督。

散户投资者往往比机构投资者交易频率低,交易量小。我认为这是件好事。我的个人投资偏好是大量购买先锋标普 500ETF 指数基金,然后将其忽略 50 年。但是,从更大范围来看,散户投资活动的波动可能会降低市场流动性,使其他参与者难以快速进出仓位而不会显著影响价格。

散户投资者往往追逐热门趋势,涌入某些行业或资产,从而造成泡沫。这些泡沫最终可能破裂,导致对毫无戒备的投资者的急剧逆转和损失。历史告诉我们一些这样的泡沫例子,比如网络泡沫或房地产市场崩盘。事实上,传统上,散户投资者缺乏有关投资原则的正确知识,导致糟糕的决策和对易受欺诈者利用天真的容易受骗。然而,将适当设计的人工智能加入其中应该有助于弥合这一教育差距,促进基于扎实理解的知情选择,从而使投资者和市场都受益。毕竟,人工智能引导应该擅长鼓励自我控制和纪律。

随着散户投资者的影响力增强,存在着由许多人同时采取协调行动而导致的系统性风险的可能性。想象一下,成千上万的人都在购买或做空同一证券;这样的集体行动可能引发闪崩或加剧市场不稳定性。同样,社交媒体平台允许散户投资者参与讨论,辩论策略,并迅速对新闻事件做出反应。虽然这可能促进健康的市场竞争,但也为投资疯狂创造了机会——这些情况往往是由情绪决策而不是仔细分析推动的迅速价格波动。这些情况可能导致无辜方受到意外损失或获得不可辩解的收益。

那肯定会很有趣。

10.6.2 人类创新

想想 19 世纪的那些重大改变世界的创新。我的意思是蒸汽机、铁路、制冷、缝纫机、电话、电报、摄影、电气化以及贝塞尔工艺,它使钢铁大规模生产成为可能。是谁想出了所有这些主意,是什么激发了他们?

实际上,似乎大多数发明家既不是科学家也不是研究人员。通常情况下,他们往往是充满好奇心和雄心壮志的个人,经常在他们最终要革命的行业中工作。他们是了解现在事物如何运作的人,有想象力和动力来想象如何改进他们的工作环境。

当然,是工程师和物理学家发明了激光,但是实际上是经验丰富的技工将这些技术改编成为建筑中使用的水平仪和测量工具。是谁使得从我父母那一代相对可怕和痛苦的牙科实践转变为我自己孩子们成长中的快速、友好和高效的体验?实际上,这主要是牙医,他们构想了更好的做事方式并申请了更好的设备专利。

同样地,无论好坏,许多对 21 世纪社会产生最大影响的软件平台都是像比尔·盖茨、杰夫·贝索斯、迈克尔·戴尔和马克·扎克伯格这样高度专注但没有资质的实验者的产品。我可能错了,但我认为他们中没有人完成了大学学位,当然也没有人是专业研究人员。每个人都看到了现有市场中的空白,并想出了如何填补它们的方法。

因此,请思考大多数工业革命创新背后的人们分享了对事物运作方式的深刻、直接的理解以及对更广泛的经济背景的深入了解。

现在想象一下,经过 10 或 20 年的生成式人工智能世界,我们会变成什么样子。当比我们任何人都聪明的工具指导我们工作的每一步时,我们是否仍然真正理解我们正在做的事情?我们即将经历的变化是否会导致人类工作者失去批判性思维技能,使我们在没有技术的情况下难以有效地跳出思维定式和解决复杂问题?

谈到创新,这里有一个广泛相关的想法。

AI是谁?我的意思是,从法律和保险责任的角度来看,始终有一个可识别的人或法人为所有财产负责。如果一辆车撞倒了某人的围墙,那么司机就应该负责。如果你能证明这是因为全新的刹车突然失灵了,那么制造商或者安装它们的技术人员可能要负责。如果医疗团队误诊了一种疾病并切除了不需要切除的器官,他们或他们的保险提供者可能要负责。但除了天气或合同排除的危险之外,发生的一切都有一个负责任的一方。

但是如果责任在 AI 身上呢?那么谁负责?你把谁告上法庭?假设一辆自动驾驶汽车造成了致命事故。你可能会说是车主的错。但是如果控制汽车的软件实际上属于制造商呢?如果制造商将个别控制系统的设计和维护外包,而其中一个系统出现了故障呢?

如果这种误诊不是医疗团队的错,而是运行其 AI 扫描设备的软件中存在的缺陷呢?如果依赖复杂软件精确计时交易的金融交易公司遭受数百万美元的损失呢?或者一个智能家居系统出现故障,并决定关闭您的安全防御系统。

你可以看到这有多么复杂。事实上,许多这些问题已经是实际问题了。但所有这些问题很可能很快就会出现在你附近的保险政策中。

10.6.3 就业市场

让我们谈谈就业世界中的一个非常具体的部分,这个部分的存在是为了让每个人都开心,但不知何故经常会做到相反:人力资源招聘部门。

仔细想想,招聘经理的工作几乎是不可能完成的。期望是你能够在数十甚至数千名候选人中挑选出最合适的新工作候选人。你需要了解你正在招聘的工作角色,成功所必需的准确技能,你的新员工将与之共事的人的性格和特点,以及所有这些可能与组织的长期目标相契合的方式。

但除此之外,你还需要设法猜测每位候选人之前的几份工作出了什么问题,哪些申请包含虚假或夸张的声明,以及谁没有足够的精力做好工作——无论他们之前的成就有多么出色。而且你必须在不冒犯任何人或违反任何隐私保护、劳工和职场法律的情况下完成所有这些。

哦。如果你弄错了,雇用了错误的人会发生什么?你可能已经让你的组织损失了数十万美元,并浪费了入职培训,使他们在项目进度上倒退了几个月。我有提到由此产生的诉讼吗?

我们都知道找工作有多痛苦。花点时间欣赏一下招聘人员所经历的一切吧。

现在考虑一下 AI 采用如何有潜力改善招聘部门的工作方式。例如,基于 AI 的数据分析可以提供有关候选人人口统计学、技能和偏好的宝贵见解,帮助招聘部门做出更明智的选择决策。它还可以帮助识别包含虚假资格或经验的申请。

自动化 AI 工具可以通过视频面试、在线测试和模拟独立评估候选人。这些评估可以提供客观的见解,帮助招聘经理做出更为明智的决策,保证与组织预定的标准和官方政策相一致。这可以通过关注与工作相关的资格,并消除与工作无关的个人特征,帮助减少偏见。

从更长远的角度来看,AI 可以利用过去的招聘决策和员工表现数据,预测潜在员工的成功。它也可以用于分析当前员工数据,并确定促成员工离职的因素。通过理解这些模式,公司可以积极改善员工保留率。

这一切是否总是完全公平的?可能不是。如果 AI 做出重大决策,你的简历是否会比现在更容易被真正的人看到?也许不会。但我认为它肯定比现在要好得多。而且它可能会消除现有的某些内在的公平性。

这一切与劳动力市场有什么关系呢?我建议,让招聘过程更加高效和有效可能会导致更加高效和有效的组织。而一个更加高效和有效的组织往往更具生产力。在自由市场中,这应该会带来新的机遇、新的项目……以及新的招聘。每个人都应该从中受益。

10.6.4 按需媒体

如果您只需要订购一个以您最喜欢的演员为主角、基于您最喜欢的城市和历史时期的全新动作片,您会这么做吗?或者你是否会在一个早晨醒来,想知道下一张披头士专辑或贝多芬的第 11 交响曲会听起来如何?或者你是否想要一两个小时的有挑战性的高清视频游戏,而无需任何一个游戏开发工作室考虑过这个主题。如果生成这些内容不比简单的 ChatGPT 提示复杂,你会去尝试吗?

这一切该如何实现呢?生成式对抗网络(GANs)理论上可能特别有效,用于创建我们正在谈论的媒体类型。GANs 是一种生成式 AI 模型,由生成器和鉴别器两个神经网络组成。它们可以协同工作,发挥各自的作用:生成器试图创建逼真的数据,而鉴别器试图区分真实数据和生成的数据。通过这个对抗过程,GANs 可以产生高度逼真且多样化的输出。如果它们被训练用于我们已经拥有的所有杰出电影和音乐,那么这种系统可能毫无问题地测量和再现具有可比质量的内容。

例如,GANs 可以创建细节丰富、逼真的角色、环境和对象,从而减少手动资产创建的需求。在视频游戏中,GANs 特别擅长过程化地生成游戏关卡、地图、景观和物体等内容。这种生成新的和独特的内容的能力可以增强回放性和游戏的多样性。

GAN 可以创作模仿特定风格或艺术家的原创音乐作品,使它们成为为电影、游戏或仅用于欣赏的音乐创作的有价值工具。GAN 还可以用于克隆和合成人类声音,使其在配音、配音和为角色创建新对话方面非常有用。

当然,训练 GAN 可能需要大量的计算资源,需要强大的硬件和大量的数据。正如一些好莱坞劳工纠纷所显示的那样,在新媒体中使用克隆演员甚至作家可能会受到法律限制。

但是,一旦所有这些技术和法律问题得到解决——它们几乎肯定会得到解决——得到的媒体产品是否值得消费呢?是无法理解和无法衡量的人类触感使艺术有价值?还是唯一重要的是产品能够导致令人愉快和娱乐的消费?

10.6.5 按需新闻报道

新闻业早已被技术彻底颠覆并不是什么秘密。回到 90 年代,像 Craigslist 这样的早期互联网分类广告企业以及在线新闻和社交媒体网站几乎消灭了给主要报纸带来实力的主要收入来源。一个当地的城市报纸曾经可能雇佣了一百多名全职记者,他们致力于监督国家和地方政治家和公共机构的情况,但现在可能只剩下极少数人——假设这些报纸仍然存在。

在很大程度上,是技术创造了这个真空。技术能够为我们找到解决方案吗?

我会投赞成票。但也许不是你想象的方式。当然,生成式人工智能可以轻松地自动化简单的信息传递。例如,将 GPT 整合到提供即时金融股票数据或体育比分的信息源中是微不足道的。但我所说的不是这个。

我所说的是能够访问中立客观新闻的能力。假设我们能够调整过滤器以适应我们的偏好和需求,这样,你将不再获取由隐形人员隐形偏见所影响的事件版本,而是可以设置自己的过滤器。当然,你可能选择只看符合你先入为主的内容。但你也可以选择中立和客观的内容!

我还谈到了使用 LangChain 等工具来创建能够在互联网上实时搜索、查找和解析大量数据档案,然后检测可能导致腐败和无能的异常和模式的人工智能代理。或者可能是无私的英雄行为。

换句话说,在互联网时代,也许没有办法取代古典时期记者所做的挖掘工作中产生的爱恨交织、面对面的关系和复杂激励,但是一切都留下了数据踪迹。人工智能在筛选大量数据并找到需要找到的内容方面尤其擅长。

作为概念的证明,我最近深入研究了加拿大最高法院公共数据提供的信息。大多数加拿大人对我们的最高法院知之甚少。其法官几乎不为人知,法官是如何和何时被任命到法院的仍是个谜,而他们日常所做的事情也是不可见的。

但他们的信息都是免费提供。这篇文章就是我的研究成果。我在寻找法官投票中是否存在政治色彩等各种信息。一个全职跟进最高法院的记者不需要提出这样的问题。但是,由于没有这样的记者存在 - 据说最高法院的新闻记者席几乎总是空的 - 或许一些有效的数据分析可以代替其存在。

即使对于最高法院的裁决分析这种想法让你困倦,我相信你会同意某人应该负责监视和报告。

10.7 摘要。

  • AI 技术进步将推动硬件创新,而硬件创新又将推动 AI 技术发展。

  • 不采用 AI 工具的企业将难以跟上竞争对手。

  • 我们需要找到 AI 的增长动力和相关风险之间的安全和有效的平衡。

  • 带有全面透明度的 AI 工具将变得越来越重要。

  • 在 AI 决策方面,我们始终需要人员参与。

  • 我们需要确定 AI 参与者的法律限制和责任。

  • AI 工具将改变我们的投资、工作方式,而且潜在地可以建立更好的社会。

附录 A:重要的定义

恐怕这是不可避免的:如果我们想要获得 AI 的全部好处,我们就必须咬紧牙关,吸收一些严肃的概念。技术是经过设计复杂的,而人工智能是技术的一个特别复杂的子集。好消息是,我们并不打算成为物理学家和工程师,所以对这些想法及其历史的基本了解就足够了。但是还是要做好一些动荡的准备。

A.1 一些关键的 AI 定义

要帮助你入门,这里有一张有用的图表,展示了生成式人工智能模型背后众多计算元素之间的复杂关系。

图 A.1 AI 关系的从左到右的思维导图

gai app 1

话虽如此,即使你选择完全跳过本节,你仍然可以成功地跟着本书的其他内容走。但你可能会有些难以确定所得到的 AI 响应中的一些微妙之处(和弱点)。而且一些指示和流程可能会感觉有些随意。

我应该注意到,许多概念的定义将参考其他概念。我会尽力只参考先前定义过的事物,但是由于扭曲(和递归)关系太多,这不可能每次都做到。在提醒了这一点之后,下面是一些基本知识,它将使您更有效地处理生成式人工智能。

机器学习是人工智能的一个分支,专注于开发能够自动从数据中学习和改进而无需明确编程的算法和模型。它涉及在大型数据集上训练系统以识别模式、进行预测或执行任务。通过迭代调整模型参数,机器学习使计算机能够从经验中学习并适应新的输入,使其能够做出明智的决策并在最小的人工干预下执行复杂的任务。

在 AI 的背景下,模型指的是从数据中学习模式、结构或关系的数学表示或计算系统。它是一个经过训练的算法或网络,可以根据其学到的知识或训练参数接收输入并生成有意义的输出。在生成式人工智能中,模型特指能够生成类似训练数据的新数据样本的系统,无论是生成图像、文本、音乐还是其他形式的创造性内容。模型封装了学到的信息以及基于该知识生成新实例的能力。

标签是分配给数据点的分类或注释。它们提供了与输入相关的特征或属性的明确信息。标签作为指导信号,帮助模型学习并生成与所需属性或特性相符的输出。标签通常用于情感分析的一个地方。情感分析涉及训练模型根据文本的情感色调将其分类为正面、负面或中性。为执行此任务,我们需要使用适当的情感对我们的训练数据进行标记(例如,“这篇评论是积极的”,“这条推文是消极的”)。

加权是指分配给模型中神经元或特征之间连接的数值。这些权重确定了每个连接的强度或重要性,并在模型的学习和决策过程中发挥关键作用。在训练过程中,权重根据观察到的错误或预测与实际输出之间的差异进行迭代调整,使模型能够从数据中学习,并通过为不同的输入和连接分配适当的权重来提高其性能。加权通常用于命名实体识别(NER),它涉及将文本中提及的实体识别和分类到预定义的类别,如人物、组织和地点。例如,加权的 NER 模型可用于聊天机器人应用程序,以提取和响应用户对特定主题或实体的查询。

解析器是分析给定输入的结构的软件组件或算法,通常以符号或文本序列的形式出现,并根据预定义的语法或一组规则生成结构化表示。它通常用于自然语言处理中解析句子并提取句法或语义信息。解析器将输入分解为组成部分,如单词或短语,并建立它们之间的关系,从而实现进一步分析、理解或处理输入数据。

通过理解单词、句子或视觉元素之间的依赖关系,生成式人工智能模型可以生成保持上下文一致性的有意义的序列或图像。建模依赖关系允许生成的输出展现逻辑流、语义一致性,并遵循训练数据中观察到的模式。准确捕捉依赖关系对于在生成式人工智能应用程序中生成高质量和连贯的输出至关重要。

回归(Regression)是一种监督学习技术,用于根据输入特征预测或估计连续的输出变量。它通过将数学函数拟合到训练数据来建模输入变量和输出变量之间的关系。目标是找到最佳拟合函数,使预测值与实际值之间的差异最小化。回归算法分析数据中的模式和趋势,以进行预测或推断关系。对于情感分析,回归可以是另一个工具。例如,对于与客户服务相关的任务,能够自动对客户投诉或表扬进行分类是很重要的,这样组织就能够准确地将问题路由到适当的支持代理那里。

分类(Classification)是机器学习中的一项基本任务,其目标是将输入数据点分配给预定义的类别或类。它涉及对带有标签的数据进行模型训练,其中每个数据点都与已知类相关联。模型学习训练数据中的模式和关系,以便对新的、未见过的数据进行预测。分类模型的输出是一个离散的类标签,表示输入所属的预测类别。

优化算法(Optimization algorithms)是用于找到给定问题的最优解的数学过程。在机器学习和神经网络的背景下,这些算法用于最小化一个目标函数,通常由损失或成本函数表示。目标是通过迭代调整模型的参数,达到最小化目标函数的最佳值组合。在优化模型的世界中,有一些流行的技术,如“随机梯度下降”及其变体。这些方法通过根据模型的改善或恶化程度调整其内部设置,帮助模型变得更好。通过这样做,模型更接近于找到最佳解决方案,并在其任务上表现得更好。

向量(Vectors)是用于表示多维空间中的大小和方向的数学实体。在机器学习和数据分析的背景下,向量通常用于表示特征或数据点。向量的每个维度对应于一个特定的属性或变量,允许数据的高效存储和操作。向量可以使用数学运算(如加法、减法和点积)进行操作,从而实现相似性、距离和转换的计算。向量在各种算法和模型中起着基本作用,如聚类、分类和降维。

向量嵌入(Vector embeddings)帮助 LLMs 在相似的单词和短语上推广知识,即使它们在训练期间没有遇到。这使得模型能够有效地处理未出现在词汇表中的单词。预训练的嵌入可以用作各种自然语言处理任务的起点,实现转移学习,并提高在有限数据的下游任务上的性能。所有这些的一个实际应用是在医学影像学中,向量嵌入可以用来分析和比较器官或组织的图像。可以训练深度学习模型将脑部扫描映射到向量空间中,在那里类似的扫描聚集在一起。这使医生能够快速识别病人扫描中的模式和异常,从而早期诊断和治疗癌症或神经系统疾病。

词嵌入(Word embeddings)是将单词表示为高维向量的一种方式,使得相似的单词在该空间中靠近。词嵌入通常表示为张量,其中每个维度表示单词含义的不同方面。例如,一个词嵌入张量可能具有单词的同义词、反义词和词性的维度。

并行计算(Parallelization)指将计算任务分成较小的子任务,可以在多个计算资源上同时执行的技术。它利用并行处理的能力来加速整个计算和提高效率。在并行计算中,任务被分配给不同的处理器、线程或计算单元,允许它们同时运行。这种方法通过将工作负载分布到多个资源上来实现更快地完成任务。并行计算广泛应用于各个领域,包括机器学习、科学模拟和数据处理,以实现显著的性能提升和有效处理大规模计算。

正则化技术(Regularization techniques)是用来提高模型泛化性能的方法。这些技术在训练期间向损失函数添加惩罚项,防止模型过度依赖复杂或嘈杂的数据模式。正则化技术有助于控制模型复杂度,减少过拟合,并提高模型对未见过数据的泛化能力。

正则化技术的一个常见实际应用是在文本分类中,特别是处理不均衡数据集时。假设我们有一个电影评论数据集,其中大多数属于正面评价(比如“好电影”),少部分是负面评价(比如“烂电影”)。如果没有正则化,模型可能会对正面评价产生偏见,并无法准确分类负面评价。为了解决这种不平衡,我们可以在损失函数中添加正则化项,惩罚模型误分类负面评论。

收敛是指在相同数据集上训练多个模型直到它们产生相似的输出的过程。这样做是为了减少过拟合的风险并提高模型的泛化能力。收敛通常使用诸如验证损失或准确率等指标进行评估,并且一旦模型收敛到稳定解决方案,训练过程就会停止。

所有这些都带领我们来到:

自然语言处理(NLP)专注于计算机与人类语言之间的交互。它涉及开发算法和模型,使计算机能够以有意义的方式理解、解释和生成人类语言。NLP 包括诸如文本分类、情感分析、机器翻译、信息提取和问答等任务。它利用来自各种学科的技术,包括计算语言学、机器学习和深度学习,来处理和分析文本数据。

最后,到最后:

大型语言模型(LLM)是自然语言处理(NLP)中的一种工具,利用深度学习技术来理解和生成类似人类的文本。它分析给定文本语料库中的模式、上下文和语义,以学习语言的潜在结构。通过其理解和生成连贯且上下文相关的响应的能力,LLM 可用于各种任务,如聊天机器人、语言翻译、文本补全和摘要。通过捕捉语言的复杂性,LLM 允许机器直接与人类进行交流。

或者换句话说,它实现了生成式人工智能。

附录 B:安装 Python

如果需要手动执行此操作,请参考在 Windows、macOS 和 Linux 机器上安装 Python 和 Pip 的指南。

B.1 在 Windows 上安装 Python

要下载 Python 包,请转到官方 Python 网站。确保您下载的是最新版本(目前为止,是 Python 3.x)。根据您的系统架构(32 位或 64 位)选择适当的版本。大多数现代计算机都是 64 位,但您可以通过右键单击“This PC”(或“My Computer”)并选择“Properties”来确认。

下载安装程序后,运行它。勾选“Add Python x.x to PATH”的复选框。这将使得从命令提示符中更容易运行 Python 和 pip。然后点击“Install Now”。

您可以通过按下Win + R,键入cmd并按 Enter 来打开命令提示符来验证您的安装。要检查 Python 是否成功安装,请键入python --version并按 Enter。您应该看到显示的版本号。

pip 通常包含在 Python 的最新版本中。要检查 pip 是否已安装,请在命令提示符中键入pip --version并按 Enter。如果您看到版本信息,则已安装 pip;否则,您需要手动安装它。

要完成此操作,请从官方 Python 包管理机构网站下载“get-pip.py”脚本,并将脚本保存到计算机上的某个位置。打开命令提示符,并使用cd命令导航到您保存“get-pip.py”的目录。例如:

cd C:\Users\YourUsername\Downloads

然后运行此命令:

python get-pip.py

要验证您的 pip 安装,请在命令提示符中运行pip --version

使用安装了 Python 和 pip 的环境,可以使用命令pip install package-name来安装包。

B.2 在 macOS 上安装 Python

macOS 通常预装了 Python 的版本。要检查 Python 是否已安装,请打开终端(您可以在应用程序 > 实用工具文件夹中找到它),然后键入:

python3 --version

如果您看到版本号,则已安装 Python。如果没有,请按照下面的步骤安装。

Homebrew 是 macOS 的一个流行的软件包管理器,它使安装软件更加容易。如果您尚未安装 Homebrew,可以使用以下命令在终端中安装它:

/bin/bash -c "$(curl -fsSL \
  https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
Install Python 3:

如果您使用 Homebrew,可以通过在终端中运行以下命令来安装 Python 3:

brew install python

如果您不使用 Homebrew,可以从 Python 网站下载官方 Python 安装程序。

以下是您需要执行的步骤:

  • 下载最新版本的 Python 3.x

  • 运行您下载的安装程序包,并按照安装说明操作

  • 验证安装

安装完成后,您应该能够通过在终端中输入 python3 来访问 Python,并使用以下命令验证已安装的版本

python3 --version.

Python 3 通常预装了 pip。要验证 pip 是否已安装,请运行:

pip3 --version

如果您看到版本信息,则已准备就绪。如果没有,请手动安装 pip:

  • 下载“get-pip.py”脚本。

  • 打开终端并使用 cd 命令导航到保存了“get-pip.py”的目录。例如:cd ~/Downloads

  • 运行以下命令:sudo python3 get-pip.py

安装了 pip 后,您可以在终端中运行pip3 --version来检查其版本。

安装了 Python 和 pip 后,您可以开始使用 Python 并从 PyPI 安装软件包。要安装软件包,请使用命令pip3 install package-name

请记住,您可能需要在终端中使用python3pip3(而不是pythonpip)来确保您正在使用 Python 3 及其相关的 pip。

B.3 在 Linux 上安装 pip Python 包管理器

请注意,某些 Linux 发行版预先安装了 Python,因此最好在安装新版本之前先检查一下。

要做到这一点,请打开终端并键入:

python3 --version

如果您看到一个版本号,则已安装了 Python。如果没有,请按照以下步骤安装它。

在安装软件之前,最好先更新您的包管理器。对于使用 apt 的系统(Debian/Ubuntu),请使用:

sudo apt update

对于使用 dnf 的系统(Fedora),请使用:

sudo dnf update

要安装 Python 3,请使用包管理器。这意味着:sudo apt install python3sudo dnf install python3 - 取决于您的系统。包名称可能会根据您的发行版略有不同。

安装完成后,您应该能够通过在终端中输入 python3 来访问 Python 3,使用:

python3 --version.

Python 3 通常预先安装了 pip。要验证是否安装了 pip,请运行:

pip3 --version

如果您看到版本信息,那就万事俱备了。如果没有,则可以使用sudo apt install python3-pipsudo dnf install python3-pip手动安装 pip。同样,这些命令中的3部分在某些系统上可能是默认设置,因此您可能需要省略3部分。

安装了 pip 后,您可以通过在终端中运行pip3 --version来检查其版本。安装了 Python 和 pip 后,您可以开始使用 Python 并从 PyPI 安装软件包。要安装软件包,请使用command pip3 install package-name

附录 C:生成式 AI 资源

到目前为止,我相信你已经注意到 AI 领域的变化速度有多快了。大型厂商关于旗舰产品新功能的公告几乎每天都有。但也经常有关于新第三方应用程序的新闻,它们创新地利用现有平台,并以新颖、创造性的方式使用我们已经拥有的工具。

我曾经试图紧跟所有这些。但结果并不理想。

尽管如此,保持对尽可能多的内容至少有一个广泛的了解是很重要的。考虑到这一点,本附录包含了一些涵盖所有主要 AI 和 AI 相关工具类别的示例工具的链接。鉴于这个列表不会长时间保持更新,我还创建了一个 GitHub 仓库,在那里我计划定期更新本附录的内容,加入新的资源。

老实说,我的“定期”定义可能并不总是符合你的期望,所以请随时通过开启一个 git 问题或给我留言提供我可能忽略或故意忽视的任何类别或新兴工具。只需记住,这个列表并不意味着包含每一个 AI 工具。相反,这是一个我们可以不时回顾一下,确保我们没有错过任何重要新功能的地方。

C.1 通用 LLM 交互工具

  • OpenAI GPT Playground

  • LLaMa Chat

  • Stack Overflow AI

  • Anthropic(克劳德)

  • LangChain

  • 具有企业级安全性和隐私保护的 ChatGPT

  • 谷歌的 Gemini AI 模型(GPT-4 竞争对手)

  • GPT for Sheets 插件:在 Google Sheets 和 Docs 中使用 GPT 生成内容

C.2 AI 应用开发平台

  • Hugging Face

  • AWS 上的生成式 AI

  • Azure OpenAI Service

  • Google Cloud AI Platform

  • Google Colaboratory - Jupyter Notebook 工作流程的主机

  • 谷歌的项目 IDX - 基于浏览器的、由 AI 提供支持的用于构建全栈和多平台应用程序的开发环境

  • GPT-3.5 Turbo 微调

C.3 第三方工具

  • ChatPDF

  • Botpress - 用于构建基于 GPT 的客户支持聊天机器人的无代码工具

C.4 写作工具

  • Copy.ai

  • Ryttr

  • GrammarlyGo

  • Writesonic

C.5 图像生成

  • Midjourney

  • StyleGAN - 强大,但需要高端 NVIDIA GPU 等。

  • Canva AI - 将文本提示整合到你的 Canva 工作流程中

  • AI Comic Factory - 从文本提示生成漫画面板

  • Leonardo AI - 目前访问受限

  • 免费 AI 图像生成器

C.6 数据分析

  • OpenAI Codex

  • Datagran - AI 聊天数据科学家

C.7 投资与金融

  • Portfolio Pilot

  • 作曲家

C.8 语音转文本

  • Whisper(OpenAI)

  • otter.ai - 会议、讲座或对话的实时转录或笔记

C.9 文字到语音

  • 亚马逊波利

  • CereProc

  • WellSaid Labs

  • Microsoft Azure

  • IBM Watson

C.10 文字到音乐

  • Mubert

  • AIVA

  • 繁荣

  • 声音丰富

C.11 文字到视频

  • Gen-2 runway Research

C.12 文字到视频演示(包括动画和逼真的头像)

  • Synthesia.io - 质量出色但价格昂贵

  • elai

  • Fliki - 没有头像,但专注于博客到视频的工作流程

C.13 幻灯片生成

  • Gamma - 从文本生成文档、幻灯片和网页

此外:请查看与 Google 幻灯片的许多第三方集成。从 Google Play 站点搜索“AI 幻灯片制作器”

C.14 文字、音频和视频语言翻译

  • 无缝沟通翻译 - Meta 的语音翻译工具的免费演示,支持近 100 种输入和 35 种输出语言

  • SeamlessM4T - Meta 的多模态翻译工具的开发者版本

  • 将视频中的音频翻译为其他语言 - 包括更新的口型同步

C.15 领域特定

  • 哈维 - 法律意识的 AI 服务

  • 语音治疗 - 仍处于实验阶段!

posted @   绝不原创的飞龙  阅读(167)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· autohue.js:让你的图片和背景融为一体,绝了!
历史上的今天:
2022-05-02 材料学真的没前途吗?
2022-05-02 人工智能/数据科学比赛汇总 2019.4
点击右上角即可分享
微信分享提示