このプロンプトをコピーして、Agentに貼り付けてください。Difyプラグインの開発を支援し、ベストプラクティスとコードサンプルを提供します。
Exception: Multiple subclasses of Tool in /path/to/file.py
tools/encrypt.py
は EncryptTool
クラスのみを含めることができ、DecryptTool
を同時に含めることはできませんFeatureTool
の命名パターンに従う必要がありますutils/
ディレクトリに配置しますtools/
ディレクトリに配置しますprovider/
ディレクトリに配置しますImportError: cannot import name 'x' from 'module'. Did you mean: 'y'?
provider/your_plugin.yaml
に新しいツールを追加します:
Multiple subclasses of Tool
エラーが発生した場合:
class AnotherTool(Tool):
のような追加のクラス定義を探しますTool
から継承したクラスが1つだけであることを確認しますencrypt.py
が EncryptTool
と DecryptTool
を含んでいる場合、EncryptTool
を残し、DecryptTool
を decrypt.py
に移動しますException: Multiple subclasses of Tool in /path/to/file.py
ImportError: cannot import name 'x' from 'module'. Did you mean: 'y'?
tools/new_feature.yaml
tools/new_feature.py
、1ファイル1Toolサブクラスであることを確認Multiple subclasses of Tool
エラーが発生した場合:
class AnotherTool(Tool):
のような追加のクラス定義を探しますTool
から継承したクラスが1つだけであることを確認しますencrypt.py
が EncryptTool
と DecryptTool
を含んでいる場合、EncryptTool
を残し、DecryptTool
を decrypt.py
に移動しますclass XxxTool(Tool):
定義が含まれている必要がありますworking/
ディレクトリに progress.md
を作成しますrequirements.txt
で明示的に宣言する必要がありますopen()
、read()
、write()
など)を避けますdify plugin init
コマンドを使用して基本的なプロジェクト構造を作成します:
utils/
ディレクトリに補助関数を作成し、コア機能ロジックを実装します:
helpers.py
に外部サービスとのインタラクションや複雑なロジックを処理する関数を実装します
tools/
ディレクトリにツール実装クラスを作成し、各機能に対して:
Tool
基本クラスを継承して _invoke
メソッドをオーバーライドしますprovider/
ディレクトリに検証ロジックを実装します:
provider/your_plugin.yaml
を編集して認証情報定義を追加しますprovider/your_plugin.py
に _validate_credentials
メソッドを実装します.env
ファイルを設定してローカルテストを行います:
Multiple subclasses of Tool
:ツールファイルに複数のToolサブクラスが含まれていないか確認しますImportError: cannot import name
:インポートされた関数名が正しくスペルされているか確認しますToolProviderCredentialValidationError
:認証情報検証ロジックを確認しますutils/
ディレクトリに配置する必要がありますtools/
ディレクトリに配置する必要がありますprovider/
ディレクトリに配置する必要がありますcp tools/existing_tool.py tools/new_tool.py
のようなコマンドを使用しますresource
、meta
、plugins
などの部分を変更しないでくださいtype
や version
などの基本フィールドを変更しないでくださいtools
リストに新しいツールYAMLファイルへの参照を追加しますtools/feature_name.yaml
llm
(AIが抽出)または form
(UI設定)に設定しますFeatureTool
パターンに従い、ファイル名に対応します.get()
メソッドを使用し、デフォルト値を提供します: param = tool_parameters.get("param_name", "")
yield
を使用して様々なタイプのメッセージを返します~=
を使用して依存関係のバージョン範囲を指定しますdify_plugin
を必ず含めます.get()
メソッドを使用し、デフォルト値を提供します: param = tool_parameters.get("param_name", "")
if not param: yield self.create_text_message("Error: Required parameter missing.")
.get()
メソッドを使用し、Noneが返されることを許可します: optional = tool_parameters.get("optional_param")
if not required_param: return error_message
if optional_param: do_something()
open()
、read()
、write()
などの直接的なファイル操作を使用しないでくださいcat tools/problematic_file.py
cat utils/the_module.py
_validate_credentials
メソッドの実装を確認するget()
を使用する: param = tool_parameters.get("param_name", "")
timeout=10
try/except
を使用して例外をキャッチする