詳細なインターフェースドキュメントを読む前に、Difyプラグインのツール統合プロセスについて、大まかな理解があることを確認してください。

データ構造

メッセージの返却

Difyは、テキストリンク画像ファイルBLOBJSONなど、さまざまなメッセージタイプをサポートしており、以下の異なるインターフェースを通じてさまざまなタイプのメッセージを返すことができます。

デフォルトでは、workflow内のツールの出力には、filestextjsonの3つの固定変数が含まれ、以下の方法でこれらの変数のデータを返すことができます。

例えば、create_image_messageを使用して画像を返しますが、ツールはカスタム出力変数もサポートしているため、workflow内でこれらの変数をより便利に参照できます。

画像URL

画像のURLを渡すだけで、Difyはリンクを通じて自動的に画像をダウンロードし、ユーザーに返します。

    def create_image_message(self, image: str) -> ToolInvokeMessage:
        pass

リンク

リンクを返す必要がある場合は、以下のインターフェースを使用してください。

    def create_link_message(self, link: str) -> ToolInvokeMessage:
        pass

テキスト

テキストメッセージを返す必要がある場合は、以下のインターフェースを使用してください。

    def create_text_message(self, text: str) -> ToolInvokeMessage:
        pass

ファイル

画像、音声、動画、PPT、Word、Excelなどのファイルの生データを返す必要がある場合は、以下のインターフェースを使用できます。

  • blob ファイルの生データ、bytes型。
  • meta ファイルのメタデータ。開発者が明確なファイルタイプを必要とする場合は、mime_typeを指定してください。そうでない場合、Difyはデフォルトタイプとしてoctet/streamを使用します。
    def create_blob_message(self, blob: bytes, meta: dict = None) -> ToolInvokeMessage:
        pass

JSON

フォーマットされたJSONを返す必要がある場合は、以下のインターフェースを使用できます。これは通常、workflow内のノード間のデータ転送に使用されます。agentモードでは、ほとんどの大規模モデルもJSONを読み取り、理解することができます。

  • object Pythonの辞書オブジェクトで、自動的にJSONにシリアライズされます。
    def create_json_message(self, json: dict) -> ToolInvokeMessage:
        pass

変数

非ストリーミング出力の変数の場合、以下のインターフェースを使用して返すことができます。複数作成した場合、後者が前者を上書きします。

    def create_variable_message(self, variable_name: str, variable_value: Any) -> ToolInvokeMessage:
        pass

ストリーミング変数

「タイプライター」効果でテキストを出力したい場合は、ストリーミング変数を使用してテキストを出力できます。chatflowアプリケーションでanswerノードを使用し、この変数を参照すると、テキストは「タイプライター」効果で出力されます。ただし、現在この方法は文字列型のデータのみをサポートしています。

    def create_stream_variable_message(
        self, variable_name: str, variable_value: str
    ) -> ToolInvokeMessage:

カスタム変数の返却

workflowアプリケーションでtoolの出力変数を参照したい場合は、出力される可能性のある変数を事前に定義する必要があります。Difyプラグインは、json_schema形式の出力変数定義をサポートしています。以下に簡単な例を示します。

identity:
  author: author
  name: tool
  label:
    en_US: label
    zh_Hans: 标签
    ja_JP: レベル
    pt_BR: etiqueta
description:
  human:
    en_US: description
    zh_Hans: 描述
    ja_JP: 説明
    pt_BR: descrição
  llm: description
output_schema:
  type: object
  properties:
    name:
      type: string

上記のサンプルコードは、簡単なツールを定義し、それにoutput_schemaを指定しています。これにはnameフィールドが含まれており、この時点でworkflow内でこのフィールドを参照できます。ただし、実際に使用するためには、ツールの実装コードで変数を返す必要があることに注意してください。そうしないと、Noneの戻り結果が得られます。