📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

AI Engineering with the Google Gemini 2.5 Model Family - Philipp Schmid, Google DeepMind

AI Engineer1:44:51

Transcription

[音乐] 好的。大家好,欢迎,欢迎。嗯,欢迎来到我们的研讨会,使用 Google Gemini 2.0 系列进行 AI 工程。既然是研讨会,我们将使其非常注重实践。所以请保持所有电脑打开。您不需要任何 Google 帐户,比如 Google Cloud 帐户。您可以使用您的个人 Gmail。使用起来完全免费。所以这就是重点。在开始之前,您能否帮我了解一下有多少人以前使用过 Google Gemini?哦,哇。那太酷了。举手的人很多。比我上次做类似演讲时多。嗯,所以我们要做的,有三张幻灯片,所以别担心,不多。但我们将重点关注 Gemini 2.5。有一个 Gemini 2.5 Pro 模型和一个 Gemini 2.5 Flash 模型。我们将使用 Flash 模型,因为它可以通过 API 访问免费使用。所以我们将进行编码,并且两个模型默认都是多模态的,这意味着它们可以理解文本、图像、音频、视频、文档并生成文本。我们还有可以生成图像的 Gemini 模型,我们也将使用它们。我们现在还有可以生成音频的 Gemini 模型。所以您可以从文本生成语音。如果您想知道在哪里可以找到那些漂亮的模型卡片,其中包含所有功能、模型上下文、输出令牌,它们就在 Gemini 文档中。如前所述,自上周 Google IO 以来,我们有两个新的文本转语音模型,不是上周,而是前一周。它们真的很酷。稍后您会尝试并看到它们。现在是重要细节。所以我创建了一个 Slack 频道。如果您在 AI 工程 Slack 频道上,您应该能找到它。欢迎在研讨会期间使用它。您可以提问。我会定期查看以回答它们,或者即使在研讨会结束后,如果您有疑问,在家或下周完成研讨会。我会查看并确保您得到所有答案。然后我们有一个二维码。它是 AI Studio。您也可以直接在浏览器中输入 AI.dev 或 AI.studio studio,它会带您到 AI Studio,另一个链接是,有一个 GitHub 存储库,里面有我们要进行的研讨会。我现在可以直接切换到它,所以,希望 Wi-Fi 能给我们一些自由。研讨会的好处是我们有 Google Colabs,所以不需要下载太多东西,而且所有内容都将在 Colab 环境中运行,如果您有 Google 帐户。另一件事是我们需要在 AI Studio 中生成一个 AI 密钥。GitHub 存储库现在已加载。在 GitHub 存储库中,我们有一个 notebooks 文件夹。是的,当然。抱歉。所以在 GitHub 存储库中,我们有一个 notebooks 文件夹,其中包含我们所有的四个研讨会,加上一个 01,它基本上是一些小说明,如何设置 AI Studio,如何获取 API 密钥以及如何发送您的第一个请求。然后,我们将从文本生成开始,熟悉一下 SDK。第二部分将完全关于多模态。Gemini 如何理解图像、视频、音频?我们如何生成图像或音频?然后第三部分将是关于函数调用、结构化输出、原生工具,我如何将 Google 搜索集成到其中?然后我想,考虑到目前所有的炒作,我们将看看如何将 MCP 服务器与 Gemini 集成,使用它作为调用不同工具的模型。也非常不错。所以有一个 solutions 文件夹。solutions 文件夹包含相同的 notebooks,但带有解决方案。所以所有的 notebooks 都包含待办事项文本以及一些代码片段和一些注释。所以有工作代码片段、一些指针的代码片段以及直接的练习,其中包含待办事项供您完成。我将与您一起完成现有的代码片段,然后每个人都可以进行练习。我们的想法是尝试为每个不同的部分使用大约 30 分钟。如果您例如已经非常熟悉文本生成方面的内容,并且更想看多模态部分或函数调用部分,请随时直接跳转到该部分。总的来说,我们希望保持非常开放、非常动态。如果您有与内容相关的问题,或者可能不相关的问题,请随时提出,在 Slack 中提问,举手,我不确定,也许我们这里也有一些麦克风,这样我们就可以把它递给您,使其非常互动。所以我想,让我们开始吧。所以如果您转到 notebooks,还有一个 Colab 按钮,您可以点击它,它会直接在 Google Colab 中打开 notebook。如果您更喜欢本地 Jupyter 环境,您可以尝试克隆存储库。不确定 Wi-Fi 是否有效。我想 Colab 会是最简单的。如前所述,您基本上唯一的要求是有一个有效的 Google 帐户。可以是您的公司帐户,可以是您的私人帐户,可以是您在接下来的五分钟内创建的帐户。第一步是,我们需要做的是,对于不熟悉 AI Studio 的人来说,基本上是去 AI Studio。AI Studio 是我们的开发者平台,可以快速测试模型,试验模型,并且与您将使用的开发代码非常相似。所以,如果我尝试运行一个请求,比如,也许我们问一下 AI 工程峰会是什么,我可以在右侧启用与 Google 搜索连接的原生工具,我有我们的 Flash 预览模型,我可以运行请求,我们将看到模型思考的速度有多快。这里的好处是,一旦准备好,我还可以直接从我们的请求中获取 SDK 代码。所以,如果您正在 AI Studio 中进行实验,并想将其转换为 Python 脚本或想玩它,扩展它,所有这些都是可能的。工程峰会指的是几个专注于人工智能和工程的活动,这太棒了,这也与二月份在纽约举行的活动相符。所以,您需要做的是在顶部右侧获取您的 API 密钥,我可以把它做得更大一些,也许更容易一些,我们在顶部有一个获取 API 密钥的按钮,您去那里,抱歉,它是德语,但右上角应该有一个创建 API 密钥的蓝色按钮,在那里您应该,它会打开,嗯,我可以点击,它会打开,嗯,我可以选择您的 Google Cloud 项目,如果没有,您应该能够创建一个,如果,是的,当然。父母。好的。好主意。好的。一旦您选择或创建了 Google Cloud 项目,您应该能够创建一个。一旦创建,您应该会看到它作为一个弹出窗口。如果没有,您可以向下滚动一点。那里有您的 API 密钥。然后第二步是进入 Colab,然后在左侧的导航中。所以我也可以,让我快速切换到浅色模式。但无论如何,左侧有一个名为 Secrets 的密钥,然后您输入一个名称,比如 Gemini API key,然后是您的 API 密钥的值。我刚才讲的所有内容也包含在 00 设置和身份验证 notebook 中。所以,如果太快了,您可以查找,应该有截图,显示我点击了在哪里添加它。如果您在本地运行,您需要将 API 密钥公开为环境变量,名称相同,也应该包含在我们的 notebook 中。所以在第一个单元格中,基本上我们在这里尝试的是,我们检查我们是否在 Google Colab 中。如果我们正在 Colab 中,是的。是的,我们不用担心,我们会一一过一遍,然后您有足够的时间自己设置,大约五到十分钟。好的。快速地,是的。有任何幻灯片吗?不,不,只有代码。所以,我们将在稍后进行 API 密钥设置,您有足够的时间自己完成。如果您有疑问,我很乐意去您那里帮助您创建它。只是为了完成设置。所以一旦您创建了 API 密钥,使其在 Colab 中可用,或者在您的环境中可用,最好是打开第一个 notebook,它里面有一个非常小的代码片段,它使用您的 API 密钥并生成,使用 Gemini 2.0 Flash 生成第一个字符串。所以我们接下来的五到十分钟的目标是让这个工作起来。再次回到。所以我们有这些二维码。一个是 AI Studio,是左边的那个。另一个是 GitHub 存储库。您也可以访问 AI Studio AI.dev 进入 AI Studio 或通过 Google 搜索。您可以在我的 GitHub 帐户上找到 GitHub 存储库。它就像 gemini.2.5.aiengineering.workshop。我将在此期间更改外观。是的,抱歉。抱歉。所以,在 GitHub 存储库中,如果您转到 notebook 部分,并且每个 notebook 的顶部都有一个按钮,可以直接在 Google Colab 中打开 notebook。好的。好的。快速检查。我们准备好了吗?有任何笔记吗?好的,太棒了。所以第一部分将完全关于默认的。基本上,LLM 最初只是文本。我们生成了文本。所以第一部分基本上涵盖了如何生成文本,如何生成文本并获得流式响应。如何计算我的令牌?这很重要,对吧?了解我使用了多少令牌,将花费多少。有一些练习供您尝试不同的模型,尝试不同的提示。它还将详细介绍 SDK 的工作原理,例如您可以提供哪些输入。所以在 Google AI SDK 中,我们有一个客户端的概念,客户端有模型抽象。模型抽象有一个 generate content 或 generate stream content 方法,我也可以把它做得更大一些。每个或它都有模型参数,模型 ID 就是我们想要使用的 Gemini 模型,它在顶部定义。所以所有这些单元格都使用相同的概念。所以所有的研讨会部分都一样。如果您认为 2.5 Flash 不是适合您的模型,您可以将其更改为不同的模型 ID。如果您有付费帐户并想使用 Pro 版本,您也可以更改它。内容基本上是我们提供数据或对话、聊天和消息给 Gemini 的方式。所以第一个测试基本上是,我们要求它为一家强调可持续性的咖啡店生成三个名字,我们使用客户端模型生成内容。我们有我们的模型 ID,我们的提示,然后我们从 Gemini 获取响应。如果您已经设置好了一切,您可以尝试提示一些内容。要求它解释一些术语,或者只是更改模型 ID,然后我们继续计算令牌。所以里面有练习,没有代码片段。研讨会的解决方案部分有代码。所以,如果您遇到困难,或者想查找我添加的内容,请随时查看,但一定要先自己尝试,如果您想熟悉 SDK,还有很多其他代码片段或练习,基本上只是为了确保您理解概念并可以练习它,还有其他单元格是部分完成的,比如我们这里有一个带有代码注释和一些待办事项调用的单元格。这里的想法是真正迫使您学习新的 API。所以除了 generate content 方法之外,还有一个 count token API,我们可以用它来计算令牌。与我们的生成方法类似,我们提供模型 ID,然后是我们的提示。基本上,API 现在所做的是,它只计算我们提示的令牌,因为我们还没有生成任何东西。所以我们可以运行它,我们得到一个输入令牌为 11。所以 Gemini 分词器基本上将这九个词加上一个句号转换成了 11 个令牌。这估计大约是 0.00002。 [音乐] count tokens API 不会显示价格。所以,我在这里所做的就是查找 2.5 Flash 的价格并进行计算。与仅计算输入令牌类似,我们也经常想计算输出令牌,以了解它将花费多少。所以在下一个示例中,我们基本上生成内容,并且每个响应都有一个非常好的方法,称为抽象,称为 text,它允许我们轻松访问生成,但也有一个 usage 元数据对象,usage 元数据对象包含我们消耗的所有令牌和生成的令牌。所以我们有输入令牌,我们有思考令牌。所以 Gemini 2.5 是一个思考模型。所以在生成响应之前,它首先生成思考令牌,基本上是一种抽象,它使用更多的计算来有更多的空间来生成一个好的答案,然后还有候选令牌,也就是最终的响应令牌。这就是我们如何计算请求的总成本,我们使用输入令牌价格,然后是我们的候选令牌和思考令牌。在这种情况下,将不到 2 美分。是的。是的。是的。令牌有不同的价格吗?不。所以,输入和输出令牌的计算方式不同,是的。所以我们有提示令牌,基本上是您提示的输入令牌,然后我们有候选令牌,这是您的响应,还有思考令牌,它们基本上价格相同,输出令牌比输入令牌贵得多,因为大部分计算都发生在那里,而输入只是一个编码。所以这就是为什么您总是看到输出输入定价与输出定价之间有很大的差异。是的。所以对于 Gemini 2.0 Flash,这是我们成本效益最高、最便宜的模型,每百万个输入价格是 10 美分,输出价格是 40 美分。所以您的意思是,为什么我们总共得到 639?所以,遗憾的是,这并不直接可见。所以我们可以查看思考摘要,但基本上模型首先生成大量的推理。当然,在我们的例子中,我们要求它生成一首俳句,这可能不是最困难的提示。您可以使用称为思考预算的东西来控制思考令牌,您可以限制模型需要思考或推理多少令牌。所以您有一定的成本控制,但它基本上是动态完成的,基于您的提示。好的。是的,还有一个问题。是的,我只是在看,为什么是的。所以,我可以,让我打开文档,让它更容易一些。所以,Gemini 2.5 Flash 是一个混合模型。所以您可以使用它进行思考,也可以不进行思考。不进行思考时,计算成本效益更高,因为您可能知道,Transformer 完全基于注意力,这是一种生物学计算。所以它越来越大,这意味着它需要越来越多的计算能力,而没有思考,对我们来说运行起来更容易或更有效率。所以,如果您将思考设置为零或将思考预算设置为零,您将拥有零思考令牌,但您将拥有候选令牌,这些候选令牌将按每百万个 0.60 美分的价格收费。但一旦您进行思考,也就是说,思考预算大于零,您将支付思考令牌和输出令牌的价格。这就是 3.5 美元。是的,我将打开文档。所以我们将在下一秒看到它。Flash。是的。所以,无论如何,如果您有任何问题,Gemini 文档是查找答案的好方法,或者只是直接询问 Google 或 Gemini。在模型功能方面,我们有思考部分,那里有思考预算,如果您想禁用思考,基本上将思考预算设置为零。您可以控制它。它可以是 0 到 24,000 之间的整数,然后将思考预算设置为零即可禁用思考。所以这是禁用思考的方法。预算是推理的数量吗?不,是令牌。所以,是的,所以我们,是的,所以我们在这里的例子中看到了,我们有 600 多个 64 个令牌。所以,如果我们把思考预算设为 512,最多就是 512 个思考令牌。它怎么知道?不。好的。我想。好的,继续我们的 notebook。所以,请继续您自己,我可以按照您自己的节奏进行,甚至可以更快或更慢,只是为了确保我们步调一致。我想关于流式传输和 LLM 的最有趣的部分,就像我们在 ChatGPT 上看到的那样,等待整个响应对用户来说是一种非常糟糕的体验,对吧?谁想等 60 秒或两分钟才能得到响应?所以这就是为什么每个人现在都在使用流式传输,并且使用 Gemini 和 Gemini SDK,这非常简单。所以,而不是只调用 generate content,我们有 generate content stream。输入参数相同,除了我们现在从我们的调用中获得一个迭代器,我们可以循环遍历它,我们可以打印我们的块或使用 HTTP 服务将其流式传输回给用户。好的,太棒了。然后,与其他模型类似,Gemini 是一个聊天模型,对吧?也许您熟悉 OpenAI SDK,其中有一个消息的概念,您有不同的输入,按用户回合、助手回合、用户回合,这使得它非常,我可以说仍然很复杂,需要自己管理,因为您需要跟踪它。为了使其更容易,我们添加了一个称为 chats API 的东西,它基本上在客户端处理所有状态管理,但作为 SDK 的一部分。所以您可以创建一个聊天,然后您可以将消息发送到聊天会话中,用户,在这种情况下,我们正在计划一次旅行。我们发送消息,我们得到响应,但我们的聊天会话也包括用户提示和助手消息。所以,而不是需要创建这个用户回合和模型回合的对象,我们可以直接继续发送下一条消息,询问一些好的食物推荐。由于我们处于对话环境中,模型知道我们是,或者它提到我们去不同的欧洲城市,并且基于下一个请求,它使用整个对话作为历史来获得响应。也可以快速打印响应并获得一些不同的示例。然后,当然,如果您需要将其存储到数据库,我们有一个很好的 get history 方法,允许您基本上检索完整的当前状态,您可以存储它或更新它,或者您想做的任何事情。是的,这只是一个客户端抽象。所以后端接收的请求与您发送的单个请求相同,带有数组。它只是一个客户端抽象,使开发人员能够快速构建。是的。然后,与 OpenAI 或其他模型类似,您可以给模型一些系统指令,使其行为不同,用不同的语言响应,确保它遵守您提供的策略或指南。这可以通过 generation config 来完成。所以我们在模型调用中有一个新的参数,除了模型 ID 和内容之外,我们还有一个 config,我们可以提供我们的系统指令,并且与系统指令类似,我们可以提供其他 generation 配置。所以温度可以用来使生成更具创意或更确定。所以,例如,如果您构建一个检索增强生成,您希望模型主要尝试使用您提供的上下文,您通常会将温度设置为非常低的值。如果您从事内容写作营销工作,您会将温度设置为非常高的值。我们可以控制最大输出令牌,以确保我们不会超出某个预算或长度,top P 和 top K 也是使我们的生成更多样化的方法。是的。所以,让我打开。所以这里我们在 config 中有类似的思考 config,在思考 cons 中,您可以基本上设置思考预算或在请求中包含思考。好的。然后,我认为 Gemini 更独特的是,我们直接支持文件。在这种情况下,我下载了《汤姆·索亚历险记》这本书,将其全部存储在一个文件中,并使用 files API 将文件上传到 Google Cloud 存储桶。那里是免费的,所以如果您不想使用您自己的公司存储桶或任何存储桶,每个 AI Studio 帐户基本上都有您的个人存储桶,它存储文件大约一天。但您可以控制生存时间,并且,而不是需要提供整个文件作为请求,这可能非常密集,您可以上传它,然后只提供文件的引用,而 Gemini API 在后台所做的是,它下载文件并在后端使其在您的提示中可用。类似地,我们上传了我们的书,将其放入我们的内容列表。所以我们不再是单个提示。我们现在有一个包含我们文件的数组,我们要求它总结这本书,在我说话的时候也完成了。然后我们还可以看到,令牌使用量现在是 100,000 个令牌。比我们之前测试的要大得多。使用文件 API 可以非常轻松地处理 PDF,我们将在下一章中看到。然后,作为您的练习,是结合所有这些东西。我如何使用一本书来使用聊天会话与我们的模型聊天,以帮助我更好地理解它?是的。它不是系统。是的。所以您所做的是,您将文件从客户端上传到云端的一个存储桶,当您发送请求时,您的请求的一部分,我的意思是我可以展示一下。您的请求的一部分将只是文件的存储位置的引用,而 Gemini API 在后台所做的是,它将文件加载到请求运行的地方,然后将其放入上下文中。所以您现在可以使用这个文件指针进行所有请求,而无需每次都发送它。这里我们也有 URI。所以这基本上是我们的文件存储或可以访问的地方。是的。所以它只对聊天可用吗?它只对您的用户可用。所以当您发送请求时,您会发送一个 API 密钥,这个 API 密钥基本上用于获取文件。所以没有人可以访问该文件。是的。好的。太棒了。是的。所以,如果您使用一个 PDF,它基本上有超过一百万个令牌,会发生什么?您很可能会收到一个错误,说文件太大,在上下文方面。您可以做的是,您可以使用文件来计算令牌。所以我们现在有文件,我们可以客户端模型计算令牌,您需要对其进行分块,所以如果文件不适合,它就不适合,您需要考虑一下,我能分块吗?我能总结它吗?我能用其他技术先提取重要信息吗?一旦我有了小于模型最大上下文的上下文,您就可以再次提供它。是的。不,文件上传。不,不。所以,它就像,但它会被删除。所以,不要期望您现在上传的文件会在一小时或一天后还在。但您可以使用相同的概念,在您自己的存储桶中使用 Vertex,在那里您可以对其进行更多控制,您可以说,也许我想使用不同的 API 调用来上传它,或者已经有它可用,这也有效。所以有一个入口点说使用 Vertex AI 的这个存储桶。是的。是的。这大致相同,但您需要以不同的方式设置客户端。是的。是的。好问题。所以,也许我们可以直接进入 PDF 部分。所以,继续第一部分或直接跳到第二或第三部分。我将跳到第二部分,它完全是关于多模态的,这意味着我们将涵盖视觉理解、音频理解、视频和文档处理,我将跳到那里。并且,嗯,与 PDF 协同工作的一部分,基本上是,与我们刚才看到的类似,我们有一个 PDF,在这种情况下,它基本上是超市的发票。我上传它,然后问模型,总金额是多少?我们可以运行它,而后台发生的事情,我可以展示,哦,它不在这里。等一下。好的,我们没有文件。我很快上传。但后台发生的事情是,我们对您的 PDF 运行 OCR,并将 PDF 作为图像提供。所以您不需要手动完成。所以没有说,嘿,这是一个 PDF,让我们将其转换为图像,然后运行 OCR,然后我提供图像和 OCR,这不需要。我们为您完成。好的。是的。是的。是的。所以 OCR,或者说图像理解还不完美,对吧?如果我们达到模型像没有文本一样理解它的程度,那么我想就没有意义了。但根据我们所看到的以及行业所做的,当您提供 OCR 和图像时,您会得到更好的结果。是的,基本上就是这样。PDF 本身,您实际上是把它当作图像来看吗?是的。不,我认为,我的意思是,我不知道确切,但我认为它只是基本的 OCR,没有什么特别的,没有魔法,然后是 PDF 的截图。是的。所以两者都有。好的。可以再试一次。现在我们有了 PDF,以防万一研讨会有多个部分,其中文件是存储库的一部分。所以,如果您遇到类似的问题,特别是对于图像理解部分或音频理解部分,并且您使用 Colab,您可能需要手动下载文件,然后上传。但在我们的例子中,我们现在有了发票。我认为我们可以快速展示一下。所以我当时在德国购物,我们有一个叫 Rebe 的超市,我买了黄油,一些面包,一些红薯,然后我们提示它,问总金额是多少?我们可以在这里看到总金额是 20.20。现在让我们看看我们是否正确。我们得到了正确的结果。而且它也正确地提取了德语,即使我用英语提示它,我认为这很酷。好的,让我们开始图像理解部分。是的,请。是的。我不确定具体发生了什么。我只知道通过定义思考预算,您可以限制将使用或生成多少令牌作为最大值,并且与 OpenAI 的低、中、高工作量类似。我们有更精细的控制。所以我们实际上可以做同样的事情,说低可能是 1000 个令牌思考,中可能是 12,000 个令牌思考,高可能是 24,000 个令牌思考,然后它最多会使用这些令牌来生成您的响应。但具体发生了什么,我无法告诉您。是的。所以,没有思考,我们看到的情况,尤其是在数学类型的问题上,模型受益于推理,性能会差一些,但对于一般的日常使用,尤其是图像理解或 OCR,您可以轻松运行它。真相是,您需要尝试,我认为这里真正的优势在于您拥有这些精细的控制。所以您可以运行思考预算为零、1000、2000、4000 的评估,看看它如何影响您的评估,然后您可以自己计算。好的,我能负担多少?我的最大成本是多少?我需要达到的准确度是多少?好的,还有更多问题,还是继续?有一个问题。是的。不,它是,有文档,但它是 JSON、PDF、所有不同的图像类型、所有不同的视频类型、所有不同的音频类型。所以,我们支持的所有多模态功能。如果它变得更具体,比如 JSX 文件和视图文件用于 Web 开发,我们正在努力。但它可能,我的意思是您会看到一个错误,最简单的方法就是将其替换为 doc txt。不,我想说的是,您需要使用 markdown 或其他库进行转换,然后,或者复制粘贴输入,是的。所以,我不确定研究人员做了什么。我只知道当我们提供图像加上 OCR 时,我们会获得更好的性能。所以我想两者兼有是有好处的。看到了。是的,有点。所以,UI 或 AI Studio 当然不使用 Python。但它在后台调用相同的 API。所以,文件上传 API 是我们从 AI Studio 调用相同的 API。我们调用相同的模型。两者都有相同的确切参数。所以您应该很容易地将您在 AI Studio 中测试和实验的内容转换为代码并在本地运行。还有一个代码按钮。所以,如果您是 AI Studio 用户,我的意思是我们可以快速尝试再次上传我们的发票并承认发货并使用我们的提示。所以在这里,现在我们基本上运行相同的请求,我们也可以拥有这个,它有点隐藏。它是顶部的这个代码按钮,您可以获得完全相同的代码,基本上需要几秒钟,因为 Wi-Fi 非常差,但在这里您将获得完全相同的 Python 代码,您创建客户端,我们有模型,在这种情况下,因为我们是手动上传的,我们提供文档,而不是作为文件 URI,我们直接以 B64 的形式提供,我们有提示,我们已经有了模型请求,因为我们已经生成了它,然后您可以继续。好的,太棒了。是的。是的。所以,我的意思是,我们可以快速尝试一下。所以,我们在这里。我们有 PDF。我认为了解我们将使用多少令牌很有趣。所以,让我们快速计算令牌。所以,如果我们去这里,我们有 count tokens,现在我们使用相同的 contents。我们有相同的模型 ID,我们有提示,然后我们有 PDF,让我们打印令牌计数。或者,我们还做了什么,所以如果您使用响应,您已经运行了一个请求,您应该可以访问 response 元数据。是的。所以我们有 count token。所以我们的 PDF 现在被转换成大约 500 个令牌。而我们有的提示大约是 20 个。如果我们将其与我们运行的请求进行比较,我们会看到,我们有完全相同的提示令牌数量,并且我们有提示详细信息。我们有 42 个思考令牌和 78 个候选令牌。好的,还有更多问题,还是?好的。560。我认为我们不收取 OCR 费用。我认为一张图像大约是 500 张图像。比如 500 个令牌。对您来说不是。好的。是的。所以 PDF 被转换成图像,我们提供图像,如果图像或 PDF 包含表格、视觉效果、思维导图,模型就会在类似的数据上进行训练。所以它肯定会理解其中的一部分。我的意思是我们可以尝试一下。我的意思是,也许我们可以搜索一些思维导图,然后问它一些问题。您也许可以开始思考一个提示,而我正在搜索一个思维导图,如果 Wi-Fi 允许的话。好的。好的。我们有了思维导图。我认为它只是一个关于如何制作思维导图的思维导图。您想知道什么?抱歉。就像这样。好的。我的意思是,我正在打开它,但我认为在小规模上,它看起来是正确的,关于如何制作思维导图的答案是完美的。表格。是的。所以,我们看到最成功的地方是,当您稍微分开时。所以已经有一些非常好的现有方法可以提取文档中的表格或其他视觉效果,然后当您直接处理这些图像和表格时,而不是像以前那样,我们提供一个表格,运行 OCR,然后问问题,现在我们直接根据表格提问,因为模型在多模态理解方面变得如此之好,以至于它可以结合不同的方面。我的意思是我们可以尝试一下,也许作为一个很好的例子。也许我们可以找到一些不错的,我不知道,发票图像或类似的东西,然后我们可以问它,也许添加一些东西或组合它,这对于普通模型来说将非常困难,但总的来说,特别是 Gemini 在多模态理解方面非常出色,视频也是如此,这是我最喜欢的新东西,就是看一个一小时以下的 YouTube 视频,把它放到 AI Studio 中,然后让它总结,或者如果您有任何具体问题,比如它比坐着看,即使以两倍的速度观看要快得多。您将在大约 80 秒内得到响应,您甚至可以要求它提取特定时间戳上有人说了什么,或者帮助您轻松地将其分段。抱歉,您能说大声一点吗?我认为不能。所以,AI Studio 非常以开发者为中心,我们不想做太多的黑魔法。您可以配置安全过滤器和控件,您可以在 SDK 或 AI Studio 中进行配置,在 Studio 中是在高级设置下。我有安全设置。我关闭了所有这些。但是,如果您想过滤非常露骨的内容或仇恨内容,我们会先后运行一些分类,以确保您不会为您的用户创建有害内容。好的,我有了发票图像。好的。好的。我们应该问什么?如果我们减去踏板,它会花费多少?也许。是的。性能。所以,遗憾的是,我没有答案。我认为您可以稍微思考一下,如果我们人类在理解这些 PDF 时会遇到困难,如果它们被颠倒了呢?如果是,那么模型很可能也会。我认为 Gemini AI Studio 和 Gemini API 的一个非常好的部分是,您可以非常快速地开始。我们都大约在 20 到 30 分钟内设置了一个免费帐户,通过 API 访问 Gemini 2.5 Flash,在 UI 中访问 2.5 Pro。所以最好的方法总是测试和探索和评估,即使您需要运行一千个 PDF,它也不再非常昂贵或昂贵。所以最好的方法是运行您自己的评估,获得比我尝试在 UI 中测试五个 PDF 更多的东西,真正深入研究它,如果您有任何问题或困难,最好的方法是联系我们。我们有团队帮助客户并与客户一起构建,然后我们可以一起迭代。回到您的 PDF,有什么问题吗?有什么提示想法吗?是的,我知道您解释了安全性,但有一些法律规定的强制性安全措施,比如防火墙、基准自动化或 CISA 强制的防护栏姿势管理。所以,当我为国防或金融应用程序实施这些规则时,您如何设置?我知道 Google 在从不同角度设置这些安全措施方面非常强大。您如何集成这个应用程序和其他安全措施?所以,我认为对于那些有许多合规性法规的环境,最好与 Google Cloud 合作。所以,我们在 AI Studio 中所做的一切在 Google Cloud 的 Vertex AI 中也有些类似,而 Vertex AI 为这些用例提供了更多功能。我不太确定,但他们肯定有更多信息可以提供,关于如何处理所有这些事情以及与 Gemini 的这些防护栏,所以您建议在全球 Google GCP 环境中进行,当我全局地在全球 GCP 环境中进行时,存在性能和成本问题,比如,有一个针对基础的防护栏,有一个针对组织的防护栏,还有一个基于行业的防护栏,所以我们必须将这些平台分开,从最细粒度的级别开始。所以,当我在 GCP 级别全局地这样做时,它更昂贵,而且也可能存在性能问题。是的。所以我知道 Gemini 和 Vertex AI 也有区域端点。而且在 Cloud Next 上,他们还宣布了一种新的 Gemini on device 的东西,大型公司可以购买一个巨大的盒子,Gemini 预装在里面,然后交付到您的环境中。我不确定具体细节。最简单的方法是快速搜索一下,然后查找它。但这些正是 Vertex 比 AI Studio 提供更多功能和支持的地方。是的,谢谢。其中一个去年的 2025 年会议,有人来自 Google 也代表了,这是一个很好的平台,但我不知道如何做到如此细粒度。是的。如何从最细粒度到全局级别?好的,也许回到您关于 PDF 的问题,关于问什么。所以,而不是问总金额是多少,我要求它计算单价的总和,这非常有效。当然,在这种情况下,这是一个格式非常好的 PDF,但图像理解非常出色。而我们应该思考它的新方式是,我应该直接根据图像提问,而不是像过去那样做太多处理。太棒了。好的。我们现在差不多到了一半的时间了。我想是时候我们稍微远离所有多模态部分,进入更关于我认为的代理部分,这些部分,我可以说,对我来说绝对更有趣,尤其是当您将它们与多模态部分结合起来时。所以,嗯,好的,所以第三部分是关于结构化输出和函数调用。您知道什么是结构化输出和函数调用吗?以及它大概是如何工作的?任何手势?是的,还是所有人都?好的,不算太糟。嗯,好的,所以第三部分继续处理 PDF,因为它们非常有趣,而且我们也想做结构化输出。所以,结构化输出对我们来说是一种从文本创建更结构化数据结构的方式。这样我们以后就可以更轻松地处理它,对吧?最终我们更喜欢结构化输出,因为我们可以将其集成到其他 API 中。我们可以连接 API,而 Gemini 支持或 SDK 支持 Pydantic。所以 Pydantic 是一个非常好的 Python 库,它可以让您创建这些数据结构,我们也可以创建嵌套数据结构。所以这里我们有一个食谱,有一个名字,配料,这是一个字符串列表,然后我们有一个食谱列表,它基本上是我们的食谱列表,我们可以在配置中提供它。所以,与生成参数或思考预算类似,我们有一个响应类型和一个响应模式,我们可以提供。这里我们要求它,好的,它可以为我们生成两个流行的饼干食谱。我们基本上强迫它使用我们的结构,我已经在这里 nicely 打印出来了。如果我们查看模型的原始响应,我们会得到一个 JSON,其中包含所有不同的输入字段。还有一个很好的 pass 方法,允许我们将它转换回我们的 Pydantic 模式。然后我们可以访问所有数据点。而且,就像我们有了发票一样,我们现在也许可以完成这个练习。如果我们问了总金额,对吧?但处理 PDF 时,我们通常希望结果是结构化数据,对吧?文本对我们没有太大帮助,当我们想将其放入数据库或想处理它时。我们确实需要这些数据模式,而 Gemini 的优点是我们可以将两者结合起来。所以我们使用我们的结构化输出方法和我们的多模态功能来处理文件,我们可以提供我们的文件。糟糕。好的。哦,我们需要我们的发票。所以也许这是一个很好的例子。所以我没有改变食谱,从我们的数据结构开始,我们想要创建的,我们要求它从 PDF 中提取信息。我们的 PDF 是超市的发票。所以它没有食谱名称和配料。所以 Gemini 没有生成或幻觉出任何东西。所以我们得到一个空的食谱列表。所以,如果我们现在将其更改为我们的发票数据,我们应该就能看到正确提取的信息。是的。所以,我们提取了日期,我们购买的所有商品,以及所有不同的价格。有了这些数据,现在处理起来就容易多了,对吧?如果我有一个自动化系统,需要接收发票,任何类型的 PDF 文档,我现在可以提供一个结构化的信息,我想要提取。而 Gemini 基本上为我们完成了所有匹配,这非常棒。而函数调用基本上是相同的想法,但不是有一个数据结构,我们的输出是一个名称和一个参数。所以,与我们创建的类似,在这种情况下,它是一个函数声明。它是一个结构,说明函数签名是如何完成的。所以我们有一个天气函数,它有一个名称,一个描述,以及我们需要提供的属性。有相同的函数,只是作为 Python 代码,并且通过函数调用,我们提供函数声明和我们的提示,然后模型生成一个结构化输出,它具有它想要调用的函数名称以及如何调用它的输入和环境或输入参数。所以,在我们的例子中,我们有一个天气函数。我们只有一个。

