diff --git a/.gitignore b/.gitignore
index 54146e12..40d0f71e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,5 @@
__pycache__/
CLAUDE.md
AGENTS.md
+.claude/CLAUDE.local.md
+.claude/settings.local.json
diff --git a/difyworkflow101-lesson04-updateprompt.png b/difyworkflow101-lesson04-updateprompt.png
new file mode 100644
index 00000000..47b365ed
Binary files /dev/null and b/difyworkflow101-lesson04-updateprompt.png differ
diff --git a/docs.json b/docs.json
index 00179b8c..9a5aa380 100644
--- a/docs.json
+++ b/docs.json
@@ -229,6 +229,21 @@
"group": "Tutorials",
"expanded": false,
"pages": [
+ {
+ "group": "Workflow 101",
+ "pages": [
+ "en/use-dify/tutorials/workflow-101/lesson-01",
+ "en/use-dify/tutorials/workflow-101/lesson-02",
+ "en/use-dify/tutorials/workflow-101/lesson-03",
+ "en/use-dify/tutorials/workflow-101/lesson-04",
+ "en/use-dify/tutorials/workflow-101/lesson-05",
+ "en/use-dify/tutorials/workflow-101/lesson-06",
+ "en/use-dify/tutorials/workflow-101/lesson-07",
+ "en/use-dify/tutorials/workflow-101/lesson-08",
+ "en/use-dify/tutorials/workflow-101/lesson-09",
+ "en/use-dify/tutorials/workflow-101/lesson-10"
+ ]
+ },
"en/use-dify/tutorials/simple-chatbot",
"en/use-dify/tutorials/twitter-chatflow",
"en/use-dify/tutorials/customer-service-bot",
@@ -616,6 +631,21 @@
"group": "教程",
"expanded": false,
"pages": [
+ {
+ "group": "工作流 101",
+ "pages": [
+ "zh/use-dify/tutorials/workflow-101/lesson-01",
+ "zh/use-dify/tutorials/workflow-101/lesson-02",
+ "zh/use-dify/tutorials/workflow-101/lesson-03",
+ "zh/use-dify/tutorials/workflow-101/lesson-04",
+ "zh/use-dify/tutorials/workflow-101/lesson-05",
+ "zh/use-dify/tutorials/workflow-101/lesson-06",
+ "zh/use-dify/tutorials/workflow-101/lesson-07",
+ "zh/use-dify/tutorials/workflow-101/lesson-08",
+ "zh/use-dify/tutorials/workflow-101/lesson-09",
+ "zh/use-dify/tutorials/workflow-101/lesson-10"
+ ]
+ },
"zh/use-dify/tutorials/simple-chatbot",
"zh/use-dify/tutorials/twitter-chatflow",
"zh/use-dify/tutorials/customer-service-bot",
@@ -1003,6 +1033,21 @@
"group": "チュートリアル",
"expanded": false,
"pages": [
+ {
+ "group": "ワークフロー 101",
+ "pages": [
+ "ja/use-dify/tutorials/workflow-101/lesson-01",
+ "ja/use-dify/tutorials/workflow-101/lesson-02",
+ "ja/use-dify/tutorials/workflow-101/lesson-03",
+ "ja/use-dify/tutorials/workflow-101/lesson-04",
+ "ja/use-dify/tutorials/workflow-101/lesson-05",
+ "ja/use-dify/tutorials/workflow-101/lesson-06",
+ "ja/use-dify/tutorials/workflow-101/lesson-07",
+ "ja/use-dify/tutorials/workflow-101/lesson-08",
+ "ja/use-dify/tutorials/workflow-101/lesson-09",
+ "ja/use-dify/tutorials/workflow-101/lesson-10"
+ ]
+ },
"ja/use-dify/tutorials/twitter-chatflow",
"ja/use-dify/tutorials/customer-service-bot",
"ja/use-dify/tutorials/build-ai-image-generation-app",
diff --git a/en/use-dify/tutorials/workflow-101/lesson-01.mdx b/en/use-dify/tutorials/workflow-101/lesson-01.mdx
new file mode 100644
index 00000000..a80f6be2
--- /dev/null
+++ b/en/use-dify/tutorials/workflow-101/lesson-01.mdx
@@ -0,0 +1,49 @@
+---
+title: "Lesson 1: What is a Workflow?"
+---
+
+## 👋 Welcome to Dify 101
+
+We are going to take you from Zero to Hero. By the end of this course, you will build your very own Advanced AI Email Assistant.
+
+Let's leave coding behind for a second and talk about cooking.
+
+Imagine you want to cook a dish that you haven't made before. To make that happen, you need a **Recipe**. A recipe is just like a workflow! It tells you exactly what to do, in what order, to get the dish you want.
+
+## Meet Workflow
+
+In Dify, you are the head chef who writes a Recipe for the AI to follow. Here're the things you need to prepare beforehand:
+
+1. Input (Ingredients): The information you give the AI. This could be a user's question, a PDF document, or a messy email draft.
+2. Process (Instructions): The steps you force the AI to take. For example: First, summarize this text. Next, translate it into Spanish. Finally, format it as a LinkedIn post.
+3. Output (The Dish): The final result the AI hands back to you.
+
+To sum up, a workflow is a flowchart that asks AI to complete tasks in a specific order.
+
+This is a Smart ID Scanner workflow. Its job is to extract the information on front and back of an ID card, then send these texts back to you.
+
+
+ 
+
+
+### Node
+
+Let's have a closer look of the workflow above. That whole process is simply made up of a few connected steps: **Uploading the image, Extracting the information, and Combining the results**.
+
+Each of these steps is called a **Node**.
+
+Think of them like runners in a relay race: each node has a specific task. Once it finishes its turn, it passes the baton to the next node in line.
+
+Dify offers you a box of ready-to-use nodes, such as the LLM, Knowledge Retrieval, If/Else, Tools, etc.
+
+You can connect these nodes just by dragging and dropping—it's like building with the Lego blocks! You can easily snap them together to create a powerful automated workflow.
+
+## It's Your Turn
+
+1. Go [Dify](https://dify.ai/) and click **Get Started** in the upper right corner.
+2. Click on Explore. This is a library which collects different workflow of different scenarios.
+
+
+ 
+
+3. Pick a template that looks like a right fit for you. Don't worry if you don't understand every setting yet—just look at how the nodes are connected.
\ No newline at end of file
diff --git a/en/use-dify/tutorials/workflow-101/lesson-02.mdx b/en/use-dify/tutorials/workflow-101/lesson-02.mdx
new file mode 100644
index 00000000..112e6304
--- /dev/null
+++ b/en/use-dify/tutorials/workflow-101/lesson-02.mdx
@@ -0,0 +1,168 @@
+---
+title: "Lesson 2: Head and Tail (Start & Output Node)"
+sidebarTitle: "Lesson 2: Head and Tail"
+---
+
+In the last lesson, we compared a Workflow to a Recipe. Today, we are stepping into the professional kitchen to prep our ingredients (Start) and get our serving plates ready (Output).
+
+## Create the App
+
+
+
+ Click on **Studio** at the top of the screen. Under Create App on the left, click **Create from Blank**.
+
+
+ 
+
+
+
+ Select **Workflow** as the app type, fill up **App Name & Icon**, then click **Create**.
+
+
+ 
+
+
+
+ Click User Input, and you'll see a new popup window. There are two options here that decide how your app starts running:
+
+ - **User Input**
+
+ This is **Manual Mode**. The workflow only starts working when you (the user) type something into the chat box.
+
+ Best for: Most AI apps. For example, chatbots, writing assistants, translation, etc.
+ - **Trigger**
+
+ This is **Automatic Mode**. It runs automatically based on a signal (like 8:00 AM every morning, or a specific event).
+
+ Best for: Repetitive task that runs on a specific time, or run this workflow after a task is completed else where. For example, daily news summary.
+
+
+ 
+
+
+
+
+## Meet the Orchestration Canvas
+
+After selecting the Start node, you will see a large blank area. This is your orchestration canvas where you will design, build, and test your workflow.
+
+
+ 
+
+
+Remember the Nodes we learned in Lesson 1? The user input node you see on the canvas now is where everything begins.
+
+Every complete workflow relies on a basic skeleton: the Start Node (The Head) and the Output Node (The Tail).
+
+## The Start Node
+
+
+ 
+
+
+The Start Node is the only entrance to your entire workflow. It's like the Prep Ingredients step in cooking. Its job is to define what information the workflow needs to receive from the user to get started.
+
+We just selected **User Input** as our Start Node.
+
+### Core Concept: Variables
+
+Inside the Start Node, you will see the word **Variable**. Don't panic! You can think of a variable as a **Storage Box with a Label**.
+
+Each box is designed to hold a specific type of information:
+
+For example, if you are building a Travel Planner, you need the user to provide two pieces of information: `Destination` and `Travel Days`.
+
+User A might want to go to Japan for 5 days. User B might want to go to Paris for 3 days.
+
+Every user provides different content, so every time the app runs, the stuff inside these boxes changes.
+
+This is the meaning of a Variable—digging a hole for the user to fill, helping your workflow to handle different requests flexibly every time.
+
+## The End Node (Output)
+
+
+ 
+
+
+This is the finish line of the workflow. Think of it as Serving the Dish and it defines what the user actually sees at the very end.
+
+For example, remember that Travel Planner we talked about? If the user inputs Destination: Paris and Duration: 5 Days in the User Input Node. The Output Node is where the system finally hands over the result: Here is your complete 5-Day Itinerary for Paris.
+
+To sum up, the Start Node and End Node define the basic input and output, shaping the skeleton of your app.
+
+## Hands-On Practice: Start Building an AI Email Assistant
+
+Let's build the basic framework for an AI Assistant that helps you write emails.
+
+
+
+ You can either:
+
+ - Continue on the canvas you just opened, or
+ - Go back to Studio → Create Blank App → select Workflow, and name it Email Assistant (Remember to select **User Input** in the popup!)
+
+
+ If you need AI to help you with a email reply, what information do you need to give it?
+
+ That's right: usually the Customer's Name and the Original Email Content.
+
+ 1. Click on the **Start** node. In the panel on the right, look for **Input Field** and click the **\+** button.
+
+
+ 
+
+ 2. In the popup, we will create two variables (two storage boxes):
+
+ **Variable 1 (For the Customer Name)**
+
+
+ 
+
+ - Field Type: Text (Short Text)
+ - Variable Name: `customer_name`
+ - Label Name: Customer Name
+ - Keep other options as default
+
+ **Variable 2 (For the Email Content)**
+
+
+ 
+
+ - Field Type: Click the dropdown and select **Paragraph** (Since emails are usually long, a Paragraph box is bigger and holds more text)
+ - Variable Name: `email_content`
+ - Label Name: Original Email
+ - Max Length: Manually change this to **2000** to ensure it fits long emails
+
+
+ **Variable Name vs. Label Name**
+
+ You might notice we had to fill in two names. What's the difference?
+
+ - **Variable Name**: This is the ID card for the system. It must be unique, use English letters, and cannot have spaces.
+ - **Label Name**: This is the Label for the users. You can name it with any language (English, Chinese, etc.). It will be shown on the screen.
+
+
+
+ Right-click anywhere on the blank white space of the canvas. Select **Add Node** and select **Output** from the list.
+
+
+ 
+
+
+
+
+Here's everything on your canvas: a **Start Node** ready to receive a name and an email, and an **Output Node** waiting to send the final result.
+
+
+ 
+
+
+We have successfully built basic frame of the workflow. The empty space in the middle is where we will place the LLM (AI Brain) Node in the next lesson to process this information.
+
+## Mini Challenge
+
+**Task**: If you needed to create a Travel Plan Generator, what variables should the Start Node include?
+
+
+ Try exploring the Field Types in **Add Variable**.
+
\ No newline at end of file
diff --git a/en/use-dify/tutorials/workflow-101/lesson-03.mdx b/en/use-dify/tutorials/workflow-101/lesson-03.mdx
new file mode 100644
index 00000000..405b5b31
--- /dev/null
+++ b/en/use-dify/tutorials/workflow-101/lesson-03.mdx
@@ -0,0 +1,260 @@
+---
+title: "Lesson 3: The Brain of the Workflow (LLM Node)"
+sidebarTitle: "Lesson 3: The Brain of the Workflow"
+---
+
+
+ 
+
+
+In Lesson 2, we set up the Ingredients (Start Node) and the Serving Plate (Output Node).
+
+If the Start Node is the prep cook, the LLM Node is the Master Chef. It is the brain and core of your workflow.
+
+It handles all the thinking, analyzing, and creative writing. Whether you want to summarize an article, write code, or draft an email, this is the node that does the heavy lifting.
+
+## Configure the Model
+
+Before getting started, we need to connect to a model provider.
+
+
+
+ Click on your avatar in the top right corner and select **Settings**.
+
+
+ 
+
+
+
+ On the left menu, click **Model Provider**. Find OpenAI, and click **Install**.
+
+
+ 
+
+
+ 
+
+
+
+ Once installed, you are ready to go! Click **ESC** (or the **X**) in the upper right corner to return to your canvas.
+
+
+
+## Understand the Tags
+
+A pastry chef is great at cakes but terrible at sushi. Similarly, different AI models have different strengths.
+
+When selecting a model in Dify, you will see tags next to their names. Here's how to read them so you can pick the right one for you.
+
+
+
+ This is the bread and butter of AI. It's best for:
+
+ - Dialogue
+ - Writing articles
+ - Summarizing text
+ - Answering questions
+
+
+ This number represents the **Context Window**. You can think of it as short-term memory.
+
+ Here, K stands for thousand. **128K** means the model can hold 128,000 tokens (roughly equals to a word or a syllable). The bigger the number is, the better its memory is.
+
+
+ If you need to analyze a massive PDF report or a whole book, you need a model with a big number here.
+
+
+
+ Modal just means **Type of Information**. Most early AI models could only read text. Multi-modal models are evolved—they have senses like eyes and ears.
+
+ **VISION (The Eyes)**
+
+ Models with this tag can do more than read; they can see! You can upload a photo of a sunset and ask, What colors are in this? or upload a picture of your fridge ingredients and ask, What can I cook with this?
+
+ **AUDIO (The Ears)**
+
+ Models with this tag can hear. You can upload an audio recording of a meeting or a lecture, and the model can transcribe it into text or write a summary for you.
+
+ **VIDEO (The Movie Analyst)**
+
+ These models can watch and understand video content. They can analyze what is happening in a video clip, just like a human watching a movie.
+
+ **DOCUMENT (The Reader)**
+
+ These models are expert readers. Instead of copying and pasting text, you can just upload a file (like a PDF or Word document). The model will read the file directly and answer questions based on what is written inside.
+
+
+
+For our Email Assistant, the LLM with the **CHAT** tag is exactly what we need.
+
+## Hands-On 1: Add the LLM Node
+
+Let's put the brain into our workflow.
+
+
+
+ Go back to the **AI Email Assistant** workflow we created in Lesson 2.
+
+
+ Right-click in the empty space between Start and Output node. Click on the new **LLM** block. In the right-side panel, look for **Model**. Select **gpt-4o-mini**.
+
+
+ 
+
+
+
+ Drag a line from the Start node to the LLM node. Drag a line from the LLM node to the Output node. Your flow should look like this: **Start → LLM → Output**.
+
+
+ 
+
+
+
+
+Now we need to tell LLM exactly what to do by sending instructions which is called a **Prompt**.
+
+
+ 
+
+
+### Key Concept: The Prompt (The Instructions)
+
+**What is a Prompt?** Think of the Prompt as the specific note you attach to the order ticket. It tells the AI exactly **what to do** and **how to do it**.
+
+The most critical part is the ability to use **Variables** from the Start Node directly within your Prompt. This allows the AI to adapt its output based on the different raw materials you provide each time.
+
+In Dify, when you insert a variable like `customer_name` into the prompt, you are telling the AI: Go and look in the box labeled Customer Name and use the text inside.
+
+## Hands-On 2: Write the Prompt
+
+Now, let's apply this. We are going to write a prompt that mixes instructions with our variables.
+
+
+
+ Click the LLM Node to open the panel and find the **system** box. **System instructions** set the rules for how the model should respond—its role, tone, and behavioral guidelines.
+
+ Let's start by writing out the instructions. You can copy and paste the text below.
+
+ ```plaintext wrap
+ You are a professional customer service manager. Based on the customer's email, please draft a professional reply.
+ Requirements:
+ 1. Start by addressing the customer name with a friendly tone.
+ 2. Thank them for their email.
+ 3. Let them know we have received it.
+ 4. Sign off as Anne.
+ ```
+
+
+ User messages are what you send to the model—a question, request, or task for the model to work on.
+
+ In this workflow, the customer's name and the email content change every single time. Instead of typing them out manually, we add Variables in user messages.
+
+ 1. Click **Add Message** button below system box.
+ 2. In the User Message box, type **customer name:**.
+ 3. Press `/` on your keyboard.
+ 4. The Variable Selection menu pops out, and click `customer_name`.
+ 5. Press Enter to start a new line, and type **email content:.** Then, Press the / key again and click on `email_content`.
+
+
+ 
+
+
+ You don't need to type out those curly brackets manually! Just hit `/`, then pick your variable from the menu.
+
+ 4. Finally, your final Prompt will look like this:
+
+
+ 
+
+
+
+
+
+ **Hooray!** You've finished your first AI workflow in Dify!
+
+
+## Run and Test
+
+The ingredients are prepared, the chef is stand-by, and the instructions are ready. But does the dish taste good? Before we serve it to the customer, let's do a recipe testing.
+
+Testing is the secret sauce to a stable workflow. It helps us catch those sneaky little issues before they are put into work.
+
+### Quick Concept: The Checklist
+
+Think of the **Checklist** as your workflow's personal Health Check Doctor.
+
+It monitors your work in real-time, automatically spotting incomplete settings or mistakes (like a node that isn't connected to anything).
+
+Glancing at the Checklist before you hit **Publish** button is the best way to catch unnecessary errors early.
+
+### Hands-On 3: Test & Debug
+
+
+
+ Look at the top right corner of your canvas. Do you see the **Checklist** icon with a little number **1** on it? This is Dify telling you: Wait a second! There's one small thing missing here_._
+
+
+ 
+
+
+
+ Click on it, and you will see a warning: **output variable is required**. It means that the output node receives nothing.
+
+ Imagine your Head Chef (the LLM) has finished cooking the food, but the Waiter (the Output Node) has empty hands.
+
+
+ 1. Click on the **Output Node**
+ 2. Look for **Output Variable** and click the **Plus (+)** icon next to it
+ 3. Type `email_reply` in the **Variable Name** field
+ 4. Select the value: Click the variable selector and choose `{x} text` from the LLM Node
+
+
+ 
+
+
+
+ Now, there's no pop-up number on checklist. Let's do a test run.
+
+ Click **Test Run** at the top right corner of the canvas. Enter the customer's name and the email, then click **Start Run**.
+
+
+ 
+
+
+
+ ```text Sample Email for Testing
+ Customer Name: Amanda
+
+ Original Email:
+ Hi there,
+
+ I'm writing to ask for more information about Dify. Could you please tell me more on it?
+
+ Best regards,
+ Amanda
+ ```
+
+
+
+
+ This time, you will see green checkmarks ✅ on each of the nodes and the generated reply from AI.
+
+
+
+
+ **Great job!**
+
+ You didn't just build a workflow, but also know how to use the checklist and check before it goes live.
+
+
+## Mini Challenge
+
+Use the same structure to build a travel planner.
+
+
+ Explore the **Prompt Generator** to help you craft better prompts!
+
+
+ 
+
+
\ No newline at end of file
diff --git a/en/use-dify/tutorials/workflow-101/lesson-04.mdx b/en/use-dify/tutorials/workflow-101/lesson-04.mdx
new file mode 100644
index 00000000..b968eb6b
--- /dev/null
+++ b/en/use-dify/tutorials/workflow-101/lesson-04.mdx
@@ -0,0 +1,207 @@
+---
+title: "Lesson 4: The Cheat Sheet (Knowledge Retrieval)"
+sidebarTitle: "Lesson 4: The Cheat Sheet"
+---
+
+In the previous lessons, our AI email assistant can draft basic emails. But what if a customer asks about specific pricing plans or refund policy, the AI might start Hallucinating—which is a fancy way of saying it's confidently making things up.
+
+How do we stop the AI from hallucination? We give it a Cheat Sheet.
+
+## What is Retrieval Augmented Generation (RAG)
+
+The technical name for this is RAG (Retrieval-Augmented Generation). Think of it as turning the AI from a chef who memorizes general recipes into a chef who has a Specific Cookbook right on the counter.
+
+It happens in three simple steps:
+
+**1. Retrieval (Find the Recipe)**
+
+When a user asks a question, the AI flips through your Cookbook (the files you uploaded) to find the most relevant pages.
+
+Example: Someone asks for Grandma's Special Apple Pie. You go find that specific recipe page.
+
+**2. Augmentation (Prepare the Ingredients)**
+
+The AI takes that specific recipe and puts it right in front of its eyes so it doesn't have to rely on memory.
+
+Example: You lay the recipe on the counter and get the exact apples and cinnamon ready.
+
+**3. Generation (The Baking)**
+
+The AI writes the answer based only on the facts it just found.
+
+Example: You bake the pie exactly as the recipe says, ensuring it tastes like Grandma's, not a generic store-bought version.
+
+## The Knowledge Retrieval Node
+
+Think of this as placing a stack of reference materials right next to your AI Assistant. When a user asks a question, the AI first flips through this Cheat Sheet to find the most relevant pages. Then, it combines those findings with the user's original question to think of the best answer.
+
+In this practice, we will use the Knowledge Retrieval node to provide our AI Assistant with official Cheat Sheets, ensuring its answers are always backed by facts!
+
+### Hands-On 1: Create the Knowledge Base
+
+
+
+ Click **Knowledge** in the top navigation bar and click **Create Knowledge**.
+
+
+ 
+
+ In Dify, you can sync from Notion or a website, but for today, let's upload a file from your device. Click [here](https://drive.google.com/file/d/1imExB0-rtwASbmKjg3zdu-FAqSSI7-7K/view) to download Dify Intro for the upload later.
+
+
+ Click **Import from file**. Then, select the file we just downloaded for upload.
+
+
+ 
+
+
+
+ High-relevance chunks are crucial for AI applications to provide precise and comprehensive responses. Imagine a long book. It's hard to find one sentence in 500 pages. Dify chops the book into different Knowledge Cards so it can find the right answer faster.
+
+ **Chunk Structure**
+
+ Here, Dify automatically splits your long text into smaller, easier-to-retrieve chunks. We'll just stick with the General Mode here.
+
+
+ 
+
+ **Index Method**
+
+ - **High Quality**: Use LLM model to process documents for more precise retrieval helps LLM generate high-quality answers
+ - **Economical**: Using 10 keywords per chunk for retrieval, no tokens are consumed at the expense of reduced retrieval accuracy
+
+
+ 
+
+
+
+ After the document has been processed, we need to do one final check on the retrieval settings. Here, you can configure how Dify looks up the information.
+
+ In Economical mode, only the inverted index approach is available.
+
+
+ 
+
+ - **Inverted Index**
+
+ This is the default structure Dify uses. Think of it like the Index at the back of a book—it lists key terms and tells Dify exactly which pages they appear on.
+
+ This allows Dify to instantly jump to the right knowledge card based on keywords, rather than reading the whole book from start.
+ - **Top K**
+
+ You'll see a slider set to 3. This tells Dify: When the user asks a question, find the top 3 most relevant Knowledge Cards from the cookbook to show the AI.
+
+ If you set it higher, the AI gets more context to read, but if it's too high, it might get overwhelmed with too much information.
+
+ For now, let's just keep the default settings—they are already perfectly suited for our needs.
+
+
+ 
+
+
+
+ Click **Save and Process**. Your knowledge base is ready!
+
+
+
+
+ **Awesome!**
+
+ You have successfully created your first Knowledge Base. Next, we'll use this Knowledge Base to upgrade our AI Email Assistant.
+
+
+### Hands-On 2: Add the Knowledge Retrieval Node
+
+
+
+ 1. Go back to your Email Assistant Workflow.
+ 2. Hover over the line between the Start and LLM nodes.
+ 3. Click the **Plus (+)** icon and select the **Knowledge Retrieval** node.
+
+
+ 
+
+
+
+ 1. Click the node, and head to the right panel.
+ 2. Click the **plus (+)** button next to **Knowledge** to add knowledge.
+
+
+ 
+
+ 3. Choose **What's Dify**, and click **Add**.
+
+
+ 
+
+
+
+ Now the knowledge base is ready, how can we make sure that AI is looking through the knowledge base to search the answer with the email?
+
+ Stay at the panel, navigate to **Query text** above, and select `email_content`.
+
+ By doing this, we are telling AI: Take the customer's message and use it as a search keyword to flip through our cookbook and find the matching info. Without a query, the AI is just staring at a closed book.
+
+
+ 
+
+
+
+
+In this way, the Email Assistant will use the customer's original email as a search keyword to find the most relevant answers in the Knowledge Base.
+
+### Hands-On 3: Upgrade the Email Assistant
+
+Now, the knowledge base is ready. We need to tell the LLM node to actually read the knowledge as context before generating the reply.
+
+
+
+ 1. Click the **LLM Node**. You'll see a new section called **Context**.
+ 2. Click it and select **result** from the Knowledge Retrieval node.
+
+
+ 
+
+
+
+ We need to tell the AI to generate reply based on the context.
+
+ In **System**, add additional requirement **Generate response based on** `/` and select **Context**.
+
+
+ 
+
+
+
+
+**Whoo!** You've just completed the most challenging part. Now, your email assistant has a knowledge base to check when generating responses. Let's see how it works.
+
+Feel free to use the sample texts below to do the testing.
+
+
+
+```text Sample Email for Testing
+Customer Name: Amanda
+
+Original Email:
+Hi,
+
+What does the name 'Dify' actually stand for, and what can it do for my business?
+
+Best regards,
+Amanda
+```
+
+
+
+Check on the result and you'll find that instead of a generic guess, the AI will look at the knowledge base and explain what Dify stands for.
+
+
+ 
+
+
+## Mini Challenge
+
+1. What happens if a customer asks a question that isn't in the knowledge base?
+2. What kind of information could you upload as a knowledge base?
+3. Explore Chunk Structure, Index Method, and Retrieval Setting.
\ No newline at end of file
diff --git a/en/use-dify/tutorials/workflow-101/lesson-05.mdx b/en/use-dify/tutorials/workflow-101/lesson-05.mdx
new file mode 100644
index 00000000..a2774a3c
--- /dev/null
+++ b/en/use-dify/tutorials/workflow-101/lesson-05.mdx
@@ -0,0 +1,170 @@
+---
+title: "Lesson 5: The Crossroads of Your Workflow (Sorting and Executing)"
+sidebarTitle: "Lesson 5: The Crossroads of Your Workflow"
+---
+
+Right now, our Email Assistant treats every message following the same path of the workflow. That's not smart enough. An email asking about Dify's price should be handled differently than an email on bug reporting.
+
+To make our assistant truly intelligent, we need to teach it how to Read the Room. We're going to set up a Crossroads that sends different types of emails down different tracks.
+
+## The If/Else Node
+
+
+ 
+
+
+If/Else node is just like a traffic light. It checks a condition (like Does this email mention pricing? ) and sends the flow left or right based on the result.
+
+### Hands-On 1: Set up the Crossroads
+
+Let's upgrade our assistant so it can tell the difference between Dify-related emails and Everything else.
+
+
+
+ Hover over the line between the Start and Knowledge Retrieval nodes. Click the **Plus (+)** icon and select the **If/Else** node.
+
+
+ 1. Click the node to open the panel
+ 2. Click **\+ Add Condition** in the IF section. Choose the variable: `{x} email_content`
+
+
+ 
+
+ 3. The Logic: Keep it as **Contains**. Type **Dify** in the input box
+
+
+ 
+
+ Now, the complete logic for the IF branch is: `If the email content contains the word Dify`.
+
+
+
+
+ **Understanding the Traffic Light**
+
+ When setting conditions, Dify offers several ways to judge information, much like the different signals at a crossroads:
+
+ - **Is / Is Not**
+
+ Like a perfect key for a lock. The content must match your value exactly.
+ - **Contains / Not Contains**
+
+ Like a magnifying glass. It checks if a specific keyword exists anywhere in the text. This is what we are using today.
+ - **Starts with / Ends with**
+
+ Check if the text begins or ends with specific characters.
+ - **Is Empty / Is Not Empty**
+
+ Check if the variable has any content. For example: Checking if a user actually uploaded an attachment. Understanding these helps you set accurate and flexible rules, building a much smarter workflow!
+
+
+### Hands-On 2: Plan Different Paths
+
+Now that we have the crossroad here, we need to decide what happens on each road.
+
+#### A. The Dify-Related Email Track (IF Branch)
+
+Click the **plus (+)** icon on the right side of the IF branch, drag out a line, and connect it to **Knowledge Retrieval** node.
+
+What this means: When the email contains the word Dify, the flow will execute the professional reply process we built in the last lesson (which looks up information in the Knowledge Base).
+
+
+ 
+
+
+#### B. The Unrelated Email Track (ELSE Branch)
+
+For emails that are not related or mention Dify, we want to create a simple, polite, and general reply process.
+
+
+
+ Click the **(+)** next to ELSE and select a new **LLM Node (LLM 2)**
+
+
+ Copy and paste the prompt below
+
+ ```plaintext wrap
+ You are a professional customer service manager. Based on the customer's email, kindly inform the user that no relevant information was found and provide relevant guidance.
+
+ Requirements:
+ 1. Address the customer name in a friendly tone.
+ 2. Thank them for their letter.
+ 3. Keep the tone professional and friendly.
+ 4. Sign off as "Anne."
+ ```
+
+
+ 1. Click **Add Message** button below system.
+ 2. In the User Message box, type **customer name:**.
+ 3. Press `/` on your keyboard.
+ 4. You can see the Variable Selection menu pops out, and click `customer_name`.
+ 5. Press Enter to start a new line, and type **email content:**
+ 6. Press the / key again and click on `email_content`.
+
+
+ 
+
+
+
+
+Now we have two tracks generating two different replies. Imagine if we had 10 tracks, our workflow would look like a messy plate of spaghetti.
+
+To keep things clean, we use a Variable Aggregator. Think of it as a Traffic Hub where all the different roads merge back into one main highway.
+
+## Variable Aggregator
+
+
+ 
+
+
+Variable Aggregator is like a traffic hub where all the different roads merge back into one main highway.
+
+### Hands-On 3: Add Variable Aggregator
+
+
+
+ 1. Select the connection line between the End Node and the LLM node and delete it.
+ 2. Right-click on the canvas, select **Add Node**, and choose the **Variable Aggregator** node.
+
+
+ 
+
+
+
+ Connect LLM and LLM 2 node to the Variable Aggregator.
+
+
+ 1. Click the Variable Aggregator node.
+ 2. Click the **plus (+)** icon next to **Assign Variables**.
+ 3. Select the **text** from LLM 1 AND the **text** from LLM 2.
+
+
+ 
+
+ Now, no matter which LLM node generates the response, the Variable Aggregator node gathers the content and hands it to the Output Node.
+
+
+ 1. Connect the Variable Aggregator to the Output node.
+ 2. Update the Output Variable to the Variable Aggregator's result instead of previous LLM results.
+
+
+ 
+
+ Here's how the workflow looks:
+
+
+ 
+
+
+
+ Click **Test Run**, enter a customer name, and try testing with inputs that both include and exclude the keyword Dify to see the different results.
+
+
+
+## Mini Challenge
+
+For business inquiry emails, how should we edit this workflow to generate proper response?
+
+
+ Don't forget to update knowledge base with business-related files.
+
\ No newline at end of file
diff --git a/en/use-dify/tutorials/workflow-101/lesson-06.mdx b/en/use-dify/tutorials/workflow-101/lesson-06.mdx
new file mode 100644
index 00000000..8afc5669
--- /dev/null
+++ b/en/use-dify/tutorials/workflow-101/lesson-06.mdx
@@ -0,0 +1,206 @@
+---
+title: "Lesson 6: Handle Multiple Tasks (Parameter Extraction & Iteration)"
+sidebarTitle: "Lesson 6: Handle Multiple Tasks"
+---
+
+Imagine you get an email saying:
+
+> Hi! What exactly is Dify? Also, which models does it support? And do you have a free plan?
+
+If we send this to our current AI assistant, it might only answer the first question or give a vague response to both.
+
+We need a way to identify every question first, and then loop through our Knowledge Base to answer them one by one.
+
+## Parameter Extractor
+
+
+ 
+
+
+You can take Parameter Extractor as a highly organized scout. It reads a paragraph of texts (like an email) and picks out the specific piece of information you asked for, putting them into a neat and organized list.
+
+### Hands-On 1: Add Parameter Extractor
+
+Before we upgrade the email assistant, let's remove these nodes: Knowledge Retrieval, If/Else, LLM, LLM 2, and Variable Aggregator.
+
+
+
+ Right after the Start node, add the **Parameter Extractor** node.
+
+
+ 
+
+
+
+ Click Parameter Extractor, and in the **Input Variable** section on the right panel, choose `email_content`.
+
+
+ 
+
+ Since AI doesn't automatically know which specific information we need from the email, we must tell it to collect all the questions.
+
+
+ Click the **plus (+)** icon next to **Extract Parameters** to start defining what the AI should look for. Let's call it `question_list`.
+
+
+ 
+
+
+ **Parameter Types**
+
+ If Parameter Extractor is a scout, then Type is the bucket they use to carry the info. You need the right bucket for the right information.
+
+ **Single Items (The Small Buckets)**
+
+ - **String (Text)**: For a single piece of text, e.g. customer's name
+ - **Number**: For a single digit, e.g. order quantity
+ - **Boolean**: A simple Yes or No (True/False), good for a judgement result or a decision
+
+ **List Items (The Arrays)**
+
+ - **Array[String]**: Array means List, and String means Text. So, `Array[String]` means we are using a basket that can hold multiple pieces of text—like all the separate questions in an email
+ - **Array[Number]**: A container that holds different numbers, e.g. a list of prices or commodities
+ - **Array[Boolean]**: Used to store multiple Yes/No judgment results. For example, checking a list containing multiple to-do items and returning whether each item is completed, such as `[Yes, No, Yes]`
+ - **Array[Object]**: An advanced folder that holds sets of data (like a contact list where each entry has a Name and a Phone Number)
+
+
+
+ 1. Based on our needs, choose `Array[String]` for the email content.
+ 2. Add description for providing additional context. You can write: All the questions raised by the user in the email. After that, click **Add**.
+
+
+ 
+
+
+
+ In the **Instructions** box below the extracted parameters, type a clear command to tell the AI how to act.
+
+ For example: Extract all questions from the email, and make each question as a single item on the list.
+
+
+
+By doing this, the node will be able to find all the questions in the email. Now that our scout has successfully gathered the Golden Nuggets, we need to move to the next step: teaching the AI to process each question.
+
+## Iteration
+
+
+ 
+
+
+With iteration, your assistant has a team of identical twins. When you hand over a list (like questions in the mail list), a twin appears for every single item on that list.
+
+Each twin takes their assigned item and performs the exact same task you've set up, ensuring nothing gets missed.
+
+### Hands-On 2: Set up Iteration Node
+
+
+
+ 1. Add an Iteration node after the Parameter Extractor.
+ 2. Click on the Iteration node and navigate to the Input panel on the right.
+ 3. Select `{x} question_list` from the Parameter Extractor. Leave the output variable blank for now.
+
+
+ 
+
+ **Advanced Options in Iteration**
+
+ In the Iteration panel, you'll see more settings. Let's have a quick walk-through.
+
+
+ 
+
+ **Parallel Mode**: OFF (Default)
+
+ - When disabled, the workflow processes each item in the list one after another (finish Question 1, then move to Question 2).
+ - When enabled, the workflow attempts to process all items in the list simultaneously (similar to 5 chefs cooking 5 different dishes at the same time).
+
+ **Error Response Method**: Terminate on error by default.
+
+ - **Terminate**: This means if any single item in the list (e.g., the 2nd question) fails during the sub-process, the entire workflow will stop immediately
+ - **Ignore Error and Continue**: This means even if the 2nd question fails, the workflow will skip it and move on to process the remaining questions
+ - **Remove Abnormal Output**: Similar to ignore, but it also removes that specific failed item from the final output list results
+
+ Back to the workflow, you'll see a sub-process area under the Iteration node. Every node inside this box will run once for every question.
+
+
+ 1. Inside the Iteration box, add a Knowledge Retrieval node.
+ 2. Set the query text to `{x} item`. In Iteration, item always refers to the question that is currently being processed.
+
+
+ 
+
+
+
+ 1. Add an LLM node after Knowledge Retrieval.
+ 2. Configure it to answer the question based on the retrieved context.
+
+
+ Remember Lesson 4? Use those Prompt skills and don't forget context!
+
+ Feel free to use the prompt below:
+
+ **System**:
+
+ ```plaintext wrap
+ You are a professional Dify Customer Service Manager. Please provide a response to questions strictly based on the `Context`.
+ ```
+
+ **User**:
+
+ ```plaintext wrap
+ questions: Iteration/{x} item
+ ```
+
+
+ 
+
+ Since the iteration node generates an answer for each individual question, we need to gather all these answers to create one complete reply email.
+
+
+ 1. Click the Iteration node.
+ 2. In the **Output Variable**, select the variable representing the LLM's answer inside the loop. Now, the Iteration node will collect every answer and gather them into a new list.
+
+
+ 
+
+
+
+ Finally, connect one last LLM node. This final editor will take all the collected answers and polish them into one professional email.
+
+ Don't forget to add prompt in system and user message. Feel free to refer the prompt below.
+
+ ```plaintext wrap
+ You are a professional customer service assistant. Please organize the answers prepared for customer into a clear and complete email reply.
+ Sign the email as Anne.
+ ```
+
+ **User**:
+
+ ```plaintext wrap
+ answers: Iteration/{x}output
+ customer: User Input/{x}customer_name
+ ```
+
+
+ 
+
+
+
+ 1. Click on the checklist to see if there's any missing spot. According to the notes, we need to connect Output node while fix the invalid variable issue.
+ 2. Connect Output node with LLM 2 node before it, remove its previous variable, then select text in LLM 2 as the output variable.
+
+
+ 
+
+
+
+
+Now, you can write a test email with 3 different questions and check on the generated reply.
+
+## Mini Challenge
+
+What else could Parameter Extractor find?
+
+
+ Try exploring the parameter type in it.
+
\ No newline at end of file
diff --git a/en/use-dify/tutorials/workflow-101/lesson-07.mdx b/en/use-dify/tutorials/workflow-101/lesson-07.mdx
new file mode 100644
index 00000000..29e5276b
--- /dev/null
+++ b/en/use-dify/tutorials/workflow-101/lesson-07.mdx
@@ -0,0 +1,226 @@
+---
+title: "Lesson 7: Enhance Workflows (Plugins)"
+sidebarTitle: "Lesson 7: Enhance Workflows"
+---
+
+Our email assistant can now flip through our knowledge base. But what if a customer asks a beyond-knowledge-base question, like: What is in the latest Dify release?
+
+If the knowledge base hasn't been updated yet, the workflow will be at a loss. To fix this, we need to equip it with a Live Search skill!
+
+## Tools
+
+
+ 
+
+
+Tools are the superpower for your AI workflow.
+
+The [Dify Marketplace](https://marketplace.dify.ai/) is like a Plugin Supermarket. It's filled with ready-made superpowers—searching Google, checking the weather, drawing images, or calculating complex math. You just install and plug them into your workflow with several clicks.
+
+Now, let's continue to upgrade on current workflow.
+
+### Hands-On 1: Upgrade the Sub-process Area in Iteration
+
+We are going to add a new logic to our assistant: Check the Knowledge Base first; if the answer isn't there, go search Google.
+
+To focus on the new logic, let's keep only these nodes: **User input, Parameter Extractor, and Iteration**.
+
+#### Step 1: Knowledge Query and the Judge
+
+
+
+ 1. Click to enter the sub-process area of the Iteration node.
+ 2. Keep Knowledge Retrieval node, and make sure the query variable is `{x} item`.
+ 3. Delete the previous LLM node.
+
+
+ Add an LLM node right after Knowledge Retrieval node. Its job is to decide if the Knowledge Base info can actually respond to the questions.
+
+ - **For Context session**: Select the `Knowledge Retrieval / {x} result Array [Object]` from Knowledge Retrieval
+ - **System Prompt**:
+
+ ```plaintext wrap
+ Based on the `Context`, determine if the answer contains enough information to answer the questions. If the information is insufficient, you MUST reply with: "Information not found in knowledge base".
+ ```
+ - **User Message**:
+
+ ```plaintext wrap
+ questions: Iteration/{x} item
+ ```
+
+
+ 
+
+
+
+
+Here's what it looks like on the canvas.
+
+
+ 
+
+
+#### Step 2: Setting the Crossroads
+
+
+
+ After LLM node, let's add If/Else node. Set the rule: If LLM Output **Contains** **Information not found in knowledge base**.
+
+ This means, when we can't respond with the information in knowledge base.
+
+
+ 
+
+
+
+ Let's connect a search tool after the IF branch. This indicates that when the knowledge base cannot find relevant answer information, we use web search to find the answers.
+
+ 1. After the IF node, click plus(+) icon and select Tool.
+ 2. In the search box, type Google. Hover over Google, click Install on the right, and then click Install again in the pop-up window.
+
+
+ 
+
+
+
+ Click Google Search in Google.
+
+
+ 
+
+
+
+ Using Google Search for the first time requires authorization—it's like needing a Wi-Fi password.
+
+
+ 
+
+ 1. Click API Key Authorization Configuration, then click Get your SerpApi API key from SerpApi. Sign in to get your private API key.
+
+
+ Your API Key is your passport to the outside world. Keep it safe and avoid sharing it with others.
+
+
+ 
+
+ 2. Copy and paste the API key in SerpApi API key. Click **Save**.
+ 3. Once the API key is successfully authorized, the settings panel shows up immediately. Head to Query string field, and select `Iteration/{x} item`.
+
+
+ 
+
+
+
+ Now, we need different ways to answer depending on which path we're looking at.
+
+ **The Search Answer Path**
+
+ Add a new LLM node to answer the question based on the search results. Connect it to the Google Search node.
+
+ **System**:
+
+ ```plaintext wrap
+ You are a Web Research Specialist. Based on Google Search, concisely answer the user's questions. Please do not mention the knowledge base in your response.
+ ```
+ **User Message**:
+
+ ```plaintext wrap
+ results: GOOGLESEARCH/{x} text
+ questions: Iteration/{x} item
+ ```
+
+
+ 
+
+ **The Knowledge Searching Path**
+
+ After the Else node, add a new LLM node to handle answers based on the knowledge base.
+
+ **System**:
+
+ ```plaintext wrap
+ You are a professional Dify Customer Service Manager. Strictly follow the `Context` to reply to questions.
+ ```
+ **User Message**:
+
+ ```plaintext wrap
+ questions: Iteration/{x} item
+ ```
+
+
+ 
+
+
+
+ 1. In the sub-process (inside the Iteration box), add a Variable Aggregator node that connects both LLM 2 and LLM 3 at the very end.
+ 2. In the Variable Aggregator panel, select the variables `LLM 2/{x}text String` and `LLM 3/{x}text String` as the Assign Variables.
+
+ In this way, we're merging the two possible answers into a single path.
+
+
+ 
+
+
+
+
+This is how the current workflow looks.
+
+
+ 
+
+
+#### Step 3: The Final Email Assembly
+
+Now that our logic branches have finished processing, let's combine all the answers into a single, polished email.
+
+
+
+ Click on the Iteration node, and set `{x}Variable Aggregator/{x}output String` as the output variables.
+
+
+ 
+
+
+
+ After the Iteration node, connect a new LLM node to summarize all outputs. Feel free to use the prompt below.
+
+ **System**:
+
+ ```plaintext wrap
+ You are a professional Customer Service Manager. Summarize all the answers of the questions, and organize a clear and complete email reply for the customer.
+ Do not include content where the knowledge base could not find relevant information.
+ Signature: Anne.
+ ```
+
+ **User Message**:
+
+ ```plaintext wrap
+ questions: Iteration/ {x} output
+ customer: User Input / {x} customer_name
+ ```
+
+
+ 
+
+
+
+ After the LLM node, add an End node. Set the output variable as `LLM 4/{x}text String`.
+
+
+ 
+
+
+
+
+We have now completed the entire setup and configuration of the workflow. Our email assistant can now answer questions based on the Knowledge Base and use Google Search for supplementary answers when needed.
+
+
+ 
+
+
+Try sending an email with question that definitely isn't in the knowledge base. Let's see if the AI successfully uses Google to find the related answers.
+
+## Mini Challenge
+
+1. What are other conditions you can choose in If/Else node?
+2. Browse marketplace to see if you can add another tool for this workflow?
\ No newline at end of file
diff --git a/en/use-dify/tutorials/workflow-101/lesson-08.mdx b/en/use-dify/tutorials/workflow-101/lesson-08.mdx
new file mode 100644
index 00000000..c1d733f7
--- /dev/null
+++ b/en/use-dify/tutorials/workflow-101/lesson-08.mdx
@@ -0,0 +1,213 @@
+---
+title: "Lesson 8: The Agent Node"
+sidebarTitle: "Lesson 8: The Agent Node"
+---
+
+Let's look back the upgrades we've made for our email assistants.
+
+- Learned to Read: It can search a Knowledge Base
+- Learned to Choose: It uses Conditions to make decisions
+- Learned to Multitask: It handles multiple questions via Iteration
+- Learned to Use Tools: It can access the Internet via Google Search
+
+You might have noticed that our workflow is no longer just a straight line (Step 1 → Step 2 → Step 3).
+
+It's becoming a system that analyzes, judges, and calls upon different abilities to solve problems. This advanced pattern is what we call an Agentic Workflow.
+
+## Agentic Workflow
+
+An Agentic Workflow isn't just Input \> Process \> Output.
+
+It involves thinking, planning, using tools, and adjusting based on results. It transforms the AI from a simple Executor (who just follows orders) into an intelligent Agent (who solves problems autonomously).
+
+## Agent Strategies
+
+To make Agents work smarter, researchers designed Strategies—think of these as different modes of thinking that guide the Agent.
+
+- **ReAct (Reason + Act)**
+
+ The Think, then Do approach. The Agent thinks (What should I do?), acts (calls a tool), observes the result, and then thinks again. It loops until the job is done.
+- **Plan-and-Execute**
+
+ Make a full plan first, then do it step-by-step.
+- **Chain of Thought (CoT)**
+
+ Writing out the reasoning steps before giving an answer to improve accuracy.
+- **Self-Correction**
+
+ Checking its own work and fixing mistakes.
+- **Memory**
+
+ Equipping the Agent with short-term or long-term memory allows it to recall previous conversations or key details, enabling more coherent and personalized responses.
+
+In Lesson 7, we manually built a Brain using Knowledge Retrieval -\> LLM to Decide-\> If/Else -\> Search. It worked, but it was complicated to build.
+
+Is there a simpler way? Yes, and here it is.
+
+## Agent Node
+
+The Agent Node is a highly packaged intelligent unit.
+
+You just need to set a Goal for it through instructions and provide the Tools it might need. Then, it can autonomously think, plan, select, and call tools internally (using the selected Agent Strategy, such as ReAct, and the model's Function Calling capability) until it completes your set goal.
+
+In Dify, this greatly simplifies the process of building complex Agentic Workflows.
+
+## Hands-on 1: Build with Agent Node
+
+Our goal is to replace that complex manual logic inside our Iteration loop with a single, smart Agent Node.
+
+
+
+ Go to the sub-process of the Iteration. Keep knowledge retrieval node, and delete other nodes in side it.
+
+
+ 
+
+
+
+ Add an Agent node right after the Knowledge Retrieval node.
+
+
+ 
+
+
+
+ Since we haven't used this before, we need to install a strategy from the Marketplace.
+
+ Click the Agent node. In the right panel, look for Agent Strategy. Click Find more in Marketplace.
+
+
+ 
+
+
+
+ In the Marketplace, find Dify Agent Strategy and install it.
+
+
+ 
+
+
+
+ Back in your workflow (refresh if needed), select ReAct under Agent Strategy.
+
+
+ 
+
+ **Why ReAct here?**
+
+ ReAct (Reason + Act) is a strategy that mimics human problem-solving using a Think → Do → Check loop.
+
+ 1. Reason: The Agent thinks, What should I do next? (e.g., Check the Knowledge Base).
+ 2. Act: It performs the action.
+ 3. Observe: It checks the result. If the answer isn't found, it repeats the cycle (e.g., Okay, I need to search Google).
+
+ This thinking-while-doing approach is perfect for complex tasks where the next step depends on the previous result.
+
+
+ ReAct is a thinking strategy, but to actually pull off the action part, AI needs the right "physical" skills which is called **Function Calling**. Select a model that supports Function Calling. Here, we choose gpt-5.
+
+ **Why Function Calling?**
+
+ One of the core capabilities of an Agent Node is to autonomously call tools. Function Calling is the key technology that allows the model to understand when and how to use the tools you provide (like Google Search).
+
+ If the model doesn't support this feature, the Agent cannot effectively interact with tools and loses most of its autonomous decision-making capabilities.
+
+
+ 
+
+
+
+ Click Agent node. Click plus(+) icon in tool list and select Google Search.
+
+
+ 
+
+
+
+ We need to tell the Agent specifically what to do with the tools and context we are giving it. Use and paste the instructions into the Instruction field:
+
+ ```plaintext wrap
+ Goal: Answer user questions about Dify products.
+
+ Steps:
+ 1. I have provided a relevant internal knowledge base retrieval result. First, judge if this result can fully answer the user's questions.
+ 2. If the context clearly answers it, generate the final answer based on the context.
+ 3. If the answer is insufficient or irrelevant, use the Google Search tool to find the latest information and generate the answer based on search results.
+
+ Requirement: Keep the final answer concise and accurate.
+ ```
+
+
+ 
+
+
+
+ Your configuration here is crucial for the Agent to see the data.
+
+ - **Context**: Select `Knowledge Retrieval / (x) result Array[Object]` from the Knowledge Retrieval node (This passes the knowledge base content to the Agent).
+ - **Query**: Select `Iteration/{x} item` from the Iteration node.
+
+ **Why item instead of the original email_content?**
+
+ We used the Parameter Extractor to extract a list of questions (`question_list`) from the `email_content`. The Iteration node is processing this list one by one, where item represents the specific question currently being handled.
+
+ Using item as the query input allows Agent to focus on the current task, improving the accuracy of decision-making and actions.
+
+
+ 
+
+
+
+ Click `Agent/{x}text String` as the output variables.
+
+
+ 
+
+
+
+
+
+ 🎉 The Iteration node is now upgraded.
+
+
+Since the Iteration node generates a list of answers, we need to stitch them back together into one email.
+
+## Hands-on 2: Final Assembly
+
+
+
+ 1. Add an LLM node after the Iteration node.
+ 2. Click on it and add prompt into the system. Feel free to check on the prompt below, or edit by yourself.
+
+ ```plaintext wrap
+ Combine all answers for the original email.
+ Write a complete, clear, and friendly reply to the customer.
+ Signature: Anne
+ ```
+ 3. Add user message to replace answers, email content and customer name with variables respectively. Here's how the LLM looks like right now.
+
+
+ 
+
+
+
+ Set the output variable to the LLM's text and name it `email_reply`.
+
+
+ 
+
+
+
+
+Here comes the final workflow.
+
+
+ 
+
+
+Click **Test Run**. Ask a mix of questions. Watch how the Agent Node autonomously decides when to use the context and when to use Google search.
+
+## Mini Challenge
+
+1. Could we use an Agent Node to replace the entire Iteration loop? How would you design the prompt to handle a list of questions all at once?
+2. What other information could you feed into the Agent's Context field to help it make better decisions?
\ No newline at end of file
diff --git a/en/use-dify/tutorials/workflow-101/lesson-09.mdx b/en/use-dify/tutorials/workflow-101/lesson-09.mdx
new file mode 100644
index 00000000..593e8412
--- /dev/null
+++ b/en/use-dify/tutorials/workflow-101/lesson-09.mdx
@@ -0,0 +1,94 @@
+---
+title: "Lesson 9: Layout Designer (Template)"
+sidebarTitle: "Lesson 9: Layout Designer"
+---
+
+In Lesson 8, we successfully built a powerful Agent that can think and search. However, you might have noticed a tiny issue: even though we asked the final LLM to list the answers, sometimes the formatting can be a bit messy or inconsistent (e.g., mixing bullet points with paragraphs).
+
+To fix this, we need a dedicated format assistant to organize the answers into a beautiful, standardized format before the final LLM writes the email.
+
+## Template
+
+It takes the original data (like your list of answers), follows a strict design template/standards you provide, and generates a perfectly formatted block of text, ensuring consistency every single time.
+
+## Hands-On: Polish the Email Layout
+
+
+
+ Since the Template node will be handling the greetings, we need to tell LLM to focus solely on the questions and answers. Copy and paste the prompt below or feel free to edit it.
+
+ ```plaintext wrap
+ Combine all answers for the original email. Write a complete, clear, and friendly reply that only includes the summarized answers.
+
+ IMPORTANT: Focus SOLELY on the answers. Do NOT include greetings (like "Hi Name"), do
+ NOT write intro paragraphs (like "Thank you for reaching out"), and do NOT include
+ signatures.
+ ```
+
+
+
+ List the different variables respectively.
+
+
+ 
+
+
+
+ After LLM node, click to add Template node.
+
+
+ 
+
+
+
+ Click the Template node, go to the Input Variables section, and add these two items:
+
+ - `customer`: Choose `User Input / {x} customer_name String`
+ - `body`: Choose `LLM / {x} text String`
+
+
+ 
+
+
+
+ **What is Jinja2?**
+
+ In simple terms, Jinja2 is a tool that allows you to format variables (like your list of answers) into a text template exactly how you want. It uses simple symbols to mark where variables go and perform basic logic. With it, we can turn a raw list of data into a neat, standardized text block.
+
+ Here, we can put together opening, signatures, and email body to make sure the email is professional and consistent every time.
+
+ Copy and paste this exact layout into the Template code box:
+
+ ```jinja
+ Hi {{ customer }},
+
+ Thank you for reaching out to us, and we are more than happy to provide you with the information you are seeking.
+
+ Here are the details regarding your specific questions:
+
+ {{ body }}
+
+ ---
+ Thank you for reaching out to us!
+ Best regards,
+ Anne
+ ```
+
+
+
+Here's the final workflow.
+
+
+ 
+
+
+Click **Test Run**. Ask multiple questions in one email. Notice how your final output has a perfectly written custom intro, the LLM's beautifully summarized answers in the middle, and a standard, professional signature at the bottom.
+
+## Mini Challenge
+
+1. How would you change the Jinja2 code to make a numbered list (1. Answer, 2. Answer) instead of bullet points?
+
+
+ Check the [Template Designer Documentation](https://jinja.palletsprojects.com/en/stable/templates/) or ask an LLM about it.
+
+2. What else can Template node do?
\ No newline at end of file
diff --git a/en/use-dify/tutorials/workflow-101/lesson-10.mdx b/en/use-dify/tutorials/workflow-101/lesson-10.mdx
new file mode 100644
index 00000000..370d0b54
--- /dev/null
+++ b/en/use-dify/tutorials/workflow-101/lesson-10.mdx
@@ -0,0 +1,106 @@
+---
+title: "Lesson 10: Publish and Monitor Your AI App"
+sidebarTitle: "Lesson 10: Publish and Monitor"
+---
+
+After building and tuning, your Email Assistant is now fully ready. It can read knowledge bases, use search tools, and generate beautifully formatted replies. But right now, it's still sitting inside your Dify Studio and only you can see it.
+
+How do we share it with others? How do we know if it's working correctly when we aren't watching?
+
+It's time for the final two critical steps: Publish and Monitor.
+
+## Publish Your Application
+
+1. Move your mouse to the top right corner of the canvas and click the **Publish** button. You'll see other buttons light up.
+
+
+ Whenever you make changes to your workflow, you must click **Publish → Update** to save them.
+
+ If you don't update, the live version will remain the old one.
+
+
+ 
+
+2. Once published, the gray-out buttons turned clickable now.
+ 1. **Share Your App**
+
+ Click **Run App**. Dify automatically generates a WebApp for you. This is a ready-to-use chat interface for your Email Assistant.
+
+ You can send this URL to colleagues or friends. They don't need to log in to Dify to use the email assistant.
+
+
+ 
+
+ 2. **Batch Run App**
+
+ If you have 100 emails to reply, copying and pasting them one by one will drag you down.
+
+ In Dify, all you need to do is to prepare a CSV file with the 100 emails. Upload it to Dify's Batch Run feature. Dify processes all 100 emails automatically and gives you back a spreadsheet with all the generated replies.
+
+ Since we set specific variables (like `email_content`), your CSV must match that format. Dify provides a template you can download to make this easy.
+
+
+ 
+
+ 3. **Others**
+ - **Access API Reference**: If you know coding, you can get an API Key to integrate this workflow directly into your own website or mobile app
+ - **Open in Explore**: Pin this app to your workspace sidebar for quick access next time
+ - **Publish as a Tool**: Package your workflow as a plugin so other Agents can use your Email Assistant as a tool
+
+## Monitor Your App
+
+As the creator, you need to understand the status of this assistant. By monitoring and using logs, you can check the health, performance, and costs.
+
+### The Command Center: Monitoring
+
+Click **Monitoring** on the left sidebar to see how your app is performing.
+
+| Name | Explanation |
+| :--------------------- | :----------------------------------------------------------------------------------- |
+| Total Messages | How many times users interacted with the AI today. It shows how popular your app is. |
+| Active Users | The number of unique people engaging with the AI. |
+| Token Usage | How much tokens the AI used. Watch for sudden spikes to control costs. |
+| Avg. User Interactions | Do the users ask follow-up questions? |
+
+### The Magnifying Glass: Logs
+
+Logs record the details of every single run: time, input, duration, and output. To access detailed records, click Logs in the left sidebar.
+
+**Why Logs?**
+
+- **Debugging**: User says *It doesn't work*? Check the logs to replay the *crime scene* and see exactly which node failed.
+- **Performance**: See how long each node took. Find the blocker that is slowing things down.
+- **Understand Users**: Read what users are actually asking. Use this real data to update your Knowledge Base or improve your Prompts.
+- **Cost Control**: Check exactly how many tokens a specific run cost.
+
+| Name | Explanation |
+| :------------------ | :---------------------------------------------------------- |
+| Start Time | The time when the workflow was triggered |
+| Status | Success or Failure. |
+| Run Time | How long the whole process took. |
+| Tokens | The tokens consumed by this run. |
+| End User or Account | The specific user ID or account that initiated the session. |
+| Triggered By | WebApp interface or called via API. |
+
+You can click on each log entry to view more details. For example, you can identify frequently asked user questions and use them to timely update and modify your Knowledge Base.
+
+Building AI app is a new starting point, and this is the core of **LLMOps** (Large language model operations).
+
+1. **Observe**: Look at the Logs. What are users asking? Are they happy with the answers?
+2. **Analyze**: Hallucination happens on certain questions or some tools run out often
+3. **Optimize**: Go back to the Canvas. Edit the Prompt, add a document to the Knowledge Base, or tweak the workflow logic
+4. **Publish**: Release the upgraded version
+
+By repeating this cycle, your Email Assistant gets smarter and faster.
+
+## Thank You
+
+**Thank you for your time and you're now a Dify builder with a new way of thinking:**
+
+```plaintext wrap
+Break down the task → Choose Nodes and Tools → Connect them with the right logic → Monitor and upgrade
+```
+
+Now, feel free to open a template in Dify explore. Break it down, analyze it, or start building a workflow that solves a task in your daily work from the scratch.
+
+May your workload get lighter and your imagination goes higher. Happy building with Dify.
\ No newline at end of file
diff --git a/images/difyworkflow101-lesson01-explore.png b/images/difyworkflow101-lesson01-explore.png
new file mode 100644
index 00000000..ff2ec173
Binary files /dev/null and b/images/difyworkflow101-lesson01-explore.png differ
diff --git a/images/difyworkflow101-lesson01-workflowexample.png b/images/difyworkflow101-lesson01-workflowexample.png
new file mode 100644
index 00000000..1c5c8d90
Binary files /dev/null and b/images/difyworkflow101-lesson01-workflowexample.png differ
diff --git a/images/difyworkflow101-lesson02-basicworkflow.png b/images/difyworkflow101-lesson02-basicworkflow.png
new file mode 100644
index 00000000..bd05237c
Binary files /dev/null and b/images/difyworkflow101-lesson02-basicworkflow.png differ
diff --git a/images/difyworkflow101-lesson02-createendnode.png b/images/difyworkflow101-lesson02-createendnode.png
new file mode 100644
index 00000000..796f96d9
Binary files /dev/null and b/images/difyworkflow101-lesson02-createendnode.png differ
diff --git a/images/difyworkflow101-lesson02-createworkflow.png b/images/difyworkflow101-lesson02-createworkflow.png
new file mode 100644
index 00000000..fc82e227
Binary files /dev/null and b/images/difyworkflow101-lesson02-createworkflow.png differ
diff --git a/images/difyworkflow101-lesson02-creatingtheapp.png b/images/difyworkflow101-lesson02-creatingtheapp.png
new file mode 100644
index 00000000..b26dc7ee
Binary files /dev/null and b/images/difyworkflow101-lesson02-creatingtheapp.png differ
diff --git a/images/difyworkflow101-lesson02-inputfield.png b/images/difyworkflow101-lesson02-inputfield.png
new file mode 100644
index 00000000..602faa17
Binary files /dev/null and b/images/difyworkflow101-lesson02-inputfield.png differ
diff --git a/images/difyworkflow101-lesson02-orchestrationstudio.png b/images/difyworkflow101-lesson02-orchestrationstudio.png
new file mode 100644
index 00000000..64ca81bc
Binary files /dev/null and b/images/difyworkflow101-lesson02-orchestrationstudio.png differ
diff --git a/images/difyworkflow101-lesson02-output.png b/images/difyworkflow101-lesson02-output.png
new file mode 100644
index 00000000..6524f123
Binary files /dev/null and b/images/difyworkflow101-lesson02-output.png differ
diff --git a/images/difyworkflow101-lesson02-startnode.png b/images/difyworkflow101-lesson02-startnode.png
new file mode 100644
index 00000000..3d4b9551
Binary files /dev/null and b/images/difyworkflow101-lesson02-startnode.png differ
diff --git a/images/difyworkflow101-lesson02-trigger.png b/images/difyworkflow101-lesson02-trigger.png
new file mode 100644
index 00000000..22833ad6
Binary files /dev/null and b/images/difyworkflow101-lesson02-trigger.png differ
diff --git a/images/difyworkflow101-lesson02-variable1.png b/images/difyworkflow101-lesson02-variable1.png
new file mode 100644
index 00000000..a5569d83
Binary files /dev/null and b/images/difyworkflow101-lesson02-variable1.png differ
diff --git a/images/difyworkflow101-lesson02-variable2.png b/images/difyworkflow101-lesson02-variable2.png
new file mode 100644
index 00000000..ed0f7e4e
Binary files /dev/null and b/images/difyworkflow101-lesson02-variable2.png differ
diff --git a/images/difyworkflow101-lesson03-addthenode.png b/images/difyworkflow101-lesson03-addthenode.png
new file mode 100644
index 00000000..bd26320a
Binary files /dev/null and b/images/difyworkflow101-lesson03-addthenode.png differ
diff --git a/images/difyworkflow101-lesson03-addusermessage.png b/images/difyworkflow101-lesson03-addusermessage.png
new file mode 100644
index 00000000..b2b87b86
Binary files /dev/null and b/images/difyworkflow101-lesson03-addusermessage.png differ
diff --git a/images/difyworkflow101-lesson03-checklist.png b/images/difyworkflow101-lesson03-checklist.png
new file mode 100644
index 00000000..d0978ec2
Binary files /dev/null and b/images/difyworkflow101-lesson03-checklist.png differ
diff --git a/images/difyworkflow101-lesson03-connectthenodes.png b/images/difyworkflow101-lesson03-connectthenodes.png
new file mode 100644
index 00000000..750df497
Binary files /dev/null and b/images/difyworkflow101-lesson03-connectthenodes.png differ
diff --git a/images/difyworkflow101-lesson03-finalprompt.png b/images/difyworkflow101-lesson03-finalprompt.png
new file mode 100644
index 00000000..27faa8ae
Binary files /dev/null and b/images/difyworkflow101-lesson03-finalprompt.png differ
diff --git a/images/difyworkflow101-lesson03-fixtheissue.png b/images/difyworkflow101-lesson03-fixtheissue.png
new file mode 100644
index 00000000..fde468b0
Binary files /dev/null and b/images/difyworkflow101-lesson03-fixtheissue.png differ
diff --git a/images/difyworkflow101-lesson03-install.png b/images/difyworkflow101-lesson03-install.png
new file mode 100644
index 00000000..f07092ec
Binary files /dev/null and b/images/difyworkflow101-lesson03-install.png differ
diff --git a/images/difyworkflow101-lesson03-llmnode-1.png b/images/difyworkflow101-lesson03-llmnode-1.png
new file mode 100644
index 00000000..a4cc2e83
Binary files /dev/null and b/images/difyworkflow101-lesson03-llmnode-1.png differ
diff --git a/images/difyworkflow101-lesson03-llmnode-2.png b/images/difyworkflow101-lesson03-llmnode-2.png
new file mode 100644
index 00000000..7c4e5ffa
Binary files /dev/null and b/images/difyworkflow101-lesson03-llmnode-2.png differ
diff --git a/images/difyworkflow101-lesson03-llmnode.png b/images/difyworkflow101-lesson03-llmnode.png
new file mode 100644
index 00000000..bb1f01bf
Binary files /dev/null and b/images/difyworkflow101-lesson03-llmnode.png differ
diff --git a/images/difyworkflow101-lesson03-prompt.png b/images/difyworkflow101-lesson03-prompt.png
new file mode 100644
index 00000000..4ead9de0
Binary files /dev/null and b/images/difyworkflow101-lesson03-prompt.png differ
diff --git a/images/difyworkflow101-lesson03-promptgenerator.png b/images/difyworkflow101-lesson03-promptgenerator.png
new file mode 100644
index 00000000..2f3234d4
Binary files /dev/null and b/images/difyworkflow101-lesson03-promptgenerator.png differ
diff --git a/images/difyworkflow101-lesson03-testrun.png b/images/difyworkflow101-lesson03-testrun.png
new file mode 100644
index 00000000..b1e1c803
Binary files /dev/null and b/images/difyworkflow101-lesson03-testrun.png differ
diff --git a/images/difyworkflow101-lesson04-addcontext.png b/images/difyworkflow101-lesson04-addcontext.png
new file mode 100644
index 00000000..6404ee8e
Binary files /dev/null and b/images/difyworkflow101-lesson04-addcontext.png differ
diff --git a/images/difyworkflow101-lesson04-addknowledge.png b/images/difyworkflow101-lesson04-addknowledge.png
new file mode 100644
index 00000000..2a14aa9f
Binary files /dev/null and b/images/difyworkflow101-lesson04-addknowledge.png differ
diff --git a/images/difyworkflow101-lesson04-addknowledgetrievalnode.png b/images/difyworkflow101-lesson04-addknowledgetrievalnode.png
new file mode 100644
index 00000000..79491a62
Binary files /dev/null and b/images/difyworkflow101-lesson04-addknowledgetrievalnode.png differ
diff --git a/images/difyworkflow101-lesson04-chunkstructure.png b/images/difyworkflow101-lesson04-chunkstructure.png
new file mode 100644
index 00000000..6475ce13
Binary files /dev/null and b/images/difyworkflow101-lesson04-chunkstructure.png differ
diff --git a/images/difyworkflow101-lesson04-createknowledge.png b/images/difyworkflow101-lesson04-createknowledge.png
new file mode 100644
index 00000000..2fadf93d
Binary files /dev/null and b/images/difyworkflow101-lesson04-createknowledge.png differ
diff --git a/images/difyworkflow101-lesson04-documentprocessing.png b/images/difyworkflow101-lesson04-documentprocessing.png
new file mode 100644
index 00000000..5b0a3f1f
Binary files /dev/null and b/images/difyworkflow101-lesson04-documentprocessing.png differ
diff --git a/images/difyworkflow101-lesson04-importfromfile.png b/images/difyworkflow101-lesson04-importfromfile.png
new file mode 100644
index 00000000..0fc3dd4e
Binary files /dev/null and b/images/difyworkflow101-lesson04-importfromfile.png differ
diff --git a/images/difyworkflow101-lesson04-indexmethod.png b/images/difyworkflow101-lesson04-indexmethod.png
new file mode 100644
index 00000000..b81f6ba4
Binary files /dev/null and b/images/difyworkflow101-lesson04-indexmethod.png differ
diff --git a/images/difyworkflow101-lesson04-querytext.png b/images/difyworkflow101-lesson04-querytext.png
new file mode 100644
index 00000000..9a30d983
Binary files /dev/null and b/images/difyworkflow101-lesson04-querytext.png differ
diff --git a/images/difyworkflow101-lesson04-retrievalsetting.png b/images/difyworkflow101-lesson04-retrievalsetting.png
new file mode 100644
index 00000000..e24843cf
Binary files /dev/null and b/images/difyworkflow101-lesson04-retrievalsetting.png differ
diff --git a/images/difyworkflow101-lesson04-selectknowledge.png b/images/difyworkflow101-lesson04-selectknowledge.png
new file mode 100644
index 00000000..403a1b1e
Binary files /dev/null and b/images/difyworkflow101-lesson04-selectknowledge.png differ
diff --git a/images/difyworkflow101-lesson04-testresult.png b/images/difyworkflow101-lesson04-testresult.png
new file mode 100644
index 00000000..06ac9203
Binary files /dev/null and b/images/difyworkflow101-lesson04-testresult.png differ
diff --git a/images/difyworkflow101-lesson04-updateprompt.png b/images/difyworkflow101-lesson04-updateprompt.png
new file mode 100644
index 00000000..47b365ed
Binary files /dev/null and b/images/difyworkflow101-lesson04-updateprompt.png differ
diff --git a/images/difyworkflow101-lesson05-addvariableaggregator.png b/images/difyworkflow101-lesson05-addvariableaggregator.png
new file mode 100644
index 00000000..da7e84b9
Binary files /dev/null and b/images/difyworkflow101-lesson05-addvariableaggregator.png differ
diff --git a/images/difyworkflow101-lesson05-assignvariable.png b/images/difyworkflow101-lesson05-assignvariable.png
new file mode 100644
index 00000000..7d6cd9cb
Binary files /dev/null and b/images/difyworkflow101-lesson05-assignvariable.png differ
diff --git a/images/difyworkflow101-lesson05-connectifbranch.png b/images/difyworkflow101-lesson05-connectifbranch.png
new file mode 100644
index 00000000..fa576829
Binary files /dev/null and b/images/difyworkflow101-lesson05-connectifbranch.png differ
diff --git a/images/difyworkflow101-lesson05-finalpromptforllm2.png b/images/difyworkflow101-lesson05-finalpromptforllm2.png
new file mode 100644
index 00000000..12f0d63d
Binary files /dev/null and b/images/difyworkflow101-lesson05-finalpromptforllm2.png differ
diff --git a/images/difyworkflow101-lesson05-finalworkflow.png b/images/difyworkflow101-lesson05-finalworkflow.png
new file mode 100644
index 00000000..8a8ac851
Binary files /dev/null and b/images/difyworkflow101-lesson05-finalworkflow.png differ
diff --git a/images/difyworkflow101-lesson05-ifelsenode.png b/images/difyworkflow101-lesson05-ifelsenode.png
new file mode 100644
index 00000000..640d418b
Binary files /dev/null and b/images/difyworkflow101-lesson05-ifelsenode.png differ
diff --git a/images/difyworkflow101-lesson05-promptforllm2-1.png b/images/difyworkflow101-lesson05-promptforllm2-1.png
new file mode 100644
index 00000000..21255743
Binary files /dev/null and b/images/difyworkflow101-lesson05-promptforllm2-1.png differ
diff --git a/images/difyworkflow101-lesson05-promptforllm2-2.png b/images/difyworkflow101-lesson05-promptforllm2-2.png
new file mode 100644
index 00000000..21255743
Binary files /dev/null and b/images/difyworkflow101-lesson05-promptforllm2-2.png differ
diff --git a/images/difyworkflow101-lesson05-settings1.png b/images/difyworkflow101-lesson05-settings1.png
new file mode 100644
index 00000000..f872f22b
Binary files /dev/null and b/images/difyworkflow101-lesson05-settings1.png differ
diff --git a/images/difyworkflow101-lesson05-settings2.png b/images/difyworkflow101-lesson05-settings2.png
new file mode 100644
index 00000000..c6813fba
Binary files /dev/null and b/images/difyworkflow101-lesson05-settings2.png differ
diff --git a/images/difyworkflow101-lesson05-updateoutputvariable.png b/images/difyworkflow101-lesson05-updateoutputvariable.png
new file mode 100644
index 00000000..522910fc
Binary files /dev/null and b/images/difyworkflow101-lesson05-updateoutputvariable.png differ
diff --git a/images/difyworkflow101-lesson05-variableaggregator.png b/images/difyworkflow101-lesson05-variableaggregator.png
new file mode 100644
index 00000000..da4541bb
Binary files /dev/null and b/images/difyworkflow101-lesson05-variableaggregator.png differ
diff --git a/images/difyworkflow101-lesson06-addextractparameter.png b/images/difyworkflow101-lesson06-addextractparameter.png
new file mode 100644
index 00000000..1231a46f
Binary files /dev/null and b/images/difyworkflow101-lesson06-addextractparameter.png differ
diff --git a/images/difyworkflow101-lesson06-addfinalllmnode.png b/images/difyworkflow101-lesson06-addfinalllmnode.png
new file mode 100644
index 00000000..286faebd
Binary files /dev/null and b/images/difyworkflow101-lesson06-addfinalllmnode.png differ
diff --git a/images/difyworkflow101-lesson06-additeration.png b/images/difyworkflow101-lesson06-additeration.png
new file mode 100644
index 00000000..64510698
Binary files /dev/null and b/images/difyworkflow101-lesson06-additeration.png differ
diff --git a/images/difyworkflow101-lesson06-addllmandprompt.png b/images/difyworkflow101-lesson06-addllmandprompt.png
new file mode 100644
index 00000000..f0cf33aa
Binary files /dev/null and b/images/difyworkflow101-lesson06-addllmandprompt.png differ
diff --git a/images/difyworkflow101-lesson06-addparameterextractor.png b/images/difyworkflow101-lesson06-addparameterextractor.png
new file mode 100644
index 00000000..e0c904e5
Binary files /dev/null and b/images/difyworkflow101-lesson06-addparameterextractor.png differ
diff --git a/images/difyworkflow101-lesson06-advancediterationoptions.png b/images/difyworkflow101-lesson06-advancediterationoptions.png
new file mode 100644
index 00000000..07f8309c
Binary files /dev/null and b/images/difyworkflow101-lesson06-advancediterationoptions.png differ
diff --git a/images/difyworkflow101-lesson06-finishaddextractparameter.png b/images/difyworkflow101-lesson06-finishaddextractparameter.png
new file mode 100644
index 00000000..0d4c2273
Binary files /dev/null and b/images/difyworkflow101-lesson06-finishaddextractparameter.png differ
diff --git a/images/difyworkflow101-lesson06-iteration.png b/images/difyworkflow101-lesson06-iteration.png
new file mode 100644
index 00000000..c37b81fc
Binary files /dev/null and b/images/difyworkflow101-lesson06-iteration.png differ
diff --git a/images/difyworkflow101-lesson06-knowledgeretrievalquerytext.png b/images/difyworkflow101-lesson06-knowledgeretrievalquerytext.png
new file mode 100644
index 00000000..64f9dfd4
Binary files /dev/null and b/images/difyworkflow101-lesson06-knowledgeretrievalquerytext.png differ
diff --git a/images/difyworkflow101-lesson06-outputvariable.png b/images/difyworkflow101-lesson06-outputvariable.png
new file mode 100644
index 00000000..17263fa7
Binary files /dev/null and b/images/difyworkflow101-lesson06-outputvariable.png differ
diff --git a/images/difyworkflow101-lesson06-parameterextractor.png b/images/difyworkflow101-lesson06-parameterextractor.png
new file mode 100644
index 00000000..448b15ae
Binary files /dev/null and b/images/difyworkflow101-lesson06-parameterextractor.png differ
diff --git a/images/difyworkflow101-lesson06-setiterationoutput.png b/images/difyworkflow101-lesson06-setiterationoutput.png
new file mode 100644
index 00000000..e71a9f94
Binary files /dev/null and b/images/difyworkflow101-lesson06-setiterationoutput.png differ
diff --git a/images/difyworkflow101-lesson06-settheinput.png b/images/difyworkflow101-lesson06-settheinput.png
new file mode 100644
index 00000000..4b8c138f
Binary files /dev/null and b/images/difyworkflow101-lesson06-settheinput.png differ
diff --git a/images/difyworkflow101-lesson07-addifelsenode.png b/images/difyworkflow101-lesson07-addifelsenode.png
new file mode 100644
index 00000000..1a47adac
Binary files /dev/null and b/images/difyworkflow101-lesson07-addifelsenode.png differ
diff --git a/images/difyworkflow101-lesson07-addquerystring.png b/images/difyworkflow101-lesson07-addquerystring.png
new file mode 100644
index 00000000..32501248
Binary files /dev/null and b/images/difyworkflow101-lesson07-addquerystring.png differ
diff --git a/images/difyworkflow101-lesson07-addtools.png b/images/difyworkflow101-lesson07-addtools.png
new file mode 100644
index 00000000..571bafd5
Binary files /dev/null and b/images/difyworkflow101-lesson07-addtools.png differ
diff --git a/images/difyworkflow101-lesson07-apikeyauthorizationconfiguration.png b/images/difyworkflow101-lesson07-apikeyauthorizationconfiguration.png
new file mode 100644
index 00000000..1781d9e0
Binary files /dev/null and b/images/difyworkflow101-lesson07-apikeyauthorizationconfiguration.png differ
diff --git a/images/difyworkflow101-lesson07-finalworkflowpreview.png b/images/difyworkflow101-lesson07-finalworkflowpreview.png
new file mode 100644
index 00000000..ee06040d
Binary files /dev/null and b/images/difyworkflow101-lesson07-finalworkflowpreview.png differ
diff --git a/images/difyworkflow101-lesson07-googlesearchsetup.png b/images/difyworkflow101-lesson07-googlesearchsetup.png
new file mode 100644
index 00000000..5d1174dd
Binary files /dev/null and b/images/difyworkflow101-lesson07-googlesearchsetup.png differ
diff --git a/images/difyworkflow101-lesson07-installgooglesearch.png b/images/difyworkflow101-lesson07-installgooglesearch.png
new file mode 100644
index 00000000..758157ca
Binary files /dev/null and b/images/difyworkflow101-lesson07-installgooglesearch.png differ
diff --git a/images/difyworkflow101-lesson07-iterationoutput.png b/images/difyworkflow101-lesson07-iterationoutput.png
new file mode 100644
index 00000000..93f9cbd2
Binary files /dev/null and b/images/difyworkflow101-lesson07-iterationoutput.png differ
diff --git a/images/difyworkflow101-lesson07-llm2prompt.png b/images/difyworkflow101-lesson07-llm2prompt.png
new file mode 100644
index 00000000..74a1d803
Binary files /dev/null and b/images/difyworkflow101-lesson07-llm2prompt.png differ
diff --git a/images/difyworkflow101-lesson07-llmsettings.png b/images/difyworkflow101-lesson07-llmsettings.png
new file mode 100644
index 00000000..27411b82
Binary files /dev/null and b/images/difyworkflow101-lesson07-llmsettings.png differ
diff --git a/images/difyworkflow101-lesson07-outputsetup.png b/images/difyworkflow101-lesson07-outputsetup.png
new file mode 100644
index 00000000..e926fa12
Binary files /dev/null and b/images/difyworkflow101-lesson07-outputsetup.png differ
diff --git a/images/difyworkflow101-lesson07-promptforllm4.png b/images/difyworkflow101-lesson07-promptforllm4.png
new file mode 100644
index 00000000..adae5289
Binary files /dev/null and b/images/difyworkflow101-lesson07-promptforllm4.png differ
diff --git a/images/difyworkflow101-lesson07-promptllm3.png b/images/difyworkflow101-lesson07-promptllm3.png
new file mode 100644
index 00000000..ccd336f8
Binary files /dev/null and b/images/difyworkflow101-lesson07-promptllm3.png differ
diff --git a/images/difyworkflow101-lesson07-tools.png b/images/difyworkflow101-lesson07-tools.png
new file mode 100644
index 00000000..c9123bbc
Binary files /dev/null and b/images/difyworkflow101-lesson07-tools.png differ
diff --git a/images/difyworkflow101-lesson07-variableaggregatorsetup.png b/images/difyworkflow101-lesson07-variableaggregatorsetup.png
new file mode 100644
index 00000000..88edbb12
Binary files /dev/null and b/images/difyworkflow101-lesson07-variableaggregatorsetup.png differ
diff --git a/images/difyworkflow101-lesson07-workflowpreview1.png b/images/difyworkflow101-lesson07-workflowpreview1.png
new file mode 100644
index 00000000..43df334b
Binary files /dev/null and b/images/difyworkflow101-lesson07-workflowpreview1.png differ
diff --git a/images/difyworkflow101-lesson07-workflowpreview2.png b/images/difyworkflow101-lesson07-workflowpreview2.png
new file mode 100644
index 00000000..0a8f8580
Binary files /dev/null and b/images/difyworkflow101-lesson07-workflowpreview2.png differ
diff --git a/images/difyworkflow101-lesson08-addagentnode.png b/images/difyworkflow101-lesson08-addagentnode.png
new file mode 100644
index 00000000..c93f243d
Binary files /dev/null and b/images/difyworkflow101-lesson08-addagentnode.png differ
diff --git a/images/difyworkflow101-lesson08-addinstructions.png b/images/difyworkflow101-lesson08-addinstructions.png
new file mode 100644
index 00000000..d50923bd
Binary files /dev/null and b/images/difyworkflow101-lesson08-addinstructions.png differ
diff --git a/images/difyworkflow101-lesson08-addoutputnode.png b/images/difyworkflow101-lesson08-addoutputnode.png
new file mode 100644
index 00000000..7969c3c1
Binary files /dev/null and b/images/difyworkflow101-lesson08-addoutputnode.png differ
diff --git a/images/difyworkflow101-lesson08-addtool.png b/images/difyworkflow101-lesson08-addtool.png
new file mode 100644
index 00000000..096e508b
Binary files /dev/null and b/images/difyworkflow101-lesson08-addtool.png differ
diff --git a/images/difyworkflow101-lesson08-chooseagentnode.png b/images/difyworkflow101-lesson08-chooseagentnode.png
new file mode 100644
index 00000000..a94a6d57
Binary files /dev/null and b/images/difyworkflow101-lesson08-chooseagentnode.png differ
diff --git a/images/difyworkflow101-lesson08-chooseamodel.png b/images/difyworkflow101-lesson08-chooseamodel.png
new file mode 100644
index 00000000..6faf5636
Binary files /dev/null and b/images/difyworkflow101-lesson08-chooseamodel.png differ
diff --git a/images/difyworkflow101-lesson08-contextandquery.png b/images/difyworkflow101-lesson08-contextandquery.png
new file mode 100644
index 00000000..f3bb4393
Binary files /dev/null and b/images/difyworkflow101-lesson08-contextandquery.png differ
diff --git a/images/difyworkflow101-lesson08-finalllm.png b/images/difyworkflow101-lesson08-finalllm.png
new file mode 100644
index 00000000..0735d736
Binary files /dev/null and b/images/difyworkflow101-lesson08-finalllm.png differ
diff --git a/images/difyworkflow101-lesson08-finalworkflow.png b/images/difyworkflow101-lesson08-finalworkflow.png
new file mode 100644
index 00000000..4bef6c1a
Binary files /dev/null and b/images/difyworkflow101-lesson08-finalworkflow.png differ
diff --git a/images/difyworkflow101-lesson08-iteration.png b/images/difyworkflow101-lesson08-iteration.png
new file mode 100644
index 00000000..ccf6b642
Binary files /dev/null and b/images/difyworkflow101-lesson08-iteration.png differ
diff --git a/images/difyworkflow101-lesson08-iterationoutput.png b/images/difyworkflow101-lesson08-iterationoutput.png
new file mode 100644
index 00000000..be837169
Binary files /dev/null and b/images/difyworkflow101-lesson08-iterationoutput.png differ
diff --git a/images/difyworkflow101-lesson08-searchagentstrategy.png b/images/difyworkflow101-lesson08-searchagentstrategy.png
new file mode 100644
index 00000000..0ca8ee1a
Binary files /dev/null and b/images/difyworkflow101-lesson08-searchagentstrategy.png differ
diff --git a/images/difyworkflow101-lesson08-selectreact.png b/images/difyworkflow101-lesson08-selectreact.png
new file mode 100644
index 00000000..00549c2c
Binary files /dev/null and b/images/difyworkflow101-lesson08-selectreact.png differ
diff --git a/images/difyworkflow101-lesson09-addtemplatenode.png b/images/difyworkflow101-lesson09-addtemplatenode.png
new file mode 100644
index 00000000..a1ec4048
Binary files /dev/null and b/images/difyworkflow101-lesson09-addtemplatenode.png differ
diff --git a/images/difyworkflow101-lesson09-editllmnode.png b/images/difyworkflow101-lesson09-editllmnode.png
new file mode 100644
index 00000000..a98a9fa6
Binary files /dev/null and b/images/difyworkflow101-lesson09-editllmnode.png differ
diff --git a/images/difyworkflow101-lesson09-templateinputvariable.png b/images/difyworkflow101-lesson09-templateinputvariable.png
new file mode 100644
index 00000000..c05b51dd
Binary files /dev/null and b/images/difyworkflow101-lesson09-templateinputvariable.png differ
diff --git a/images/difyworkflow101-lesson09-thefinalworkflow.png b/images/difyworkflow101-lesson09-thefinalworkflow.png
new file mode 100644
index 00000000..32af8c1a
Binary files /dev/null and b/images/difyworkflow101-lesson09-thefinalworkflow.png differ
diff --git a/images/difyworkflow101-lesson10-downloadtemplate.png b/images/difyworkflow101-lesson10-downloadtemplate.png
new file mode 100644
index 00000000..1c95f064
Binary files /dev/null and b/images/difyworkflow101-lesson10-downloadtemplate.png differ
diff --git a/images/difyworkflow101-lesson10-publish.png b/images/difyworkflow101-lesson10-publish.png
new file mode 100644
index 00000000..c43cdf0d
Binary files /dev/null and b/images/difyworkflow101-lesson10-publish.png differ
diff --git a/images/difyworkflow101-lesson10-webapp.png b/images/difyworkflow101-lesson10-webapp.png
new file mode 100644
index 00000000..f3c21fd7
Binary files /dev/null and b/images/difyworkflow101-lesson10-webapp.png differ
diff --git a/images/image-1.png b/images/image-1.png
new file mode 100644
index 00000000..6e16fa5d
Binary files /dev/null and b/images/image-1.png differ
diff --git a/images/image-2.png b/images/image-2.png
new file mode 100644
index 00000000..ead62a8d
Binary files /dev/null and b/images/image-2.png differ
diff --git a/images/image-3.png b/images/image-3.png
new file mode 100644
index 00000000..c441c952
Binary files /dev/null and b/images/image-3.png differ
diff --git a/ja/use-dify/tutorials/workflow-101/lesson-01.mdx b/ja/use-dify/tutorials/workflow-101/lesson-01.mdx
new file mode 100644
index 00000000..7164d580
--- /dev/null
+++ b/ja/use-dify/tutorials/workflow-101/lesson-01.mdx
@@ -0,0 +1,51 @@
+---
+title: "レッスン 1:ワークフローとは?"
+---
+
+ ⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/use-dify/tutorials/workflow-101/lesson-01)を参照してください。
+
+## 👋 Dify 101 へようこそ
+
+このコースでは、ゼロからヒーローへとステップアップしていきます。コースの最後には、高度な AI メールアシスタントを自分の手で構築できるようになります。
+
+まずはコーディングの話から少し離れて、料理の話をしましょう。
+
+今まで作ったことのない料理に挑戦するとします。そのためには**レシピ**が必要ですよね。レシピはまさにワークフローそのものです!何を、どの順番で行えば目的の料理が完成するかを教えてくれます。
+
+## ワークフローを知ろう
+
+Dify では、あなたが AI のためにレシピを書くシェフです。必要なものは以下の 3 つです。
+
+1. 入力(材料):AI に与える情報です。ユーザーの質問、PDF ドキュメント、下書き段階のメールなどが該当します。
+2. 処理(手順):AI に実行させるステップです。例えば、「まずこのテキストを要約する」「次にスペイン語に翻訳する」「最後に LinkedIn の投稿形式にフォーマットする」といった指示を出します。
+3. 出力(料理):AI が最終的に返してくれる結果です。
+
+まとめると、ワークフローとは AI に特定の順序でタスクを完了させるフローチャートです。
+
+以下は、スマート ID スキャナーのワークフローです。身分証明書の表面と裏面の情報を読み取り、テキストとして返すのが役割です。
+
+
+ 
+
+
+### ノード
+
+上のワークフローをもう少し詳しく見てみましょう。全体の処理は、**画像のアップロード、情報の抽出、結果の統合**という、いくつかのステップを繋げたものにすぎません。
+
+これらのステップの一つひとつを**ノード**と呼びます。
+
+リレー走のランナーのようなものだと考えてください。各ノードにはそれぞれの役割があり、自分の担当を終えたら次のノードにバトンを渡します。
+
+Dify には、LLM、ナレッジ検索、If/Else、ツールなど、すぐに使えるノードが揃っています。
+
+これらのノードをドラッグ&ドロップで繋ぐだけで、まるでレゴブロックを組み立てるように、強力な自動化ワークフローを簡単に構築できます。
+
+## やってみよう
+
+1. [Dify](https://dify.ai/) にアクセスし、右上の **Get Started** をクリックします。
+2. 「探索」をクリックします。ここには、さまざまなシナリオに対応したワークフローテンプレートが集められています。
+
+
+ 
+
+3. 気になるテンプレートを選んでみましょう。すべての設定を理解できなくても大丈夫です。ノードがどのように繋がっているかを見てみてください。
diff --git a/ja/use-dify/tutorials/workflow-101/lesson-02.mdx b/ja/use-dify/tutorials/workflow-101/lesson-02.mdx
new file mode 100644
index 00000000..5d2e73a4
--- /dev/null
+++ b/ja/use-dify/tutorials/workflow-101/lesson-02.mdx
@@ -0,0 +1,170 @@
+---
+title: "レッスン 2:フローの頭と尾(開始ノードと出力ノード)"
+sidebarTitle: "レッスン 2:フローの頭と尾"
+---
+
+ ⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/use-dify/tutorials/workflow-101/lesson-02)を参照してください。
+
+前回のレッスンでは、ワークフローをレシピに例えました。今日は実際にキッチンに入り、材料の下ごしらえ(開始)とお皿の準備(出力)をしていきましょう。
+
+## アプリを作成する
+
+
+
+ 画面上部の**スタジオ**をクリックします。左側のアプリ作成メニューから、**空白から作成**をクリックします。
+
+
+ 
+
+
+
+ アプリタイプとして**ワークフロー**を選択し、**アプリ名とアイコン**を入力して、**作成**をクリックします。
+
+
+ 
+
+
+
+ ポップアップウィンドウが表示されます。ここには、アプリの実行方法を決める2つのオプションがあります。
+
+ - **ユーザー入力**
+
+ これは**手動モード**です。あなた(ユーザー)がチャットボックスに何かを入力したときにのみ、ワークフローが動き始めます。
+
+ 適した用途:ほとんどのAIアプリ。例えば、チャットボット、文章作成アシスタント、翻訳など。
+ - **トリガー**
+
+ これは**自動モード**です。特定のシグナル(毎朝8時、特定のイベントなど)に基づいて自動的に実行されます。
+
+ 適した用途:特定の時間に繰り返し実行するタスクや、別のタスクが完了した後にこのワークフローを実行する場合。例えば、毎日のニュースまとめなど。
+
+
+ 
+
+
+
+
+## オーケストレーションキャンバスを知ろう
+
+開始ノードを選択すると、大きな空白のエリアが表示されます。これがオーケストレーションキャンバスです。ここでワークフローを設計し、構築し、テストしていきます。
+
+
+ 
+
+
+レッスン1で学んだノードを覚えていますか?今キャンバスに表示されているユーザー入力ノードが、すべての出発点です。
+
+すべての完全なワークフローは、基本的な骨格に支えられています。それが開始ノード(頭)と出力ノード(尾)です。
+
+## 開始ノード
+
+
+ 
+
+
+開始ノードは、ワークフロー全体の唯一の入口です。料理でいう*材料の下ごしらえ*のステップのようなものです。ワークフローが動き始めるために、ユーザーからどんな情報を受け取る必要があるかを定義する役割を持っています。
+
+先ほど、**ユーザー入力**を開始ノードとして選択しました。
+
+### コアコンセプト:変数
+
+開始ノードの中に、**変数**という言葉が出てきます。難しく考えなくて大丈夫です!変数とは、**ラベルが貼られた収納ボックス**のようなものです。
+
+それぞれのボックスは、特定の種類の情報を入れるために用意されています。
+
+例えば、旅行プランナーを作る場合、ユーザーに `Destination`(目的地)と `Travel Days`(旅行日数)の2つの情報を提供してもらう必要があります。
+
+ユーザーAは日本に5日間行きたいかもしれません。ユーザーBはパリに3日間行きたいかもしれません。
+
+ユーザーごとに入力する内容は異なるので、アプリが実行されるたびに、これらの*ボックス*の中身は変わります。
+
+これが変数の意味です。ユーザーが埋めるための枠を用意しておくことで、ワークフローが毎回異なるリクエストに柔軟に対応できるようになります。
+
+## 終了ノード(出力)
+
+
+ 
+
+
+これはワークフローのゴールです。料理でいう*盛り付け*のステップで、最終的にユーザーが目にする結果を定義します。
+
+例えば、先ほどの旅行プランナーを思い出してください。ユーザーがユーザー入力ノードで目的地:パリ、期間:5日間と入力した場合、出力ノードでシステムが最終結果を返します:「こちらがパリ5日間の旅行プランです。」
+
+まとめると、開始ノードと終了ノードが基本的な入力と出力を定義し、アプリの骨格を形作ります。
+
+## ハンズオン実践:AIメールアシスタントを作ろう
+
+メール作成を手伝ってくれるAIアシスタントの基本的なフレームワークを構築しましょう。
+
+
+
+ 以下のどちらかを選べます:
+
+ - 先ほど開いたキャンバスでそのまま続ける
+ - スタジオに戻り、空白から作成 → ワークフローを選択して、*メールアシスタント*と名前を付ける(ポップアップで**ユーザー入力**を選択するのを忘れずに!)
+
+
+ AIにメールの返信を手伝ってもらうには、どんな情報を渡す必要があるでしょうか?
+
+ そうです。通常は、顧客の名前とメールの原文です。
+
+ 1. **開始**ノードをクリックします。右側のパネルで**入力フィールド**を探し、**\+** ボタンをクリックします。
+
+
+ 
+
+ 2. ポップアップで、2つの変数(2つの収納ボックス)を作成します:
+
+ **変数 1(顧客名用)**
+
+
+ 
+
+ - フィールドタイプ:テキスト(短文テキスト)
+ - 変数名:`customer_name`
+ - 表示名:顧客名
+ - その他のオプションはデフォルトのままにします
+
+ **変数 2(メール内容用)**
+
+
+ 
+
+ - フィールドタイプ:ドロップダウンをクリックして**段落**を選択します(メールは通常長いため、段落ボックスの方が大きく、より多くのテキストを入力できます)
+ - 変数名:`email_content`
+ - 表示名:メール原文
+ - 最大長:長いメールに対応できるよう、手動で **2000** に変更します
+
+
+ **変数名 vs 表示名**
+
+ 2つの名前を入力したことに気づいたかもしれません。それぞれの違いは何でしょうか?
+
+ - **変数名**:これはシステム用のIDです。一意であること、英字を使用すること、スペースを含まないことが必要です。
+ - **表示名**:これはユーザー向けのラベルです。日本語など、どの言語でも名前を付けることができます。画面上に表示されます。
+
+
+
+ キャンバスの空白部分を右クリックします。**ノードを追加**を選択し、一覧から**出力**を選択します。
+
+
+ 
+
+
+
+
+キャンバスの状態を確認しましょう。名前とメールを受け取る準備ができた**開始ノード**と、最終結果を送る**出力ノード**があります。
+
+
+ 
+
+
+ワークフローの基本フレームが完成しました。真ん中の空白スペースは、次のレッスンでLLM(AIの頭脳)ノードを配置して情報を処理する場所です。
+
+## ミニチャレンジ
+
+**課題**:旅行プラン生成器を作るとしたら、開始ノードにはどのような変数を含めるべきでしょうか?
+
+
+ **変数を追加**のフィールドタイプを探索してみてください。
+
diff --git a/ja/use-dify/tutorials/workflow-101/lesson-03.mdx b/ja/use-dify/tutorials/workflow-101/lesson-03.mdx
new file mode 100644
index 00000000..76b5e8a3
--- /dev/null
+++ b/ja/use-dify/tutorials/workflow-101/lesson-03.mdx
@@ -0,0 +1,262 @@
+---
+title: "レッスン 3:ワークフローの頭脳(LLM ノード)"
+sidebarTitle: "レッスン 3:ワークフローの頭脳"
+---
+
+ ⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/use-dify/tutorials/workflow-101/lesson-03)を参照してください。
+
+
+ 
+
+
+レッスン 2 では、材料(開始ノード)とお皿(出力ノード)を準備しました。
+
+開始ノードが下ごしらえ担当だとすれば、LLM ノードはまさに*シェフ長*です。ワークフローの頭脳であり、中核となる存在です。
+
+思考、分析、クリエイティブな文章作成など、あらゆる知的作業を担当します。記事の要約、コードの作成、メールの下書きなど、重要な処理はすべてこのノードが行います。
+
+## モデルの設定
+
+始める前に、モデルプロバイダーに接続する必要があります。
+
+
+
+ 右上のアバターをクリックし、**設定**を選択します。
+
+
+ 
+
+
+
+ 左側のメニューから**モデルプロバイダー**をクリックします。OpenAI を見つけて、**インストール**をクリックします。
+
+
+ 
+
+
+ 
+
+
+
+ インストールが完了したら、準備完了です。右上の **ESC**(または **X**)をクリックして、「キャンバス」に戻りましょう。
+
+
+
+## タグを理解する
+
+パティシエはケーキが得意でもお寿司は作れません。同じように、AI モデルにもそれぞれ得意分野があります。
+
+Dify でモデルを選択するとき、名前の横にタグが表示されます。適切なモデルを選ぶために、これらのタグの意味を理解しましょう。
+
+
+
+ AI の最も基本的な機能です。以下のようなタスクに最適です:
+
+ - 対話
+ - 記事の作成
+ - テキストの要約
+ - 質問への回答
+
+
+ この数値は**コンテキストウィンドウ**を表しています。短期記憶のようなものだと考えてください。
+
+ K は「千」を意味します。**128K** は、モデルが 128,000 トークン(おおよそ単語や音節に相当)を保持できることを意味します。この数値が大きいほど、記憶力が優れています。
+
+
+ 大量の PDF レポートや一冊の本全体を分析する必要がある場合は、この数値が大きいモデルが必要です。
+
+
+
+ 「モーダル」とは**情報の種類**を意味します。初期の AI モデルはテキストしか読めませんでしたが、マルチモーダルモデルは進化しており、目や耳のような*知覚*を備えています。
+
+ **VISION(目)**
+
+ このタグを持つモデルは、テキストを読むだけでなく、画像を見ることもできます。夕焼けの写真をアップロードして「*この写真にはどんな色がありますか?*」と質問したり、冷蔵庫の中身の写真をアップロードして「*これで何が作れますか?*」と尋ねたりできます。
+
+ **AUDIO(耳)**
+
+ このタグを持つモデルは、音声を聞くことができます。会議や講義の録音をアップロードすると、テキストに書き起こしたり、要約を作成したりできます。
+
+ **VIDEO(動画アナリスト)**
+
+ このモデルは動画コンテンツを視聴して理解できます。人間が映画を観るように、動画クリップの内容を分析できます。
+
+ **DOCUMENT(リーダー)**
+
+ このモデルは優秀な読み手です。テキストをコピー&ペーストする代わりに、ファイル(PDF や Word 文書など)をそのままアップロードできます。モデルがファイルを直接読み取り、書かれている内容に基づいて質問に回答します。
+
+
+
+今回のメールアシスタントには、**CHAT** タグが付いた LLM がまさに必要なものです。
+
+## 実践 1:LLM ノードを追加する
+
+ワークフローに頭脳を組み込みましょう。
+
+
+
+ レッスン 2 で作成した **AI メールアシスタント**ワークフローに戻ります。
+
+
+ 開始ノードと出力ノードの間の空白部分を右クリックし、新しい **LLM** ブロックをクリックします。右側のパネルで**モデル**を探し、**gpt-4o-mini** を選択します。
+
+
+ 
+
+
+
+ 開始ノードから LLM ノードへ線をドラッグします。次に LLM ノードから出力ノードへ線をドラッグします。フローは次のようになります:**開始 → LLM → 出力**。
+
+
+ 
+
+
+
+
+次に、LLM に具体的な指示を送る必要があります。これを**プロンプト**と呼びます。
+
+
+ 
+
+
+### 重要な概念:プロンプト(指示書)
+
+**プロンプトとは?** プロンプトは、注文票に添える具体的なメモのようなものです。AI に**何をすべきか**、**どのようにすべきか**を正確に伝えます。
+
+最も重要なポイントは、プロンプト内で開始ノードの**変数**を直接使用できることです。これにより、毎回異なる*材料*を提供するたびに、AI が出力を柔軟に変化させることができます。
+
+Dify では、`customer_name` のような変数をプロンプトに挿入すると、AI に「Customer Name というラベルの箱を見て、中に入っているテキストを使ってください」と指示していることになります。
+
+## 実践 2:プロンプトを書く
+
+では、実際にやってみましょう。指示と変数を組み合わせたプロンプトを作成します。
+
+
+
+ LLM ノードをクリックしてパネルを開き、**system** ボックスを見つけます。**System 指示**は、モデルがどのように応答すべきか(役割、トーン、行動のガイドライン)のルールを設定します。
+
+ まず、指示を書きましょう。以下のテキストをコピー&ペーストできます。
+
+ ```plaintext wrap
+ You are a professional customer service manager. Based on the customer's email, please draft a professional reply.
+ Requirements:
+ 1. Start by addressing the customer name with a friendly tone.
+ 2. Thank them for their email.
+ 3. Let them know we have received it.
+ 4. Sign off as Anne.
+ ```
+
+
+ ユーザーメッセージは、モデルに送信する内容です。質問、リクエスト、またはモデルに処理してほしいタスクを入力します。
+
+ このワークフローでは、顧客名とメール内容は毎回変わります。手動で入力する代わりに、ユーザーメッセージに変数を追加します。
+
+ 1. system ボックスの下にある **Add Message** ボタンをクリックします。
+ 2. User Message ボックスに **customer name:** と入力します。
+ 3. キーボードで `/` を押します。
+ 4. 変数選択メニューが表示されるので、`customer_name` をクリックします。
+ 5. Enter を押して改行し、**email content:** と入力します。再度 `/` キーを押して `email_content` をクリックします。
+
+
+ 
+
+
+ 波括弧を手動で入力する必要はありません。`/` を押して、メニューから変数を選ぶだけで OK です。
+
+ 4. 最終的なプロンプトは次のようになります:
+
+
+ 
+
+
+
+
+
+ **おめでとうございます!** Dify で初めての AI ワークフローが完成しました!
+
+
+## 実行とテスト
+
+材料は準備完了、シェフもスタンバイ、指示も整いました。しかし、料理の味はどうでしょうか?お客様に提供する前に、まずは味見をしてみましょう。
+
+テストは安定したワークフローを作るための秘訣です。本番稼働前に、見落としがちな小さな問題を見つけるのに役立ちます。
+
+### クイック概念:チェックリスト
+
+**チェックリスト**は、ワークフロー専属の*健康診断ドクター*だと考えてください。
+
+リアルタイムで作業を監視し、不完全な設定やミス(接続されていないノードなど)を自動的に検出します。
+
+**公開**ボタンを押す前にチェックリストを確認することが、不要なエラーを早期に発見する最善の方法です。
+
+### 実践 3:テストとデバッグ
+
+
+
+ 「キャンバス」の右上を見てください。**チェックリスト**アイコンに小さな数字 **1** が表示されていませんか? これは Dify が「*ちょっと待ってください!まだ 1 つ足りないところがあります。*」と教えてくれています。
+
+
+ 
+
+
+
+ クリックすると、**output variable is required(出力変数が必要です)**という警告が表示されます。出力ノードが何も受け取っていないことを意味しています。
+
+ シェフ長(LLM)が料理を完成させたのに、ウェイター(出力ノード)が手ぶらのままだと想像してください。
+
+
+ 1. **出力ノード**をクリックします。
+ 2. **Output Variable(出力変数)**を探し、横にある**プラス(+)**アイコンをクリックします。
+ 3. **Variable Name** フィールドに `email_reply` と入力します。
+ 4. 値を選択します:変数セレクターをクリックし、LLM ノードから `{x} text` を選択します。
+
+
+ 
+
+
+
+ チェックリストのポップアップ数字が消えました。テスト実行をしてみましょう。
+
+ 「キャンバス」の右上にある**テスト実行**をクリックします。顧客名とメール内容を入力し、**開始**をクリックします。
+
+
+ 
+
+
+
+ ```text テスト用サンプルメール
+ 顧客名:Amanda
+
+ メール原文:
+ Hi there,
+
+ I'm writing to ask for more information about Dify. Could you please tell me more on it?
+
+ Best regards,
+ Amanda
+ ```
+
+
+
+
+ 今度は、各ノードに緑のチェックマークが表示され、AI が生成した返信メールが確認できます。
+
+
+
+
+ **よくできました!**
+
+ ワークフローを構築しただけでなく、チェックリストの使い方や、公開前の確認方法も習得しました。
+
+
+## ミニチャレンジ
+
+同じ構造を使って、旅行プランナーを作ってみましょう。
+
+
+ **プロンプトジェネレーター**を活用して、より良いプロンプトを作成してみましょう!
+
+
+ 
+
+
\ No newline at end of file
diff --git a/ja/use-dify/tutorials/workflow-101/lesson-04.mdx b/ja/use-dify/tutorials/workflow-101/lesson-04.mdx
new file mode 100644
index 00000000..cf8e89aa
--- /dev/null
+++ b/ja/use-dify/tutorials/workflow-101/lesson-04.mdx
@@ -0,0 +1,209 @@
+---
+title: "レッスン 4:カンニングペーパー(ナレッジ検索)"
+sidebarTitle: "レッスン 4:カンニングペーパー"
+---
+
+ ⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/use-dify/tutorials/workflow-101/lesson-04)を参照してください。
+
+前回までのレッスンで、AI メールアシスタントは基本的なメールを作成できるようになりました。しかし、もし顧客が具体的な料金プランや返金ポリシーについて質問した場合、AI はハルシネーション(Hallucination)を起こす可能性があります。つまり、自信満々にでたらめを言ってしまうということです。
+
+AI のハルシネーションを防ぐにはどうすればよいでしょうか?答えは、カンニングペーパーを渡すことです。
+
+## 検索拡張生成(RAG)とは
+
+この技術の正式名称は RAG(Retrieval-Augmented Generation)です。これは、AI を一般的なレシピを暗記しているシェフから、カウンターに*専用のレシピブック*を置いているシェフに変えるようなものです。
+
+これは 3 つのシンプルなステップで行われます。
+
+**1. 検索(Retrieval)- レシピを探す**
+
+ユーザーが質問すると、AI はあなたのレシピブック(アップロードしたファイル)をめくって、最も関連性の高いページを探します。
+
+例:誰かがおばあちゃん特製のアップルパイを注文します。あなたはその特定のレシピページを探しに行きます。
+
+**2. 拡張(Augmentation)- 材料を準備する**
+
+AI はその特定のレシピを目の前に置き、記憶に頼る必要がないようにします。
+
+例:レシピをカウンターに広げ、必要なリンゴとシナモンを正確に準備します。
+
+**3. 生成(Generation)- 焼き上げる**
+
+AI は見つけた事実のみに基づいて回答を作成します。
+
+例:レシピ通りに正確にパイを焼き、市販の一般的なものではなく、おばあちゃんの味を再現します。
+
+## ナレッジ検索ノード
+
+これは、AI アシスタントの隣に参考資料の束を置くようなものです。ユーザーが質問すると、AI はまずこのカンニングペーパーをめくって最も関連性の高いページを探します。そして、見つけた内容とユーザーの元の質問を組み合わせて、最適な回答を考えます。
+
+この実践では、ナレッジ検索ノードを使用して AI アシスタントに公式のカンニングペーパーを提供し、回答が常に事実に基づいたものになるようにします。
+
+### ハンズオン 1:ナレッジベースを作成する
+
+
+
+ 上部ナビゲーションバーの**ナレッジ**をクリックし、**ナレッジを作成**をクリックします。
+
+
+ 
+
+ Dify では Notion やウェブサイトから同期することもできますが、今日はデバイスからファイルをアップロードしましょう。[こちら](https://drive.google.com/file/d/1imExB0-rtwASbmKjg3zdu-FAqSSI7-7K/view)をクリックして、後でアップロードする Dify Intro をダウンロードしてください。
+
+
+ **ファイルからインポート**をクリックします。次に、先ほどダウンロードしたファイルを選択してアップロードします。
+
+
+ 
+
+
+
+ 関連性の高いチャンクは、AI アプリケーションが正確で包括的な回答を提供するために不可欠です。長い本を想像してみてください。500 ページの中から 1 つの文を見つけるのは大変です。Dify は本をさまざまなナレッジカードに分割し、正しい答えをより速く見つけられるようにします。
+
+ **チャンク構造**
+
+ ここでは、Dify が長いテキストを自動的に小さく検索しやすいチャンクに分割します。ここでは通用モードのままにしておきましょう。
+
+
+ 
+
+ **インデックス方法**
+
+ - **高品質**:LLM モデルを使用してドキュメントを処理し、より正確な検索を実現して、LLM が高品質な回答を生成できるようにします。
+ - **エコノミー**:チャンクごとに 10 個のキーワードを使用して検索を行います。トークンは消費されませんが、検索精度は低下します。
+
+
+ 
+
+
+
+ ドキュメントの処理が完了したら、検索設定の最終確認を行います。ここでは、Dify が情報を検索する方法を設定できます。
+
+ エコノミーモードでは、転置インデックスのみが利用可能です。
+
+
+ 
+
+ - **転置インデックス**
+
+ これは Dify が使用するデフォルトの構造です。本の巻末にある索引のようなもので、重要な用語が一覧表示され、それらがどのページに出現するかを Dify に正確に伝えます。
+
+ これにより、Dify は最初から本全体を読むのではなく、キーワードに基づいて適切なナレッジカードに即座にジャンプできます。
+ - **Top K**
+
+ 3 に設定されたスライダーが表示されます。これは Dify に次のように指示しています:ユーザーが質問したとき、レシピブックから最も関連性の高い上位 3 枚のナレッジカードを見つけて AI に表示せよ。
+
+ 値を高く設定すると、AI はより多くのコンテキストを読むことができますが、高すぎると情報過多になる可能性があります。
+
+ 今のところ、デフォルト設定のままにしておきましょう。現在のニーズに十分対応できる設定になっています。
+
+
+ 
+
+
+
+ **保存して処理**をクリックします。ナレッジベースの準備が完了しました。
+
+
+
+
+ **素晴らしい!**
+
+ 最初のナレッジベースの作成に成功しました。次に、このナレッジベースを使って AI メールアシスタントをアップグレードしましょう。
+
+
+### ハンズオン 2:ナレッジ検索ノードを追加する
+
+
+
+ 1. メールアシスタントのワークフローに戻ります。
+ 2. 開始ノードと LLM ノードの間の線にカーソルを合わせます。
+ 3. **プラス(+)**アイコンをクリックし、**ナレッジ検索**ノードを選択します。
+
+
+ 
+
+
+
+ 1. ノードをクリックし、右側のパネルに移動します。
+ 2. **ナレッジ**の横にある**プラス(+)**ボタンをクリックしてナレッジを追加します。
+
+
+ 
+
+ 3. **What's Dify** を選択し、**追加**をクリックします。
+
+
+ 
+
+
+
+ ナレッジベースの準備ができました。では、AI がナレッジベースを参照してメールの回答を検索するようにするにはどうすればよいでしょうか?
+
+ パネルにとどまり、上部の**クエリテキスト**に移動して、`email_content` を選択します。
+
+ これにより、AI に次のように指示しています:*顧客のメッセージを検索キーワードとして使用し、レシピブックをめくって一致する情報を見つけよ。*クエリがなければ、AI は閉じた本を見つめているだけです。
+
+
+ 
+
+
+
+
+このようにして、メールアシスタントは顧客の元のメールを検索キーワードとして使用し、ナレッジベースから最も関連性の高い回答を見つけます。
+
+### ハンズオン 3:メールアシスタントをアップグレードする
+
+ナレッジベースの準備ができました。次に、LLM ノードに返信を生成する前にナレッジをコンテキストとして実際に読むよう指示する必要があります。
+
+
+
+ 1. **LLM ノード**をクリックします。**コンテキスト**という新しいセクションが表示されます。
+ 2. それをクリックし、ナレッジ検索ノードの **result** を選択します。
+
+
+ 
+
+
+
+ AI にコンテキストに基づいて返信を生成するよう指示する必要があります。
+
+ **System** に、追加の要件として **Generate response based on** `/` と入力し、**Context** を選択します。
+
+
+ 
+
+
+
+
+**お疲れ様でした!** 最も難しい部分を完了しました。これで、メールアシスタントは返信を生成する際に参照できるナレッジベースを持っています。どのように動作するか見てみましょう。
+
+以下のサンプルテキストを使って自由にテストしてみてください。
+
+
+
+```text テスト用サンプルメール
+顧客名:Amanda
+
+メール原文:
+Hi,
+
+What does the name 'Dify' actually stand for, and what can it do for my business?
+
+Best regards,
+Amanda
+```
+
+
+
+結果を確認すると、一般的な推測ではなく、AI がナレッジベースを参照して Dify の意味を説明していることがわかります。
+
+
+ 
+
+
+## ミニチャレンジ
+
+1. 顧客がナレッジベースにない質問をした場合、どうなりますか?
+2. ナレッジベースとしてどのような情報をアップロードできますか?
+3. チャンク構造、インデックス方法、検索設定を探索してみましょう。
\ No newline at end of file
diff --git a/ja/use-dify/tutorials/workflow-101/lesson-05.mdx b/ja/use-dify/tutorials/workflow-101/lesson-05.mdx
new file mode 100644
index 00000000..120af5fe
--- /dev/null
+++ b/ja/use-dify/tutorials/workflow-101/lesson-05.mdx
@@ -0,0 +1,172 @@
+---
+title: "レッスン 5:ワークフローの分岐点(分類と実行)"
+sidebarTitle: "レッスン 5:ワークフローの分岐点"
+---
+
+ ⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/use-dify/tutorials/workflow-101/lesson-05)を参照してください。
+
+現在、メールアシスタントはすべてのメールを同じワークフローで処理しています。これでは十分にスマートとは言えません。Dify の価格に関するメールと、バグ報告に関するメールでは、異なる対応が必要です。
+
+アシスタントを本当にインテリジェントにするには、*状況を判断する能力*を教える必要があります。ここでは、メールの種類に応じて異なるトラックに振り分ける分岐点を設定します。
+
+## If/Else ノード
+
+
+ 
+
+
+If/Else ノードは信号機のようなものです。条件をチェックし(例:このメールには価格に関する内容が含まれているか?)、その結果に応じてフローを左右に振り分けます。
+
+### ハンズオン 1:分岐点を設定する
+
+メールアシスタントをアップグレードして、Dify に関連するメールとそれ以外のメールを区別できるようにしましょう。
+
+
+
+ 開始ノードとナレッジ検索ノードの間の接続線にカーソルを合わせます。**プラス(+)**アイコンをクリックし、**If/Else** ノードを選択します。
+
+
+ 1. ノードをクリックしてパネルを開きます。
+ 2. IF セクションの **\+ Add Condition** をクリックし、変数 `{x} email_content` を選択します。
+
+
+ 
+
+ 3. 判断ロジック:**Contains** のまま維持し、入力ボックスに **Dify** と入力します。
+
+
+ 
+
+ これで、IF 分岐の完全なロジックは次のようになります:`メール内容に Dify という単語が含まれている場合`。
+
+
+
+
+ **分岐点の判断ロジックを理解する**
+
+ 条件を設定する際、Dify では交差点の信号のように、情報を判断するためのさまざまな方法が用意されています。
+
+ - **Is / Is Not**
+
+ 鍵と錠前の関係のようなものです。内容が設定した値と完全に一致する必要があります。
+ - **Contains / Not Contains**
+
+ 虫眼鏡のようなものです。特定のキーワードがテキスト内のどこかに存在するかをチェックします。今回使用するのはこの方法です。
+ - **Starts with / Ends with**
+
+ テキストが特定の文字で始まるか、または終わるかをチェックします。
+ - **Is Empty / Is Not Empty**
+
+ 変数に内容があるかどうかをチェックします。例:ユーザーが実際に添付ファイルをアップロードしたかどうかの確認。これらを理解することで、正確かつ柔軟なルールを設定し、よりスマートなワークフローを構築できます。
+
+
+### ハンズオン 2:異なるパスを設計する
+
+分岐点ができたので、それぞれの道で何が起こるかを決める必要があります。
+
+#### A. Dify 関連メールのトラック(IF 分岐)
+
+IF 分岐の右側にある**プラス(+)**アイコンをクリックし、線をドラッグして**ナレッジ検索**ノードに接続します。
+
+これは次のことを意味します:メールに Dify という単語が含まれている場合、前回のレッスンで構築した専門的な返信プロセス(ナレッジベースで情報を検索するプロセス)が実行されます。
+
+
+ 
+
+
+#### B. 無関係なメールのトラック(ELSE 分岐)
+
+Dify に関連しないメールに対しては、シンプルで丁寧な汎用返信プロセスを作成します。
+
+
+
+ ELSE の横にある**(+)**をクリックし、新しい **LLM ノード(LLM 2)**を選択します。
+
+
+ 以下のプロンプトをコピーして貼り付けます。
+
+ ```plaintext wrap
+ You are a professional customer service manager. Based on the customer's email, kindly inform the user that no relevant information was found and provide relevant guidance.
+
+ Requirements:
+ 1. Address the customer name in a friendly tone.
+ 2. Thank them for their letter.
+ 3. Keep the tone professional and friendly.
+ 4. Sign off as "Anne."
+ ```
+
+
+ 1. システムの下にある **Add Message** ボタンをクリックします。
+ 2. ユーザーメッセージボックスに **customer name:** と入力します。
+ 3. キーボードで `/` を押します。
+ 4. 変数選択メニューが表示されるので、`customer_name` をクリックします。
+ 5. Enter キーを押して新しい行を開始し、**email content:** と入力します。
+ 6. もう一度 / キーを押して `email_content` をクリックします。
+
+
+ 
+
+
+
+
+これで、2 つのトラックがそれぞれ異なる返信を生成するようになりました。もし 10 個のトラックがあったら、ワークフローはスパゲッティのように複雑になってしまいます。
+
+整理された状態を保つために、変数アグリゲーターを使用します。これは、すべての異なる道が 1 つの幹線道路に合流する交通ハブのようなものです。
+
+## 変数アグリゲーター
+
+
+ 
+
+
+変数アグリゲーターは、すべての異なる道が 1 つの幹線道路に合流する交通ハブのようなものです。
+
+### ハンズオン 3:変数アグリゲーターを追加する
+
+
+
+ 1. 終了ノードと LLM ノードの間の接続線を選択して削除します。
+ 2. 「キャンバス」上で右クリックし、**Add Node** を選択して、**変数アグリゲーター**ノードを選びます。
+
+
+ 
+
+
+
+ LLM ノードと LLM 2 ノードを変数アグリゲーターに接続します。
+
+
+ 1. 変数アグリゲーターノードをクリックします。
+ 2. **Assign Variables** の横にある**プラス(+)**アイコンをクリックします。
+ 3. LLM 1 の **text** と LLM 2 の **text** を選択します。
+
+
+ 
+
+ これにより、どちらの LLM ノードが応答を生成しても、変数アグリゲーターノードが内容を集約し、出力ノードに渡します。
+
+
+ 1. 変数アグリゲーターを出力ノードに接続します。
+ 2. 出力変数を、以前の LLM の結果ではなく、変数アグリゲーターの結果に更新します。
+
+
+ 
+
+ ワークフローは以下のようになります:
+
+
+ 
+
+
+
+ **Test Run** をクリックし、顧客名を入力して、キーワード Dify を含む入力と含まない入力の両方でテストし、異なる結果を確認してください。
+
+
+
+## ミニチャレンジ
+
+ビジネスに関する問い合わせメールに対して、適切な返信を生成するにはワークフローをどのように編集すればよいでしょうか?
+
+
+ ナレッジベースにビジネス関連のファイルを追加することを忘れないでください。
+
\ No newline at end of file
diff --git a/ja/use-dify/tutorials/workflow-101/lesson-06.mdx b/ja/use-dify/tutorials/workflow-101/lesson-06.mdx
new file mode 100644
index 00000000..7eca172c
--- /dev/null
+++ b/ja/use-dify/tutorials/workflow-101/lesson-06.mdx
@@ -0,0 +1,210 @@
+---
+title: "レッスン 6:複数のタスクを処理する(パラメータ抽出 & イテレーション)"
+sidebarTitle: "レッスン 6:複数のタスクを処理する"
+---
+
+ ⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/use-dify/tutorials/workflow-101/lesson-06)を参照してください。
+
+次のようなメールが届いたとしましょう:
+
+> こんにちは!Dify って何ですか?あと、どのモデルに対応していますか?無料プランはありますか?
+
+このメールをそのまま今の AI アシスタントに送ると、最初の質問にしか答えなかったり、すべての質問に対して曖昧な回答をしてしまう可能性があります。
+
+まず、すべての質問を特定し、ナレッジベースを使って一つずつ回答する方法が必要です。
+
+## パラメータ抽出
+
+
+ 
+
+
+パラメータ抽出は、非常に優秀な*情報収集員*のようなものです。テキスト(メールなど)を読み込み、指定された情報を見つけ出して、整理されたリストにまとめます。
+
+### ハンズオン 1:パラメータ抽出ノードを追加する
+
+メールアシスタントをアップグレードする前に、以下のノードを削除しましょう:ナレッジ検索、If/Else、LLM、LLM 2、変数アグリゲーター。
+
+
+
+ 開始ノードの直後に、**パラメータ抽出**ノードを追加します。
+
+
+ 
+
+
+
+ パラメータ抽出をクリックし、右側パネルの**入力変数**セクションで `email_content` を選択します。
+
+
+ 
+
+ AI はメールからどの情報を抽出すべきか自動的にはわからないため、すべての質問を収集するよう明示的に指示する必要があります。
+
+
+ **抽出パラメータ**の横にある**プラス(+)**アイコンをクリックして、AI が探すべき内容の定義を始めます。名前は `question_list` とします。
+
+
+ 
+
+
+ **パラメータの型**
+
+ パラメータ抽出が情報収集員だとすると、型は情報を入れるための「かご」です。正しい情報には正しいかごが必要です。
+
+ **単一項目(小さなかご)**
+
+ - **String(テキスト)**:単一のテキスト情報用。例:顧客名
+ - **Number(数値)**:単一の数値用。例:注文数量
+ - **Boolean(ブール値)**:はい/いいえ(True/False)のシンプルな判定。判定結果や意思決定に適しています
+
+ **リスト項目(配列)**
+
+ - **Array[String]**:Array はリスト、String はテキストを意味します。つまり `Array[String]` は、複数のテキストを格納できるかごです。例えば、メール内の個別の質問すべてを格納できます
+ - **Array[Number]**:複数の数値を格納するためのコンテナです。例:価格リストや商品リスト
+ - **Array[Boolean]**:複数のはい/いいえの判定結果を格納します。例えば、複数のタスクを含むリストをチェックし、各項目が完了しているかどうかを返します。`[Yes, No, Yes]` のようになります
+ - **Array[Object]**:複数のデータセットを格納する高度なフォルダです(例:名前と電話番号を含む連絡先リスト)
+
+
+
+ 1. 必要に応じて、メール内容には `Array[String]` を選択します。
+ 2. 補足情報として説明を追加します。例:ユーザーがメール内で提起したすべての質問。入力後、**追加**をクリックします。
+
+
+ 
+
+
+
+ 抽出パラメータの下にある**指示**ボックスに、AI への明確なコマンドを入力します。
+
+ 例:メールからすべての質問を抽出し、各質問をリストの個別の項目としてください。
+
+
+
+これにより、このノードはメール内のすべての質問を見つけられるようになります。情報収集員が情報を集め終えたので、次のステップに進みましょう。AI に各質問を処理させる方法を設定します。
+
+## イテレーション
+
+
+ 
+
+
+イテレーションを使うと、アシスタントに*分身*のチームがいるようなものです。リスト(メール内の質問リストなど)を渡すと、リストの各項目に対して分身が一人ずつ現れます。
+
+各分身は割り当てられた項目を受け取り、まったく同じタスクを実行するため、漏れが発生しません。
+
+### ハンズオン 2:イテレーションノードを設定する
+
+
+
+ 1. パラメータ抽出の後にイテレーションノードを追加します。
+ 2. イテレーションノードをクリックし、右側の入力パネルに移動します。
+ 3. パラメータ抽出から `{x} question_list` を選択します。出力変数は今は空白のままにしておきます。
+
+
+ 
+
+ **イテレーションの高度なオプション**
+
+ イテレーションパネルには、さらに多くの設定があります。簡単に見ていきましょう。
+
+
+ 
+
+ **並列モード**:OFF(デフォルト)
+
+ - 無効の場合、ワークフローはリストの各項目を順番に処理します(質問 1 を完了してから質問 2 へ)。
+ - 有効にすると、ワークフローはリストのすべての項目を同時に処理しようとします(5 人のシェフが同時に 5 つの料理を作るイメージです)。
+
+ **エラー応答方法**:デフォルトはエラー時に終了。
+
+ - **終了**:リストのいずれかの項目(例:2 番目の質問)がサブプロセスで失敗すると、ワークフロー全体が直ちに停止します
+ - **エラーを無視して続行**:2 番目の質問が失敗しても、ワークフローはそれをスキップして残りの質問の処理を続けます
+ - **異常な出力を削除**:無視と同様ですが、最終出力リストの結果からその失敗した項目も削除します
+
+ ワークフローに戻ると、イテレーションノードの下にサブプロセスエリアが表示されます。このボックス内のすべてのノードは、各質問に対して一度ずつ実行されます。
+
+
+ 1. イテレーションボックスの中に、ナレッジ検索ノードを追加します。
+ 2. クエリテキストを `{x} item` に設定します。イテレーションでは、item は常に現在処理中の質問を指します。
+
+
+ 
+
+
+
+ 1. ナレッジ検索の後に LLM ノードを追加します。
+ 2. 検索されたコンテキストに基づいて質問に回答するよう設定します。
+
+
+ レッスン 4 を覚えていますか?あのプロンプトスキルを活用し、コンテキストを忘れないでください!
+
+ 以下のプロンプトを参考にしてください:
+
+ **System**:
+
+ ```plaintext wrap
+ You are a professional Dify Customer Service Manager. Please provide a response to questions strictly based on the `Context`.
+ ```
+
+ **User**:
+
+ ```plaintext wrap
+ questions: Iteration/{x} item
+ ```
+
+
+ 
+
+ イテレーションノードは各質問に対して個別の回答を生成するため、これらの回答をすべて集めて 1 つの完全な返信メールを作成する必要があります。
+
+
+ 1. イテレーションノードをクリックします。
+ 2. **出力変数**で、ループ内の LLM の回答を表す変数を選択します。これにより、イテレーションノードはすべての回答を収集し、新しいリストにまとめます。
+
+
+ 
+
+
+
+ 最後に、もう 1 つ LLM ノードを接続します。この最終ノードが、収集されたすべての回答をまとめて、1 通のプロフェッショナルなメールに仕上げます。
+
+ System とユーザーメッセージにプロンプトを追加することを忘れないでください。以下のプロンプトを参考にしてください。
+
+ ```plaintext wrap
+ You are a professional customer service assistant. Please
+ organize the answers prepared for customer into a clear and
+ complete email reply.
+ Sign the email as Anne.
+ ```
+
+ **User**:
+
+ ```plaintext wrap
+ answers: Iteration/{x}output
+ customer: User Input/{x}customer_name
+ ```
+
+
+ 
+
+
+
+ 1. チェックリストをクリックして、漏れがないか確認します。注意事項に従い、出力ノードを接続し、無効な変数の問題を修正する必要があります。
+ 2. 出力ノードを手前の LLM 2 ノードに接続し、以前の変数を削除してから、LLM 2 の text を出力変数として選択します。
+
+
+ 
+
+
+
+
+これで、3 つの異なる質問を含むテストメールを作成し、生成された返信を確認してみましょう。
+
+## ミニチャレンジ
+
+パラメータ抽出は他にどんな情報を見つけられるでしょうか?
+
+
+ パラメータ抽出のパラメータ型を探索してみてください。
+
diff --git a/ja/use-dify/tutorials/workflow-101/lesson-07.mdx b/ja/use-dify/tutorials/workflow-101/lesson-07.mdx
new file mode 100644
index 00000000..1d06a4b2
--- /dev/null
+++ b/ja/use-dify/tutorials/workflow-101/lesson-07.mdx
@@ -0,0 +1,228 @@
+---
+title: "レッスン 7:ワークフローを強化する(プラグイン)"
+sidebarTitle: "レッスン 7:ワークフローを強化する"
+---
+
+ ⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/use-dify/tutorials/workflow-101/lesson-07)を参照してください。
+
+メールアシスタントはナレッジベースを活用できるようになりました。しかし、ナレッジベースの範囲を超えた質問が来たらどうでしょうか?例えば、「Dify の最新リリースには何が含まれていますか?」のような質問です。
+
+ナレッジベースがまだ更新されていない場合、ワークフローは対応できません。これを解決するために、ライブ検索スキルを装備しましょう!
+
+## ツール
+
+
+ 
+
+
+ツールは AI ワークフローに超能力を与えるものです。
+
+[Dify マーケットプレイス](https://marketplace.dify.ai/)はプラグインのスーパーマーケットのようなものです。Google 検索、天気の確認、画像生成、複雑な計算など、すぐに使える機能が揃っています。数回クリックするだけでインストールしてワークフローに組み込めます。
+
+それでは、現在のワークフローをアップグレードしていきましょう。
+
+### ハンズオン 1:イテレーション内のサブプロセスをアップグレードする
+
+アシスタントに新しいロジックを追加します:まずナレッジベースを確認し、回答が見つからない場合は Google で検索します。
+
+新しいロジックに集中するため、次のノードのみを残しておきましょう:**ユーザー入力、パラメータ抽出器、イテレーション**。
+
+#### ステップ 1:ナレッジベースの照会と判定
+
+
+
+ 1. クリックしてイテレーションノードのサブプロセスエリアに入ります。
+ 2. ナレッジ検索ノードを残し、クエリ変数が `{x} item` であることを確認します。
+ 3. 以前の LLM ノードを削除します。
+
+
+ ナレッジ検索ノードの直後に LLM ノードを追加します。このノードの役割は、ナレッジベースの情報が質問に回答できるかどうかを判定することです。
+
+ - **コンテキストセッション**:ナレッジ検索から `Knowledge Retrieval / {x} result Array [Object]` を選択します。
+ - **System プロンプト**:
+
+ ```plaintext wrap
+ Based on the `Context`, determine if the answer contains enough information to answer the questions. If the information is insufficient, you MUST reply with: "Information not found in knowledge base".
+ ```
+ - **User Message**:
+
+ ```plaintext wrap
+ questions: Iteration/{x} item
+ ```
+
+
+ 
+
+
+
+
+「キャンバス」上ではこのように表示されます。
+
+
+ 
+
+
+#### ステップ 2:分岐点の設定
+
+
+
+ LLM ノードの後に If/Else ノードを追加します。ルールを設定します:LLM の出力が **Information not found in knowledge base** を**含む**場合。
+
+ これは、ナレッジベースの情報では回答できない場合を意味します。
+
+
+ 
+
+
+
+ IF 分岐の後に検索ツールを接続しましょう。これは、ナレッジベースで関連する回答情報が見つからない場合に、ウェブ検索を使って回答を探すことを意味します。
+
+ 1. IF ノードの後、プラス(+)アイコンをクリックしてツールを選択します。
+ 2. 検索ボックスに Google と入力します。Google にカーソルを合わせ、右側の「インストール」をクリックし、ポップアップウィンドウで再度「インストール」をクリックします。
+
+
+ 
+
+
+
+ Google 内の Google Search をクリックします。
+
+
+ 
+
+
+
+ Google Search を初めて使用するには認証が必要です。Wi-Fi のパスワードを入力するようなものです。
+
+
+ 
+
+ 1. 「API Key 認証設定」をクリックし、「SerpApi から SerpApi API key を取得」をクリックします。SerpApi にサインインして、専用の API キーを取得してください。
+
+
+ API キーは外部世界へのパスポートです。安全に保管し、他人と共有しないようにしましょう。
+
+
+ 
+
+ 2. API キーをコピーして SerpApi API key に貼り付けます。**Save** をクリックします。
+ 3. API キーの認証が成功すると、設定パネルがすぐに表示されます。Query string フィールドに移動し、`Iteration/{x} item` を選択します。
+
+
+ 
+
+
+
+ 次に、どちらのパスかに応じて異なる回答方法を設定する必要があります。
+
+ **検索回答パス**
+
+ 検索結果に基づいて質問に回答するため、新しい LLM ノードを追加します。Google Search ノードに接続してください。
+
+ **System**:
+
+ ```plaintext wrap
+ You are a Web Research Specialist. Based on Google Search, concisely answer the user's questions. Please do not mention the knowledge base in your response.
+ ```
+ **User Message**:
+
+ ```plaintext wrap
+ results: GOOGLESEARCH/{x} text
+ questions: Iteration/{x} item
+ ```
+
+
+ 
+
+ **ナレッジベース回答パス**
+
+ Else ノードの後に、ナレッジベースに基づく回答を処理するための新しい LLM ノードを追加します。
+
+ **System**:
+
+ ```plaintext wrap
+ You are a professional Dify Customer Service Manager. Strictly follow the `Context` to reply to questions.
+ ```
+ **User Message**:
+
+ ```plaintext wrap
+ questions: Iteration/{x} item
+ ```
+
+
+ 
+
+
+
+ 1. サブプロセス内(イテレーションボックスの内部)の最後に、変数アグリゲーターノードを追加し、LLM 2 と LLM 3 の両方に接続します。
+ 2. 変数アグリゲーターパネルで、変数の割り当てとして `LLM 2/{x}text String` と `LLM 3/{x}text String` を選択します。
+
+ このようにして、2 つの可能な回答を 1 つのパスに統合します。
+
+
+ 
+
+
+
+
+現在のワークフローはこのようになっています。
+
+
+ 
+
+
+#### ステップ 3:最終的なメール作成
+
+ロジック分岐の処理が完了したので、すべての回答を 1 つの洗練されたメールにまとめましょう。
+
+
+
+ イテレーションノードをクリックし、出力変数として `{x}Variable Aggregator/{x}output String` を設定します。
+
+
+ 
+
+
+
+ イテレーションノードの後に、すべての出力を要約するための新しい LLM ノードを接続します。以下のプロンプトを参考にしてください。
+
+ **System**:
+
+ ```plaintext wrap
+ You are a professional Customer Service Manager. Summarize all the answers of the questions, and organize a clear and complete email reply for the customer.
+ Do not include content where the knowledge base could not find relevant information.
+ Signature: Anne.
+ ```
+
+ **User Message**:
+
+ ```plaintext wrap
+ questions: Iteration/ {x} output
+ customer: User Input / {x} customer_name
+ ```
+
+
+ 
+
+
+
+ LLM ノードの後に End ノードを追加します。出力変数を `LLM 4/{x}text String` に設定します。
+
+
+ 
+
+
+
+
+これでワークフローのセットアップと設定がすべて完了しました。メールアシスタントは、ナレッジベースに基づいて質問に回答し、必要に応じて Google Search で補足的な回答を検索できるようになりました。
+
+
+ 
+
+
+ナレッジベースに確実に載っていない質問を含むメールを送信してみましょう。AI が Google を使って関連する回答を見つけられるか確認してください。
+
+## ミニチャレンジ
+
+1. If/Else ノードで選択できる他の条件にはどのようなものがありますか?
+2. マーケットプレイスを閲覧して、このワークフローに追加できる別のツールを見つけてみましょう。
\ No newline at end of file
diff --git a/ja/use-dify/tutorials/workflow-101/lesson-08.mdx b/ja/use-dify/tutorials/workflow-101/lesson-08.mdx
new file mode 100644
index 00000000..ec0f9a3b
--- /dev/null
+++ b/ja/use-dify/tutorials/workflow-101/lesson-08.mdx
@@ -0,0 +1,215 @@
+---
+title: "レッスン 8:エージェントノード"
+sidebarTitle: "レッスン 8:エージェントノード"
+---
+
+ ⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/use-dify/tutorials/workflow-101/lesson-08)を参照してください。
+
+ここまでのレッスンで、メールアシスタントに施してきたアップグレードを振り返ってみましょう。
+
+- 調べる力を習得 —— ナレッジベースを検索できるようになりました
+- 判断する力を習得 —— 条件分岐で意思決定ができるようになりました
+- 複数タスクの処理力を習得 —— イテレーションで複数の質問を処理できるようになりました
+- ツールの活用力を習得 —— Google 検索でインターネットにアクセスできるようになりました
+
+お気づきかもしれませんが、ワークフローはもはや単純な一直線(ステップ 1 → ステップ 2 → ステップ 3)ではなくなっています。
+
+分析し、判断し、さまざまな能力を呼び出して問題を解決するシステムへと進化しています。この高度なパターンこそが、エージェンティックワークフローと呼ばれるものです。
+
+## エージェンティックワークフロー
+
+エージェンティックワークフローは、単なる「入力 \> 処理 \> 出力」ではありません。
+
+思考、計画、ツールの使用、結果に基づく調整といった一連のステップを含みます。AI を単純な実行者(指示に従うだけ)から、自律的に問題を解決するインテリジェントなエージェントへと変貌させます。
+
+## エージェントストラテジー
+
+エージェントをよりスマートに動作させるために、研究者たちはさまざまな*ストラテジー*を設計しました。これらはエージェントを導く異なる思考モードのようなものです。
+
+- **ReAct (Reason + Act)**
+
+ *考えてから行動する*アプローチです。エージェントは思考し(何をすべきか?)、行動し(ツールを呼び出す)、結果を観察し、再び思考します。タスクが完了するまでこのループを繰り返します。
+- **Plan-and-Execute**
+
+ まず全体の計画を立て、それをステップごとに実行します。
+- **Chain of Thought (CoT)**
+
+ 回答を出す前に推論のステップを書き出すことで、精度を向上させます。
+- **Self-Correction**
+
+ 自身の出力をチェックし、間違いを修正します。
+- **Memory**
+
+ エージェントに短期記憶や長期記憶を持たせることで、過去の会話や重要な情報を思い出せるようになり、より一貫性のある、パーソナライズされた応答が可能になります。
+
+レッスン 7 では、ナレッジ検索 → LLM で判断 → If/Else → 検索という流れを手動で構築しました。動作はしましたが、構築が複雑でした。
+
+もっと簡単な方法はないでしょうか?あります。それがこちらです。
+
+## エージェントノード
+
+エージェントノードは、高度にパッケージ化されたインテリジェントなユニットです。
+
+指示を通じて目標(Goal)を設定し、必要となりそうなツール(Tools)を提供するだけで、内部で自律的に思考、計画、選択、ツール呼び出しを行います(選択したエージェントストラテジー(例:ReAct)やモデルの Function Calling 機能を活用)。設定した目標が達成されるまで、このプロセスを続けます。
+
+Dify では、これにより複雑なエージェンティックワークフローの構築プロセスが大幅に簡素化されます。
+
+## ハンズオン 1:エージェントノードで構築する
+
+目標は、イテレーションループ内の複雑な手動ロジックを、1 つのスマートなエージェントノードに置き換えることです。
+
+
+
+ イテレーションのサブプロセスに移動します。ナレッジ検索ノードを残し、それ以外のノードを削除します。
+
+
+ 
+
+
+
+ ナレッジ検索ノードの直後にエージェントノードを追加します。
+
+
+ 
+
+
+
+ まだ使用したことがないため、マーケットプレイスからストラテジーをインストールする必要があります。
+
+ エージェントノードをクリックします。右側のパネルで「Agent Strategy」を探し、「Find more in Marketplace」をクリックします。
+
+
+ 
+
+
+
+ マーケットプレイスで Dify Agent Strategy を見つけてインストールします。
+
+
+ 
+
+
+
+ ワークフローに戻り(必要に応じてページを更新)、Agent Strategy の下で ReAct を選択します。
+
+
+ 
+
+ **なぜ ReAct を選ぶのか?**
+
+ ReAct(Reason + Act)は、人間の問題解決を模倣した「思考 → 行動 → 確認」のループを使うストラテジーです。
+
+ 1. Reason:エージェントが*次に何をすべきか?*を考えます(例:ナレッジベースを確認する)。
+ 2. Act:そのアクションを実行します。
+ 3. Observe:結果を確認します。回答が見つからなければ、サイクルを繰り返します(例:*Google で検索する必要がある*)。
+
+ この「考えながら行動する」アプローチは、次のステップが前のステップの結果に依存する複雑なタスクに最適です。
+
+
+ ReAct は思考ストラテジーですが、実際にアクション部分を実行するには、AI に適切な「物理的」スキルが必要です。これが **Function Calling** と呼ばれるものです。Function Calling をサポートするモデルを選択します。ここでは gpt-5 を選択します。
+
+
+ 
+
+ **なぜ Function Calling が必要なのか?**
+
+ エージェントノードのコア機能の 1 つは、自律的にツールを呼び出すことです。Function Calling は、モデルが提供されたツール(Google 検索など)をいつ、どのように使用するかを理解するための重要な技術です。
+
+ モデルがこの機能をサポートしていない場合、エージェントはツールと効果的にやり取りできず、自律的な意思決定能力のほとんどを失ってしまいます。
+
+
+ エージェントノードをクリックします。ツールリストのプラス(+)アイコンをクリックし、Google Search を選択します。
+
+
+ 
+
+
+
+ 提供するツールとコンテキストを使って何をすべきかを、エージェントに具体的に伝える必要があります。以下の指示を Instruction フィールドに貼り付けてください。
+
+ ```plaintext wrap
+ Goal: Answer user questions about Dify products.
+
+ Steps:
+ 1. I have provided a relevant internal knowledge base retrieval result. First, judge if this result can fully answer the user's questions.
+ 2. If the context clearly answers it, generate the final answer based on the context.
+ 3. If the answer is insufficient or irrelevant, use the Google Search tool to find the latest information and generate the answer based on search results.
+
+ Requirement: Keep the final answer concise and accurate.
+ ```
+
+
+ 
+
+
+
+ ここでの設定は、エージェントがデータを参照するために非常に重要です。
+
+ - **コンテキスト**:ナレッジ検索ノードから `Knowledge Retrieval / (x) result Array[Object]` を選択します(これによりナレッジベースの内容がエージェントに渡されます)。
+ - **クエリ**:イテレーションノードから `Iteration/{x} item` を選択します。
+
+ **なぜ元の email_content ではなく item を使うのか?**
+
+ パラメータ抽出器を使って `email_content` から質問リスト(`question_list`)を抽出したことを思い出してください。イテレーションノードはこのリストを 1 つずつ処理しており、item は現在処理中の個別の質問を表しています。
+
+ item をクエリ入力として使用することで、エージェントが現在のタスクに集中でき、意思決定とアクションの精度が向上します。
+
+
+ 
+
+
+
+ 出力変数として `Agent/{x}text String` をクリックします。
+
+
+ 
+
+
+
+
+
+ 🎉 イテレーションノードのアップグレードが完了しました。
+
+
+イテレーションノードは回答のリストを生成するため、それらを 1 つのメールにまとめ直す必要があります。
+
+## ハンズオン 2:最終組み立て
+
+
+
+ 1. イテレーションノードの後に LLM ノードを追加します。
+ 2. ノードをクリックし、システムにプロンプトを入力します。以下のプロンプトを参考にするか、自由に編集してください。
+
+ ```plaintext wrap
+ Combine all answers for the original email.
+ Write a complete, clear, and friendly reply to the customer.
+ Signature: Anne
+ ```
+
+ 3. User Message に answers、email content、customer name をそれぞれ対応する変数に置き換えて追加します。現在の LLM ノードは以下のようになります。
+
+
+ 
+
+
+
+ 出力変数を LLM の text に設定し、`email_reply` と名付けます。
+
+
+ 
+
+
+
+
+最終的なワークフローがこちらです。
+
+
+ 
+
+
+**テスト実行**をクリックします。さまざまな質問を混ぜて入力してみてください。エージェントノードがコンテキストを使うタイミングと Google 検索を使うタイミングをどのように自律的に判断するか観察しましょう。
+
+## ミニチャレンジ
+
+1. エージェントノードを使ってイテレーションループ全体を置き換えることはできるでしょうか?質問リストを一度にまとめて処理するプロンプトをどのように設計しますか?
+2. エージェントの*コンテキスト*フィールドに他にどのような情報を与えれば、より良い判断ができるようになるでしょうか?
diff --git a/ja/use-dify/tutorials/workflow-101/lesson-09.mdx b/ja/use-dify/tutorials/workflow-101/lesson-09.mdx
new file mode 100644
index 00000000..c42aa0dc
--- /dev/null
+++ b/ja/use-dify/tutorials/workflow-101/lesson-09.mdx
@@ -0,0 +1,96 @@
+---
+title: "レッスン 9:レイアウトデザイナー(テンプレート)"
+sidebarTitle: "レッスン 9:レイアウトデザイナー"
+---
+
+ ⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/use-dify/tutorials/workflow-101/lesson-09)を参照してください。
+
+レッスン 8 では、思考と検索ができる強力なエージェントを構築しました。しかし、小さな問題に気づいたかもしれません。最後の LLM に回答をリスト形式で出力するよう指示しても、フォーマットが乱れたり統一されなかったりすることがあります(例:箇条書きと段落が混在するなど)。
+
+この問題を解決するために、最終的な LLM がメールを作成する前に、回答を美しく統一されたフォーマットに整理する専用のフォーマットアシスタントが必要です。
+
+## テンプレート変換
+
+テンプレート変換は、元のデータ(回答リストなど)を受け取り、あなたが指定した厳密なデザインテンプレート/基準に従って、完璧にフォーマットされたテキストブロックを生成します。毎回一貫した出力が保証されます。
+
+## ハンズオン:メールのレイアウトを整える
+
+
+
+ テンプレートノードが挨拶文を担当するため、LLM には質問と回答だけに集中するよう指示する必要があります。以下のプロンプトをコピー&ペーストするか、自由に編集してください。
+
+ ```plaintext wrap
+ Combine all answers for the original email. Write a complete, clear, and friendly reply that only includes the summarized answers.
+
+ IMPORTANT: Focus SOLELY on the answers. Do NOT include greetings (like "Hi Name"), do
+ NOT write intro paragraphs (like "Thank you for reaching out"), and do NOT include
+ signatures.
+ ```
+
+
+
+ それぞれの変数をリストアップして挿入します。
+
+
+ 
+
+
+
+ LLM ノードの後に、クリックしてテンプレートノードを追加します。
+
+
+ 
+
+
+
+ テンプレートノードをクリックし、入力変数(Input Variables)セクションに移動して、以下の 2 つの項目を追加します:
+
+ - `customer`:`User Input / {x} customer_name String` を選択
+ - `body`:`LLM / {x} text String` を選択
+
+
+ 
+
+
+
+ **Jinja2 とは?**
+
+ 簡単に言うと、Jinja2 は変数(回答リストなど)を希望通りのフォーマットでテキストテンプレートに挿入できるツールです。シンプルな記号を使って変数の配置場所を指定し、基本的なロジックを実行します。これにより、生のデータリストを整然とした統一フォーマットのテキストブロックに変換できます。
+
+ ここでは、冒頭の挨拶、署名、メール本文を組み合わせて、毎回プロフェッショナルで一貫したメールを作成できるようにします。
+
+ 以下のレイアウトをそのままテンプレートのコードボックスにコピー&ペーストしてください:
+
+ ```jinja
+ Hi {{ customer }},
+
+ Thank you for reaching out to us, and we are more than happy to provide you with the information you are seeking.
+
+ Here are the details regarding your specific questions:
+
+ {{ body }}
+
+ ---
+ Thank you for reaching out to us!
+ Best regards,
+ Anne
+ ```
+
+
+
+最終的なワークフローはこちらです。
+
+
+ 
+
+
+**テスト実行**をクリックします。1 通のメールに複数の質問を入れてみてください。最終出力には、カスタマイズされた冒頭の挨拶、LLM が美しくまとめた回答、そして標準的でプロフェッショナルな署名が完璧に含まれていることに気づくでしょう。
+
+## ミニチャレンジ
+
+1. Jinja2 のコードを変更して、箇条書きの代わりに番号付きリスト(1. 回答、2. 回答)にするにはどうすればよいでしょうか?
+
+
+ [Template Designer Documentation](https://jinja.palletsprojects.com/en/stable/templates/) を参照するか、LLM に聞いてみましょう。
+
+2. テンプレートノードには他にどのような活用方法があるでしょうか?
\ No newline at end of file
diff --git a/ja/use-dify/tutorials/workflow-101/lesson-10.mdx b/ja/use-dify/tutorials/workflow-101/lesson-10.mdx
new file mode 100644
index 00000000..5837ea09
--- /dev/null
+++ b/ja/use-dify/tutorials/workflow-101/lesson-10.mdx
@@ -0,0 +1,108 @@
+---
+title: "レッスン 10:AIアプリを公開してモニタリングする"
+sidebarTitle: "レッスン 10:公開とモニタリング"
+---
+
+ ⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/use-dify/tutorials/workflow-101/lesson-10)を参照してください。
+
+ここまでの構築とチューニングを経て、メールアシスタントは完成しました。ナレッジベースの参照、検索ツールの使用、きれいにフォーマットされた返信の生成ができるようになっています。しかし現時点では、まだ Dify Studio の中にあり、あなただけしか見ることができません。
+
+他の人と共有するにはどうすればよいでしょうか?自分が見ていないときに、正しく動作しているかどうかをどう確認すればよいでしょうか?
+
+いよいよ最後の2つの重要なステップ、公開とモニタリングです。
+
+## アプリケーションを公開する
+
+1. キャンバスの右上にマウスを移動し、**Publish** ボタンをクリックします。他のボタンが有効になります。
+
+
+ ワークフローに変更を加えた場合は、必ず **Publish → Update** をクリックして保存してください。
+
+ 更新しないと、公開中のバージョンは古いままになります。
+
+
+ 
+
+2. 公開すると、グレーアウトしていたボタンがクリックできるようになります。
+ 1. **アプリを共有する**
+
+ Dify が自動的に WebApp を生成します。これはメールアシスタント用のすぐに使えるチャットインターフェースです。
+
+ この URL を同僚や友人に送ることができます。相手は Dify にログインしなくても、メールアシスタントを使用できます。
+
+
+ 
+
+ 2. **バッチ実行**
+
+ 100通のメールに返信する必要がある場合、1通ずつコピー&ペーストしていては大変です。
+
+ Dify では、100通のメールを CSV ファイルにまとめて準備するだけで済みます。Dify のバッチ実行機能にアップロードすると、Dify が自動的にすべてのメールを処理し、生成された返信をスプレッドシートとして返してくれます。
+
+ ワークフローで特定の変数(`email_content` など)を設定しているため、CSV はそのフォーマットに合わせる必要があります。Dify が提供するテンプレートをダウンロードすれば、簡単に準備できます。
+
+
+ 
+
+ 3. **その他**
+ - **API リファレンスにアクセス**:コーディングの知識がある方は、API キーを取得して、このワークフローを自分のウェブサイトやモバイルアプリに直接統合できます
+ - **探索で開く**:このアプリをワークスペースのサイドバーにピン留めして、次回すぐにアクセスできるようにします
+ - **ツールとして公開**:ワークフローをプラグインとしてパッケージ化し、他の Agent がメールアシスタントをツールとして利用できるようにします
+
+## アプリをモニタリングする
+
+作成者として、このアシスタントの状態を把握する必要があります。モニタリングとログを使うことで、アプリの健全性、パフォーマンス、コストを確認できます。
+
+### 指令センター:モニタリング
+
+左サイドバーの **Monitoring** をクリックすると、アプリのパフォーマンスを確認できます。
+
+| 名称 | 説明 |
+| :--------------------- | :----------------------------------------------------------------------------------- |
+| メッセージ総数 | ユーザーが AI とやり取りした回数です。アプリの人気度がわかります。 |
+| アクティブユーザー | AI と対話したユニークユーザーの数です。 |
+| トークン使用量 | AI が使用したトークン量です。急な増加がないか監視してコストを管理しましょう。 |
+| 平均ユーザーインタラクション | ユーザーがフォローアップの質問をしているかがわかります。 |
+
+### 虫眼鏡:ログ
+
+ログは、すべての実行の詳細を記録します。時間、入力、所要時間、出力などです。詳細な記録を確認するには、左サイドバーの Logs をクリックしてください。
+
+**なぜログが重要なのか?**
+
+- **デバッグ**:ユーザーが*動かない*と言った場合、ログで*現場*を再現し、どのノードで失敗したかを正確に確認できます。
+- **パフォーマンス**:各ノードの所要時間を確認し、処理を遅くしているボトルネックを特定できます。
+- **ユーザー理解**:ユーザーが実際に何を質問しているかを確認できます。この実データを活用して、ナレッジベースの更新やプロンプトの改善に役立てましょう。
+- **コスト管理**:特定の実行でどれだけのトークンを消費したかを正確に確認できます。
+
+| 名称 | 説明 |
+| :------------------ | :---------------------------------------------------------- |
+| 開始時間 | ワークフローがトリガーされた時刻 |
+| ステータス | 成功(Success)または失敗(Failure) |
+| 実行時間 | プロセス全体の所要時間 |
+| トークン | この実行で消費されたトークン数 |
+| エンドユーザー / アカウント | セッションを開始した特定のユーザー ID またはアカウント |
+| トリガー元 | WebApp インターフェース経由か、API 経由か |
+
+各ログエントリをクリックすると、詳細を確認できます。例えば、ユーザーが頻繁に質問する内容を特定し、それをもとにナレッジベースを適時更新・修正することができます。
+
+AI アプリの構築は新たなスタート地点です。これが **LLMOps**(大規模言語モデル運用)の核心です。
+
+1. **観察(Observe)**:ログを確認します。ユーザーは何を質問していますか?回答に満足していますか?
+2. **分析(Analyze)**:特定の質問でハルシネーションが発生したり、一部のツールが頻繁に失敗したりしていないか確認します
+3. **最適化(Optimize)**:キャンバスに戻り、プロンプトを編集したり、ナレッジベースにドキュメントを追加したり、ワークフローのロジックを調整します
+4. **公開(Publish)**:アップグレードしたバージョンをリリースします
+
+このサイクルを繰り返すことで、メールアシスタントはより賢く、より高速になっていきます。
+
+## おわりに
+
+**ここまでお付き合いいただきありがとうございます。あなたは今、新しい思考法を身につけた Dify ビルダーです:**
+
+```plaintext wrap
+タスクを分解する → ノードとツールを選ぶ → 適切なロジックで接続する → モニタリングして改善する
+```
+
+さあ、Dify の探索ページでテンプレートを開いてみましょう。それを分解・分析してみたり、日常業務の課題を解決するワークフローをゼロから構築してみてください。
+
+あなたの仕事がもっと軽くなり、想像力がもっと広がりますように。Dify で楽しく構築していきましょう。
diff --git a/zh/use-dify/tutorials/workflow-101/lesson-01.mdx b/zh/use-dify/tutorials/workflow-101/lesson-01.mdx
new file mode 100644
index 00000000..c4dcc13f
--- /dev/null
+++ b/zh/use-dify/tutorials/workflow-101/lesson-01.mdx
@@ -0,0 +1,51 @@
+---
+title: "第 1 课:什么是工作流"
+---
+
+你有没有发现,我们每天其实都在遵守着各种“流程”?比如“早上起床的流程”:
+
+1. 闹钟响 -\> 2. 关闹钟 -\> 3. 穿衣服 -\> 4. 洗漱 -\> 5. 吃早餐
+
+一步接着一步,我们最终完成一个任务的流程,这就叫做:工作流 (Workflow)。但要搭建一个给 AI 使用的工作流,我们还需要另外两个要素:开始需要什么(输入),以及最后能得到什么(输出)。
+
+你可以把工作流理解成**做菜的菜谱**。一份菜谱通常包含:
+
+1. 材料(输入):需要准备什么?
+2. 步骤(过程):每一步需要做什么?
+3. 成品(输出):最后做出什么菜?
+
+## 认识工作流
+
+Dify 的工作流,就是一份我们写给给 AI 看的“菜谱”。你需要提供:
+
+1. 材料(输入):就是你提供给 AI 的信息,比如一个问题、一篇文章。
+2. 步骤(过程):就是你让 AI 按照顺序依次完成的任务,比如“先总结一下”、“再把它翻译成英文”、“最后生成一条发布在社交媒体帖子”。
+3. 成品(输出):AI 按照上面的步骤,最终生成的结果。
+
+所以,工作流就是你指挥 AI 按照步骤完成任务的流程图。
+
+下图是一个在 Dify 里构建的身份证信息提取的工作流:
+
+
+ 
+
+
+### 节点
+
+让我们再来看下上面的身份证信息提取流程,整个流程其实就是由**上传图片、提取信息、整合信息**这几个环节串联起来的。
+
+每一个环节,就是一个节点。它们各司其职,就像完成接力赛一样,完成任务后,接力棒就会交给下一个节点。
+
+Dify 为你准备了不同的节点,比如:LLM (大模型节点)、知识检索节点(Knowledge Retrieval)、条件分支节点、工具节点等,它们能够满足你的不同需求。
+
+你只需要通过选择和拖拽,将不同节点连接起来,像搭积木一样,轻松构建出自动化工作流。在构建的过程中,你只需要思考做什么并专注于按什么顺序即可。
+
+## 动手实践
+
+1. 前往[ Dify 官网](https://dify.ai/zh),点击右上角的立即开始,注册 Dify 账号。
+2. 前往探索页面,查看标题下方标记为工作流的应用模板。
+
+
+ 
+
+3. 打开并运行一个你感兴趣的工作流模板,根据每一个节点,大致了解每一步是做什么的
\ No newline at end of file
diff --git a/zh/use-dify/tutorials/workflow-101/lesson-02.mdx b/zh/use-dify/tutorials/workflow-101/lesson-02.mdx
new file mode 100644
index 00000000..d93c2edb
--- /dev/null
+++ b/zh/use-dify/tutorials/workflow-101/lesson-02.mdx
@@ -0,0 +1,156 @@
+---
+title: "第 2 课:流程的头和尾(开始与输出节点)"
+sidebarTitle: "第 2 课:流程的头和尾"
+---
+
+上一课我们把工作流比作一份菜谱。今天我们要做的,就是进入 Dify 后厨,认识一下我们的操作台并开始基础制作环节。
+
+## 创建应用
+
+
+
+ 点击顶端的**工作室**,在左侧创建应用中,点击**创建空白应用**。
+
+
+ 
+
+
+
+ 在弹窗中的选择应用类型里选择**工作流**,填写**应用名称&图标和描述**后,点击**创建**。
+
+
+ 
+
+
+
+ 在弹窗中,你会看到一个包含两个选项的弹窗。这两个选项,代表不同的运行逻辑,让我们来做个简单的了解。
+
+ - **用户输入**
+
+ 你可以理解为**手动模式**。当你/用户输入具体信息(如问题、指令)后,才会开始运行。
+
+ 使用场景:对话机器人、写作助手、翻译等多数 AI 应用。
+ - **触发器**
+
+ 你可以理解为**自动模式**。它依靠特定的信号(如特定时间、事件)自动运行。
+
+ 使用场景:每天定时发新闻、当特定事项完成后再运行这个工作流。
+
+ 我们在这一课,将搭建 AI 邮件助理,需要我们输入邮件内容,所以在这里我们选择**用户输入**。
+
+
+ 
+
+
+
+
+## 认识画布(Orchestration Canvas)
+
+选择完开始节点后,你会看到一片空白的区域,这里就是你用来编排工作流的画布。
+
+
+ 
+
+
+还记得我们在第一课里学到的节点吗?现在画布上出现的用户输入节点,就是我们工作流的起点。任何一个完整的工作流,都离不开一副最基础的骨架——**开始节点 (头) 和输出节点 (尾)**。
+
+## 开始节点 (Start Node)
+
+
+ 
+
+
+开始节点是整个工作流的唯一入口,相当于准备材料环节。它的作用是定义工作流开始时,需要从用户那里接收的信息。我们刚刚选择了用户输入作为开始节点。
+
+### 核心概念:变量 (Variable)
+
+你可以把变量想象成贴着不同标签的**储物盒**,每个盒子专门放一种特定的信息。
+
+比如,如果你要做一个旅游计划生成器,你需要用户提供 `目的地` 和 `旅行天数` 这两个信息。然而,每个用户提供的目的地和旅行天数又都不同,所以每次运行时,这些盒子里装的内容都是变化的。
+
+这就是变量的意义——让你的工作流能够灵活处理每一次不同的请求。
+
+## 输出节点 (Output Node)
+
+
+ 
+
+
+这是工作流的结尾,相当于出菜。
+
+比如,刚刚的旅游计划生成器,当用户提供目的地:苏州,旅行天数:5,那么在结束节点,将会生成一个 5 天的苏州旅行计划。
+
+开始节点和输出节点定义了一个工作流最基础的输入和输出,构成了它的基本框架。
+
+## 动手实践:AI 邮件助理
+
+搭建一个 AI 邮件助理工作流的基础框架。
+
+
+
+ 你可以:
+
+ - 在刚刚创建的应用画布上,直接开始编排。
+ - 或者,你也可以点击顶部的工作室 \> 在左侧创建应用中点击创建空白应用 \> 在弹窗中选择工作流应用类型,填写应用名为邮件助理(记得在弹窗中选择**用户输入**)。
+
+
+ 如果你需要 AI 写一封回复邮件,你需要提供什么信息?
+
+ 没错,客户的名字和邮件原文。
+
+ 1. 点击**开始**节点,在右侧面板中的**输入字段**内,点击 **\+**。
+
+
+ 
+
+ 2. 在弹窗中,依次创建两个变量:
+ 1. **第一个变量(短文本)**
+
+
+ 
+
+ - 变量名称:`customer_name`
+ - 显示名称:客户名字
+ - 其他选项保持默认
+ 2. **第二个变量(长文本)**
+
+
+ 
+
+ - 字段类型:点击后在下拉菜单中选择**段落**(这样输入框能够涵盖更多内容,方便粘贴邮件)
+ - 变量名称:`email_content`
+ - 显示名称:客户邮件原文
+ - 最大长度:手动修改为 **2000**。确保能够涵盖完整的邮件内容
+
+
+ **变量名称 vs 显示名称**
+
+ 你可能已经留意到,我们为每个变量都设置了两个名字,他们有什么区别呢?
+ - **变量名称**:这是运行时,给系统看的名字。它必须是**独一无二**的,并且只能使用英文字母、数字和下划线 `_`,不能有空格。
+ - **显示名称**:这是给我们自己和最终用户看的名字。你可以使用任何语言(比如中文),让它变得清晰易懂。这个名字会显示在最终应用的输入框前面。
+
+
+
+ 在画布上点击右键,选择**添加节点**,选择**输出**节点。
+
+
+ 
+
+
+
+
+现在,你的画布上有一个准备好接收客户名字和邮件原文的**开始节点**,和一个等待输出最终邮件的**结束节点**。
+
+
+ 
+
+
+我们已经成功搭建了工作流的基本框架,画布中间的空白区域,就是我们下一课要放置 LLM 节点来处理这些信息的地方。
+
+## 小挑战
+
+**任务**:如果你需要创建一个旅游计划生成器,这个工作流的开始节点,需要包含哪些变量?
+
+
+ 探索输入字段里**添加变量**的字段类型。
+
\ No newline at end of file
diff --git a/zh/use-dify/tutorials/workflow-101/lesson-03.mdx b/zh/use-dify/tutorials/workflow-101/lesson-03.mdx
new file mode 100644
index 00000000..29bd356c
--- /dev/null
+++ b/zh/use-dify/tutorials/workflow-101/lesson-03.mdx
@@ -0,0 +1,239 @@
+---
+title: "第 3 课:工作流的大脑(LLM 节点)"
+sidebarTitle: "第 3 课:工作流的大脑"
+---
+
+
+ 
+
+
+目标:为邮件助理装上大脑,掌握 AI 节点(LLM)的用法,并学会如何测试与调试工作流。
+
+如果说开始节点是准备材料,结束节点是出菜,那么大型语言模型(LLM)节点就是负责烹饪的主厨。它是工作流的大脑和核心,负责执行所有思考、分析、创作等智能任务。你想让 AI 总结文章、写代码、回答问题或是创作文案,都是通过这个节点来完成的。
+
+## 配置大型语言模型
+
+我们需要在 LLM 节点选择使用大型语言模型,让我们来快速配置一下。
+
+
+
+ 点击头像,在出现的菜单中点击**设置**。
+
+
+ 
+
+
+
+ 在左侧的设置中点击**模型供应商**,在安装模型供应商里选择 OpenAI,点击**安装**。
+
+
+ 
+
+
+ 
+
+
+
+ 安装成功,你会在模型列表中看到名为 OpenAI 的大型语言模型。点击右上角 **ESC**,回到编排窗口。
+
+
+
+## 看懂大语言模型的能力标签
+
+正如每位主厨都有自己的拿手菜系,不同的大语言模型也有自己擅长的领域。在 Dify 里选择模型时,你会看到它们身上挂着一些标签,这些标签就是为了告诉我们它擅长什么。
+
+
+
+ 拥有这个标签的模型,擅长对话、写文章、做总结。我们今天的邮件助理工作流就需要带有这个标签的大型语言模型。
+
+
+ 这个数字代表模型的上下文窗口,可以理解为它的**短期记忆有多强**。
+
+ K 代表千,1048K 就意味着它能一次性处理大约一百万个词(Token)的超长信息,比如读完一本很厚的书,还能记住开头的情节。
+
+
+ 包含这个标签的大型语言模型,对于处理长文档、长对话非常有帮助。
+
+
+
+ 模态指的是信息的类型。多模态就是指模型能处理多种类型的信息,而不仅仅是文字。
+
+ **VISION(看图识字)**
+
+ 带有这个标签的模型,不仅能理解文字,还能看见图片!你可以给它发送一张图,然后问它图里包含什么?
+
+ **AUDIO(声音辨识)**
+
+ 带有这个标签的模型,可以听懂音频文件。你可以给它一段录音,让它转写成文字或者总结内容。
+
+ **VIDEO(视频分析)**
+
+ 该模型能理解视频内容。
+
+ **DOCUMENT(文档阅读)**
+
+ 该模型可以直接阅读和理解你上传的文档,比如 PDF 或者 Word 文件,然后回答相关问题。
+
+
+
+了解这些标签,能帮助你在未来为不同的任务,挑选最合适的主厨。对于我们今天的邮件助理,选择一个基础的 **CHAT** 模型就足够了。
+
+## 动手实践 1:添加 LLM 节点
+
+
+
+ 打开刚刚第二课创建的邮件助理工作流。
+
+
+ 在开始和结束节点中的空白处,点击右键选择添加节点 - LLM 节点。选中 LLM 节点,在右侧面板的模型内,选择模型 **gpt-4o-mini**。
+
+
+ 
+
+
+
+ 点击 LLM 节点两侧的加号,分别连接开始和结束节点。
+
+
+ 
+
+
+
+
+接下来,我们需要告诉大型语言模型需要做什么。点击 LLM 节点,在右侧的面板中,找到 System 输入框。在这里,你可以给 AI 输入具体的任务指令(Prompt)。
+
+
+ 
+
+
+### 核心概念:提示词 (Prompt)
+
+你可以理解为给 AI 下达的具体任务指令,你告诉 AI 做什么以及怎么做。
+
+最关键的是,你可以在 Prompt 中,使用来自开始节点的变量。这样,AI 就能根据你每次提供的不同材料而变化。在 Dify 中,你只需要用变量名称这样的格式(我们在第一课动手实践开始节点里的:`customer_name` 和 `email_content`),就可以把变量嵌入到你的指令中。
+
+## 动手实践 2:编写 Prompt
+
+现在,我们将一起编写提示词,同时把变量融入其中。
+
+
+
+ 回到刚才的邮件助理工作流,我们将在 LLM 节点中的 System 输入框内输入 Prompt,让我们用简洁明确的方式写出指令。
+
+ ```plaintext wrap
+ You are a professional customer service manager. Based on the customer's email, please draft a professional reply.
+ Requirements:
+ 1. Start by addressing the customer name with a friendly tone.
+ 2. Thank them for their email.
+ 3. Let them know we have received it.
+ 4. Sign off as Anne.
+ ```
+
+
+ 用户消息是你发送给模型的内容——可以是提问、请求或模型需要完成的任务。 在此工作流中,客户姓名和邮件内容每次都会发生变化。与其手动输入,我们不如在用户消息中添加**变量(Variables)**。
+
+ 1. 点击系统框下方的 **Add Message(添加消息)** 按钮。
+ 2. 在用户消息框中,输入 `customer name:`。
+ 3. 按下键盘上的 `/` 键。
+ 4. 此时会弹出变量选择菜单,点击 **customer_name**。
+ 5. 按下 **Enter** 键开始新的一行,输入 `email content:`。
+ 6. 再次按下 `/` 键并点击 **email_content**。
+
+
+ 
+
+
+
+ 想插入变量的时候,只要按下键盘上的 `/`,在弹出的菜单里选中你需要的变量,就能轻松搞定。
+
+ 4. 最终的 Prompt 如下图所示。
+
+
+ 
+
+
+
+
+
+ 至此,你已经完成了首个工作流的完整编排。
+
+
+## 运行与调试
+
+材料备好了,主厨也到位了,指令也写好了,那么工作流的出品如何呢?在正式出菜之前,让我们先试个菜。
+
+测试是确保工作流稳定运行的关键一步,它能帮助我们提前发现并解决潜在的问题。
+
+### 小科普:检查清单(Checklist)
+
+检查清单就像你的私人体检医生,它会实时扫描你的工作流,自动找出配置不完整或者明显的错误(比如有节点没有连接好)。
+
+在点击运行前先看一眼这里,能帮你提前了解工作流哪里有不完整的地方。
+
+### 动手实践 3:测试与调试
+
+
+
+ 看看画布右上角,那个检查清单图标是不是出现了数字 1? 这意味着,你还有一个地方没有处理好。
+
+
+ 
+
+
+
+ 点击它,你会看到一个警告:**输出变量不能为空**。这意味着输出变量没有收到任何内容。
+
+ 想象一下:主厨(LLM 节点)已经把菜做好了,但是服务员(输出节点)没有拿到菜,也根本不知道该把菜端给你。
+
+
+ 1. 点击输出节点。
+ 2. 在右侧面板的输入变量旁,点击加号(+)。
+ 3. 在左侧变量名中,填入 `email_reply`。
+ 4. 在右侧选择框,选择 LLM 节点下的 `{x} text`。
+
+
+ 
+
+
+
+ 完成后,你会发现检查清单上的数字消失了,让我们来进行测试运行。点击画布右上角的**运行**,输入客户名字和客户邮件原文,点击**开始运行**。
+
+
+ 
+
+
+
+ ```text 邮件测试示例
+ 客户名字:Amanda
+
+ 客户邮件原文:
+ Hi there,
+
+ I'm writing to ask for more information about Dify. Could you please tell me more on it?
+
+ Best regards,
+ Amanda
+ ```
+
+
+
+
+ 你会发现,每个节点都运行成功(右侧有绿色的打勾符号),右侧详情处的状态为 SUCCESS。
+
+
+
+
+ 恭喜你!你不仅完成了第一个工作流的搭建,并掌握了基础的测试和调试工作流的技巧。
+
+
+## 小挑战
+
+使用工作流,继续完成旅游攻略生成器的搭建。
+
+
+ 探索 Dify 的**提示词生成器**。
+
+
+ 
+
+
\ No newline at end of file
diff --git a/zh/use-dify/tutorials/workflow-101/lesson-04.mdx b/zh/use-dify/tutorials/workflow-101/lesson-04.mdx
new file mode 100644
index 00000000..c86f6837
--- /dev/null
+++ b/zh/use-dify/tutorials/workflow-101/lesson-04.mdx
@@ -0,0 +1,197 @@
+---
+title: "第 4 课:小抄(知识检索)"
+sidebarTitle: "第 4 课:小抄"
+---
+
+经过前三课的学习,我们的邮件助理已经初见雏形,能够草拟出基础的回复邮件。
+
+但是,如果遇到公司特有的产品细节或者价格,它很可能会出现幻觉 (Hallucination)——也就是我们常说的一本正经地胡说八道,因为信息不准而出错。
+
+那么我们该如何解决 AI 出现幻觉的问题呢?我们给它一本小抄。
+
+## 检索增强生成 / RAG
+
+解决幻觉的这套方法,叫做 RAG (Retrieval-Augmented Generation),中文名称是检索增强生成。简单来说,RAG 就是让 AI 从凭空想象变成了有据可查,这是构建专业 AI 应用最核心的技术之一。而它的名字已经包含了这三个步骤。
+
+**1. 检索(Retrieval)- 找菜谱**
+
+根据用户的提问,从知识库中检索(查询)出最相关的信息片段。这就好比听到菜名宫保鸡丁,你先去找到这道菜的菜谱。
+
+**2. 增强(Augmented)- 拿到菜谱和准备食材**
+
+将检索到的信息片段(上下文),与用户的原始问题一起,组合并转换成给大型语言模型一个更新且更丰富的提示词(Prompt)。你可以理解为把这份菜谱放在手边,方便你随时查阅,同时准备好对应的食材。
+
+**3. 生成(Generation)- 烹饪**
+
+大语言模型根据这个包含上下文的新提示词(Prompt),生成一个有事实依据的和更准确的回答。你按照菜谱上的步骤,完成烹饪宫保鸡丁。
+
+## 知识检索 (Knowledge Retrieval) 节点
+
+这就像是给 AI 邮件助理旁边,放了一些资料。它会先根据用户的问题,在这本小抄里查找最相关的那几页,然后把找到的内容连同用户的问题一起进行思考。
+
+在接下来的动手实践中,我们将使用知识库检索节点,给我们的 AI 邮件助理一些官方的小抄,让它在回答之前有据可查。
+
+### 动手实践 1:创建知识库
+
+
+
+ 点击顶部的**知识库**,在左侧点击**创建知识库**。
+
+
+ 
+
+ 进入知识库后,你会看到多种创建文档的方式,比如从 Notion 同步、从网页抓取等,这让 Dify 可以灵活地接入不同来源的数据。
+
+ 在今天的课程中,我们将学习最基础也是最常用的一种方式:上传本地文件。点击[此处](https://drive.google.com/file/d/1imExB0-rtwASbmKjg3zdu-FAqSSI7-7K/view)下载 Dify 简介文档,我们将使用它来做测试。
+
+
+ 点击**选择文件**,上传刚刚下载的文本内容,点击下一步。
+
+
+ 
+
+
+
+ 你可以把这里当作一个文本预处理的步骤。因为 AI 在检索信息时,直接阅读一整篇长文档效率很低。所以在这个页面,Dify 会自动帮你把文档切成更小的、逻辑连贯的段落(就像把一本书拆分成一张张知识卡片),并去掉一些不必要的格式,方便后续的检索和理解。
+
+ **分段设置**
+
+ 此处自动将你的长文本切分成更易于检索的小段落。我们保持选择通用模式即可。
+
+
+ 
+
+ **索引方式**
+
+ - **高质量**:会消耗 Token 调用 AI 模型来处理文本,让检索结果更精准。
+ - **经济**:不消耗 Token,但会牺牲一定的准确性。
+
+ 在处理结构和内容相对简单的文本时,我们可以选择经济模式。
+
+
+ 
+
+
+
+ 文档处理完成后,我们需要对召回设置进行最后一次检查。在这里,你可以配置 Dify 查找信息的方式。
+
+ 在经济模式下,检索设置仅支持倒排索引。
+
+
+ 
+
+ - **倒排索引**
+
+ 这是 Dify 使用的默认结构。可以把它想象成实体书背面的索引页——它列出了关键术语,并准确告诉 Dify 这些术语出现在哪些页面上。这让 Dify 能够根据关键词立即跳转到正确的知识卡片,而不是从头到尾阅读整本书。
+ - **Top K**
+
+ 你会看到一个设置为 3 的滑动条。这告诉 Dify:当用户提出问题时,从手册中找出前 3 张最相关的知识卡片展示给 AI。如果你将其设置得更高,AI 会获得更多的上下文参考,但如果设置得过高,过量的信息可能会让 AI 难以处理。
+
+ 目前,我们只需保持默认设置即可——它们已经可以满足我们的需求。
+
+
+ 
+
+
+
+ 点击**保存并处理**。
+
+
+
+
+ **太棒了!**
+
+ 你已经成功创建了第一个知识库。接下来我们将使用知识库升级我们的 AI 邮件助理。
+
+
+### 动手实践 2:添加知识检索节点
+
+
+
+ 1. 回到我们的邮件助理工作流。
+ 2. 鼠标悬停在开始节点和 LLM 节点中间的连线,点击出现的加号,选择**知识检索**节点。
+
+
+ 
+
+
+
+ 1. 点击知识检索节点,在右侧面板**知识库**中,点击 **\+** 按钮。
+
+
+ 
+
+ 2. 在弹出的选择引用知识库窗口中,点击选中 **What's Dify**,点击**添加**。
+
+
+ 
+
+
+
+ 知识库已经准备就绪,我们如何确保 AI 会通过知识库来搜索邮件中的答案呢?
+
+ 停留在当前面板,来到上方的**查询文本**,点击后选择 `email_content`。
+
+ 通过这种方式,我们是在告诉 AI:把客户的消息作为搜索关键词,去翻阅我们的知识库手册并寻找匹配信息。 如果没有设置查询文本,AI 就像是在盯着一本合上的书,无从下手。
+
+
+ 
+
+
+
+
+这样,邮件助理就会以客户的邮件原文作为关键词,去知识库中检索最相关的答案了。
+
+### 动手实践 3:升级 AI 邮件助理
+
+上下文已经准备好了,我们还需要在提示词(Prompt)里告诉大型语言模型先阅读这份资料,再生成邮件回复。
+
+
+
+ 1. 点击 LLM 节点,在模型设置的下方找到**上下文 (Context)**。
+ 2. 在上下文内选择知识检索里的 `{x} result`。
+
+
+ 
+
+
+
+ 在提示词中输入 `/` 符号,在弹出的变量列表中,选择最下方的**上下文**即可。然后补充完整这个 Prompt,需要根据上下文来回答客户的问题。
+
+
+ 
+
+
+
+
+**太棒了!** 你已经完成了本次课程中最具挑战性的一步。你的邮件助理现在不仅拥有了大脑,更拥有了一本可以随时查阅的小抄。让我们来看看效果如何吧。
+
+你可以直接使用下方的邮件示例,点击运行进行测试。
+
+
+
+```text 邮件测试示例
+客户名:Amanda
+
+客户邮件原文:
+Hi,
+
+What does the name 'Dify' actually stand for, and what can it do for my business?
+
+Best regards,
+Amanda
+```
+
+
+
+你会发现,AI 生成的邮件回复内容是基于知识库里的文本完成的。
+
+
+ 
+
+
+## 小挑战
+
+1. 在刚才的工作流中,如果用户的提问超出了知识库的内容,该如何应对这样的情况?
+2. 在你自己的工作或学习中,有哪些信息可以被制作成知识库?
+3. 探索文本分段与清洗页面中,分段设置和检索设置、索引方式和默认配置的三者关系。
\ No newline at end of file
diff --git a/zh/use-dify/tutorials/workflow-101/lesson-05.mdx b/zh/use-dify/tutorials/workflow-101/lesson-05.mdx
new file mode 100644
index 00000000..97027b94
--- /dev/null
+++ b/zh/use-dify/tutorials/workflow-101/lesson-05.mdx
@@ -0,0 +1,172 @@
+---
+title: "第 5 课:工作流的岔路口(分类与执行)"
+sidebarTitle: "第 5 课:工作流的岔路口"
+---
+
+目前,我们的邮件助理无论收到什么邮件,都会用同一套流程去处理。但这显然不够智能。一封询问产品价格的邮件和一封提交 BUG 的邮件,它们的回复口吻、需要查询的知识库都是完全不同的。
+
+如何让我们的助理学会看人下菜碟,对不同类型的邮件进行差异化处理呢?让我们为工作流设置一个十字路口,它能根据不同的信号,让流程走向不同的轨道。
+
+## 条件分支 (If/Else) 节点
+
+
+ 
+
+
+工作流的十字路口。它会检查我们设定的条件(比如邮件内容是否包含某个关键词?),根据检查结果,让流程走向对应的方向。
+
+### 动手实践 1:添加条件分支节点
+
+现在,让我们继续升级邮件助理,让它能够通过关键词识别,自动区分和 Dify 有关的邮件和其他邮件。
+
+
+
+ 将鼠标悬停在开始和知识检索的连接线,点击出现的加号,选择**条件分支**。
+
+
+ 1. 点击该节点,回到条件分支的右侧面板。
+ 2. 点击 IF 右侧的 **\+ 添加条件**按钮,选择 `{x} email_content`。
+
+
+ 
+
+ 3. 判断条件:保持默认的 **包含 (Contains)** 选项。在下方的输入值内填入 **Dify**。
+
+
+ 
+
+ 现在,IF 分支的完整逻辑就是:`如果邮件内容中包含了 Dify 这个词。`
+
+
+
+
+ **读懂十字路口的判断逻辑**
+
+ 在设置条件时,你会发现 Dify 提供了多种判断方式,就像给十字路口的红绿灯。
+
+ - **是 / 不是**
+
+ 完全等于或不等于某个值。可以把它想象成一把钥匙开一把锁,只有当变量内容和我们设定的值一模一样时,条件才算满足。
+ - **包含 / 不包含**
+
+ 文本中含有或不含某个关键词。这是我们今天将要使用的功能。
+ - **开始是 / 结束是**
+
+ 判断文本的开头或结尾是什么。
+ - **为空 / 不为空**
+
+ 判断一个变量里有没有内容。比如,判断用户是否上传了附件。
+
+ 了解这些,你就能设置出准确和灵活的判断规则,继而构建更智能的工作流。
+
+
+### 动手实践 2:规划不同处理路径
+
+现在我们有了十字路口,需要决定每条路上会发生什么。
+
+#### A. 相关邮件轨道(IF 分支)
+
+点击 IF 分支右侧的加号,拖拽出一条线,与我们已有的知识检索节点连接。
+
+这表明:当邮件原文内容中包含了 Dify 这个词,则执行我们上一课创建的、能够查询知识库的专业回复流程。
+
+
+ 
+
+
+#### B. 无关邮件轨道(ELSE 分支)
+
+对于其他所有不包含 Dify 的邮件,我们创建一个简单的通用回复流程。
+
+
+
+ 点击 ELSE 右侧的加号,选择 LLM 节点。
+
+
+ 配置这个新的 LLM 2 节点。点击它,在 SYSTEM Prompt 中输入一个通用的礼貌回复提示词,你可以复制粘贴下方的内容
+
+ ```plaintext wrap
+ You are a professional customer service manager. Based on the customer's email, kindly inform the user that no relevant information was found and provide relevant guidance.
+
+ Requirements:
+ 1. Address the customer name in a friendly tone.
+ 2. Thank them for their letter.
+ 3. Keep the tone professional and friendly.
+ 4. Sign off as "Anne."
+ ```
+
+
+ 1. 点击系统框下方的 **Add Message(添加消息)** 按钮。
+ 2. 在用户消息框中,输入 `customer name:`。
+ 3. 按下键盘上的 **/** 键。
+ 4. 此时会弹出变量选择菜单,点击 **customer_name**。
+ 5. 按下 **Enter** 键开始新的一行,输入 `email content:`。
+ 6. 再次按下 **/** 键并点击 **email_content**。
+
+
+ 
+
+
+
+
+现在我们有两条处理轨道了,它们分别生成了不同类型的回复。你可能会想,我们可以把它们都直接连接到各自的结束节点。对于两条轨道来说,这还算简单。但如果我们有 5 条、10 条甚至更多的分支(比如处理商务合作、投诉建议等),把每一条线都拉到最后的结束节点,整个工作流会看起来比较混乱。
+
+为了让工作流保持整洁和清晰,我们需要一个交通枢纽来将所有分开的轨道重新合并回一条主干线上。
+
+## 变量聚合器
+
+
+ 
+
+
+可以把它想象成一个漏斗或一个交通枢纽。无论上游有多少不同分支的数据流,变量聚合器都能将它们汇集到一个出口,确保数据流的整洁和稳定,方便后续统一处理。
+
+### 动手实践 3:添加变量聚合器
+
+
+
+ 1. 选中结束节点和 LLM 之间的连线,然后进行删除。
+ 2. 在画布上点击右键,选择**添加节点**,选择**变量聚合**节点。
+
+
+ 
+
+
+
+ 将两个 LLM 节点连接至变量聚合器。
+
+
+ 1. 点击变量聚合器节点。
+ 2. 在右侧的面板中点击**变量赋值**右侧的 **\+**。
+ 3. 依次选择 LLM 和 LLM 2 节点中输出的 **text**。
+
+
+ 
+
+ 这样一来,无论哪一个 LLM 节点生成了回复,变量聚合器都会自动把内容汇集起来,再统一交给结束节点。
+
+
+ 1. 将变量聚合器连接至结束节点。
+ 2. 点击结束节点,在右侧面板删除原本的输出变量,改为变量聚合器的输出。
+
+
+ 
+
+ 现在的工作流如图所示:
+
+
+ 
+
+
+
+ 点击**运行**,你可以自行填入客户名字并分别测试包含 Dify 和不含 Dify 关键词的运行结果,看看输出结果。
+
+
+
+## 小挑战
+
+如果需要回复商务合作类型的邮件,工作流需要怎样修改?
+
+
+ 别忘了在知识库新增与商务合作有关的文档。
+
\ No newline at end of file
diff --git a/zh/use-dify/tutorials/workflow-101/lesson-06.mdx b/zh/use-dify/tutorials/workflow-101/lesson-06.mdx
new file mode 100644
index 00000000..22390573
--- /dev/null
+++ b/zh/use-dify/tutorials/workflow-101/lesson-06.mdx
@@ -0,0 +1,205 @@
+---
+title: "第 6 课:处理多个任务(参数提取 & 迭代)"
+sidebarTitle: "第 6 课:处理多个任务"
+---
+
+我们的邮件助理已经能够处理相对简单的邮件了,但是,如果邮件助理收到一封邮件,内容是:
+
+> 您好,我想问一下 Dify 是什么?另外,它都支持哪些模型?还有免费套餐吗?
+
+如果我们直接把整封邮件丢给之前的 AI 助理,它可能会只回答第一个问题,或者将两个问题混在一起回复模棱两可的内容。我们需要一种方法,能先把邮件里的所有问题都找出来,然后利用我们第四课创建的知识库,对每个问题逐一进行查询和回答。
+
+## 参数提取器
+
+
+ 
+
+
+你可以把它想象成一位*信息搜集员*。它的工作就是阅读一段文本(比如邮件),然后根据你给定的规则,把里面所有符合条件的关键信息(比如所有独立的问题)都提取出来,整理成一个列表。
+
+### 动手实践 1:添加参数提取节点
+
+现在,我们来继续升级邮件助理,让它能准确地回答客户的每一个问题。在开始之前,我们先移除以下节点:知识检索,条件分支,LLM,LLM 2 和变量聚合器。
+
+
+
+ 在开始节点后,添加**参数提取器**节点。
+
+
+ 
+
+
+
+ 点击参数提取器,在右侧面板的**输入变量**中点击设置变量值,在下拉菜单中选择 `email_content`。
+
+
+ 
+
+ 由于 AI 并不知道我们需要提取邮件里的那些信息,所以我们需要明确告诉它,我们需要收集邮件里的所有问题。
+
+
+ 在下方的**提取参数**中,点击右侧的加号,后会弹出一个添加提取参数的窗口。在名称内,我们可以把这个参数命名为 `question_list`,即邮件内提取出的问题列表。
+
+
+ 
+
+
+ **参数类型**
+
+ 如果说添加提取参数是一个搜集员,那么类型就相当于篮子。你需要将收集的信息放到对应的篮子里。
+
+ **单项类型(只装一个)**
+
+ - **String (文本)**:用来装单个文本信息,比如一个客户的名字。
+ - **Number (数字)**:用来装单个数字,比如订单数量。
+ - **Boolean (布尔值)**:用来装是或否这样的判断结果。
+
+ **列表类型(装多个)**
+
+ - **Array[String]**(文本列表):Array 代表列表,String 代表文本。所以,`Array[String]` 就意味着,我们要用一个能装多个文本的篮子,比如邮件里的所有问题。
+ - **Array[Number]**(数字列表):用来装多个数字,比如一份清单里的所有商品价格。
+ - **Array[Boolean]**(布尔值列表):用来装多个是/否判断结果。比如,检查一份包含多个待办事项的清单,返回每一项是否完成的结果,如 `[是,否,是]`。
+ - **Array[Object]**(对象列表):这是更高级的类型,用来装多个结构化信息包,比如一份包含姓名和电话的完整通讯录。
+
+
+
+ 1. 基于上面的参数类型,我们需要为邮件内容选择 `Array[String]`。
+ 2. 接着,可以在描述内添加补充内容,比如:用户在邮件中提出的所有问题。完成后,点击**添加**。
+
+
+ 
+
+
+
+ 在提取参数下方的**指令**输入框中,输入清晰的指令,告诉 AI 如何执行提取。
+
+ 例如:请从文本中提取所有独立的问题,每一个问题作为列表中的一项。
+
+
+
+这样,这个节点就能在邮件中找到所有独立的问题了。接下来,我们需要让 AI 对每个提取到的问题进行先查询再回答的操作。
+
+## 迭代
+
+
+ 
+
+
+这就像是给助理配备了一个*分身*。当你把一个列表(比如上面提取到的问题列表)交给它时,它会为列表中的每一个项目,都单独执行一遍你设定好的子流程(比如查询知识库并回答)。
+
+### 动手实践 2:配置迭代节点
+
+
+
+ 1. 在参数节点后,新增迭代节点。
+ 2. 点击迭代节点,在右侧面板的输入中,选择参数提取器下的 `{x} question_list`。
+ 3. 输出变量暂时保持默认空白。
+
+
+ 
+
+ **迭代的高级选项**
+
+ 在迭代的面板中,你能看到其他选项,让我们快速进行了解。
+
+
+ 
+
+ **并行模式**:默认关闭。
+
+ - 关闭时,工作流会按顺序处理列表中的每一项(处理完问题 1,再处理问题 2)。
+ - 开启后,工作流会尝试同时处理列表中的所有项(类似 5 个厨师同时炒 5 个菜)。
+
+ **错误响应方法**:默认为错误时终止。
+
+ - **错误时终止**:意味着如果列表中的任何一项(比如第 2 个问题)在子流程中执行失败了,整个工作流就会立刻停止。
+ - **忽略错误并继续**:意味着即使第 2 个问题处理失败了,工作流也会跳过它,继续处理后续问题。
+ - **移除错误输出**:和忽略相似,在最终的输出结果列表中,移除这一项。
+
+ 回到工作流界面,你会看到迭代节点下方出现了一个子流程区域。所有在这个区域里的节点,都会为列表中的每一个问题单独运行一次。
+
+
+ 1. 在迭代框内,点击添加节点,选择**知识检索**。
+ 2. 将查询变量设置为当前迭代 `{x} item`。
+
+
+ 
+
+ 在迭代节点的子流程中,`item` 特指当前正在处理的列表项,也就是当前的这个问题。知识库选择我们之前创建的 Dify 简介。
+
+
+ 1. 在知识检索节点后,新增一个 LLM 节点。
+ 2. 像我们在第四课学习的配置那样,对 LLM 进行配置。别忘了上下文和在 System 里选择上下文和完成包含变量的提示词(Prompt)。
+
+
+ 还记得第四课吗?使用那些 Prompt 技巧,别忘了上下文!
+
+ 你可以参考下面的提示词:
+
+ **System**:
+
+ ```plaintext wrap
+ You are a professional Dify Customer Service Manager. Please provide a response to questions strictly based on the `Context`.
+ ```
+
+ **User**:
+
+ ```plaintext wrap
+ questions: Iteration/{x} item
+ ```
+
+
+ 
+
+ 由于迭代节点会对每个问题都生成一个答案,所以我们需要将这些答案汇总起来形成一份完整的回复邮件。
+
+
+ 1. 选中迭代节点。
+ 2. 在**输出变量**选择 LLM 下对应的变量。这样,迭代节点就会把每次循环生成的答案内容收集起来,形成一个最终的答案列表。
+
+
+ 
+
+
+
+ 在迭代节点后,再连接一个 LLM 节点。这个节点负责将所有问题的答案,整理成一封完整的邮件。
+
+ 别忘了在 System 里补充提示词(Prompt)并在用户信息中填入变量,你可以参考下面的提示词。
+
+ ```plaintext wrap
+ You are a professional customer service assistant. Please
+ organize the answers prepared for customer into a clear and
+ complete email reply.
+ Sign the email as Anne.
+ ```
+
+ **User**:
+
+ ```plaintext wrap
+ answers: Iteration/{x}output
+ customer: User Input/{x}customer_name
+ ```
+
+
+ 
+
+
+
+ 1. 点击右上角的检查清单,查看是否有遗漏的地方。根据提示,我们需要将输出节点与前面的节点连接,并为它选择一个正确的输出变量。
+ 2. 将输出节点与前面的 LLM 2 连接,点击输出变量,选择 LLM 2 下面的 text。
+
+
+ 
+
+
+
+
+现在你可以在一封邮件里包含多个问题,看看最终的邮件回复是否包含了每个问题的回复。
+
+## 小挑战
+
+除了提取问题,参数提取器还能提取什么?
+
+
+ 探索参数提取器内的类型。
+
\ No newline at end of file
diff --git a/zh/use-dify/tutorials/workflow-101/lesson-07.mdx b/zh/use-dify/tutorials/workflow-101/lesson-07.mdx
new file mode 100644
index 00000000..a555e3bc
--- /dev/null
+++ b/zh/use-dify/tutorials/workflow-101/lesson-07.mdx
@@ -0,0 +1,223 @@
+---
+title: "第 7 课:增强工作流(插件)"
+sidebarTitle: "第 7 课:增强工作流"
+---
+
+我们的邮件助理现在已经能够熟练地在我们的专属知识库里查找答案。但如果邮件内容包含了一个知识库里没有的、最新的问题呢?比如:Dify 最近有什么新功能发布吗?
+
+这个时候,邮件助理就不能只啃旧书本了,还需要学会上网搜索。
+
+工具和 [Dify Marketplace](https://marketplace.dify.ai/) 插件市场为你的工作流配备对应的工具,让它拥有了连接世界和执行多样任务的能力。
+
+## 工具
+
+
+ 
+
+
+在 Dify 中,工具通常以插件的形式存在于插件市场 (Dify Marketplace) 里,你可以在那里找到各种各样的官方或社区提供的工具,极大地扩展你的工作流能力。
+
+现在,我们在第六课完成的工作流上进行升级,让邮件助理能同时通过知识库查询和网页搜索来回答问题。
+
+### 动手实践 1:升级迭代的子流程
+
+我们需要先对提取出来的问题进行判断和分类,实现在必要时搜索的逻辑。
+
+开始之前,我们仅保留如下节点:用户输入,参数提取器和迭代节点。
+
+#### 第一步:知识库查询和基础判断
+
+
+
+ 1. 找到迭代内的子流程,仅保留知识检索节点,删除其他所有节点。
+ 2. 点击知识检索节点,在右侧面板内,确保查询变量为当前迭代下的 `{x} item`。
+
+
+ 在知识检索节点后,新增一个 LLM 节点,这个节点用来判断知识库能否回答提取出来的问题。
+
+ - 上下文选择知识检索中的 `{x} result Array [Object]`。
+ - 在 System 内,填入提示词:
+
+ ```plaintext wrap
+ Based on the `Context`, determine if the answer contains enough information to answer the questions. If the information is insufficient, you MUST reply with: "Information not found in knowledge base".
+ ```
+ - 在 User 内,引用对应的变量:
+
+ ```plaintext wrap
+ questions: Iteration/{x} item
+ ```
+
+
+ 
+
+
+
+
+当前工作流如图所示。
+
+
+ 
+
+
+#### 第二步:判断是否需要搜索
+
+
+
+ 在 LLM 节点后,新增条件分支节点。配置 If `LLM/{x} text` 包含**知识库未找到的相关信息(Information not found in knowledge base)**。
+
+
+ 
+
+
+
+ 让我们在 If 后连接搜索工具,这表明当知识库未找到相关回答信息时,使用搜索进行答案查询:
+
+ 1. 在 If 节点后,添加工具,在搜索框中输入 Google。
+ 2. 鼠标移至 Google,点击右侧的**安装**。在弹窗中再次点击**安装**。
+
+
+ 
+
+
+
+ 选择 Google 下方的谷歌搜索,点击该节点。
+
+
+ 
+
+
+
+ 当你第一次尝试让邮件助理使用谷歌搜索时,它可能会突然*卡住*,提示你需要先进行 API Key 授权配置,就像在上网前输入 Wi-Fi 密码,只有输入正确的密钥,Dify 才能安全地帮你访问外部世界的信息。
+
+
+ 
+
+ 1. 在谷歌搜索工具的设置页面中,点击**API Key 授权配置**,这时候页面会提示从 SerpAPI 获取您的 SerpAPI API key。点击跳转进入 SerpAPI 官网后,简单注册一个账号,就能立即获得你的专属 API Key。
+
+
+ API Key 是你访问外部世界的通行证,要妥善保管、避免泄露。
+
+
+ 
+
+ 2. 点击复制,让我们回到工作室,填写一个容易分辨的凭据名称,粘贴从平台获取的密钥。现在,你已经成功配置谷歌搜索的 API Key 了!
+ 3. 当 API Key 授权成功后,面板中会出现查询字段。选中 Google Search 节点,在查询字段中选择 `Iteration/{x} item`。
+
+
+ 
+
+
+
+ 现在,我们需要根据不同的路径使用不同的方式来回答问题。
+
+ **搜索回答路径**
+
+ 在 Google Search 节点后连接一个新的 LLM 节点,用于根据搜索结果回答问题。
+
+ **System**:
+
+ ```plaintext wrap
+ You are a Web Research Specialist. Based on Google Search, concisely answer the user's questions. Please do not mention the knowledge base in your response.
+ ```
+ **User Message**:
+
+ ```plaintext wrap
+ results: GOOGLESEARCH/{x} text
+ questions: Iteration/{x} item
+ ```
+
+
+ 
+
+ **知识库回答路径**
+
+ 在 Else 节点后,新增一个 LLM 节点来处理基于知识库的回答。
+
+ **System**:
+
+ ```plaintext wrap
+ You are a professional Dify Customer Service Manager. Strictly follow the `Context` to reply to questions.
+ ```
+ **User Message**:
+
+ ```plaintext wrap
+ questions: Iteration/{x} item
+ ```
+
+
+ 
+
+
+
+ 1. 在子流程中(迭代框内部),在最后添加一个变量聚合器节点,将它与 LLM 2 和 LLM 3 连接。
+ 2. 在变量聚合器面板中,将变量赋值设置为 `LLM 2/{x}text String` 和 `LLM 3/{x}text String`。
+
+ 这样做可以将两个可能的答案合并到一条路径上。
+
+
+ 
+
+
+
+
+当前工作流是这样的:
+
+
+ 
+
+
+#### 第三步:汇总输出
+
+我们已经完成了对邮件内容的判断,并根据判断执行不同的分支。现在我们要将输出进行汇总,完成一封最终的邮件。
+
+
+
+ 点击迭代节点,将输出变量设置为 `{x}Variable Aggregator/{x}output String`。
+
+
+ 
+
+
+
+ 在迭代节点后,连接一个新的 LLM 节点,用来总结所有的输出内容。你可以参考下面的提示词。
+
+ **System**:
+
+ ```plaintext wrap
+ You are a professional Customer Service Manager. Summarize all the answers of the questions, and organize a clear and complete email reply for the customer.
+ Do not include content where the knowledge base could not find relevant information.
+ Signature: Anne.
+ ```
+
+ **User Message**:
+
+ ```plaintext wrap
+ questions: Iteration/ {x} output
+ customer: User Input / {x} customer_name
+ ```
+
+
+ 
+
+
+
+ 在 LLM 节点后,添加输出节点。将输出变量设置为 `LLM 4/{x}text String`。
+
+
+ 
+
+
+
+
+我们已经完成了工作流的所有搭建和配置。现在我们的邮件助理可以根据知识库内容完成对应问题的回答,也能使用谷歌搜索进行补充回答。
+
+
+ 
+
+
+尝试发送一封包含知识库中肯定没有答案的问题的邮件,看看 AI 是否能够成功使用谷歌搜索找到相关答案。
+
+## 小挑战
+
+1. 条件分支节点还能根据哪些条件来决定执行下一步搜索?
+2. 探索 Marketplace,为工作流添加其他工具。
\ No newline at end of file
diff --git a/zh/use-dify/tutorials/workflow-101/lesson-08.mdx b/zh/use-dify/tutorials/workflow-101/lesson-08.mdx
new file mode 100644
index 00000000..85b366c6
--- /dev/null
+++ b/zh/use-dify/tutorials/workflow-101/lesson-08.mdx
@@ -0,0 +1,203 @@
+---
+title: "第 8 课:Agent 节点"
+sidebarTitle: "第 8 课:Agent 节点"
+---
+
+经过前面七课的学习,我们的邮件助理已经经历了几次重大升级:
+
+- 学会了查阅资料 —— 知识库检索
+- 学会了区分情况 —— 条件判断
+- 学会了处理多个任务 —— 参数提取 + 迭代
+- 还学会了使用工具来延展 —— 工具节点
+
+你会发现,我们的工作流不再是简单的一步接一步,而是变得越来越像一个能够自主分析、判断、并调用不同能力来解决问题的智能助手。这种更高级的工作流模式,正是我们今天要深入探讨的核心概念——Agentic Workflow。
+
+## Agentic Workflow
+
+Agentic Workflow 不再是简单的"输入 \> 处理 \> 输出",而是包含了思考、规划、使用工具、根据结果调整等一系列更智能步骤的工作流。它让 AI 从一个简单的执行者变成了一个能自主解决问题的智能体 (Agent)。
+
+## Agent 策略
+
+为了让 Agent 更聪明地工作,研究者们设计了很多思考模式,这些策略像锦囊妙计一样,指导 Agent 如何一步步解决复杂问题。
+
+- **ReAct (Reason + Act)**
+
+ 边思考边行动。Agent 会先思考我该做什么,然后执行一步(比如调用工具),观察结果,再根据结果进行下一步思考和行动,如此循环往复。
+- **Plan-and-Execute(规划与执行)**
+
+ 先制定详细的计划,再一步步严格执行计划。
+- **Chain of Thought(CoT - 思维链)**
+
+ 引导 AI 在回答问题前,先进行一步步的推理分析,把思考过程写出来,从而提高最终答案的准确性。
+- **Self-Correction(自我修正)**
+
+ 让 AI 对自己生成的初步结果进行审视和评估,发现其中的问题并进行修正。
+- **Memory(记忆)**
+
+ 为 Agent 配备短期或长期记忆机制,让它能记住之前的对话内容或关键信息,做出更连贯、更个性化的反应。
+
+在第七课中,我们花费了较多的时间对迭代的子流程进行升级,那我们有无更加简单的办法,让 AI 能够先查资料,查不到再上网搜索,最后再进行整合呢?
+
+答案是:使用 Dify 内的 **Agent 节点**。
+
+## Agent 节点
+
+你可以把它看作一个高度封装的智能单元。
+
+你只需要给它通过指令设定一个目标 (Goal),并提供它可能需要用到的工具 (Tools),它就能在内部自主地思考、规划、选择并调用工具(利用选定的 Agent 策略,如 ReAct,以及模型的 Function Calling 能力),直到完成你设定的目标。
+
+在 Dify 中,这极大地简化了构建复杂 Agentic Workflow 的过程。
+
+## 动手实践 1:使用 Agent 节点重构
+
+我们的目标是使用 Agent 节点替换掉迭代里的部分节点。
+
+
+
+ 让我们仅保留迭代节点里子流程的知识检索节点,移除其他节点。
+
+
+ 
+
+
+
+ 在迭代节点里的知识检索节点后,添加 Agent 节点。
+
+
+ 
+
+
+
+ 由于我们还没有安装 Agent 策略,所以我们需要前往 Marketplace 进行安装。
+
+ 点击 Agent 节点,在右侧面板中点击 **Agent 策略**,点击**在 Marketplace 中查找更多**。
+
+
+ 
+
+
+
+ 在 Dify Marketplace 页面里,点击 Agent 策略进入到对应插件页面,鼠标移动至 **Dify Agent 策略**。点击安装,并在弹窗中再次确认安装。
+
+
+ 
+
+
+
+ 让我们回到工作流页面,如果此时 Agent 策略仍然为空,可以刷新页面。点击 **Agent 策略**,选择 Agent 内的 **ReAct**。
+
+
+ 
+
+ **为什么选择 ReAct?**
+
+ ReAct(Reason + Act)是一种非常强大且通用的 Agent 策略。它允许 Agent 像人一样思考:先推理 (Reason) 下一步该做什么(比如我应该先查知识库),然后行动 (Act)(调用知识库工具),观察结果后,再进行下一步推理(比如知识库没找到,我需要搜索)和行动(调用搜索工具)。
+
+ 这种边想边做的模式非常适合处理需要动态决策和多工具协作的复杂任务。
+
+
+ ReAct 是一种思考策略,但要真正执行行动部分,AI 需要具备调用外部工具相应的技能,这种技能被称为**函数调用(Function Calling)**。
+
+ **为什么必须支持 Function Calling?**
+
+ 因为 Agent 节点的核心能力之一就是自主调用工具。Function Calling 是模型理解何时以及如何调用你提供的工具(如谷歌搜索)的关键技术。如果模型不支持此功能,Agent 就无法有效地与工具交互,也就失去了大部分自主决策的能力。
+
+ 所以,我们需要选择一个支持函数调用的模型。在这里,我们选择 **gpt-5**。
+
+
+ 
+
+
+
+ 在工具列表中添加**谷歌搜索**,确认启用。
+
+
+ 
+
+
+
+ 请清晰地告诉 Agent,它的任务目标、角色、上下文以及需要遵循的工作流程或者规则。你可以参考下面的指令,或者自行进行修改和补充。
+
+ ```plaintext wrap
+ Goal: Answer user questions about Dify products.
+
+ Steps:
+ 1. I have provided a relevant internal knowledge base retrieval result. First, judge if this result can fully answer the user's questions.
+ 2. If the context clearly answers it, generate the final answer based on the context.
+ 3. If the answer is insufficient or irrelevant, use the Google Search tool to find the latest information and generate the answer based on search results.
+
+ Requirement: Keep the final answer concise and accurate.
+ ```
+
+
+ 
+
+
+
+ 在指令中,我们要求 Agent 根据上下文进行判定。接下来,我们需要在上下文框内,选择对应的知识检索结果。
+
+ - **上下文**:选择知识检索内的 `Knowledge Retrieval / (x) result Array[Object]`(这会将知识库内容传递给 Agent)。
+ - **查询**:选择 `Iteration/{x} item`。
+
+ **为什么是 item,而不是最开始的 email_content 呢?**
+
+ 让我们快速回忆一下,我们使用参数提取器从 `email_content` 中提取了一个问题列表 `question_list`。现在,迭代节点正在逐一处理这个问题列表,而迭代里的 item 就是当前在处理的一个个问题。将 item 作为查询输入,能让 Agent 更聚焦于当前的任务,提高其决策和行动的准确性。
+
+
+ 
+
+
+
+ 选择 `Agent/{x}text String` 作为输出变量。
+
+
+ 
+
+
+
+
+
+ 🎉 我们完成了迭代节点的所有升级操作。
+
+
+由于迭代节点会为邮件中的每个问题都产生一个答案,继而输出一个包含所有问题答案的列表。所以我们需要在最后对这些答案进行一个总结,最终形成一份通顺和完整的邮件回复。
+
+## 动手实践 2:最后的拼装
+
+
+
+ 1. 在迭代节点后增加一个 LLM 节点,作为最终的邮件撰写人。
+ 2. 点击该节点,在右侧的 System 里输入 Prompt。你可以参考下面的 Prompt,或自行修改。
+
+ ```plaintext wrap
+ Combine all answers for the original email.
+ Write a complete, clear, and friendly reply to the customer.
+ Signature: Anne
+ ```
+ 3. 在 User Message 中分别将 answers、email content 和 customer name 替换成对应的变量。当前 LLM 节点如下所示。
+
+
+ 
+
+
+
+ 将输出变量设置为 LLM 的 text,并命名为 `email_reply`。
+
+
+ 
+
+
+
+
+最终的工作流如下:
+
+
+ 
+
+
+点击**运行**。提问一些混合问题,观察 Agent 节点如何自主决定何时使用上下文、何时使用谷歌搜索。
+
+## 小挑战
+
+1. 我们能否让 Agent 节点直接替换掉迭代节点?应该怎么样进行编排?
+2. 上下文还能选择哪些信息,帮助 Agent 更好地运行?
\ No newline at end of file
diff --git a/zh/use-dify/tutorials/workflow-101/lesson-09.mdx b/zh/use-dify/tutorials/workflow-101/lesson-09.mdx
new file mode 100644
index 00000000..830a02af
--- /dev/null
+++ b/zh/use-dify/tutorials/workflow-101/lesson-09.mdx
@@ -0,0 +1,94 @@
+---
+title: "第 9 课:排版设计师(模板)"
+sidebarTitle: "第 9 课:排版设计师"
+---
+
+回顾第八课,我们使用最后的 LLM 节点产出一篇完整的回复邮件。
+
+虽然,我们在这个 LLM 节点内的 Prompt 里告知了邮件内需要每一个问题对应一个答案,但仍然会有每封邮件输出格式不统一的情况。
+
+为了解决这个问题,我们需要一个专属的排版小助手,在最终生成邮件之前,把所有的内容整理成工整和标准的格式。
+
+## 模板转换
+
+你可以将它理解成排版设计师,它能够接收一个或者多个输入变量(比如我们的答案列表),然后按照你设置好的模板,将这些变量重新组合、排版,最终输出一段格式统一的文本。
+
+## 动手实践:优化邮件排版
+
+
+
+ 既然模板节点将会负责处理问候语和落款,我们需要告诉 LLM 只专注于回答问题本身就行。你可以复制并粘贴下方的提示词,也可以自由修改。别忘了在用户消息(User Message)中把文本替换成相应的变量。
+
+ ```plaintext wrap
+ Combine all answers for the original email. Write a complete, clear, and friendly reply that only includes the summarized answers.
+
+ IMPORTANT: Focus SOLELY on the answers. Do NOT include greetings (like "Hi Name"), do NOT write intro paragraphs (like "Thank you for reaching out"), and do NOT include signatures.
+ ```
+
+
+ 在 LLM 的 User 框内,分别列出并插入对应的变量。
+
+
+ 
+
+
+
+ 在 LLM 节点之后,点击 `+` 号添加一个模板节点。
+
+
+ 
+
+
+
+ 我们需要把原材料交给我们的排版设计师,让它知道该排版哪些内容。
+ 点击模板节点,找到输入变量(Input Variables)区域,并添加以下这两个变量:
+
+ - `customer`:选择 `User Input / {x} customer_name String`
+ - `body`:选择 `LLM / {x} text String`
+
+
+ 
+
+
+
+ **什么是 Jinja2?**
+
+ 简单来说,Jinja2 就是一种让你把变量(比如答案列表)按照你想要的格式,填入到一个文本模板里的工具。它使用一些简单的符号来标记变量的位置和执行一些基本操作。通过它,我们能把一个原始的数据列表,转换成一段格式整齐的文本。
+
+ 在这里,我们可以把开场白、邮件正文和署名落款拼装在一起,确保每次发出的邮件都既专业又格式统一。
+
+ 请将下方这段排版代码直接复制并粘贴到模板节点的代码框中。
+
+ ```jinja
+ Hi {{ customer }},
+
+ Thank you for reaching out to us, and we are more than happy to provide you with the information you are seeking.
+
+ Here are the details regarding your specific questions:
+
+ {{ body }}
+
+ ---
+ Thank you for reaching out to us!
+ Best regards,
+ Anne
+ ```
+
+
+
+这是最终的工作流:
+
+
+ 
+
+
+点击**运行**,在一封邮件中提出多个问题进行测试。你会发现,最终生成的回复完美包含了个性化的开场白、LLM 在中间部分出色总结的答案,以及最下方标准、专业的落款。
+
+## 小挑战
+
+1. 如何修改 Jinja2 的语法,将项目符号列表修改成数字编号列表。
+
+
+ 可前往 [Template Designer Documentation](https://jinja.palletsprojects.com/en/stable/templates/),或者向 AI 提问,探索更多格式。
+
+2. 格式转换除了对列表进行统一的格式处理,还能做什么?
\ No newline at end of file
diff --git a/zh/use-dify/tutorials/workflow-101/lesson-10.mdx b/zh/use-dify/tutorials/workflow-101/lesson-10.mdx
new file mode 100644
index 00000000..0abc51eb
--- /dev/null
+++ b/zh/use-dify/tutorials/workflow-101/lesson-10.mdx
@@ -0,0 +1,110 @@
+---
+title: "第 10 课:发布和监控你的 AI 应用"
+sidebarTitle: "第 10 课:发布和监控"
+---
+
+经过前九课的学习和搭建,我们的邮件助理已经具备了连接知识库、使用搜索工具、并产出格式化的回复能力。但它现在还是躺在 Dify 的工作室里,只有你能够看到和使用它。
+
+我们如何能够将它分享给其他人使用?如何知道它在实际运行中的表现如何?有没有报错?
+
+这就需要我们完成最后两个关键步骤:发布(Publish)和监测(Monitor)。
+
+## 发布你的应用
+
+1. 将鼠标移至画布的右上角,点击发布按钮。此时,下方的其他按钮为灰色,点击发布更新。
+
+
+ 当你完成修改后,需要保存并发布所有的修改,请点击发布更新。
+
+ 如果不更新发布,线上版本将保持原来的旧版本。
+
+
+
+ 
+
+
+2. 点击发布更新后,你会发现下方的按钮已经可以点击。
+
+ 1. **分享你的应用**
+
+ 点击下方的运行,Dify 会为你生成一个网页(WebApp),这就是你创建的邮件助理应用界面啦。
+
+ 你可以在这里直接使用邮件助理,也可以将链接分享给其他人。他们不需要登录 Dify,就能直接使用你开发的邮件助理了。
+
+
+ 
+
+
+ 2. **批量运行**
+
+ 如果你有 100 封邮件需要 AI 处理,一封封复制粘贴效率会非常低,有了批量运行,你只需要把这 100 封邮件整理成一个 CSV 表格文件,上传给 Dify,它就会自动把这 100 封邮件一次性处理完,最后给你一个包含所有结果的表格。
+
+ 由于在 Workflow 里,我们设定了不同的变量,所以你需要上传指定格式的 CSV 表格文件。你也可以点击下载模板,再往这个模板里填充对应内容。
+
+
+ 
+
+
+ 3. **其他连接方式**
+
+ - **访问 API**:如果你懂编程,可以获取 API 密钥,把这个工作流集成到你自己的网站或 App 里。
+ - **在"探索"中打开**:和你常用的工作流一并放置在探索页面左侧的工作区,你能下次更快地使用它。
+ - **发布为工具**:将你当前的工作流打包成一个插件(你可以理解成工具),让它能被其他的 Agent 调用。
+
+## 监测你的应用
+
+作为邮件助理的创建者,我们需要时刻关注它运行的状态,我们能够通过日志和监测来了解应用的健康状况、潜在的性能瓶颈等。
+
+### 上帝视角 — 监测(Monitor)
+
+监测是你的指挥中心,你能在这里通过不同面板看到应用的表现。
+
+| 名称 | 释义 |
+|:-------------- |:------------------------------------------------------------ |
+| 全部消息数 | AI 每天的互动总次数,每回答用户一个问题算一条消息。你能了解应用的实用热度。 |
+| 活跃用户数 | 与AI 有效互动,即有一问一答以上的唯一用户数。提示词编排和调试的会话不计入。 |
+| 费用消耗 | 反映每日该应用请求语言模型的 Tokens 花费,用于成本控制。当曲线出现突然的提升或减少,你需要进行检查。 |
+| 平均用户调用次数 | 反映每天用户的使用次数。该指标反映了用户粘性。 |
+
+### 放大镜 - 日志(Logs)
+
+日志记录了你的应用每次运行的详细记录,包括时间、输入内容、耗时等。
+
+**日志的作用**
+
+- **排查故障 (Debug)**:当用户说*邮件助理用不了了*,你可以通过日志还原案发现场,找到是哪个节点出了问题。
+- **优化性能**:查看每个节点的耗时,找出拖慢整个流程的"瓶颈"。
+- **理解用户**:看看用户实际输入了什么内容,以此来不断优化你的 Prompt 或知识库。
+- **监控成本**:查看每次运行消耗了多少 Token,控制预算。
+
+| 名称 | 释义 |
+|:------------ |:--------------------------------- |
+| 开始时间 | 任务触发的时间 |
+| 状态 | Success(成功);Failure(失败) |
+| 运行时间 | 整个流程花了多少时间 |
+| TOKENS | 这次运行消耗的 AI 算力(Token 数)|
+| 用户或账户 | 用户 ID |
+| 触发方式 | 是通过 WebApp 界面运行的,还是通过 API 调用的 |
+
+你可以点击每条日志查看详情。例如,你可以发现用户高频提问的问题,并以此及时更新和修改你的知识库。
+
+发布不是终点,而是新的起点,这就是 **LLMOps**(大语言模型运维)的核心理念。
+
+1. **观察 (Observe)**:通过日志,看用户真的在问什么?AI 的回答用户满意吗?
+2. **分析 (Analyze)**:发现有些问题 AI 回答得不好,或者某些工具调用经常失败。
+3. **优化 (Optimize)**:回到画布,修改 Prompt,补充知识库,或者调整工作流逻辑。
+4. **发布 (Publish)**:再次发布新版本。
+
+通过上面的循环,你的 AI 邮件助理会变得越来越智能,越来越懂你的业务。
+
+## 结束语
+
+**现在,你不仅掌握了 Dify 这个工具,更掌握了构建 AI 应用的思维方式:**
+
+```plaintext wrap
+把任务进行拆解 → 选择合适的节点、模型和工具去解决 → 将它们连接在一起 → 通过监测数据持续迭代
+```
+
+现在,你可以去 Dify 的探索页面里点开一个模板,进行拆解和分析。或者,从工作中的痛点出发,从空白的工作室开始,从零搭建一个属于你自己的工作流或者 AI 应用。
+
+愿你使用 Dify,在 AI 时代下,工作更轻松,创造更自由。