home / skills / yyh211 / claude-meta-skill / fastgpt-workflow-generator

fastgpt-workflow-generator skill

/fastgpt-workflow-generator

This skill generates production-ready FastGPT workflow JSON from natural language requirements, matching templates, validating structure, and enabling

npx playbooks add skill yyh211/claude-meta-skill --skill fastgpt-workflow-generator

Review the files below or copy the command above to add this skill to your agents.

Files (12)
SKILL.md
21.8 KB
---
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+

Overview

This skill generates production-ready FastGPT workflow JSON from plain-language requirements. It maps intent to semantic templates, produces or modifies node-based workflows, and returns validated JSON ready for deployment. The generator supports incremental edits and enforces multi-layer validation to ensure correctness.

How this skill works

The skill first extracts a structured requirements object from user input (purpose, domain, complexity, features, inputs/outputs, integrations). It selects a matching built-in template using coarse metadata filtering and semantic similarity, then generates or adjusts nodes, ids, references, and layout. Finally it runs three validation layers (format, connections, logic completeness) and outputs the workflow JSON with a validation report and suggested fixes.

When to use it

  • Create a new FastGPT workflow from natural language requirements
  • Produce workflow JSON based on an existing pattern or template
  • Modify an existing workflow JSON to add, remove, or reconnect nodes
  • Validate and fix workflow JSON for format, connections, or logic issues
  • Design multi-agent or parallel workflows with orchestration and integrations

Best practices

  • Provide a clear purpose, domain, complexity, and required integrations up front
  • Specify required inputs and outputs and any real-time constraints or triggers
  • Indicate whether to reuse a template or build from scratch to guide matching
  • Request incremental changes (add/delete/modify) with target node names and intent
  • Review the validation report and accept suggested fixes before deployment

Example use cases

  • Generate a simple AI Q&A workflow: user question → chat node → answer node
  • Create a document translation pipeline that reads uploads, translates, and returns results
  • Assemble a scheduled financial news aggregator with parallel scraping agents
  • Insert a knowledge-base search node before an AI responder to improve answers
  • Validate and correct a hand-edited workflow JSON to pass all connection and logic checks

FAQ

Can the skill modify an existing workflow JSON?

Yes. It supports add, delete, modify, and reconnect operations, recalculates layout, and revalidates the result.

How does template selection work?

Templates are ranked by domain, complexity, feature overlap, node count similarity, and semantic similarity. Scores determine whether to reuse, adapt, or create from scratch.