AIアプリノーコードツールDifyのRAG精度を確認

背景や目的


生成AIの活用をテーマに開発研究をしています。AIがITシステムに与えるのは、破壊的創造なのか単なる機能強化か・・、最近はそんな事を考えております。

”AIエージェント”という言葉をよく聞くようになりました。受け身では無く能動的に考える、という意味のようですが、LLM周辺機能を整備してアプリ化する事だろうと、まずは理解しています。

そのAIエージェント的アプリ(以降、AIアプリ)は、その作成ツールも色々と出ていて、今回はその一つを試してみました。とりわけ、LLMを補うRAGは重要なので、その精度を確認をしてみます。ノーコードツール採用検討の一助にもなれば幸いです。

試用の方針


AIアプリのノーコードツールは、以下の様に試してゆきます。
1.利用ツール
 Dify を使います。割と多く紹介されている印象です。→公式ページ
2.試す機能
 とりあえずRAGを実現してみます。AIエージェントの中心機能と思いますので。
3.使うデータ
 別途構築済で試験運用中のRAGツールのデータを使います。精度比較がし易いので。
 内容的には、社内ナレッジの情報です。
4.精度確認の方法
 別途稼働中のRAGツールと、同じ質問を投げて比較してみます。

構築手順サマリー


まずはDifyでAIアプリを作成しますが、こんな感じで進めます。

1.Difyの初期登録
 会員登録等をします。
2.Difyでアプリ作成
 アプリを新規作成し、RAGを実現するようなブロック(流れ図?)を登録します。
3.ナレッジ情報を追加
 既存RAGのベクトルDBから出力したデータを、Difyアプリのナレッジに登録します。
4.その他設定の確認
 質問入力して回答文が返却されるために必要な諸設定をします。
5.動作確認
 Difyコンソール上で簡単な動作確認をしておきます。
6.RAG精度の確認
 別途稼働中の自前のRAGツールと比較してみます。

構築1:Difyの初期登録


とにかくDifyを使ってみます。まずは初期登録から致します。
・ブラウザで https://dify.ai/jp にアクセスし「始める →」を押します。

・上の右の画面でご自身のメールアドレスを入力し「コードで続行」を押します。

・メールに認証コードが届くので、それを上の左の画面で入力し「確かめる」を押します。そうすると、メイン画面が表示されます(上の右図)。

これで初期登録はおしまいです。あっさりしていますね。
チームに別メンバを招待できるか気になり、価格メニューを見てみたら、PROFESSIONAL版からそれは出来そうでした。
その他の各版の情報は下図の通り。必要に応じてご参照ください。


今回は体験版のまま、どんどん先に進みます。

構築2:Difyでアプリ作成


今回試作したいRAGを使ったAIアプリを作るために、画面内の「アプリを作成する」を進めます。

・メニューの「最初から作成」を押し、作成画面(右図)を開きます。

・作成画面では以下の値を入力し、「作成する」を押しました。

入力項目
アプリのアイコンと名前:名前テストAIアプリ ※お好きな名称で
アプリのアイコンと名前:アイコンロケットの絵 ※お好みで
説明(任意)既存RAGツールとの比較用アプリです。
※何でも良いはず

以下画面が表示され、アプリが作成されたようです。この画面で、色々追加する事になりそうです。

今回作りたいRAGツールにするべく、ブロックを追加してゆきます。
開始→知識検索→LLM→回答
とすれば良さそうなので、やってみます。
・「+」ボタン(ブロック追加)を押し、知識検索を選びます。

・ブロック「知識検索」が追加されるので、ドラッグ等で線を繋いでおきます。

最終的に上の右図のようになればOKです。4つのブロックが順番に繋がっています。

とにかく全部繋がったので、次は個々の設定をします。
LLMブロックでは、具体的にLLMをセットしておく必要があり、それをします。

・LLMブロックを押し、右欄でAIモデル→モデルを設定する→モデルプロバイダー設定、を押します。

・開いたモデルプロバイダーの画面では、お好きな一つを押します。
 ※お手元の利用可能な先を選択して下さい。私はOpenAIを選択しています。

・上の右図でインストールを押すと下図が表示され、モデルプロバイダ選択が完了します。

・使えるようにするために「セットアップ」を押してAPIキー等の情報を登録しおきます。
 ※お手元で保有済の値を入力して下さい。

APIキーを登録したら、緑マークに変化していました(上図)。

さて、もう一度アプリ作成の画面に戻って確認します。
・モデルプロバイダ画面をxボタンで閉じ、リロードしました。

LLMのところに”gpt-4″が出現しました!

[追記]初期状態のgpt-4は高額です。適切なモデルに変更しておきましょう。下図の操作で可能です。

