DLAI-Kaggle-和-Gemini-笔记-全-
DLAI Kaggle 和 Gemini 笔记(全)
001:基础模型与提示工程 🚀

概述
在本节课中,我们将要学习生成式人工智能的基础知识,特别是大型语言模型的工作原理以及如何通过提示工程来有效地使用它们。课程内容包括基础模型概述、提示工程技术、代码实践演示以及一个随堂测验。
课程介绍与问答环节
大家好,欢迎来到由Kaggle和Gemini团队赞助的生成式AI五天强化课程的第一天。
这个为期五天的虚拟课程旨在让你全面了解生成式AI及其在AI应用中的使用方法。今天,我们有多位出色的特邀演讲者,他们将讨论基础模型和提示工程。尽管今天早上的直播遇到了一些小问题,但我们已经将视频内容整理好,确保你能获得流畅的学习体验。课程内容包括课程概述、问答环节、代码实验的简要介绍以及本系列课程结束时的随堂测验。
这个为期五天的生成式AI课程将为你提供每日作业,形式包括白皮书和播客。这些资料解释了生成式AI模型、向量数据库、智能体等各种技术和工具如何协同工作的“是什么”和“怎么做”。配套的Colab笔记本旨在向你展示如何使用我们的生成式AI以及其他开源工具。我们还为你准备了一个很棒的Discord频道,供你讨论、集思广益,并与我们的特邀演讲者直接进行问答交流。我们希望你能借此机会深入我们创建的所有内容,并学习围绕生成式模型的一些基本且重要的前沿概念。
正如我提到的,这是一个为期五天的项目,从11月11日持续到11月15日。今天是第一天,我们将讨论所有关于基础模型和提示工程的内容。那么,事不宜迟,让我们开始第一天的问答环节。
大家好,欢迎各位。我们很高兴今天能和大家一起开始生成式AI强化课程的第一天。今天有很多内容要涵盖,我将直接进入主题,包括回答大家在Discord上提出的精彩问题、邀请一些令人兴奋的特邀演讲者谈论他们的工作、演示一些Colab笔记本和示例,最后进行一个随堂测验。今天能在这里见到大家,我们感到非常兴奋。大家在Discord上提出的精彩问题让我们备受鼓舞,看到每个人都如此热衷于学习更多关于大语言模型、多模态模型和生成式AI的知识,我感到非常激动。我叫Paige,将是本周的主持人,今天有很多同事和我一起,希望稍后我们能进行一些有趣的讨论。
这个为期五天的生成式AI强化课程结合了每日作业、我们一直在讨论的Discord主题以及这些现场问答环节。从11月11日到11月15日,我们将每天进行这些活动。课程内容涵盖从基础模型和提示工程到嵌入和向量数据库、AI智能体、领域特定模型,乃至用于长期维护这些模型系统的MLOps。今天的内容全部关于基础模型和提示工程,因此我们邀请了许多多年来以此为业、堪称专家的朋友,他们将在你阅读所有精彩资料、参与聊天主题和讨论时,帮助解答你的问题。考虑到时间,为了确保我们有充足的空间讨论大家的所有问题,这个问答环节将延续你在Discord上看到的所有讨论。我要感谢我们出色的生成式AI Discord版主Pollong、Mark、Eric、Iwin、Miles以及其他许多深入参与并帮助确保社区活跃的朋友们,无论是用表情符号还是文字感谢他们。我知道他们一直在各个时区忙碌工作,生成式AI的太阳永不落山。
那么,第一天,我们的专家主持小组包括:AI Studio的产品负责人Logan Kilpatrick、Lee Boonetra、Alexi Severin、Majid Amin Barakton、Daniel Mankoitz、Chuck和Anant。我很高兴今天能有大家在这里。例如,我们有从事人类反馈强化学习工作的专家,有致力于Gemini应用模型推理、使其性能高效的技术总监,还有来自我们CTO办公室的技术总监等等。接下来,我将开始向Logan提出第一个问题。Logan,很高兴见到你,你好吗?
我很好,很兴奋能听到大家的问题,同时也期待听到其他小组成员的问题。
非常棒。ML开发者团队最近发布了很多新功能,感觉我每天登录LinkedIn或Twitter(或者现在叫X)时,似乎都有新的产品发布。告诉我你最兴奋哪些功能,哪些已经发布或即将发布?
这是个好问题。我认为目前最引人注目的两个功能是:大约两周前,我们推出了“基于Google搜索的Grounding”功能,这非常令人兴奋。我想在接下来的五天里,这肯定会成为一个热门话题。大语言模型存在幻觉问题,而Grounding通过利用Google的搜索索引,将一些信息引入来“锚定”用户向LLM提出的问题,从而提供更可靠的答案。这非常有趣。如果你在Google上搜索“grounding with Google”,你会在开发者端和企业端找到一些相关链接。我对这个功能感到兴奋,很乐意多谈谈它。另一件事是,上周五我们推出了OpenAI兼容性功能,我也非常兴奋。对于已经在使用OpenAI SDK和库的开发者来说,现在只需更改大约三行代码,就可以尝试使用Gemini模型。我很高兴能为那些对使用Gemini感到兴奋的开发者减少障碍,希望我们能收到关于这次发布的很多积极反馈。
我个人对OpenAI API兼容性功能感到非常兴奋。将原本倾向于使用OpenAI API的笔记本转换为使用Gemini,并进行比较,变得非常直接。这绝对是两个令人兴奋的新功能,我鼓励大家去看看OpenAI兼容性功能以及AI Studio中的搜索Grounding功能。我认为特别酷的是,你甚至可以将搜索Grounding功能与我们的一些较小模型一起使用,比如Gemini 1.5 Flash和Gemini 1.5 8B。我一直很喜欢这两个模型用于我的项目,特别是那些需要代码执行或超快速推理的任务。请简单介绍一下这两个Flash系列模型,以及如何以非常小的成本实现如此多的功能?
是的,经过内部大量工作,我们推出了Flash 8B模型,这是目前存在的最小的Gemini托管模型,拥有80亿参数。它真正推动了“每美元计算智能”的边界。我想我们已经看到了一些相关的推文,Paige你和我都转发过。它的价格是每百万输入token 0.23美分,每百万输出token 1美分。只需几美分,你就能获得绝对惊人的智能量。我认为这些小模型之所以有趣,是因为很多AI的前沿用例实际上受到成本和token成本的限制。开发者实际上存在一种内在的抑制因素去构建某些功能,因为构建的AI功能越多,支付的成本就越高。我认为Flash 8B就是一个很好的例子,它试图突破这个边界,消除障碍,让开发者能够真正构建他们感兴趣的东西,而不必担心承担额外的成本。
太棒了。最后一个问题,然后我们将邀请更多人来讨论,特别是生成式AI的生产应用。DeepMind的多模态模型,我特别想到用于视频生成的Imagine和Veo,用于音乐生成的Lyria,它们解锁了一些非常有趣的新应用,尤其是与Gemini模型结合时。对于这种多模态输出场景,你最喜欢的应用是什么?你如何看待将这些模型与Gemini API结合使用?
这是个非常好的问题。我认为……文本作为模型的输出机制,开发者已经发现了许多有趣的应用,比如构建聊天应用、处理数据等等。但在多模态输出创作(包括图像、视频等)的实际生产用例方面,我们实际上还处于相当早期的阶段。感觉我们还没有普遍接触到这些模型,因此开发者还没有足够的时间来构建真正有趣的东西。我个人感到兴奋的是,利用这些模型“让文本活起来”。世界上有很多文本,而人类在很多情况下天生是视觉动物。我认为,如果可能的话,就像我们之前在NotebookLM中看到的那样,如果你能将大量书面内容以音频形式呈现,在某些情境下,体验实际上会好上10倍。我可以想象,将你拥有的海量文本文档库以视频形式呈现,而不仅仅是音频作品,这将是一个疯狂的未来世界。我认为,正是像Imagine和Veo这样的模型,才能使这个愿景得以实现。这将非常令人兴奋。
是的,我也很喜欢这个用例,关于如何通过视频、音频、图像为文本文档甚至GitHub代码库注入活力。到目前为止,我最喜欢的用例是制作书籍预告片:导入PDF书籍,自动将其分割成不同的提示,然后创建一个短视频来描述这本书。我非常喜欢,并且希望看到更多这方面的应用。非常感谢,这真是太棒了。我将提出下一个问题,这个问题是关于人类反馈强化学习的,我将请Alexi上台。Alexi,如果我没记错的话,你是Gemini应用RLHF的负责人,对吗?
正确。
太好了,谢谢。我真的很想了解更多关于Gemini应用如何使用RLHF来改进其响应的信息。这个过程是如何工作的?你们如何利用用户反馈来随时间改进模型或应用体验?
是的,这是一个非常大的话题,所以也许从高层次上简单说一下LLM是如何进行微调的会比较好。如今,对最先进的LLM进行后训练的事实标准方法是分两步进行:SFT和RLHF。SFT是监督微调,我们使用演示数据。通常,为了获得好的结果,这些数据需要质量极高,并且大多是由人类专家制作的,因此获取成本相当高。RLHF是一种强大的技术,用于使模型与人类偏好保持一致。可以理解为让响应更安全、更有帮助或更符合事实。它比SFT更复杂一些,但简而言之,我们使用一组输入提示,从我们试图微调的模型中生成响应,然后使用另一个称为奖励模型的模型来分析哪些响应是好的,哪些是坏的,并奖励好的响应。这个奖励模型可以根据不同类型的偏好数据进行微调,通常是人类偏好数据,这就是“人类反馈强化学习”中“人类反馈”的含义。这些数据可以来自人类专家评分员,就像SFT数据一样,也可以来自用户反馈。因此,用户与Gemini聊天机器人(在桌面或移动设备上)互动时给出的“踩”的反馈,实际上会随着时间的推移带来更好的模型性能,你是这个意思吗?


