このドキュメントでは、Difyのツールプラグインを開発する方法を詳しく説明します。Google Searchを例に、プラグインの初期化、テンプレートの選択、ツールプロバイダー設定ファイルの定義、サードパーティサービス認証情報の追加、ツール機能コードの実装、デバッグ、パッケージ化と公開までの完全なツールプラグイン開発フローを紹介します。
Google Search
を例に、ツールプラグインを迅速に開発する方法を紹介します。
dify
にリネームし、/usr/local/bin
パスにコピーした場合、以下のコマンドを実行して新しいプラグインプロジェクトを作成できます。
以下では、コマンドラインの例としてdify
を使用します。問題が発生した場合は、dify
コマンドをコマンドラインツールの実際のパスに置き換えてください。
Tool
プラグインを選択します。
プラグイン開発に慣れている場合は、テンプレートを使用せずに、一般仕様のガイドラインを参照して、さまざまなタイプのプラグイン開発を完了できます。
ターミナル内で方向キーを使用して権限を選択し、「Tab」キーを使用して権限を付与します。すべての権限項目にチェックを入れた後、Enterキーを押してプラグインの作成を完了します。システムは自動的にプラグインプロジェクトコードを生成します。
/provider
パスに移動し、そこにあるyamlファイルを google.yaml
にリネームします。この yaml
ファイルには、ツールプロバイダーの情報(プロバイダー名、アイコン、作成者などの詳細)が含まれます。この情報はプラグインのインストール時に表示されます。
コード例
/tools
ディレクトリに配置されるようにしてください。完全なパスは次のとおりです。
google.yaml
ファイルは、プラグインプロジェクトにおける絶対パスを使用する必要があります。この例では、プロジェクトのルートディレクトリにあります。YAMLファイル内のidentityフィールドは次のように説明されます:identity
には、作成者、名前、ラベル、説明、アイコンなど、ツールプロバイダーの基本情報が含まれます。
_assets
フォルダに配置する必要があります。SerpApi
が提供する Google Search API を採用することを選択します。SerpApi
は使用にあたって API Key の入力を要求するため、yaml
ファイル内に credentials_for_provider
フィールドを追加する必要があります。
完全なコードは以下の通りです。
credentials_for_provider
の子構造は、一般仕様の要件を満たす必要があります。tools/google_search.yaml
ファイルのみが含まれています。google.py
に配置しましたが、一時的に実装せず、まず google_search
のコードを作成します。yaml
ファイルで記述する必要があります。
引き続き GoogleSearch
ツールを例に、/tools
フォルダ内に新しい google_search.yaml
ファイルを作成します。
identity
には、ツールの基本情報(名前、作成者、ラベル、説明など)が含まれます。parameters
パラメータリスト
name
(必須)パラメータ名、一意であり、他のパラメータと重複することはできません。type
(必須)パラメータタイプ。現在、string
(文字列)、number
(数値)、boolean
(ブール値)、select
(ドロップダウンリスト)、secret-input
(暗号化入力フィールド)の5種類をサポートしています。機密情報にはsecret-input
タイプを使用してください。label
(必須)パラメータラベル、フロントエンド表示用。form
(必須)フォームタイプ。現在、llm
、form
の2種類をサポートしています。
llm
はLLMが自身で推論するパラメータを示し、form
はこのツールを使用するために事前に設定できるパラメータを示します。llm
と form
の両方をフロントエンドで入力する必要がありますが、llm
のパラメータはツールノードの入力変数として機能します。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がこのパラメータをよりよく理解できるように、ここにこのパラメータに関するできるだけ詳細な情報を記述してください。/tools
ディレクトリにgoogle_search.py
を作成し、内容は以下の通りです。
serpapi
にリクエストを送信し、self.create_json_message
を使用して json
形式のフォーマット済みデータを返すことです。返されるデータ型の詳細については、プラグインのリモートデバッグおよび永続ストレージKVのドキュメントを参照してください。
ToolProviderCredentialValidationError
例外がスローされます。検証が成功すると、google_search
ツールサービスに正しくリクエストが送信されます。
/provider
ディレクトリに google.py
ファイルを作成し、コードの内容は以下の通りです。
.env.example
ファイルをコピーして .env
にリネームし、取得したリモートサーバーアドレスとデバッグキーなどの情報を入力します。
.env
ファイル:
python -m main
コマンドを実行してプラグインを起動します。プラグインページで、このプラグインがWorkspaceにインストールされていることが確認でき、チームの他のメンバーもこのプラグインにアクセスできます。
google.difypkg
ファイルが見つかります。これは最終的なプラグインパッケージです。