🚀

Agentic RAGとは?深層思考型フレームワークの仕組み【コード解説付き】

2025/03/04に公開

こんにちは、Givery AI Lab所属のAIエンジニア、ホウと申します。
今回は、RAGの発展に伴い、より高度な検索・推論の仕組みが求められる中で、 深く思考し、適切な回答を生成できるAgentic RAGフレームワークをご紹介いたします。

RAGについて

RAGとは

RAG(Retrieval-Augmented Generation)とは、外部の知識ベースから関連情報を検索(Retrieval)し、その情報を生成モデル(Generation)が統合して回答を生成する技術であり、回答の正確性と知識の網羅性を向上させることを目的としています。
過去の関連するRAGに関する記事については、以下をご参考ください。

https://zenn.dev/givery_ai_lab/articles/dd53cb7cd1386b
https://zenn.dev/givery_ai_lab/articles/588c56f7cbd7b0
https://zenn.dev/givery_ai_lab/articles/572d8946937d11
https://zenn.dev/givery_ai_lab/articles/e8c81625f3d0e3

RAGの進化過程

RAGは、単純なキーワード検索を用いるNaïve RAGから始まり、セマンティック検索を強化したAdvanced RAG、柔軟性を持つModular RAG、関係推論を強化するGraph RAG、そして自律的な意思決定を行うAgentic RAGへと進化し、検索精度・適応性・推論能力を向上させてきました。

  • Naïve RAG → Advanced RAG → Modular RAG → Graph RAG → Agentic RAG

    Paradigm Key Features 強み
    Naïve RAG ・ キーワードベースの検索(TF-IDF, BM25) ・ シンプルで実装が容易 ・ 事実ベースの問い合わせに適している
    Advanced RAG ・ 密集検索モデル(DPR など)・ ニューラルランキング & 再ランキング ・ マルチホップ検索 ・ 検索精度が高い ・ 文脈に沿った関連性が向上
    Modular RAG ・ ハイブリッド検索(疎 + 密) ・ 外部ツール・API統合- 組み替え可能なドメイン特化パイプライン ・ 柔軟性・カスタマイズ性が高い ・ 多様なアプリケーションに適応可能 ・ スケーラブル
    Graph RAG ・ グラフベースのデータ構造統合 ・ マルチホップ推論 ・ グラフノードを活用した文脈強化 ・ 関係推論が可能 ・ 幻覚(hallucination)を軽減 ・ 構造化データの処理に最適
    Agentic RAG ・ 自律型エージェントを活用 ・ 動的意思決定- 反復的な改善 & ワークフロー最適化 ・ リアルタイムの変化に適応可能 ・ 複数ドメインのタスクにスケール可能 ・ 高い精度

Agentic RAGの特徴

Agentic RAGはさらに一歩進み、複数の自律的なエージェントが動的な意思決定を行い、最適な情報を取得・統合することで、より高度な回答を生成します。

アーキテクチャ

  1. 入力処理: ユーザーのクエリが入力され、適切な検索方法を選択するためのプロンプトが生成される
  2. ルーティングエージェント: クエリを解析し、適切な情報源を探索するためのエージェントを振り分ける
  3. 検索エージェント: 各エージェントが異なる情報源(ベクター検索、ウェブ検索、メール・チャット履歴など)を活用して、最適な情報を取得する
  4. 統合・応答生成: 検索結果を統合し、LLMが適切な回答を生成する

An Overview of Multi-Agent Agentic RAG Systems

本記事では、Agentic RAGに基づいた手法を紹介し、どのようにしてRAGがより深く思考し、適切な回答を生成できるのかを解説します。

方法概要

最近発表された以下の論文では、Search-o1 フレームワークを提案し、大規模推論モデル(LRMs)が複雑な多段階推論において発生する知識不足による誤りの伝播問題を解決することを目的としています。本手法の中心となるのは、以下の2つのモジュールです。

