使用Llama index构建多代理 RAG

这篇具有很好参考价值的文章主要介绍了使用Llama index构建多代理 RAG。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

检索增强生成(RAG)已成为增强大型语言模型(LLM)能力的一种强大技术。通过从知识来源中检索相关信息并将其纳入提示,RAG为LLM提供了有用的上下文,以产生基于事实的输出。

但是现有的单代理RAG系统面临着检索效率低下、高延迟和次优提示的挑战。这些问题在限制了真实世界的RAG性能。多代理体系结构提供了一个理想的框架来克服这些挑战并释放RAG的全部潜力。通过划分职责,多代理系统允许专门的角色、并行执行和优化协作。

使用Llama index构建多代理 RAG,人工智能,深度学习,大语言模型,llama,RAG

单代理RAG

当前的RAG系统使用单个代理来处理完整的工作流程——查询分析、段落检索、排序、摘要和提示增强。

这种单一的方法提供了一个简单的一体化解决方案。但是对每个任务依赖一个代理会导致瓶颈。代理会浪费时间从大量语料库中检索无关紧要的段落。长上下文的总结很糟糕,并且提示无法以最佳方式集成原始问题和检索到的信息。

这些低效率严重限制了实时应用程序的RAG的可伸缩性和速度。

多代理RAG

多代理体系结构可以克服单代理的限制。通过将RAG划分为并发执行的模块化角色可以实现:

检索:专用检索代理专注于使用优化的搜索技术进行有效的通道检索。这将最小化延迟。

搜索:通过排除检索因素,搜索可以在检索代理之间并行化,以减少等待时间。

排名:单独的排名代理评估检索的丰富度,特异性和其他相关信号的传代。这将过滤最大的相关性。

总结:将冗长的上下文总结成简洁的片段,只包含最重要的事实。

优化提示:动态调整原始提示和检索信息的集成。

灵活的体系:可以替换和添加代理来定制系统。可视化工具代理可以提供对工作流的洞察。

通过将RAG划分为专门的协作角色,多代理系统增强了相关性,减少了延迟,并优化了提示。这将解锁可伸缩的高性能RAG。

划分职责允许检索代理结合互补技术,如向量相似性、知识图谱和互联网抓取。这种多信号方法允许检索捕获相关性不同方面的不同内容。

通过在代理之间协作分解检索和排序,可以从不同的角度优化相关性。结合阅读和编排代理,它支持可伸缩的多角度RAG。

模块化架构允许工程师跨专门代理组合不同的检索技术。

Llama index的多代理 RAG

Llama index概述了使用多代理RAG的具体示例:

文档代理——在单个文档中执行QA和摘要。

向量索引——为每个文档代理启用语义搜索。

摘要索引——允许对每个文档代理进行摘要。

高阶(TOP-LEVEL)代理——编排文档代理以使用工具检索回答跨文档的问题。

对于多文档QA,比单代理RAG基线显示出真正的优势。由顶级代理协调的专门文档代理提供基于特定文档的更集中、更相关的响应。

下面我们看看Llama index是如何实现的:

我们将下载关于不同城市的Wikipedia文章。每篇文章都是单独存储的。我们只找了18个城市,虽然不是很大,但是这已经可以很好的演示高级文档检索的功能。

 from llama_index import (
     VectorStoreIndex,
     SummaryIndex,
     SimpleKeywordTableIndex,
     SimpleDirectoryReader,
     ServiceContext,
 )
 from llama_index.schema import IndexNode
 from llama_index.tools import QueryEngineTool, ToolMetadata
 from llama_index.llms import OpenAI

下面是城市的列表:

 wiki_titles = [
     "Toronto",
     "Seattle",
     "Chicago",
     "Boston",
     "Houston",
     "Tokyo",
     "Berlin",
     "Lisbon",
     "Paris",
     "London",
     "Atlanta",
     "Munich",
     "Shanghai",
     "Beijing",
     "Copenhagen",
     "Moscow",
     "Cairo",
     "Karachi",
 ]

下面是下载每个城市文档代码:

 from pathlib import Path
 
 import requests
 
 for title in wiki_titles:
     response = requests.get(
         "https://en.wikipedia.org/w/api.php",
         params={
             "action": "query",
             "format": "json",
             "titles": title,
             "prop": "extracts",
             # 'exintro': True,
             "explaintext": True,
         },
     ).json()
     page = next(iter(response["query"]["pages"].values()))
     wiki_text = page["extract"]
 
     data_path = Path("data")
     if not data_path.exists():
         Path.mkdir(data_path)
 
     with open(data_path / f"{title}.txt", "w") as fp:
         fp.write(wiki_text)

