# Workflow application

> A workflow breaks down complex tasks into ordered steps to reduce system complexity. In Alibaba Cloud Model Studio, workflows let you combine nodes, such as large models, APIs, and Function Compute, to reduce coding costs.

<Tip>
  - <strong>Console access restrictions:</strong> Only users who created Alibaba Cloud Model Studio applications <strong>in the Singapore region</strong> before <strong>April 21, 2025</strong> can access the <strong>Application Development</strong> tab.

    > This tab contains the following features: Applications ([agent application](/help/en/model-studio/single-agent-application) and [workflow application](/help/en/model-studio/workflow-application)), Components ([prompt engineering](/help/en/model-studio/prompt-template) and [plug-in](/help/en/model-studio/plug-in-overview)), and Data ([knowledge base](/help/en/model-studio/rag-knowledge-base) and [application data](/help/en/model-studio/data-import-instructions)). <strong>These are all preview features. Use them with caution in production environments.</strong>
  - <strong>API call restrictions:</strong> Only users who created Alibaba Cloud Model Studio applications <strong>in the Singapore region</strong> before <strong>April 21, 2025</strong> can call the [application data, knowledge base, and prompt engineering APIs](/help/en/model-studio/api-bailian-2023-12-29-dir).
</Tip>

## Application <span id="445f2e5ce3zmt" /> <span id="4e64f1f32eyit" />

### Why use a workflow application <span id="3ff3ac8490ard" /> <span id="0d9002a5e5xvy" />

A workflow breaks down complex tasks into a sequence of steps to reduce system complexity. Creating a workflow application on Model Studio lets you define the execution order, assign responsibilities, and specify dependencies between steps to automate and optimize the process.

Common use cases for workflow applications include:

- <strong>Travel planning</strong>: You can use a workflow plugin to select parameters, such as a destination, and automatically generate a travel plan that includes flights, accommodations, and attraction recommendations.
- <strong>Report analysis</strong>: For complex datasets, you can combine data processing, analysis, and visualization plugins to generate structured, formatted analysis reports.
- <strong>Customer support</strong>: You can use automated workflows to handle customer inquiries, including issue classification, to improve response speed and accuracy.
- <strong>Content creation</strong>: You can generate content such as articles and marketing copy. Provide a topic and requirements, and the system automatically generates a draft.
- <strong>Education and training</strong>: You can use a workflow to design personalized learning plans with progress tracking and assessments, enabling self-paced learning for students.
- <strong>Medical consultation</strong>: Based on patient-entered symptoms, a workflow can combine multiple analytical tools to generate a preliminary assessment or recommend relevant tests to assist doctors with further diagnosis.

## Examples <span id="5d567a4cb132z" /> <span id="891ee02829zqn" />

### Example 1: Detect scam messages <span id="0af21f29eavci" /> <span id="d476dd763fa1j" />

This example demonstrates how to create a workflow application to determine if a text message is a potential scam. The workflow uses a start node, a large model node, and an end node.