地点。嗯,我们提供它,呃,类似于我们配置中的所有其他配置,呃,参数。这次我们有工具,我们想知道东京的天气。显然,天气符合我们功能的描述,因为它帮助我们检索当前天气。所以,如果我们运行它,模型,呃,而不是生成一个很好的回应,它会想要调用 get weather 方法,并且地点是东京。如果我将提示更改为你好。哦,有道理。呃,一秒钟。所以,如果我改成你好,我们就没有函数调用,对吧?就像模型正确理解的那样,这只是一个问候,让我们回应,我该如何帮助你?所以,但我们想调用一个函数,所以我们有东京的天气是什么?然后下一步就是你作为开发者,呃,来调用这个函数,对吧?模型不能直接调用或调用函数。你通常会在你的,呃,代码或应用程序中有一个方法来识别,好的,哪个函数被调用了?这可能是一个简单的 switch 语句,呃,来检查,好的,名字是什么?如果你得到一个名字,就用提供的参数调用该方法。然后你所做的是你的函数的输出就是下一个用户输入,呃,所以模型生成这个名字和参数对象,我们将其作为用户输出提供。在我们的例子中,这是结果。如果我们查看 weather 方法,我们有它基本上是一些关于温度、状况和地点的虚拟数据。然后模型生成一个非常好的回应。所以我们有用户输入,模型有一个结构化的输出,用户提供了一个结构化的回应,然后模型生成了一个非常好的用户友好的回应。所以我们调用我们的函数,函数返回天气,然后模型生成一个非常好的回应,那就是东京的天气是晴朗的,温度是 22 摄氏度,感觉像 24 摄氏度。所以你可以考虑一下。好的,这就是我如何集成工具,或者如何将我的 LLM 转换成一个代理,或多或少,或者一个调用某事的方法。呃,get a weather 方法可以是任何东西。它可以是数据库调用。它可以是真实的 API 调用。它可以是,我不知道,读取电子邮件,发送电子邮件,所有我们目前看到的与所有 MCP 炒作基本上正在发生的事情。而 MCP 服务器也有工具。而那些 MCP 服务器的工具基本上暴露了相同的,呃,声明。所以一个 MCP 服务器有工具定义,例如 get weather,如果它在 weather MCP 服务器中。它有一个端点或方法,你可以调用,那就是 list tools。这个 list tools 方法将返回我们的函数的模式,这些模式看起来与我们在这里创建的非常相似。然后你在你的 LLM 端或客户端所做的是,你从 MCP 服务器获取那些模式,将它们提供到你的 LLM 调用中,然后 LLM 根据上下文生成,呃,输出也是结构化的。然后,而不是像我们用 get weather 所做的那样在客户端调用方法,你将再次使用 MCP 客户端,然后调用远程工具。所以与我们在这里在客户端手动完成的非常相似,但更抽象,更易于管理。当然,这里的好处是,不是我们每个人都需要实现 get weather 方法。使用像,我不知道,某个天气提供商的天气 MCP 服务要容易得多。类似的,呃,你可能不想使用你自己的个人 Google Drive MCP 服务器。如果 Google 创建了这些,那将是这样。所以这就是 MCP 服务器之所以如此酷的整个想法。所以,呃,是的,是的,是的,所以目前我们正在努力改进和扩展,呃,但目前建议可能在五到十之间。呃,如果你有更多的工具,你可以使用嵌入模型来过滤,你有用户,你所要做的就是基本上在描述之间运行一些相似性匹配,以及什么是有意义的,什么没有意义的。然后你只,呃,可以说,排在首位的工具。我不确定 Andropic 的说法以及你是如何做的。我唯一能分享的是,Gemini 2.5 Pro 是第一个完成 Pokemon Blue 的模型,它运行了大约 200 小时。呃,这里唯一大的挑战是,我们有一个有限的上下文,对吧?对于 Gemini 100 万。所以如果你继续两个小时,你肯定会用完,呃,这两百万个,呃,一百万个 token。而 entropic,我不确定当前的上下文是什么,但我很确定两个小时不足以用完。所以你最有可能做的是你总结,你压缩上下文和对话,然后你提供给你的模型。所以是的,我很确定 Gemini 可以运行超过两个小时,但这取决于你想要解决什么以及你将如何解决它。是的。这是正确的吗?是的,这是正确的。所以原生工具是下一节。我们可以在一秒钟内进入它。嗯,是的,目前原生工具不是,呃,以我们与用户助手的方式返回的。这基本上是后台发生的,用户得到的是最终的,呃,好的助手回应。这是非常好的反馈,呃,关于,呃,我们是否可以拥有它们,或者不能。我很乐意把它带给团队。我绝对可以看到为什么它对你,呃,人们直接与之构建会很有帮助。但目前不是这样。说到原生工具,所以,呃,Gemini 可以,基本上是经过训练来做原生事情的。所以函数调用非常通用。我们生成声明,并可以尝试做所有事情。呃,但原生工具更容易使用,因为你不需要定义或创建声明,它们基本上在后端工作。所以你不需要执行任何操作。而作为原生工具,我们目前有 Google 搜索可用。呃,基本上所有原生工具都在 AI Studio 中。所以我们有结构化输出,它不是一个原生工具,我们过去用它来获取结构。代码执行是一个原生工具,基本上意味着我们或 Gemini 为我们运行代码。所以,呃,用于根据人口对排名前五的城市进行排序的函数。所以它可以做的是,呃,为我们运行 Python 代码。所以如果你提示它使用 Python 解决任务,呃,它应该为我们运行 Python 代码。所以它生成 Python 代码,它没有运行它。这是一个糟糕的例子。抱歉。哦,我做了吗?啊,所以是我的错,不是 Gemini 的错。使用 Python。让我们看看它会做什么。呃,好的。是的,现在它得到了。谢谢。完美。所以,我们有一些推理,然后它生成可执行代码。可执行代码也通过 API 提供,呃,它为我们运行 Python。所以,它编写 Python 脚本。它执行代码,呃,它生成 mudplot lip 图表。通常我们,好的,在笔记本中,我有一个关于如何获取图表的例子。如果我们看看代码执行工具。所以这里也是类似的故事,我们运行它,它返回 markdown,你也可以,呃,它可以重新生成并返回,呃,图像。所以除了代码执行工具之外,还有 URL 上下文工具,它基本上允许你将 URL 作为提示的一部分提供,我们提取后台网站的信息,并将其提供到你的,呃,上下文中。所以而不是去一个网站,复制,粘贴,复制,粘贴,我们为你做。所以在这个例子中,我问它,好的,Python 的其他好处是什么?呃,从,呃,URL 你可以在一次请求中提供多达 20 个 URL。后台它会访问 URL,提取信息,将其作为提示的一部分提供。如果我们看看我们的提示,是的,这里,呃,它返回了我们漂亮的 smart plot plot,呃,图表,这非常酷。然后最后一个工具当然是 Google。Google 搜索很有意义。呃,所以,让我找到它。是的,你可以允许或启用 Google 搜索,然后它允许 Gemini 在后台使用或进行 Google 搜索。这里发生的是它接受我们的提示,呃,在这种情况下,可再生能源的最新发展是什么?首先,它将其转换为一个或多个 Google 搜索查询。然后它执行那些 Google 搜索查询,将其返回给模型,然后模型根据你的用户输入和所有搜索结果生成你的最终回应。目前我们没有,如前所述,导出或公开这些工具调用,但我猜特别是对于 Google 搜索,我们有一个,呃,加冕的元数据对象。是的。所以我们有加冕支持,呃,它基本上允许或精确地指向它从哪里获得或,呃,哪些信息引用了哪个,呃,来源。还有加冕元信息,哪些网站被爬取了。在我们的例子中,所以我们有,是的,所以,呃,对于代码执行和加冕以及 URL 上下文,我们增加了上下文大小。呃,这些上下文将被构建,呃,token 将被构建。对于 Google 搜索,呃,有一个免费套餐,我认为是 1500 次 Google 搜索是免费的,然后之后我认为是每 1000 次搜索 35 美元。代码执行 Python 运行是免费的。呃,嗯,上下文文本目前处于预览阶段。所以我不知道价格是多少。呃,是的,我认为,呃,非常酷的是,呃,并且是练习的一部分,如果你已经做了或者以后会做,你可以组合它们。所以你可以使用 Google 搜索工具和 URL 上下文工具,或者代码执行工具和 Google 搜索工具,基本上让它更像代理一样完成,比如首先搜索,呃,最新的 React 或 Python 版本是什么?然后编写一个 Python 脚本并运行它并返回它。呃,这使得它非常易于使用。抱歉。是的,我们听说过,呃,一些人希望有一个深度研究 API。我认为问的人越多,越有可能实现。也许我可以分享一下,呃,我,呃,作为我们团队的一部分,呃,昨天我们开源了一个例子,说明如何使用 Lancraft 和 Gemini 构建你自己的深度研究。非常类似于,呃,基本上所有深度研究代理所做的。我们有一个问题,我们生成查询,然后我们运行,呃,多次网络搜索,然后,呃,反思并查看,好的,用户的问题是否已经问过?我是否需要做更多研究?然后你有一个这样的循环,好的,我需要搜索其他工具吗?它是完全开源的,它使用了我们今天看到的所有东西,Gemini 2.5 flash,Gemini 2.0 O。呃,所以如果你想要你自己的深度研究,那可能是最好的开始方式。是的。所以,所以 Google 搜索有额外的定价。我们两分钟前就有了。基本上,1500 次搜索是免费的。如果你使用原生工具,那么它会花费金钱。而所有这些工具在某种程度上都丰富了你的上下文。所以如果你使用 URL 上下文工具,它会访问一个博客文章,而博客文章有 10000 个 token,你为这 10000 个 token 付费,因为它包含在你的提示中,然后它会尝试回答你的问题。对于,呃,函数调用,它有点不同。当然,我们生成 token,但,呃,结构化输出的 token 较少。而你在一边进行函数调用或,呃,Python 调用。是的,这绝对是一个好问题。所以函数调用当然是比一个工具多得多,而且永远不会调用天气 API,因为我的意思是,我们有天气应用程序,对吧?但这是一个很好的例子来展示。但非常酷的是,呃,有并行函数调用。所以,我们又回到了 Gemini 文档。假设你想开派对,你有一个函数来,呃,启动你的迪斯科球,启动音乐,调暗灯光。如果你想说,好的,让我们进入派对模式,你会期望所有这些同时开始。而,呃,使用 Gemini,我们有并行工具调用。所以基本上 Gemini 会做的不是生成一个,呃,对象作为输出,而是生成一个列表,基本上包含所有你需要调用的函数的三个对象。然后你迭代,呃,遍历它们并调用它们。并行工具调用在工具的输入和输出不相互依赖的情况下工作。对吧?我可以同时启动我的迪斯科球和音乐,而不是,好的,我首先需要启动我的迪斯科球,如果它运行了,我就可以,呃,启动音乐。呃,如果你有更多的顺序工具调用,基本上你需要第一个函数的输入,呃,抱歉,你需要第二个函数的输入。基本上,如果你,我不知道,你有一个某种智能家居系统,你想根据,呃,外部天气来设置温度。你首先需要查看天气,然后,呃,设置你家里的温度。在这里,你基本上会通过系统提示向你的模型提供指令,告诉它,好的,要改变天气,你首先需要查找天气,然后设置温度。而 Gemini 会做的,基本上,你有你的用户提示,它生成函数,呃,结构化函数,你调用函数。而不是生成用户友好的回应,它生成另一个函数调用,然后你可以调用它。所以基本上它会继续这个函数调用循环,然后生成一个非常好的用户友好的输出。是的,有点。我的意思是,我可以,呃,所以,我放了一个例子,呃,关于顺序,呃,函数调用。呃,有多个函数调用,有些是顺序的,有些是工作流。是的。所以目前没有好的方法来处理,呃,可能超时的函数。或者最好的方法。所以,呃,我可以说,并行调用就像,你需要等待所有结果才能进入下一个。如果一个花费的时间更长,你可以提供一个错误消息,或者还没有准备好,或者其他什么。但你需要,呃,探索它在实时 API 上如何工作,这基本上是我们创建实时代理的方式。他们正在研究一种叫做异步函数调用的东西,呃,对话会继续。所以当你想到一个客户支持代理,你和它交谈,对吧?如果代理停止三分钟,不说什么,因为它需要查找你的信息,那将是非常奇怪的。所以这就是他们所说的异步函数调用。所以你可以继续与代理的对话,但代理运行一个工具调用,然后,呃,稍后注入响应。但那只适用于实时 API。是的。所以,呃,文档实时 API,呃,它在,我认为是在 IO 或 Cloud Next 上发布的。所以,是的,那里你有,呃,工具使用实时 API,并且有异步函数调用,呃,带有 Python 和 JavaScript 的代码片段。酷。是的。不,它更像是,我现在开始一个函数调用。我需要继续我的对话。我稍后会收到响应。所以而不是收到响应,你收到的是,是的,你从模型那里收到的可能是,例如,中断或计划,这样你作为开发者就知道,好的,我开始了一些事情,模型知道它开始了一些事情,然后你可以在你的函数输出准备好后,将其注入到对话中,然后模型使用该信息继续。嗯,所以在 AI Studio 中我们没有这样的功能。但你可以,呃,使用第三方工具,比如 Lang 或 Arise AI Phoenix,但 Vortex AI 支持这些功能。好的。是的,那是问题。是的。是的,我不知道。我唯一知道的是,所以以前只有 Gemini 2.0 flash 在实时 API 中可用。但现在我们有了 Gemini 2.5 flash。所以基本上,我们在,呃,Jupyter 笔记本中使用的模型。我认为你必须尝试,或者也许,呃,联系那些更熟悉它的人。好的,更多问题。是的。所以 URL 上下文 r 工具基本上是根据你提供的链接工作的。所以,如果你提供你自己的个人博客,它会访问那个链接并尝试提取信息并将其用于上下文。而搜索基本上使用 Google 搜索,根据提示创建一到多个搜索查询,然后将输出提供到你的提示中。所以,如果你已经知道你的提示的来源在哪里,以创建最佳答案,那么 URL 上下文可能是一个很好的用例。我不知道。你指的是付费墙内容吗?你的意思是页面吗?我不知道。我不会期望它被,呃,但实时 API 支持函数调用。所以如果你有订阅或,呃,访问付费内容的方式,你可以创建自己的函数,模型可以调用它并将其用作其,呃,信息的上下文。好的,酷。那么最后一节,我想你们每个人可能都听说过模型上下文协议,那就是,呃,我们如何就如何调用代理达成一致,或者,呃,什么是正确的事情。我非常喜欢它。呃,我认为它使人们更容易构建代理,特别是如果我们获得更多第一方远程 MCP 服务器,呃,在那里你可以专注于构建你的代理,而不是创建所有这些函数。我的意思是,我敢肯定,现在有数百万个 get weather 函数可以被使用,我希望通过,呃,MCP 我们可以,呃,解决这个问题。我们,呃,在 Google IO 上发布和宣布的是,呃,MCP 服务器在 Google geni SDK 中的原生集成。所以我们整个研讨会使用的 SDK,允许我们直接使用 MCP 服务器和会话,这使得我们所有人更容易集成它。所以当我们,呃,回顾我们的函数调用示例时,我们需要调用函数,创建声明,以及所有这些不同的事情。而现在有了 MCP,呃,集成,我们可以基本上,呃,只启动或初始化我们的客户端。我创建了一个 MCP weather service,它具有相同的功能。而,呃,我们现在需要做的所有事情是,呃,我们使用我们的 generate content 方法,在我们的工具参数中,我们提供我们的会话。所以我们启动我们的服务器,我们创建我们的会话,我们将该会话提供给,呃,Gemini SDK。然后后台发生的事情基本上是我们手动完成的相同的函数调用循环。就像,好的,有哪些工具可用?从 MCP 服务器获取所有工具,将它们放入 LLM 调用中。如果 LLM 调用进行函数调用,提取函数调用,调用 MCP 服务器,从 MCP 服务器获取响应,将其放回我们的对话中,让模型生成最终回应。呃,我想,呃,可能是时候找出 Collab 是否安装了 node,并看看它是否有效了。好的。好的。它没有。我可以做的是,我可以快速在本地设置它,并在几秒钟内向你展示它是如何工作的。好的。好的。所以,我们回来了。我在光标中。相同的笔记本,相同的设置。而现在我可以,呃,使用它了。而现在基本上发生的是,如果我,让我们不要问伦敦,对吧?我们在旧金山。呃,让我们问一下旧金山的天气。它现在在后台进行所有,呃,不同的函数调用和循环。MCP 服务器非常简单。它使用开放的 Meteor API,它在小规模测试时基本上是免费使用的。呃,所以我们生成输出,运行所有 MCP 调用,API 调用可能需要一点时间,然后我们得到回应,好的,旧金山今天的天气将是 70 摄氏度,零度,然后所有其他数字。而这基本上就是你现在需要做的,将 MCP 服务器与 Gemini SDK 结合起来,呃,我的意思是,它适合一个屏幕,呃,足够容易让你开始。我们在这里使用,呃,本地运行的 MCP 服务器,但它与远程 MCP 服务器的工作方式相同。呃,这也是,呃,本次研讨会这一部分的练习。所以基本上,来自 Cognition AI 的 deep Viki 的 hinder Devon,他们有一个非常好的远程 MCP 服务器,呃,可以与 GitHub 存储库通信。所以,而不是,呃,创建一个 sitio 客户端,你可以使用 streamable HTTP 客户端并连接一个远程 MCP 服务器到 Gemini 来与之通信。而,呃,是的,基本上受益于目前 AI 领域正在发生的进步之一。我们还有更多问题吗?是的,是的。所以 ADK 是,呃,对于你们不知道的人来说,它是代理开发工具包。它是一个,呃,代理库,它在,呃,我们使用的客户端 SDK 之上增加了更多的抽象。它使得所有工具调用都更容易。呃,集成了 MCP 服务器,也使得管理多个代理或将其部署到云端更加容易。所以它有很多,呃,我可以说,开箱即用的功能。问题再次取决于你,如果你想使用,呃,框架,或者更喜欢自己构建。我看到使用代理框架的优势在于可以快速入门,但你添加的抽象越多,对吧?你第一次了解的就越少,然后也许你需要在以后深入挖掘。而你在开始时获得的所有进步或速度将是你未来的减速带。但 ADK 绝对是一个很好的开始方式。它们也有大量的例子。它支持 Gemini 和 Gemini API。所以绝对是一个值得一看的好方法。是的。嗯,不,我认为不是。呃,但你可以用 YouTube 链接或 YouTube 视频做的是,我们可以要求它为你返回时间戳作为回应,而且效果非常好。所以它非常准确,因为,基本上一个视频就是一个接一个的图像,对吧?而目前,呃,当我们处理视频时,它将以每秒一帧的速度进行,你总是会有,呃,时间戳,图像,时间戳,图像。这就是 Gemini 精确知道视频中什么地方,我不知道,一个人在跳舞或跳舞等等。它正在分析每秒一帧。是的。这取决于你的,我的意思是,我们可以,我的意思是,这是本节的一部分。我一直都在用。酷。酷。是的。但是的,基本上视频发生的事情是,我的意思是,视频是每秒 24 帧或更多。这很容易让上下文爆炸。所以目前所做的是,我们每秒一帧。所以如果你有 60 秒,那就是 60 张图像。这也使得计算 token 数量很容易。这也是我们如何将,呃,一个小时长的视频放入一百万个 token。基本上使用 YouTube 的字幕或不,它是完全多模态的。不,我的意思是,你可以,呃,轻松上传普通的.mpp4 MP4 文件,你可以问它,呃,视频中说了什么。好的,酷。是的。是的。所以我也,也许对你来说,如果你不知道,内存基本上是与工具一起使代理成为代理的东西。而对于内存,我们有短期记忆和长期记忆。短期记忆基本上是你的对话,它是你与代理交谈时当前状态的一部分。而长期记忆基本上是关于之前的交互或关于用户的信息。而长期记忆不是,呃,LLM 的一部分,我们需要外部提供。而 me zero 是我查看过的东西,因为它非常好。它隐式地完成了。所以基本上它会获取对话并尝试为你创建一个很好的抽象,你可以将其包含在内。我不确定目前的状况如何,或者什么与 Gemini 配合得很好。我,呃,我总是看到,或者 Gemini 真正闪耀的地方是长上下文。所以你的信息提取越好,以及你根据记忆提供给模型的,我认为它工作得很好。不确定那些工具调用记忆系统。是的。是的。所以我们正在开发 200 万。不确定何时普遍可用,但,是的,呃,那里有研究,但你知道,你越大,你就越贵。你想支付每 100 万 token 50 美元吗?是的。更多问题,还是大家都在工作?是的。那么在函数之前。是的。是的。不。所以 MCP 现在和我们以前的区别是,我们不需要编写和定义函数以及函数声明。LLM 最终看到的是完全相同的东西。所以,如果我手动创建我的函数声明,使用 JSON schema,或者如果我从 MCP 服务器检索它们,这些对 LLM 来说都是相同的东西。它只是让不重写相同的功能变得容易得多。对吧?如果你在一个公司工作,你想集成你内部的 API,很有可能两个团队会编写相同的函数声明和相同的包装器来调用它。而这里的想法是只有一个团队需要编写它,每个人都可以从中受益。与公共 API 如 Google Maps、G Drive 也是如此。所以 MCP 为我们提供了一种协作创建最佳或,呃,标准调用方式的方法,然后每个人都可以,呃,实现他们需要的 MCP 工具,以满足你的用例。所以一个 MCP 服务器,例如,暴露四个工具。你将所有这四个输入模式提供给你的 LLM 调用,这些模式是带有名称、描述和参数的函数声明。然后根据提示和这些声明,LLM,在这种情况下是 Gemini,决定它是否应该调用一个工具,可以调用哪个工具,或者它应该调用多个工具。而这就是我们对正常函数调用所拥有的相同逻辑。所以在这方面没有区别。唯一的区别是 MCP 服务器很容易获得或实现许多工具,人们开始非常容易地添加多少工具,对吧?所以我们看到人们添加 50 到 100 个工具。所以我们需要改进我们的 LLM,以便它们能够真正知道,好的,当有 50 个不同的工具可用时,哪个是正确的工具。所以有 ADK 与 A2A 配合的例子。所以 A2A 代表代理到代理协议,这是由 Google Cloud 团队完成的。这里的想法是,允许公司在不同的框架中构建代理,如 lench chain、langcraft、llama index,然后有一个简单的方法来创建多代理系统,一个代理可以调用另一个代理,而无需实现复杂的逻辑。但 Gemini SDK 不是直接的,但有很好的例子。酷。是的。所以我们正在开发基本上是浏览器使用或计算机使用用例,目前处于预览阶段。我们目前正在与一些公司进行测试。这将允许 Gemini 控制 UI,所以它可以去任何你想让它去的网站。然后有,呃,URL 上下文工具,你可以提供一个网站,我们将以编程方式尝试从中提取信息。当然,这是一个,如果它是一个非常重的 JavaScript 网站,就没有多少可以提取的。那就是,呃,浏览器使用代理将是有用的。是的,有点。是的,希望很快。所以它将再次返回结构化输出,基于你提供的内容。所以你可以控制本地环境,但我们也与 cloudr run 团队合作,使其对你运行非常容易。所以你可以,呃,在 cloudr run 上运行一个 chrome 实例,Gemini 可以与之通信和控制,或者你可以,呃,控制一个本地实例。是的,是的,进行身份验证,这是一个好问题。我认为整个行业目前都在试图回答,呃,处理代理身份验证的最佳方法是什么。所以 MCP,呃,作为协议本身支持 OO off。所以基本上,当你想要连接到一个受保护的 MCP 服务器时,你会得到一个 403,表示未授权,这可以触发你客户端上的一个 off 流。也许你在 claw desktop 中看到过,你会弹出一个窗口,让你登录,我不知道,用你的,呃,atena 账户或什么。所以这是一种方法,但它确实需要更多工作,对吧?你想让你的代理访问你所有的电子邮件或你所有的 GitHub 存储库,或者你如何,呃,将其范围缩小到只一个特定的存储库?但他们目前正在积极地进行这项工作。我知道 zero 明天也会在这里。这些人非常适合交谈。我认为我知道他们在那里做了很多工作。所以,是的。你的意思是,呃,当你在发送一个常规提示时引用,或者当你使用 Google 搜索并有引用时引用?是的。所以这在,呃,Google 搜索工具中可用。它有关于使用了哪个网站来检索信息的信息。你可以,呃,直接点击链接查看你到达的地方。然后有这个,呃,元数据或,呃,分块或,呃,加冕支持,它基本上有一个开始索引和一个结束索引,来自答案,然后还有使用了哪些来源。所以你可以在技术上突出显示或在后面加上数字,以帮助用户理解,好的,回应的这部分是基于这两个,呃,链接生成的。你的意思是,一般来说,有时有引用元数据,或者你指的是哪个引用数据?好的,我知道,我只知道这是,呃,法律和,呃,培训的一部分,如果有什么东西被直接引用,你需要,呃,提供它。这就是它存在的原因。这就是它并不总是存在的原因。它可以存在,但它不一定存在,而且它不是为了用户,嘿,这是来自那里,但它更多的是,呃,合规性,基本上为什么我们需要它。我只知道,呃,网络搜索功能。啊,好的。所以你提供,作为上下文,呃,一个文档。好的。是的。不,这是一个非常好的问题。目前,我们没有,呃,与 Entropic 相同的体验。我认为,呃,基础是,呃,真正尝试,呃,不同的提示策略和,呃,你想要实现什么。是的。不,但这是,呃,好的,好的反馈。可惜,还没有。我希望有一天,你就可以,呃,这里是 Gmail,这里是 Drive,让我们聊天。但目前没有公开的远程 MCP 服务器。我不知道确切的原因。我认为问的人越多,越容易得到。所以,如果你喜欢,这是很好的反馈。更多的人,呃,MCP 服务器使用越多,机会就越大。我认为总的来说,为了让 MCP 成功,我们需要更多的第一方远程服务器,对吧?因为我们不能构建一个安全的 GitHub MCP 服务器,这是 GitHub 需要做的事情,因为他们知道他们的 off 系统是如何工作的,如何进行范围界定。所以我们真的需要那些第一方的 MCP 服务器,长期来看,对于 AI 模式。我不知道。我认为,呃,所以 AI 模式,你的意思是关于,呃,在 Google 搜索内部?我认为总的来说,对于,呃,正常的 Google 搜索也是如此,就是拥有高质量的内容,呃,尝试坚持,呃,网络标准。我认为这里也一样,但我不知道。抱歉。是的。它应该。所以如果你上传了一个 PDF,你需要确保你把 PDF 放在你提示的第一部分。所以你,呃,自动,呃,缓存是从头到尾工作的,对吧?如果你改变开头,你永远无法缓存,呃,长文档。但如果你把,呃,PDF 放在开头,然后改变后面的提示,它应该可以工作。是的。是的。有时会出现索引超出范围的情况,我很好奇你是否有类似的经历。不,但如果你,呃,有一个例子让我们重现并分享,那将非常有帮助。我唯一知道的是,所以有时可能会有一个开始索引,它可以是空的,基本上意味着它是零,就像它从头开始一样。是的。不,如果你有一个例子,请,呃,在 Twitter 或其他地方发给我,好吧,那将非常有帮助,因为那不应该发生。是的。有没有办法真正获得,呃,来自它引用的网站的引用?所以你只得到网站。你只得到,是的。不,呃,所以目前你得到,呃,开始和结束的响应,它引用了某些东西,但不是网络部分。但这就像,呃,请把所有东西都放在一起,然后,呃,发给我们,我们非常乐意,呃,与负责构建原生工具的 Google 搜索团队交谈。呃,是的,非常有帮助,以更好地理解,呃,你需要什么。好的,酷。那么,感谢所有人的到来。呃,请继续研讨会。尝试一下。如果你有,呃,任何问题,我们非常乐意收到任何积极的、消极的反馈、任何想法、你遇到的任何痛点。我们可以在,呃,社交渠道上找到。你可以找到我 Philip Schmeid,基本上到处都是。如果不是,我们就打开一个 GitHub issue,或者当有什么东西不起作用时,非常大声地抱怨。我们总是努力确保我们能解决它。酷。谢谢,[音乐]