是的,它帮助我们生产出被用户认为更有帮助的模型。这可以说是使我们的模型与人类偏好保持一致的主要机制之一。


太棒了,听到这个真的很令人兴奋。我知道大家通过阅读课程资料,一直在学习关于RLHF和利用人类反馈改进模型的知识。下一个问题来自我们Google的一位同事。我一直想知道,既然大语言模型从海量数据源中学习,那么它们仅仅是内插其训练数据,还是能够超越训练数据,做出新的发现?Amean,你来回答这个问题怎么样?另外,欢迎回来。我记得你之前在Google DeepMind工作,现在是不是创办了自己的公司?
不,实际上我以前在DeepMind工作,但现在为一家名为Quadrupture的新公司工作。是的,我实际上换了行业。
是在金融行业和量化研究领域吗?
是的,量化研究。如今,你基本上可以将AI应用于任何领域,金融也是一个非常非常有趣的应用领域。
非常酷。那么,告诉我关于模型做出新发现的事情,你认为它们能做到吗?还是它们只是下一个token预测器?
是的,这是一个哲学性的有趣问题,但我相信这个问题的答案是肯定的,模型绝对可以超越其训练数据。能让它们做到这一点的技术是可用的搜索。我们看到的第一个例子是我们在2023年底在DeepMind做的名为“FunSearch”的工作。在FunSearch中,我们基本上使用LLM在Python编程语言的空间中搜索,比如说,一个非常困难的问题,比如一个NP难问题。它的工作方式是,我们将一个大语言模型与一个高效的评估器配对,该评估器会为每个解决方案提供反馈,说明它有多好。然后,通过一个迭代算法,它成功地发现了计算机科学和数学中一些未解决问题的新解决方案。核心思想是,LLM会为特定问题提出解决方案(比如一段代码),然后评估器会给出一些分数,说明该解决方案有多好。接着,一个进化算法会选择LLM迄今为止发现的最佳解决方案,呈现给LLM,并要求它进行改进。在某种程度上,它是在进行一种自动化的“少样本提示”:我们向它展示好的解决方案,要求它改进;LLM提出新的东西,我们再次展示并要求改进。这个过程重复了大约十万次,然后最初可能只是“return 0”的代码会演变成非常有趣和复杂的东西,实际上会为一些未解决问题带来新的解决方案。由于这些解决方案以前从未被人类发现过,这在一定程度上表明LLM发现了一些训练数据中没有的新东西。这个概念在AI历史上已经被研究了很多,最近在现代LLM中变得非常流行,它被称为“测试时计算”或“推理缩放”等其他术语。它的工作方式是,当你向LLM提出一个问题时,你允许LLM进行思考,LLM会生成多种场景和推理链,然后它有一个机制来理解哪一个更有可能,接着它会迭代重复这个过程。通过在推理时模拟不同的可能性,它基本上是在进行搜索,通过这种搜索,它能够发现新的东西,因为它可以引导自己的知识。
非常酷。这让我想到,我们才刚刚开始触及大语言模型能够完成或实现的事情。对接下来的几年感到非常非常兴奋。
确实,就像Richard Sutton在《苦涩的教训》中总结得最好:我们有两种可以无限扩展的技术。第一种是学习,这已经被海量数据和早期几代模型所破解。第二种技术是搜索。我认为我们现在正处于人们开始扩展搜索、在推理时投入计算资源的时刻,这将解锁大量新的能力,特别是推理能力,这将非常令人兴奋。
非常感谢。我认为这也很好地引出了我们的下一个问题,这个问题来自我们的Discord应用,我想这是给Majid的,他是Gemini应用的推理负责人。
太好了。这个问题实际上是关于:大语言模型可以用来训练小模型吗?我们能否从大模型中获取一些知识,并用它来改进小模型?比如我们嵌入在Google许多产品界面中的那些模型。你对这个问题有什么看法?
当然可以,绝对可以。这是一个非常好的问题。这种技术被称为“蒸馏”,它是一种非常流行的推理优化技术。主要思想正如你所说,你会从一个可能因服务成本太高但质量非常好的大模型中获取知识,然后将这些知识“蒸馏”到一个小模型中。这个小模型可以保留大模型的大部分知识和质量,但其大小适合部署服务。是的,正如我所说,这种技术叫做蒸馏。在蒸馏方面有很多积极的研究和实践。有多种方法可以将知识从大模型蒸馏到小模型。其中一种叫做“数据蒸馏”,你使用大模型为小模型生成大量合成训练数据,然后直接用这些数据训练小模型。另一种方法更精细,我们试图使小LLM的token分布更接近大模型,这就是我们所说的“知识蒸馏”。我们在与这门课程一起发布的白皮书中也讨论了这些类型。我要提到的第三种类型是“策略蒸馏”,这又回到了你之前和Alexi关于RLHF的讨论。我们可以使用相同的强化学习框架,但在这种情况下,我们使用教师模型(即大模型)来有效地为小模型的输出评分,并使用这些分数来训练并使小模型与大模型对齐。所以,蒸馏有多种类型,根据用例和需求,它们都在实践中使用。实际上,我认为在Demo的课程中,将会展示其中一个案例。我认为Geco论文的作者之一将会展示如何使用LLM来生成更好的嵌入模型。你会使用LLM来为段落生成查询,然后在那些查询上训练嵌入模型,你会得到性能好得多的嵌入模型。我记得对于相同大小的嵌入模型,使用蒸馏后性能提升了大约7倍。我认为那篇论文的作者Jhu Lee明天会在向量和嵌入课程中出现。
非常酷。我认为你刚才讨论的内容对我们第一个随堂测验的参与者也会非常有帮助,测验将在本小时结束时进行。所以希望大家都在认真听讲,内容是关于使用蒸馏改进小模型以及改进模型的各种机制。非常感谢。下一个问题,我相信是给你的,Anant。评估大模型有哪些方法?我们有这些创建出来的模型,有些是大版本,有些是小版本,你如何为特定任务选择应该使用哪一个?
好问题,Paige。是的,感谢社区提出这个问题。提醒一下,我们将在第5天更详细地介绍大语言模型的评估,甚至会有来自DeepMind的人展示他们的相关研究。那么,直接进入问题。评估大语言模型并非易事,因为它取决于评估的任务以及你所说的“评估”是什么意思。当然,有经典的自然语言指标,比如BLEU、ROUGE分数,你可以使用这些。这是一种方法,你有一个参考,比如一个黄金标准或真实答案,你可以看到LLM生成了什么,然后将生成的响应与人工策划的真实答案进行比较,看看它在多大程度上匹配。这是经典的方法。然而,考虑到LLMs所执行任务的复杂性,并不总是有这样的真实答案。即使在某些任务上有,例如摘要,写摘要的方式有多种,所有这些方式可能都是有效的,但真实答案可能只是其中一种情况。因此,这也不是评估此类情况的有效方法。所以,我们还可以做的是使用LLM作为评估器,让一个LLM评估另一个LLM生成的响应有多好。你可以以逐点方式或成对方式进行评估。逐点方式就是,给出响应和提示,让LLM在1到5的范围内对这个响应进行评分,并说明原因。成对方式则是比较两个响应,并说明对于这个提示,哪一个响应更好,以及为什么。我们实际上已经提供了这种功能,你可以立即使用。在我们的Vertex AI套件中,通过Vertex AI生成式AI评估服务,你可以尝试基于LLM的评估器评估,也可以尝试使用参考点的计算指标,如ROUGE和BLEU。你今天就可以试试。



当然。我也看到一些相当令人印象深刻的开源库在进行自动评分和评估。我对Promptfoo感到非常满意,它也支持Gemini API和其他一些产品。很高兴知道既有Vertex AI选项,也有开源库来进行这些评估,无论是人工评分还是自动评估。非常棒。
下一个问题来自red365:有人能解释一下为什么在第一个思维链提示中,它也在逐步解释,而不是直接回答吗?Lee,我看到你在点头,你想回答这个问题吗?
是的,我可以稍微谈谈这个,因为我在写的白皮书中也有类似的例子。首先,对于电话会议上的各位,思维链提示是一种提示技术,你试图让LLM生成中间步骤。通常,你可以通过提供如何进行推理的示例来实现这一点。你提供的示例不是直接放在Colab里的,而是尝试想出另一个具有类似推理技巧的示例。然后你看它是否会展示这些步骤。这个具体问题,感谢大家参与Colab,我看到有人说,嘿,因为在问题中,你必须先输入一个我们不使用提示的示例,然后之后我们会在示例中展示一个使用思维链提示的示例,这样你就能看到区别。但问题是,有些人在第一个示例中已经解决了中间步骤,而它本不应该。如今模型变得如此出色,我们很难再展示这些缺陷了。但你可能能够通过重新提交问题来复现它,或者通过更改top-k、top-p或温度来获得输出中更多的变化。我也在聊天中看到有人说,切换到旧的Gemini模型可以展示如何展示这个缺陷,然后你可以用思维链来修复它。这很酷。
非常酷。我喜欢对思维链本身的详细描述,以及你如何看到它在模型输出中的表现。这非常非常酷。我个人发现,特别是对于编码任务,思维链提示或要求模型解释其推理过程非常强大,通常能带来显著更好的结果。这非常酷。
下一个问题来自Uung Hue,大概是这样的:微调模型中的枚举模式是否设计为返回枚举值?Daniel,顺便说一句,很高兴见到你,欢迎回来。电话会议上的各位,Daniel和我以前在DeepMind一起工作过,现在我相信你已经创办了自己的公司,或者你的公司还处于保密阶段,所以我不会剧透,但很高兴你能来。你想回答这个问题吗?

