Skip to main content
A plugin can reverse invoke the capabilities of certain nodes within a Dify Chatflow/Workflow application. Plugins can call the ParameterExtractor and QuestionClassifier nodes. Both encapsulate complex prompt and code logic, using LLMs to handle tasks that are difficult to solve with hardcoded rules.

Call the Parameter Extractor Node

Entry Point

    self.session.workflow_node.parameter_extractor

Interface

    def invoke(
        self,
        parameters: list[ParameterConfig],
        model: ModelConfig,
        query: str,
        instruction: str = "",
    ) -> NodeResponse
        pass
  • parameters: The list of parameters to extract.
  • model: Conforms to the LLMModelConfig specification.
  • query: The source text for parameter extraction.
  • instruction: Any additional instructions the LLM might need.
For the structure of NodeResponse, see the General Specifications Definition.

Use Case

This example extracts a person’s name from a conversation:
from collections.abc import Generator
from dify_plugin import Tool
from dify_plugin.entities.tool import ToolInvokeMessage
from dify_plugin.entities.workflow_node import ModelConfig, NodeResponse, ParameterConfig


class ParameterExtractorTool(Tool):
    def _invoke(
        self, tool_parameters: dict
    ) -> Generator[ToolInvokeMessage, None, None]:
        response: NodeResponse = 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",
        )

        extracted_name = response.outputs.get("name", "Name not found")
        yield self.create_text_message(extracted_name)
NodeResponse is a Pydantic model defined in dify_plugin.entities.workflow_node with three dictionary fields: process_data, inputs, and outputs. Extracted values live under response.outputs.

Call the Question Classifier Node

Entry Point

    self.session.workflow_node.question_classifier

Interface

    def invoke(
        self,
        classes: list[ClassConfig],
        model: ModelConfig,
        query: str,
        instruction: str = "",
    ) -> NodeResponse:
        pass
ClassConfig is also exported from dify_plugin.entities.workflow_node. The interface parameters match those of ParameterExtractor, and the final result is stored in response.outputs["class_name"].
Edit this page | Report an issue