Dify:ナレッジの作成(RAG)

Difyでは、様々な文書をナレッジとして登録しておき、チャットフローなどから利用することができます。

文書の登録

ファイルアップロード

データソースとして利用可能なものは、以下の通りです。

まずは、テキストファイルからインポートを試してみます。

txt以外の場合は、含まれているテキストを抽出した上で、データベースに登録することになります。

ここでのデータベースは、ベクトルデータベースというものです。文章を全てベクトルに変換して登録することで、LLMが類似文章を見つけやすくなっています。

対象となる文書がtxt以外の場合には、別途前処理を行うことで検索効率が上がる場合があります。

チャンク設定

チャンクとは、一塊の文章のことです。入力されたテキストを、一定のサイズに分割します。

チャンク識別子

チャンクを強制的に分割する文字列です。”\n\n”は段落を切れ目とします。複数の識別子を”,”で区切って設定することもできます。

最大チャンク長

一つのチャンクの最大長を設定します。一般には、500〜1000程度が良いとされています。

チャンクのオーバーラップ

チャンクの切れ目でをオーバラップさせることで、チャンク間の連続性を保ちます。一般には、チャンク長の10%程度を設定します。

テキストの前処理ルール

チャンク分割の前に、テキストに対して前処理を行います。ここに記載されている以外の前処理は、プログラムで処理を記述します。

QA形式で分割

文書から自動的に「よくある質問」を想定し、QA形式に変換されます。FAQ応答に利用するナレッジでは、特に有効だと思います。

「チャンクをプレビュー」すると、どのように分割されるのかが確認できます。

以下の文書をQA形式で分割した場合の例です。

タイトル:令和5年京都観光総合調査結果【概要】

形式:PDF 5ページ

URL:https://www.city.kyoto.lg.jp/sankan/cmsfiles/contents/0000313/313644/gaiyou.pdf

※グラフ、表、コメントなどが含まれています。

埋め込みモデル

チャンクをベクトル化する時に使用するモデルです。次元数が大きいほど情報量が増えて、検索の精度が上がります。コストがかかりますが、精度を上げるためにはtext-embedding-3-largeを選択すると良いかと思います。コストが気になる場合には、voyageも選択肢になります。

検索設定

検索方法の設定は、対象となる文書によって最適解が異なりますが、通常はハイブリッド検索がおすすめです。

ハイブリッド検索は、ベクトル検索と全文検索(キーワード)とを組み合わせた検索です。さらにRerankモデルを設定しておくことで、検索精度は上がります。

「保存して処理」を押すと、データベースの作成が始まります。

関連する文書が複数ある場合には、「ファイルを追加」して同様に登録作業をおこまいます。

全ての文書のステータスが「利用可能」になれば、ナレッジ化の完了です。

(参考)ナレッジ登録の自動化

定型的なナレッジの登録はプログラムからも実行可能です。例えば、「月例報告」のようなものがあれば、所定のフォルダにおくことで、自動で登録することも可能です。

目次