当然可以。很高兴见到你,老伙计。是的,谢谢邀请我。关于枚举模式,我认为这在很大程度上取决于你想做什么。如果你在微调你的模型,并且希望它输出枚举值,这在很大程度上取决于你如何构建你的数据。例如
002:嵌入与向量数据库

在本节课中,我们将要学习嵌入和向量数据库的核心概念。我们将了解什么是嵌入,它们如何将复杂数据转化为数值向量,以及向量数据库如何高效地存储和检索这些向量。课程内容包括概念讲解、代码实践、专家问答和随堂测验。

大家好,欢迎回到生成式AI强化课程的第二天。今天我们将深入探讨嵌入和向量数据库。我们很高兴看到昨天围绕基础模型和提示工程技术展开的精彩讨论。今天,我们安排了一系列精彩的环节,包括代码实验、与谷歌工具构建者的问答,以及课程结束时的随堂测验,请大家务必集中注意力。


这个为期五天的生成式AI强化课程由Kaggle和Gemini团队赞助,还包含一个Discord频道,用于讨论直播内容、与嘉宾和社区互动以及进行问答。请务必登录并提问,您的问题可能会被选中在未来的课程中解答。


在学习作业和探索精彩内容时,请务必查看所有可以在线运行的代码实验,它们以Kaggle内核的形式提供,同时也可以阅读我们分享的一些白皮书。今天是课程的第二天,希望你已经阅读了关于嵌入和向量数据库的白皮书,探索了一些代码实验。接下来,我们将向你展示其中的一些内容,你还会学习嵌入和向量数据库的概念基础,以及如何利用它们将专业数据和令人兴奋的生产技术引入你的大型语言模型应用。
现在,我将把时间交给AO,他将带领我们回顾第二天的精彩课程内容和代码实验。
嵌入与向量数据库概述
在开始代码实验之前,我想先带大家回顾一下你们在白皮书(可能还有播客)中阅读过的内容。
在白皮书中,我们首先探讨了什么是嵌入以及不同类型的嵌入。在机器学习领域,我们经常需要处理各种不同的数据类型:文本、图像、音频等等。许多应用都可以受益于将这些不同数据类型的对象表示为紧凑、固定的数值形式,这种形式能够捕捉它们之间的语义含义和关系。这本质上就是嵌入。
嵌入 是将复杂数据转化为语义数值向量的过程,这些向量可以用于下游任务。



在白皮书中,我们还研究了不同类型的嵌入:文本嵌入、图像嵌入、多模态嵌入,以及结构化数据和图嵌入。接着,我们深入探讨了可用于创建、训练和使用这些嵌入的各种算法和方法,以及它们各自的权衡。
一旦我们有了嵌入,为了将其用于下游应用,就需要一种高效的方法来搜索数十万、数百万甚至数十亿的嵌入向量。给定一个查询,我们需要找到语义上最相似的嵌入,但要以一种非常省时且经济高效的方式来完成。这就是近似最近邻算法 发挥作用的地方。
我们研究了如何使用各种度量标准来比较嵌入向量,以判断相似性。例如,在上下文意义上,“国王”与“王后”的相似度应该高于“国王”与“汽车”的相似度。我们应该能够通过比较和计算来发现这一点。

为了大规模地进行这种比较,近似最近邻算法(如分层可导航小世界 和 SCaNN)就派上了用场。

之后,我们研究了可以实现这些大规模近似最近邻算法的各种向量存储和向量数据库,以及生产环境中的各种运维考量和管理方法。
最后,我们通过查看嵌入的一些应用来结束白皮书。例如,使用各种对象的预训练嵌入表示,并在其之上添加一个小的层,以利用丰富的表示,而不是从头开始训练,并将其用于分类任务。我们还研究了嵌入如何用于推荐问题、排序问题等许多其他场景。


说到这里,这正好是我们代码实验的一个绝佳过渡,接下来我将带大家浏览其中的一些内容。





代码实验一:使用RAG和ChromaDB构建文档问答系统

让我们开始吧。第二天的第一个代码实验是使用RAG和ChromaDB构建一个文档问答系统。
那么,什么是RAG?检索增强生成 包含三个部分,它解决了LLM的一个非常重要的限制:LLM通常受限于其训练时的知识,并且无法访问最新的动态信息,除非你通过类似这样的系统提供。即使它们能够访问知识,在提示词本身中提供最相关和最新的信息也有助于提高性能并减少幻觉。
RAG系统有三个阶段:
- 嵌入和索引:将数据库中的各种文档以及查询进行嵌入。
- 检索阶段:获取查询嵌入,查看数据库中的所有文档,找出哪些是最相似、最相关的文档,以便LLM能够访问并给出最合适的答案。
- 生成部分:将最相关的上下文和文档作为提示词的一部分,生成答案。
在这个特定的代码实验中,我们构建了一个简单的玩具RAG系统。让我们看看是如何实现的。
我们像之前的代码实验一样安装了必要的库,并从Kaggle Secrets中检索了API密钥以调用Gemini API。

然后我们探索了各种可用的模型,这里我们查看了可用的嵌入模型,例如我们将用于RAG系统的文本嵌入模型。
接着,我们创建了一个包含三个文档的小型玩具数据,作为本代码实验的数据库。
之后,我们创建了一个函数,使用嵌入API来嵌入文档。这里我们使用的是text-embedding-004嵌入API,我们定义了这个函数,可以调用它来嵌入给定的文档。



一旦定义了数据集和嵌入函数,我们就初始化ChromaDB,并使用这个函数添加文档。由于我们引用了上面定义的嵌入函数,它会自动嵌入文档。因此,它是在使用嵌入函数确保索引文档的嵌入版本,而不是原始文档。
我们确认了文档确实被添加到了向量数据库中。然后,我们测试向量数据库的语义搜索是否真的有效:我们给出一个查询,创建数据库,并找到最相似的结果。根据我们提供的三个示例文档的上下文,这似乎是正确的。
然后,我们使用检索到的结果作为LLM的上下文。在这一部分,我们使用检索到的示例文档扩展了提示词,并用它来生成答案。
恭喜!如果你进行到这里并理解了,那么你已经构建了一个检索增强生成应用。
代码实验二:使用嵌入理解文档相似性
现在来看第二天的第二个代码实验。这里我们将看到如何使用嵌入来理解各种文档之间的相似性。在这个例子中,我们将专门处理文本嵌入,但你也可以使用多模态嵌入。
类似的启动步骤:从Kaggle Secrets检索API密钥并初始化Gemini。
我们也探索了可用于嵌入的模型。
这里是帮助你理解的重要部分:我们定义了各种文本文档样本,我们希望相互比较,找出每个文档在语义(意义)上与列表中其他文档的相似程度。我们进行了语义相似性计算,并绘制了从每个文档到其他所有文档的热图。
在这个热图中,你可以看到一些非常有趣的现象:较浅的色调表示非常高的语义相似性,较深的色调表示较低的语义相似性。你可以看到句子“The quick brown fox jumps over the lazy dog”与自身最相似,但与完全随机的文档(如“Lompsson”等)最不相似。这很合理。
如果你查看具体的相似性分数,文档“The quick brown fox jumps over the lazy dog”当然与自身最相似,因为是完全相同的句子。但它第二相似的是同一个文档的轻微拼写错误版本,因为含义基本保持不变,只是有一个小拼写错误。你可以看到,它第三相似的文档也暗示了相同的含义,依此类推。这基本上也是人类会给出的排名,通过嵌入这些文档,语义相似性被捕捉得非常好。
你可以将此用于各种目的,例如聚类、排序、检索系统等。

代码实验三:使用嵌入作为下游模型的丰富表示
现在来看第三个代码实验。这里展示了嵌入的一个略有不同的用例。前两个讨论了利用文档语义相似性进行检索,这个则讨论了如何将嵌入用作丰富的表示,以引导你的下游模型,并利用这种丰富表示作为信息源,这样你就不需要大量数据或非常复杂的模型,并且已经可以利用嵌入中的信息。
在这个代码实验中,我们将从使用预训练的嵌入开始,这些嵌入可以帮助在顶部添加一个小的Keras模型来对新闻组帖子进行分类。这个Keras模型不会从头开始基于原始文本数据进行训练,而是将这些嵌入作为输入源,并在顶部添加几层。这可以极大地提高数据效率,并学习如何将新闻组帖子分类到各个类别。
我们像往常一样开始,初始化并检索API密钥,用它初始化Gemini。
然后我们查看新闻组文本数据,其中包含许多跨越多个主题的新闻组帖子。我们的目标是创建一个模型,该模型可以获取新闻组帖子的文本内容并将其分类到其中一个主题。


