見出し画像

Difyでウェブクローリング情報をRAGで入れて創ったAIアプリ---ベラドンナ様の旅行ガイド01

はじめに

私の、Dify関連の記事の一番初めの記事の最後にRAGについて次のように記載しました。
あ、記事はこれです。

以下、引用、、、
Difyは、RAG(Retrieval-Augmented Generation)が比較的に簡単に構成でき、かつ入力用の文章の分割設定などが結構細かくできるというのが、大きな特徴でもあるからです。

このあたり(RAGの詳細について)は、にゃんたさんの下記のYouTube動画に詳しい説明があります。

引用終わり。

RAGとウェブスクレイピングを使ったAIアプリ

ということで、次は、RAGを使ったAIアプリを試してみよう、と思ってたら、Difyがv.0.6.11にバージョンアップされて、Firecrawlとの連携が可能になり、RAGのリソースとして、ネットからのスクレイピング情報が使えるようになったとのこと。

私の中では、スクレイピングまたはクローリングするということと、次にそれを使えるように知識化する、ということには、大きな隔たりがあったので、DifyとRAG技術により、それが(知識化)が比較的簡単にできるというのが、マジックに思えました。

などなどで、まずは、実際に操作してみようと考えた次第です。

ということで、今回のDifyは、v.0.6.11ベースです。

今回のAIアプリ

今回のAIアプリもDifyのChat Flowで作成しました。
ま、最低限の極シンプルな構成です。

今回のフロー

今回もChat Flowを使って創っていきます。
お試しですので、1から4までの単純なフローです。


知識検索(Knowledge Retrieval) node

ここでの、ポイントは、2.知識取得です。ちなみに、Difyのヘルプでは、知識検索(Knowledge Retrieval)と記されてます 。
初めて使うnodeですが、ヘルプに出力変数やコンテキスト変数などとの関係等、色々と説明があります。ここにあるフローの例は、上記と同じでした。
最もシンプルな例ということです。

ということで、このKnowledge Retrieval関連(以下、KR nodeと記載します)の事前準備が今回のフローでは新規事項となります。

事前準備(Knowledge Retrieval関連)

今回は、このnodeの関連として、まず、Firecrawlの設定が事前に必要です。
また、場合によっては、RAG関連の再ランクモデルを使うためにcohereの設定が必要です。

このあたりの説明は、既に、いろいろと先駆者の皆さんが解説されていますのでとても参考になります。

DifyとRAG

まず、RAGに関しての理解が必要です。DifyとRAGの説明としては、上記のにゃんたさんのYoutube動画が私的には、ベストでした。

これによって、Difyの各設定項目の考え方への理解が進みます。
特にチャンク関連の設定で、最大チャンク長やチャンクのオーバーラップなどの設定についての説明が丁寧です。

また、ここでは、再ランク(rerank)モデルについての説明もあります。
ここでは、cohereのマルチリンガルのモデルが推薦されてます。

Firecrawlの設定

次にFirecrawlの設定ですが、例えば、下記のChatGPT研究所の無料部分の記載に丁寧にそのオペレーション手順が示されています。

また、下記にも、Firecrawlの設定手順が記載されています。
さらに、設定項目の詳細についても説明があるので、大変参考になりました。

具体的には、下記の項目などです。

設定できる項目として6つの項目があります。

  • Crawl sub-pages(配下のサブページもクロールするか)

  • Limit(デフォルト: 10)

  • Exclude paths

  • Include only paths

  • Max Depth

  • Extract only main content (ヘッダー、ナビバー、フッターなどを除外)

特にMax Depthの説明が有益でした。

知識の設定-1  クロール関連

ということで、以下では、FirecrawlやCohereなどのAPIが既に取得できているという状態からのメモです。知識の設定について順番にメモしていきます。

KRnodeの具体的な設定のポイントのメモ、で備忘録です。

具体的には、下記のメニューからの始まりです。ナレッジを選びます。

すると、新たな知識を作成というのが、常に左端に現れます。クリックします。

新たな知識作成の開始です。これから、設定がたくさんあります。
まず、下記の画面が出ます。

右端のウェブサイトからの同期を選ぶと、上記の画面となります。

コンテンツ的に最重要なのは、オレンジの枠のアドレスです。
ここに、アドレスを入力して、そこからの情報を得るわけです。

今回は、旅行ガイド、を作ってみるということで、KKRホテルズ&リゾートのウェブ情報をスクロールしてみました。今回のトライアルも、個人PC内でのdockerベースの設定ですので、完全にクローズドな環境での使用となります。

今回の段階でのメモするポイントは、その下の①と②です。

ここは、指定したメインのアドレス以下をスクロールします、という前提なのですが、①の上の✅。これは、普通は必須かと思います。

それで、総数でどれぐらいの数をサーチするかというのが①の設定です。
また、メインのアドレスからどれぐらい深掘りするかというのが②です。

この部分は、実用性の観点からは、とても大事です。

今回の、v.0.6.11レベルでは、色々トライしたところ次のような制限にあるようです。今後、変わる可能性があります。というか、現状はかなり限定されているので、増えて欲しいです。

で、現状では、次の範囲のようです。
① 100以内(200などそれ以上に設定すると、100に再設定されます)
② 上記に収まる範囲の深掘りレベル(下記のMax Depthの説明参照)

例えば、今回の例では、②を、3としたときに、①は56となりました。②を4にするとフリーズしました。というか一見無限トライアルモード、、、もしくはエラーとなりました。

本当は、もう一段深掘りしたレベル4までの情報を一括で欲しかったのですが、できませんでした。今回トライしたアドレスでは、②を4とすると、トータルで①の100の制限を超えてしまうからだと思われます。

