目录
介绍
学习目标
目录
涉及的关键步骤
扩展10个文档的关键挑战
性能考虑
工具管理
指数效率
实施代码处理10个文档
文档收集
工具设置
通过工具检索增强代理抹布
建造代理
工具检索
代理设置
查询11个文档
结果和绩效见解
性能指标
可伸缩性分析
结论
关键要点
常见问题
首页 科技周边 人工智能 缩放多文件代理抹布来处理10个文档

缩放多文件代理抹布来处理10个文档

Apr 09, 2025 am 09:44 AM

介绍

在我以前的博客文章中,使用LlamainDex构建多文件代理抹布,我演示了如何创建一个可以使用LlamainDex在三个文档上处理和查询的检索型生成一代(RAG)系统。尽管这是一个有力的开始,但现实世界中的应用程序通常需要能够处理更大的文档语料库。

该博客将着重于将该系统从三个文档扩展到11及以后。我们将研究代码,扩展的挑战以及如何构建可以从较大的来源中动态检索信息的有效代理。

学习目标

  • 了解使用LlamainDex的10多个文档到超过10个文档,了解缩放多文档的代理抹布系统。
  • 了解如何构建和集成基于工具的查询机制以增强抹布模型。
  • 了解在有效检索相关文档和工具中使用vectorStoreIndex和ObjectIndex的使用。
  • 实现一个动态代理,能够通过从大量文档中检索相关论文来回答复杂查询。
  • 将抹布系统扩展到多个文档时,确定挑战和最佳实践。

本文作为数据科学博客马拉松的一部分发表

目录

  • 介绍
  • 涉及的关键步骤
  • 扩展10个文档的关键挑战
  • 实施代码处理10个文档
  • 通过工具检索增强代理抹布
  • 查询11个文档
  • 结果和绩效见解
  • 结论
  • 常见问题

涉及的关键步骤

在上一个博客中,我介绍了代理抹布的概念 - 一种方法,我们将信息检索与生成模型结合在一起,以使用相关的外部文档回答用户查询。我们使用LlamainDex构建了一个简单的多档案代理抹布,可以在三个文档中查询。

涉及的关键步骤:

  • 文档摄入:使用SimpleDirectoryReader将文档加载并分成块。
  • 索引创建:利用矢量storeIndex进行语义搜索和摘要以进行摘要。
  • 代理设置:将OpenAI的API集成以通过从文档中检索相关的信息来回答查询。

尽管此设置在少量文档中效果很好,但我们在可扩展性方面遇到了挑战。随着我们超越三个文档的扩展,出现了工具管理,性能开销和较慢的查询响应等问题。这篇文章解决了这些挑战。

扩展10个文档的关键挑战

扩展到11个或更多文档引入了几个复杂性:

性能考虑

跨多个文档查询会增加计算负载,尤其是在内存使用和响应时间方面。当系统处理大量文档时,确保快速准确的响应将成为主要挑战。

工具管理

每个文档都与自己的检索和摘要工具配对,这意味着系统需要一种强大的机制来有效地管理这些工具。

指数效率

使用11个文档,使用VectorStoreIndex变得更加复杂。索引越大,系统需要筛选以找到相关信息,可能会增加查询时间。我们将讨论LlamainDex如何通过其索引技术有效地应对这些挑战。

实施代码处理10个文档

让我们研究实施,以将我们的代理抹布从三个文档扩展到11个文档。

文档收集

这是我们将要合作的11篇论文:

  • metagpt
  • Longlora
  • Loft-Q
  • SWE板凳
  • 自我rag
  • Zipformer
  • Finetune公平扩散
  • 知识卡
  • Metra
  • VR-MCL

