AIエージェントはどこまでできる?DifyとLangChainでRAGタスクの精度評価

1.はじめに

NTT西日本の大賀です。 先日投稿された「話題のAIエージェント作ってみた(話題のAIエージェントを作ってみた - NTT WEST Engineers' Blog)」では、エンジニアが AI エージェントを 1 から実装する方法について紹介されていました。 今回はより幅広い方が AI エージェントに触れる機会となりうるローコード/ノーコードツール「Dify」を用いて AI エージェントを構築し、その実力値を検証した内容をご紹介します。 また、OSS の「LangChain」を使ってフルスクラッチで構築した AI エージェントとの比較検証も実施しました。

※本記事は 2025年11月時点の情報に基づきます。

2.対象読者

本記事が想定する対象読者は以下の通りです。

  • Dify の AI エージェント機能の実力値を知りたい方
  • Dify と LangChain の エージェント精度の比較に興味がある方

3.背景・目的

AI エージェントは、LLM(大規模言語モデル)が事前登録されたツールを自律的に選択・使用しながらユーザーのリクエストに対応する仕組みを指します。

AI エージェントの構築方法には大きく二つあります。

  • 市中の OSS を使って自身でコードを書いて実装する
  • 簡易に実装できるプラットフォーム(Dify など)を使用する

OSS での構築は自由度が高い一方、スキルが求められます。 一方プラットフォームは構築のハードルが下がる代わりに機能制限が存在します。

本記事では LangChain で構築したエージェント と Dify で構築したエージェント を同じタスクで比較し、それぞれの実力値を測定、評価することを目的としました。

4.検証タスク概要

ユーザーからの質問に対し、あらかじめ格納した背景知識から関連する情報を検索し、LLM が回答を作成する RAG タスクを対象としました。

  • 検索対象は Huggingface でRAG 評価サンプル公開されている以下 5 ドメインのドキュメント
    • 金融/IT/製造/流通/公共
  • Dify 側にこれらを検索用ドキュメントとして登録
  • 評価用 QA 約 50 問を作成し、2 種類のエージェントに投入
  • 取得ドキュメントの正しさと生成回答の正しさを評価

【参考】https://huggingface.co/datasets/allganize/RAG-Evaluation-Dataset-JA

5.AIエージェントの構成

5-1.Dify を用いた AI エージェントの構成

  • Difyエージェントアシスタント機能を利用
  • Dify に RAG 用ドキュメントを登録し、検索ツールとして LLM が呼び出せるように設定
  • LLM は Azure OpenAI(AOAI)を API 呼び出しで利用

Difyエージェント構成図

Difyエージェントアシスタントの設定画面

5-2.LangChain を用いた AI エージェントの構成

  • Python が動作する PC 上でエージェントロジックをコーディング
  • RAG ツールは Dify 上に登録したものを API 経由で呼び出し、条件を Dify と統一
  • LLM は AOAI を同様に利用
  • ソースコードは以下の github にサンプルコードを置いています

【参考】https://github.com/TakaOga199/LangchainAIagent_source

LangChainエージェント構成図

6.評価方法

RAG タスクのエージェント性能を以下 2 点で評価しました。

  • 観点1:ドキュメント検索精度

 評価用QA 50 問中、回答に必要なドキュメントを正しく検索で取得できた割合。

  • 観点2:回答生成精度

 正しいドキュメント取得後、LLM が正しい回答を生成した割合。

  • 最終精度 = ドキュメント検索精度 × 回答生成精度

7.検証結果

7-1.初回検証

まずは簡単なプロンプト(指示)をAIエージェントに与え、各AIエージェントがどれくらいの実力値なのかを確認しました。

プロンプト

あなたは5つの業種ドメイン(金融、情報通信、製造、公共、流通・小売)の問い合わせに対して回答するエージェントです。
ユーザーの質問に対して適切な関連文書を検索し、検索で取得した文書の情報のみで回答を作成してください。
回答を生成した際に、ユーザーの質問に対して正しく回答が生成できているかをチェックし、問題や不足がある場合は、再度情報を検索し、回答を修正してください。
ユーザーの質問に正しい回答ができたら、ユーザーに最終回答を提供してください。

結果サンプル

結果の1例としてDifyエージェントでは不正解だったがLangChainエージェントでは正解した例を示します。 同様に5ドメインの質問を合計50問入力し正誤をまとめています。

結果サンプル

結果サマリ

  • 50問の正誤をまとめた結果は以下の通り
エージェント環境 ドキュメント検索精度 回答生成精度 最終精度
Dify エージェント 25% 36% 10%(5/50)
LangChain エージェント 55% 42% 24%(12/50)

考察

  • エージェントの動作ログを確認すると、ドキュメントの検索時にLLMが質問文(クエリ)をキーワードに変換しており、質問の意図に沿わないドキュメントを取得している場合が多く見られた(下画像)
  • 改善のためにプロンプトの内容を見直し検索時の挙動を具体的に記載して再検証を試みます。
  • 回答生成についても、生成した回答の正しさを検証するタスクを明記し、より正しい回答を生成するよう変更。(7-2)

クエリのキーワード化

7-2.プロンプトエンジニアリングによる精度改善

7-1で得られた質問文のキーワード化の課題改善と、正確な回答を狙って、より厳密にエージェントの動作を規定する以下のプロンプトに更新し再度検証を行いました。

プロンプト

あなたは、以下の5つの業種ドメイン(金融、情報通信、製造、公共、流通・小売)に関する問い合わせに対して回答を行うエージェントです。
ユーザーからの質問に基づき、関連する情報を検索し、検索結果に基づいて正確かつ具体的な回答を提供してください。
検索先には必ず必要な情報が含まれている前提で動作してください。
また、検索が不十分で情報が見つからないという回答を避けるために、検索プロセスを徹底的に行ってください。

# 検索プロセス
1. **検索クエリの生成**
   - 最初に、ユーザーの質問をそのまま検索クエリとして使用してください。
2. **検索の再試行**
   - 適切な検索結果が得られない場合は、以下の手順で検索条件を調整してください:
     - 質問文から重要なキーワードを抽出する。
     - 業種ドメインを明確に指定する。
     - キーワードを組み合わせて異なる検索クエリを生成する。
3. **検索範囲**
   - 検索対象には、以下のデータベースやソースを含めてください: [ツール情報は省略]
4. **検索結果の収集**
   - 検索結果が得られた場合は、それに基づいて回答を生成してください。

# 回答生成
- 検索結果で得られた情報のみを使用して、ユーザーの質問に対する正確で簡潔な回答を作成してください。
- 曖昧さを排除することを目指しつつ、関連情報を補足的に探索することを許可します。

# 回答検証
- 作成した回答がユーザーの質問に対して正確であるか、また情報に不足や誤りがないかを確認してください。
- 必要に応じて再度情報を検索して回答を修正してください。

結果サマリ(検索精度のみ)

エージェント環境 検索精度(前回 → 今回)
Dify エージェント 25% → 52%
LangChain エージェント 55% → 75%
  • 両環境ともに検索精度の向上が確認されたが、依然としてDifyとLangChainの間に検索精度の乖離が見られた。

考察

  • ドキュメント検索を行うツールはDifyエージェント、LangChainエージェントで共通
  • LLMの動作を規定するプロンプトやモデルも共通のものを使用
  • 両者で検索精度、回答生成精度に乖離がある理由としては主に以下が考えられます
    1. エージェントの動作を規定する動作ロジック(ソースコード)がDify、LangChain間で異なる
    2. ドキュメント検索ツールの呼び出し方法の違いが検索精度に影響を与えている
  • 1については両エージェントのソースコードを読み解く必要があるため、今回は2の検索ツールの呼び出し方法を2エージェント間でそろえて再検証を実施しました。(7-3)

7-3.検索ツールの呼び出し方法変更

DifyではこれまでDify内のツール呼び出し機能を使用し、LangChainでは同じDify上のツールをAPI経由で呼び出して使用していました。この呼び出し方法の差が精度の差に寄与しているのかどうか確かめるため、Difyのツール呼び出し方法をLangChainに合わせてAPI呼び出しに変更し再度精度検証を行いました。

ツール呼び出し方法の変更後構成図

結果サマリ

エージェント環境 ドキュメント検索精度 回答生成精度 最終精度
Dify エージェント 75% 68% 50%(25/50)
LangChain エージェント 75% 69% 52%(26/50)
  • Difyエージェントの検索精度が向上し、LangChainエージェントと同等の精度となることが確認できました。

考察

  • 今回の検証で検索ツールの呼び出し方法が検索精度に影響を与えていたであろうことが確認できました。
  • Dify内のツール呼び出し機能を使用する際に、何かユーザーには見えないロジックが働いているのではないかと想像しますが、詳細には内部仕様のため分かりませんでした。
  • また、検索結果や回答の中身を見ると7-2で記載した「動作ロジックの差分」はそこまで大きな影響を及ぼすものではないと推測されます。(少なくとも今回のタスクの範囲では)

8. まとめ

  • 今回はGUIベースでAIエージェントを作成できるDifyとフルスクラッチで作成したLangChainのエージェントの精度を「RAGタスク」に絞って比較評価しました。
  • 以下のようなポイントを押さえることで「RAGタスク」の精度が向上することが確認でき、またDifyでもフルスクラッチと同等精度のエージェントを作成することができました。

 1. プロンプトはステップに分解して記載し、各ステップの動作条件についても詳細に記載

 2. ツールの呼び出し手法はAPI呼び出しの方が高精度(今回の検証の場合)

  • とはいえ今回の最終結果である検索精度75%や、最終回答精度50%は仕事など正確さが求められる場面では不安が残る数字であり、引き続きの精度向上が必要と感じます。これは進捗があればまた記事にするかもしれません。

執筆者

大賀 隆寛(NTT西日本)

社内でのAI技術の導入支援を主に担当し、AIのチューニングや評価に携わっています。

商標 

  • 「Microsoft Azure」は,米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
  • 「Dify」は,米国LangGenius, Incの米国およびその他の国における登録商標または商標です。

© NTT WEST, Inc.