これでアプリ作成は一旦完了です。次はナレッジ情報を作成します。

構築3:ナレッジ情報を追加


冒頭で示した通り、別途構築済運用中RAGツールのデータをそのまま使いたく、まずはそのベクトルデータベースからデータを抜き出します。

手順は割愛しますが、最終的に以下のようなデータを用意しました。

データ形態テキストファイル
ファイル数1
情報の概要社内のルール情報を収容
情報の数1038個
情報の区切り文字¥n¥n

ルール情報の内容は、イメージ的には以下のようなものです。

以下は、社内ルール等の応答情報です。
user:A
メール受信を開始したいです。どうしたら良いですか?
user:B
以下のルール集に記載があります。項目「メールの利用」を参照して、設定等を進めて下さい。
 https://drive.google.com/file/d/xxxxx
user:A
ありがとう。わかりました。

Difyのアプリ作成画面では、これをナレッジとしてセットします。
・再度画面を開き、今度は知識検索マークを押し、ナレッジベース横の+を押します。

・表示された小画面では作成に進むを押し、データソースではテキストファイルから・・を押します。

・上の右の画面では、さらに、テキストファイルをアップロード欄の参照をクリックし、先ほどのテキストファイルをアップします。
・次の画面で次へを押すと、細かな設定をする画面が表示されます。

・ここが肝と思われます。下表の値を設定をして、「保存して処理」を押しました。

設定項目
チャンク設定(汎用モード/親子モード)汎用 ※今回のデータは親子構造は無いので
チャンク識別子¥n¥n ※前述の通りコレで区切っていたので
最大チャンク長4000 ※中には大きいのがありそうで、MAXにした
チャンクのオーバーラップ0 ※今回のデータでは必要性を感じないので
テキストの前処理ルール(何もチェックせず) *データをそのままで
インデックス方法高品質 ※embeddingモデル利用はこれのよう
埋め込みモデルtext-embedding-ada-002 ※経験的にこれで十分かと
検索設定(ベクトル検索/全文検索/ハイブリッド検索)ベクトル検索 ※別途構築済のRAGツールに合わせた
Rerank モデル未チェック ※検索結果をそのまま採用すべく
トップ K10 ※経験的にこの程度で
スコア閾値未チェック ※上位10全て参照させる意図で

そして、以下の画面が表示されました。

ナレッジ情報の追加はこれで完了です。

アプリ内の知識検索ブロックにこれをまだセットしていないので、それをやります。
・もう1度アプリ作成の画面に戻り、下図のように作成したナレッジをセットします。

これでナレッジベースがセットされました。

これでナレッジ情報はセットされました。その上の検索設定も気になり、下表の値をセットしました。

設定項目
Rerank設定ウェイト設定 ※初期値のまま。基本的にRerankさせたくない。
ウェイト設定下のスライダー“セマンティクス1.0  0キーワード” ※詳細不明ですが、こうしておきました。
トップ K10 ※ナレッジベースの設定に合わせました。
スコア閾値OFF ※ナレッジベースの設定に合わせたく、初期値のまま。

これで知識検索ブロックは設定完了です。

右上にアプリ全体のアラートが2件ありまして、最後にその対応をします。

構築4:その他設定の確認


アラートの内容は、以下の2点でした。

変数を使って各ブロックの細部を定義する必要がありそうで、LLMから順番にやります。
・LLMブロックの詳細画面を再度開き、下表の値を追加設定をします。

設定項目
コンテキストの上段(変数値){x} result ※知識検索ブロックの出力変数を選択
コンテキストの下段(SYSTEM)あなたは質問に回答するテクニカルセンターのチャットbotです。
以下のユーザーからの質問に対して、以下の検索結果を参考にして回答して下さい。
検索結果の中に質問に対する答えがない場合や、わからない場合、不確かな情報で回答しないでください。
回答文に「https://」や「http://」で始まるリンク箇所があればその部分はそのwebページを別ウィンドウで開くようにHTMLタグを追記してください。

##ユーザーからの質問(開始)##
<{x} sys.query> ★1
##ユーザーからの質問(終了)##

##検索結果(開始)##
<コンテキスト> ★2
##検索結果(終了)##

※指示文は既存RAGツールのものを踏襲し、変数参照部はDify仕様に合わせた

SYSTEMの★1★2は/コマンドでリストから選択しました。ご注意下さい。
さて、これでアラートが1つ減りました。次は回答ブロックを直します。
・回答ブロックの詳細画面を再度開き、下表の値で設定情報を修正をします。

設定項目
応答{x} text  ※/ 入力でこれを選択。LLMブロックの出力変数。

これで全てアラートが消えました。

以上でAIアプリが完成したはずなので、動作確認をしてみます。

構築5:動作確認


