
如何用AI进行情感分析
大型和小型语言模型的出现,这些模型既可以在云环境中部署,也可以在本地系统上运行,为针对特定任务利用多个专业模型提供了机会。
当配置为在指定任务上独立运行时,这些专业模型通常被称为代理。
构建智能的、具有上下文感知能力的AI应用程序在管理一组多样化的代理方面面临着重大挑战。这一核心难题因需要在不同领域统一操作、保持上下文理解以及实现可扩展架构的需求而变得更加复杂。
为了解决这些挑战,并赋能开发者快速试验和部署先进的多代理AI系统,我们创建了Multi-Agent Orchestrator框架。
Multi-Agent Orchestrator是一个灵活且强大的框架,旨在管理多个AI代理,智能路由用户查询,并处理复杂的对话。该框架在构建时考虑了可扩展性和模块化,使得能够创建出能在多个领域内保持连贯对话的AI应用程序,同时高效地将任务分配给专业代理,并在整个交互过程中保持上下文。
此项目旨在解决广泛的用例,包括但不限于:
以下是Multi-Agent Orchestrator框架中我们构建的一些关键功能:
🧠智能意图分类——根据上下文和内容动态将查询路由到最合适的代理。
🌊灵活的代理响应——支持不同代理的流式和非流式响应。
📚上下文管理——在多个代理之间维护和利用对话上下文,以实现连贯的交互。
🔧可扩展架构——轻松集成新代理或自定义现有代理以满足您的特定需求。
🌐通用部署——可在任何地方运行——从AWS Lambda到您的本地环境或任何云平台。
🚀可扩展设计——高效处理多个并发对话,从简单的聊天机器人扩展到复杂的AI系统。
📊代理重叠分析——内置工具用于分析和优化您的代理配置。
📦预配置代理——由Amazon Bedrock模型驱动的即用型代理。
借助Multi-Agent Orchestrator框架,开发人员可以快速原型设计和部署复杂的AI对话系统,该系统利用多个专业代理的强大功能。
该框架的可扩展性和自定义功能支持创建广泛的AI应用程序,从复杂的客户服务系统到多领域虚拟助手和先进的协作AI工具,让各种创意得以实现。
Multi-Agent Orchestrator框架是一个强大的工具,用于实现由多个专业代理组成的复杂AI系统。其主要目的是智能地将用户查询路由到最合适的代理,同时在整个交互过程中保持上下文感知。
Multi-Agent Orchestrator针对每个用户请求遵循一个特定流程:
1. 请求发起:用户向编排器发送请求。
2. 分类:分类器使用大型语言模型(LLM)分析用户的请求、代理描述以及当前用户ID和会话ID下所有代理的对话历史。这种全面的视角使分类器能够理解所有代理之间正在进行的对话和上下文。
分类器确定以下情况中最合适的代理:
3. 代理选择:分类器返回所选代理的名称。
4. 请求路由:用户的输入被发送到所选代理。
5. 代理处理:所选代理处理请求。它会自动检索当前用户ID和会话ID下的自己的对话历史。这确保了每个代理在无法访问其他代理对话的情况下保持自己的上下文。
6. 响应生成:代理生成响应,该响应可能会以标准响应模式发送,也可能会通过流式传输发送,具体取决于代理的能力和初始化设置。
7. 对话存储:编排器自动处理将用户的输入和代理的响应保存到特定用户ID和会话ID的存储中。这一步骤对于保持上下文和启用连贯的多轮对话至关重要。关于存储的关键点:
8. 响应传递:编排器将代理的响应传递回用户。
此流程确保每个请求都由最合适的代理处理,同时在整个对话过程中保持上下文。分类器具有所有代理对话的全局视图,而单个代理只能访问自己的对话历史。这种架构允许进行智能路由和上下文感知响应,同时保持代理功能之间的分离。
编排器对对话保存和检索的自动处理,以及灵活的存储选项,为管理多代理场景中的对话上下文提供了一个强大且可定制的系统。自定义或替换分类器和代理的能力为根据特定需求定制系统提供了进一步的灵活性。
Multi-Agent Orchestrator框架使您能够利用多个代理来处理各种任务。
在框架上下文中,代理可以是以下任一项(或一项或多项的组合):
这种灵活的架构允许您根据应用程序的需求融入尽可能多的代理,并以最适合您需求的方式将它们组合在一起。
每个代理都需要一个名称和描述(以及您使用的代理类型特有的其他属性)。
代理描述在编排过程中起着至关重要的作用。
它应该详细且全面,因为编排器依赖于此描述,以及当前用户输入和所有代理的对话历史,来确定每个请求的最合适路由。
虽然框架的灵活性是一个优势,但重要的是要注意代理之间可能存在的潜在重叠,这可能会导致路由错误。为了帮助您分析和防止此类重叠,我们建议您深入阅读我们的代理重叠分析部分。
多代理编排器(Multi-Agent Orchestrator)框架的关键优势之一在于其代理的标准实现。这种标准化为不同环境带来了显著的灵活性和一致性。无论您是与不同的云服务提供商合作,使用各种大型语言模型(LLM),还是混合使用基于云和本地的解决方案,代理都提供了一个统一的接口来执行任务。
这意味着您可以无缝地在例如Amazon Lex Bot Agent和Amazon Bedrock Agent之间切换,或使用工具进行过渡,也可以从云托管的大型语言模型切换到本地运行的大型语言模型,同时保持相同的代码结构。
此外,如果您的应用程序需要按顺序或并行地使用Bedrock LLM Agent和/或Amazon Lex Bot Agent的不同模型,您也可以轻松实现,因为代码实现已经就绪。这种标准化方法意味着您无需为每个模型编写新代码;相反,您可以直接使用现有的代理。
为了利用这种灵活性,您只需安装框架并导入所需的代理。然后,无论底层技术如何,您都可以直接使用processRequest方法调用它们。这种标准化不仅简化了开发和维护工作,还促进了在不同平台和技术之间轻松进行实验和优化,而无需进行大量的代码重构。
这种标准化使您能够在保持核心应用程序代码完整性的同时,尝试各种代理类型和配置。
编排器由以下主要组件构成:
编排器的每个组件都可以使用自定义实现进行自定义或更换,从而提供了无与伦比的灵活性,并使该框架能够适应各种场景和特定要求。
快速入门
为了帮助您快速启动多代理编排器(Multi-Agent Orchestrator)框架,我们将引导您逐步完成设置和运行您的第一个多代理对话的全过程。
💁在继续之前,请确保您的开发环境中已安装Node.js和npm(用于TypeScript)或Python(用于Python)。
1.创建一个新项目:
2.使用您的AWS账户进行身份验证
本快速入门将展示如何使用Amazon Bedrock进行分类和代理响应。
要按照以下步骤使用您的AWS账户进行身份验证:
a. 如果您尚未安装AWS CLI,请从AWS CLI官方页面下载并安装。
b. 使用您的凭证配置AWS CLI。有关如何设置AWS CLI的详细指南,请参阅AWS CLI配置快速入门指南。
c. 配置完AWS CLI后,通过运行以下命令验证您的身份验证:
终端窗口
如果成功,此命令将返回您的AWS账户ID、用户ID和ARN。
默认情况下,该框架配置如下:
分类器:
使用带有anthropic.claude-3-5-sonnet-20240620-v1:0的Bedrock Classifier实现
代理:使用带有anthropic.claude-3-haiku-20240307-v1:0的Bedrock LLM Agent
重要提示
这些只是默认设置,您可以根据需求或偏好轻松更改。
您具有以下灵活性:
请确保您已通过AWS控制台请求了您打算使用的模型的访问权限。
要自定义模型选择:
1.在您的项目中安装多代理编排器框架:
2.为您的快速启动代码创建一个新文件:
创建一个名为quickstart.py的文件。
3.创建编排器:
4.添加代理:
5.发送查询:
现在,让我们运行快速启动脚本:
编排器
Multi-Agent Orchestrator是框架的核心组件,负责管理代理、路由请求和处理对话。本页提供了如何初始化Orchestrator的概述,并详细列出了所有可用的配置选项。
要创建一个新的Orchestrator实例,您可以使用MultiAgentOrchestrator类:
options
参数是可选的,允许您自定义Orchestrator行为的各个方面。
Orchestrator在初始化时接受一个OrchestratorConfig对象。所有选项都是可选的,如果未指定,将使用默认值。以下是可用选项的完整列表:
storage
:指定聊天历史的存储机制。默认值为InMemoryChatStorage。config
:一个OrchestratorConfig实例,包含各种配置标志和值。logger
:自定义日志记录器实例。如果未提供,将使用默认日志记录器。classifier
:自定义分类器实例。如果未提供,将使用BedrockClassifier。default_agent
:当分类器无法确定最合适的代理时使用的默认代理。以下示例展示了如何使用所有可用选项初始化Orchestrator:
请记住,所有这些选项都是可选的。如果不指定某个选项,Orchestrator将使用其默认值。
默认配置定义如下:
在两种实现中,DEFAULT_CONFIG
都是具有默认值的OrchestratorConfig实例。
MultiAgentOrchestrator 提供了多个关键功能来管理代理、处理请求以及配置协调器。以下是每个功能的详细介绍,解释了其作用以及您可能会使用它的原因:
让我们分解每个功能:
1. addAgent (TypeScript) / add_agent (Python)
2. getDefaultAgent
3. setDefaultAgent
4. setClassifier
5. getAllAgents
6. routeRequest
这些功能在配置和操作 Multi-Agent Orchestrator 中发挥着至关重要的作用。通过有效地使用它们,您可以创建一个灵活且强大的系统,能够跨多个域处理广泛的用户请求。
这些功能允许您配置协调器、管理代理以及处理用户请求。
功能示例
以下是如何使用每个功能的实际示例:
当用户向多代理协调器发送请求时,系统会尝试对意图进行分类并选择一个合适的代理来处理该请求。然而,也存在未选择任何特定代理的情况。
未选择代理时
如果分类器无法确定哪个代理应该处理请求,可能会导致没有代理被选中。在这种情况下,协调器的行为取决于USE_DEFAULT_AGENT_IF_NONE_IDENTIFIED配置选项:
默认代理
默认代理是一个配置为通用型的BedrockLLMAgent,能够处理广泛的主题。它在以下情况下使用:
您可以使用set_default_agent方法自定义默认代理或完全替换它:
自定义NO_SELECTED_AGENT_MESSAGE
您可以通过在协调器配置中设置NO_SELECTED_AGENT_MESSAGE来自定义在未选择代理时返回的消息(且USE_DEFAULT_AGENT_IF_NONE_IDENTIFIED为False):
最佳实践
1. 默认代理的使用:当您希望确保所有用户查询都能收到回复(即使不是来自专业代理)时,请使用默认代理。
2. 提示澄清:当您希望鼓励用户提供更具体或清晰的请求时,将USE_DEFAULT_AGENT_IF_NONE_IDENTIFIED设置为False并自定义NO_SELECTED_AGENT_MESSAGE。
3. 平衡具体性和覆盖范围:仔细考虑您的用例。使用默认代理可以提供更广泛的覆盖范围,但可能会牺牲具体性。提示澄清可能会导致更准确的代理选择,但需要额外的用户交互。
4. 监控和迭代:定期审查未选择代理的情况。这有助于您识别代理覆盖范围的空白或改进分类过程。
通过了解和自定义这些行为,您可以调整您的多代理协调器,以为您的特定用例提供最佳的用户体验。
存储选项允许您指定自定义存储机制。默认情况下,它使用内存存储(InMemoryChatStorage),但您可以实现自己的存储解决方案或使用内置选项,如DynamoDB存储。有关更多信息,请参阅“存储”部分。
日志记录器选项允许您提供一个自定义日志记录器。如果未指定,将使用默认日志记录器。要了解如何实现自定义日志记录器,请查阅“日志记录”部分。
分类器选项允许您使用自定义分类器进行意图分类。如果未提供,将默认使用BedrockClassifier。有关实现自定义分类器的详细信息,请参阅“自定义分类器”文档。
通过自定义这些选项,您可以调整Orchestrator的行为,以满足您的特定用例和需求。
分类器
分类器是多代理协调器(Multi-Agent Orchestrator)的关键组件,负责分析用户输入并识别最合适的代理。协调器支持多种分类器实现,其中Bedrock分类器和Anthropic分类器是主要选项。
无论使用哪种分类器,一般流程都保持不变:
1. 协调器收集用户输入。
2. 分类器执行输入分析,考虑以下因素:
3.确定最合适的代理。
默认情况下,如果没有选择代理,协调器可以配置为:
可以使用协调器中的USE_DEFAULT_AGENT_IF_NONE_IDENTIFIED和NO_SELECTED_AGENT_MESSAGE 配置选项来自定义此行为。
有关这些选项和其他协调器配置的详细说明,请参阅协调器概述页面。
分类器的决策过程对于有效地将用户查询路由到最合适的代理至关重要,从而确保无缝且高效的多代理交互体验。
当您通过初始化MultiAgentOrchestrator创建一个新的协调器时,将初始化默认的Bedrock分类器。
要使用Anthropic分类器,可以将其作为选项传递:
这样,您就可以根据您的需求选择合适的分类器来初始化协调器了。
您可以通过扩展抽象Classifier类来提供自己的自定义分类器实现。有关如何执行此操作的详细信息,请参阅“自定义分类器”部分。
您可以直接使用classify方法来测试任何分类器:
这允许您:
在决定使用不同的分类器时,请考虑:
1. API访问权限:您可以访问和偏好的服务。
2. 模型性能:使用您的特定用例测试分类器,以确定哪个更适合您的需求。
3.成本:比较您预期使用的定价结构。
通过彻底测试和调试您选择的分类器,您可以确保在多代理协调器中进行准确的意图分类和高效的查询路由。
带上下文管理
测试带有完整对话历史记录处理的分类器:
此方法:
不带上下文
测试没有对话历史的原始分类:
最适合:
智能体
在多智能体编排器(Multi-Agent Orchestrator)中,智能体(Agent)是一个基本构建模块,旨在处理用户请求并生成响应。智能体抽象类(Agent Abstract Class)是所有具体智能体实现的基础,提供了通用的结构和接口。
智能体选择过程
多智能体编排器使用一个分类器(Classifier),通常是一个大语言模型(LLM),来为每个用户请求选择最合适的智能体。
这一过程的核心是智能体描述。这些描述至关重要,应尽可能详细和全面。一个精心设计的智能体描述应:
这些描述越详细和精确,分类器就能越准确地将请求路由到正确的智能体。这在具有多个专用智能体的复杂系统中尤为重要。
有关智能体选择过程的更详细说明,请参阅我们文档中的“工作原理”部分。
为了优化智能体选择:
通过优先考虑详细的智能体描述并微调选择过程,您可以显著提高多智能体编排器实现的效率和准确性。
智能体类(Agent class)是一个抽象基类,定义了系统中所有智能体必须具备的基本属性和方法。它设计灵活,允许从简单的API调用者到复杂的基于LLM的对话智能体等多种实现。
关键属性
process_request
任何智能体的核心功能都封装在process_request
方法中。该方法必须由所有具体智能体类实现:
该方法返回单个响应的ConversationMessage或流式响应的AsyncIterable。
示例用法:
智能体选项
在创建新智能体时,您可以使用AgentOptions
类指定各种选项:
直接使用智能体
当您有单一智能体用例时,可以绕过编排器直接调用智能体。这种方法利用了多智能体编排器框架的强大功能,同时专注于单一智能体场景:
这种方法适用于不需要编排但希望利用多智能体编排器框架强大功能的单一智能体场景。
这些选项允许您自定义智能体行为的各个方面及其配置。
对话存储
多智能体编排系统(Multi-Agent Orchestrator System)提供了灵活的存储选项,用于维护对话历史记录。这使得系统能够在多次交互中保留上下文,并使智能体能够提供更加连贯且与上下文相关的响应。
1.内存存储(In-Memory Storage):
2.DynamoDB存储:
3.SQL存储:
4.自定义存储解决方案:
选择合适的存储选项
通过利用这些存储选项,您可以确保多智能体编排系统在各种用例和部署场景中保持必要的上下文,从而实现连贯且有效的对话。
检索器(Retriever)是一种组件或机制,用于从大规模数据集或数据库中提取与查询相关的信息。这一过程对于提升大语言模型(LLMs)的性能和准确性至关重要,尤其是在需要访问和利用外部知识源的任务中。
1.提升上下文与相关性:
检索器能够为大语言模型提供相关的上下文或信息,这些信息可能未包含在其训练数据中,或者过于具体而无法仅从模型的内部知识生成。
2.记忆增强:
检索器充当大语言模型的扩展记忆,使其能够访问最新信息或特定主题的详细数据,从而提高生成响应的相关性和准确性。
3.提高效率:
检索器允许模型按需提取必要的信息,而不是在庞大且不断增长的数据集上进行训练,从而使系统更加高效。
通过检索器的使用,大语言模型能够更智能地
整合外部知识,生成更准确、更符合上下文的响应,同时优化资源利用。
本文章转载微信公众号@Paper易论