ナレッジベース作成&ドキュメントアップロード

1 ナレッジベースの作成

Difyのメインナビゲーションバーからナレッジベースをクリックすると、既存のナレッジベースが表示されます。ナレッジベースの作成をクリックして作成ウィザードに進みます:

  • ファイルが準備できている場合は、ファイルのアップロードから始めてください。

  • まだ文書が準備できていない場合は、空のデータセットを作成してください。

データセット作成時に外部データソースを選択した場合、そのナレッジベースのタイプは変更できません。これは、単一のナレッジベースで複数のデータソースを使用することによる管理の困難を防ぐためです。複数のデータソースを使用する場合、複数のナレッジベースを作成することをお勧めします。


2 ドキュメントのアップロード

ナレッジベース内でのドキュメントのアップロード手順:

  1. ローカルからアップロードするドキュメントを選択します。

  2. セグメンテーションとクリーニングを行い、効果をプレビューします。

  3. インデックスと検索戦略を選択および設定します。

  4. セグメンテーションの埋め込みを待ちます。

  5. アップロードが完了し、アプリケーションで使用できるようになります🎉

ドキュメントのアップロード制限:

  • 単一のドキュメントのアップロードサイズは15MBに制限されています。

  • 一度にアップロードできるファイルの最大数は20個です。

  • SaaS版の異なるサブスクリプションプランは、バッチアップロードの数、ドキュメントの総アップロード数、ベクトルストレージに制限があります。

3 セグメンテーションとクリーニング

セグメンテーション:大規模言語モデルには限られたコンテキストウィンドウがあるため、通常は全体のテキストをセグメントに分割し、ユーザーの質問に最も関連性の高いセグメントを召喚します。これを「セグメンテーショントップK召喚モード」と呼びます。また、ユーザーの質問とテキストセグメントをセマンティックマッチングする際、適切なセグメンテーションサイズは関連性の最も高いテキスト内容をマッチングするのに役立ち、情報ノイズを減らします。

クリーニング:テキスト召喚の効果を確保するために、データをモデルに入力する前にクリーニングが必要です。たとえば、出力に不要な文字や空行が含まれている場合、回答の品質に影響を与える可能性があります。この問題を解決するために、Difyはさまざまなクリーニング方法を提供し、出力を下流のアプリケーションに送信する前にクリーニングすることができます。

セグメンテーションとクリーニングは2つの設定方法をサポートしています。

  • 自動モード(近日廃止予定)

  • カスタムモード

カスタムモードでは、ユーザーは異なるドキュメント形式やシナリオ要件に応じてテキストのセグメンテーションとクリーニング戦略を設定できます。

セグメンテーションルール:

  • セグメンテーション識別子:識別子(例:"\n")を設定すると、テキストにその識別子が現れるたびにセグメンテーションが行われます。

  • セグメントの最大長:テキストの文字数の最大上限に基づいてセグメンテーションを行い、その長さを超えると強制的にセグメンテーションが行われます。

  • セグメントの重複長:セグメント間の重複文字数を設定します。セグメントの長さの10〜25%に設定することが推奨され、セグメント間のセマンティック関連性を保ち、多セグメント召喚時の効果を向上させます。

前処理ルール:

  • 連続する空白、改行、タブ文字の置換。

  • すべてのURLとメールアドレスの削除。


4 ETL オプション設定

RAGのプロダクションレベルのアプリケーションでは、データ召喚の効果を向上させるために、複数のデータソースを前処理およびクリーニングする必要があります。これをETL(抽出、変換、ロード)と呼びます。非構造化/半構造化データの前処理能力を強化するために、Difyは以下のオプションのETLソリューションをサポートしています:Dify ETLUnstructured ETL

Unstructuredは、データを抽出してクリーンなデータに変換し、後続のステップに使用できるようにします。

