アプリのリバース呼び出しとは、プラグインがDify内のアプリデータにアクセスできることを指します。このモジュールは、ストリーミングと非ストリーミングの両方のアプリ呼び出しをサポートしています。リバース呼び出しの基本的な概念にまだ慣れていない場合は、まずDifyサービスのリバース呼び出しをお読みください。

インターフェースタイプ:

  • Chatbot/Agent/Chatflow タイプのアプリケーションはすべてチャットタイプのアプリケーションであり、同じタイプの入力パラメータと出力パラメータを持つため、統一してチャットインターフェースと見なすことができます。
  • Workflowアプリケーションの場合、単独でWorkflowインターフェースを占有します。
  • Completion(テキスト生成アプリケーション)アプリケーションの場合、単独でCompletionインターフェースを占有します。

注意:プラグインは、プラグインが存在するワークスペース内のアプリにのみアクセスできます。

チャットインターフェースの呼び出し

エントリーポイント

    self.session.app.chat

インターフェース規約

    def invoke(
        self,
        app_id: str,
        inputs: dict,
        response_mode: Literal["streaming", "blocking"],
        conversation_id: str,
        files: list,
    ) -> Generator[dict, None, None] | dict:
        pass

response_modestreaming の場合、このインターフェースは直接 Generator[dict] を返します。そうでない場合は直接 dict を返します。具体的なインターフェースフィールドについては、ServiceApi の戻り結果を参照してください。

使用例

Endpoint内でチャットタイプのアプリを呼び出し、結果を直接返すことができます。

import json
from typing import Mapping
from werkzeug import Request, Response
from dify_plugin import Endpoint

class Duck(Endpoint):
    def _invoke(self, r: Request, values: Mapping, settings: Mapping) -> Response:
        """
        Invokes the endpoint with the given request.
        """
        app_id = values["app_id"]

        def generator():
            response = self.session.app.workflow.invoke(
                app_id=app_id, inputs={}, response_mode="streaming", files=[]
            )

            for data in response:
                yield f"{json.dumps(data)} <br>"

        return Response(generator(), status=200, content_type="text/html")

Workflowインターフェースの呼び出し

エントリーポイント

    self.session.app.workflow

インターフェース規約

    def invoke(
        self,
        app_id: str,
        inputs: dict,
        response_mode: Literal["streaming", "blocking"],
        files: list,
    ) -> Generator[dict, None, None] | dict:
        pass

Completionインターフェースの呼び出し

エントリーポイント

    self.session.app.completion

インターフェース規約

    def invoke(
        self,
        app_id: str,
        inputs: dict,
        response_mode: Literal["streaming", "blocking"],
        files: list,
    ) -> Generator[dict, None, None] | dict:
        pass

関連リソース