读谷歌《Agents》白皮书与Anthropic《Building effective agents》的收获

360影视 2025-01-11 08:42 2

摘要:最近关于AI Agent相关的文章,谷歌的《Agents》白皮书与anthropic的《Building effective agents》都很火爆。

最近关于AI Agent相关的文章,谷歌的《Agents》白皮书与anthropic的《Building effective agents》都很火爆。

谷歌的《Agents》白皮书地址:https://www.kaggle.com/whitepaper-agents

anthropic的《Building effective agents》地址:https://www.anthropic.com/research/building-effective-agents

“这种推理、逻辑和对外部信息的访问能力的结合与生成式人工智能模型相连接,唤起了代理的概念,或者说是一个超越单一生成式人工智能模型能力的程序。”

“从最基本的形式来看,生成式AI代理可以定义为一种应用程序,它试图通过观察世界并利用其可用工具采取行动来实现目标。”

“代理是自主的,可以独立于人类干预采取行动,特别是在提供了适当的目标或目的后。代理在实现目标的过程中也可以是主动的。即使在没有人类明确指令集的情况下,代理也可以推理出下一步应该做什么,以实现其最终目标。”

“基础模型尽管在文本和图像生成方面表现出色,但仍然受到无法与外部世界互动的限制。工具弥补了这一差距,使得代理能够与外部数据和服务进行互动,同时解锁了超出基础模型单独能力的更广泛的行动范围。”

都突出了代理应该拥有外部信息的访问能力,可以让AI使用工具来实现。

image-20250110115532675

介绍了三种提示工程框架:

ReAct是一种提示工程框架,提供了一种思维过程策略,使语言模型能够对用户查询进行推理和行动,无论是否有上下文示例。ReAct提示已显示出优于多个最先进基准的表现,并提高了大型语言模型的人类互操作性和可信度。

链式思维(CoT)是一种提示工程框架,能够通过中间步骤实现推理能力。CoT 具有多种子技术,包括自一致性、主动提示和多模态 CoT,它们在具体应用中各有优缺点。

思维树(ToT)是一种提示工程框架,非常适合探索或战略前瞻性任务。它在思维链提示的基础上进行了推广,允许模型探索各种思维链,这些思维链作为语言模型解决一般问题的中间步骤。

介绍了Agents 与Models的区别:

模型

代理

知识仅限于他们训练数据中可获得的信息。

知识通过与外部系统的工具连接而扩展。

基于用户查询的单次推理/预测。除非为模型明确实现,否则没有会话历史或持续上下文的管理(即聊天历史)。管理的会话历史(即聊天历史)允许根据用户查询和在协调层中作出的决策进行多轮推理/预测。在此上下文中,“轮次”被定义为交互系统与代理之间的互动(即1个传入事件/查询和1个代理响应)。

没有原生工具实现。

工具在代理架构中是原生实现的。

没有实现原生逻辑层。用户可以将提示形成简单问题,或使用推理框架(如CoT、ReAct等)来形成复杂提示,以引导模型进行预测。原生认知架构,使用诸如CoT、ReAct或其他预构建代理框架(如LangChain)的推理框架。

通过扩展将代理与外界API关联起来:

image-20250110120731934

代理、扩展与外部API之间的一对多关系:

image-20250110120821159

“想象一个语言模型如同一个庞大的书籍图书馆,包含其训练数据。但与一个持续获取新书籍的图书馆不同,这个图书馆是静态的,只保留最初训练时所获得的知识。这带来了一个挑战,因为现实世界的知识是不断发展的。数据存储通过提供访问更动态和最新的信息,解决了这一局限性,并确保模型的响应保持在事实和相关性基础之上。”

代理如何与结构化和非结构化数据互动?

image-20250110121039951

提到了使用向量数据库进行RAG这种方式:

image-20250110121259003

采用ReAct推理/规划的示例RAG应用程序的架构如下所示:

image-20250110121358188

摘要

在这份白皮书中,我们讨论了生成性人工智能代理的基础构建块、它们的组成以及以认知架构形式有效实施它们的方法。以下是这份白皮书的一些关键要点:

代理通过利用工具访问实时信息、建议现实世界的行动以及自主规划和执行复杂任务,扩展了语言模型的能力。代理可以利用一个或多个语言模型来决定何时以及如何在状态之间转换,并使用外部工具完成任何数量复杂的任务,这些任务对于模型自身来说是困难或不可能完成的。

