介绍
在我以前的博客文章中,使用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]的纸张中的纸张中的纸张
输出看起来如下:
工具检索
下一步是在这些工具上创建一个“对象”索引,并构建一个可以动态地提取给定查询的相关工具的检索系统。
来自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)
代理设置
现在,我们将工具回收器集成到代理跑步者中,以确保它动态选择响应每个查询的最佳工具。
来自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(响应))
输出:
让我们看看其他例子
响应= agent.query(Query)( “比较并对比洛拉论文(Longlora,Loftq)。首先在每篇论文中分析该方法。” ) 打印(str(响应))
输出:
结果和绩效见解
现在,我们将探讨以下结果和绩效见解:
性能指标
当缩放到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中文网其他相关文章!

在约翰·罗尔斯1971年具有开创性的著作《正义论》中,他提出了一种思想实验,我们应该将其作为当今人工智能设计和使用决策的核心:无知的面纱。这一理念为理解公平提供了一个简单的工具,也为领导者如何利用这种理解来公平地设计和实施人工智能提供了一个蓝图。 设想一下,您正在为一个新的社会制定规则。但有一个前提:您事先不知道自己在这个社会中将扮演什么角色。您最终可能富有或贫穷,健康或残疾,属于多数派或边缘少数群体。在这种“无知的面纱”下运作,可以防止规则制定者做出有利于自身的决策。相反,人们会更有动力制定公

许多公司专门从事机器人流程自动化(RPA),提供机器人以使重复性任务自动化 - UIPATH,在任何地方自动化,蓝色棱镜等。 同时,过程采矿,编排和智能文档处理专业

AI的未来超越了简单的单词预测和对话模拟。 AI代理人正在出现,能够独立行动和任务完成。 这种转变已经在诸如Anthropic的Claude之类的工具中很明显。 AI代理:研究

快速的技术进步需要对工作未来的前瞻性观点。 当AI超越生产力并开始塑造我们的社会结构时,会发生什么? Topher McDougal即将出版的书Gaia Wakes:

产品分类通常涉及复杂的代码,例如诸如统一系统(HS)等系统的“ HS 8471.30”,对于国际贸易和国内销售至关重要。 这些代码确保正确的税收申请,影响每个INV

数据中心能源消耗与气候科技投资的未来 本文探讨了人工智能驱动的数据中心能源消耗激增及其对气候变化的影响,并分析了应对这一挑战的创新解决方案和政策建议。 能源需求的挑战: 大型超大规模数据中心耗电量巨大,堪比数十万个普通北美家庭的总和,而新兴的AI超大规模中心耗电量更是数十倍于此。2024年前八个月,微软、Meta、谷歌和亚马逊在AI数据中心建设和运营方面的投资已达约1250亿美元(摩根大通,2024)(表1)。 不断增长的能源需求既是挑战也是机遇。据Canary Media报道,迫在眉睫的电

生成式AI正在彻底改变影视制作。Luma的Ray 2模型,以及Runway的Gen-4、OpenAI的Sora、Google的Veo等众多新模型,正在以前所未有的速度提升生成视频的质量。这些模型能够轻松制作出复杂的特效和逼真的场景,甚至连短视频剪辑和具有摄像机感知的运动效果也已实现。虽然这些工具的操控性和一致性仍有待提高,但其进步速度令人惊叹。 生成式视频正在成为一种独立的媒介形式。一些模型擅长动画制作,另一些则擅长真人影像。值得注意的是,Adobe的Firefly和Moonvalley的Ma

ChatGPT用户体验下降:是模型退化还是用户期望? 近期,大量ChatGPT付费用户抱怨其性能下降,引发广泛关注。 用户报告称模型响应速度变慢,答案更简短、缺乏帮助,甚至出现更多幻觉。一些用户在社交媒体上表达了不满,指出ChatGPT变得“过于讨好”,倾向于验证用户观点而非提供批判性反馈。 这不仅影响用户体验,也给企业客户带来实际损失,例如生产力下降和计算资源浪费。 性能下降的证据 许多用户报告了ChatGPT性能的显着退化,尤其是在GPT-4(即将于本月底停止服务)等旧版模型中。 这


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

禅工作室 13.0.1
功能强大的PHP集成开发环境

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

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