AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


智能体白皮书(Google)
发布日期:2025-01-17 08:00:33 浏览次数: 1547 来源:苏哲管理咨询


致谢


审稿人和贡献者 黄益凡 Emily Xue Olcan Sercinoglu Sebastian Riedel Satinder Baveja安东尼奥·古利 安南特·纳瓦尔加里亚

策展人和编辑们


安东尼奥·古利 艾南特·纳瓦尔加利亚 Grace Mollison


技术撰写人员 Joey Haymaker


设计师


迈克尔·兰宁


这种推理、逻辑和对外部信息的获取的结合,都与生成式AI模型联系在一起,这引发了一个智能体的概念(This combination of reasoning, logic, and access to external information that are all connected to a Generative AI model invokes the concept of an agent.

编者摘要关于智能体各家厂家均有介绍和白皮书,包括微软,Anthropic,吴恩达、LangChain等等。从逻辑的视角,谷歌的这个Agent白皮书介绍比较全面和深入,厨师做菜的比喻比较恰当。智能体包含三大组件:基础模型、编排、工具。智能体运行环境包括基础模型及编排(含基础信息,目标,指令,记忆、规划、推理),编排是智能体的核心,也是智能体的认知架构,其思维模式包括ReAct,COT,TOT等,编排负责控制智能体的循环即从开始和终止。智能体第三个组件是工具,工具包括扩展、函数调用以及数据存储。

目录


1简介


1.1什么是智能体?


1.2模型


1.2.1工具


1.2.2编排层


1.3智能体 vs.模型


1.3.1模型智能体


1.4认知架构:智能体者如何运作


2工具:我们通往外部世界的钥匙


2.1扩展


2.2扩展样例


2.3函数


2.4应用案例


2.5功能示例代码


2.6数据存储


2.7实施和应用


2.8工具回顾


3提升模型性能的关键学习


4LANGCHAIN的AGENT快速入门


5使用 VERTEX AI智能体的生产应用程序


6总结


尾注


1 简介


人类在混乱的模式识别任务上表现出色。然而,在得出结论之前,他们通常依赖工具-如书籍、Google搜索或计算器-来补充他们的先验知识。就像人类一样,生成式人工智能模型可以被训练使用工具来访问实时信息或建议现实世界的行动。


例如,一个模型可以利用数据库检索工具来访问特定信息,比如客户的购买历史,从而生成定制的购物推荐。


另外,基于用户的查询,模型可以发出各种API调用,以代表您向同事发送邮件回复或完成金融交易。为此,模型不仅需要访问一组外部工具,还需要以自主的方式规划和执行任何任务。这种推理、逻辑和与生成式人工智能模型相关的外部信息访问的组合,引发了智能体的概念,即一个程序将超越生成式人工智能模型的独立能力。本白皮书将更详细地探讨所有这些及相关方面


1.1 什么是智能体?


在其最基本的形式中,生成式人工智能智能体可以被定义为一种应用程序,通过观察世界并利用其所拥有的工具对其进行行动,以实现目标。智能体是自主的,并且可以在没有人类干预的情况下独立行动,特别是当它们被提供了要实现的目标或目标时。智能体也可以积极主动地努力实现其目标。即使在没有来自人类的明确指令集的情况下,智能体也可以推理出下一步应该做什么来实现其最终目标。虽然AI中的智能体的概念非常普遍和强大,但本白皮书侧重于发布时生成式AI模型能够构建的特定类型的智能体。


为了理解智能体人的内部运作原理,让我们首先介绍驱动智能体人行为、动作和决策的基本组件这些组件的组合可以被描述为一个认知架构,通过组件的混合和匹配可以实现很多这样的架构。关注核心功能,一个智能体人的认知架构中有三个必要的组件如图1所示。

1.2 模型


在一个智能体程序的范围内,模型是指将作为集中决策者用于智能体进程的语言模型(LM)。智能体程序使用的模型可以是一个或多个大小不限(小/大)的LM能够遵循基于指令的推理和逻辑框架,如ReActChain-of-ThoughtTree-of-Thoughts。模型可以是通用型、多模态的,也可以根据特定智能体体系结构的需求进行微调。为了获得最佳的生产结果,您应该利用最适合您期望的最终应用程序的模型,并且最好是在与您计划在认知体系架构中使用的工具相关的数据签名上进行了训练。需要注意的是,模型通常不是使用智能体程序的特定配置设置(即工具选择、编排/推理设置)进行训练的。然而,通过提供展示智能体程序能力的示例,包括智能体程序在不同情境中使用特定工具或推理步骤的实例,可以进一步完善智能体任务的模型。


1.2.1 工具


基础模型,尽管在文本和图像生成方面表现出色,但仍受限于无法与外部世界进行互动工具弥合了这一差距,赋予智能体能力与外部数据和服务交互,从而拓展了基础模型本身的行动范围。工具可以采用各种形式,复杂程度也不同,但通常与常见的Web API方法(如GETPOSTPATCHDELETE)相一致。例如,一个工具可以更新数据库中的客户信息,或获取天气数据来影响智能体向用户提供的旅行建议。借助工具,智能体可以访问和处理真实世界的信息。这使它们能够支持更专业的系统,如检索增强生成(RAG),显著扩展了智能体的能力,超越了基础模型本身的可能。我们将在下文更详细地讨论工具,但最重要的理解是,工具弥合了智能体内部能力与外部世界之间的差距,拓展了更广泛的可能性。


1.2.2 编排层


编排层描述了一个循环过程,指导智能体程序如何获取信息,进行内部推理,然后利用这种推理来指导其下一个动作或决策。一般来说,这个循环将持续进行,直到智能体程序达到其目标或一个停止点。编排层的复杂性可以根据智能体程序和执行的任务而有很大的变化。有些循环可能是简单的计算与决策规则,而另一些可能包含链接逻辑、涉及额外机器学习算法,或者实现其他概率推理技术。我们将在认知架构部分更详细地讨论智能体程序编排层的实现。


1.3 智能体 vs.模型


为了更清晰地理解智能体人和模型之间的区别,请考虑以下图表:


1.3.1模型智能体


模型知识的范围仅限于其所提供的内容,知识通过连接而得到扩展。


使用工具通过与外部系统的培训数据进行交互。

基于被管理的会话历史(即聊天记录)对用户查询进行单一推理/预测。除非明确实现了基于模型的多轮推理/预测用于允许对用户查询和历史或持续上下文中做出的决定进行管理(即聊天记录)的编排层。在这种上下文中,一个


根据与互动系统和智能体之间的互动定义。 (即1个传入事件/查询和1个智能体响应)无本地工具实施。工具是在智能体体系结构中本地实现的。

未实现本地逻辑层。用户可以使用本地认知架构,通过简单问题形式的提示或使用CoTReAct等已构建的推理框架(CoTReAct等)或智能体框架如LangChain,形成复杂提示来引导模型进行预测。

1.4 认知架构:智能体者如何运作


想象一位在繁忙厨房里工作的厨师。他们的目标是为餐厅顾客制作美味的菜肴,这涉及到一些规划、执行和调整的周期。


他们收集信息,比如顾客的订单以及厨房的食材和冰箱里的食材。


根据他们刚刚收集到的信息,他们会对可以创建哪些菜肴和风味进行一些内部推理。


他们采取行动来制作这道菜:切菜、混合香料、煎肉。


在整个过程的每个阶段,厨师根据需要进行调整,随着原材料的消耗或客户反馈的接收而不断完善他们的计划,并使用先前的结果集确定下一个行动计划。这种信息输入、规划、执行和调整的循环描述了厨师为达到目标而采用的独特认知架构。


就像厨师一样,智能体可以使用认知架构来通过迭代处理信息、做出明智决策,并根据先前的输出来完善下一步行动,从而实现最终目标。在智能体认知架构的核心是编排层,负责维护记忆、状态、推理和规划。它利用快速发展的提示工程领域和相关框架来引导推理和规划,使智能体能够更有效地与环境互动并完成任务。提示工程框架和语言模型任务规划领域的研究正在快速发展,产生了多种有前景的方法。虽然不是穷尽列表,在本文发布时,以下是一些最受欢迎的框架和推理技术:


1.ReAct是一个快速工程框架,为语言模型提供了一种思维过程策略,使其能够推理并采取行动来处理用户查询,无论是否有上下文示例ReAct提示已显示出优于几种最先进基线模型,并提高了大型语言模型的人机互操作性和可信度。


2.思维链(CoT),是一种通过中间步骤实现推理能力的提示工程框架CoT的各种子技术包括自一致性、主动提示和多模态CoT,每种技术都有其优缺点,具体应用取决于特定情况。


3.思维树(ToT)是一个很适合用于探索或战略前瞻任务的提示工程框架。它泛化了思维链提示,并允许模型探索各种思维链,这些思维链可以作为语言模型通用问题解决的中间步骤。


智能体可以利用以上任一推理技术,或许多其他技术,为给定用户请求选择下一步最佳行动。例如,让我们考虑一个智能体程序,它被编程为使用ReAct框架选择正确的行动和工具来处理用户查询。事件序列可能会像这样:用户向智能体发送查询。

4.Agent开始执行ReAct序列。


5.该智能体程序提供提示给模型,要求其生成下一个ReAct步骤及相应的输出:


l用户问题:提供的提示来自用户查询的输入问题。


l思考:模型对接下来该做什么的想法


l行动:模型对下一步要采取的行动进行决策。


工具选择发生在这里例如,一个动作可以是[航班、搜索、代码、无]中的一个,前三个代表模型可以选择的已知工具,最后一个代表无工具选择

1.行动输入:模型决定向工具提供什么输入(如果有的话)。

2.观察:动作/行为输入序列的结果。此思考/行动/行动输入/观察可以重复N次,按需使用。

3.最终答案:模型对原始用户查询提供的最终答案为4ReAct循环结束并将最终答案返回给用户。

2.在编排层中具有ReAct推理的示例智能体


如图2所示,模型、工具和智能体配置共同合作,根据用户的原始查询为用户提供基于真实世界的简明回复。虽然模型可能根据其先前知识猜测答案(幻觉),但它却使用了一个工具(航班)来搜索实时外部信息。这些额外的信息被提供给模型,使其能够基于真实的事实数据做出更明智的决定,并将这些信息总结后返回给用户。


总结一下,智能体的响应质量可以直接与模型在处理这些不同任务中的推理和行为能力相关联,包括选择适当的工具的能力以及这些工具的良好定义程度就像一位厨师用新鲜的食材和对顾客反馈的关注来制作菜肴一样,智能体依靠合理的推理和可靠的信息来提供最佳结果。在下一节中,我们将深入探讨智能体与新鲜数据连接的各种方式。


2 工具:我们通往外部世界的钥匙


语言模型擅长处理信息,但缺乏直接感知和影响现实世界的能力。这限制了它们在需要与外部系统或数据进行交互的情况下的有用性。从某种意义上讲,语言模型只有在从训练数据中学到的东西有用时才是有效的。但无论我们向模型提供多少数据,它们仍然缺乏与外部世界交互的基本能力。那么,我们如何赋予我们的模型与外部系统进行实时、上下文感知的交互能力呢?函数、扩展、数据存储和插件都是向模型提供这种关键能力的方法。


虽然它们有很多名字,但工具是我们的基础模型和外部世界之间建立联系的桥梁。这种与外部系统和数据的联系使我们的智能体能够执行更多种类的任务,并且更准确、可靠地完成。例如,工具可以使智能体调整智能家居设置,更新日历,从数据库中获取用户信息,或根据特定指令发送电子邮件。


截至本发布日期,Google模型能够与三种主要工具类型进行交互:扩展、函数和数据存储。通过为智能体人配备工具,我们为他们开启了广阔的潜力,不仅可以理解世界,还可以对其进行行动,为无数新应用和可能性打开了大门。


2.1 扩展

扩展最简单的理解方式是将它们看作是以标准化的方式在API和智能体之间架起桥梁,使智能体能够无缝执行API,而不受其基础实现的影响。假设您已经构建了一个旨在帮助用户预订航班的智能体。您知道您想要使用Google Flights API来检索航班信息,但您不确定如何让您的智能体调用这个API端点。


3.智能体如何与外部API交互?


一种方法是实现自定义代码,该代码将接收用户查询,解析相关信息,然后调用API例如,在航班预订的用例中,用户可能会说我想预订从奥斯汀到苏黎世的航班。在这种情况下,我们的自定义代码解决方案需要从用户查询中提取奥斯汀苏黎世作为相关实体,然后再尝试调用API。但是,如果用户说我要预订去苏黎世的航班却没有提供出发城市,API调用将因缺少必要数据而失败,需要实现更多代码来捕捉这种边缘情况。这种方法不具备可伸缩性,很容易在超出已实施的自定义代码范围的情景中出现故障。


4.扩展将智能体连接到外部API


一个更为弹性的方法是使用扩展。扩展通过以下方式弥合智能体和API之间的差距:


教导智能体如何使用API端点的示例。


教导智能体程序如何成功调用API端点所需的参数或参数。


扩展可以独立于Agent进行编制,但应作为Agent配置的一部分提供。该Agent在运行时使用模型和示例来决定哪个扩展(如果有)适合解决用户的查询。这突显了扩展的一个关键优势,即内置的示例类型,使Agent能够动态选择最适合任务的扩展。



5.智能体、扩展和API之间的一对多关系


将这种情况视为软件开发人员在解决用户问题时决定使用哪些API端点的方式。如果用户想要预订飞机票,开发人员可能会使用Google Flights API。如果用户想知道相对于他们的位置最近的咖啡店在哪里,开发人员可能会使用Google Maps API。以同样的方式,智能体/模型堆栈使用一组已知的扩展来决定哪一个适合用户的查询。如果您想看到扩展功能的效果,可以在Gemini应用程序上尝试它们,方法是转到 设置>扩展,然后启用您想要测试的任何扩展。例如,您可以启用Google Flights扩展,然后询问Gemini“显示从奥斯汀到苏黎世下周五起飞的航班


2.2扩展样例


为了简化扩展的使用,Google提供了一些开箱即用的扩展,可以快速导入到您的项目中,只需进行最少的配置即可使用。例如,在片段1中,Code Interpreter扩展允许您从自然语言描述中生成和运行Python代码。




代码解释器扩展能够生成和运行Python代码。


概括而言,扩展提供了一种方法,使智能体能够以各种方式感知、互动和影响外部世界。选择和调用这些扩展是通过使用示例来指导的,所有这些示例都被定义为扩展配置的一部分。


2.3 函数


在软件工程领域,函数被定义为完成特定任务并可根据需要重复使用的自包含代码模块。当软件开发人员编写程序时,他们通常会创建许多函数来执行各种任务。他们还会定义何时调用函数A与函数B的逻辑,以及预期的输入和输出。


在智能体世界中,函数的工作方式与原来类似,但我们可以用模型来替代软件开发者。模型可以根据函数的规范,选择何时使用每个函数以及每个函数需要什么参数。函数与扩展有一些不同之处,最主要的是:


l一个模型输出一个函数及其参数,但不进行实时的API调用。


l函数在客户端执行,而扩展在智能体端执行。


使用我们之前提到的Google Flights为例,函数的简单设置可能看起来像图7中的示例。


注意,这里的主要区别在于,无论是功能还是智能体,都不会直接与谷歌航班API进行交互。那么API调用实际上是如何发生的呢?


使用函数后,调用实际API端点的逻辑和执行被从智能体移交到客户端应用程序,如下图8和图9所示。


7.函数如何与外部API交互?


这为开发人员提供了对应用程序中数据流的更精细控制。开发人员选择使用函数而不是扩展的原因有很多,但一些常见的用例包括:


1.API调用需要在应用程序堆栈的另一层进行,位于直接智能体架构流之外(例如中间件系统、前端框架等)。


2.阻止智能体直接调用API的安全或身份验证限制。API未暴露到互联网上,或者不被智能体基础设施访问。


3.定时或操作顺序约束,阻止智能体程序实时进行API调用。 (例如:批量操作,人工审核等)。API响应中需要应用额外的数据转换逻辑,而智能体无法执行这些操作。例如,考虑一个API端点,它不提供筛选机制来限制返回结果的数量。在客户端使用函数为开发人员提供了额外的机会进行这些转换。


4.开发人员希望在不部署额外基础设施的情况下迭代智能体开发,即函数调用可以充当API存根


两种方法之间内部架构的差异如图8所示微妙,但是对外部基础设施的额外控制和解耦依赖,使得函数调用对开发人员是一个吸引人的选择。


8.描述扩展和函数调用的客户端与智能体端控制


2.4 应用案例


一个模型可以被用来调用函数,以处理复杂的、客户端执行流程,让最终用户能够执行,其中智能体开发者可能不希望语言模型来管理API执行(就像扩展的情况)。让我们考虑以下示例,一个智能体正在被训练成为一名旅行顾问,与想要预订度假旅行的用户进行交互。目标是让智能体生成一个城市列表,我们可以在中间件应用程序中使用这些城市,为用户的旅行计划下载图片、数据等。一个用户可能会说:"一个人可以通过创建任务结构来触发函数,以处理复杂的客户端执行流程,最终用户在这里禁要语言模型来管理API执行(就像扩展的情况)。 让我们考虑下面的例子,一名智能体正在被训练成为一名旅行服务顾问,与希望预订度假旅行的用户进行交互。 目标是让智能体生成城市列表,我们可以在中间件应用程序中使用这些城市,为用户的旅行计划下载图片、数据等。 一个用户可能会说:"


-我想和家人去滑雪,但不确定去哪里。


在通常的提示模型中,输出可能类似如下:


当然,这里是您可以考虑作为家庭滑雪之旅目的地的城市列表:


-科雷斯特巴特,科罗拉多,美国


-温哥华,加拿大


-瑞士楚格曼峰


虽然上述输出包含我们所需的数据(城市名称),但其格式并不理想用于解析。通过函数调用,我们可以教导一个模型将这个输出格式化为一个结构化风格(如JSON),这样另一个系统就更方便解析。对于用户给出的相同输入提示,一个函数的示例JSON输出可能看起来像片段5



Snippet 5. Sample Function Call payload用于显示城市列表和用户偏好。


这个JSON负载是由模型生成的,然后发送到我们的客户端服务器,以便我们可以根据需要对其进行操作。在这种特定情况下,我们将调用Google Places API来获取模型提供的城市信息,并查找图片,然后将它们作为格式化的丰富内容返回给用户。请参考图9中显示的这个交互步骤详细说明的顺序图。


9.展示函数调用的生命周期的顺序图。


9中的示例结果是,模型被利用来填充空白,使用所需的参数为客户端UI调用Google Places API。客户端UI使用模型在返回的函数中提供的参数来管理实际的API调用。这仅仅是函数调用的一个用例,但还有许多其他需要考虑的场景,比如:


想要一个语言模型建议一个可以在您的代码中使用的函数,但您不想在代码中包含凭据。因为函数调用不会执行函数,所以您不需要在代码中包含函数信息中的凭据。


你正在运行可能需要超过几秒钟的异步操作。这些情景很适合使用函数调用,因为它是异步操作。


你想在一个与生成函数调用及其参数的系统不同的设备上运行函数。


函数的一个关键要点是,它们旨在为开发人员提供更多的控制,不仅能够控制API调用的执行,还能控制整个应用程序中数据的流向。在图9中的示例中,开发人员选择不将API信息返回给智能体,因为这对智能体可能采取的未来操作并不重要。然而,根据应用程序的架构,将外部API调用数据返回给智能体可能会对未来的推理、逻辑和行动选择产生影响。最终,选择什么对于特定应用程序来说是正确的取决于应用程序开发人员。


2.5函数示例代码


为了实现从我们的滑雪假期场景中获得上述输出,让我们构建出每个组件,使其可以与我们的gemini-1.5-flash-001模型配合使用。


首先,我们将定义我们的display_cities函数作为一个简单的Python方法。


示例6.一个用于显示城市列表的Python方法的样本。


接下来,我们将实例化我们的模型,构建工具,然后将用户的查询和工具传递给模型。执行下面的代码将会得到代码片段底部所示的输出。


Python


from vertexai.generative_models import GenerativeModel, Tool, FunctionDeclaration model = GenerativeModel("gemini-1.5-flash-001")


display_cities_function = FunctionDeclaration.from_func(display_cities) tool = Tool(function_declarations=[display_cities_function])


"我想和我的家人去滑雪,但我不确定去哪里。" res = model.generate_content(message, tools=[tool])


print(f"函数名称:{res.candidates[0].content.parts[0].function_call.name}") print(f"函数参数:{res.candidates[0].content.parts[0].function_call.args}")


函数名称:display_cities


参数函数:{'喜好': '滑雪', '城市': ['阿斯彭', '瓦尔']}


'Park City']} --> 帕克城'



