AI知识库

53AI知识库

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


如何使用多智能体阅读理解系统(MARS)构建企业级AI应用
发布日期:2024-09-26 22:58:39 浏览次数: 1678 来源:机器AI学习 数据AI挖掘


去年,我撰写了关于高级检索增强生成(RAG)技术在企业中的应用,以及多智能体软件工程(MASE)的兴起。自那时起,作为软件开发中生成AI的两大支柱,这两种技术不断发展,并以一种有望重新定义企业AI应用领域的方式相互交织。

AI代理的本质
首先,让我们探讨构成AI代理的要素是什么?一些开发者将代理描述为具有推理、行动和记忆能力的自主实体。例如,一个ReACT代理或能够推理和行动的代理。那么,是什么构成了一个ReACT代理呢?我认为它们由三个基本要素组成:

  1. 智能:代理访问大型语言模型(LLMs)的能力。

  2. 知识:其在特定领域或主题上的结构化和非结构化数据存储库。

  3. 受体与效应器:使代理能够感知环境并执行任务的工具和API。

以下是一个典型代理的简单图示,该代理拥有Anthropic LLM作为智能源,一个exas-search和一个连接到SingleStore的检索器作为工具(用于访问),并通过检索器工具访问知识。

企业中RAG的演变
在通用人工智能的世界里,去年感觉就像一个时代以前,开发者开始探索向大型语言模型(LLMs)输入自定义数据以增强上下文理解的想法。就我个人而言,在更为人所知的术语——检索增强生成(RAG)不仅流行起来并席卷软件开发界之前,我称之为“搜索与检索”。

然而,这种基本的方法,常被称为“朴素RAG”,对于大型企业多层次的复杂需求来说是不够的。这些组织通常拥有大量结构化和非结构化的数据,而构建企业级AI应用的竞赛受到了与RAG相关的三大艰巨挑战的阻碍——准确性、相关性和延迟。

事实证明,这是去年大多数企业没有看到生产就绪应用爆发的首要原因。

但事情发展迅速,现在我们终于看到了一些原则的汇聚,预示着企业级软件开发进入一个全新时代的演变。

但首先,让我们审视一下为了让RAG应用在企业环境中达到生产就绪状态而浮现的关键要求:

  1. 准确性:在企业中,对幻象的容忍度为零。这一点在金融和医疗等关键行业中尤为明显,其中错误的余地几乎不存在。

  2. 相关性:在大规模应用中,资源昂贵,因此信息检索必须精确,仅查询必要的数据以确保效率。这也会直接影响到下一点。

  3. 延迟:RAG流程必须以思维的速度运作,任务完成时间少于一秒,以保持无缝的用户体验,假设从主模型进行推断仍然需要约一秒钟的时间通过网络响应。

精度与速度的炼金术

我们如何实现这种精确与速度的炼金术结合?让我们看看每个类别及其一些最佳实践。

  1. 准确性:这里出现了一些要素——微调嵌入模型和匹配的LLMs、有效的评估、针对结构化数据的功能调用,以及通过人类反馈强化学习(RLHF)实现的实时可观察性和反馈循环。

  2. 相关性:大多数公司拥有数据湖、数据仓库或数据湖仓。所有这些数据对于相关性都是宝贵的,与实时数据的融合现在几乎是AI应用的基本要求,因为如果响应只包含某个时间点的数据,不仅响应变得无关紧要,而且可能危险地不准确。

  3. 延迟:架构必须优化以确保亚秒级的响应时间。如果耗时更长,整体体验至少会变得不理想,并失去产品采用率。

为了构建这个堆栈,每一层都有多个选项,但我列出了在与一些公司交流中发现最常用的那些。

  • 嵌入创建——在这里,英伟达推理微服务(NVIDIA Inference Microservices, NIMs)在众多竞争解决方案中脱颖而出。使用NIMs,你可以调用英伟达API,或者租赁/购买自己的H100并部署你的模型。这可能不是每家公司的正确选择,但如果你追求速度,英伟达显然是这一领域的领导者。

Nemo的真正实用之处在于,你可以将其部署为一个服务器,并带有端点,然后该端点可以作为工具由代理调用。

你可以在这里查看Nemo的一些示例和文档。

语义缓存——这里有许多可用于数据存储和框架的选择,但根据我的经验,我总是主张使用一个能够以高速度和大规模管理所有数据用例的平台来满足所有数据需求。对我来说,这个选择是SingleStore,但为了完全透明,我的观点是有偏见的,因为我是在SingleStore工作。

检索——沿袭上述主题,检索包括结构化和非结构化数据,这意味着需要在JSON、SQL、键值对等中同时进行语义搜索和关键词搜索。在这里,你仍然可以使用SingleStore在一个单一查询中运行所有这些操作,对PB级数据的响应时间在亚秒级。

安全与保护——在这里,Nvidia的Nemo防护栏是一个不言自明的选择。自去年以来,这个开源库已经取得了长足的进步,现在可以以高度灵活性进行输入输出验证、屏蔽个人身份信息(PII)等。

评估——我去年提到过,并且仍然会推荐开源库——RAGAs。这与我们将用来整合这一切的框架配合良好。