<table style={{ display: "table", tableLayout: "fixed", width: "100%" }}>
  <colgroup>
    <col style={{ width: "50%" }} />

    <col style={{ width: "50%" }} />
  </colgroup>

  <tbody>
    <tr>
      <td colSpan={2} style={{ verticalAlign: "top" }}>
        1. Go to the [App Management](https://modelstudio.console.alibabacloud.com/?tab=app#/app-center) page. Click <strong>Create Application>Workflow Application</strong>, enter an <strong>App Name</strong>, and then click <strong>Create Now</strong>.
      </td>
    </tr>

    <tr>
      <td style={{ verticalAlign: "top" }}>
        2. Add a large model node to detect scam messages.

           Drag the <strong>LLM</strong> node from the left-side pane to the canvas and configure the following parameters in its configuration panel. Leave other parameters at their default values.

           1. <strong>Model Configuration</strong>: Select <strong>Qwen-Plus-latest</strong>.
           2. <strong>Prompts</strong>:

              ```plaintext
              Analyze the provided message to determine if it is a potential scam. Provide a definitive answer.
               Requirements: Carefully review the message content, focusing on keywords and typical scam patterns, such as requests for urgent transfers, providing personal information, or promising unrealistic benefits.
              Steps:
              1. Identify key elements in the message, including but not limited to the sender's identity, the request made, promised rewards, and any sense of urgency.
              2. Compare the message against the characteristics of known scams to check for similar tactics or language patterns.
              3. Evaluate the overall reasonableness of the message, considering whether the request aligns with standard procedures and common sense.
              4. If the message contains links or attachments, do not click or download them to avoid potential security risks, and warn the user about the dangers of such content.
              Output Format: Clearly state whether the message exhibits characteristics of a scam and briefly explain your reasoning. If a scam is suspected, provide suggestions or preventive measures to protect the user.
              ```
           3. <strong>User Prompt</strong>:

              ```plaintext
              Determine if the message "${sys.query}" is a potential scam.
              ```

           Close the panel and connect the <strong>Start</strong> node to the <strong>Large Model</strong> node.
      </td>

      <td style={{ verticalAlign: "top" }}>
        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1877435471/p937422.svg" alt="p910525" />
      </td>
    </tr>

    <tr>
      <td style={{ verticalAlign: "top" }}>
        3. Connect the large model node to the end node. Then, click the end node and in its configuration panel's editor, enter `/` to insert the `Large Model 1/result` variable. Leave other parameters at their default values.
      </td>

      <td style={{ verticalAlign: "top" }}>
        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1877435471/p937423.svg" alt="p910524" />

        Configuration example:

        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/4291125771/p984301.png" alt="image" />
      </td>
    </tr>

    <tr>
      <td style={{ verticalAlign: "top" }}>
        4. Click <strong>Test</strong> in the upper-right corner. Enter `Your package has been at the pickup station for several days. Please come and collect it.` and click <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p984246.png" alt="image" className="inline" noZoom />. After the workflow finishes running, view the output.
      </td>

      <td style={{ verticalAlign: "top" }}>
        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/4291125771/p995852.png" alt="image" />
      </td>
    </tr>

    <tr>
      <td style={{ verticalAlign: "top" }}>
        5. Next, enter `You have a message saying you've won 1 million. Please check it.` and click <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p984246.png" alt="image" className="inline" noZoom />. After the workflow runs, view the output.
      </td>

      <td style={{ verticalAlign: "top" }}>
        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/4291125771/p995854.png" alt="image" />
      </td>
    </tr>
  </tbody>
</table>

### Example 2: Smart shopping assistant <span id="256b65180bong" /> <span id="9c7a885fe7d0l" />

This example shows how to create a smart shopping assistant using a workflow that helps users select mobile phones, TVs, and refrigerators. The workflow uses a start node, an intent classification node, large model nodes, and an end node.

<table style={{ display: "table", tableLayout: "fixed", width: "100%" }}>
  <colgroup>
    <col style={{ width: "50.07%" }} />

    <col style={{ width: "49.93%" }} />
  </colgroup>

  <tbody>
    <tr>
      <td colSpan={2} style={{ verticalAlign: "top" }}>
        1. Go to the [App Management](https://modelstudio.console.alibabacloud.com/?tab=app#/app-center) page. Click <strong>Create Application>Workflow Application</strong>, enter an <strong>App Name</strong>, and then click <strong>Create Now</strong>.
      </td>
    </tr>

    <tr>
      <td style={{ verticalAlign: "top" }}>
        2. Drag the <strong>Intent Classification</strong> node from the left-side pane to the canvas and configure the following parameters in its configuration panel. Leave other parameters at their default values.

           - <strong>Input Variable</strong>: Select <strong>Built-in Variable</strong> > <strong>query</strong>.
           - <strong>Select Model</strong>: Select <strong>Qwen-Plus-latest</strong>.
           - <strong>Intent Classification</strong>: Click <strong>Add Intent</strong> and add the following three intents:

             - Buy TV
             - Buy mobile phone
             - Buy refrigerator
           - <strong>Memory</strong>: Enables the model to remember previous chat content during a conversation. Turn on the toggle <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p999942.png" alt="image" className="inline" noZoom width={40} /> and select <strong>Custom Cache</strong>.

             > Current Node Cache: The model remembers only the chat content within the current node.

             > Custom Cache: The model remembers the conversation across the entire workflow.

           Close the panel and connect the <strong>Start</strong> node to the <strong>Intent Classification</strong> node.
      </td>

      <td style={{ verticalAlign: "top" }}>
        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p937424.svg" alt="p910523" />
      </td>
    </tr>

    <tr>
      <td style={{ verticalAlign: "top" }}>
        3. Drag a <strong>LLM</strong> node from the left-side pane to the canvas. In its configuration panel, configure the following parameters, leaving others at their default values. Then, close the panel and connect the <strong>Buy refrigerator</strong> output of the Intent Classification node to the <strong>Large Model</strong> node.

           - <strong>Model Configuration</strong>: Select <strong>Qwen-Plus-latest</strong>.
           - <strong>Prompts</strong>:

             ```plaintext
             You are a smart shopping assistant responsible for recommending refrigerators to customers.
             You must proactively ask the user for refrigerator parameters in the order listed in the [Refrigerator Parameter List] below. Ask for only one parameter at a time, and do not repeat questions for the same parameter.
             If the user provides a value for a parameter, continue to ask about the remaining parameters.
             If the user asks for the definition of a parameter, provide an explanation based on your professional knowledge, and then continue to ask which parameter value they prefer.
             If the user indicates they no longer wish to make a purchase, output: Thank you for visiting. We look forward to serving you next time.
             [Refrigerator Parameter List]
             1. Usage Scenario: [Home, Small commercial, Large commercial]
             2. Capacity: [200L, 300L, 400L, 500L]
             3. Energy Efficiency Rating: [Level 1, Level 2, Level 3]
             After all parameters from the [Refrigerator Parameter List] have been collected, ask: "Are you sure you want to purchase?" while also showing the parameters the customer has selected, for example: For small commercial use|300L|Level 1. Ask if they are sure about the refrigerator with these parameters. If the customer decides not to buy, ask which parameters they want to adjust.
             If the customer confirms the parameters meet their requirements, you must output in the following format:
             [Usage Scenario: Home, Capacity: 300L, Energy Efficiency Rating: Level 1]. Output only the content in this format and no other information.
             ```
           - <strong>User Prompt</strong>:

             ```plaintext
             User's question: ${sys.query}
             ```
           - <strong>Memory</strong>: Enables the model to remember previous chat content during a conversation. Turn on the toggle <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p999942.png" alt="image" className="inline" noZoom width={40} /> and select <strong>Custom Cache</strong>.
      </td>

      <td style={{ verticalAlign: "top" }}>
        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p937425.svg" alt="p910522" />
      </td>
    </tr>

    <tr>
      <td style={{ verticalAlign: "top" }}>
        4. Drag a <strong>LLM</strong> node from the left-side pane to the canvas. In its configuration panel, configure the following parameters, leaving others at their default values. Then, close the panel and connect the <strong>Buy TV</strong> output of the Intent Classification node to the <strong>Large Model</strong> node.

           - <strong>Model Configuration</strong>: Select <strong>Qwen-Plus-latest</strong>.
           - <strong>Prompts</strong>:

             ```plaintext
             You are a smart shopping assistant responsible for recommending TVs to customers.
             You must proactively ask the user for TV parameters in the order listed in the [TV Parameter List] below. Ask for only one parameter at a time, and do not repeat questions for the same parameter.
             If the user provides a value for a parameter, continue to ask about the remaining parameters.
             If the user asks for the definition of a parameter, provide an explanation based on your professional knowledge, and then continue to ask which parameter value they prefer.
             If the user indicates they no longer wish to make a purchase, output: Thank you for visiting. We look forward to serving you next time.
             [TV Parameter List]
             1. Screen Size: [50-inch, 70-inch, 80-inch]
             2. Refresh Rate: [60Hz, 120Hz, 240Hz]
             3. Resolution: [1080P, 2K, 4K]
             After all parameters from the [TV Parameter List] have been collected, ask: "Are you sure you want to purchase?" while also showing the parameters the customer has selected, for example: 50-inch|120Hz|1080P. Ask if they are sure about the TV with these parameters. If the customer decides not to buy, ask which parameters they want to adjust.
             If the customer confirms the parameters meet their requirements, you must output in the following format:
             [Screen Size: 50-inch, Refresh Rate: 120Hz, Resolution: 1080P]. Output only the content in this format and no other information.
             ```
           - <strong>User Prompt</strong>:

             ```plaintext
             User's question: ${sys.query}
             ```
           - <strong>Memory</strong>: Enables the model to remember previous chat content during a conversation. Turn on the toggle <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p999942.png" alt="image" className="inline" noZoom width={40} /> and select <strong>Custom Cache</strong>.
      </td>

      <td style={{ verticalAlign: "top" }}>
        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p937427.svg" alt="p910521" />
      </td>
    </tr>

    <tr>
      <td style={{ verticalAlign: "top" }}>
        5. Drag a <strong>LLM</strong> node from the left-side pane to the canvas. In its configuration panel, configure the following parameters, leaving others at their default values. Then, close the panel and connect the <strong>Buy mobile phone</strong> output of the Intent Classification node to the <strong>Large Model</strong> node.

           - <strong>Model Configuration</strong>: Select <strong>Qwen-Plus-latest</strong>.
           - <strong>Prompts</strong>:

             ```plaintext
             You are a smart shopping assistant responsible for recommending mobile phones to customers.
             You must proactively ask the user for mobile phone parameters in the order listed in the [Mobile Phone Parameter List] below. Ask for only one parameter at a time, and do not repeat questions for the same parameter.
             If the user provides a value for a parameter, continue to ask about the remaining parameters.
             If the user asks for the definition of a parameter, provide an explanation based on your professional knowledge, and then continue to ask which parameter value they prefer.
             If the user indicates they no longer wish to make a purchase, output: Thank you for visiting. We look forward to serving you next time.
             [Mobile Phone Parameter List]
             1. Usage Scenario: [Gaming, Photography, Watching movies]
             2. Screen Size: [6.4-inch, 6.6-inch, 6.8-inch, 7.9-inch foldable screen]
             3. RAM + Storage Space: [8GB+128GB, 8GB+256GB, 12GB+128GB, 12GB+256GB]
             After all parameters from the [Mobile Phone Parameter List] have been collected, ask: "Are you sure you want to purchase?" while also showing the parameters the customer has selected, for example: For photography|8GB+128GB|6.6-inch. Ask if they are sure about the mobile phone with these parameters. If the customer decides not to buy, ask which parameters they want to adjust.
             If the customer confirms the parameters meet their requirements, you must output in the following format:
             [Usage Scenario: Photography, Screen Size: 6.8-inch, Storage Space: 128GB, RAM Space: 8GB]. Output only the content in this format and no other information.
             ```
           - <strong>User Prompt</strong>:

             ```plaintext
             User's question: ${sys.query}
             ```
           - <strong>Memory</strong>: Enables the model to remember previous chat content during a conversation. Turn on the toggle <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p999942.png" alt="image" className="inline" noZoom width={40} /> and select <strong>Custom Cache</strong>.
      </td>

      <td style={{ verticalAlign: "top" }}>
        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p937428.svg" alt="p910519" />
      </td>
    </tr>

    <tr>
      <td style={{ verticalAlign: "top" }}>
        6. Drag a <strong>Variable Processing</strong> node from the left-side pane to the canvas. In its configuration panel, configure the following parameters, leaving others at their default values. Then, close the panel and connect the <strong>Default</strong> intent output of the Intent Classification node to the <strong>Variable Processing</strong> node.

           - <strong>Output Mode</strong>: Select <strong>Text Output</strong>.
           - In the editor box, enter:

             ```plaintext
             Hello! Please tell me if you want to buy a TV, a refrigerator, or a mobile phone.
             ```
      </td>

      <td style={{ verticalAlign: "top" }}>
        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p937429.svg" alt="p910518" />
      </td>
    </tr>

    <tr>
      <td style={{ verticalAlign: "top" }}>
        7. Connect all three large model nodes and the <strong>Variable Processing</strong> node to the <strong>End</strong> node. Then, click the end node and, in its configuration panel's editor, enter `/` to insert the following four variables: `Large Model 1/result`, `Large Model 2/result`, `Large Model 3/result`, and `Variable Processing 1/result`. Leave other parameters at their default values.
      </td>

      <td style={{ verticalAlign: "top" }}>
        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p937431.svg" alt="p910518" />

        Configuration example:

        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/2377954771/p984296.png" alt="image" />
      </td>
    </tr>

    <tr>
      <td style={{ verticalAlign: "top" }}>
        8. <strong>Test the application:</strong>

           1. Click <strong>Test</strong> in the upper-right corner. In the dialog box, enter `Tell me about your refrigerators`, click <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p984246.png" alt="image" className="inline" noZoom width={20} />, and view the output.
           2. Next, enter `Home use` and view the output.
           3. Then, enter `200L` and view the output.
           4. Finally, enter `Level 1 energy efficiency` and view the output.
      </td>

      <td style={{ verticalAlign: "top" }}>
        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p1000013.svg" alt="工作流-智能导购" />
      </td>
    </tr>
  </tbody>
</table>

## Session parameters <span id="2c42eeee7e8jg" /> <span id="104433cefasrf" />

A session variable acts as a global variable, storing parameters throughout the workflow's lifecycle to be referenced by any node.

Click the <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p989405.png" alt="image" className="inline" noZoom /> icon in the upper-right corner of the canvas configuration page.

![image](https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/9192334771/p989404.png)

## Node <span id="186ed63a97rvo" /> <span id="3a4fddcde4dcs" />

Nodes are the <strong>core functional units</strong> of a workflow application. Each node performs a specific task, such as executing an action, triggering a condition, processing data, or directing the workflow. <strong>Combine</strong> these nodes like building blocks to create automated processes.

<Tabs>
  <Tab title="Start and end">
    - <strong>When to use</strong>

      - When designing a workflow, define the structure and content of the input/output parameters in the start and end nodes.
    - <strong>How to use</strong>

      - <strong>Start node</strong>

        <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "29.99%" }} /><col style={{ width: "70.01%" }} /></colgroup><thead><tr><th><p><strong>Component</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>Predefined variables</p></td><td><p>The workflow provides the following predefined variables to process user input and maintain conversation history:</p><ul><li><p><strong>query</strong>: Stores the user's text input.</p></li><li><p><strong>historyList</strong>: Stores conversation history to maintain context in a multi-turn conversation. To use this variable in nodes that support the <strong>memory</strong> feature (such as large model and intent classification nodes), select <strong>Custom Cache</strong>.</p></li><li><p><strong>imageList</strong>: Stores user-uploaded images to enable image analysis or multimodal conversation. To use this variable in nodes that support the <strong>memory</strong> feature (such as large model and intent classification nodes), select <strong>Custom Cache</strong>.</p></li></ul></td></tr><tr><td><p>Custom variables</p></td><td><p>Custom variables are structured input parameters that you define for a workflow. They receive data from tests or API calls and can be referenced in subsequent nodes. When creating a custom variable, configure the following parameters:</p><ul><li><p><strong>Variable name</strong>: Enter a meaningful name. Chinese characters are not supported.</p></li><li><p><strong>Type</strong>: The data type of the variable. Supported types are String, Boolean, Number, Object, Array (of String, Boolean, Number, or Object), and File.</p></li><li><p><strong>Description</strong>: Briefly describe what the variable does and when to use it.</p></li></ul></td></tr></tbody></table>
      - <strong>End node</strong>

        <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "29.99%" }} /><col style={{ width: "70.01%" }} /></colgroup><thead><tr><th><p><strong>Component</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>Output mode</p></td><td><p><strong>Text Output</strong>: Suitable for unstructured content. In the input box, you can enter fixed content or type <code>/</code> to reference variables, which determines the final result returned to the user. You can source variables from the output of any workflow node or from session variables. Properly mapping output variables allows you to control the workflow's data flow and ensure an accurate and complete final response.</p><p><strong>JSON Output</strong>: Suitable for outputting structured content in JSON format. You can define variable names and enter text or reference variables.</p></td></tr><tr><td><p>Streaming output</p></td><td><p>The Streaming Output switch applies only to Text Output mode.</p><p>When enabled, responses from large model and application component nodes are streamed token by token. When disabled, a full response is returned after it is completely generated.</p></td></tr></tbody></table>
  </Tab>

  <Tab title="Large model">
    - <strong>Why use it</strong>

      This node is the intelligent core of your workflow. It can understand language, generate text, analyze images, and engage in multi-turn conversations. You can use it to write copy, summarize text, or even analyze image content (using Qwen-VL models).
    - <strong>Features</strong>

      - Supports both single-input processing and batch processing of large datasets.
      - You can configure different large models, such as Qwen-Plus, so you can choose the right model based on performance, latency, or other requirements.
    - <strong>Node parameter configuration</strong>

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}>
        <colgroup>
          <col style={{ width: "16.56%" }} />

          <col style={{ width: "83.44%" }} />
        </colgroup>

        <thead>
          <tr>
            <th>
              <strong>Parameter</strong>
            </th>

            <th>
              <strong>Description</strong>
            </th>
          </tr>
        </thead>

        <tbody>
          <tr>
            <td rowSpan={2} style={{ verticalAlign: "top" }}>
              Mode selection
            </td>

            <td style={{ verticalAlign: "top" }}>
              <strong>Single Mode</strong>: Calls the large model once.
            </td>
          </tr>

          <tr>
            <td style={{ verticalAlign: "top" }}>
              <strong>Batch Mode</strong>: The node runs multiple times, sequentially assigning an item from a list to a batch variable in each run. This process stops when all list items are processed or the configured maximum batch runs is reached.

              <strong>Batch Configuration</strong>:

              - <strong>Maximum Number of Batches</strong> (Range: 1–100; default for standard users: 100): The maximum number of times the batch process will run.

                <Note>
                  The number of batch runs depends on the minimum length of the input arrays. If no input variable is configured, the number of runs is determined by the configured batch count.
                </Note>
              - <strong>Number of Parallel Runs</strong> (Range: 1–10): Sets the concurrency limit for batch processing. A setting of 1 executes all tasks serially.
            </td>
          </tr>

          <tr>
            <td style={{ verticalAlign: "top" }}>
              Model configuration
            </td>

            <td style={{ verticalAlign: "top" }}>
              Select a suitable large model and adjust its parameters. The available models are listed on the UI.

              For a detailed introduction to the models, see the model list.

              For information on the API call rate limits for each model, see [rate limiting](/help/en/model-studio/rate-limit).
            </td>
          </tr>

          <tr>
            <td rowSpan={3} style={{ verticalAlign: "top" }}>
              Parameter configuration
            </td>

            <td style={{ verticalAlign: "top" }}>
              <strong>Temperature</strong>: Controls the diversity of the generated content. A higher temperature value increases the randomness of the generated text, producing more unique outputs, while a lower value makes the content more conservative and consistent.

              > This configuration is not currently supported for DeepSeek R1 series models.
            </td>
          </tr>

          <tr>
            <td style={{ verticalAlign: "top" }}>
              <strong>Maximum Reply Length</strong>: Limits the maximum length (in tokens) of the text generated by the model, not including the prompt. This limit varies by model.
            </td>
          </tr>

          <tr>
            <td style={{ verticalAlign: "top" }}>
              The following parameters are available only when a Qwen-VL model is selected:

              - <strong>Model Input Parameters</strong>: For `vlImageUrl`, you can reference a variable or input an image URL.
              - <strong>Image Source</strong>:

                - Image set: The model treats each uploaded image independently, selecting the most relevant one to answer the user's question.

                  A single image can be passed directly. For example: `https://****.com/****.jpg`.

                  Multiple images can be passed as a list. For example: `["URL","URL","URL"]`.
                - Video frames: The model considers the uploaded images to be from the same video and understands them sequentially as a whole. You must provide a minimum of 4 video frames.
            </td>
          </tr>

          <tr>
            <td style={{ verticalAlign: "top" }}>
              System prompt
            </td>

            <td style={{ verticalAlign: "top" }}>
              Provides system-level instructions to the model. You can use it to define the model's role, task, or output format. For example: "You are a math expert who specializes in solving math problems. Please output the problem-solving process and result in the correct format."
            </td>
          </tr>

          <tr>
            <td style={{ verticalAlign: "top" }}>
              User prompt
            </td>

            <td style={{ verticalAlign: "top" }}>
              The user's input to the model, such as a request or instruction. You can configure a prompt template or insert variables. The model uses this input to generate a response.
            </td>
          </tr>

          <tr>
            <td style={{ verticalAlign: "top" }}>
              Memory
            </td>

            <td style={{ verticalAlign: "top" }}>
              Memory is the context the model retains across multiple turns in a conversation.

              - Current node cache: Uses the output of this node as context. The model will only remember context generated within this node.

                - memory rounds: The number of conversation rounds to remember. One input and its corresponding output constitute one round.
              - Custom cache: Uses a specified context variable as the context.

                - Context variable: Select the source of the context.
            </td>
          </tr>

          <tr>
            <td style={{ verticalAlign: "top" }}>
              Output variable
            </td>

            <td style={{ verticalAlign: "top" }}>
              The name of the variable that stores the processing result of this node. Subsequent nodes can use this variable to access this node's result.

              > DeepSeek R1 series models support outputting the Deep Thinking process (`reasoningContent`).
            </td>
          </tr>

          <tr>
            <td style={{ verticalAlign: "top" }}>
              Retry on failure
            </td>

            <td style={{ verticalAlign: "top" }}>
              If disabled, the node stops executing when an error occurs.

              If enabled, the node re-executes on error, according to the configured number of retries and interval.

              - maximum retries: The maximum number of retry attempts when a request fails.
              - retry interval: The time interval between each retry attempt, in milliseconds.
            </td>
          </tr>

          <tr>
            <td style={{ verticalAlign: "top" }}>
              Exception handling
            </td>

            <td style={{ verticalAlign: "top" }}>
              If disabled, the node handles errors using the system's default error handling mechanism.

              If enabled, the node executes custom processing logic according to the configuration when an error occurs.

              - Default value: The content in `result` is output when an exception occurs.
              - exception branch: If an exception occurs, this branch is executed. You must configure its processing flow.

                <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/9192334771/p984767.png" alt="image" />
            </td>
          </tr>

          <tr>
            <td style={{ verticalAlign: "top" }}>
              Return results
            </td>

            <td style={{ verticalAlign: "top" }}>
              This feature is deprecated.

              This option applies only to API calls and determines whether the node's content is output. To learn more about the purpose of this component, see [Application calling](/help/en/model-studio/application-calling-guide).
            </td>
          </tr>
        </tbody>
      </table>

      <Note>
        To integrate applications via API, see [Application calling](/help/en/model-studio/application-calling-guide).
      </Note>
  </Tab>

  <Tab title="Knowledge base">
    - <strong>Definition</strong>

      The knowledge base node implements retrieval-augmented generation (RAG). It retrieves relevant chunks from a specified knowledge base based on the input, and passes the results as context to a downstream large model node. This process addresses common problems with large models, such as outdated knowledge, inability to access private data, and hallucinations.
    - <strong>Input configuration</strong>

      Defines the criteria for querying the knowledge base.

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "20.02%" }} /><col style={{ width: "79.98%" }} /></colgroup><thead><tr><th><p><strong>Parameter</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>content</p></td><td><p>The text used to query the knowledge base. You can enter text directly or type <code>/</code> in the editor to select and reference an output variable from an upstream node.</p></td></tr><tr><td><p>imageList</p></td><td><p>The images used to query the knowledge base. You can enter a publicly accessible image URL, such as <code>[https://xxx.xxx.com/xxx/xxx.jpeg](https://xxx.xxx.com/xxx/xxx.jpeg)</code>, or type <code>/</code> in the editor to select and reference an output variable from an upstream node.</p></td></tr></tbody></table>
    - <strong>Knowledge base selection method</strong>

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "20.02%" }} /><col style={{ width: "40.04%" }} /><col style={{ width: "39.94%" }} /></colgroup><thead><tr><th><p><strong>Selection method</strong></p></th><th><p><strong>Applicable scenarios</strong></p></th><th><p><strong>Configuration</strong></p></th></tr></thead><tbody><tr><td><p>Select Fixed Knowledge Base</p></td><td><p>Each call uses the same, pre-selected knowledge base.</p></td><td><p>Select a specific knowledge base from the drop-down list. You can add three types of knowledge bases: documents, tables, and images.</p></td></tr><tr><td><p>Dynamic Import</p></td><td><p>The output of an upstream node dynamically determines which knowledge bases to use.</p></td><td><p>Configure the <code>CodeList</code> variable. You can specify a list of knowledge bases by referencing a variable or by direct input.</p></td></tr></tbody></table>
    - <strong>Knowledge base invocation method</strong>

      This setting defines the trigger logic for the knowledge base. The default method is <strong>always invoke</strong>.

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "10.01%" }} /><col style={{ width: "69.97%" }} /><col style={{ width: "20.02%" }} /></colgroup><thead><tr><th><p><strong>Invocation method</strong></p></th><th><p><strong>Description</strong></p></th><th><p><strong>Parameters</strong></p></th></tr></thead><tbody><tr><td><p>always invoke</p></td><td><p>Performs a knowledge base retrieval for each user input. This method is suitable for high-frequency question-and-answer scenarios.</p></td><td><p>None</p></td></tr><tr><td><p>intelligent invoke</p></td><td><p>The agent determines whether to query the knowledge base based on the user's input and its description. This is suitable for flexible conversational scenarios.</p></td><td><p>Knowledge Base Description (Required)</p></td></tr><tr><td><p>legacy invocation</p></td><td><p>Results from document, table, and image knowledge bases are recalled together. A single topK parameter controls the number of recalled chunks, and does not support separate debugging for each type.</p></td><td><p>topK (Range: 1–50, Default: 10)</p></td></tr></tbody></table>

      Parameter descriptions:

      - <strong>Knowledge base description</strong>: Describes the content of the knowledge base and the conditions under which its data can be used for a response. Supports text input or entering `/` to insert a variable.
      - <strong>topK</strong>: The <strong>maximum</strong> number of chunks to recall from each knowledge base. The actual number of recalled chunks depends on matching results and may be less than the topK value.
    - <strong>Debug recall results</strong>

      This feature is supported only in <strong>always invoke and intelligent invoke</strong> modes. Click the <strong>Debug</strong> button next to a document, table, or image type to test the recall results for that knowledge base. Use the results to fine-tune your configuration. When you are done, click <strong>Save</strong> in the upper-right corner to apply the configuration to the current application.
    - <strong>Knowledge base filtering</strong>

      This feature is disabled by default. When enabled, the system uses a large model to intelligently filter the recalled results from documents and tables, improving the final output quality. This feature is suitable for scenarios that require high answer precision or need to filter out irrelevant information.
    - <strong>Node output</strong>

      The knowledge base node outputs a structured object containing a `result` object:

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "30.03%" }} /><col style={{ width: "20.02%" }} /><col style={{ width: "49.95%" }} /></colgroup><thead><tr><th><p><strong>Field</strong></p></th><th><p><strong>Type</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>result</p></td><td><p>Object</p></td><td><p>Contains all information returned from the current query.</p></td></tr><tr><td><p>result.chunkList</p></td><td><p>Array\<Object></p></td><td><p>An array of recalled chunks. This array is empty if the query returns no results.</p></td></tr><tr><td><p>result.chunkList\[ ].content</p></td><td><p>String</p></td><td><p>The original content of the recalled knowledge base chunk.</p></td></tr><tr><td><p>result.chunkList\[ ].title</p></td><td><p>String</p></td><td><p>The title of the document to which the chunk belongs.</p></td></tr><tr><td><p>result.chunkList\[ ].documentName</p></td><td><p>String</p></td><td><p>The name of the document where the recalled chunk is located.</p></td></tr><tr><td><p>result.chunkList\[ ].score</p></td><td><p>Number</p></td><td><p>The similarity score of the knowledge base chunk. A higher score indicates a better match.</p></td></tr><tr><td><p>result.chunkList\[ ].id</p></td><td><p>String</p></td><td><p>The chunk ID.</p></td></tr><tr><td><p>result.chunkList\[ ].dataId</p></td><td><p>String</p></td><td><p>The document ID.</p></td></tr><tr><td><p>result.chunkList\[ ].docUrl</p></td><td><p>String</p></td><td><p>The source file download link.</p></td></tr><tr><td><p>result.chunkList\[ ].knowledgeBaseId</p></td><td><p>String</p></td><td><p>The knowledge base ID.</p></td></tr><tr><td><p>result.chunkList\[ ].nid</p></td><td><p>String</p></td><td><p>The identifier for the original text.</p></td></tr><tr><td><p>result.chunkList\[ ].images</p></td><td><p>Array\<String></p></td><td><p>A list of images.</p></td></tr><tr><td><p>result.chunkList\[ ].pageNumber</p></td><td><p>Array\<Number></p></td><td><p>An array of page numbers.</p></td></tr><tr><td><p>result.rewriteQuery</p></td><td><p>String</p></td><td><p>The rewritten user query.</p></td></tr></tbody></table>
  </Tab>

  <Tab title="API">
    <Note>
      To ensure the API node can access the target service, add the Model Studio service IP addresses (`47.93.216.17`, `39.105.109.77`, `60.205.180.248`, and `59.110.152.173`) to the allowlist of the inbound rules in your target server's security group or firewall.
    </Note>

    - <strong>Definition</strong>

      Calls a custom API service using the POST, GET, PUT, PATCH, or DELETE method and outputs the API call result.
    - <strong>Parameter configuration</strong>

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "25.39%" }} /><col style={{ width: "74.61%" }} /></colgroup><thead><tr><th><p><strong>Parameter</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>API address</p></td><td><p>The request URL for the API.</p><ul><li><p>Request method:</p><ul><li><p>POST: Submits data to the server to create a new resource.</p></li><li><p>GET: Retrieves a resource without modifying data on the server.</p></li><li><p>PUT: Updates a specified resource or creates a new resource on the server.</p></li><li><p>PATCH: Partially updates a resource on the server.</p></li><li><p>DELETE: Deletes a specified resource from the server.</p></li></ul></li><li><p>URL: Enter the full API address in the input field. You can enter the address directly or use a variable to reference a value from previous nodes. For example, <code>[https://dashscope.aliyuncs.com/compatible-mode/v1/files](https://dashscope.aliyuncs.com/compatible-mode/v1/files)</code>.</p></li></ul></td></tr><tr><td><p>Header settings</p></td><td><p>Specifies the HTTP request headers, such as Content-Type and Authorization. You can enter values directly or reference them from previous nodes.</p></td></tr><tr><td><p>Parameter settings</p></td><td><p>Query parameters in the request URL. You can enter values directly or reference them from previous nodes.</p><p>For example, <code>limit</code> in <code>[https://dashscope.aliyuncs.com/compatible-mode/v1/files?limit=5](https://dashscope.aliyuncs.com/compatible-mode/v1/files?limit=5)</code>.</p></td></tr><tr><td><p>Body settings</p></td><td><p>Select the correct type based on the API's requirements.</p><ul><li><p>none: No request body. Suitable for GET requests.</p></li><li><p>form-data: Form data, used for file uploads or key-value pairs.</p></li><li><p>raw: Raw text, such as JSON or XML.</p></li><li><p>JSON: An automatically formatted JSON object.</p></li></ul></td></tr><tr><td><p>Timeout setting (s)</p></td><td><p>The maximum time to wait for a response. If a response is not received within this time, the request times out.</p></td></tr><tr><td><p>Retry on failure</p></td><td><p>If disabled, the node stops executing when an error occurs.</p><p>If enabled, the node retries the request according to the configured maximum retries and retry interval when an error occurs.</p><ul><li><p>Maximum retries: The maximum number of times to retry a failed request.</p></li><li><p>Retry interval: The interval between retries, in milliseconds.</p></li></ul></td></tr><tr><td><p>Exception handling</p></td><td><p>If disabled, the node uses the default error handling mechanism when an error occurs.</p><p>If enabled, the node executes custom logic when an error occurs.</p><ul><li><p>Default value: Outputs the content of <code>result</code> when an exception occurs.</p></li><li><p>Exception branch: Proceeds to the exception branch if an exception occurs. You must configure the processing flow for this branch.</p></li></ul></td></tr><tr><td><p>Output</p></td><td><p>Stores the API response in a specified variable for use by subsequent nodes.</p></td></tr></tbody></table>

      <Note>
        For details on integrating applications with an API, see [application integration](/help/en/model-studio/application-calling-guide).
      </Note>
  </Tab>

  <Tab title="Plugin">
    - <strong>Definition</strong>

      You can add a plugin node to your workflow application to perform more complex tasks. Model Studio offers a range of official plugins, such as Quark Search, Calculator, and a Python code interpreter. You can also create custom plugins to meet specific needs.

      > See [Plugin overview](/help/en/model-studio/plug-in-overview).
    - <strong>Prerequisites</strong>

      - To use an official or third-party plugin, you must first request its activation. For detailed instructions, see [Plugin overview](/help/en/model-studio/plug-in-overview).
      - If you want to reference a custom plugin, you need to create a [custom plugin](/help/en/model-studio/custom-plug-ins) first.
    - <strong>Parameter configuration</strong>

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "19.33%" }} /><col style={{ width: "80.67%" }} /></colgroup><thead><tr><th><p><strong>Parameter</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>Input</p></td><td><p>Specifies the content for the node to process. The variables change depending on the selected plugin. When you select a plugin, its built-in variables load automatically.</p><p>You can go to the <a href="https://modelstudio.console.alibabacloud.com/?tab=app#/plugin-market">Official plugins</a> or <a href="https://modelstudio.console.alibabacloud.com/?tab=app#/component-manage/plugin">Custom plugins</a> page, click a plugin card, and view how to configure its variables.</p></td></tr><tr><td><p>Output</p></td><td><p>The output variable that contains the node's processing result. Subsequent nodes use this variable to access the result.</p></td></tr><tr><td><p>Retry on failure</p></td><td><p>If disabled, the node stops executing when an error occurs.</p><p>If enabled, the node retries execution based on the configured number of retries and interval when an error occurs.</p><ul><li><p>Maximum retries: The maximum number of retry attempts when a request fails.</p></li><li><p>Retry interval: The time interval between each retry, in milliseconds.</p></li></ul></td></tr><tr><td><p>Exception handling</p></td><td><p>If disabled, the node uses the system's default error handling mechanism.</p><p>If enabled, the node executes custom logic when an error occurs.</p><ul><li><p>Default value: Outputs the content of <code>result</code> when an exception occurs.</p></li><li><p>Exception branch: Executes this branch if an exception occurs. You must configure the processing flow for the branch.</p></li></ul></td></tr></tbody></table>
  </Tab>

  <Tab title="Function Compute">
    - <strong>Definition</strong>

      Calls a custom service on Alibaba Cloud Function Compute.
    - <strong>Parameter configuration</strong>

      <Tip>
        The default timeout for a Function Compute node is 60 seconds and cannot be changed.
      </Tip>

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "19.04%" }} /><col style={{ width: "80.96%" }} /></colgroup><thead><tr><th><p><strong>Parameter</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>Input</p></td><td><p>The input variable that this node processes. You can reference variables from upstream nodes or enter values directly.</p></td></tr><tr><td><p>Region</p></td><td><p>Select the region where your Function Compute service is located: <strong>Singapore</strong>, <strong>Kuala Lumpur</strong>, or <strong>Indonesia (Jakarta)</strong>.</p></td></tr><tr><td><p>Service configuration</p></td><td><p>Select the Function Compute service to invoke. You must first <a href="https://www.alibabacloud.com/help/en/doc-detail/2513520.htm">create a function</a>.</p><p>The Alibaba Cloud account that creates the Function Compute service must be the same as the account you use to log in to Model Studio (Bailian), or it must belong to the same Alibaba Cloud root account.</p></td></tr><tr><td><p>Output</p></td><td><p>The variable that stores the node's output. Subsequent nodes can reference this variable.</p></td></tr></tbody></table>
  </Tab>

  <Tab title="Script">
    - <strong>Definition</strong>

      Uses a script to transform input into a specific template or output format. This involves parsing, transforming, and formatting the data for consistency and readability.
    - <strong>Parameter configuration</strong>

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "12.24%" }} /><col style={{ width: "87.76%" }} /></colgroup><thead><tr><th><p><strong>Parameter</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>input</p></td><td><p>Accepts a fixed value, or a reference to a variable from an upstream node or a session variable.</p></td></tr><tr><td><p>code</p></td><td><p>Defines the core logic for the node. Both JavaScript and Python are supported.</p><ul><li><p>Get input: Use the built-in <code>params</code> object to access input parameters in the format <code>params.\<variable\_name></code>. For example, <code>params.input1</code>.</p></li><li><p>Return output: The <code>main</code> handler function must <code>return</code> a dictionary or object. The key-value pairs of this object become the node's output.</p></li></ul></td></tr><tr><td><p>output</p></td><td><p>The dictionary returned by the <code>return</code> statement in the code serves as the output of this node.</p><p>For example, if you return <code>\{'result': 'Processing successful'}</code>, downstream nodes can access the string "Processing successful" by using <code>node\_name.result</code>.</p></td></tr><tr><td><p>retry on failure</p></td><td><p>If disabled, the node stops executing when an error occurs.</p><p>If enabled, the node retries execution according to the configured maximum retries and retry interval.</p><ul><li><p>maximum retries: The maximum number of retry attempts after a failure.</p></li><li><p>retry interval: The interval between retries, in milliseconds.</p></li></ul></td></tr><tr><td><p>exception handling</p></td><td><p>If disabled, the node uses the system's default error handling mechanism.</p><p>If enabled, the node executes custom logic when an error occurs.</p><ul><li><p>Default value: Outputs the content of <code>result</code> when an exception occurs.</p></li><li><p>exception branch: Routes execution to a separate, user-configured branch if an exception occurs.</p></li></ul></td></tr></tbody></table>
  </Tab>

  <Tab title="Condition">
    - <strong>Definition</strong>

      The condition node adds branching logic to a workflow. When a variable meets a specified condition, the workflow follows the corresponding downstream link. The node supports `AND`/`OR` configurations and evaluates conditions sequentially from top to bottom.
    - <strong>Parameter configuration</strong>

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "18.86%" }} /><col style={{ width: "81.14%" }} /></colgroup><thead><tr><th><p><strong>Parameter</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>conditional branch</p></td><td><p>Enter the conditional expressions.</p><p>Conditions in different groups are joined by <code>OR</code>, while conditions within the same group are joined by <code>AND</code>.</p></td></tr><tr><td><p>else</p></td><td><p>The default output when no defined conditions are met.</p></td></tr></tbody></table>
  </Tab>

  <Tab title="Intent classification">
    - <strong>Definition</strong>

      Intelligently matches user input with a predefined intent based on its description, and then routes to the corresponding link.
    - <strong>Parameter configuration</strong>

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}>
        <colgroup>
          <col style={{ width: "50%" }} />

          <col style={{ width: "50%" }} />
        </colgroup>

        <thead>
          <tr>
            <th>
              <strong>Parameter</strong>
            </th>

            <th>
              <strong>Description</strong>
            </th>
          </tr>
        </thead>

        <tbody>
          <tr>
            <td>
              input variable
            </td>

            <td>
              Specifies the input variable to be classified. You can enter a value directly, or use a variable from a preceding node or a session variable.
            </td>
          </tr>

          <tr>
            <td>
              model selection
            </td>

            <td>
              Supports Qwen-Plus and the intent classification model.
            </td>
          </tr>

          <tr>
            <td>
              intent classification
            </td>

            <td>
              Define the intents for the model to classify. The model matches the input to an intent based on its description and then routes to the corresponding link. For example: "For calculating math problems" or "For answering weather-related questions".
            </td>
          </tr>

          <tr>
            <td>
              Other intent
            </td>

            <td>
              This branch executes when the model determines that the input does not match any of the defined intents.
            </td>
          </tr>

          <tr>
            <td>
              intent mode
            </td>

            <td>
              - single-select mode: The large model selects the single best-matching intent from the available configurations.
              - multi-select mode: The large model selects all matching intents from the available configurations.
            </td>
          </tr>

          <tr>
            <td>
              reasoning mode
            </td>

            <td>
              - fast mode: This mode improves processing speed by avoiding complex reasoning steps, making it suitable for simple scenarios.
              - quality mode: This mode uses step-by-step reasoning to achieve more accurate classification.
            </td>
          </tr>

          <tr>
            <td>
              memory
            </td>

            <td>
              Refers to the model's ability to remember conversation history in multi-turn conversations, which serves as the context.

              - node-local cache: Uses the output of this node as context. The model's memory is limited to the context generated by this node.

                - memory turns: The number of conversation turns to remember. One input and its corresponding output constitute one turn.
              - custom cache: Uses the content of a specified context variable as the context.

                - context variable: Specifies the source of the context.
            </td>
          </tr>

          <tr>
            <td>
              prompt
            </td>

            <td>
              Provides additional instructions or constraints for the intent classification model. You can add examples or define constraints to help the model's classification results better match your requirements.

              <Accordion title="Example">
                Suppose you are developing a customer service system for an e-commerce platform where users might ask about order inquiries, returns, or payments. To ensure accurate classification, you can add relevant prompts and examples in the advanced settings.

                ```markdown
                Please classify the intent based on the following examples:
                Example 1: User input "I want to return the jacket I just bought", classify as "Returns and exchanges".
                Example 2: User input "Please help me check the shipping status of my order", classify as "Order inquiry".
                Constraints: Only process order-related inquiries. Ignore payment and technical issues.
                ```

                Effect:

                User input: `"When will the book I ordered from your website last week be delivered to my home?"`

                Classification result: `"Order inquiry"`
              </Accordion>

              In this example, providing specific classification examples guides the model to classify the "delivery time query" as an "Order inquiry" intent, while the constraints limit the classification scope to exclude other irrelevant questions.
            </td>
          </tr>

          <tr>
            <td>
              output
            </td>

            <td>
              The variable that stores the node's output. Downstream nodes can use this variable to access the result.
            </td>
          </tr>
        </tbody>
      </table>

      <Note>
        Running this node consumes tokens. The number of tokens consumed is displayed at runtime.
      </Note>
  </Tab>

  <Tab title="Flow output">
    - <strong>Definition</strong>

      The flow output node outputs specified content at any point in a workflow. This differs from the final output, which is returned only after the workflow completes.

      The flow output node is useful in the following scenarios:

      - <strong>Split large outputs:</strong> If a workflow generates a large amount of output, you can insert a flow output node to split the content into two parts. One part is output by the flow output node and the other by the end node.
      - <strong>Retrieve intermediate information:</strong> Insert this node at key points in a workflow to output information such as variable values or process status. This helps you track progress and troubleshoot issues.
      - <strong>Provide feedback during long operations:</strong> To avoid leaving users without feedback, you can insert a flow output node to display temporary messages. This is useful during time-consuming operations like calling external APIs, performing complex calculations, or processing data in batches. By providing status updates such as "Loading data, please wait..." or "Your request is being processed. Please do not close this window.", you let users know the system is working, not frozen or unresponsive.
    - <strong>Parameter configuration</strong>

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "17.96%" }} /><col style={{ width: "82.04%" }} /></colgroup><thead><tr><th><p><strong>Parameter</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>Output content</p></td><td><p>Enter fixed content or type <code>/</code> to reference variables from preceding nodes or session variables.</p></td></tr><tr><td><p>Streaming output</p></td><td><p>When enabled, content from a large model is streamed to the conversation token by token. When disabled, the entire response is generated first and then output at once.</p></td></tr></tbody></table>
  </Tab>

  <Tab title="Variable processing">
    - <strong>Definition</strong>

      Used to transform and process text content, such as by extracting specific content or converting formats. This node also supports template mode.
    - <strong>Parameter configuration</strong>

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "12.7%" }} /><col style={{ width: "87.3%" }} /></colgroup><thead><tr><th><p><strong>Parameter</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>Output mode</p></td><td><ul><li><p>Text output: Converts the input to text. In the editor, you can either enter the content directly or insert variables from upstream nodes or session variables.</p></li><li><p>JSON output: Formats the input variables as a JSON object.</p></li><li><p>Group aggregation: Determines which values are returned from a group according to a specified strategy. You can return either the first or the last non-empty value from each group.</p></li></ul></td></tr><tr><td><p>Output variable</p></td><td><p>Specifies the variable to store the node's output for use by subsequent nodes.</p></td></tr><tr><td><p>Return result</p></td><td><p>This feature is being deprecated.</p><p>Applicable only to API calls, this parameter determines whether the node's output is returned. See <a href="/help/en/model-studio/application-calling-guide">application call</a>.</p></td></tr></tbody></table>
  </Tab>

  <Tab title="Parameter extraction">
    - <strong>Definition</strong>

      Extracts structured parameters from text using a model.
    - <strong>Parameter configuration</strong>

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "21.3%" }} /><col style={{ width: "78.7%" }} /></colgroup><thead><tr><th><p><strong>Parameter</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>Input</p></td><td><p>The text to extract parameters from.</p></td></tr><tr><td><p>Model selection</p></td><td><p>Specifies the model used to extract parameters. Choose the one that best suits your business needs.</p></td></tr><tr><td><p>Parameters to extract</p></td><td><p>The model extracts parameters from the input based on the name, type, and description you provide.</p></td></tr><tr><td><p>Prompt</p></td><td><p>Additional instructions to guide the model during parameter extraction.</p></td></tr><tr><td><p>Memory</p></td><td><p>Memory provides conversational context, helping the model remember previous interactions in multi-turn scenarios.</p><ul><li><p>Cache in this node: Uses the output of this node as context. The model only remembers context from this node.</p><ul><li><p>Memory turns: The number of conversation turns to remember. One turn consists of one input and its corresponding output.</p></li></ul></li><li><p>Custom cache: Uses a specified context variable to provide context.</p><ul><li><p>Context variable: Select the source of the context.</p></li></ul></li></ul></td></tr><tr><td><p>Output</p></td><td><p>Contains the parameters extracted by the model. Subsequent nodes can reference this output as a variable.</p></td></tr></tbody></table>
  </Tab>

  <Tab title="Agent group">
    - <strong>Definition</strong>

      An agent group contains multiple sub-agents. Based on task requirements, the decision model within the group automatically plans the execution flow, schedules sub-agents, and coordinates them to complete the task. Use this node if you need to complete a large project but are unsure how to design the specific workflow. By breaking down a complex task into sub-tasks that different agents process in parallel, you can improve task execution speed.
    - <strong>Parameter configuration</strong>

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "21.3%" }} /><col style={{ width: "78.7%" }} /></colgroup><thead><tr><th><p><strong>Parameter</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td style={{ verticalAlign: "top" }}><p>Input</p></td><td style={{ verticalAlign: "top" }}><p>Specifies the content that the node will process. You can reference variables from a previous node.</p></td></tr><tr><td style={{ verticalAlign: "top" }}><p>Model selection</p></td><td style={{ verticalAlign: "top" }}><p>Select a decision model.</p></td></tr><tr><td style={{ verticalAlign: "top" }}><p>Group name</p></td><td style={{ verticalAlign: "top" }}><p>Enter a custom name for the agent group.</p></td></tr><tr><td style={{ verticalAlign: "top" }}><p>Agents</p></td><td style={{ verticalAlign: "top" }}><p>Specifies the sub-agents within the agent group. Only published <a href="https://modelstudio.console.alibabacloud.com/?tab=app#/app-center">agent applications</a> can be added.</p><p>After adding a sub-agent, click <strong>Configure</strong> to describe its function. This description helps the decision model determine which sub-agent to invoke for the current task.</p><p><Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p995594.png" alt="image" /></p></td></tr><tr><td style={{ verticalAlign: "top" }}><p>Output variable</p></td><td style={{ verticalAlign: "top" }}><p>Specifies the variable for storing the output of this node. This variable can be referenced by subsequent nodes.</p></td></tr></tbody></table>
  </Tab>

  <Tab title="Create agent">
    - <strong>Definition</strong>

      Creates a new agent exclusively for the orchestration canvas.
    - <strong>Parameter configuration</strong>

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "21.3%" }} /><col style={{ width: "78.7%" }} /></colgroup><thead><tr><th><p><strong>Parameter</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>Input</p></td><td><p>The content to be processed by this node. You can reference variables from preceding nodes.</p></td></tr><tr><td><p>Agent name</p></td><td><p>A custom name for the agent.</p></td></tr><tr><td><p>Model selection</p></td><td><p>The large model used by the agent.</p></td></tr><tr><td><p>Prompt</p></td><td><p>Use natural language to define the agent's role and tasks.</p></td></tr><tr><td><p>Knowledge base</p></td><td><p>Select a knowledge base for the agent.</p></td></tr><tr><td><p>Plugin</p></td><td><p>Enables the agent to call official or custom plugins to extend its capabilities.</p></td></tr><tr><td><p>Output variable</p></td><td><p>The variable that stores the node's output for use in subsequent nodes.</p></td></tr></tbody></table>
  </Tab>

  <Tab title="Multimodal generation">
    - <strong>Definition</strong>

      The multimodal generation node uses Alibaba Cloud multimodal models to generate image, video, or audio content based on the configured prompts and parameters. Use this node for content creation, marketing asset production, short video generation, and voice-over synthesis.
    - <strong>Model selection</strong>Model selection

      Select a multimodal generation model from the drop-down list. Models are categorized by function:

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "9.22%" }} /><col style={{ width: "24.93%" }} /><col style={{ width: "65.85%" }} /></colgroup><thead><tr><th><p><strong>Model type</strong></p></th><th><p><strong>Supported models</strong></p></th><th><p><strong>Features</strong></p></th></tr></thead><tbody><tr><td rowSpan={6}><p>Image generation</p></td><td><p>Qwen-Image</p></td><td><p>Excels at rendering complex Chinese and English text.</p></td></tr><tr><td><p>Wan 2.6-image-generation</p></td><td><p>Generates and edits images from text instructions, supporting both image editing and mixed text-and-image modes.</p></td></tr><tr><td><p>Qwen-Image-Plus</p></td><td><p>Excels at rendering complex Chinese and English text.</p></td></tr><tr><td><p>Z-Image-Turbo</p></td><td><p>A lightweight text-to-image model that quickly generates high-quality images. It supports bilingual rendering (Chinese and English), complex semantic understanding, and multiple styles and themes.</p></td></tr><tr><td><p>Wan 2.2-text-to-image-Plus</p></td><td><p>The Pro edition of Wan 2.2, with comprehensive improvements in creativity, stability, and photorealism.</p></td></tr><tr><td><p>Wan 2.2-text-to-image-Flash</p></td><td><p>The Flash edition of Wan 2.2, with comprehensive improvements in creativity, stability, and photorealism.</p></td></tr><tr><td rowSpan={7}><p>Video generation</p></td><td><p>Wan 2.6-text-to-video</p></td><td><p>Wan 2.6. Features multi-shot storytelling capabilities and supports both automatic voice-overs and custom audio file inputs.</p></td></tr><tr><td><p>Wan 2.6-image-to-video</p></td><td><p>Wan 2.6. Features multi-shot storytelling capabilities and supports both automatic voice-overs and custom audio file inputs.</p></td></tr><tr><td><p>Wan 2.5-text-to-video-Preview</p></td><td><p>Wan 2.5 preview. Supports automatic voice-overs and custom audio file inputs.</p></td></tr><tr><td><p>Wan 2.5-image-to-video-Preview</p></td><td><p>Wan 2.5 preview. Supports automatic voice-overs and custom audio file inputs.</p></td></tr><tr><td><p>Wan 2.2-text-to-video-Plus</p></td><td><p>The Pro edition of Wan 2.2. Offers more accurate instruction understanding, stable and smooth motion generation, and richer details in the output.</p></td></tr><tr><td><p>Wan 2.2-image-to-video-Plus</p></td><td><p>The Pro edition of Wan 2.2, offering more accurate instruction understanding, controllable camera movement, and consistent visuals. It also features comprehensive improvements in stability, success rate, and content richness.</p></td></tr><tr><td><p>Wan 2.2-image-to-video-Flash</p></td><td><p>The Flash edition of Wan 2.2, delivering ultra-fast generation, more accurate instruction understanding and camera control, consistent visuals, and comprehensive improvements in stability and success rate.</p></td></tr><tr><td><p>Audio generation</p></td><td><p>Qwen3-TTS-Flash</p></td><td><p>Supports mixed-language text input and streaming audio output.</p></td></tr></tbody></table>

      The list of available models is subject to change. Refer to the UI for the most current options. For model invocation pricing, see [Model Invocation Billing](/help/en/model-studio/model-pricing).
    - Configuration parameters vary by model. The panel shows only the settings relevant to your selection.

      <Tabs>
        <Tab title="Image generation">
          After you select an image generation model, configure the following parameters. The available parameters vary by model; refer to the UI for the specific options.

          <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "16%" }} /><col style={{ width: "10%" }} /><col style={{ width: "74%" }} /></colgroup><thead><tr><th><p><strong>Parameter</strong></p></th><th><p><strong>Required</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>Positive prompt</p></td><td><p>Yes</p></td><td><p>Describes the content, style, composition, and other elements of the target image. You can enter text directly or type <code>/</code> to insert an output variable from an upstream node.</p></td></tr><tr><td><p>Negative prompt</p></td><td><p>No</p></td><td><p>Describes content that you do not want in the image, such as blurriness or watermarks. You can enter text directly or type <code>/</code> to insert an output variable from an upstream node.</p></td></tr><tr><td><p>Size/Resolution</p></td><td><p>Yes</p></td><td><p>The dimensions of the image.</p></td></tr><tr><td><p>prompt\_extend</p></td><td><p>No</p></td><td><p>If enabled, the system uses a large model to intelligently rewrite the input prompt. This feature applies only to the positive prompt. It significantly improves results for shorter prompts but adds 3-4 seconds of latency.</p></td></tr><tr><td><p>Add Watermark</p></td><td><p>No</p></td><td><p>Controls whether to add an Alibaba Cloud watermark to the generated image. This feature is disabled by default.</p></td></tr><tr><td><p>Reference image</p></td><td><p>No</p></td><td><p>Upload a reference image to guide the style or content of the generated image. You can pass a File-type variable from the start node or a public URL.</p></td></tr><tr><td><p>Number of Images</p></td><td><p>No</p></td><td><p>The number of images to generate in a single request. The default value is 1.</p></td></tr><tr><td><p>Intelligent prompt rewriting</p></td><td><p>No</p></td><td><p>If enabled, a large model intelligently rewrites the input prompt. This feature applies only to the positive prompt. It significantly improves results for shorter prompts but increases the image generation time.</p></td></tr><tr><td><p>enable\_interleave</p></td><td><p>No</p></td><td><p>Disabled (default): Image editing mode. Edits, performs style transfer, or generates consistent subjects using 1 to 4 input images.</p><p>Enabled: Mixed text-and-image output mode. Generates a single content block containing both text and images, based on an image or plain text.</p></td></tr><tr><td><p>Random seed</p></td><td><p>No</p></td><td><p>Controls randomness in the generated output (default: 1234). Using the same seed value and prompt produces similar images.</p></td></tr><tr><td><p>Intelligent Thinking</p></td><td><p>No</p></td><td><p>If enabled, the large model performs reasoning and prompt rewriting. This can improve the generation quality but also increases the generation time.</p></td></tr></tbody></table>
        </Tab>

        <Tab title="Video generation">
          After you select a video generation model, configure the following parameters. The available parameters vary by model; refer to the UI for the specific options.

          <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "10%" }} /><col style={{ width: "15%" }} /><col style={{ width: "75%" }} /></colgroup><thead><tr><th><p><strong>Parameter</strong></p></th><th><p><strong>Required</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>Positive prompt</p></td><td><p>Yes</p></td><td><p>Describes the scene, actions, style, and other elements of the target video. You can enter text directly or type <code>/</code> to insert an output variable from an upstream node.</p></td></tr><tr><td><p>Negative prompt</p></td><td><p>No</p></td><td><p>Describes content that you do not want in the video, such as blurriness or watermarks. You can enter text directly or type <code>/</code> to insert an output variable from an upstream node.</p></td></tr><tr><td><p>Resolution</p></td><td><p>Yes</p></td><td><p>The video resolution. The available options vary by model.</p></td></tr><tr><td><p>Video Duration</p></td><td><p>Yes</p></td><td><p>The duration of the generated video. The available options vary by model.</p></td></tr><tr><td><p>Random seed</p></td><td><p>Yes</p></td><td><p>Controls randomness in the generated output. Using the same seed value and prompt produces similar videos.</p></td></tr><tr><td><p>Intelligent Expansion</p></td><td><p>No</p></td><td><p>If enabled, the system uses a large model to intelligently rewrite the input prompt to improve the video generation quality. This feature applies only to the positive prompt.</p></td></tr><tr><td><p>Smart Multi-shot</p></td><td><p>No</p></td><td><p>If enabled, the model generates a multi-shot video.</p></td></tr><tr><td><p>Generate Audio</p></td><td><p>No</p></td><td><p>If enabled, you can add a voice-over by providing a public audio file URL.</p></td></tr><tr><td><p>Reference image</p></td><td><p>Yes (image-to-video models only)</p></td><td><p>Specifies a reference image to serve as the video's first frame. The model generates the video based on this image. You can pass a File-type variable from the start node or a public URL.</p></td></tr></tbody></table>
        </Tab>

        <Tab title="Audio generation">
          <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "10%" }} /><col style={{ width: "10%" }} /><col style={{ width: "80%" }} /></colgroup><thead><tr><th><p><strong>Parameter</strong></p></th><th><p><strong>Required</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>Text for Synthesis</p></td><td><p>Yes</p></td><td><p>The text content to convert to speech. You can enter text directly or type <code>/</code> to insert an output variable from an upstream node.</p></td></tr><tr><td><p>Language Type</p></td><td><p>No</p></td><td><p>The language for the synthesized speech (default: Chinese). Supported languages: Chinese, English, German, Italian, Portuguese, Spanish, Japanese, Korean, French, and Russian.</p></td></tr><tr><td><p>Voice</p></td><td><p>No</p></td><td><p>The voice for the synthesized speech. For a list of supported voices, see <a href="/help/en/model-studio/realtime-tts-user-guide">Real-time Speech Synthesis - Qwen</a>.</p></td></tr></tbody></table>
        </Tab>
      </Tabs>
    - <strong>Node output</strong>

      After the multimodal generation node runs, it outputs the following variables:

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "23.36%" }} /><col style={{ width: "13.74%" }} /><col style={{ width: "37.98%" }} /><col style={{ width: "24.92%" }} /></colgroup><thead><tr><th><p><strong>Parameter</strong></p></th><th><p><strong>Type</strong></p></th><th><p><strong>Description</strong></p></th><th><p><strong>Example</strong></p></th></tr></thead><tbody><tr><td><p>output</p></td><td><p>Object</p></td><td><p>The complete output object, containing the task status, execution time, and results.</p></td><td><p>-</p></td></tr><tr><td><p>output.task\_status</p></td><td><p>String</p></td><td><p>The task status, such as "SUCCEEDED" or "FAILED".</p></td><td><p>SUCCEEDED</p></td></tr><tr><td><p>output.submit\_time</p></td><td><p>String</p></td><td><p>The task submission time, in YYYY-MM-DD HH:mm:ss.SSS format.</p></td><td><p>2026-01-22 10:54:44.200</p></td></tr><tr><td><p>output.end\_time</p></td><td><p>String</p></td><td><p>The task end time, in YYYY-MM-DD HH:mm:ss.SSS format.</p></td><td><p>2026-01-22 10:54:51.685</p></td></tr><tr><td><p>output.task\_id</p></td><td><p>String</p></td><td><p>The unique identifier for the task.</p></td><td><p>e36c2221-b7fd-xxxx</p></td></tr><tr><td><p>output.scheduled\_time</p></td><td><p>String</p></td><td><p>The task scheduled time, in YYYY-MM-DD HH:mm:ss.SSS format.</p></td><td><p>2026-01-22 10:54:44.251</p></td></tr><tr><td><p>output.results</p></td><td><p>Array\<Object></p></td><td><p>An array of generation results, containing metadata for the generated assets.</p></td><td><p>-</p></td></tr><tr><td><p>output.results\[].orig\_prompt</p></td><td><p>String</p></td><td><p>The original prompt entered by the user.</p></td><td><p>a cute cat sitting on a windowsill</p></td></tr><tr><td><p>output.results\[].actual\_prompt</p></td><td><p>String</p></td><td><p>The prompt used for generation after model expansion.</p></td><td><p>a cute white cat with fluffy, soft fur...</p></td></tr><tr><td><p>output.results\[].url</p></td><td><p>String</p></td><td><p>The URL of the generated file.</p></td><td><p><a href="https://dashscope-result">https\://dashscope-result</a>...</p></td></tr><tr><td><p>usage</p></td><td><p>Object</p></td><td><p>Model usage statistics.</p></td><td><p>-</p></td></tr><tr><td><p>usage.image\_count</p></td><td><p>Number</p></td><td><p>The number of generated images (image generation mode).</p></td><td><p>1</p></td></tr><tr><td><p>urls</p></td><td><p>Array\<String></p></td><td><p>An array of URLs for the generated files. Use these URLs to access or download the output.</p></td><td><p>\["<a href="https://dashscope-result">https\://dashscope-result</a>..."]</p></td></tr></tbody></table>
  </Tab>
