【Difyアプリ】RAGデータを生成し社内問合せ用チャットボットアプリを作成しました

RAGを活用した事例として最も多いのが社内の問い合わせ業務を効率化するというものです。システム部門や総務部に、社内で利用しているツールの使い方や、社内手続きについて問い合わせが来ることは多く、人が増えれば増えるほど業務負荷が上がっていきます。

FAQやチャットボットの導入によって解決はできますが、導入コストが結構高くなってしまうのが難点です。

そこで今回はDifyアプリを使って無料で社内問合せ用チャットボットアプリを実装しました!
弊社では人事労務ソフトにfreee人事労務を使用しているのですが、この使い方が分からず問合せがちょくちょく発生するので、これを自動化していきたいと思います。

RAGにするURLの選定

Difyでは「ナレッジ」という機能があり、かんたんにWebサイトやドキュメントをRAGとしてデータ化し、LLMで参照するようにすることができます。まずはナレッジに登録するURLを選定します

freee人事労務にはヘルプセンターがあるので、その上位階層となるページのURLを取得します

ナレッジの登録

取得するURLが決まったら上部タブの「ナレッジ」から「知識の作成」を選択します

以下のように設定します。クローリングにはFirecrawlを使用しています
「Crawl sub-pageg」にチェックを入れ、URL内の被リンクもクローリングするよう設定します。
今回は100ページ取得(「Limit」で設定)し、階層は3階層まで取得(「Max depth」で設定)するようにしました

しかしRunで実行した結果、下位階層のページを一つもスクレイピングできず、情報を取得できませんでした。
おそらくページによっては下位階層を再帰的にクローリングすることができない仕様になっているものだと思われます。同様の事象として以下のようなケースもあり、日本語サイトだとうまくスクレイピングできないケースがあるようです

一括で全ヘルプページを取得することは一旦あきらめ、ひとつづつURLを登録していきます。まずは以下のページから

上記と同じ手順で実行します。実行後は以下の設定です

検索設定はハイブリット検索がおススメです。
ハイブリッド検索を使用するには再ランクモデルの設定が必須でAPI Keyを発行する必要があります。今回はcohereを使いました。

ベクトル検索だとチャンクでテキストが分けられ、その中からプロンプトに対する合致度合いが高いものを抽出するため、チャンクが適切に分けられていない場合には情報が欠落する場合があります。
一方で全文検索だと全情報から取得するため、情報が欠落することはありませんが、類似度合いを考慮することが難しいため、関係のない情報まで引っ張ってきてしまう場合があります。

そのため、両者のいいところを取ったハイブリッド検索がおススメです。キーワード検索による明確さ・正確性と、ベクトル検索の意味的な類似度比較の強みを併せ持つ検索手法で、一番精度が高いことが多いようですね。特に今回のようなヘルプページの情報検索には向いているかと

登録完了

同じ要領で複数のURLをスクレイピングし、以下の5つのURLを登録しました(実際の運用としてはこれだけだと不十分なのですが力尽きたのであとでやります…)

Difyワークフローの実装

全体像としては以下のような形です

「開始」でユーザに入力させる変数を登録します

「知識取得」で先ほど取得したRAGを設定します。取得したRAGは「コンテキスト」として変数に登録されます

LLMでプロンプトを入力し、コンテキストを元に問い合わせに対する回答をするよう指示します

問合せを実行

いい感じで正しく出力できました!画像を出力できないのが難点ではありますが、社内問合せに対するチャットボットとしては十分かなと

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