マルチドキュメントエージェントラグをスケーリングして、10のドキュメントを処理します
導入
私の以前のブログ投稿であるLlamainDexを使用してマルチドキュメントエージェントRAGを構築して、LlamainDexを使用して3つのドキュメントで処理および照会できる検索された生成(RAG)システムを作成する方法を示しました。それは強力なスタートでしたが、現実世界のアプリケーションでは、多くの場合、より大きなドキュメントのコーパスを処理する能力が必要です。
このブログは、そのシステムの3つのドキュメントから11以降に拡大することに焦点を当てます。コード、スケーリングの課題、およびより大きなソースセットから情報を動的に取得できる効率的なエージェントを構築する方法に飛び込みます。
学習目標
- LlamainDexを使用して、いくつかのドキュメントを10を超えるドキュメントに処理することから、マルチドキュメントエージェントRAGシステムのスケーリングを理解します。
- ツールベースのクエリメカニズムを構築および統合して、RAGモデルを強化する方法を学びます。
- 関連するドキュメントとツールを効率的に取得する際に、VectorStoreIndexとObjectIndexの使用を理解します。
- 大規模なドキュメントセットから関連する論文を取得することにより、複雑なクエリに答えることができる動的エージェントを実装します。
- RAGシステムを複数のドキュメントにスケーリングする際の課題とベストプラクティスを特定します。
この記事は、データサイエンスブログソンの一部として公開されました。
目次
- 導入
- 関係する重要な手順
- 10のドキュメントへのスケーリングにおける重要な課題
- 10のドキュメントを処理するためのコードを実装します
- ツール検索によるエージェントRAGの強化
- 11のドキュメントにわたってクエリ
- 結果とパフォーマンスの洞察
- 結論
- よくある質問
関係する重要な手順
前のブログでは、エージェントRAGの概念を紹介しました。これは、情報検索と生成モデルを組み合わせて、関連する外部ドキュメントを使用してユーザークエリに答えるアプローチです。 LlamainDexを使用して、3つのドキュメントで照会できるシンプルでマルチドキュメントエージェントRAGを構築しました。
関係する重要なステップ:
- ドキュメントの摂取: SimpleDirectoryReaderを使用して、ドキュメントをチャンクにロードして分割します。
- インデックス作成:セマンティック検索のためにVectorStoreIndexを活用し、要約のためのsummaryIndex。
- エージェントのセットアップ:文書から関連する情報のチャンクを取得することにより、OpenaiのAPIを統合してクエリに回答します。
このセットアップは少数のドキュメントでうまく機能しましたが、スケーラビリティの課題に遭遇しました。 3つのドキュメントを超えて拡大するにつれて、ツール管理、パフォーマンスオーバーヘッド、クエリ応答の遅いなどの問題が発生しました。この投稿では、これらの課題に対処しています。
10のドキュメントへのスケーリングにおける重要な課題
11以上のドキュメントにスケーリングすると、いくつかの複雑さが紹介されます。
パフォーマンスに関する考慮事項
複数のドキュメントに照会すると、特にメモリの使用と応答時間の観点から、計算負荷が増加します。システムがより多くのドキュメントを処理すると、迅速かつ正確な応答が主要な課題になります。
ツール管理
各ドキュメントは独自の検索と要約ツールとペアになっています。つまり、システムはこれらのツールを効率的に管理するための堅牢なメカニズムが必要です。
インデックス効率
11のドキュメントでは、VectorStoreIndexを使用すると、より複雑になります。インデックスが大きいほど、システムが関連する情報を見つけるためにふるいにかける必要があり、潜在的にクエリの時間を増やします。 Llamaindexがインデックステクニックでこれらの課題を効率的に処理する方法について説明します。
10のドキュメントを処理するためのコードを実装します
実装に飛び込み、3つのドキュメントから11のドキュメントからエージェントのぼろを拡大しましょう。
ドキュメントコレクション
これが私たちが協力する11の論文です:
- メタグプト
- longlora
- loft-q
- swe-bench
- セルフラグ
- zipformer
- 値
- Finetune Fair拡散
- ナレッジカード
- メトラ
- 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"、 "knowledge_card.pdf"、 「Metra.pdf」、 「vr_mcl.pdf」 ] #論文のダウンロード URLの場合、zip(urls、論文)の紙: !wget "{url}" -o "{Paper}"
ツールセットアップ
ドキュメントがダウンロードされたら、次のステップは、各ドキュメントのクエリと要約に必要なツールを作成することです。
llama_index.coreからImport SimpledirectoryReader、VectorStoreIndex、summaryIndexから llama_index.core.node_parserからimportsentencesplitterから llama_index.core.tools Import functionTool、QueryEngineToolから llama_index.core.vector_storesからメタデータをインポートする、filterconditionから インポートリストの入力からオプション def get_doc_tools( file_path:str、 名前:str、 ) - > str: "" "ドキュメントからベクトルクエリと概要クエリツールを取得します。" "" #ドキュメントを読み込みます documents = simpledirectoryreader(input_files = [file_path])。load_data() splitter = sentencesplitter(chunk_size = 1024) nodes = splitter.get_nodes_from_documents(documents) vector_index = vectorStoreIndex(ノード) def vector_query( クエリ:str、 page_numbers:optional [list [str]] = none ) - > str: "" "特定の論文に対する質問に答えるために使用します。 紙に具体的な質問がある場合に便利です。 検索したい特定のページがない限り、必ずPage_Numbersをまったく残しません。 args: クエリ(str):埋め込まれる文字列クエリ。 page_numbers(optional [list [str]]):ページのセットごとにフィルタリングします。何も残してください ベクトル検索を実行したい場合 すべてのページにわたって。それ以外の場合は、指定されたページのセットでフィルタリングします。 "" " page_numbers = page_numbersまたは[] metadata_dicts = [ {"key": "page_label"、 "value":p} for page_numbers ] query_engine = vector_index.as_query_engine( 類似性_top_k = 2、 filters = metadatafilters.from_dicts( metadata_dicts、 条件= filtercondition.or )) )) response = 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「{name}に関連する要約の質問に役立ちます」 )、、 )) return vector_query_tool、summary_tool
この関数は、各ドキュメントのベクトルと概要クエリツールを生成し、システムがクエリを処理し、概要を効率的に生成できるようにします。
ツール検索によるエージェントRAGの強化
次に、ツール検索を使用してエージェントラグを強化します。
エージェントの構築
次に、11のドキュメントすべてからツールを取得および管理する機能を備えたエージェントを拡張する必要があります。
utilsからImport get_doc_tools Pathlibインポートパスから Paper_to_tools_dict = {} 論文の論文の場合: 印刷(f "紙のツールの取得:{紙}") vector_tool、summary_tool = get_doc_tools(紙、path(紙).stem) Paper_to_tools_dict [Paper] = [vector_tool、summary_tool] all_tools = [t for paper_to_tools_dict [paper]]の論文の論文の場合
出力は以下のようになります。
ツール検索
次のステップは、これらのツールを介して「オブジェクト」インデックスを作成し、特定のクエリに関連するツールを動的にプルすることができる検索システムを構築することです。
llama_index.coreからVectorStoreIndexからインポート llama_index.core.objectsからObjectIndexをインポートします obj_index = objectIndex.from_objects( all_tools、 index_cls = vectorStoreIndex、 )) obj_retriever = obj_index.as_retriever(signility_top_k = 3)
これで、システムはクエリに基づいて最も関連性の高いツールを取得できます。
例を見てみましょう:
ツール= obj_retriever.retrieve( 「MetagptとSWE-Benchで使用されている評価データセットについて教えてください」 )) #retrieves 3つのオブジェクト、3番目のオブジェクトを見てみましょう 印刷(ツール[2] .Metadata)
エージェントのセットアップ
次に、ツールレトリバーをエージェントランナーに統合し、各クエリに応答するのに最適なツールを動的に選択するようにします。
llama_index.core.agent Import functioncallingagentworkerから llama_index.core.agent Import agentrunnerから agent_worker = functioncallingagentworker.from_tools( tool_retriever = obj_retriever、 LLM = LLM、 System_prompt = "" "\ あなたは、指定された一連の論文に関するクエリに答えるように設計されたエージェントです。 質問に答えるために提供されているツールを常に使用してください。事前知識に依存しないでください。\ "" "、 verbose = true )) agent = agentrunner(agent_worker)
11のドキュメントにわたってクエリ
複数のドキュメントに照会するときにシステムがどのように機能するかを見てみましょう。 MetagptとSWEベンチの両方の論文の両方を照会して、評価データセットを比較します。
Response = Agent.Query( "メタグプトで使用されている評価データセットについて教えて、それをSWEベンチと比較してください")) 印刷(str(応答))
出力:
他の例を見てみましょう
response = agent.query( 「Lora Papers(Longlora、LoftQ)を比較対照します。最初に各論文のアプローチを分析します。」 )) 印刷(str(応答))
出力:
結果とパフォーマンスの洞察
次に、以下の結果とパフォーマンスの洞察を探ります。
パフォーマンスメトリック
11のドキュメントにスケーリングすると、パフォーマンスは堅牢なままでしたが、3ドキュメントのセットアップと比較して、クエリ時間の約15〜20%の増加が観察されました。ただし、全体的な検索精度は一貫していました。
スケーラビリティ分析
Llamaindexの効率的なチャンキングとインデックス作成のおかげで、このシステムは非常にスケーラブルです。ツールを慎重に管理することで、最小限のオーバーヘッドで11のドキュメントを処理することができました。このアプローチは、さらに多くのドキュメントをサポートするために拡張でき、実際のアプリケーションのさらなる成長を可能にします。
結論
3から11のドキュメントのスケーリングは、堅牢なRAGシステムを構築する上で重要なマイルストーンです。このアプローチは、LlamainDexを活用して、システムのパフォーマンスと応答性を維持しながら、大きなドキュメントセットを管理します。
LlamainDexを使用して独自の検索された生成システムをスケーリングして、結果を共有することをお勧めします。開始するには、ここで私の以前のブログをチェックしてください!
GitHubの完全なコードとリソースをご覧ください。
キーテイクアウト
- 検索された生成(RAG)システムをスケーリングして、VectorStoreIndexやObjectIndexなどの効率的なインデックス作成方法を使用して、より多くのドキュメントを処理することができます。
- 特定のツールをドキュメント(ベクトル検索、要約ツール)に割り当てることにより、エージェントは情報を取得するための特殊な方法を活用して、応答の精度を向上させることができます。
- ツール検索を使用してAgentRunnerを使用すると、エージェントはクエリに基づいて適切なツールをインテリジェントに選択および適用することで、システムの柔軟性と適応性を高めることができます。
- 多数のドキュメントを扱う場合でも、RAGシステムは、すべてのコンテンツを検索するのではなく、動的にツールを取得および適用することにより、応答性と精度を維持できます。
- パフォーマンスと正確性を確保するためにRAGシステムをスケーリングする場合、チャンク、ツールの割り当て、およびインデックス作成戦略の最適化が重要です。
よくある質問
Q1。マルチドキュメントエージェントRAGシステムの10のドキュメントと10のドキュメントを処理することの違いは何ですか?A. 3つのドキュメントを処理するには、より簡単なインデックス作成および検索プロセスが必要です。ドキュメントの数が増加すると(例:10)、パフォーマンスと精度を維持するために、ObjectIndexやツール検索などのより洗練された検索メカニズムが必要です。
Q2。 VectorStoreIndexとObjectIndexは、RAGシステムのスケーリングにどのように貢献しますか?A. VectorStoreIndexは、類似性に基づいてドキュメントチャンクの効率的な取得を支援しますが、ObjectIndexを使用すると、さまざまなドキュメントに関連付けられたツールを保存および取得できます。一緒に、彼らは大規模なドキュメントセットを効果的に管理するのに役立ちます。
Q3。複数のドキュメントにスケーリングするときに、ツールベースの検索が重要なのはなぜですか?A.ツールベースの検索により、システムは各ドキュメントに特殊なツール(ベクトル検索または要約)を適用し、回答の精度を改善し、すべてのドキュメントを同じ方法で処理するのと比較して計算時間を短縮できます。
Q4。このセットアップを変更して、さらに多くのドキュメントを処理するにはどうすればよいですか(例:20)?A.より多くのドキュメントを処理するために、インデックスを微調整し、分散コンピューティング技術を使用して、より高度なフィルタリングメカニズムを導入して、ツールを適用する前にドキュメントセットを絞り込むことにより、検索プロセスを最適化できます。
Q5。マルチドキュメントエージェントRAGシステムを効果的にスケーリングするための重要な戦略は何ですか?A.マルチドキュメントエージェントRAGシステムのスケーリングには、データ検索方法の最適化、効率的なインデックス作成戦略の実装、および高度な言語モデルを活用してクエリの精度を高めることが含まれます。 LlamainDexのようなツールを使用すると、複数のドキュメントの管理の改善を促進し、関連情報へのタイムリーなアクセスを確保することにより、システムのパフォーマンスを大幅に改善できます。
この記事に示されているメディアは、Analytics Vidhyaが所有しておらず、著者の裁量で使用されています。
以上がマルチドキュメントエージェントラグをスケーリングして、10のドキュメントを処理しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