加载下载的文档

 # Load all wiki documents
 city_docs = {}
 for wiki_title in wiki_titles:
     city_docs[wiki_title] = SimpleDirectoryReader(
         input_files=[f"data/{wiki_title}.txt"]
     ).load_data()

定义LLM +上下文+回调管理器

 llm = OpenAI(temperature=0, model="gpt-3.5-turbo")
 service_context = ServiceContext.from_defaults(llm=llm)

我们为每个文档定义“文档代理”:为每个文档定义向量索引(用于语义搜索)和摘要索引(用于摘要)。然后将这两个查询引擎转换为传递给OpenAI函数调用工具。

文档代理可以动态选择在给定文档中执行语义搜索或摘要。我们为每个城市创建一个单独的文档代理。

 from llama_index.agent import OpenAIAgent
 from llama_index import load_index_from_storage, StorageContext
 from llama_index.node_parser import SimpleNodeParser
 import os
 
 node_parser = SimpleNodeParser.from_defaults()
 
 # Build agents dictionary
 agents = {}
 query_engines = {}
 
 # this is for the baseline
 all_nodes = []
 
 for idx, wiki_title in enumerate(wiki_titles):
     nodes = node_parser.get_nodes_from_documents(city_docs[wiki_title])
     all_nodes.extend(nodes)
 
     if not os.path.exists(f"./data/{wiki_title}"):
         # build vector index
         vector_index = VectorStoreIndex(nodes, service_context=service_context)
         vector_index.storage_context.persist(
             persist_dir=f"./data/{wiki_title}"
         )
     else:
         vector_index = load_index_from_storage(
             StorageContext.from_defaults(persist_dir=f"./data/{wiki_title}"),
             service_context=service_context,
         )
 
     # build summary index
     summary_index = SummaryIndex(nodes, service_context=service_context)
     # define query engines
     vector_query_engine = vector_index.as_query_engine()
     summary_query_engine = summary_index.as_query_engine()
 
     # define tools
     query_engine_tools = [
         QueryEngineTool(
             query_engine=vector_query_engine,
             metadata=ToolMetadata(
                 name="vector_tool",
                 description=(
                     "Useful for questions related to specific aspects of"
                     f" {wiki_title} (e.g. the history, arts and culture,"
                     " sports, demographics, or more)."
                 ),
             ),
         ),
         QueryEngineTool(
             query_engine=summary_query_engine,
             metadata=ToolMetadata(
                 name="summary_tool",
                 description=(
                     "Useful for any requests that require a holistic summary"
                     f" of EVERYTHING about {wiki_title}. For questions about"
                     " more specific sections, please use the vector_tool."
                 ),
             ),
         ),
     ]
 
     # build agent
     function_llm = OpenAI(model="gpt-4")
     agent = OpenAIAgent.from_tools(
         query_engine_tools,
         llm=function_llm,
         verbose=True,
         system_prompt=f"""\
 You are a specialized agent designed to answer queries about {wiki_title}.
 You must ALWAYS use at least one of the tools provided when answering a question; do NOT rely on prior knowledge.\
 """,
     )
 
     agents[wiki_title] = agent
     query_engines[wiki_title] = vector_index.as_query_engine(
         similarity_top_k=2
     )

下面就是高阶代理,它可以跨不同的文档代理进行编排,回答任何用户查询。

高阶代理可以将所有文档代理作为工具,执行检索。这里我们使用top-k检索器,但最好的方法是根据我们的需求进行自定义检索。

 # define tool for each document agent
 all_tools = []
 for wiki_title in wiki_titles:
     wiki_summary = (
         f"This content contains Wikipedia articles about {wiki_title}. Use"
         f" this tool if you want to answer any questions about {wiki_title}.\n"
     )
     doc_tool = QueryEngineTool(
         query_engine=agents[wiki_title],
         metadata=ToolMetadata(
             name=f"tool_{wiki_title}",
             description=wiki_summary,
         ),
     )
     all_tools.append(doc_tool)
     
 # define an "object" index and retriever over these tools
 from llama_index import VectorStoreIndex
 from llama_index.objects import ObjectIndex, SimpleToolNodeMapping
 
 tool_mapping = SimpleToolNodeMapping.from_objects(all_tools)
 obj_index = ObjectIndex.from_objects(
     all_tools,
     tool_mapping,
     VectorStoreIndex,
 )
 
 from llama_index.agent import FnRetrieverOpenAIAgent
 
 top_agent = FnRetrieverOpenAIAgent.from_retriever(
     obj_index.as_retriever(similarity_top_k=3),
     system_prompt=""" \
 You are an agent designed to answer queries about a set of given cities.
 Please always use the tools provided to answer a question. Do not rely on prior knowledge.\
 
 """,
     verbose=True,
 )