</Tabs>

## Test application <span id="test-app" /> <span id="test-app-section" />

After you configure the workflow, you can use the test feature to verify that it runs as expected. Click the <strong>Test</strong> button in the upper-right corner to open the test panel. The test panel offers multiple test modes for different use cases.

### Text conversation <span id="text-dialog-mode" /> <span id="text-generation-mode-section" />

Text conversation is the default test mode. It preserves the conversation history and supports continuous, multi-turn conversations.

1. From the drop-down list at the top of the test panel, select text conversation mode (selected by default). If the workflow contains custom variables, enter their values in the parameter configuration area.
2. In the input box, enter your test content (text and file attachments are supported), and then click the <strong>Send</strong> button or press Enter to run the test.
3. Review the test results. You can click a node to view its detailed input and output, or switch the output format between Text and JSON.
4. To continue the conversation, enter your next turn in the input box and send it. To start a new conversation, click the <strong>Clear All</strong> button.

### Text generation <span id="text-generation-mode" /> <span id="video-interaction-mode-section" />

The text generation mode is for single-turn interactions. Each test is independent, and the conversation history is not preserved.

## Checklist <span id="40bb4e50bfwy1" /> <span id="412ee64abakcn" />

The checklist lists the required configurations for your workflow.

To view the checklist, click the <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p989450.png" alt="image" className="inline" noZoom /> icon in the upper-right corner of the canvas configuration page.