片段6.将显示城市列表的函数的示例python方法。



片段7.构建工具,使用用户查询发送到模型并允许进行函数调用


总结一下,函数提供了一个直观的框架,使应用开发人员能够精确控制数据流和系统执行,同时有效地利用智能体/模型生成关键输入。开发人员可以选择性地决定是否通过返回外部数据来保持智能体在循环中,或根据特定应用架构要求来省略它。


2.6 数据存储


想象一下,语言模型就像是一个巨大的书籍图书馆,其中包含着它的训练数据。但与不断获取新卷的图书馆不同,这个模型保持静态,只包含最初训练时的知识。这带来了一个挑战,因为现实世界的知识是不断演化的。数据存储库通过提供对更具动态性和最新信息的访问,确保模型的回答保持基于事实和相关性。


考虑一个常见的情况,开发人员可能需要向模型提供少量额外的数据,也许是以电子表格或PDF的形式。


10.智能体人如何与结构化和非结构化数据进行交互?


数据存储允许开发人员向智能体程序提供原始格式的附加数据,消除了耗时的数据转换、模型重新训练或微调的需要。数据存储将传入的文档转换为一组向量数据库嵌入,智能体程序可以使用这些向量来提取所需的信息,以补充其对用户的下一步操作或响应。


11.数据存储将智能体连接到各种类型的新实时数据源。