Difyの各バージョンでのETLソリューションの選択:

  • SaaS版では選択不可、デフォルトでUnstructured ETLを使用。

  • コミュニティ版では選択可能、デフォルトでDify ETLを使用、環境変数を介してUnstructured ETLを有効にできます。

ファイル解析のサポート形式の違い:

DIFY ETLUnstructured ETL

txt、markdown、md、pdf、html、htm、xlsx、xls、docx、csv

txt、markdown、md、pdf、html、htm、xlsx、xls、docx、csv、eml、msg、pptx、ppt、xml、epub

異なるETLソリューションではファイル抽出の効果にも違いがあります。Unstructured ETLのデータ処理方法について詳細を知りたい場合は、公式ドキュメントを参照してください。


5 インデックス方式

テキストのインデックス方式を選択してデータのマッチング方法を指定する必要があります。インデックス戦略は検索戦略と密接に関連しているため、シナリオ要件に基づいて適切なインデックス方式を選択する必要があります。

**高品質モード:**OpenAIの埋め込みインターフェースを使用して処理を行い、ユーザーのクエリに対してより高い精度を提供します。

エコノミーモード:キーワードインデックス方式を使用し、精度を下げる代わりにトークンを消費しません。

**Q&A モード(コミュニティ版のみサポート):**Q&Aセグメンテーションモード機能は、上記の通常の「Q to P」(質問からテキスト段落へのマッチング)とは異なり、「Q to Q」(質問から質問へのマッチング)を採用します。文書がセグメント化された後、各セグメントごとにQ&Aマッチングペアを生成し、ユーザーが質問すると、最も類似した質問を見つけ出し、対応するセグメントを回答として返します。この方法はより正確で、ユーザーの質問に直接マッチングし、真に必要な情報をより正確に取得できます。

ナレッジベースにドキュメントをアップロードする際、システムはテキストをセグメント化し、ユーザーの質問(入力)が関連するテキストセグメント(Q to P)にマッチするようにします。最終的に結果を出力します。

質問テキストは完全な文法構造を持つ自然言語であり、文書検索タスクのいくつかのキーワードとは異なります。そのため、Q to Q(質問から質問へのマッチング)のモードは、意味とマッチングをより明確にし、頻度の高い類似した質問シナリオにも対応します。


6 検索設定

高品質インデックスモードでは、Difyは3つの検索オプションを提供します:

  • ベクトル検索:クエリ埋め込みを生成し、そのベクトル表現に最も類似したテキストセグメントを検索します。

  • 全文検索:ドキュメント内のすべての語句をインデックスし、ユーザーが任意の語句をクエリし、それらの語句を含むテキストセグメントを返すことを可能にします。

  • ハイブリッド検索:全文検索とベクトル検索を同時に実行し、Rerankを追加して、2つの検索結果からユーザーの質問に最も適した結果を選択します。RerankモデルAPIの設定が必要です。

3つの検索方式の具体的な設定は以下の通りです:

ベクトル検索

定義:クエリ埋め込みを生成し、そのベクトル表現に最も類似したテキストセグメントを検索します。

トップK:ユーザーの質問と最も類似したテキストセグメントを選択するために使用されます。システムは、選択したモデルのコンテキストウィンドウサイズに応じてセグメント数を動的に調整します。システムのデフォルト値は3です。数値が高いほど、期待されるテキストセグメントの数が増えます。

スコア閾値:テキストセグメントの選択に使用される類似度の閾値を設定します。つまり、設定されたスコアを超えるテキストセグメントのみを選択します。システムのデフォルト設定は、この設定を無効にしており、選択されたテキストセグメントの類似度をフィルタリングしません。有効にした場合、デフォルト値は0.5です。数値が高いほど、期待されるテキストの数が減ります。

Rerankモデル:「モデルプロバイダー」ページでRerankモデルのAPIキーを設定した後、検索設定でRerankモデルを有効にすると、システムはハイブリッド検索の後に再度検索されたドキュメント結果をセマンティックにソートし、ソート結果を最適化します。Rerankモデルを設定すると、トップKとスコア閾値設定はRerankステップでのみ有効です。