簡単な確認だけしておきます。
・画面上部のプレビュー押すと、右側にチャット画面風のエリアが表示されます。

「こんにちは」と入力し、回答文が返ってくれば良し、とします。

・上右図の入力欄で「こんにちは」を入力し、送信マークを押します。

・やりとりのエリアを見ますと・・。


回答文が返ってきました。ナレッジ情報も参照されていそうですね。大丈夫です!

AIアプリは完成です。いよいよ本題のRAG精度の確認に進みます。

RAG精度の確認:既存RAGと比較


既存RAGとは、私がローコードツール等を使わず構築したシステムで、数か月試験運用をしていて比較的精度が高い状態です。今回それと比較をしてみます。

同じ質問を双方で試しました。以下の5問です。(実際の質問文は少し恥ずかしいので、デフォルメしてあります。)

No.質問文(要約)
1個人情報保護に関する調査票が届いた。申請はどうすれば良い?
2アルバイト経験者のテレワーク勤務許可申請はどうする?
3PCを物理破壊するが、必要な申請等を教えて下さい。
4PCの管理者アカウントを登録する場合の申請等はありますか?
5常駐先で利用中のメールを社内PCでも受信したい。手続きを教えて。

そして、試した結果は以下の通りでした。

No.既存RAG Dify 短評
1
[try1]回答文が生成されず。
 ”This model’s maximum context length is 8192 tokens.”のエラー
[try2]検索設定のトップKを4に変更し、
 回答を含んだ意中のチャンクを含み(1位)、要約文も問題無し。
2
意中のチャンクを含み(3位)、要約文も問題無し。
3
意中のチャンクを含み(1位)、要約文も問題無し。
4
意中のチャンクを含み(1位)、要約文も問題無し。
5
No.1と同様の状況。LLMブロックでgpt-4が変更可能と気づき、それをgpt-4.1に変更し、回答文が表示された。
意中のチャンクを含み(1位)、要約文も問題無し。

結果は、良好ですね。想像よりも良い印象でした。

Dify試用後の考察


色々と良く分かりました。Difyを本番利用する事を考えて少し考察してみます。

1.検索自体の精度
・embeddingモデルはtext-embedding-ada-002等が使えるので、そこは問題無さそう。
・何種類か検索方法があったが、今回はベクトル検索を使用した。
 →期待通りの精度だった。対向のデータベースが良かった事にも起因していそう。
2.検索用データベースについて
・今回は、”Difyでチャンク化して検索HIT率が高まりそうな形式のファイル”を別途作成。
 →情報を整形せず文字数等で分割する方法で良い精度が出るか、は不明。今回未確認。
 →逆に言えば、データ作成ができる案件なら精度は問題無いと言えそう。
3.回答文作成の質
・モデルプロバイダーはOpenAIを選択した。
・途中で8192tokenエラーが出た(懐かしい)。gpt-4が初期値だった事が原因。
 →gpt-4以上が使えるので、まず機能的には問題無しです。
 →4.1と4の価格差は大きい($2/Mtと$30/Mt)ので、うっかり高額消費しないよう注意😱。
  ※モデルの種類は要確認。後から変更が可能!
4.開発方法(ノーコードツールの効果)
・複雑なロジックをコードにする必要は無かった。(既存RAGツールもそこは同じ。)
・「チャット画面を作る」レベルでは、概ね直感的な操作だった。
・データは、別途PGを使って整形したものを使用。なので本ツールの恩恵は不明。
・デプロイは、上で紹介していませんが、画面のURLが直ぐ発行できました。
 →チャット画面等をpythonとjavascriptを使ってコードを書くよりは簡単。
 →前後の処理を考慮し適切な変数をセットする、等はあり、非技術者はサポートが必要そう。
 →発行された画面に機能追加(認証や他システム連携)する時は、都度検討が必要。

まとめ


ノーコードツールで商用レベルのRAGツールが作成できるか、Difyを使って試してみました。
結果は、予想よりも良かった印象です。精度はデータ次第という点は、実行後も変わりませんが、画面作ってデプロイするという点ではとても楽ですね。

商用利用に向けては「精度の事」と「動作不良対応」をケアできれば使えそうな気がしますが、ユーザ対応も含めてDifyの事はもう少し深堀したいと思います。

引き続き、参考になりそうな情報をご紹介させて頂きます。しばらくは「AIエージェント」のキーワードでチェックします。お読み頂きましてありがとうございました。

お気づきの点がありましたら、以下の「ご連絡フォーム」から、コメントを頂けますと幸いです。

ご連絡フォーム


フィードバックを是非お願いします。
本記事の方法での問題点や、よりよい方法のアイデアを頂けると大変助かります。

この記事に関して

その他のご連絡

DevAIsをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む