2.7 实施和应用


在生成式AI智能体的背景下,数据存储通常被实现为开发人员希望智能体在运行时访问的向量数据库。虽然我们这里不会深入讨论向量数据库,但要理解的关键点是,它们以向量嵌入的形式存储数据,这是一种高维向量或数据提供的数学表示。近年来,在语言模型中使用数据存储的最显著例子之一是基于检索增强生成(RAG)的应用程序的实现。这些应用程序旨在通过使模型可以访问各种格式的数据来扩展模型的知识广度和深度,超越基础训练数据。


1.网站内容结构化数据的格式包括PDFWord文档、CSV、电子表格等HTMLPDFTXT等格式的非结构化数据。智能体与数据存储之间的一对多关系,可以表示各种类型的预索引数据。


2.每个用户请求和智能体响应循环的基本过程通常模拟如图13所示。用户查询被发送到嵌入模型以生成查询的嵌入结果。


3.查询嵌入然后使用类似SCaNN的匹配算法将其与向量数据库的内容进行匹配。从向量数据库中检索到的匹配内容以文本格式返回给智能体。


4.智能体接收用户查询和检索到的内容,然后制定回应或执行操作。


5.给用户发送最终回复。


13.基于RAG的应用程序中用户请求和智能体响应的生命周期。