![image](https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/9192334771/p989458.png)

## Release an application <span id="d19df28c5892n" /> <span id="2e83d07a4d4fx" />

Once an application is released, you can call it via an API or share it as a web page with RAM users in the same main account. To do so, click the <strong>Publish</strong> button in the upper-right corner of the agent application management page.

### Call via API <span id="d6ec5f242b81v" /> <span id="8b07ad0e44u34" />

On the <strong>Publish Channel</strong> tab of your workflow application, click <strong>View API</strong> next to <strong>API</strong> to learn how to call the agent application by using an API.

> Note: You must replace `YOUR_API_KEY` with your API key to call the API.

<Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/9192334771/p995862.png" alt="image" width={950} />

For FAQs and information about API calls, see the following topics:

- For invocation methods (HTTP/SDK), see [Application call](/help/en/model-studio/application-calling-guide).
- For details on API call parameters, see [Application call parameter information](/help/en/model-studio/agent-and-workflow-application-api-reference).
- For details on passing parameters, see [Parameter passing for applications](/help/en/model-studio/pass-through-of-application-parameters).
- To resolve errors returned by API calls, see [Error codes](/help/en/model-studio/error-code).
- The application itself has no concurrency limit; instead, the limit is determined by the models it calls. See the [Model Studio console](https://modelstudio.console.alibabacloud.com/cn-beijing?tab=model#/model-market/all).

Currently, you cannot call the Xiyan service from a workflow. Instead, use an API node to call a custom API service.

<Note>
  The timeout for API calls is 600 seconds and cannot be changed. If a timeout may occur, consider the following solutions:

  - Use asynchronous mode: In this mode, the system returns a task ID. You can then use the task ID to query the result, which avoids the synchronous timeout limit.
  - Split the task: Break down the task into multiple steps, or process batch data in smaller chunks to prevent a single execution from timing out.
</Note>

## Import or export a workflow <span id="c055d2211fwrp" /> <span id="5c0d7e6950p7i" />

1. <strong>Import or export a Model Studio workflow</strong>

   Click the <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p1010777.png" alt="image" className="inline" noZoom width={22} /> icon at the top of the workflow page and select <strong>Export DSL</strong> or <strong>Import Model Studio DSL</strong>.

   <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/9192334771/p988014.png" alt="image" width={500} />
2. <strong>Import a Dify workflow</strong>

   Model Studio supports one-click import of Dify workflows for easy migration and reuse.

   1. Click the <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p1010777.png" alt="image" className="inline" noZoom width={22} /> icon at the top of the workflow page and select <strong>Import Dify DSL</strong>.

      <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p1010155.png" alt="image" width={500} />
   2. Adjust the parameters for each node.

      <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p1010159.png" alt="image" width={500} />

      The node compatibility details are as follows:

      <table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "17.1%" }} /><col style={{ width: "25.8%" }} /><col style={{ width: "57.1%" }} /></colgroup><thead><tr><th><p><strong>Dify node</strong></p></th><th><p><strong>Mapped Model Studio node</strong></p></th><th><p><strong>Compatibility</strong></p></th></tr></thead><tbody><tr><td><p>start</p></td><td><p>start</p></td><td><ol><li><p><code>sys.query</code> maps to <code>query</code>.</p></li><li><p><code>sys.dialogue\_count</code> maps to <code>maximum memory turns</code>.</p></li></ol></td></tr><tr><td><p>LLM</p></td><td><p>LLM</p></td><td><ol><li><p><strong>model</strong>: Model Studio clears the model field for unsupported models, requiring you to select one manually. Supported models are fully compatible.</p></li><li><p><strong>prompt</strong>: Dify's System prompt maps to the main prompt in Model Studio, while its User prompt maps to the user prompt.</p></li><li><p><strong>vision capability</strong>: Fully compatible.</p></li><li><p><strong>context</strong>: Model Studio incorporates the raw fields from Dify's context directly into its system prompt.</p></li></ol></td></tr><tr><td><p>knowledge retrieval</p></td><td><p>knowledge base</p></td><td><ol><li><p><strong>input</strong>: Model Studio consistently uses the <code>content</code> field as the input.</p></li><li><p><strong>knowledge base</strong>: Model Studio clears this field after import. You must manually associate a knowledge base in Model Studio.</p></li><li><p><strong>retrieval settings</strong>: Dify's <code>Top-k</code> parameter maps to <code>number of retrieved fragments</code>.</p></li></ol></td></tr><tr><td><p>Direct Reply</p></td><td><p>output node</p></td><td><p>Fully compatible.</p></td></tr><tr><td><p>agent</p></td><td><p>None</p></td><td><p>Only the name is retained. You must click the node and select a specific Model Studio node as a replacement.</p></td></tr><tr><td><p>Question Classifier</p></td><td><p>intent classification</p></td><td><p>Model Studio clears the model field for unsupported models, requiring you to select one manually. Supported models are fully compatible.</p></td></tr><tr><td><p>Iteration</p></td><td><p>batch processing</p></td><td><ol><li><p><strong>input</strong>: Maps to <strong>Batch Array</strong>.</p></li><li><p><strong>output variable</strong>: Maps to <strong>Output Variable</strong>.</p></li></ol></td></tr><tr><td><p>loop</p></td><td><p>loop</p></td><td><p>Fully compatible.</p></td></tr><tr><td><p>code execution</p></td><td><p>script</p></td><td><p>Model Studio distinguishes between Python and JavaScript scripts.</p></td></tr><tr><td><p>Template Transform</p></td><td><p>None</p></td><td><p>Not compatible. Model Studio generates a custom node.</p></td></tr><tr><td><p>Variable Aggregator</p></td><td><p>Variable Processing</p></td><td><p>Maps to the <strong>Aggregate Groups</strong> output mode of the <strong>Variable Processing</strong> node.</p></td></tr><tr><td><p>Document Extractor</p></td><td><p>None</p></td><td><p>Not compatible. Model Studio generates a custom node.</p></td></tr><tr><td><p>Variable Assignment</p></td><td><p>Variable Settings</p></td><td><p>Fully compatible.</p></td></tr><tr><td><p>Parameter Extractor</p></td><td><p>parameter extraction</p></td><td><p>Model Studio does not support inference mode. Other features are fully compatible.</p></td></tr><tr><td><p>HTTP request</p></td><td><p>API</p></td><td><p>Fully compatible, but you must re-authenticate.</p></td></tr><tr><td><p>List Operation</p></td><td><p>None</p></td><td><p>Not compatible. Model Studio generates a custom node.</p></td></tr><tr><td><p>Tool</p></td><td><p>plugin, MCP</p></td><td><p>Not compatible. Model Studio generates a custom node.</p></td></tr><tr><td><p>comment</p></td><td><p>None</p></td><td><p>Not compatible.</p></td></tr><tr><td><p>end</p></td><td><p>end</p></td><td><p>If a Dify workflow contains multiple end nodes, Model Studio converts them into a single Variable Processing node and a single end node.</p></td></tr></tbody></table>