https://arxiv.org/abs/2501.05366

  1. Agentic RAG メカニズム
    • 動的検索トリガー:モデルは推論過程で <begin_search_query> のような検索クエリを自発的に生成し、外部知識ベースから必要な情報をリアルタイムに取得する
    • 多段階検索の適用:単一の推論プロセスで複数回の検索を可能にし、各推論ステップごとの異なる知識ニーズに対応する
  2. Reason-in-Documents モジュール
    • 知識の抽出・精錬:検索されたドキュメントを詳細に分析し、現在の推論ステップに関連する重要情報を抽出し、簡潔な知識<begin_search_result> を生成する。
    • ノイズのフィルタリング:長文のドキュメントが推論チェーンの整合性を乱すことを防ぎ、情報と論理の一貫性を維持する

性能向上

実験の結果、Search-o1 は以下のような複雑なタスクにおいて、従来手法を大幅に上回る性能を示しました。

  1. 複雑推論タスク
    • GPQA(博士レベルのQA)
      • Search-o1 の 全体的な正解率は 63.6% に達し、QwQ-32B モデル(58.1%)、従来の RAG を上回った
    • 数学・プログラミングタスク
      • AMC2023 および LiveCodeBench において、それぞれ 85.0% および 33.0% の Pass@1 スコアを達成し、従来の直接推論モデルや RAG よりも優れた成績を示した
  2. オープンドメインQAタスク
    • マルチホップ推論(HotpotQA)
      • EM(Exact Match)スコアが 45.2% に達し、RAG-QwQ-32B(29.6%)より 15.6ポイントの向上を実現
    • クロスドメイン性能
      • GPQA 拡張データセットにおいて、全体スコア(57.9%)は物理学者(39.9%)、生物学者(37.2%)を上回り、化学専門家レベル(48.9%)に匹敵する結果を達成

実装方法について

全体

  • 処理フローについて以下のフローチャートに参照する
フローチャート
  • 検索クエリの抽出
    • 生成されたレスポンスから <|begin_search_query|>…<|end_search_query|> のような特別なマーカーを探す
    • もし検索クエリがあれば、次の C{検索クエリの抽出} へ進む
  • 終了判断
    • すべての検索クエリが処理済み
    • 最大試行回数 (MAX_TURN) に達した

Reason-in-Documents モジュールについて

  • 関連情報の抽出推論に統合する の部分に対応する

  • 以下の部分からLLM に文書の内容を組み込んだ推論を実行させる

    webpage_analyses = generate_webpage_to_reasonchain_batch(
        original_questions=batch_original_questions,
        prev_reasonings=batch_prev_reasonings,
        search_queries=batch_search_queries,
        documents=batch_documents,
        dataset_name=dataset_name,
        batch_output_records=batch_output_records,
        max_tokens=max_tokens,
    )
    
  • 推論された情報をプロンプト入力としてLLMに入力する

追加検索必要性の判断について

  • extract_between() メソッドを使用し、LLM の出力に BEGIN_SEARCH_QUERY および END_SEARCH_QUERY のマーカーが含まれているかを検出する

    search_query = extract_between(text, BEGIN_SEARCH_QUERY, END_SEARCH_QUERY)
    
  • この関数は、LLM が生成したテキスト内の <|begin_search_query|>...<|end_search_query|> の間にある検索クエリを抽出し、次の検索に使う

    • 具体的に以下のプロンプト定義のところで参照できる
    def get_gpqa_search_o1_instruction(MAX_SEARCH_LIMIT):
        return (
            "You are a reasoning assistant with the ability to perform web searches to help "
            "you answer the user's question accurately. You have special tools:\n\n"
            "- To perform a search: write <|begin_search_query|> your query here <|end_search_query|>.\n"
            "Then, the system will search and analyze relevant web pages, then provide you with helpful information in the format <|begin_search_result|> ...search results... <|end_search_result|>.\n\n"
            f"You can repeat the search process multiple times if necessary. The maximum number of search attempts is limited to {MAX_SEARCH_LIMIT}.\n\n"
            "Once you have all the information you need, continue your reasoning.\n\n"
            "Example:\n"
            "Question: \"What is the energy range of pp III neutrinos?\"\n"
            "Assistant thinking steps:\n"
            "- I might need to look up details about pp III neutrinos.\n\n"
            "Assistant:\n"
            "<|begin_search_query|>pp III neutrino energy spectrum<|end_search_query|>\n\n"
            "(System returns processed information from relevant web pages)\n\n"
            "Assistant continues reasoning with the new information...\n\n"
            "Remember:\n"
            "- Use <|begin_search_query|> to request a web search and end with <|end_search_query|>.\n"
            "- When done searching, continue your reasoning.\n\n"
        )
    