最终结果是一个应用程序,它允许智能体通过向量搜索将用户的查询与已知数据存储匹配,检索原始内容,并将其提供给编排层和模型进行进一步处理。下一步可能是向用户提供最终答案,或者执行额外的向量搜索以进一步完善结果。


使用实施了具有ReAct推理/规划功能的RAG的智能体的示例交互可在图14中看到。


14.基于RAG的应用示例,具有ReAct推理/规划。


2.8 工具回顾


总结一下,扩展、函数和数据存储是智能体程序在运行时可以使用的几种不同的工具类型。每种工具都有自己的目的,并且可以根据智能体开发者的自由裁量一起或独立使用。


扩展功能调用数据存储


执行智能体端执行客户端执行智能体端执行


开发人员希望使用案例。


API端点交互的智能体。


1.使用原生预构建的扩展功能时非常有用(即Vertex SearchCode)。解释器,等等)


2.多跳规划和API调用(即下一个智能体动作取决于先前动作/ API调用的输出)安全或身份验证限制阻止智能体直接调用API


3.时间约束或运营顺序约束会阻止智能体程序实时进行API调用。(例如:批处理操作,人工审核等)


4.API未暴露在互联网上,或者对Google系统不可访问。


开发者想要使用以下任一种数据类型来实现检索增强生成(RAG):来自已预索引域名和URL的网站内容