## Manage workflow versions <span id="d918ca86cent9" /> <span id="4531fa65edmm9" />

<table style={{ display: "table", tableLayout: "fixed", width: "100%" }}>
  <colgroup>
    <col style={{ width: "50%" }} />

    <col style={{ width: "50%" }} />
  </colgroup>

  <tbody>
    <tr>
      <td style={{ verticalAlign: "top" }}>
        1. Click <strong>Publish</strong> in the top-right corner of the workflow configuration page. In the <strong>Publish</strong> dialog box, enter version information, such as 1.0.0, and click <strong>OK</strong>.
      </td>

      <td style={{ verticalAlign: "top" }}>
        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/0096637371/p906387.png" alt="image" width={419} height={231.119} />
      </td>
    </tr>

    <tr>
      <td style={{ verticalAlign: "top" }}>
        2. Click <strong>Version Management</strong> at the top of the page, and in the <strong>Historical Versions</strong> panel, you can view or use different versions of the current workflow application as needed by clicking <strong>Overwrite Current Draft</strong> or <strong>Return to Current Version</strong>.

           > You can also click <strong>Export DSL for This Version</strong> at the top to export the DSL of the selected historical version.
      </td>

      <td style={{ verticalAlign: "top" }}>
        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/9192334771/p988015.png" alt="image" />
      </td>
    </tr>

    <tr>
      <td style={{ verticalAlign: "top" }}>
        3. <strong>Optional:</strong> In the <strong>Node Library</strong>, view or search for nodes.
      </td>

      <td style={{ verticalAlign: "top" }}>
        <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/9192334771/p995864.png" alt="image" />
      </td>
    </tr>
  </tbody>
