fastgpt-workflow-generator by YYH211
Generates production-ready FastGPT workflow JSON from natural language requirements. Uses AI-powered semantic template matching from built-in workflows (document translation, sales training, resume screening, financial news). Performs three-layer validation (format, connections, logic completeness). Supports incremental modifications to add/remove/modify nodes. Activates when user asks to "create FastGPT workflow", "generate workflow JSON", "design FastGPT application", or mentions workflow automation, multi-agent systems, or FastGPT templates.
Content & Writing
170 Stars
16 Forks
Updated Jan 8, 2026, 02:33 AM
Why Use This
This skill provides specialized capabilities for YYH211's codebase.
Use Cases
- Developing new features in the YYH211 repository
- Refactoring existing code to follow YYH211 standards
- Understanding and working with YYH211's codebase structure
Install Guide
2 steps- 1
Skip this step if Ananke is already installed.
- 2
Skill Snapshot
Auto scan of skill assets. Informational only.
Valid SKILL.md
Checks against SKILL.md specification
Source & Community
Skill Stats
SKILL.md 755 Lines
Total Files 1
Total Size 0 B
License NOASSERTION
---
name: fastgpt-workflow-generator
description: Generates production-ready FastGPT workflow JSON from natural language requirements. Uses AI-powered semantic template matching from built-in workflows (document translation, sales training, resume screening, financial news). Performs three-layer validation (format, connections, logic completeness). Supports incremental modifications to add/remove/modify nodes. Activates when user asks to "create FastGPT workflow", "generate workflow JSON", "design FastGPT application", or mentions workflow automation, multi-agent systems, or FastGPT templates.
---
# FastGPT Workflow Generator
> Automatically generate production-ready FastGPT workflow JSON from natural language requirements
## When to Use This Skill
Use this skill when you need to:
- **Create new workflows from scratch**: User asks to "create a FastGPT workflow for X purpose"
- **Generate based on templates**: User wants to build workflows similar to existing patterns (document processing, AI chat, data analysis, multi-agent systems)
- **Modify existing workflows**: User needs to add/remove/update nodes in an existing workflow JSON
- **Validate workflow JSON**: User has a workflow JSON that needs verification or fixing
- **Design multi-agent systems**: User mentions parallel processing, agent coordination, or workflow orchestration
- **Automate workflow creation**: User provides requirements document and needs executable JSON
- **Convert requirements to JSON**: User has specifications and wants a FastGPT-compatible workflow
**Trigger Keywords**: FastGPT, workflow, JSON, multi-agent, 工作流, template matching, workflow automation, node configuration, workflow validation
---
## Core Workflow
This skill follows a 5-phase process to generate production-ready workflow JSON:
### Phase 1: Requirements Analysis
**Goal**: Extract structured requirements from natural language input
**Process**:
1. **Identify request type**:
- Create from scratch
- Based on template
- Modify existing workflow
- Validate/fix existing JSON
2. **Extract key information using AI semantic analysis**:
```json
{
"purpose": "Workflow objective (e.g., 'Travel planning assistance')",
"domain": "Application domain (travel/event/document/data/general)",
"complexity": "simple | medium | complex",
"features": ["aiChat", "knowledgeBase", "httpRequest", "parallel"],
"inputs": ["userChatInput", "city", "date"],
"outputs": ["Complete plan", "Recommendations"],
"externalIntegrations": ["Weather API", "Feishu API"],
"specialRequirements": ["Multi-agent", "Real-time data"]
}
```
3. **Completeness check**: If information is insufficient, clarify through dialogue
**Output**: Structured requirements object
---
### Phase 2: Template Matching
**Goal**: Find the most similar built-in template
**Built-in Templates** (stored in `templates/` directory):
- `templates/文档翻译助手.json` - Simple workflow (document processing)
- `templates/销售陪练大师.json` - Medium complexity (conversational AI)
- `templates/简历筛选助手_飞书.json` - Complex workflow (data processing + external integration)
- `templates/AI金融日报.json` - Scheduled trigger + multi-agent (news aggregation)
**Matching Strategy**:
**Step 1: Coarse Filtering (Metadata-based)**
```
Calculate similarity scores:
- Domain match: travel vs travel = 1.0, travel vs event = 0.3
- Complexity match: simple vs simple = 1.0, simple vs complex = 0.3
- Feature overlap: Jaccard similarity of feature sets
- Node count similarity: 1 - |count1 - count2| / max(count1, count2)
Combined score = 0.3 * domain + 0.2 * complexity + 0.3 * features + 0.2 * nodeCount
Select Top 3 candidate templates
```
**Step 2: Fine Filtering (Semantic Similarity)**
```
For Top 3 candidates:
1. Analyze user requirements vs template characteristics
2. Evaluate workflow structure similarity
3. Calculate comprehensive score
Final score = 0.3 * domain + 0.2 * complexity + 0.3 * features + 0.2 * semantic
```
**Step 3: Selection Strategy**
```
- Highest score < 0.5: Start from blank template
- Highest score 0.5-0.7: Use template as reference, major modifications
- Highest score > 0.7: Use template as base, minor adjustments
```
**Output**:
- Best matching template JSON object
- Matching analysis report
- Modification suggestions list
---
### Phase 3: JSON Generation
**Scenario 1: Generate Based on Template**
```
1. Copy template structure
2. Modify nodes
- Keep: structurally similar nodes (workflowStart, userGuide)
- Modify: nodes requiring prompt/parameter adjustments
- Delete: unnecessary nodes
- Add: new requirement nodes
3. Regenerate NodeId
function generateNodeId(nodeType, nodeName, existingIds) {
// Fixed ID mapping
if (nodeType === 'workflowStart') return 'workflowStart';
if (nodeType === 'userGuide' || nodeType === 'systemConfig') return 'userGuide';
// Generate semantic ID (camelCase)
const baseName = nodeName.replace(/[\s\u4e00-\u9fa5]+/g, '');
let nodeId = baseName ? `${baseName}Node` : `${nodeType}Node`;
// Ensure uniqueness
let counter = 1;
while (existingIds.has(nodeId)) {
nodeId = `${baseName}Node_${counter}`;
counter++;
}
return nodeId;
}
4. Update references
- Traverse all inputs, replace old nodeId with new nodeId
- Update edges' source/target
- Handle two reference formats:
- Array: ["nodeId", "key"]
- Template: {{$nodeId.key$}} (Note: double braces with single $)
5. Auto-layout positions (hierarchical layout algorithm)
function autoLayout(nodes, edges) {
// Topological sort to determine layers
const layers = topologicalLayering(nodes, edges);
// Calculate positions for each layer
const LAYER_GAP_X = 350;
const NODE_GAP_Y = 150;
layers.forEach((layer, layerIndex) => {
const x = -200 + layerIndex * LAYER_GAP_X;
const totalHeight = (layer.length - 1) * NODE_GAP_Y;
const startY = -totalHeight / 2;
layer.forEach((nodeId, nodeIndex) => {
positions[nodeId] = {
x: x,
y: startY + nodeIndex * NODE_GAP_Y
};
});
});
// Fixed position for special nodes
positions['userGuide'] = { x: -600, y: -250 };
}
6. Update configuration
- Modify chatConfig.welcomeText
- Update chatConfig.variables
```
**Scenario 2: Create from Scratch**
```
1. Determine node list
- Required: workflowStart, userGuide
- Add based on features: chatNode, datasetSearchNode, httpRequest468, etc.
- Required: answerNode (output node)
2. Generate nodes and connections
- Use standard node templates
- Fill required fields
- Customize inputs/outputs based on requirements
3. Calculate positions and generate configuration
```
**Output**: Complete FastGPT workflow JSON
---
### Phase 4: Validation
**Level 1: JSON Format Validation**
```
✅ JSON is parseable
✅ Top level contains nodes, edges, chatConfig
✅ Each node contains: nodeId, name, flowNodeType, position, inputs, outputs
✅ flowNodeType is in valid type list (40+ types)
✅ position contains x, y numeric coordinates
```
**Level 2: Node Connection Validation**
```
✅ edges' source/target nodes exist
✅ sourceHandle/targetHandle format correct (nodeId-source-right, nodeId-target-left)
✅ Node input references' nodes and output keys exist
✅ Reference types match (string → string)
✅ Template references {{$nodeId.key$}} nodes and keys exist
✅ No self-loops, no duplicate connections
```
**Level 3: Logic Completeness Validation**
```
✅ Required nodes exist (workflowStart, userGuide, at least one output node)
✅ All nodes reachable from workflowStart (connectivity)
✅ No illegal cycles (unless using loop node)
✅ loop nodes correctly configured with parentNodeId and childrenNodeIdList
✅ No dead ends (non-output nodes without outgoing edges)
✅ All required inputs have values
```
**Output**: Validation report (containing errors, warnings, fix suggestions)
---
### Phase 5: Incremental Modification (Optional)
**Use Cases**: Add/delete/modify nodes
**Processing Steps**:
**1. Understand modification intent**
```
Use AI to analyze user request, extract:
{
"action": "add" | "delete" | "modify" | "reconnect",
"targetNodes": ["aiChatNode"],
"insertBefore": "aiChatNode",
"newNodes": [{ "type": "datasetSearchNode", "name": "Knowledge Base Search" }],
"modifications": {
"aiChatNode": {
"inputs": { "quoteQA": ["knowledgeBaseSearch", "searchResult"] }
}
}
}
```
**2. Execute modifications**
```
- Add node: generate new node, reconnect, calculate position
- Delete node: remove node, bypass reconnect, clean references
- Modify node: update inputs/outputs, validate references
```
**3. Re-layout and validate**
---
## Examples
### Example 1: Simple AI Q&A Workflow
**User Request**:
```
"Create a simple AI Q&A workflow where users input questions and AI responds directly"
```
**Skill Processing**:
1. **Requirements Analysis**
```json
{
"purpose": "AI question answering",
"domain": "general",
"complexity": "simple",
"features": ["aiChat"],
"inputs": ["userChatInput"],
"outputs": ["AI response"]
}
```
2. **Template Matching**
- `文档翻译助手.json` - Score: 0.85 (simple workflow, direct processing)
3. **JSON Generation**
- Use template, modify systemPrompt and welcomeText
4. **Validation Result**
- ✅ All three layers pass validation
**Generated JSON** (key parts):
```json
{
"nodes": [
{
"nodeId": "userGuide",
"name": "System Configuration",
"flowNodeType": "userGuide",
"position": {"x": -600, "y": -250}
},
{
"nodeId": "workflowStart",
"name": "Start",
"flowNodeType": "workflowStart",
"position": {"x": -150, "y": 100},
"outputs": [
{"key": "userChatInput", "type": "static", "valueType": "string"}
]
},
{
"nodeId": "aiChatNode",
"name": "AI Response",
"flowNodeType": "chatNode",
"position": {"x": 200, "y": 100},
"inputs": [
{
"key": "model",
"valueType": "string",
"value": "gpt-4"
},
{
"key": "systemPrompt",
"valueType": "string",
"value": "You are a professional AI assistant that can answer various questions. Please provide accurate and helpful answers based on user questions."
},
{
"key": "userChatInput",
"valueType": "string",
"value": ["workflowStart", "userChatInput"]
}
],
"outputs": [
{"key": "answerText", "type": "static", "valueType": "string"}
]
},
{
"nodeId": "outputNode",
"name": "Output Answer",
"flowNodeType": "answerNode",
"position": {"x": 550, "y": 100},
"inputs": [
{
"key": "text",
"valueType": "string",
"value": ["aiChatNode", "answerText"]
}
]
}
],
"edges": [
{
"source": "workflowStart",
"target": "aiChatNode",
"sourceHandle": "workflowStart-source-right",
"targetHandle": "aiChatNode-target-left"
},
{
"source": "aiChatNode",
"target": "outputNode",
"sourceHandle": "aiChatNode-source-right",
"targetHandle": "outputNode-target-left"
}
],
"chatConfig": {
"welcomeText": "Welcome to the AI Q&A assistant! Please enter your question.",
"variables": []
}
}
```
---
### Example 2: Document Translation Workflow (Based on Template)
**User Request**:
```
"Create a document translation workflow that translates user-uploaded documents from Chinese to English"
```
**Skill Processing**:
1. **Requirements Analysis**
```json
{
"purpose": "Document translation",
"domain": "document",
"complexity": "medium",
"features": ["readFiles", "aiChat", "textOutput"],
"inputs": ["userFiles"],
"outputs": ["translated document"]
}
```
2. **Template Matching**
- `文档翻译助手.json` - Score: 0.95 (perfect match!)
3. **JSON Generation**
- Use template directly, only adjust language direction in prompt
**Generated Workflow Structure**:
```
workflowStart → readFiles → translateNode → outputNode
```
**Key Node Configuration**:
- **readFiles Node**: Reads user-uploaded files
- **translateNode (chatNode)**: AI translates with specialized prompt
- **outputNode (answerNode)**: Outputs translated text
---
### Example 3: Incremental Modification (Add Knowledge Base)
**User Request**:
```
"I have an existing AI Q&A workflow (simple_qa_workflow.json),
I want to search the knowledge base first before AI answers,
find relevant information then generate response"
```
**Existing Workflow Structure**:
```
workflowStart → aiChatNode → outputNode
```
**Modification Goal**:
```
workflowStart → knowledgeBaseSearch → aiChatNode → outputNode
```
**Skill Processing**:
1. **Analyze Modification Intent**
```json
{
"action": "add",
"targetNodes": ["aiChatNode"],
"insertBefore": "aiChatNode",
"newNodes": [
{
"type": "datasetSearchNode",
"name": "Knowledge Base Search"
}
],
"modifications": {
"aiChatNode": {
"inputs": {
"quoteQA": ["knowledgeBaseSearch", "searchResult"]
}
}
}
}
```
2. **Execute Modification**
- Add `knowledgeBaseSearch` node
- Modify edge: `workflowStart → knowledgeBaseSearch`
- Add edge: `knowledgeBaseSearch → aiChatNode`
- Modify aiChatNode's inputs (add quoteQA)
3. **Re-layout Positions**
- workflowStart: (-150, 100)
- knowledgeBaseSearch: (50, 100) ← newly inserted
- aiChatNode: (400, 100) ← shifted right
- outputNode: (750, 100) ← shifted right
4. **Validation Result**
- ✅ All validations pass
**Modified JSON** (new and modified parts):
```json
{
"nodes": [
{
"nodeId": "knowledgeBaseSearch",
"name": "Knowledge Base Search",
"flowNodeType": "datasetSearchNode",
"position": {"x": 50, "y": 100},
"inputs": [
{
"key": "datasetIds",
"valueType": "selectDataset",
"value": [],
"required": true
},
{
"key": "searchQuery",
"valueType": "string",
"value": ["workflowStart", "userChatInput"],
"required": true
},
{
"key": "similarity",
"valueType": "number",
"value": 0.5
},
{
"key": "limitCount",
"valueType": "number",
"value": 5
}
],
"outputs": [
{
"key": "searchResult",
"type": "static",
"valueType": "datasetQuote"
}
]
},
{
"nodeId": "aiChatNode",
"inputs": [
{
"key": "quoteQA",
"valueType": "datasetQuote",
"value": ["knowledgeBaseSearch", "searchResult"]
}
]
}
],
"edges": [
{
"source": "workflowStart",
"target": "knowledgeBaseSearch"
},
{
"source": "knowledgeBaseSearch",
"target": "aiChatNode"
},
{
"source": "aiChatNode",
"target": "outputNode"
}
]
}
```
**Modification Summary Report**:
- ✅ Added 1 node: `knowledgeBaseSearch` (datasetSearchNode)
- ✅ Modified 1 node: `aiChatNode` (added quoteQA input)
- ✅ Added 1 edge: `knowledgeBaseSearch → aiChatNode`
- ✅ Modified 1 edge: `workflowStart → knowledgeBaseSearch` (originally `workflowStart → aiChatNode`)
- ✅ Re-layouted all positions
---
## Technical Implementation
### NodeId Generation Algorithm
**Rules**:
1. Fixed IDs: `workflowStart`, `userGuide` (systemConfig)
2. Semantic naming: Generate based on node name (remove spaces and Chinese, convert to camelCase)
3. Uniqueness guarantee: If conflict, add `_1`, `_2` suffix
**Examples**:
- `generateNodeId('chatNode', 'Travel Planning Assistant')` → `TravelPlanningAssistantNode`
- `generateNodeId('httpRequest468', 'Weather Query')` → `WeatherQueryNode`
- `generateNodeId('chatNode', 'Assistant', {TravelPlanningAssistantNode})` → `AssistantNode_1`
### Position Auto-Layout Algorithm
**Algorithm**: Hierarchical Layout
**Steps**:
1. Topological sort to determine layers (BFS)
2. Calculate horizontal position and vertical spacing for each layer
3. Fixed position for special nodes (userGuide: {x: -600, y: -250})
**Parameters**:
- LAYER_GAP_X = 350 (horizontal spacing between layers)
- NODE_GAP_Y = 150 (vertical spacing within layer)
- START_X = -200, START_Y = 0
### Reference Format Description
**Two Reference Formats**:
**1. Array Format (direct value reference)**:
```json
"value": ["workflowStart", "userChatInput"]
```
**2. Template Syntax (string concatenation)**:
```json
"value": "Please create a plan for me.\n\nDestination: {{$workflowStart.userChatInput$}}\n\nWeather: {{$weatherQueryNode.httpRawResponse$}}"
```
**Important**: Template syntax is `{{$nodeId.key$}}` (double braces with single $)
### Special Node Handling
**loop Node**:
- Must have `childrenNodeIdList` field
- Child nodes must have `parentNodeId` field
- Child nodes include: loopStart, [processing nodes...], loopEnd
**ifElse Node**:
- Has multiple output branches
- Each branch corresponds to different conditions
---
## Best Practices
### Do's (Recommended Practices)
- ✅ **Always validate at three levels** - format, connections, logic
- ✅ **Use meaningful nodeIds** - use semantic names (e.g., `weatherQueryNode`)
- ✅ **Prefer template matching** - template-based generation is more reliable than creating from scratch
- ✅ **Use array references for direct values** - `["nodeId", "key"]`
- ✅ **Use template references for string concatenation** - `{{$nodeId.key$}}`
- ✅ **Auto-layout positions** - use auto-layout algorithm
- ✅ **Include system config node** - always include userGuide
- ✅ **Test with validation** - use built-in validation before importing to FastGPT
- ✅ **Provide clear error messages** - include location and fix suggestions
- ✅ **Document modifications** - generate modification summary report
### Don'ts (Prohibited Practices)
- ❌ **Don't skip validation** - never skip validation
- ❌ **Don't use invalid node types** - check flowNodeType validity
- ❌ **Don't create circular references without loop nodes** - no illegal cycles
- ❌ **Don't forget required fields** - nodeId, name, flowNodeType, position, inputs, outputs
- ❌ **Don't use wrong reference format** - prohibited: `{{nodeId.key}}` (missing $)
- ❌ **Don't ignore warnings** - warnings should be fixed
- ❌ **Don't hardcode positions** - except userGuide, use auto-layout
- ❌ **Don't create unreachable nodes** - ensure reachable from workflowStart
- ❌ **Don't generate overly complex workflows** - workflows with >20 nodes should be split
---
## Troubleshooting
### FAQ
**Q1: Import to FastGPT reports "Invalid node type"**
A: Check the `flowNodeType` field, ensure using supported types. Reference `references/node_types_reference.md`. Common errors:
- `chatNode` is correct (not `aiChat`)
- Number suffixes (like `httpRequest468`) should be retained
**Q2: References between nodes not working**
A: Check reference format:
- ✅ Correct: `["workflowStart", "userChatInput"]` or `{{$workflowStart.userChatInput$}}`
- ❌ Wrong: `{$workflowStart.userChatInput$}` (single brace, should be double)
**Q3: Some nodes not executing at runtime**
A: Use built-in validation to check Level 3, ensure all nodes reachable from workflowStart
**Q4: Parallel nodes not executing in parallel**
A: Ensure multiple nodes' targets are the same aggregation node, and these nodes have no dependencies
**Q5: Loop workflow errors**
A: Must use `flowNodeType: "loop"` node, configure `parentNodeId` and `childrenNodeIdList`
### Debug Checklist
```markdown
## Phase 1: JSON Format Check
- [ ] JSON is parseable
- [ ] Contains nodes, edges, chatConfig
- [ ] All strings use double quotes
- [ ] No trailing commas
## Phase 2: Node Check
- [ ] workflowStart node exists
- [ ] At least one output node exists
- [ ] All flowNodeType valid
- [ ] All nodeId unique
- [ ] All position contains x, y
## Phase 3: Connection Check
- [ ] All edges' source and target exist
- [ ] All handle format correct
- [ ] No duplicate edges, no self-loops
## Phase 4: Reference Check
- [ ] All array references' nodes and keys exist
- [ ] All template references' nodes and keys exist
- [ ] Reference types match
## Phase 5: Logic Check
- [ ] All nodes reachable from workflowStart
- [ ] No illegal cycles
- [ ] No dead-end nodes
- [ ] All required inputs have values
## Phase 6: Runtime Test
- [ ] Import to FastGPT without errors
- [ ] Configure necessary parameters
- [ ] Run test cases
- [ ] Check output meets expectations
```
---
## Quick Reference
### Built-in Template Files
- `templates/文档翻译助手.json` - Simple workflow, document processing
- `templates/销售陪练大师.json` - Medium complexity, conversational AI
- `templates/简历筛选助手_飞书.json` - Complex workflow, data + external integration
- `templates/AI金融日报.json` - Scheduled trigger, multi-agent
### Detailed Documentation
- `references/node_types_reference.md` - Complete reference of 40+ node types
- `references/validation_rules.md` - Detailed three-layer validation rules
- `references/template_matching.md` - Template matching algorithm
- `references/json_structure_spec.md` - Complete FastGPT JSON structure specification
### Example Documents
- `examples/example1_simple_qa.md` - Complete example: Simple Q&A workflow
- `examples/example2_travel_planning.md` - Complete example: Travel planning workflow
- `examples/example3_incremental_modify.md` - Complete example: Incremental modification
### Common Commands
```bash
# Validate workflow JSON
node scripts/validate_workflow.js path/to/workflow.json
# Copy template
cp templates/文档翻译助手.json my_workflow.json
# View template list
ls -lh templates/
```
---
**Version**: 1.0
**Last Updated**: 2025-01-02
**Compatibility**: FastGPT v4.8+
Name Size