在这个单元格中,我们对新闻组帖子进行了一些预处理以进行清理。
然后,我们对帖子进行了训练集和测试集的划分。我们希望根据新闻组帖子和现有的类别标签进行训练,然后学习如何预测新的、类别标签未知的新闻组帖子的类别标签,并查看其在测试集上的表现。
这是所有的预处理步骤。接下来是最重要的部分:创建嵌入并将其用于下游模型。因为我们将执行分类任务,所以我们将使用嵌入的分类任务类别。根据你正在执行的任务,可以使用各种不同的类别。然后,我们定义了创建嵌入的函数,并基于训练和测试数据集创建了嵌入。

在这一部分,我们添加了几个密集的Keras层(使用Keras框架的密集层)。我们以嵌入作为输入,将其传递过几层,然后模型学习如何将其分类到各自对应的新闻组目标类别。
请记住,这里我们不是从头开始学习,而是将嵌入作为输入,因此模型不需要那么多数据,也不需要那么深的深度和复杂度。
通过这样做,我们可以看到验证准确率在仅仅7个周期内就快速提高,即使数据有限,它也能达到相当好的准确率。因为我们是从嵌入表示开始的,而不是原始文本。这在你数据有限时尤其有帮助。
希望这很清楚。谢谢,现在交还给Paige。
专家问答环节
太棒了,非常感谢你详细讲解这些精彩的笔记本。也感谢Mark McDonald创建并提供了它们,让学生们能够动手并开始理解嵌入和向量数据库的工作原理。同样感谢Chroma和Keras背后的开源团队,很高兴看到这些工具与课程内容一起使用。
现在回到我们的幻灯片,看起来是时候开始我们的问答环节了。这个问答环节由你们所有人提供,你们在Discord中提出的所有精彩问题将被用来为我们的问答环节创建问题。我还要感谢我们的生成式AI课程主持人Polong、Ca、Mark、Eric、Erwin和Miles,他们一直在Discord上实时回答你们的问题,并帮助人们解决一些作业中可能遇到的挑战。请为我们所有优秀的课程主持人热烈鼓掌。
热烈欢迎我们第二天的所有专家主持人,他们来自DeepMind以及我们的Google Cloud AI团队:Oid、Allan、Shaochi、Genhook、Yan、FTar和Anant。非常感谢你们今天抽出时间回答学生们的问题。
现在,我将开始我们的第一个问题。提醒一下,如果你希望你的问题得到解答,请确保在每天学习课程作业时将它们添加到Discord中。
问题1:首先,请Alan和Janon介绍一下向量数据库和嵌入,它们是什么,为什么有用?
Janon: 当然,我先介绍一下嵌入,然后交给Alan来谈向量数据库。
嵌入是数值向量。我们使用这些嵌入模型,它们是机器学习模型,可以将现实世界的对象(如文本、图像和视频)转换为嵌入。这些模型经过训练,使得嵌入的几何距离或相似性能够反映它们所代表对象的真实世界相似性。
嵌入模型可用于推荐系统、语义搜索、分类、RAG等许多应用。
Google的Vertex AI平台提供两类预训练的嵌入模型:文本嵌入模型和多模态嵌入模型。文本嵌入模型允许你将纯文本转换为嵌入,而多模态模型则适用于图像、音频和视频输入,以及文本输入。
要使用这些模型,你只需在Vertex AI或GCP项目中启用,并向Vertex端点发送请求。我们还支持使用你自己的数据来定制这些模型。
向量数据库是专门管理这些嵌入向量的存储解决方案。现在我把时间交给Alan来详细谈谈向量数据库。
Alan: 谢谢Yan。我是Alan,来自Google Cloud数据库团队,负责AlloyDB语义搜索。既然我们知道向量嵌入捕捉了非结构化数据的语义含义,那么向量搜索就是这样一个操作:给定一组存储的嵌入和一个查询嵌入,找到与该查询最接近的邻居,即最相似的项。
向量搜索可以通过计算查询与每个存储嵌入之间的距离来完成,这被称为精确最近邻搜索。但是想象一下,如果有十亿个存储向量需要计算距离,这个操作会有多慢。因此,向量数据库通过近似最近邻搜索来加速向量搜索,它在进行数量级更少的工作的同时,提供高度准确但近似的答案。
业界有多种近似最近邻算法,它们通常分为两大类:基于图的(最流行的是HNSW)和基于树的。一个先进的基于树的算法是Google的SCaNN算法。它基于Google超过12年的研究,在Google内部大规模用于Google搜索、YouTube、广告、照片等产品。我们已经将SCaNN算法原生集成到多个Google Cloud产品中,包括AlloyDB、Cloud Spanner、托管MySQL、BigQuery和Vertex Vector Search。
Paige: 太棒了,听起来嵌入和向量数据库是理解某些数据彼此相似程度的快速方法。我们通过Google Cloud以及Gemini开发者API提供了许多不同的嵌入托管服务选项,同时你也可以使用像Chroma这样的开源工具和其他向量数据库来完成工作并存储为项目创建的所有嵌入。谢谢你们。
问题2:说到开源向量数据库,使用开源向量数据库与使用专有数据库(比如刚刚提到的Google Cloud上的一些托管服务)之间有哪些权衡?Oit,你想回答这个问题吗?
Oit: 是的,谢谢。大家好,我是Oit,来自Google Cloud的BigQuery团队,负责领导AIML和搜索领域。
这是一个很好的问题。我认为权衡与其他技术领域类似。更具体地说,开源向量数据库可能在成本、灵活性、可定制性、社区支持以及可能避免供应商锁定等方面更具优势。
然而,这通常需要与更高的维护成本、更高的管理成本和复杂性,以及未来潜在的碎片化和有限的支持选项进行平衡。
对于专有向量数据库,情况基本上相反。它们通常在易用性(作为更托管的服务)、支持、更高级的功能和稳定性方面具有优势。但缺点可能是成本、潜在的供应商锁定(在某些情况下)以及有限的自定义灵活性和透明度。
话虽如此,我还想提请大家注意,各种通用数据库、数据分析和数据仓库平台中正在增加的强大向量搜索和索引功能。正如Alan提到的,这些功能是作为一等公民添加的。顺便说一下,这涵盖了开源和专有领域。例如,你可以想想Postgres的PG向量扩展;在Google Cloud中,对于数据库和数据仓库,我们有AlloyDB、Spanner和BigQuery,它们都添加了非常强大的一等公民功能。
现在,考虑这个选项的优势在于,它有助于避免跨两个数据库的数据重复。你只需一个数据库作为单一事实来源,并且可以继续受益于数十年来构建到这些通用数据库和数据仓库中的高度先进功能。本质上,你将其用作单一事实来源,并使用不断快速增长的附加AI和向量功能。这也是我想作为这个问题答案的一部分提出的另一个选项。



Paige: 这太棒了,听到用户不必纠结是使用向量数据库还是更传统的数据库,这些功能正在两者之间交叉融合,这样你就不必进行数据复制,也不必理解应该使用哪种工具或技术,你只需在像Postgres这样大多数人已经有使用经验的东西中采用这些功能。非常酷,谢谢,很高兴听到这些。

问题3:下一个问题给TeChar:你认为像Gemini更长的上下文窗口(现在高达200万个令牌)和Google最近发布的搜索增强这样的新功能和能力,会减少对向量数据库的需求吗?还是这些功能和工具是互补的?

TeChar: 谢谢Paige。我是Ehaer,来自Google DeepMind。谢谢这个好问题。我先解释一下问题:提到了两项新技术,一是像Gemini这样的语言模型可以支持越来越多的令牌作为输入的长上下文窗口;另一项技术是搜索增强,我们最近发布了进行网络搜索并基于此验证答案正确性的能力。
首先谈谈更长的上下文窗口。当然,能够扩展到更长的上下文非常令人兴奋,但我们还没有准备好真正大规模地这样做,原因有几个:首先,我们目前支持几百万个令牌,但大多数真实的数据库或语料库要大得多,我们经常需要数十亿或数万亿个令牌。其次,在大量令牌上运行完整的LLM计算成本非常高,而正如Janan和Alan解释的,向量数据库极其高效,可以快速从数十亿项中检索。最后,我们发现,当我们在上下文中放入越来越多不相关的内容时,LLM的推理能力开始下降。因此,通常更有用的是先使用向量数据库检索最相关的文档或内容,然后对实际上与用户问题相关的内容进行推理。
这样看来,向量数据库实际上是新的长上下文语言模型能力的一个非常令人兴奋的补充技术,因为现在初始检索阶段不必极其精确,相反,我们可以专注于召回,获取大量相关文档放入上下文,然后LLM可以在这个大量上下文上进行推理。