结构化数据的格式包括PDFWord文档、CSV、电子表格等。


关系型/非关系型数据库HTMLPDFTXT等格式的非结构化数据。


3提升模型性能的关键学习


使用模型的一个关键方面是在生成输出时选择正确的工具,尤其是在生产规模下使用工具时。虽然通用训练有助于模型发展这种技能,但现实场景通常需要超越训练数据的知识。想象一下这就像基本烹饪技能和精通特定菜系之间的区别。两者都需要基础烹饪知识,但后者需要有针对性的学习以获得更微妙的结果。


为了帮助模型获得对这种特定知识的访问权限,存在几种方法:


1.上下文学习:这种方法在推理时为通用模型提供提示、工具和少量示例,使其能够即时学习如何何时使用这些工具来完成特定任务。ReAct框架就是自然语言中这种方法的一个例子。


2.基于检索的上下文学习:这种技术动态地从外部存储器中检索最相关的信息、工具和相关示例,用以填充模型提示。这样做的一个例子是Vertex AI扩展中的示例存储或之前提到的基于RAG结构的数据存储。


3.微调学习:这种方法涉及在推断之前使用更大的特定示例数据集对模型进行训练。这有助于模型在接收任何用户查询之前理解何时以及如何应用特定工具。


为了进一步了解每种目标学习方法,让我们回顾一下我们的烹饪类比。