代理操作的核心是编排层,这是一种结构化推理、规划、决策的认知架构,并引导其行动。各种推理技术,如ReAct、链式思维和树状思维,提供了一个框架,使编排层能够获取信息、进行内部推理并生成知情的决策或响应。

工具,如扩展、函数和数据存储,作为代理与外部世界的钥匙,使它们能够与外部系统互动并访问超出其训练数据的知识。扩展为代理和外部API之间提供了桥梁,使得API调用的执行和实时信息的检索成为可能。函数通过任务分工,为开发人员提供了更细致的控制,使代理能够生成可以在客户端执行的函数参数。数据存储使代理能够访问结构化或非结构化数据,从而实现数据驱动的应用程序。代理的未来充满了令人兴奋的进展,我们才刚刚开始探索可能性。随着工具变得愈发复杂,推理能力的增强,代理将能解决日益复杂的问题。此外,“代理链”的战略方法将继续获得动力。通过结合每个在特定领域或任务上表现出色的专业代理,我们可以创建“代理专家混合体”方法,从而能够在各个行业和问题领域提供卓越的结果。重要的是要记住,构建复杂的代理架构需要迭代的方法。实验和优化是寻找特定商业案例和组织需求解决方案的关键。由于支持其架构的基础模型的生成性特征,没有两个代理是相同的。然而,通过利用这些基础组件的优势,我们可以创建具有影响力的应用程序,扩展语言模型的能力并带来实际的价值。

读Anthropic《Building effective agents》的收获

"我们建议开发者直接使用 LLM API:许多模式可以用几行代码实现。如果使用框架,请确保理解底层代码。对内部机制的错误假设是客户错误的常见来源。"

框架可以帮助我们快速构建Agent应用,但是不可避免地会增加抽象层,增加复杂度。

AI Agent的定义

“代理”可以用几种方式定义。

一些客户将代理定义为完全自主的系统,它们在较长时间内独立运行,使用各种工具来完成复杂的任务。

另一些人则用这个术语来描述遵循预定义工作流程的更具规范性的实现。

在 Anthropic,我们将所有这些变体归类为代理系统,但在工作流程和代理之间做出了重要的架构区分:

工作流程是指 LLM 和工具通过预定义的代码路径进行编排的系统。

另一方面,代理是指 LLM 动态指导其自身流程和工具使用,并保持对如何完成任务的控制的系统。

代理系统的基本构建块

代理系统的基本构建块是一个增强了检索、工具和记忆等增强功能的LLM。我们当前的模型能够主动利用这些能力——生成自己的搜索查询,选择合适的工具,并确定保留哪些信息。

The augmented LLM

**AI Agent的几种工作流 **

不管你使用的是什么AI Agent框架,你会发现其实都与下面这几种工作流或多或少有关系,只是不用你自己从头构建,而是由框架帮你快速实现了而已。

Workflow: Prompt chaining

提示链将任务分解为一系列步骤,在每个LLM调用中处理前一步的输出。您可以在任何中间步骤添加程序检查(参见下图中的“Gate”),以确保过程仍然在正确轨道上。

The prompt chaining workflow

何时使用此工作流程:该工作流程非常适用于可以轻松且清晰地分解为固定子任务的情况。主要目标是通过将每次 LLM 调用设定为更简单的任务来权衡延迟和更高的准确性。

提示链的有用示例:

生成营销文案,然后将其翻译成其他语言。编写文档大纲,检查大纲是否符合某些标准,然后根据大纲撰写文档。

Workflow: Routing

路由将输入进行分类并引导其进入专业化的后续任务。该工作流程允许关注点分离,并构建更专业化的提示。如果没有这个工作流程,针对一种输入的优化可能会影响其他输入的表现。

The routing workflow

何时使用此工作流程:路由适用于复杂任务,其中存在可以更好地单独处理的不同类别,并且可以通过 LLM 或更传统的分类模型/算法准确处理分类。

路由有用的示例:

将不同类型的客户服务查询(常见问题、退款请求、技术支持)引导到不同的下游流程、提示和工具中。将简单/常见问题分配给较小的模型,如 Claude 3.5 Haiku,将困难/不寻常的问题分配给更强大的模型,如 Claude 3.5 Sonnet,以优化成本和速度。

