逆呼び出しノードとは、プラグインがDify内のChatflow/Workflowアプリケーション内部のノードにアクセスできる機能を指します。

Workflow 内の ParameterExtractor(パラメータ抽出器)QuestionClassifier(問題分類器)ノードは、より複雑なプロンプトとコードロジックをカプセル化しており、LLM を通じて多くのハードコーディングでは解決困難なタスクを完了することができます。プラグインはこれら2つのノードを呼び出すことができます。

パラメータ抽出器ノードの呼び出し;

エントリーポイント

    self.session.workflow_node.parameter_extractor

インターフェース

    def invoke(
        self,
        parameters: list[ParameterConfig],
        model: ModelConfig,
        query: str,
        instruction: str = "",
    ) -> NodeResponse
        pass

ここで、parameters は抽出する必要のあるパラメータのリストであり、modelLLMModelConfig 仕様に準拠し、query はパラメータを抽出する元のテキストであり、instruction はLLMに追加で与える必要のある可能性のある指示です。NodeResponse の構造については、こちらのドキュメントを参照してください。

使用例

会話の中から特定の人物名を抽出したい場合は、以下のコードを参照してください。

from collections.abc import Generator
from dify_plugin.entities.tool import ToolInvokeMessage
from dify_plugin import Tool
from dify_plugin.entities.workflow_node import ModelConfig, ParameterConfig

class ParameterExtractorTool(Tool):
    def _invoke(
        self, tool_parameters: dict
    ) -> Generator[ToolInvokeMessage, None, None]:
        response = self.session.workflow_node.parameter_extractor.invoke(
            parameters=[
                ParameterConfig(
                    name="name",
                    description="name of the person",
                    required=True,
                    type="string",
                )
            ],
            model=ModelConfig(
                provider="langgenius/openai/openai",
                name="gpt-4o-mini",
                completion_params={},
            ),
            query="My name is John Doe",
            instruction="Extract the name of the person",
        )

        yield self.create_text_message(response.outputs["name"])

問題分類器ノードの呼び出し

エントリーポイント

    self.session.workflow_node.question_classifier

インターフェース

    def invoke(
        self,
        classes: list[ClassConfig],
        model: ModelConfig,
        query: str,
        instruction: str = "",
    ) -> NodeResponse:
        pass

このインターフェースパラメータは ParameterExtractor と同じで、最終的な戻り結果は NodeResponse.outputs['class_name'] に格納されます。