假设一位厨师收到了一份具体的食谱(提示),一些关键食材(相关工具)和一些示例菜肴(少量示例)来自顾客。基于这些有限的信息和厨师对烹饪的一般知识,他们需要在当场学习中找出如何烹饪与食谱和顾客偏好最接近的菜肴。这就是上下文学习


现在让我们想象一下,我们的厨师在一个储藏丰富的食品储藏室(外部数据存储)里,里面摆满了各种食材和食谱(示例和工具)。现在,厨师能够从储藏室动态选择食材和食谱,并更好地与客人的食谱和偏好相匹配。这使得厨师能够利用既有知识和新知识,创造出更加知情和精湛的菜肴。这就是基于检索的上下文学习。


最后,假设我们把我们的厨师送回学校学习一种新的菜系或者一组菜系(在一个更大的特定例子的数据集上进行预训练)。这样,这位厨师就能够更深入地理解未曾见过的顾客菜谱。如果我们希望厨师在特定的菜系(知识领域)中表现出色,这种方法非常适用。这就是基于微调的学习。


这些方法各有独特的优势和劣势,涉及速度、成本和延迟。然而,通过在一个智能体框架中结合这些技术,我们可以利用各种优势,减少其弱点,从而实现更强大和适应性更强的解决方案。


4LangChainAgent快速入门