Paige: 我很快想说,我非常喜欢你刚刚描述的模式:能够使用向量数据库和检索来确定哪些是最有效的信息,放入上下文窗口以帮助支持你的输出。我认为这一点迄今为止尚未得到充分探索,我很高兴你指出来。

TeChar: 我非常兴奋,这也帮助我们以不同的方式思考。过去我们上下文非常有限,所以我们会过分关注检索的精确度。而现在,我们可以更侧重于召回,因为我们可以支持稍多的上下文令牌,然后撒一张更大的网,获取所有相关内容,然后在其上进行推理。
问题的另一部分是关于搜索增强。我简要提一下,搜索增强使我们能够基于网络上的所有公共信息进行增强。但通常,我们希望对我们私有信息(如个人数据或公司专有的私有语料库)进行搜索或增强。对于这些,我们仍然需要向量数据库,因为公共搜索无法访问那些私有数据。


Paige: 是的,当然。我知道Google Cloud实现了一个功能,不仅仅是搜索增强,还可以基于可能托管在GCS中的任意数据进行增强。所以我认为你是对的,两者都有其位置:检索以获取最相关的信息,以及搜索网络以找到最新信息的能力。

问题4:下一个问题,向量数据库的基本挑战和机遇是什么?Alan,你想回答这个吗?

Alan: 当然,谢谢Paige。从在操作数据库内原生构建向量搜索索引的角度来看,对于操作数据库客户来说,这是一个记录系统,他们期望具有事务语义、强一致性、快速事务操作以及跨越内存和磁盘的数据。
我们一直在研究的一个有趣挑战是如何实现与专业向量数据库系统相同的性能,而这些系统没有相同的约束。作为一个创新例子,AlloyDB团队已经实现了底层缓冲区页面格式,以利用SCaNN的低级优化。
我看到的适用于向量数据库的其他机会领域在于,当向量搜索只是应用逻辑的一部分时,提高其可用性和性能。例如,带过滤的向量搜索是一个众所周知的挑战,根据过滤条件和用户意图,进行后过滤或预过滤操作可能更高效。用户意图很明确:返回给我通过过滤条件的最接近的邻居。现在很多系统需要用户指定是在向量搜索之后应用过滤器还是反之,但向量搜索数据库应该能够自动判断出哪种过滤操作能带来最佳性能,而无需用户指定。这延伸到与其他应用逻辑(如连接、聚合和文本搜索)的结合。
Paige: 我喜欢你刚才提到的,将这些AI功能引入传统数据库,并改善开发者的使用体验。我认为这将为人们带来更多能力,而不必让他们学习使用新的工具或技术。我真的很期待看到大家构建什么,以及GCP产品和开源数据库中即将出现的新改进。非常酷,谢谢你的精彩回答。



**问题5:下一个问题。我们讨论了很多当一切顺利时的情况,当我们能够找到
003:生成式AI智能体 🧠

在本节课中,我们将要学习生成式AI智能体的核心概念、构成组件以及如何通过实际代码实验来构建它们。我们将回顾前两天的知识,并深入探讨智能体如何利用工具与外部世界交互。



课程概述
欢迎回到生成式AI强化课程的第三天。在前两天,我们讨论了基础模型、提示工程、嵌入和向量数据库。今天,我们将通过一些非常有趣的代码实验,引导您创建自己的智能体,并与来自Google的专家进行问答环节。
本课程为期五天,由Google和Kaggle赞助,旨在教授构建模型、与模型交互以及将AI集成到应用程序中的所有工具。您将收到以白皮书和播客形式发布的每日作业,以及配套的代码实验。您可以在Kaggle内核中测试这些实验,也可以导出笔记本在Colab中按需运行。
今天,我们将重点学习生成式AI智能体。希望您已经阅读了所有白皮书,在我们的Discord频道上与大家互动,并收听了相关播客。接下来,我们将详细讲解代码实验,帮助您掌握核心编程概念。我们衷心希望在本课程结束时,您能够构建自己的AI智能体,并用它们来完成有趣的任务。
现在,让我们开始课程回顾和生成式AI智能体的代码实验讲解。



智能体基础与白皮书回顾

在开始代码实验之前,我们先回顾一下白皮书的核心内容,为理解智能体打下基础。


上一节我们介绍了嵌入和向量数据库,本节中我们来看看如何利用这些技术以及大语言模型来构建AI智能体。

白皮书的第一部分探讨了构成AI智能体(特别是生成式AI智能体)的基础组件。这些组件包括:
- 模型:通常是大型语言模型,作为智能体的“大脑”。
- 工具:智能体与外部世界交互的接口。
- 编排层:管理智能体内部推理和规划过程的系统。
这些元素相互作用,使得智能体能够理解世界、做出决策并执行行动,从而超越了独立LLM的局限性。



白皮书的第二部分深入探讨了智能体可以用来与外部世界交互并访问其初始训练数据之外信息的工具。我们讨论的工具主要分为三类:
- 扩展:连接智能体与外部API的桥梁,便于无缝执行API调用。
- 函数:使开发人员能够对数据流和系统执行进行细粒度控制的工具,支持客户端处理和数据处理。
- 数据存储:为智能体提供对结构化或非结构化数据的访问,支持数据驱动应用和检索增强生成等下游任务。




在了解了各种工具之后,白皮书接下来探讨了如何使用有针对性的学习方法来增强智能体的模型性能。这些方法包括:
- 上下文学习
- 基于检索的上下文学习
- 微调


这些方法旨在增强智能体选择正确工具并使用这些工具为手头任务生成最佳输出的能力,使其具备在现实场景中脱颖而出所需的特定知识和适应性。


最后,白皮书总结了如何使用LangGraph和Google的Vertex AI平台构建智能体应用。这些平台极大地简化了生产级智能体应用的开发和部署,允许开发人员以迭代方式改进应用,并提供了管理基础设施部署和维护复杂性的服务。


代码实验一:使用Gemini API进行函数调用 🤖




现在,让我们进入第一个代码实验。本节我们将学习如何利用Gemini的自动函数调用来构建一个与数据库对话的聊天界面。




这个实验将展示如何通过函数调用,让LLM学会使用我们定义的工具来查询数据库。请注意,这是一个演示和学习用的示例,使用了本地的SQLite内存数据库。在实际生产级应用中,您需要使用不同的数据库,并添加安全性和其他约束。


实验设置与数据库创建


首先,我们像往常一样安装必要的库,通过Kaggle Secrets检索Google AI Studio API密钥,并使用该API密钥初始化Gemini API。



然后,我们创建一个本地的SQLite数据库,并填充一些合成数据,以便进行学习和实验。



以下是创建的合成数据表结构:
- 产品表:包含
产品ID、产品名称和价格。 - 员工表:包含
员工ID、名字和姓氏。 - 订单表:包含
订单ID、客户姓名、员工ID和产品ID,记录客户通过特定员工订购了何种产品。


我们向这些表中添加了示例数据,模拟了一个简单的订单系统。


定义数据库工具函数

现在,我们有了一个填充了合成信息的SQLite数据库。接下来,我们将定义一些数据库函数,这些函数将作为工具暴露给LLM,使其能够使用这些工具与数据库交互。
为了让LLM理解调用哪些工具、如何将用户的自然语言查询转换为函数参数,我们需要清晰地定义每个参数的含义以及如何处理输出。LLM需要能够从用户提示中提取参数并相应地调用函数。
我们提供了三个核心功能函数:
list_tables():列出数据库中的所有表。describe_table(table_name: str):描述指定表的模式(即包含哪些字段)。execute_query(query: str):对数据库执行给定的SQL查询。
通过这三个接口,聊天界面可以理解用户的自然语言查询:首先查看哪些表相关,然后了解表的结构,最后执行查询以获取所需信息。
实现函数调用与智能体交互
现在,我们已经创建了内存数据库并定义了与之交互的各种函数接口,是时候实现函数调用了。在这部分实验中,我们将直接允许Gemini在后台进行函数调用,获取响应,并根据响应信息为用户生成自然语言回复。
需要注意的是,由于这些函数调用会与数据库交互,而LLM并非完美,可能会产生“幻觉”。在生产级应用中,您可能需要添加安全检查,甚至让人工在查询执行前手动检查代码。但在这个演示中,我们将让LLM自动执行函数调用并使用函数响应,中间不进行任何检查。
我们为智能体定义指令:作为一个聊天机器人,你必须使用三个数据库交互工具(list_tables, describe_table, execute_query)来回答用户的问题。我们初始化模型并提供这些工具。对于复杂的查询,可能需要多次尝试,因此我们还添加了重试机制。
运行示例查询

一切准备就绪。让我们向LLM提问:“我们数据库中最便宜的产品是什么?”
您可以看到,LLM首先查看存在哪些表,找到了产品表。然后,它需要知道表内有什么,于是获取列信息以确认是否存在价格列。最后,它对该表执行查询,根据价格找到最便宜的产品。

接着,我们提出一个后续问题:“它多少钱?”由于我们使用了Gemini模型的聊天界面,它会保留先前交互的历史记录,因此无需再次检索表信息,可以直接执行它已经知道的查询。
通过这个实验,您可以更深入地理解LLM在与各种函数交互时正在查看和定义哪些信息。
代码实验二:使用LangGraph和Gemini API构建智能体 🔄
由于时间关系,第二个实验内容较多,我们将概述其高级概念。您可以在直播后自行深入探索该实验的细节。
这个实验讨论了如何使用LangGraph和Gemini API构建一个智能体。它使用了一个名为LangGraph的开源库,通过图结构来构建具有来回交互的完整应用程序。

