このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、英語版 を参照してください。ツールは、Chatflow、Workflow、Agent アプリケーションから呼び出せるサードパーティサービスです。オンライン検索や画像生成などの機能で Dify アプリケーションを拡張します。


前提条件
- Dify プラグインスキャフォールディングツール
- Python 環境(バージョン 3.12)
新しいプロジェクトの作成
スキャフォールディングコマンドラインツールを実行して、新しい Dify プラグインプロジェクトを作成します。dify に名前変更し、/usr/local/bin パスにコピーした場合は、以下のコマンドを実行して新しいプラグインプロジェクトを作成できます:
以下の例では
dify をコマンドとして使用します。問題が発生した場合は、dify をコマンドラインツールのパスに置き換えてください。プラグインタイプとテンプレートの選択
スキャフォールディングツールの各テンプレートは、完全なコードプロジェクトです。この例ではTool プラグインを選択します。

プラグイン権限の設定
プラグインには、Dify プラットフォームからデータを読み取る権限も必要です。このサンプルプラグインに以下の権限を付与します:- Tools
- Apps
- 永続ストレージを有効にし、デフォルトサイズを割り当てる
- Endpoints の登録を許可

ツールプラグインの開発
1. ツールプロバイダーファイルの作成
ツールプロバイダーファイルは YAML ファイルで、プラグインの基本設定として機能し、ツールに必要な認証情報を提供します。 プラグインテンプレートプロジェクトの/provider ディレクトリに移動し、YAML ファイルを google.yaml に名前変更します。このファイルは、ツールプロバイダーの名前、アイコン、作者などの詳細情報を記述し、プラグインのインストール時に表示されます。
サンプルコード:
/tools ディレクトリにあることを確認してください。完全なパスは以下の通りです:
google.yaml は、プラグインプロジェクト内の絶対パスで参照する必要があります。この例では、プロジェクトのルートディレクトリに配置されています。YAML ファイル内の identity には、作者、名前、ラベル、説明、アイコンなど、ツールプロバイダーの基本情報が含まれます。
- アイコンは添付リソースとして、プロジェクトのルートディレクトリの
_assetsフォルダに配置する必要があります。 - タグは、ユーザーがカテゴリ別にプラグインを見つけるのに役立ちます。以下は現在サポートされているすべてのタグです:
2. サードパーティサービス認証情報の追加
この例では、利便性のためサードパーティサービス SerpApi が提供する Google Search API を使用します。SerpApi は API Key が必要なため、YAML ファイルにcredentials_for_provider フィールドを追加します。
完全なコード:
credentials_for_providerのサブレベル構造は、一般仕様 の要件を満たす必要があります。- プロバイダーに含まれるツールを指定します。この例では、
tools/google_search.yamlという 1 つのファイルのみを含みます。 - プロバイダーは基本情報のほかにコードロジックが必要なため、その実装ファイルを指定します。この例では
google.pyを使用しますが、ここでは実装せず、先にgoogle_searchツールのコードを記述します。
3. ツールYAMLファイルの記入
ツールプラグインは複数のツールを含むことができ、各ツールはそれぞれの YAML ファイルで基本情報、パラメータ、出力を記述します。 引き続きGoogleSearch ツールを例として、/tools フォルダに新しい google_search.yaml ファイルを作成します。
identity:名前、作者、ラベル、説明などのツールの基本情報。parameters:パラメータリスト。name(必須):パラメータ名。ツールのパラメータ内で一意である必要があります。type(必須):パラメータタイプ。string、number、boolean、select、secret-inputのいずれかで、それぞれ文字列、数値、ブール値、ドロップダウン、暗号化入力ボックスとして表示されます。機密情報にはsecret-inputを使用してください。label(必須):パラメータラベル。フロントエンドに表示されます。form(必須):フォームタイプ。llmまたはformのいずれか。- Agent アプリケーションでは、
llmはパラメータを LLM が自動的に推論することを意味し、formはツールを使用する前にパラメータを事前設定できることを意味します。 - Workflow アプリケーションでは、
llmとformの両方のパラメータをフロントエンドで入力しますが、llmパラメータはツールノードの入力変数として使用されます。
- Agent アプリケーションでは、
required(任意):パラメータが必須かどうか。llmモードでは、必須パラメータは Agent が推論する必要があります。formモードでは、必須パラメータは会話開始前にフロントエンドで入力する必要があります。
options(任意):パラメータオプション。llmモードでは、Dify はすべてのオプションを LLM に渡し、LLM がそれらに基づいて推論できます。formモードでは、typeがselectの場合にフロントエンドがオプションを表示します。
default(任意):デフォルト値。min(任意):最小値。パラメータタイプがnumberの場合に適用されます。max(任意):最大値。パラメータタイプがnumberの場合に適用されます。human_description(任意):フロントエンドに表示される説明。複数言語をサポートします。placeholder(任意):入力フィールドのヒントテキスト。フォームタイプがformでパラメータタイプがstring、number、secret-inputの場合に適用されます。複数言語をサポートします。llm_description(任意):LLM に渡される説明。LLM がパラメータを理解できるよう、できるだけ詳細に記述してください。
4. ツールコードの記述
ツールの設定が完了したら、ツールのロジックを実装するコードを記述します。/tools ディレクトリに google_search.py を作成し、以下の内容を記述します:
serpapi にリクエストを送信し、self.create_json_message を使用してフォーマットされた JSON データを返します。返却データタイプの詳細については、プラグインのリモートデバッグ と 永続ストレージ KV を参照してください。
5. ツールプロバイダーコードの完成
最後に、プロバイダーの認証情報検証ロジックを実装します。検証が失敗した場合、コードはToolProviderCredentialValidationError 例外を発生させます。検証が成功すると、google_search ツールサービスが正しくリクエストされます。
/provider ディレクトリに google.py ファイルを作成し、以下の内容を記述します:
プラグインのデバッグ
開発が完了したら、プラグインが正常に動作するかどうかをテストします。Dify はリモートデバッグを提供しており、テスト環境でプラグインの機能を素早く検証できます。 プラグイン管理 ページに移動して、リモートサーバーアドレスとデバッグキーを取得します。
.env.example ファイルをコピーして .env に名前変更し、リモートサーバーアドレスとデバッグキーを入力します。
.envファイル:
python -m main を実行してプラグインを起動します。プラグイン ページで、プラグインがワークスペースにインストールされていることを確認でき、チームの他のメンバーもアクセスできます。

プラグインのパッケージング(オプション)
プラグインが正常に動作したら、以下のコマンドでプラグインをパッケージ化して名前を付けます。実行すると、現在のフォルダにgoogle.difypkg ファイルが生成されます。これが最終的なプラグインパッケージです。
プラグインの公開(オプション)
プラグインを Dify マーケットプレイスに公開するには、プラグインが Dify マーケットプレイスへの公開 の仕様に従っていることを確認してください。レビューに合格すると、コードはメインブランチにマージされ、自動的に Dify マーケットプレイス で公開されます。 全体の手順については、公開の概要 を参照してください。さらに探索
クイックスタート
プラグインインターフェースドキュメント
- 一般仕様:マニフェスト構造とツール仕様。
- Endpoint:詳細な Endpoint の定義。
- リバース呼び出し:Dify 機能のリバース呼び出し。
- モデルスキーマ:モデル。
- Agent プラグイン:Agent 戦略の拡張。
次のステップ
- プラグインのリモートデバッグ:より高度なデバッグテクニックを学びます。
- 永続ストレージ:プラグインでデータストレージを使用します。
- Slack Bot プラグイン開発例:より複雑なプラグイン開発ケース。
- ツールプラグイン:ツールプラグインの高度な機能。