为了提供一个现实世界中可执行的智能体示例,我们将使用LangChainLangGraph库快速构建一个原型。这些流行的开源库允许用户通过链接逻辑、推理和工具调用的序列来构建客户智能体,以回答用户的查询。我们将使用gemini-1.5-flash-001模型和一些简单工具来回答用户的多阶段查询,如在Snippet 8中所示。


我们正在使用的工具是SerpAPI(用于Google搜索)和Google Places API。在Snippet 8中执行我们的程序后,您可以在Snippet 9中看到示例输出。



Snippet 8.采用基于样本LangChainLangGraph的智能体与工具



Unset


上周德克萨斯大学长角队在橄榄球比赛中对阵了谁?对方球队的体育场地址是什么?


Ai Message工具调用:搜索

参数:查询:德克萨斯长角牛足球程

工具消息


名称:搜索


{...结果:"NCAA Division I橄榄球,乔治亚,日期..."}


Ai Message


德克萨斯大学长角队上周与乔治亚大学鲍尔狗队比赛。


工具调用:位置

参数:查询:乔治亚大学致公棒球场

工具消息


Name: places


圣福德体育场地址:100圣福德


乔治亚大学杜格斯体育场的地址是美国加州雅典市桑福德大道100号,邮编30602


Snippet 9. Output from our program in Snippet 8