LangGraph核心概念:图结构

理解本实验的关键概念是LangGraph使用的图结构。图由节点和边组成。
- 节点代表要执行的操作或步骤。例如,人类与AI聊天机器人交互时,从人类响应到聊天机器人响应,再到函数调用,每一个步骤都是一个节点。
- 边代表状态之间的转换。例如,从聊天机器人回答转换到用户回合,这就是一条边。
建议查阅LangGraph文档以更详细地理解这个概念。
实验步骤概述
在实验的第一部分,我们定义了核心指令。在每个步骤中,这些指令为聊天机器人提供所有必要信息,使其能够理解当前情况、已交换的消息、订单状态(因为这是一个咖啡师聊天机器人,可以为您下订单、获取信息等)以及订单是否完成。这是为了提供一个接口,使其能够跟踪如何交互以及调用哪些函数和工具。
然后,我们定义了咖啡师机器人的指令,允许其执行各种操作,如清空订单、接收订单、下单等。

实验首先展示了一个单回合聊天的简单交互。随后,在第三部分,我们构建了一个更强大的结构,定义了人类与聊天机器人之间近乎无限的交互,直到达到终止状态(例如,订单确认并下达)。我们添加了一个条件边,如果用户完成下单,则提供终止对话的接口。
实验的其余部分在此基础上增加了函数调用功能。除了与模型的文本交互外,我们还提供了各种工具函数,例如从动态或静态源获取菜单信息、向各种工具下订单、获取当前订单信息等。
实验成果总结
逐步地,我们迭代构建了一个系统:聊天机器人与人类交互,接收订单,提供必要信息,并在需要时调用各种工具,在后台进行函数调用,以完成整个应用流程。人类和聊天机器人都能够终止应用程序。

我们建议您更详细地浏览这个实验,以获取更多信息并进行实践。
专家问答与课程总结 🎤
在代码实验概述之后,我们进入了精彩的问答环节,邀请了来自Notebook LM、Colab AI助手团队以及Google Cloud智能体与函数调用功能开发团队的专家。



讨论涵盖了多个主题:
- Notebook LM 如何利用长上下文和引用功能,创建一个基于用户上传文档的“源头追溯”研究工具,成为个人思维的延伸伙伴。
- Colab 数据科学智能体 如何利用函数调用和检索等技术,通过多步骤流程(导入数据、探索、清洗、可视化、建模)来提高数据科学实验的速度。
- 生产环境中智能体的演变:智能体的基础架构保持稳定,但模型本身的能力(如工具调用、逻辑推理)正在快速提升,使得编排层更易构建。未来机会在于解决涉及多个API、可变动作的复杂现实问题。
- 工具评估与选择:可以使用Vertex AI的生成式AI评估服务来评估函数调用的准确性。通过记录和分析工具选择决策、收集多样化测试用例、改进提示工程和工具定义,可以迭代优化系统。对于模糊的工具选择,可以向用户请求更多信息。
- 处理延迟:除了应用传统的最佳实践(如预处理、改进数据质量和搜索性能)外,还可以并行执行多个查询并评估结果。缓存(尤其是上下文缓存)是减少检索延迟的有效优化手段。
- 开发框架选择:对于快速原型,建议从简单的SDK开始。随着系统复杂性增长,应尽快采用像LangGraph这样的图结构框架或其他编排框架,以更好地控制、理解和观察智能体的行为。





课程小测验 ✅


最后,我们通过一个小测验来巩固今天的学习内容:
- 生成式智能体是什么? (B)一种可以观察世界并使用工具采取行动的应用程序。
- 编排层的主要功能是什么? (B)管理智能体的内部推理和规划过程。
- 在什么情况下开发者可能选择使用函数而非扩展? (C)当开发者需要对数据流和API执行有更多控制时。
- 数据存储在生成式AI智能体中的目的是什么? (B)为智能体提供对动态和最新信息的访问。
- 以下哪项不是生成式AI智能体的典型特征? (C)它们拥有对其所创建内容的内在意识和理解。
- 智能体开发中的“专家混合”方法是什么? (C)组合多个各自擅长特定领域或任务的专门智能体。


总结



本节课中我们一起学习了生成式AI智能体的核心组件(模型、工具、编排),并通过两个代码实验深入实践:一是使用Gemini API进行函数调用以构建数据库对话界面,二是利用LangGraph图结构框架构建具有复杂状态管理的交互式咖啡师智能体。我们还聆听了行业专家关于智能体应用、评估和最佳实践的见解。


请确保完成今天的作业,并在Discord上分享您的进展和问题。明天我们将探讨特定领域大语言模型,敬请期待!
004:领域特定大语言模型与微调 🎯

在本节课中,我们将要学习领域特定大语言模型,以及如何通过微调和定制化,使大语言模型完美适配你的特定使用场景。
课程概述
欢迎来到生成式AI五天强化课程的第四天。今天的主题是领域特定大语言模型,以及如何通过微调来定制大语言模型,使其精确满足你的用例需求。本课程由Kaggle和Gemini团队赞助,包含每日作业、播客、白皮书、Discord讨论以及代码实验。
上一节我们介绍了动态智能体,本节中我们来看看如何通过微调让模型在特定领域表现更出色。

领域特定模型简介


领域特定大语言模型是针对特定领域(如医疗、网络安全)进行专门训练或微调的模型。它们结合了我们在前几日学到的概念,旨在解决通用模型在专业领域面临的挑战,例如知识代表性不足、任务特殊性以及安全合规要求。
医疗领域:Med-PaLM
在医疗领域,想象一下准确诊断病人所需的复杂性:需要考虑病人完整的病史和检测结果。这通常不仅需要深厚的医学概念理解,还需要检索相关信息并进行推理的能力。


