背景や目的
生成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 モデル | 未チェック ※検索結果をそのまま採用すべく |
| トップ K | 10 ※経験的にこの程度で |
| スコア閾値 | 未チェック ※上位10全て参照させる意図で |
そして、以下の画面が表示されました。

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


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


これでナレッジ情報はセットされました。その上の検索設定も気になり、下表の値をセットしました。
| 設定項目 | 値 |
|---|---|
| Rerank設定 | ウェイト設定 ※初期値のまま。基本的にRerankさせたくない。 |
| ウェイト設定下のスライダー | “セマンティクス1.0 0キーワード” ※詳細不明ですが、こうしておきました。 |
| トップ K | 10 ※ナレッジベースの設定に合わせました。 |
| スコア閾値 | 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 | アルバイト経験者のテレワーク勤務許可申請はどうする? |
| 3 | PCを物理破壊するが、必要な申請等を教えて下さい。 |
| 4 | PCの管理者アカウントを登録する場合の申請等はありますか? |
| 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エージェント」のキーワードでチェックします。お読み頂きましてありがとうございました。
お気づきの点がありましたら、以下の「ご連絡フォーム」から、コメントを頂けますと幸いです。