整体与模块化
你可以想象,去年这些管道中的每一层或步骤都各自发展,开发者开始将这些系统构建为顺序管道,但这种方法存在诸多限制:刚性、延迟以及降低的准确性和相关性。这种整体架构让人联想到旧的C或C++应用程序,虽然性能强大,但可以说是笨重且不灵活。

多智能体阅读理解生成系统(MARS)时代的到来。

现在想象一下,如果我们采用上述所有不同的步骤和任务,利用我们选择的工具,将它们构建为专门的智能体,每个领域都有各自的专家及特殊工具。然后,它们可以被编排以并行运行,以实现更好的性能和可扩展性,就像微服务一样。

这种替代方案还提供了其他几个优势:

  1. 可维护性:专门的智能体可以处理不同的任务,允许独立更新和更换工具。

  2. 并行性:智能体可以并发操作,利用不同的GPU或计算资源。

  3. 资源优化:工作负载可以根据任务分布在GPU和/或基于CPU的商品计算上,从而提高效率。

  4. 效率与准确性:在不同智能体中隔离特定任务便于调试和使用RLHF进行迭代评估。

多智能体RAG系统的蓝图
既然我们已经确定了不同的任务和选择的库,我们需要在整合之前再考虑两件事。首先,让我们选择一个框架来创建工作流程。

在这里,可以使用如Autogen或CrewAI这样的智能体框架,但与其使用一个监督智能体和导致每次结果不可预测和非确定性的协作框架,我更倾向于Langchain的LangGraph,原因有两个——易用性和与NIMs及Nemo防护栏等工具的集成。此外,我喜欢我们可以根据企业的需求来构建“图”,而这些需求可能因公司而异,差异巨大。

其次,让我们看看通过添加其他智能体来进一步增强我们的架构,使其更加高效和高性能。
嵌入创建:我们可以在创建嵌入之前,考虑添加一个用于数据清洗的预处理智能体。
语义缓存:SingleStore是理想的,但我们也可以添加一个缓存管理智能体来进行无效化和更新。Langchain在其API中也提供了这一功能。
检索:一旦掌握了基础,我们还可以添加一个查询理解智能体,在发送检索之前增加更多上下文。
安全与保护:Nemo防护栏在这里至关重要,但一个单独的PII检测和遮蔽智能体,比如Protecto,也是非常有价值的补充。
评估:目前,我们先坚持使用RAGAs,尽管我们也可以使用其他智能体来使用其他框架并比较结果。

鉴于架构的模块化,我们现在还可以构建额外的智能体,根据最终需求进行添加、修改和移除;
查询规划智能体:策略化最佳的查询回答方法。
上下文丰富智能体:通过额外上下文增强检索到的信息。
响应生成智能体:根据丰富后的信息制作最终响应。
反馈集成智能体:处理用户反馈以改进系统。
日志记录与监控智能体:管理全面的日志记录和实时监控。
数据版本控制智能体:监督数据、嵌入和模型工件的版本,以确保可复现性。

协调框架
为了协调这个多智能体RAG(检索增强生成)系统,如前所述,我将选择LangGraph作为解决方案。它针对多智能体系统的设计、灵活的图结构、强大的状态管理、与LangChain的集成、可视化工具以及可扩展性,使其成为企业级应用的理想选择。

代码实现
步骤1 — 构建一个智能体
首先,让我们来看一个使用LangGraph的简单智能体实现。

enrichment_agent = initialize_agent([top_selling_products_tool],chat_model,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True)

步骤 2 — 创建工具
请注意,我们是如何向代理传递一个工具的。这实际上是代理在需要执行查询时将调用的另一个方法,在这里进行定义。

top_selling_products_tool = Tool(name="Top Selling Products",func=get_top_selling_products,description="Get the top selling products. You can specify a limit (default is 5).")

此工具调用了一个名为get_top_selling_products的函数,该函数内部包含了用于获取结构化数据的代码。

def get_top_selling_products(limit=5):query = f"""SELECT product_name, SUM(quantity_sold) as total_soldFROM salesGROUP BY product_nameORDER BY total_sold DESCLIMIT {limit}return db.run(query)

步骤 3 — 使用图形、节点和边创建一个工作流程
接着,我们创建一个包含图形(即工作流程)、节点和边的图,以便将所有部分组合在一起。然后,我们将节点和边添加到工作流程中并运行它。

以下是一个通过提供一个有状态图来创建工作流程的示例。AgentState 负责在整体工作流程中维护状态。

workflow = StateGraph(AgentState)

最后,我们将所有这些组合在一起。

# Add nodes for the agentsgraph.add_node("sql_agent", sql_agent)graph.add_node("enrichment_agent", enrichment_agent)# Define the workflow@graph.rundef workflow(query: str):sql_result = graph.nodes.sql_agent(query)enriched_result = graph.nodes.enrichment_agent(sql_result)return enriched_result

结论

显然,我们只是触及了表面,正如前面所述,构建定制化的多智能体检索增强系统(MAR)有许多不同的技术和选择。希望这篇文章能为你奠定基础,如果你正寻求理解构建企业级AI应用所需的知识,以及整体框架和步骤,那么这条道路不仅模块化,还具有可扩展性和可控性,就像我们已熟知的微服务架构一样。



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

产品:大模型应用平台+智能体定制开发+落地咨询服务

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

联系我们

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

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询