Med-PaLM模型旨在应对这一挑战。它的发展历程包括通过美国医疗执照考试,并在真实临床场景中产生影响,例如协助医生进行诊断和治疗规划。该模型的关键需求在于生成长篇回答、理解医疗记录,并与患者进行自然的对话,而不仅仅是机械式的应答。
网络安全领域:Sec-PaLM
在网络安全领域,从业者持续应对着所谓的“3T”挑战:威胁、繁琐工作和人才短缺。
想象一下安全分析师筛选海量警报,试图从无害的异常中识别真实攻击的场景,这就是网络安全中“繁琐工作”的现实。再加上网络威胁的不断演变和全球熟练专业人员的短缺,基本上就构成了职业倦怠和系统漏洞的配方。
在这部分内容中,我们探讨了Sec-PaLM如何通过分析恶意代码、自动化警报分类甚至生成报告,来解放人类分析师,让他们专注于更战略性和重要的任务。
核心技术与方法
这些专业语言模型在大量医学和网络安全数据上进行训练,使其能够理解各自领域的细微差别。它们还利用规划和推理框架,将复杂任务分解为小而可管理的步骤,就像人类专家所做的那样。
在最后部分,我们探讨了在现实世界中负责任地部署这些强大AI模型的重要性,强调了评估、解决潜在偏见以及确保安全、合乎伦理地使用它们以改善患者护理和加强网络安全防御的关键性。
代码实验解析
以下是两个核心代码实验的要点介绍。
实验一:使用搜索增强提高准确性
这个实验主要探讨如何使用诸如谷歌搜索增强这样的基础技术,来提高大语言模型的准确性并减少幻觉。在Sec-PaLM中,增强技术同样被使用。
实验首先初始化环境,安装必要的库并获取API密钥。
接下来是有趣的部分。我们首先探索可用的各种模型。对于这个实验,我们将使用前几天用过的标准模型,但会通过增强技术来增强它们,特别是谷歌搜索增强。通过SDK接口,模型的回答将基于谷歌搜索结果,这不仅提高了回答质量,还能获得来源和引用,从而理解答案的哪些部分可以归因于哪些搜索结果。
例如,询问“泰勒·斯威夫特的下一次演唱会是什么时候在哪里?”,这通常需要动态和实时的信息。实验展示了增强如何帮助提供这类信息。因为大语言模型是在某个时间点之前训练的,可能没有最新的信息。如果不使用增强,模型可能会给出不正确的回答,或者声明自己没有实时信息并指向各种来源,但这可能不是你想要的答案。
在后续部分,我们像昨天在智能体章节讨论的那样,给模型提供一个名为“谷歌搜索检索”的工具,然后重复相同的问题。你会看到模型能够给出更具体、更准确的答案。
但拥有答案固然好,你如何知道可以信任基于实际来源的答案呢?这就是你可以深入研究该服务提供的元数据的地方。你可以看到它根据你的查询给出了各种链接和结果,你不仅可以获得生成答案所使用的来源链接,还可以看到(取决于你问的问题)答案的哪些部分可以归因于哪些来源。
这本质上就是这个实验的主要内容:生成有根据的文本,并为输出答案的某些部分获取引用。
以上是静态增强,我们要求模型将每个答案都基于谷歌搜索结果。但可能存在某些场景,你希望根据是否需要增强来策略性地对结果进行增强。如果模型在没有增强的情况下无法正确或适当地回答问题,你可能不希望依赖增强。在这里,你可以为模型提供一个阈值,然后模型会根据其对答案的置信度自动决定是否重定向到增强服务。
这就是实验第二部分的内容:使用增强来减少幻觉并提高结果质量。如果你在Sec-PaLM部分的工作中使用了增强,你也可以在你的应用程序中利用它。
实验二:微调自定义模型
这个实验讨论了微调自定义模型,它通过使用参数高效微调技术来实现,正如你在第一天学到的那样。你可以在自己的语料库上微调Gemini模型,这可以帮助它在未见过的任务上表现更好。
我们像往常一样,通过Kaggle Secrets初始化API密钥,并探索各种可用模型。
就像我们在第二天看到的那样,我们使用相同的新闻组文本数据集,其中包含超过18000个关于20个主题的新闻组帖子。我们将根据文本将新闻组帖子分类到各个类别,这本质上是一个基于文本的分类问题。
像第二天一样,我们将清理数据,移除任何明显的类别信号,以使实验公平相关。然后,我们为训练和测试采样某些行。请记住,参数高效微调对数据效率要求很高,你不需要像训练嵌入模型那样多的数据行,它甚至更高效。因此,我们只保留50行用于训练,并保留一些用于测试。
为了理解微调如何帮助提高性能,最好有一个基线来查看在微调之前,模型在零样本分类下的表现或分类性能如何。这是我们在实验这部分所做的:我们让模型进行零样本分类,询问它“以下消息源自哪个新闻组?”,并给出几个选项。我们在这里做了一些提示工程,使其更具体。然而,无论如何,正如你在这里看到的,在没有参数高效微调的情况下,准确率只有大约18.75%。
现在,如果我们在对输入输出对示例(我们采用的50个包含新闻组帖子及其各自类别的示例)进行微调后,重复相同的评估过程,你可以看到模型的评估分类性能显著提高。这在你的任务不完全符合模型之前所见内容的场景中,可能是一个主要优势。
当然,你也可以通过提示工程来提高性能,正如你在第一天看到的那样。我建议你尝试一下,稍后你会看到效果。
接下来,参数高效微调还有另一个不常被提及的优势,你也会在实验的这个部分看到,那就是它可以用于减少生成的令牌数量。特别是当你使用这些API的付费版本时,你需要为输入和生成输出的长度付费,这有助于减少两端的长度。特别是因为你可以极大地影响输入输出的长度,而且因为我们训练(或参数高效训练)模型在其从输入到输出的映射上非常高效,我们不需要在输入侧进行额外的提示工程,我们可以看到我们节省了大量的令牌,因为输入更短,因此在输入大小上花费更少。
专家问答要点总结
在本节中,我们与来自Med-PaLM和Sec-PaLM团队的专家进行了问答,深入探讨了领域特定模型的实践与挑战。
关于安全领域大模型:
安全领域具有任务、工具和数据极其多样化的特点,且公开数据有限、敏感性高。通用模型难以达到专家级的理解和推理水平。Sec-PaLM通过持续预训练、针对性的指令微调、人类对齐过程以及LoRA等技术,使模型适应特定客户环境或任务。其核心价值在于执行任务而非记忆信息,并强调通过增强来获取权威事实。
关于医疗领域基准:
MedQA等多项选择题基准虽有助于自动评估,但场景过于简化。未来趋势是转向更复杂、更贴近现实的基准,如涉及完整患者场景、医学影像或治疗建议的任务。达到100%的MedQA准确率并非最重要的里程碑。
关于通用模型与微调模型的权衡:
需要在回答质量、服务成本和延迟等多个维度进行权衡。领域特定模型可以在模型规模较小的情况下,通过在特定领域的专业化获得良好收益。微调、检索增强和上下文学习等都是可用的工具,具体选择取决于用例。
关于AI解决所有健康问题:
生成式AI在医疗领域的应用不应仅限于提高效率的渐进式改进。更应探索那些在过去无法想象、现在因模型能力而成为可能的新护理路径和科学发现,这才是未来十年医疗保健领域期待的重大进步。
关于安全领域的对抗性:
部署大语言模型时需考虑新的攻击面,如提示注入。应对策略包括输入扫描、通过训练提高抵抗力,以及将问题分解为多个子步骤以限制恶意输入的影响范围。
关于医疗领域的伦理与隐私:
在部署时,需依赖本地法规(如HIPAA)和合规的基础设施。在训练时,通常使用去标识化数据或合成数据,这既保护患者隐私,也有助于提高模型性能和数据清洁度。

关于大模型在安全领域的有效用例:
最有效的用例是解锁执行安全任务的能力,特别是程序性知识,以及充当连接各种异构安全系统和数据孤岛的“粘合剂”。代码分析和自动修复云配置误设置是前景广阔的领域。
关于安全领域大模型的现存差距:
关键差距在于可解释性和信任验证。当前的引用和增强方法,对于高度技术性的领域,验证工作量依然很大。需要能够内置信度评估、对推理过程的信心衡量等更深层次的能力。此外,让模型有效理解和使用具有复杂模式(数百上千个字段)的API工具,仍是亟待解决的规模化难题。
关于Med-PaLM的演进:
工作重点正在从“根据对话记录诊断”扩展到更困难、更全面的任务,例如作为对话伙伴参与交流,并最终帮助患者理解并执行最佳的健康决策。这仍处于早期探索阶段,需要通过临床研究在真实环境中安全地验证其积极影响。
课程总结


本节课中我们一起学习了领域特定大语言模型的核心概念与应用。我们探讨了Med-PaLM如何助力医疗健康,以及Sec-PaLM如何应对网络安全挑战。通过代码实验,我们实践了使用搜索增强来提升模型回答的准确性与可追溯性,并学习了如何使用参数高效微调技术来定制模型,使其在特定分类任务上表现更佳,同时还能优化成本。专家分享进一步揭示了领域模型设计的考量、面临的挑战以及未来的发展方向。明天,我们将进入课程的第五天,学习关于生成式AI的评估与MLOps。
005:第五天直播与Paige Bailey – 生成式AI运维 (MLOps)
概述
在本节课中,我们将学习如何将生成式AI系统投入生产并进行长期维护。我们将回顾课程内容,探讨MLOps的核心概念,并通过一个实战演示了解如何使用Google Cloud的工具链来构建和部署生产就绪的生成式AI应用。
课程回顾
上一节我们介绍了整个五天课程的框架。本节中,我们来回顾一下前四天学习的关键内容。
- 第一天:我们讨论了基础模型,包括它们的创建、调优以及如何通过提示工程引导它们完成任务。
- 第二天:我们学习了嵌入和向量存储,了解了如何将各种数据类型表示为紧凑的语义向量,并使用向量搜索等技术进行大规模管理和查询。
- 第三天:我们结合了前两天的知识,利用AI函数调用等技术构建了能够调用各种数据库和工具的复杂生成式AI智能体。
- 第四天:我们探讨了领域特定的大语言模型,例如专注于网络安全和医疗的模型,它们利用RAG、智能体和提示工程等技术构建。
今天,我们将聚焦于如何将所有这些模型、数据库和技术整合到一个生产就绪的系统中。
白皮书核心概念


在今天的白皮书中,我们讨论了几个将生成式AI项目从原型推向生产环境的核心概念。




1. 模型发现与选择
如何从众多具有不同优势、劣势和权衡(如性能、成本)的基础模型中,有效地选择正确的模型。






2. 开发、评估与实验
专注于迭代开发和端到端生成式AI应用的严格评估。我们建立了一个稳健的评估框架,包括使用任务和业务特定指标,以及多种评估方法(如并排比较)。