Max Depth について(②)
クロールする深さの限度を設定します。深さはURLの階層で表現され、入力したURLを起点として相対的に指定します。

深さ0:入力したURLのページのみをクロールします。
深さ1:入力したURLのページと、そのページ内の1階層下のリンク先のページをクロールします。
深さ2:入力したURLのページと、そのページ内の1階層下と2階層下のリンク先のページをクロールします。

以降、深さを増やすごとに、次の階層のリンク先のページがクロールに含まれていきます。

後の設定は、そのままで、Run、をクリックします。
webの各アドレスの調査が始まります。

アドレスが表示されたら、基本、select all をチェックして、対象となるすべてのアドレスを選択します。不要と思われるアドレスは、チェックを外します。
次へ、をクリックします。

知識設定-2  テキストの前処理とクリーニング-1

下記のような画面が表示されます。これは全体の最初の部分です。
まず下記画面のチャンク設定です。

ま、普通は自動で良いかと思います。ただ、ここでは、にゃんたさんのPDF用の情報をそのまま使い、下記のカスタム設定をしてみます。
今回のウェブ情報では、ちょっと違うかもしれません。分かったら、改訂します。

最大チャンク長とオーバーラップは、PDF等の場合のIBMの研究成果に基づき、上記の値に設定します。これは、にゃんたさんの情報準拠です。Webスクレイピングの場合は違うかもしれません。

なお、すべてのURLとメールアドレスを削除する、のチェックを入れた方がいいような気もするのですが、ここではわかってないのでしてません。

知識設定-3  テキストの前処理とクリーニング-2

次の設定画面を示します。

これらは、プリ設定のままです。
特記事項として、にゃんたさんの説明動画の時点では、質問と回答形式でセグメント化の項目での使用可能な言語が、英語と中国語だけだったのですが、現在は、言語が増えており、日本語も可能になっています。RAGの観点では、これは結構意味を持つように思います。

現時点では、これも理解していないのと、今回のお試しではおそらく意味がないので設定はしません。なお、質問と回答形式で、整理する際に、LLMを駆使するので、トークンをかなり使うことになるようです。

知識設定-4  テキストの前処理とクリーニング-3

最後は、RAGの検索設定です。
おすすめ通り、ハイブリッド検索を選択します。

ただし、にゃんたさんのおすすめに従い、rerankモデルをcohereのマルチリンガルv3.0に変更します。これは、オレンジの四角で囲んだマークをクリックすると各自のAPI設定状況に応じて選択できます。

なお、CohereのAPIは今のところ無料のようです。

以上の設定が終わったら、画面一番下の、保存して処理、をクリックします。

知識設定-5   ナレッジの作成

次のような画面で、次々とナレッジ化されていく様子が現れます。
表題は、ナレッジが作成されました、とありますが、処理中でもこのタイトルです。下記は、処理中の画面です。

終了後(=すべて100%)、下記の、ドキュメントに移動、をクリックします。


知識設定-6   作成したナレッジの検証等

すると、下記の画面に遷移します。左側に3つリストがありますが、初期は、一番上のドキュメントの画面になっています。
下では、真ん中の検索テストを選択した状態です。

テスト実施の例です。

無事動作することが、確認できました。
今回の知識の名称を、”KKR情報2024/7/5” としました。
この名称等は、さきほどの画面の設定で確認と修正ができます。

また、一番下の埋め込みモデルは、変更できます。例を示します。

ここでは、cohereの埋め込みモデルを選んでいます。

以上で、知識の設定が終了しました。

次に検証ため、これを組み込んだフローを実際に動かしてみます。
予想以上に長くなったので、ここで一旦終了し、別の記事で続きを示します。

ここまでの感想

このトライアルで、感じたのは、エラーで止まるのはまだしも、訳もわからず、一見回っているように感じるケースです。

止める術がありません。この時は、dockerを止めました。悪手かもしれません。

現状のDifyは、自らver.0.6..と語っているように、実用レベル的には、まだまだな感じがします。

例えば、使えるトークン数。その値の大きさが売りのGemini1.5Proで8kトークンです。 少ないです。ちなみに、ご本家では最近、200万トークンの入力が可能になったようです。

また、今回のウェブクローリングも100アドレスまでです。これまた少ないです。

でも、面白い。私のようなレベルでも、例えば今回のような知識取得をウェブから得ることができる。ウェブをサーベイしてそれを簡単に知識化できます。あとはアイデアとニーズ次第でしょうか。

案外、このレベルでも、結構、実用性があるようにも思います。

現状と今後

既に今は、さらに魅力的な改訂版のv.0.6.12が登場しており、v.0.6.11関連の設定情報などが、noteなどに公開されて約2週間以上が経過しているという状況です。

今回の記事は、例によって、YouTubeやnote、Xなどの公開情報ベースで設定などトライした結果ですが、、一応ちゃんと動作しているように見えるのができたようですので、メモした次第です。

ただ、noteなどでは、設定等の肝心なところは有料というのも散見されます。

私のレベルのメモが、有料の記事を超えるというのは、考えられませんが、それでも、これから試してみたいという方のなんらかのご参考になれば、幸いです。

ただし、各パラメータの設定などで、RAG等の精度などがかなり変わるようです。また、そもそもウェブ情報の表や図の情報が正しくよみとれているのか、など、実用上はまだまだ色々な課題がありそうだ、というのが現状かと思います。

にゃんたさんのYoutube動画

今回の設定例等では、そのあたりの検証が全くなされていません。

今後、これらの扱いのノウハウが、実際の使えるAIアプリ作成のためには必要に思います。

それでは、次回、具体的なフローと各nodeの設定をメモします。


この記事が気に入ったらサポートをしてみませんか?