第一步是下载论文。这是自动化以下的Python代码:

 urls = [
    “ https://openreview.net/pdf?id=vtmbagcn7o”,
    “ https://openreview.net/pdf?id=6pmjorfdak”,
    “ https://openreview.net/pdf?id=lzpwwpady4”,
    “ https://openreview.net/pdf?id=vtf8ynqm66”,
    “ https://openreview.net/pdf?id=hsyw5go0v8”,
    “ https://openreview.net/pdf?id=9wd9kwssyt”,
    “ https://openreview.net/pdf?id=yv6fd7lykf”,
    “ https://openreview.net/pdf?id=hnrb5yhoyu”,
    “ https://openreview.net/pdf?id=wbwtoyizik”,
    “ https://openreview.net/pdf?id=c5pwl0soay”,
    “ https://openreview.net/pdf?id=tpd2ag1h0d”
这是给出的

论文= [
    “ metagpt.pdf”,
    “ longlora.pdf”,
    “ loftq.pdf”,
    “ swebench.pdf”,
    “ selfrag.pdf”,
    “ zipformer.pdf”,
    “ values.pdf”,
    “ finetune_fair_diffusion.pdf”,
    “知识_card.pdf”,
    “ Metra.pdf”,
    “ vr_mcl.pdf”
这是给出的

#下载论文
对于URL,邮政纸(URL,纸):
    !
登录后复制

工具设置

下载文档后,下一步是创建查询和总结每个文档所需的工具。

来自llama_index.core导入simpledirectoryReader,vectorstoreIndex,summaryIndex
来自llama_index.core.node_parser import stonencesplitter
来自llama_index.core.tools import functionTool,queryenginetool
来自llama_index.core.core.vector_stores导入元数据,滤波器条件
从输入导入列表,可选

def get_doc_tools(
    file_path:str,
    名称:str,,
) - > str:
    “”“从文档获取矢量查询和摘要查询工具。”“”

    #加载文档
    documents = simperedirectoryReader(input_files = [file_path])。load_data()
    splitter = sensencesplitter(chunk_size = 1024)
    nodes = splitter.get_nodes_from_documents(文档)
    vector_index = vectorstoreIndex(节点)
    
    def vector_query(
        查询:str, 
        page_numbers:可选[list [str]] =无
    ) - > str:
        ”“”用于通过给定论文回答问题。
    
        如果您对论文有特定的问题,有用。
        始终将page_numbers留为无,除非您要搜索特定页面。
    
        args:
            查询(str):要嵌入的字符串查询。
            page_numbers(可选[list [str]]):通过一组页过滤。没有离开 
                如果我们想执行矢量搜索
                在所有页面上。否则,通过指定页面的集合过滤。
        
        ”“”
    
        page_numbers = page_numbers或[]
        metadata_dicts = [
            {“键”:“ page_label”,“ value”:p in page_numbers中的p
        这是给出的
        
        query_engine = vector_index.as_query_engine(
            samelity_top_k = 2,
            过滤器= metadatafilters.from_dicts(
                metadata_dicts,
                条件= filterCondition.or
            )
        )
        响应= query_engine.query(query)
        返回响应
        
    
    vector_query_tool = functionTool.from_defaults(
        name = f“ vector_tool_ {name}”,
        fn = vector_query
    )
    
    summary_index = summaryIndex(节点)
    summary_query_engine = summary_index.as_query_engine(
        response_mode =“ tree_summarize”,
        use_async = true,
    )
    summary_tool = queryenginetool.from_defaults(
        name = f“ summary_tool_ {name}”,
        query_engine = summary_query_engine,
        描述=((
            f“对{名称}有关的摘要问题有用”
        ),
    )

    返回vector_query_tool,summary_tool
登录后复制

此功能为每个文档生成向量和摘要查询工具,从而使系统可以有效地处理查询并生成摘要。

通过工具检索增强代理抹布

现在,我们将通过工具检索增强代理抹布。

建造代理

接下来,我们需要扩展代理商,能够从所有11个文档中检索和管理工具。

来自utils import get_doc_tools
从pathlib导入路径

paper_to_tools_dict = {}
纸中的纸:
    打印(f“获取纸的工具:{paper}”)
    vector_tool,summary_tool = get_doc_tools(纸,路径(PAPE).stem)
    Paper_to_tools_dict [Paper] = [vector_tool,summary_tool]

all_tools = [t paper_to_tools_dict [paper]的纸张中的纸张中的纸张
登录后复制

输出看起来如下:

缩放多文件代理抹布来处理10个文档

工具检索

下一步是在这些工具上创建一个“对象”索引,并构建一个可以动态地提取给定查询的相关工具的检索系统。

来自llama_index.core导入vectorstoreindex
来自llama_index.core.objects import objectIndex

obj_index = objectIndex.from_objects(
    all_tools,
    index_cls = vectorstoreIndex,
)
obj_retriever = obj_index.as_retriever(samelity_top_k = 3)
登录后复制

现在,系统可以根据查询检索最相关的工具。

让我们看看一个例子:

工具= obj_retriever.trieve(
    “告诉我METAGPT和SWE-BENCH中使用的EDAT数据集”
)

#retrieves 3个对象,让我们看看第三个对象
打印(工具[2] .metadata)
登录后复制

缩放多文件代理抹布来处理10个文档

代理设置

现在,我们将工具回收器集成到代理跑步者中,以确保它动态选择响应每个查询的最佳工具。

来自llama_index.core.agent intimpt functionCallingAgentWorker
来自llama_index.core.gagent Import Agentrunner

agent_worker = functionCallingAgentWorker.from_tools(
    tool_retriever = obj_retriever,
    llm = llm, 
    system_prompt =“”“ \
您是旨在回答一组给定论文的疑问的代理商。
请始终使用提供的工具来回答问题。不要依靠先验知识。\

”“”,
    冗长= true
)
代理= AgentRunner(Agent_worker)
登录后复制

查询11个文档

让我们看看系统跨多个文档查询时的性能。我们将同时查询METAGPT和SWE BENCEN纸张以比较其评估数据集。

响应= Agent.Query(“告诉我METAGPT中使用的评估数据集并将其与SWE-Bench进行比较”)
打印(str(响应))
登录后复制

输出:

缩放多文件代理抹布来处理10个文档

让我们看看其他例子

响应= agent.query(Query)(
    “比较并对比洛拉论文(Longlora,Loftq)。首先在每篇论文中分析该方法。”
)
打印(str(响应))
登录后复制

输出:

缩放多文件代理抹布来处理10个文档

结果和绩效见解

现在,我们将探讨以下结果和绩效见解:

性能指标

当缩放到11个文档时,性能仍然很强,但是与3档案设置相比,我们观察到查询时间增加了约15-20%。但是,总体检索准确性保持一致。

可伸缩性分析

由于LlamainDex的有效分解和索引,该系统具有高度可扩展的。通过仔细管理工具,我们能够处理11个文档,其开销最少。可以扩展这种方法以支持更多文档,从而在现实世界应用程序中进一步增长。

结论

从三个文档扩展到11个文档是建立强大的抹布系统的重要里程碑。这种方法利用LlamainDex来管理大量文档,同时保持系统的性能和响应能力。

我鼓励您尝试使用LlamainDex扩展自己的检索型生成系统,并分享您的结果。随时在此处查看我以前的博客以开始!

在GitHub上查看完整的代码和资源。

关键要点

  • 可以使用有效的索引方法(如VectorStoreEndex和ObjectIndex)来扩展检索功能的生成(RAG)系统,以处理更多文档。
  • 通过将特定工具分配给文档(向量搜索,摘要工具),代理可以利用专门的方法来检索信息,从而提高响应准确性。
  • 使用AgentRunner与工具检索使用,使代理可以根据查询智能选择和应用正确的工具,从而使系统更加灵活和自适应。
  • 即使处理大量文档,抹布系统也可以通过动态检索和应用工具来维持响应性和准确性,而不是蛮力搜索所有内容。
  • 在扩展抹布系统以确保性能和准确性时,优化分块,工具分配和索引策略至关重要。

常见问题

Q1。多文档代理抹布系统中处理3个文档与10个文档的处理有什么区别?

A.处理3个文档需要更简单的索引和检索过程。随着文档数量的增加(例如,至10),您需要更复杂的检索机制,例如ObjectIndex和工具检索,以保持性能和准确性。

Q2。 vectorStoreIndex和ObjectIndex如何促进扩展破布系统?

答:VectorStoreIndex有助于基于相似性有效地检索文档块,而ObjectIndex允许您存储和检索与不同文档关联的工具。他们一起有助于有效地管理大规模文档集。

Q3。为什么基于工具的检索在扩展到多个文档时很重要?

A.基于工具的检索使系统能够将专用工具(例如,矢量搜索或摘要)应用于每个文档,与以相同方式处理所有文档相比,提高了答案的准确性并减少了计算时间。

Q4。如何修改此设置以处理更多文档(例如20)?

答:要处理更多文档,您可以使用分布式计算技术微调索引来优化检索过程,并可能引入更高级的过滤机制,以在应用工具之前缩小文档集范围。

Q5。有效地扩展多文档代理抹布系统的关键策略是什么?

A.缩放多文件代理抹布系统有效地涉及优化数据检索方法,实施有效的索引策略,并利用先进的语言模型来提高查询准确性。利用诸如LlamainDex之类的工具可以通过促进多个文档管理并确保及时访问相关信息来显着改善系统的性能。

本文所示的媒体不由Analytics Vidhya拥有,并由作者酌情使用。

以上是缩放多文件代理抹布来处理10个文档的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1658
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1231
24
开始使用Meta Llama 3.2 -Analytics Vidhya 开始使用Meta Llama 3.2 -Analytics Vidhya Apr 11, 2025 pm 12:04 PM

Meta的Llama 3.2:多模式和移动AI的飞跃 Meta最近公布了Llama 3.2,这是AI的重大进步,具有强大的视觉功能和针对移动设备优化的轻量级文本模型。 以成功为基础

10个生成AI编码扩展,在VS代码中,您必须探索 10个生成AI编码扩展,在VS代码中,您必须探索 Apr 13, 2025 am 01:14 AM

嘿,编码忍者!您当天计划哪些与编码有关的任务?在您进一步研究此博客之前,我希望您考虑所有与编码相关的困境,这是将其列出的。 完毕? - 让&#8217

AV字节:Meta' llama 3.2,Google的双子座1.5等 AV字节:Meta' llama 3.2,Google的双子座1.5等 Apr 11, 2025 pm 12:01 PM

本周的AI景观:进步,道德考虑和监管辩论的旋风。 OpenAI,Google,Meta和Microsoft等主要参与者已经释放了一系列更新,从开创性的新车型到LE的关键转变

向员工出售AI策略:Shopify首席执行官的宣言 向员工出售AI策略:Shopify首席执行官的宣言 Apr 10, 2025 am 11:19 AM

Shopify首席执行官TobiLütke最近的备忘录大胆地宣布AI对每位员工的基本期望是公司内部的重大文化转变。 这不是短暂的趋势。这是整合到P中的新操作范式

视觉语言模型(VLMS)的综合指南 视觉语言模型(VLMS)的综合指南 Apr 12, 2025 am 11:58 AM

介绍 想象一下,穿过​​美术馆,周围是生动的绘画和雕塑。现在,如果您可以向每一部分提出一个问题并获得有意义的答案,该怎么办?您可能会问:“您在讲什么故事?

GPT-4O vs OpenAI O1:新的Openai模型值得炒作吗? GPT-4O vs OpenAI O1:新的Openai模型值得炒作吗? Apr 13, 2025 am 10:18 AM

介绍 Openai已根据备受期待的“草莓”建筑发布了其新模型。这种称为O1的创新模型增强了推理能力,使其可以通过问题进行思考

如何在SQL中添加列? - 分析Vidhya 如何在SQL中添加列? - 分析Vidhya Apr 17, 2025 am 11:43 AM

SQL的Alter表语句:动态地将列添加到数据库 在数据管理中,SQL的适应性至关重要。 需要即时调整数据库结构吗? Alter表语句是您的解决方案。本指南的详细信息添加了Colu

最新的最佳及时工程技术的年度汇编 最新的最佳及时工程技术的年度汇编 Apr 10, 2025 am 11:22 AM

对于那些可能是我专栏新手的人,我广泛探讨了AI的最新进展,包括体现AI,AI推理,AI中的高科技突破,及时的工程,AI培训,AI,AI RE RE等主题

See all articles