3. 部署
借鉴DevOps理念并将其扩展到生成式AI领域,涵盖持续集成、持续交付,并针对大语言模型和多模态模型的特定挑战进行定制。
4. 监控与日志记录
这是一个至关重要的环节,尤其对于大语言模型而言更为复杂。它包括:
- 漂移检测:当提示或输出偏离预期分布时进行检测。
- 持续评估:确保你的应用在生产环境中按预期运行。
5. 治理
这是一项贯穿始终的实践,旨在为开发和部署过程建立控制、问责制和透明度。
实战演示:生成式AI入门套件
上一节我们介绍了MLOps的理论框架,本节中我们来看看一个实际的工具如何简化在Google Cloud上构建和部署生成式AI应用的过程。
我们创建这个“生成式AI入门套件”是为了解决将生成式AI应用投入生产的“最后一公里”挑战。以下是该套件旨在解决的主要问题:
- 部署与运维:如何构建基础设施、进行测试、部署以及构建用户界面。
- 评估:如何衡量性能、构建合成数据。
- 定制化:如何集成自定义逻辑、实现安全与合规。
- 可观测性:如何收集数据用于调优和评估,如何监控服务与用户反馈。
该入门套件提供了以下功能:
- 一个生产就绪的FastAPI服务器,支持实时聊天界面、流式响应和自动生成文档。
- 一个用于实验的UI游乐场。
- 完整的部署流程所需工具。
- 不同的构建模式(例如,如何用LangChain构建智能体或RAG应用)。
- 可观测性实现,允许跟踪用户与应用的所有交互。
演示核心流程:
- 应用开发:使用如LangChain的框架创建应用(例如一个烹饪食谱助手)。
- 代码模式:套件提供了构建智能体或自定义RAG问答应用等模式的示例代码。
- 评估:在部署前,使用提供的示例进行应用评估。
- 部署:使用Terraform或Cloud Build等工具进行CI/CD部署。流程包括代码提交、自动化测试(单元测试、集成测试)、容器构建与性能测试(如延迟、吞吐量),最终部署到生产环境。
- 监控:所有用户交互数据被记录并保存到BigQuery中。可以通过Looker Studio仪表板监控应用使用情况、收集反馈分数,并深入查看每次对话的细节。
专家问答:MLOps与生成式AI
下面我们进入问答环节,探讨MLOps在生成式AI时代的变化与最佳实践。
Q1: 随着大语言模型和生成式AI的出现,MLOps发生了哪些变化?
Gabriela: 早期的机器学习模型开发部署是手动的、临时的。MLOps通过引入DevOps原则实现了自动化和规模化。生成式AI的兴起再次推动了MLOps的演变:
- 新角色:出现了提示工程师、AI工程师。
- 更广泛的工件管理:需要管理模型配置、基础模型使用、提示模板、链式流程等。
- 整体应用监控:从仅监控模型扩展到监控整个生成式AI应用,包括收集反馈和进行任务特定的定制化评估。
- 敏捷工作流:新模型和框架层出不穷,要求工作流极其敏捷。
Q2: 评估对于模型生产化有多重要?是否只适用于文本,多模态评估是否可行?
Anant & Olivia:
- 重要性:评估是MLOps不可或缺的部分。与预测式AI不同,生成式AI的输出(文本、图像等)评估更加复杂、任务特定且主观。
- 文本评估方法:
- 传统指标:如BLEU、ROUGE,将生成结果与单一标准答案对比。适用于机器翻译等,但对摘要等任务有局限。
- LLM即评判员:使用一个大语言模型来评估另一个模型的输出,例如打分或解释。
- 并排比较:人类更擅长比较两个答案的优劣,这种评估方式更符合直觉。
- 多模态评估:例如图像生成,没有所谓的“标准答案”。一种创新方法是使用如Gemini这样的模型作为黑盒,将评估任务分解为子问题(例如,“图像中有狗吗?”,“狗戴了帽子吗?”),不仅给出总分,还提供细粒度分析,让用户理解模型在哪些具体属性上表现不佳。
Q3: 既然很多公司使用API调用而非自己训练部署模型,哪些MLOps挑战不再是优先事项?
Socrates: 调用模型API意味着他人承担了繁重工作(数据准备、训练、评估、部署、扩缩容)。这带来了巨大好处:
- 快速启动:可以直接构建应用,减少对数据科学技能的深度依赖(除非进行微调)。
- 关注点转移:直接从评估开始,大大缩短应用构建时间。
- 新评估参数:关注毒性、事实性、任务特定指标,而非传统的损失函数。
- 新监控重点:关注模型在毒性、事实性等方面的漂移,而非传统的数据/模型漂移。
- 新的护栏:需要围绕具体用例和主题设置更贴近语义理解的限制。
Q4: 请介绍一下Vertex AI,客户为什么要在公司中使用它?
Advait: Vertex AI是一个企业级平台,是机器学习的“一站式商店”,涵盖生成式和非生成式任务。
- 模型访问:提供Gemini、Anthropic、Meta、Mistral等多种模型的API。
- 工具集:提供用于基础、构建智能体、应用落地所需的全套MLOps工具。
- 灵活性:可根据用户技能水平,选择手动管理所有基础设施,或使用AutoML等点击式界面简化流程,让用户更专注于ML本身而非运维。
Q5: 开始使用生成式AI时,应优先考虑哪些MLOps实践?与传统MLOps有何不同?有哪些适合新手的工具?
Veer: 生成式AI模型(尤其是LLMs)更具通用性,需要提示来引导。因此,“提示化模型”(模型+提示)成为生成式AI MLOps的基本单元。
应优先考虑的实践及Vertex AI对应工具:
- 模型发现:系统化评估模型(质量、延迟、成本等)。工具:Vertex AI Model Garden。
- 提示工程:将提示视为数据和代码进行管理(验证、漂移检测、版本控制、测试)。
- 链式与增强:通过链接模型、集成外部API和数据来克服LLM的时效性和幻觉问题。工具:Vertex AI的Grounding、扩展、向量搜索、Agent Builder。
- 模型调优与训练:支持监督微调、RLHF等技术。工具:Vertex AI模型注册表、Dataplex。
- 数据实践:对各类数据实施传统MLOps/DevOps实践。
- 评估:需要手动和自动结合,定制评估方法。工具:Vertex AI的自动评估、并排比较、快速评估API。
- 部署:使用标准软件工程实践(版本控制、CI/CD)。工具:Vertex AI端点、Cloud Build、Cloud Deploy。
- 治理:对整个生命周期进行控制、问责、透明化管理。工具:Vertex AI特征存储、模型注册表、Dataplex。
新手友好工具:从Vertex AI Studio(游乐场)开始实验提示和模型,然后探索Agent Builder构建聊天机器人,再使用Vertex AI Pipelines进行MLOps自动化。
Q6: 在Google Cloud生产环境中,如何监控用户查询差异很大的大型生成式AI模型?
Gabriela: 需要监控两方面:
- 系统性能:延迟、查询大小等。
- 模型质量:答案的准确性、相关性、安全性等。
策略:将用户查询、检索片段、提示、生成答案、用户反馈、延迟等所有数据详细记录到BigQuery(全托管、无服务器数据仓库)。在BigQuery中,可以:- 为用户查询和模型答案创建嵌入向量,将相似的聚类在一起。
- 分析特定查询集群的用户反馈。
- 利用BigQuery与Looker的集成构建监控仪表板,清晰展示系统和模型性能的聚合视图。
- 结合开源可观测性工具与Cloud Trace和Cloud Logging,为每个生成式AI模型的回答添加详细追踪。
Q7: Vertex AI如何增强针对基础模型和生成式AI应用的MLOps?有哪些特定功能?
Advait & Socrates:
- 提示优化:提供提示优化工具,可基于评估数据集自动优化提示,使其更数据驱动。
- 评估:核心功能。可以比较模型、比较提示、评估不同参数和微调对模型质量的影响。
- 生产监控:正在推出实验性功能,用于评估和监控生产中的模型,检查主题趋势、安全协议遵守情况,并指导如何通过修改提示或微调来改进模型。
- 其他工具:
- Vertex AI Pipelines + Experiments:创建可扩展的生成式AI实验环境。
- 提示词管理:帮助存储、理解问题、重用和修改提示。
- 提示词库:为特定应用提供良好的提示起点。
随堂测验
现在,我们来通过一个小测验巩固今天关于生成式AI MLOps的知识。
问题1:根据白皮书讨论,以下哪项不是生成式AI应用MLOps的核心实践?
A. 将提示工程和评估作为迭代周期
B. 数据验证、模型评估和模型监控
C. 从头开始训练基础模型
D. 管理和版本控制提示模板、链定义和外部数据集
答案:C。训练基础模型本身不属于生成式AI应用MLOps的范畴,MLOps关注的是如何将已构建的模型稳健地部署到生产环境。
问题2:在生成式AI的上下文中,什么是提示模板?
A. 用户的简单文本输入
B. 带有用户输入占位符的一组指令和示例
C. 基础模型本身
D. 模型生成的最终输出
答案:B。提示模板是包含指令和示例的框架,其中留有位置供插入具体的用户输入。
问题3:在生成式AI应用中,链式调用的目的是什么?
A. 保持模型输出的时效性
B. 避免幻觉并保持模型输出的时效性
C. 增加模型的复杂性
D. 降低模型的效率
答案:B。通过将多个步骤或模型链接起来,可以帮助模型利用更准确、及时的信息来生成输出,从而减少幻觉。

问题4:为什么评估是开发生成式AI系统的关键步骤?
A. 确保模型被部署到正确的基础设施
B. 优化资源利用并减少延迟
C. 跟踪数据和模型版本的谱系
D. 衡量模型输出的质量和有效性
答案:D。评估的核心目的是衡量模型输出是否满足质量、有效性及相关标准。
问题5:哪个Vertex AI产品允许在生产中定期执行评估任务以及漂移检测流程?
A. Vertex AI模型监控
B. Vertex AI管道
C. Vertex AI特征存储
D. Vertex AI模型注册表
答案:B。Vertex AI管道可用于编排和自动化重复的ML工作流,包括评估和监控任务。
总结


在本节课中,我们一起学习了生成式AI项目的MLOps全流程。我们从回顾整个课程开始,深入探讨了将生成式AI应用投入生产所需的核心实践:从模型选择、提示工程、链式构建,到评估、部署、监控和治理。我们通过一个实际的“生成式AI入门套件”演示,看到了如何利用Google Cloud的工具(如Vertex AI、BigQuery)来简化这一过程。最后,通过专家问答和随堂测验,我们巩固了对生成式AI时代MLOps独特挑战和解决方案的理解。希望这门课程能为你构建自己的生产级生成式AI应用打下坚实的基础。


浙公网安备 33010602011771号