虽然这是一个相当简单的智能体示例,但它展示了模型、编排和工具等基础组件共同协作以实现特定目标。在最后一部分,我们将探讨这些组件如何在像Google规模的管理产品中结合在一起,比如Vertex AI智能体和生成性Playbooks


5 使用Vertex AI智能体的生产应用程序


本白皮书探讨了智能体程序的核心组件,构建生产级应用程序需要将它们与用户界面、评估框架和持续改进机制等其他工具集成在一起。GoogleVertex AI平台通过提供一个集成了先前提到的所有基本元素的完全托管环境简化了这个过程。开发人员可以使用自然语言界面快速定义他们的智能体程序的关键要素-目标、任务说明、工具、用于任务委派的子智能体以及示例-以便轻松构建所需的系统行为。此外,该平台配备了一组开发工具,用于测试、评估、衡量智能体程序性能、调试以及改进开发智能体程序的整体质量。这使开发人员可以专注于构建和完善他们的智能体程序,而不必担心基础架构、部署和维护的复杂性,这些由平台本身管理。


在图15中,我们提供了一个建立在Vertex上的智能体的样本架构。


使用各种功能的人工智能平台,例如Vertex Agent BuilderVertex ExtensionsVertex Function CallingVertex Example Store等。该架构包括许多生产就绪应用程序所需的各种组件。


Figure 15.Vertex AI平台上构建的样例端到端智能体架构


你可以从我们的官方文档中尝试这个预构建智能体架构的示例。


6总结


在本白皮书中,我们讨论了生成式人工智能智能体的基础构建模块,它们的组成形式以及在认知架构中有效实施它们的方法。这篇白皮书的一些关键要点包括:


1.智能体通过利用工具来访问实时信息,提出现实世界的行动建议,以及自主规划和执行复杂任务,扩展了语言模型的能力。智能体可以利用一个或多个语言模型来决定何时以及如何转换状态,并使用外部工具来完成模型本身难以或不可能完成的任意数量的复杂任务。


2.在智能体操作的核心是编排层,这是一个认知架构,用于构建推理、规划、决策,并指导其行动。各种推理技术,如ReActChain-of-ThoughtTree-of-Thoughts,为编排层提供了一个框架,用于接收信息,进行内部推理,并生成明智的决策或响应。


3.工具,如扩展、函数和数据存储,作为智能体与外部世界的钥匙,使它们能够与外部系统互动并访问超出其培训数据范围的知识。扩展提供了智能体与外部API之间的桥梁,使API调用的执行和实时信息的检索成为可能。函数通过分工提供了更加微妙的控制权给开发者,允许智能体生成函数参数,这些参数可以在客户端执行。数据存储为智能体提供了对结构化或非结构化数据的访问,实现了基于数据的应用程序。


智能智能体的未来充满了令人激动的进展,我们只是开始了解到其中的一部分可能性。随着工具变得更加复杂和推理能力的提升,智能智能体将被赋予解决越来越复杂问题的能力。


此外,智能体链战略方法将继续获得动力。通过结合各自擅长特定领域或任务的专业智能体,我们可以创建一个智能体专家混合体方法,能够在各行业和问题领域交付出色的结果。


重要的是要记住,构建复杂的智能体体系结构需要循序渐进的方法。实验和改进是找到特定业务案例和组织需求的解决方案的关键。由于支撑其架构的基础模型具有生成性质,因此没有两个智能体程序是相同的。然而,通过利用这些基础组件的优势,我们可以创建具有影响力的应用程序,扩展语言模型的能力并提供真实世界的价值。


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询