Files
LangBot/plugins/misc/AgenticRAG/readme/README_ja_JP.md

7.6 KiB

AgenticRAG

AgenticRAG は、現在の pipeline に設定された知識ベースを Agent から呼び出せるツールとして公開し、利用可能な KB の確認と必要な情報の検索を可能にします。

役割

  • query_knowledge という 1 つのツールを提供します
  • 2 つのアクションをサポートします
    • list: 現在の pipeline で利用可能な知識ベースを一覧表示
    • query: 1 つまたは複数の知識ベースから関連ドキュメントを検索
  • 結果を JSON で返すため、Agent がそのまま後続の推論に利用できます

全体設計

AgenticRAG は新しい RAG エンジンではなく、「いつ検索するか」を制御するためのプラグインです。

変えているのは検索アルゴリズムそのものではなく、検索のタイミングを誰が決めるか です。

  • runner が毎回自動で検索するのではなく
  • モデルが今このターンで検索が必要かを判断し
  • 利用可能な KB を確認し
  • 1 つまたは複数の KB を明示的に選んで検索する

この設計は、naive RAG の「毎回先に検索する」方式が持つノイズ、文脈浪費、不必要な断片注入を避けるためのものです。

実装の仕組み

このプラグインは新しい RAG バックエンドを実装するものではありません。LangBot にある、query_id 単位でスコープされた知識検索 API をツールとして薄くラップしています。

  • list_pipeline_knowledge_bases():現在の query がアクセス可能な知識ベースを列挙
  • retrieve_knowledge():1 つまたは複数の KB から検索し、統合された top-k 件の結果を取得

ツール実行時には runtime が現在の query_id を自動で注入します。QueryBasedAPIProxy がこの文脈を保持するため、ツール側で明示的に渡す必要があるのは次の項目です。

  • kb_id または kb_ids
  • query_text
  • top_k

基盤の runtime 自体は metadata filter を扱えますが、このプラグインでは現時点で Agent フローのツール呼び出しに raw な metadata filter を公開していません。知識エンジンやベクターバックエンドごとに metadata の項目名、型、値の形式、filter の意味が揃っておらず、Agent 側にその schema を安定して渡す仕組みがまだないためです。

今後、知識ベースごとに利用可能な filter 項目や演算子を統一的に記述できる仕組みが整えば、metadata filter を Agent に開放することは可能です。

どのように動くか

AgenticRAG の 1 回の処理は、おおむね 4 段階です。

1. naive RAG を無効化する

PromptPreProcessing の段階で、plugin は現在の LLM が tool call を使えるかを先に確認します。

  • tool call を使える場合は runner の _knowledge_base_uuids をクリアし、既定の naive RAG 前処理を止めます
  • tool call を使えない場合は naive RAG を残し、KB 検索自体が失われないようにします

2. 検索方針を system prompt に注入する

同時に、追加の system prompt を注入して、モデルに次の点を明示します。

  • 設定済み KB がその領域の主要な情報源であること
  • 自動検索のフォールバックは存在しないこと
  • 事実、規則、手順、製品仕様、設定などの質問では query_knowledge を優先すべきこと

これは、tool description だけでは検索行動を十分に安定化できないことが多いためです。

3. モデルに KB 一覧確認と検索をさせる

その後、モデルは次の 2 段階で動けます。

  • action="list" で利用可能な KB を確認する
  • action="query" で 1 つまたは複数の KB を検索する

単一 KB の場合は kb_id、複数 KB を並列検索する場合のみ kb_ids を使います。

4. 結果を構造化 JSON で返す

ツールは結果をマージし、knowledge_base_id などを補った JSON を返します。これによりモデルはそのまま推論を継続できます。

セキュリティ

このツールは、現在の pipeline に設定された知識ベースだけを対象にします。

  • LangBot runtime 側でも、kb_id が現在の pipeline に属しているか再検証します

そのため、prompt injection だけで pipeline 外の任意の KB を検索することは想定されていません。

使い方

  1. このプラグインをインストールして有効化します。
  2. 現在の pipeline の local agent 設定で、1 つ以上の知識ベースを関連付けます。
  3. Agent に query_knowledge を呼ばせます。
    • まず action="list" で利用可能な KB を確認します
    • 次に action="query" で、単一 KB なら kb_id、複数 KB を並列検索するなら kb_ids を渡します
    • あわせて query_text と、必要に応じて統合結果数を表す top_k を渡します

なぜこの設計なのか

このプラグインの目的は明確です。

  • LangBot の既存 KB / 検索基盤をそのまま活かす
  • 不要な常時検索をやめる
  • 検索判断を agent loop に戻す
  • それでもアクセス範囲は現在の pipeline に厳密に限定する

naive RAG と比べると、この設計には次の利点があります。

  • KB が不要なターンでは文脈がよりクリーンになる
  • モデルがどの KB を使うかを明示的に選べる
  • 「まず list、次に query、必要なら再 query」という段階的検索ができる

一方で、モデルがまったくツールを呼ばなければ KB 内容は一切入ってきません。

そのため AgenticRAG は「モデルが自然に検索してくれるはず」とは考えず、system prompt と tool prompt の両方で検索優先の方針を明示しています。

そのため現在の実装では、tool call 非対応モデルに対して naive RAG を無効化しない保護も入れています。これがないと、AgenticRAG を有効にしただけで KB 検索が完全に失われるためです。

パラメータ

action="query" のときに使えるパラメータは以下です。

  • kb_id:単一 KB 検索時の対象知識ベース UUID
  • kb_ids:複数 KB を並列検索するための UUID 配列。複数 KB を同時に検索するときだけ使います
  • query_text:検索クエリ
  • top_k:任意。返す件数。正の整数である必要があり、既定値は 5。統合後の結果数に適用されます

複数 KB の並列検索で一部だけ失敗した場合、ツールは results と failed_kbs を持つ JSON オブジェクトを返し、Agent が部分的な成功結果を継続利用できるようにします。

典型的な流れ

  1. Agent が利用可能な知識ベースを一覧表示します。
  2. 名前と説明を見て、適切な 1 つまたは少数の KB を選びます。
  3. 明確な検索クエリで検索します。
  4. 返却された断片を使って回答または次の推論を行います。

Prompt 設計の意図

現在の prompt 設計がモデルに伝えたいのは主に 2 点です。

  • 知識ベースはその対話領域における権威ある情報源であること
  • AgenticRAG 有効時には自動検索のフォールバックがないこと

この 2 点を明示しないと、LLM は自分の事前学習知識を過信して検索頻度を下げがちです。

そのため現在の実装では、検索方針を tool prompt だけでなく、system prompt にも重ねて入れています。