作为比较,我们定义了一个“简单”的RAG管道,它将所有文档转储到单个矢量索引集合中。设置top_k = 4

 base_index = VectorStoreIndex(all_nodes)
 base_query_engine = base_index.as_query_engine(similarity_top_k=4)

让我们运行一些示例查询,对比单个文档的QA /摘要到多个文档的QA /摘要。

 response = top_agent.query("Tell me about the arts and culture in Boston")

结果如下:

 === Calling Function ===
 Calling function: tool_Boston with args: {
   "input": "arts and culture"
 }
 === Calling Function ===
 Calling function: vector_tool with args: {
   "input": "arts and culture"
 }
 Got output: Boston is known for its vibrant arts and culture scene. The city is home to a number of performing arts organizations, including the Boston Ballet, Boston Lyric Opera Company, Opera Boston, Boston Baroque, and the Handel and Haydn Society. There are also several theaters in or near the Theater District, such as the Cutler Majestic Theatre, Citi Performing Arts Center, the Colonial Theater, and the Orpheum Theatre. Boston is a center for contemporary classical music, with groups like the Boston Modern Orchestra Project and Boston Musica Viva. The city also hosts major annual events, such as First Night, the Boston Early Music Festival, and the Boston Arts Festival. In addition, Boston has several art museums and galleries, including the Museum of Fine Arts, the Isabella Stewart Gardner Museum, and the Institute of Contemporary Art.
 ========================
 Got output: Boston is renowned for its vibrant arts and culture scene. It is home to numerous performing arts organizations, including the Boston Ballet, Boston Lyric Opera Company, Opera Boston, Boston Baroque, and the Handel and Haydn Society. The city's Theater District houses several theaters, such as the Cutler Majestic Theatre, Citi Performing Arts Center, the Colonial Theater, and the Orpheum Theatre.
 
 Boston is also a hub for contemporary classical music, with groups like the Boston Modern Orchestra Project and Boston Musica Viva. The city hosts major annual events, such as First Night, the Boston Early Music Festival, and the Boston Arts Festival, which contribute to its cultural richness.
 
 In terms of visual arts, Boston boasts several art museums and galleries. The Museum of Fine Arts, the Isabella Stewart Gardner Museum, and the Institute of Contemporary Art are among the most notable. These institutions offer a wide range of art collections, from ancient to contemporary, attracting art enthusiasts from around the world.
 ========================

下面我们看看上面的简单RAG管道的结果

 # baseline
 response = base_query_engine.query(
     "Tell me about the arts and culture in Boston"
 )
 print(str(response))
 
 Boston has a rich arts and culture scene. The city is home to a variety of performing arts organizations, such as the Boston Ballet, Boston Lyric Opera Company, Opera Boston, Boston Baroque, and the Handel and Haydn Society. Additionally, there are numerous contemporary classical music groups associated with the city's conservatories and universities, like the Boston Modern Orchestra Project and Boston Musica Viva. The Theater District in Boston is a hub for theater, with notable venues including the Cutler Majestic Theatre, Citi Performing Arts Center, the Colonial Theater, and the Orpheum Theatre. Boston also hosts several significant annual events, including First Night, the Boston Early Music Festival, the Boston Arts Festival, and the Boston gay pride parade and festival. The city is renowned for its historic sites connected to the American Revolution, as well as its art museums and galleries, such as the Museum of Fine Arts, Isabella Stewart Gardner Museum, and the Institute of Contemporary Art.

可以看到我们构建的多代理系统的结果要好的多。

总结

RAG系统必须发展多代理体系结构以实现企业级性能。正如这个例子所说明的,划分职责可以在相关性、速度、摘要质量和及时优化方面获得收益。通过将RAG分解为专门的协作角色,多代理系统可以克服单代理的限制,并启用可扩展的高性能RAG。

https://avoid.overfit.cn/post/7f39d14f7e1a47188870b04c0c332641文章来源地址https://www.toymoban.com/news/detail-729074.html