バイブコーディングは、無限のコード行の代わりに自然言語を使用してアプリケーションを作成できるようにすることにより、ソフトウェア開発の世界を再構築しています。 Andrej Karpathyのような先見の明に触発されて、この革新的なアプローチは開発を許可します

2025年2月は、生成AIにとってさらにゲームを変える月であり、最も期待されるモデルのアップグレードと画期的な新機能のいくつかをもたらしました。 Xai’s Grok 3とAnthropic's Claude 3.7 SonnetからOpenaiのGまで

Yolo(あなたは一度だけ見ています)は、前のバージョンで各反復が改善され、主要なリアルタイムオブジェクト検出フレームワークでした。最新バージョンYolo V12は、精度を大幅に向上させる進歩を紹介します

CHATGPT 4は現在利用可能で広く使用されており、CHATGPT 3.5のような前任者と比較して、コンテキストを理解し、一貫した応答を生成することに大幅な改善を示しています。将来の開発には、よりパーソナライズされたインターが含まれる場合があります

この記事では、トップAIアートジェネレーターをレビューし、その機能、創造的なプロジェクトへの適合性、価値について説明します。 Midjourneyを専門家にとって最高の価値として強調し、高品質でカスタマイズ可能なアートにDall-E 2を推奨しています。

Google Deepmind's Gencast:天気予報のための革新的なAI 天気予報は、初歩的な観察から洗練されたAI駆動の予測に移行する劇的な変化を受けました。 Google DeepmindのGencast、グラウンドブレイク

この記事では、Lamda、Llama、GrokのようなChatGptを超えるAIモデルについて説明し、正確性、理解、業界への影響における利点を強調しています(159文字)

OpenaiのO1:12日間の贈り物は、これまでで最も強力なモデルから始まります 12月の到着は、世界の一部の地域で雪片が世界的に減速し、雪片がもたらされますが、Openaiは始まったばかりです。 サム・アルトマンと彼のチームは12日間のギフトを立ち上げています
