Skip to main content
⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、英語版を参照してください。
データソースプラグインは、Dify 1.9.0で導入された新しいタイプのプラグインです。ナレッジパイプラインにおいて、ドキュメントデータソースとして機能し、パイプライン全体の起点となります。 この記事では、データソースプラグインの開発方法について、プラグインアーキテクチャ、コード例、デバッグ方法を網羅し、データソースプラグインの迅速な開発とリリースを支援します。

前提条件

読み進める前に、ナレッジパイプラインの基本的な理解とプラグイン開発に関する知識があることを確認してください。関連情報はこちらで確認できます:

データソースプラグインの種類

Difyは3種類のデータソースプラグインをサポートしています:Webクローラー、オンラインドキュメント、オンラインドライブ。プラグインコードを実装する際、プラグインの機能を提供するクラスは特定のデータソースクラスを継承する必要があります。3種類のプラグインタイプはそれぞれ異なる親クラスに対応しています。
親クラスを継承してプラグイン機能を実装する方法については、Difyプラグイン開発:Hello Worldガイド - 4.4 ツールロジックの実装を参照してください。
各データソースプラグインタイプは複数のデータソースをサポートしています。例えば:
  • Webクローラー:Jina Reader、FireCrawl
  • オンラインドキュメント:Notion、Confluence、GitHub
  • オンラインドライブ:OneDrive、Google Drive、Box、AWS S3、Tencent COS
データソースタイプとデータソースプラグインタイプの関係を以下に示します。

データソースプラグインの開発

データソースプラグインの作成

スキャフォールディングコマンドラインツールを使用して、datasourceタイプを選択することでデータソースプラグインを作成できます。セットアップが完了すると、コマンドラインツールが自動的にプラグインプロジェクトコードを生成します。
通常、データソースプラグインはDifyプラットフォームの他の機能を使用する必要がないため、追加の権限は必要ありません。

データソースプラグインの構造

データソースプラグインは3つの主要コンポーネントで構成されています:
  • manifest.yamlファイル:プラグインの基本情報を記述します。
  • providerディレクトリ:プラグインプロバイダーの説明と認証実装コードを含みます。
  • datasourcesディレクトリ:データソースからデータを取得するための説明とコアロジックを含みます。

正しいバージョンとタグの設定

  • manifest.yamlファイルで、最小サポートDifyバージョンを以下のように設定します:
  • manifest.yamlファイルで、Dify Marketplaceのデータソースカテゴリにプラグインを表示するために以下のタグを追加します:
  • requirements.txtファイルで、データソースプラグイン開発に使用するプラグインSDKバージョンを以下のように設定します:

データソースプロバイダーの追加

プロバイダーYAMLファイルの作成

プロバイダーYAMLファイルの内容は基本的にツールプラグインと同じですが、以下の2点のみ異なります:
プロバイダーYAMLファイルの作成について詳しくは、Difyプラグイン開発:Hello Worldガイド-4.3 プロバイダー認証情報の設定を参照してください。
データソースプラグインはOAuth 2.0またはAPIキーによる認証をサポートしています。OAuthの設定については、ツールプラグインにOAuthサポートを追加するを参照してください。

プロバイダーコードファイルの作成

  • APIキー認証モードを使用する場合、データソースプラグインのプロバイダーコードファイルはツールプラグインと同一です。プロバイダークラスが継承する親クラスをDatasourceProviderに変更するだけです。
  • OAuth認証モードを使用する場合、データソースプラグインはツールプラグインとわずかに異なります。OAuthでアクセス権限を取得する際、データソースプラグインはフロントエンドに表示するユーザー名とアバターを同時に返すことができます。そのため、_oauth_get_credentials_oauth_refresh_credentialsnameavatar_urlexpires_atcredentialsを含むDatasourceOAuthCredentials型を返す必要があります。 DatasourceOAuthCredentialsクラスは以下のように定義されており、返す際に対応する型を設定する必要があります:
_oauth_get_authorization_url_oauth_get_credentials_oauth_refresh_credentialsの関数シグネチャは以下の通りです:

データソースの追加

YAMLファイル形式とデータソースコード形式は、3種類のデータソースによって異なります。

Webクローラー

WebクローラーデータソースプラグインのプロバイダーYAMLファイルでは、output_schemaは常に4つのパラメータを返す必要があります:source_urlcontenttitledescription
Webクローラープラグインのメインロジックコードでは、クラスはWebsiteCrawlDatasourceを継承し、_get_website_crawlメソッドを実装する必要があります。次に、create_crawl_messageメソッドを使用してWebクロールメッセージを返します。 複数のWebページをクロールしてバッチで返すには、WebSiteInfo.statusprocessingに設定し、create_crawl_messageメソッドを使用して各バッチのクロールされたページを返します。すべてのページがクロールされた後、WebSiteInfo.statuscompletedに設定します。