</table>

## Delete and copy workflow applications <span id="556fedd7714sq" /> <span id="e14948256efr6" />

<table style={{ display: "table", tableLayout: "fixed", width: "100%" }}><colgroup><col style={{ width: "50%" }} /><col style={{ width: "50%" }} /></colgroup><tbody><tr><td style={{ verticalAlign: "top" }}><p>In <strong>My Applications</strong>, find a published application card and click the <Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/1686425771/p988023.png" alt="image" className="inline" noZoom /> icon to <strong>delete the application, copy its workflow, or modify its application name</strong>.</p></td><td style={{ verticalAlign: "top" }}><p><Image src="https://help-static-aliyun-doc.aliyuncs.com/assets/img/en-US/9192334771/p988022.png" alt="image" /></p></td></tr></tbody></table>

## FAQ <span id="c5a50fe0c2u5v" /> <span id="24caa0ba72sq5" />

<Tabs>
  <Tab title="Workflow applications">
    1. <strong>How do I write the results of a workflow run to a database?</strong>

       Use a script conversion node to write the output from the previous node to a database.
    2. <strong>How do I upload files when building a workflow application in Model Studio?</strong>

       Add an API node to your workflow application to upload files.
    3. <strong>How do I upload images?</strong>

       Use a VL model and pass the image URL as a parameter.
    4. <strong>Can I use an asynchronous task API within a workflow application?</strong>

       The timeout for a workflow application is 600 seconds. Avoid using an asynchronous task API within a workflow.
    5. <strong>How can I call the Model Studio workflow API from a frontend application and receive a streaming output?</strong>

       Frontend calls are not currently supported.
    6. <strong>Why can't I import a standalone .yaml file into a Model Studio workflow?</strong>

       Model Studio does not support importing standalone .yaml files. You must provide a compressed package that includes an MD5 file. We recommend regenerating the MD5 if you encounter issues.
    7. <strong>Can variable names in Model Studio workflows be in Chinese?</strong>

       No, variable names cannot contain Chinese characters.
    8. <strong>How is conversation history stored?</strong>

       Workflow applications store data for only one month. You must save your own conversation history. The `session_id` is valid for one hour.
  </Tab>

  <Tab title="Nodes">
    1. <strong>Why does my intent classification node fail when context is enabled?</strong>

       If you enable context for an intent classification node, the variable that you pass to it must be a list.
    2. <strong>Why does my API node fail when I use streaming output?</strong>

       The API node within a workflow does not support streaming output. However, streaming output is supported by the underlying HTTP API.
    3. <strong>How do I speed up a slow conditional node?</strong>

       1. <strong>Check your workflow configuration</strong>: Ensure each node, especially the conditional node, is configured correctly. Avoid unnecessarily complex calculations or data processing to reduce response time.
       2. <strong>Optimize script logic</strong>: If the conditional logic involves a custom script, optimize the script by reducing unnecessary loops or redundant data processing to improve performance.
       3. <strong>Run batch tests</strong>: Measure the average response time of your workflow to identify performance bottlenecks under specific conditions.
    4. <strong>How do I stream the reasoning process from a large model node?</strong>

       You need to add a text conversion node after the large model node, configure the `reasoning_content` variable, and enable Result Return. The end node must receive the result.
    5. <strong>How can I customize the output parameters of a large model node?</strong>

       1. <strong>Use a script node to process the output</strong>: Add a script node after the large model node to process its output, convert it to your desired format, or add extra parameters.
       2. <strong>Configure a batch node</strong>: If you are using a large model node within a batch node, you can select the output of the large model node as the final output in the batch node's configuration. The steps are as follows:

          - Add a large model node to the batch node.
          - In the batch node configuration, select the output of the large model node as the final output `resultList`.

       See [Parameter passing for applications](/help/en/model-studio/pass-through-of-application-parameters).
    6. <strong>Why does my API node return no result or fail to pass parameters?</strong>

       Verify that your API key and Base URL are correct. Ensure that the input parameters are configured correctly, and adjust the field input types if necessary. Use Model Observation to view model usage details.
    7. <strong>How do I resolve issues when accessing Excel data from a knowledge base?</strong>

       You cannot directly access local files. Use MCP to access local resources. You must manually process the output from a knowledge base node. We recommend adding a large model node to convert the output to a table format before passing it to a script node for further processing.
  </Tab>
</Tabs>