This commit is contained in:
nusquama
2026-03-14 12:00:28 +08:00
parent e2cd602635
commit 8527899ee6

View File

@@ -0,0 +1,720 @@
Route AI tasks between OpenAI agents with confidence-based email fallback
https://n8nworkflows.xyz/workflows/route-ai-tasks-between-openai-agents-with-confidence-based-email-fallback-13965
# Route AI tasks between OpenAI agents with confidence-based email fallback
## 1. Workflow Overview
This workflow receives an incoming request via a webhook, asks a supervisory AI agent to classify the request as **simple** or **complex**, checks how confident that classification is, and then either:
- routes the task to the appropriate AI execution path, or
- sends an email alert for human review if confidence is too low.
Its main use case is **controlled AI task routing**: using one model to classify request complexity, then using an orchestration agent to delegate execution to one of two specialized AI tools. It also introduces a **safety fallback** by notifying an administrator when the classification is uncertain.
### 1.1 Input Reception and Runtime Configuration
The workflow starts from a webhook and stores runtime values needed later, especially the user request and the confidence threshold used to decide whether automation is safe.
### 1.2 Supervisory Classification
A supervisor agent analyzes the request and produces structured JSON containing:
- `complexity`: `simple` or `complex`
- `confidence`: numeric score from 0 to 1
- `reasoning`: explanation for the decision
### 1.3 Confidence Gate
The workflow compares the supervisors confidence score to a configured threshold. High-confidence classifications proceed to automated execution; low-confidence ones trigger an email alert.
### 1.4 AI Orchestration and Specialized Execution
If confidence is high enough, a second AI agent acts as an orchestrator. It uses the supervisors classification and reasoning to decide whether to call:
- a simple task tool for lightweight requests, or
- a complex task tool for multi-step or deeper reasoning.
### 1.5 Human Fallback Notification
If the confidence score is below threshold, the workflow sends a plain-text email containing the request, classification, confidence, reasoning, and threshold, asking for manual review.
### 1.6 Webhook Response
When automated execution succeeds, the workflow responds to the original webhook request using a dedicated response node.
---
## 2. Block-by-Block Analysis
## 2.1 Input Reception and Runtime Configuration
**Overview:**
This block accepts the incoming HTTP request and prepares core values used by later nodes. It currently injects placeholder configuration values rather than extracting them from the webhook payload.
**Nodes Involved:**
- Webhook
- Workflow Configuration
### Node: Webhook
- **Type and technical role:** `n8n-nodes-base.webhook`
Entry point for the workflow. Receives an HTTP request and starts execution.
- **Configuration choices:**
- Uses a generated path: `b62c065b-ab0a-41f5-81f8-c5207fbcd892`
- `responseMode` is set to **responseNode**, meaning the HTTP response is not returned immediately by the webhook node itself; instead, the workflow must later use a **Respond to Webhook** node.
- **Key expressions or variables used:**
None configured directly in this node.
- **Input and output connections:**
- No input; this is the trigger.
- Outputs to **Workflow Configuration**.
- **Version-specific requirements:**
Type version `2.1`.
- **Edge cases or potential failure types:**
- If no Respond to Webhook node executes, callers may experience timeout or incomplete responses.
- If deployed behind a proxy or with incorrect webhook URL setup, requests may not reach n8n.
- Authentication is not configured here, so the endpoint is effectively open unless protected externally.
- **Sub-workflow reference:**
None.
### Node: Workflow Configuration
- **Type and technical role:** `n8n-nodes-base.set`
Defines reusable workflow values.
- **Configuration choices:**
- Sets `userRequest` to a placeholder string: `<__PLACEHOLDER_VALUE__User task request__>`
- Sets `confidenceThreshold` to `0.7`
- `includeOtherFields` is enabled, so any incoming webhook data is preserved alongside these assigned values.
- **Key expressions or variables used:**
No dynamic expressions in assignments; values are hardcoded placeholders.
- **Input and output connections:**
- Input from **Webhook**
- Output to **Supervisor Agent**
- **Version-specific requirements:**
Type version `3.4`.
- **Edge cases or potential failure types:**
- As configured, this node does **not** map the actual webhook payload into `userRequest`; unless manually changed, the supervisor will always receive the placeholder text.
- If downstream nodes assume real user input, results will be misleading.
- **Sub-workflow reference:**
None.
---
## 2.2 Supervisory Classification
**Overview:**
This block classifies the incoming request as simple or complex. It uses an OpenAI chat model plus a structured output parser to enforce a machine-readable routing decision.
**Nodes Involved:**
- Supervisor Agent
- OpenAI Model - Supervisor
- Routing Decision Parser
### Node: Supervisor Agent
- **Type and technical role:** `@n8n/n8n-nodes-langchain.agent`
AI agent that analyzes the request and produces a structured classification.
- **Configuration choices:**
- Prompt source: `={{ $json.userRequest }}`
- Prompt type: `define`
- System message instructs the model to:
1. analyze request complexity
2. classify as `simple` or `complex`
3. assign a confidence score
4. provide reasoning
- `hasOutputParser` is enabled, so it must conform to the attached structured schema.
- **Key expressions or variables used:**
- `{{ $json.userRequest }}`
- **Input and output connections:**
- Main input from **Workflow Configuration**
- AI language model input from **OpenAI Model - Supervisor**
- AI output parser input from **Routing Decision Parser**
- Main output to **Check Confidence Score**
- **Version-specific requirements:**
Type version `3`.
- **Edge cases or potential failure types:**
- If the model returns invalid JSON or misses required fields, the parser may fail.
- Ambiguous input may lead to inconsistent confidence values.
- Missing OpenAI credentials will prevent execution.
- **Sub-workflow reference:**
None.
### Node: OpenAI Model - Supervisor
- **Type and technical role:** `@n8n/n8n-nodes-langchain.lmChatOpenAi`
Language model backend used by the Supervisor Agent.
- **Configuration choices:**
- Model selected: `gpt-4.1-mini`
- No additional model options are defined.
- **Key expressions or variables used:**
None.
- **Input and output connections:**
- AI language model output to **Supervisor Agent**
- **Version-specific requirements:**
Type version `1.3`.
- **Edge cases or potential failure types:**
- Invalid or missing OpenAI credentials
- Model availability or rate limiting
- Token/context issues if input becomes large
- **Sub-workflow reference:**
None.
### Node: Routing Decision Parser
- **Type and technical role:** `@n8n/n8n-nodes-langchain.outputParserStructured`
Enforces a JSON schema on the supervisors response.
- **Configuration choices:**
Manual schema with:
- `complexity`: string enum `simple` or `complex`
- `confidence`: number between 0 and 1
- `reasoning`: string
All three fields are required.
- **Key expressions or variables used:**
None.
- **Input and output connections:**
- AI output parser output to **Supervisor Agent**
- **Version-specific requirements:**
Type version `1.3`.
- **Edge cases or potential failure types:**
- Model outputs incompatible structure
- Numeric confidence outside `[0,1]`
- Empty or malformed JSON
- **Sub-workflow reference:**
None.
---
## 2.3 Confidence Gate
**Overview:**
This block decides whether the automated route is trusted enough to proceed. It compares the supervisors confidence score to the configured threshold.
**Nodes Involved:**
- Check Confidence Score
### Node: Check Confidence Score
- **Type and technical role:** `n8n-nodes-base.if`
Conditional branch controlling automated execution versus fallback.
- **Configuration choices:**
- Single condition:
- left value: `={{ $json.confidence }}`
- operator: number `>=`
- right value: `={{ $('Workflow Configuration').first().json.confidenceThreshold }}`
- Strict type validation is enabled.
- **Key expressions or variables used:**
- `{{ $json.confidence }}`
- `{{ $('Workflow Configuration').first().json.confidenceThreshold }}`
- **Input and output connections:**
- Input from **Supervisor Agent**
- True output to **Execute Selected Agent**
- False output to **Send Fallback Alert**
- **Version-specific requirements:**
Type version `2.3`.
- **Edge cases or potential failure types:**
- If `confidence` is missing or not numeric, strict validation may cause branch errors.
- If the threshold is changed to a non-number, comparison may fail.
- **Sub-workflow reference:**
None.
---
## 2.4 AI Orchestration and Specialized Execution
**Overview:**
This block performs the actual automated handling of the request. An orchestrator agent receives the original task plus the supervisors classification and can call one of two specialized tool-agents.
**Nodes Involved:**
- Execute Selected Agent
- OpenAI Model - Executor
- Simple Task Agent Tool(5 MINI)
- OpenAI Model - Simple Agent
- Complex Task Agent Tool (5.4)
- OpenAI Model - Complex Agent GPT 5.3
### Node: Execute Selected Agent
- **Type and technical role:** `@n8n/n8n-nodes-langchain.agent`
Orchestrator agent that chooses which AI tool to call.
- **Configuration choices:**
- Text input: `={{ $('Workflow Configuration').first().json.userRequest }}`
- Prompt type: `define`
- System message instructs it to:
1. analyze the user request
2. determine which specialized agent tool to call
3. use Simple Task Agent Tool for simple requests
4. use Complex Task Agent Tool for complex requests
5. return the selected agents result
- The system message includes:
- `Task complexity classification: {{ $json.complexity }}`
- `Reasoning: {{ $json.reasoning }}`
- **Key expressions or variables used:**
- `{{ $('Workflow Configuration').first().json.userRequest }}`
- `{{ $json.complexity }}`
- `{{ $json.reasoning }}`
- **Input and output connections:**
- Main input from **Check Confidence Score**
- AI language model input from **OpenAI Model - Executor**
- AI tool inputs from:
- **Simple Task Agent Tool(5 MINI)**
- **Complex Task Agent Tool (5.4)**
- Main output to **Respond to Webhook**
- **Version-specific requirements:**
Type version `3`.
- **Edge cases or potential failure types:**
- If the model ignores the classification and calls the wrong tool, routing quality degrades.
- If no tool is called and the agent responds directly, behavior may differ from expected design.
- Missing OpenAI credentials or tool connection problems will stop execution.
- **Sub-workflow reference:**
None.
### Node: OpenAI Model - Executor
- **Type and technical role:** `@n8n/n8n-nodes-langchain.lmChatOpenAi`
Model used by the orchestrator agent.
- **Configuration choices:**
- Model: `gpt-4.1-mini`
- No extra options set.
- **Key expressions or variables used:**
None.
- **Input and output connections:**
- AI language model output to **Execute Selected Agent**
- **Version-specific requirements:**
Type version `1.3`.
- **Edge cases or potential failure types:**
- Same OpenAI issues as above: auth, rate limits, model availability
- **Sub-workflow reference:**
None.
### Node: Simple Task Agent Tool(5 MINI)
- **Type and technical role:** `@n8n/n8n-nodes-langchain.agentTool`
Specialized callable AI tool for basic requests.
- **Configuration choices:**
- Tool input text: `={{ $fromAI("task", "The task to process") }}`
- System message positions this tool as a simple-task specialist for:
- basic questions
- simple information
- single-step operations
- quick concise answers
- Tool description: straightforward tasks and simple information retrieval
- **Key expressions or variables used:**
- `{{ $fromAI("task", "The task to process") }}`
- **Input and output connections:**
- AI language model input from **OpenAI Model - Simple Agent**
- AI tool output to **Execute Selected Agent**
- **Version-specific requirements:**
Type version `2.2`.
- **Edge cases or potential failure types:**
- If the orchestrator passes poor task content, the answer quality drops.
- The tool depends on the model node being correctly attached.
- **Sub-workflow reference:**
None.
### Node: OpenAI Model - Simple Agent
- **Type and technical role:** `@n8n/n8n-nodes-langchain.lmChatOpenAi`
Model powering the simple-task tool.
- **Configuration choices:**
- Model: `gpt-4.1-mini`
- **Key expressions or variables used:**
None.
- **Input and output connections:**
- AI language model output to **Simple Task Agent Tool(5 MINI)**
- **Version-specific requirements:**
Type version `1.3`.
- **Edge cases or potential failure types:**
- OpenAI auth/rate limit/model issues
- **Sub-workflow reference:**
None.
### Node: Complex Task Agent Tool (5.4)
- **Type and technical role:** `@n8n/n8n-nodes-langchain.agentTool`
Specialized callable AI tool for advanced requests.
- **Configuration choices:**
- Tool input text: `={{ $fromAI("task", "The task to process") }}`
- System message defines it as a complex-task specialist for:
- multi-step reasoning
- in-depth analysis
- domain expertise
- creative problem-solving
- detailed explanations
- Tool description emphasizes sophisticated requests requiring analysis or expertise.
- **Key expressions or variables used:**
- `{{ $fromAI("task", "The task to process") }}`
- **Input and output connections:**
- AI language model input from **OpenAI Model - Complex Agent GPT 5.3**
- AI tool output to **Execute Selected Agent**
- **Version-specific requirements:**
Type version `2.2`.
- **Edge cases or potential failure types:**
- Same tool invocation risks as the simple tool
- Potentially larger responses, which may affect latency or token usage
- **Sub-workflow reference:**
None.
### Node: OpenAI Model - Complex Agent GPT 5.3
- **Type and technical role:** `@n8n/n8n-nodes-langchain.lmChatOpenAi`
Model powering the complex-task tool.
- **Configuration choices:**
- Despite the node name, the configured model value is `gpt-4.1-mini`
- No advanced options are set
- **Key expressions or variables used:**
None.
- **Input and output connections:**
- AI language model output to **Complex Task Agent Tool (5.4)**
- **Version-specific requirements:**
Type version `1.3`.
- **Edge cases or potential failure types:**
- Node name and actual model selection are inconsistent, which can confuse maintainers
- Same OpenAI auth/rate-limit/model issues
- **Sub-workflow reference:**
None.
---
## 2.5 Human Fallback Notification
**Overview:**
This branch handles uncertain classifications. Instead of executing the task automatically, it sends an email to an administrator for manual review.
**Nodes Involved:**
- Send Fallback Alert
### Node: Send Fallback Alert
- **Type and technical role:** `n8n-nodes-base.emailSend`
Sends a plain-text email alert.
- **Configuration choices:**
- Subject: `Low Confidence Alert: Task Classification Uncertain`
- Plain text body includes:
- original user request
- classification
- confidence score
- reasoning
- configured threshold
- `toEmail` and `fromEmail` are placeholders and must be replaced
- `emailFormat` is `text`
- **Key expressions or variables used:**
- `{{ $('Workflow Configuration').first().json.userRequest }}`
- `{{ $json.complexity }}`
- `{{ $json.confidence }}`
- `{{ $json.reasoning }}`
- `{{ $('Workflow Configuration').first().json.confidenceThreshold }}`
- **Input and output connections:**
- Input from the false branch of **Check Confidence Score**
- No output connected
- **Version-specific requirements:**
Type version `2.1`.
- **Edge cases or potential failure types:**
- Missing email credentials or SMTP misconfiguration
- Placeholder sender/recipient addresses will cause delivery failure
- This branch does **not** connect to **Respond to Webhook**, so the webhook caller may not receive a response in fallback scenarios
- **Sub-workflow reference:**
None.
---
## 2.6 Webhook Response
**Overview:**
This block returns the final automated result to the original HTTP caller. It only executes on the successful high-confidence automation branch.
**Nodes Involved:**
- Respond to Webhook
### Node: Respond to Webhook
- **Type and technical role:** `n8n-nodes-base.respondToWebhook`
Sends the HTTP response for workflows using webhook `responseMode: responseNode`.
- **Configuration choices:**
- No custom response options configured.
- It will return the incoming item data from **Execute Selected Agent** by default.
- **Key expressions or variables used:**
None explicitly configured.
- **Input and output connections:**
- Input from **Execute Selected Agent**
- **Version-specific requirements:**
Type version `1.5`.
- **Edge cases or potential failure types:**
- If upstream data is overly large or malformed, HTTP response payload may be undesirable
- Since no fallback branch connects here, low-confidence executions may leave the request unanswered
- **Sub-workflow reference:**
None.
---
## 2.7 Sticky Notes and In-Canvas Documentation
**Overview:**
These nodes are non-executable documentation elements placed on the canvas. They explain the intent of major parts of the workflow.
**Nodes Involved:**
- Sticky Note
- Sticky Note1
- Sticky Note2
- Sticky Note3
- Sticky Note4
- Sticky Note5
- Sticky Note6
### Node: Sticky Note
- **Type and technical role:** `n8n-nodes-base.stickyNote`
Visual annotation for task classification area.
- **Configuration choices:**
Content explains that the Supervisor Agent analyzes the request and determines if it is simple or complex.
- **Input and output connections:**
None.
- **Version-specific requirements:**
Type version `1`.
- **Edge cases or potential failure types:**
None.
- **Sub-workflow reference:**
None.
### Node: Sticky Note1
- Same node type and purpose as above.
Documents the low-confidence alert behavior.
### Node: Sticky Note2
- Same node type and purpose as above.
Documents orchestration behavior between the supervisor result and the specialized tools.
### Node: Sticky Note3
- Same node type and purpose as above.
Documents the distinction between simple and complex agents.
### Node: Sticky Note4
- Same node type and purpose as above.
States that the workflow starts from a webhook trigger.
### Node: Sticky Note5
- Same node type and purpose as above.
Labels the confidence-check area.
### Node: Sticky Note6
- Same node type and purpose as above.
Provides a broad description of the workflows routing logic and human fallback.
---
## 3. Summary Table
| Node Name | Node Type | Functional Role | Input Node(s) | Output Node(s) | Sticky Note |
|---|---|---|---|---|---|
| Webhook | n8n-nodes-base.webhook | HTTP trigger entry point | | Workflow Configuration | ## Workflow Start A WEBHOOK trigger starts the execution |
| Workflow Configuration | n8n-nodes-base.set | Stores request and threshold values | Webhook | Supervisor Agent | ## AI Task Routing with Supervisor Agent This workflow intelligently analyzes incoming user requests and routes them to the most appropriate AI agent based on task complexity. When a request is received through the webhook, it is first stored in the configuration step along with a confidence threshold. A Supervisor Agent then evaluates the request and classifies it as either simple or complex, returning a confidence score and reasoning for its decision. The workflow checks whether this confidence score meets the defined threshold. If the confidence is sufficient, an orchestrator agent delegates the task to a specialized AI tool. Simple requests are handled by a Simple Task Agent, while more advanced requests are processed by a Complex Task Agent capable of deeper reasoning. If the confidence score is too low, the workflow sends an email alert for human review, ensuring reliable and controlled AI automation. |
| Supervisor Agent | @n8n/n8n-nodes-langchain.agent | Classifies task complexity with confidence and reasoning | Workflow Configuration; OpenAI Model - Supervisor; Routing Decision Parser | Check Confidence Score | ## Task Classification The Supervisor Agent analyzes the user request and determines whether the task is simple or complex. |
| Routing Decision Parser | @n8n/n8n-nodes-langchain.outputParserStructured | Enforces structured JSON classification output | | Supervisor Agent | ## Task Classification The Supervisor Agent analyzes the user request and determines whether the task is simple or complex. |
| OpenAI Model - Supervisor | @n8n/n8n-nodes-langchain.lmChatOpenAi | LLM backend for supervisor classification | | Supervisor Agent | ## Task Classification The Supervisor Agent analyzes the user request and determines whether the task is simple or complex. |
| Check Confidence Score | n8n-nodes-base.if | Routes high-confidence vs low-confidence outcomes | Supervisor Agent | Execute Selected Agent; Send Fallback Alert | ## Check Confidence Score |
| Execute Selected Agent | @n8n/n8n-nodes-langchain.agent | Orchestrates which specialized AI tool should handle the request | Check Confidence Score; OpenAI Model - Executor; Simple Task Agent Tool(5 MINI); Complex Task Agent Tool (5.4) | Respond to Webhook | ## Agent Orchestration An orchestrator AI agent decides which specialized tool to call based on the supervisors classification. The request is either the Simple Task Agent or the Complex Task Agent |
| OpenAI Model - Executor | @n8n/n8n-nodes-langchain.lmChatOpenAi | LLM backend for orchestration agent | | Execute Selected Agent | ## Agent Orchestration An orchestrator AI agent decides which specialized tool to call based on the supervisors classification. The request is either the Simple Task Agent or the Complex Task Agent |
| Send Fallback Alert | n8n-nodes-base.emailSend | Sends low-confidence human review email | Check Confidence Score | | ## Alert If the confidence is below the configured threshold, an email alert is sent to an administrator requesting manual review to prevent incorrect automated responses. |
| Sticky Note | n8n-nodes-base.stickyNote | Canvas documentation | | | |
| Sticky Note1 | n8n-nodes-base.stickyNote | Canvas documentation | | | |
| Sticky Note2 | n8n-nodes-base.stickyNote | Canvas documentation | | | |
| Sticky Note3 | n8n-nodes-base.stickyNote | Canvas documentation | | | |
| Sticky Note4 | n8n-nodes-base.stickyNote | Canvas documentation | | | |
| Respond to Webhook | n8n-nodes-base.respondToWebhook | Returns final HTTP response | Execute Selected Agent | | |
| OpenAI Model - Complex Agent GPT 5.3 | @n8n/n8n-nodes-langchain.lmChatOpenAi | LLM backend for complex-task tool | | Complex Task Agent Tool (5.4) | ## Two specialized agents handle task execution: Simple Task Agent for straightforward questions and quick responses. Complex Task Agent for multi-step reasoning, deeper analysis, and detailed explanations. This separation improves response quality and efficiency. |
| Complex Task Agent Tool (5.4) | @n8n/n8n-nodes-langchain.agentTool | Tool callable by orchestrator for complex tasks | OpenAI Model - Complex Agent GPT 5.3 | Execute Selected Agent | ## Two specialized agents handle task execution: Simple Task Agent for straightforward questions and quick responses. Complex Task Agent for multi-step reasoning, deeper analysis, and detailed explanations. This separation improves response quality and efficiency. |
| Simple Task Agent Tool(5 MINI) | @n8n/n8n-nodes-langchain.agentTool | Tool callable by orchestrator for simple tasks | OpenAI Model - Simple Agent | Execute Selected Agent | ## Two specialized agents handle task execution: Simple Task Agent for straightforward questions and quick responses. Complex Task Agent for multi-step reasoning, deeper analysis, and detailed explanations. This separation improves response quality and efficiency. |
| Sticky Note6 | n8n-nodes-base.stickyNote | Canvas documentation | | | |
| OpenAI Model - Simple Agent | @n8n/n8n-nodes-langchain.lmChatOpenAi | LLM backend for simple-task tool | | Simple Task Agent Tool(5 MINI) | ## Two specialized agents handle task execution: Simple Task Agent for straightforward questions and quick responses. Complex Task Agent for multi-step reasoning, deeper analysis, and detailed explanations. This separation improves response quality and efficiency. |
| Sticky Note5 | n8n-nodes-base.stickyNote | Canvas documentation | | | |
---
## 4. Reproducing the Workflow from Scratch
1. **Create a new workflow** in n8n.
2. **Add a Webhook node**
- Type: **Webhook**
- Set the HTTP path to any unique value, for example the generated UUID-style path used in the source workflow.
- Set **Response Mode** to **Using Respond to Webhook Node** / `responseNode`.
3. **Add a Set node named “Workflow Configuration”**
- Type: **Set**
- Add field `userRequest` as **string**
- Add field `confidenceThreshold` as **number**
- Set `confidenceThreshold` to `0.7`
- In the provided workflow, `userRequest` is a placeholder value. For a real implementation, replace it with something from the webhook, such as:
- `{{$json.body.userRequest}}` or
- `{{$json.query.userRequest}}`
depending on how the webhook caller sends data.
- Enable **Include Other Input Fields**.
4. **Connect Webhook → Workflow Configuration**
5. **Add an AI Agent node named “Supervisor Agent”**
- Type: **AI Agent** (`@n8n/n8n-nodes-langchain.agent`)
- Set **Prompt Type** to **Define below**
- Set **Text** to:
- `={{ $json.userRequest }}`
- Enable structured output parsing.
- Set system message to instruct the model to:
- classify as `simple` or `complex`
- produce a confidence score between `0.0` and `1.0`
- provide reasoning
6. **Add an OpenAI Chat Model node named “OpenAI Model - Supervisor”**
- Type: **OpenAI Chat Model**
- Choose model `gpt-4.1-mini`
- Attach valid **OpenAI credentials**
7. **Connect OpenAI Model - Supervisor → Supervisor Agent** using the **AI Language Model** connection.
8. **Add a Structured Output Parser node named “Routing Decision Parser”**
- Type: **Structured Output Parser**
- Use manual JSON schema:
- object with required fields:
- `complexity` as string enum `simple` / `complex`
- `confidence` as number 0 to 1
- `reasoning` as string
9. **Connect Routing Decision Parser → Supervisor Agent** using the **AI Output Parser** connection.
10. **Connect Workflow Configuration → Supervisor Agent** via the main connection.
11. **Add an IF node named “Check Confidence Score”**
- Type: **IF**
- Configure one numeric condition:
- left: `={{ $json.confidence }}`
- operator: **greater than or equal**
- right: `={{ $('Workflow Configuration').first().json.confidenceThreshold }}`
- Keep strict type validation enabled.
12. **Connect Supervisor Agent → Check Confidence Score**
13. **Add an AI Agent node named “Execute Selected Agent”**
- Type: **AI Agent**
- Set **Prompt Type** to **Define below**
- Set **Text** to:
- `={{ $('Workflow Configuration').first().json.userRequest }}`
- Set system message so the agent:
- analyzes the request
- chooses the specialized tool based on supervisor classification
- calls simple tool for simple tasks
- calls complex tool for complex tasks
- returns the selected agents output
- Include these dynamic references in the system message:
- `Task complexity classification: {{ $json.complexity }}`
- `Reasoning: {{ $json.reasoning }}`
14. **Add an OpenAI Chat Model node named “OpenAI Model - Executor”**
- Type: **OpenAI Chat Model**
- Model: `gpt-4.1-mini`
- Use valid OpenAI credentials
15. **Connect OpenAI Model - Executor → Execute Selected Agent** via **AI Language Model**.
16. **Add a Tool Agent node named “Simple Task Agent Tool(5 MINI)”**
- Type: **Agent Tool**
- Set tool input text to:
- `={{ $fromAI("task", "The task to process") }}`
- Set the system message to define it as a simple-task specialist:
- basic questions
- quick information
- single-step operations
- concise responses
- Add tool description similar to:
- “Handles straightforward tasks like basic questions and simple information retrieval”
17. **Add an OpenAI Chat Model node named “OpenAI Model - Simple Agent”**
- Type: **OpenAI Chat Model**
- Model: `gpt-4.1-mini`
- Use valid OpenAI credentials
18. **Connect OpenAI Model - Simple Agent → Simple Task Agent Tool(5 MINI)** via **AI Language Model**.
19. **Connect Simple Task Agent Tool(5 MINI) → Execute Selected Agent** via **AI Tool**.
20. **Add a Tool Agent node named “Complex Task Agent Tool (5.4)”**
- Type: **Agent Tool**
- Set tool input text to:
- `={{ $fromAI("task", "The task to process") }}`
- Set system message to define it as a complex-task specialist:
- multi-step reasoning
- deep analysis
- domain expertise
- creative problem-solving
- detailed explanations
- Add tool description similar to:
- “Handles complex tasks requiring multi-step reasoning, analysis, or domain expertise”
21. **Add an OpenAI Chat Model node named “OpenAI Model - Complex Agent GPT 5.3”**
- Type: **OpenAI Chat Model**
- In the original workflow, the node name suggests a different model, but the actual configured model is `gpt-4.1-mini`
- You may keep the original naming for parity or rename it for clarity
- Use valid OpenAI credentials
22. **Connect OpenAI Model - Complex Agent GPT 5.3 → Complex Task Agent Tool (5.4)** via **AI Language Model**.
23. **Connect Complex Task Agent Tool (5.4) → Execute Selected Agent** via **AI Tool**.
24. **Connect the true output of Check Confidence Score → Execute Selected Agent**
25. **Add an Email Send node named “Send Fallback Alert”**
- Type: **Send Email**
- Configure SMTP or the email transport supported in your n8n setup
- Set **To Email** to the admin recipient
- Set **From Email** to a valid sender
- Set **Subject** to:
- `Low Confidence Alert: Task Classification Uncertain`
- Set email format to **text**
- Use a body containing:
- original request
- classification
- confidence score
- reasoning
- configured threshold
- Suggested expressions:
- `{{ $('Workflow Configuration').first().json.userRequest }}`
- `{{ $json.complexity }}`
- `{{ $json.confidence }}`
- `{{ $json.reasoning }}`
- `{{ $('Workflow Configuration').first().json.confidenceThreshold }}`
26. **Connect the false output of Check Confidence Score → Send Fallback Alert**
27. **Add a Respond to Webhook node named “Respond to Webhook”**
- Type: **Respond to Webhook**
- Default response settings are acceptable if you want to return the agent result as-is.
28. **Connect Execute Selected Agent → Respond to Webhook**
29. **Optionally add sticky notes** to document:
- workflow start
- task classification
- confidence check
- agent orchestration
- specialized agents
- alert behavior
- high-level workflow purpose
30. **Configure credentials**
- **OpenAI credentials** for:
- OpenAI Model - Supervisor
- OpenAI Model - Executor
- OpenAI Model - Simple Agent
- OpenAI Model - Complex Agent GPT 5.3
- **Email/SMTP credentials** for:
- Send Fallback Alert
31. **Test the workflow**
- Send a webhook request containing a real `userRequest`
- Confirm the supervisor returns valid structured JSON
- Confirm high-confidence requests reach the orchestrator and return via Respond to Webhook
- Confirm low-confidence requests generate email alerts
32. **Recommended fixes before production**
- Replace the placeholder `userRequest` assignment with actual webhook input mapping
- Add a webhook response for the low-confidence branch as well, otherwise callers may wait indefinitely
- Consider adding webhook authentication
- Rename the complex model node if you want its label to match the actual configured model
### Sub-workflow setup
There are **no sub-workflows** and no **Execute Workflow** nodes in this workflow. All logic is implemented within a single workflow.
---
## 5. General Notes & Resources
| Note Content | Context or Link |
|---|---|
| AI Task Routing with Supervisor Agent: incoming requests are analyzed, classified by complexity, then either routed to a specialized AI agent or escalated for human review if confidence is too low. | Canvas documentation |
| Workflow Start: a webhook trigger starts the execution. | Canvas documentation |
| Task Classification: the Supervisor Agent determines whether the task is simple or complex. | Canvas documentation |
| Check Confidence Score | Canvas documentation |
| Agent Orchestration: an orchestrator AI agent decides which specialized tool to call based on the supervisors classification. The request is either the Simple Task Agent or the Complex Task Agent. | Canvas documentation |
| Two specialized agents handle task execution: Simple Task Agent for straightforward questions and quick responses; Complex Task Agent for multi-step reasoning, deeper analysis, and detailed explanations. This separation improves response quality and efficiency. | Canvas documentation |
| Alert: if confidence is below the configured threshold, an email alert is sent to an administrator requesting manual review to prevent incorrect automated responses. | Canvas documentation |
## Additional implementation cautions
- The current workflow responds to the webhook only on the **high-confidence path**.
- The current `Workflow Configuration` node uses a **placeholder request** instead of actual webhook data.
- The node named **OpenAI Model - Complex Agent GPT 5.3** is actually configured to use **`gpt-4.1-mini`**.