全文検索

定義:すべての単語を文書の索引に入れ、ユーザーが任意の単語をクエリとして実行し、その単語を含むテキストスニペットを返します。

トップK:ユーザーの質問と最も類似したテキストセグメントを選択するために使用されます。システムは、選択したモデルのコンテキストウィンドウサイズに応じてセグメント数を動的に調整します。システムのデフォルト値は3です。数値が高いほど、期待されるテキストセグメントの数が増えます。

スコア閾値:テキストセグメントの選択に使用される類似度の閾値を設定します。つまり、設定されたスコアを超えるテキストセグメントのみを選択します。システムのデフォルト設定は、この設定を無効にしており、選択されたテキストセグメントの類似度をフィルタリングしません。有効にした場合、デフォルト値は0.5です。数値が高いほど、期待されるテキストの数が減ります。

Rerankモデル:「モデルプロバイダー」ページでRerankモデルのAPIキーを設定した後、検索設定でRerankモデルを有効にすると、システムはハイブリッド検索の後に再度検索されたドキュメント結果をセマンティックにソートし、ソート結果を最適化します。Rerankモデルを設定すると、トップKとスコア閾値設定はRerankステップでのみ有効です。

ハイブリッド検索

定義:全文検索とベクトル検索を同時に実行して、Rerankを適用し、2つのクエリ結果からユーザーの質問に最適な結果を選出します。このモードでは、重み設定を指定でき、Rerankモデルのみを使用して検索を行うことができます(Rerank APIの構成は必要ありません)。

重み付け設定:ユーザーは、セマンティック優先度やキーワード優先度にカスタムの重みを設定することが可能です。キーワード検索は、ナレッジベース内の全文検索を意味し、セマンティック検索はベクトル検索を指します。

  • セマンティック値が1の場合

セマンティック検索モードのみを活用します。埋め込みモデルを利用することで、クエリ内の正確な用語がナレッジベースになくとも、ベクトル距離を計算し検索の精度を高め、適切なコンテンツを提供します。さらに、複数言語のコンテンツを処理する必要がある場合、セマンティック検索は異なる言語間での意味の変換を捉え、より精確なクロス言語検索結果を提供します。

  • キーワード値が1の場合

キーワード検索モードのみを活用します。ユーザーが入力した情報テキストをナレッジベースの全文とマッチさせ、正確な情報や用語を知っている場合に適しています。この方法は計算リソースの消費が少なく、多くの文書からの高速な検索に適しています。

  • カスタムキーワードとセマンティックの重み付け

セマンティック検索やキーワード検索モードだけでなく、柔軟なカスタム重み付け設定も提供しています。両者の重みを適切に調整することで、ビジネスシナリオに最適な重みの比率を見つけることができます。

トップK:ユーザーの質問と最も類似したテキストセグメントを選択するために使用されます。システムは、選択したモデルのコンテキストウィンドウサイズに応じてセグメント数を動的に調整します。システムのデフォルト値は3です。数値が高いほど、期待されるテキストセグメントの数が増えます。

スコア閾値:テキストセグメントの選択に使用される類似度の閾値を設定します。つまり、設定されたスコアを超えるテキストセグメントのみを選択します。システムのデフォルト設定は、この設定を無効にしており、選択されたテキストセグメントの類似度をフィルタリングしません。有効にした場合、デフォルト値は0.5です。数値が高いほど、期待されるテキストの数が減ります。

Rerankモデル:「モデルプロバイダー」ページでRerankモデルのAPIキーを設定した後、検索設定でRerankモデルを有効にすると、システムはハイブリッド検索の後に再度検索されたドキュメント結果をセマンティックにソートし、ソート結果を最適化します。Rerankモデルを設定すると、トップKとスコア閾値設定はRerankステップでのみ有効です。

Last updated