縮放多文件代理抹布來處理10個文檔
介紹
在我以前的博客文章中,使用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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Meta的Llama 3.2:多模式和移動AI的飛躍 Meta最近公佈了Llama 3.2,這是AI的重大進步,具有強大的視覺功能和針對移動設備優化的輕量級文本模型。 以成功為基礎

嘿,編碼忍者!您當天計劃哪些與編碼有關的任務?在您進一步研究此博客之前,我希望您考慮所有與編碼相關的困境,這是將其列出的。 完畢? - 讓&#8217

本週的AI景觀:進步,道德考慮和監管辯論的旋風。 OpenAI,Google,Meta和Microsoft等主要參與者已經釋放了一系列更新,從開創性的新車型到LE的關鍵轉變

Shopify首席執行官TobiLütke最近的備忘錄大膽地宣布AI對每位員工的基本期望是公司內部的重大文化轉變。 這不是短暫的趨勢。這是整合到P中的新操作範式

介紹 想像一下,穿過美術館,周圍是生動的繪畫和雕塑。現在,如果您可以向每一部分提出一個問題並獲得有意義的答案,該怎麼辦?您可能會問:“您在講什麼故事?

介紹 Openai已根據備受期待的“草莓”建築發布了其新模型。這種稱為O1的創新模型增強了推理能力,使其可以通過問題進行思考

SQL的Alter表語句:動態地將列添加到數據庫 在數據管理中,SQL的適應性至關重要。 需要即時調整數據庫結構嗎? Alter表語句是您的解決方案。本指南的詳細信息添加了Colu

對於那些可能是我專欄新手的人,我廣泛探討了AI的最新進展,包括體現AI,AI推理,AI中的高科技突破,及時的工程,AI培訓,AI,AI RE RE等主題