オンラインドキュメント

オンラインドキュメントデータソースプラグインの戻り値には、ドキュメントの内容を表すcontentフィールドを少なくとも含める必要があります。例えば:
オンラインドキュメントプラグインのメインロジックコードでは、クラスはOnlineDocumentDatasourceを継承し、2つのメソッドを実装する必要があります:_get_pages_get_content ユーザーがプラグインを実行すると、まず_get_pagesメソッドを呼び出してドキュメントのリストを取得します。ユーザーがリストからドキュメントを選択した後、_get_contentメソッドを呼び出してドキュメントのコンテンツを取得します。

オンラインドライブ

オンラインドライブデータソースプラグインはファイルを返すため、以下の仕様に準拠する必要があります:
オンラインドライブプラグインのメインロジックコードでは、クラスはOnlineDriveDatasourceを継承し、2つのメソッドを実装する必要があります:_browse_files_download_file ユーザーがプラグインを実行すると、まず_browse_filesを呼び出してファイルリストを取得します。この時点で、prefixは空であり、ルートディレクトリのファイルリストを要求していることを示します。ファイルリストにはフォルダとファイルタイプの変数が含まれています。ユーザーがフォルダを開くと、_browse_filesメソッドが再度呼び出されます。この時点で、OnlineDriveBrowseFilesRequestprefixはそのフォルダ内のファイルリストを取得するために使用されるフォルダIDになります。 ユーザーがファイルを選択した後、プラグインは_download_fileメソッドとファイルIDを使用してファイルのコンテンツを取得します。_get_mime_type_from_filenameメソッドを使用してファイルのMIMEタイプを取得でき、パイプラインが異なるファイルタイプを適切に処理できるようになります。 ファイルリストに複数のファイルが含まれている場合、OnlineDriveFileBucket.is_truncatedTrueに設定し、OnlineDriveFileBucket.next_page_parametersをファイルリストの次のページを取得するために必要なパラメータ(サービスプロバイダーに応じて次のページのリクエストIDやURLなど)に設定できます。
AWS S3のようなストレージサービスでは、prefixbucketid変数には特別な用途があり、開発中に必要に応じて柔軟に適用できます:
  • prefix:ファイルパスのプレフィックスを表します。例えば、prefix=container1/folder1/container1バケット内のfolder1フォルダからファイルまたはファイルリストを取得します。
  • bucket:ファイルバケットを表します。例えば、bucket=container1container1バケット内のファイルまたはファイルリストを取得します。このフィールドは、非標準S3プロトコルドライブでは空白のままにできます。
  • id_download_fileメソッドはprefix変数を使用しないため、完全なファイルパスをidに含める必要があります。例えば、id=container1/folder1/file1.txtcontainer1バケット内のfolder1フォルダからfile1.txtファイルを取得することを示します。
公式Google Driveプラグイン公式AWS S3プラグインの具体的な実装を参照できます。

プラグインのデバッグ

データソースプラグインは、リモートデバッグまたはローカルプラグインとしてインストールしてデバッグする2つのデバッグ方法をサポートしています。以下の点に注意してください:
  • プラグインがOAuth認証を使用している場合、リモートデバッグのredirect_uriはローカルプラグインのものとは異なります。サービスプロバイダーのOAuth Appの関連設定を適宜更新してください。
  • データソースプラグインはシングルステップデバッグをサポートしていますが、完全な機能を確保するために、完全なナレッジパイプラインでテストすることをお勧めします。

最終チェック

パッケージ化と公開の前に、以下のすべてを完了していることを確認してください:
  • 最小サポートDifyバージョンを1.9.0に設定。
  • SDKバージョンをdify-plugin>=0.5.0,<0.6.0に設定。
  • README.mdPRIVACY.mdファイルを作成。
  • コードファイルには英語のコンテンツのみを含める。
  • デフォルトアイコンをデータソースプロバイダーのロゴに置き換える。

パッケージ化と公開

プラグインディレクトリで以下のコマンドを実行して.difypkgプラグインパッケージを生成します:
次に、以下のことができます:
  • Dify環境にプラグインをインポートして使用する。
  • プルリクエストを送信してDify Marketplaceにプラグインを公開する。
プラグイン公開プロセスについては、プラグインの公開を参照してください。

Edit this page | Report an issue