到了这里,关于使用Llama index构建多代理 RAG的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LLM之RAG实战(十六)| 使用Llama-2、PgVector和LlamaIndex构建LLM Rag Pipeline

           近年来,大型语言模型(LLM)取得了显著的进步,然而大模型缺点之一是幻觉问题,即“一本正经的胡说八道”。其中RAG(Retrieval Augmented Generation,检索增强生成)是解决幻觉比较有效的方法。本文,我们将深入研究使用 transformer库 、 Llama-2模型 、 PgVector数据库 和

    2024年01月21日
    浏览(36)
  • llama-index调用qwen大模型实现RAG

    llama-index在实现RAG方案的时候多是用的llama等英文大模型,对于国内的诸多模型案例较少,本次将使用qwen大模型实现llama-index的RAG方案。 llamaindex需要预装很多包,这里先把我成功的案例里面的pip包配置发出来,在requirements.txt里面。       llamaindex实现RAG中很关键的一环就是知

    2024年04月09日
    浏览(28)
  • 解密 LLAMA2 代码:揭开语言人工智能惊奇的秘密

    简介 在不断发展的 AI 和自然语言处理领域,深度学习模型的突破推动着机器理解和生成人类语言的能力。在这些杰出的模型中,LLAMA2 Transformer 脱颖而出,成为真正的游戏规则改变者,将语言理解和生成的可能性推向新的高度。 LLAMA2 基于 Transformer 架构,融入了先进技术和架

    2024年02月21日
    浏览(41)
  • 人工智能+智能交互:构建智能出行新生态

    作者:禅与计算机程序设计艺术 随着人们生活节奏越来越快、交通便利度越来越高、人口密度越来越大,目前市面上有关智能交通领域的产品层出不穷,从大众出行到共享单车等,都在朝着更加智能化、个性化的方向演进。如今,智能出行已经成为人们生活的一部分,并逐渐

    2024年02月08日
    浏览(33)
  • 人工智能 | Llama大模型:与AI伙伴合二为一,共创趣味交流体验

    Llama 大模型介绍 我们介绍 LLaMA,这是一个基础语言模型的集合,参数范围从 7B 到 65B。我们在数万亿个Token上训练我们的模型,并表明可以专门使用公开可用的数据集来训练最先进的模型,而无需诉诸专有的和无法访问的数据集。特别是,LLaMA-13B 在大多数基准测试中都优于

    2024年02月03日
    浏览(33)
  • 智能车辆与人工智能:构建未来出行的智能交通体系

    作者:禅与计算机程序设计艺术 在未来的出行中,智能车辆将成为最具决定性的角色。无论是用在出租汽车、打车还是共享单车,都将越来越多地融入到生活中,促进人们的出行模式的升级换代。未来智能车辆还会涉及各种新的应用场景,如通勤或特殊的交通工具。如此之多

    2024年02月06日
    浏览(50)
  • 人工智能与底层架构:构建智能引擎的技术支柱

    导言          人工智能与底层架构的交融塑造了智能系统的基石,是推动智能时代发展的关键动力,本文将深入研究人工智能在底层架构中的关键作用,以及它对智能引擎的技术支持,探讨人工智能在计算机底层架构中的作用,以及这一融合如何塑造数字化未来。 1. 人工

    2024年02月03日
    浏览(85)
  • 人工智能入门教学——AI代理(AI Agent)

    目录 一、简介 二、特征 三、结构 四、工作流程 五、类型 六、应用 AI代理 (Artificial Intelligence Agent)是指 使用人工智能技术和算法来执行特定任务、解决问题或实现目标的 程序或系统 。 这些代理可以是简单的程序,也可以是复杂的系统,其设计目的是模拟和执行类似人类智

    2024年02月03日
    浏览(43)
  • 机器学习周刊 第4期:动手实战人工智能、计算机科学热门论文、免费的基于ChatGPT API的安卓端语音助手、每日数学、检索增强 (RAG) 生成技术综述

    机器学习周刊第4期聚焦了AI实战教程、热门计算机科学论文、基于ChatGPT的安卓端语音助手、数学定理分享以及前沿的检索增强(RAG)生成技术综述。

    2024年02月02日
    浏览(48)
  • 探索人工智能的世界:构建智能问答系统之前置篇

    在开始开发之前,我们首先要了解我们将会接触到的编程语言和组件。我本身是一名Java开发者,虽然也有接触过C、C++和PHP开发语言,但在工作中使用的并不多。因此,为了本次开发,我们选择了Python作为开发语言。大家都是从零开始,只要你有编程知识,就可以和我一起学

    2024年02月05日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包