这就与Semantic Kernel中的AIModelRouter是一个道理。

C# AIModelRouter:使用不同的AI模型完成不同的任务

Workflow: Parallelization

大型语言模型有时可以同时处理一个任务,并通过编程方式汇总它们的输出。该工作流程,即并行化,主要表现为两个关键变体:

分区:将一个任务分解为独立的子任务并行运行。投票:多次运行相同的任务以获得多样化的输出。

The parallelization workflow

何时使用此工作流程:当划分的子任务可以并行处理以提高速度,或者当需要多个视角或尝试以获得更高置信度的结果时,平行化是有效的。对于考虑因素较多的复杂任务,LLM(大语言模型)通常在每个考虑因素通过单独的LLM调用处理时表现更好,这样可以集中注意力关注每个特定方面。

平行化有用的示例:

分段:实施保护措施,其中一个模型实例处理用户查询,而另一个实例筛选不当内容或请求。这种方式通常比同一个LLM调用同时处理保护措施和核心响应更有效。自动化评估,用于评估LLM性能,每个LLM调用评估模型在给定提示上的不同性能方面。投票:审核一段代码的漏洞,其中几个不同的提示检查并标记代码,如果发现问题。评估给定内容是否不当,多条提示评估不同方面或要求不同的投票阈值,以平衡假阳性和假阴性。

Workflow: Orchestrator-workers

在协调者-工作者工作流程中,中央大语言模型动态地将任务拆分,委派给工作者大语言模型,并综合它们的结果。

The orchestrator-workers workflow

何时使用此工作流程:此工作流程非常适合复杂任务,在这些任务中,无法预测所需的子任务(例如,在编码中,所需更改的文件数量和每个文件中的更改性质可能取决于任务本身)。尽管在结构上相似,但与并行化的关键区别在于它的灵活性——子任务不是预先定义的,而是由协调者根据特定输入决定的。

协调者-工人的有用示例:

每次对多个文件进行复杂更改的编码产品。涉及从多个来源收集和分析信息以寻求相关信息的搜索任务。

在AutoGen的例子中,就有明显反应这个工作流的例子。由一个主要代理分配任务给其他特定代理,然后总结各个子代理的结果。

Workflow: Evaluator-optimizer

在评估者-优化者工作流程中,一个大型语言模型(LLM)调用生成响应,而另一个则在循环中提供评估和反馈。

The evaluator-optimizer workflow

何时使用此工作流程:当我们有明确的评估标准,并且迭代改进能够带来可衡量的价值时,这一工作流程特别有效。两个适用的迹象是:首先,当人类表达反馈时,LLM的响应可以明显改善;其次,LLM能够提供这样的反馈。这类似于人类作家在撰写润色文档时可能经历的迭代写作过程。

评估者-优化者有用的示例:

文学翻译中,翻译LLM可能最初无法捕捉到的细微差别,但评估LLM可以提供有用的批评。复杂的搜索任务,需要多轮搜索和分析以收集全面的信息,由评估者决定是否需要进一步的搜索。

在AutoGen的入门例子中就使用了这个工作流:

AutoGen入门-让两个AI自行聊天完成任务

AutoGen C#版本入门

自主代理的抽象如下所示:

Autonomous agent总结

这篇文章中最后告诉我们:

”在大型语言模型领域,成功并不在于构建最复杂的系统,而在于构建适合你需求的正确系统。首先使用简单的提示,通过全面评估进行优化,只有在简单解决方案不足时,才考虑添加多步骤的代理系统。

在实施代理时,我们尝试遵循三个核心原则:

保持代理设计的简单性。

优先考虑透明性,明确展示代理的计划步骤。

通过彻底的工具文档和测试精心设计你的代理-计算机接口(ACI)。

框架可以帮助你快速入门,但在进入生产阶段时,不要犹豫于减少抽象层次并使用基本组件进行构建。遵循这些原则,你可以创建不仅强大而且可靠、可维护、用户值得信赖的代理。“

告诉我们尽量从一个简单的设计开始,框架的使用最好能明白具体与LLM交互的过程,如果不太清楚,那么将很难定位问题,还不如直接与LLM API交互,使用框架快速构建,但要明确框架帮我们做了什么事。

理解了这些工作流,那么不管使用哪些框架,都会发现可能与其中某种或者某些的组合有所关联。

来源:opendotnet

相关推荐