メリットとデメリット

  • メリット
    • 動的知識補完
      • 検索トリガーを活用した能動的な知識取得により、モデル内部の知識不足を補い、誤った推論の伝播を抑制する
    • 推論の一貫性
      • Reason-in-Documents モジュールが冗長な情報をフィルタリングすることで、外部知識と推論チェーンの論理的一貫性を確保する
  • デメリット
    • 計算コストの増大
      • 頻繁な検索とドキュメント解析により、特に多段階推論タスクでは推論遅延が発生する可能性がある
    • LLMの推論能力への依存
      • 高度な検索補助機構を備えていても、タスク分解の力や最終的な推論の質はモデル自身の能力に大きく依存する

LLMの推論能力への依存を解消する方法(DeepRAGのアプローチ)

また、以下の論文では、上述の問題点を踏まえた解決策が提案されています。興味深い内容のため、本記事でも少し触れてみます。
本手法では、LLMに対して以下の2段階の学習プロセスを適用し、最適なタスク分解能力と外部検索の要否を判断する能力を習得させることを目指しています。

https://arxiv.org/abs/2502.01142

Stage I: Imitation Learning

  • 目的: LLMに「適応的推論能力(Adaptive Inference Process)」を付与する
  • 方法:
    • Binary Tree Search(バイナリツリー検索) を用いて、推論パスを評価し、最適な推論プロセスを特定できる能力を学習する
    • 検索の最適化:なるべく少ない検索回数で正しい答えに到達するような「最適な検索パターン」を学習する
    • データ合成:模倣学習のために、最適な検索戦略を学習データとして合成し、検索のコストを最小化する

Stage II: Chain of Calibration

  • 目的: LLMが「いつ外部検索を行い、いつ内部知識のみを利用するか」を学習する
  • 方法:
    • 検索の要否を判定するデータを合成し、検索判断の精度を向上する
    • 各サブクエリごとに「外部検索を行うべきか?」「LLMの内部知識で十分か?」を最適に決定できるように、検索の選択肢を学習する
    • 学習した検索判断をLLMの検索戦略に組み込み、無駄な検索を削減しつつ、適切な検索ができるように調整する

以上の2段階(Stage I と Stage II)の学習手順により、モデルは適切なサブクエリ生成と検索意思決定の能力を同時に身につける。

まとめ

RAGの発展に伴い、より高度な検索・推論の仕組みが求められ、Agentic RAG をもとに Search-o1 や DeepRAG といった手法が登場しています。本記事では、それぞれの手法の仕組みを解説し、以下の内容を紹介しました。

  • RAGの進化: Naïve RAG から Agentic RAG へと進化し、検索精度・適応性・推論能力が向上
  • Agentic RAGの特長: 自律型エージェントを活用し、動的意思決定と反復的な改善を行い、より高度な回答を生成
  • Search-o1 フレームワーク: 検索トリガーと多段階検索を組み合わせ、LLMの知識不足による誤りの伝播を抑制
  • DeepRAGのアプローチ: LLMの推論能力への依存を軽減するため、適応的推論能力を付与し、検索の要否を判断する能力を学習させることで、検索効率と推論精度を向上

参考

最後に、Givery AIラボでは、最新の生成AI技術を活用し、PoCやAI導入支援など、さまざまなニーズにお応えするソリューションを提供しています。ご興味がある方は、ぜひ以下よりお問い合わせください。

https://givery.co.jp/lp/ai-lab/

Givery AI Lab

Discussion