dify_creator
npx skills add https://github.com/muranustb/skills-create_skills --skill dify_creator
Agent 安装分布
Skill 文档
Dify 工使µçæå¨ (dify_creator)
éè¿å¤è½®å¯¹è¯å¼å¯¼ç¨æ·æç¡®éæ±ï¼åè organized_dsl/ ç®å½ä¸çç°ææ¡ä¾ï¼çæç¬¦åå¯¹åº Dify çæ¬è§èç DSL YAML æä»¶ï¼å¯ç´æ¥å¯¼å
¥ Dify 使ç¨ã
â ï¸ éè¦ï¼æç´¢æä»¶åå¿ é¡»å 忢尿è½ç®å½ï¼
cd "c:\Users\14429\.claude\skills\dify_creator"ç¶ååæç´¢
organized_dsl/INDEX.mdåorganized_dsl/**/*.yml
æ ¸å¿è½å
- æºè½å¯¹è¯å¼å¯¼ï¼éè¿æé®å¸®å©ç¨æ·æ¢³çéæ±ï¼é¿å éæ¼å ³é®ä¿¡æ¯
- æ¡ä¾åèå®ä½ï¼åºäº INDEX.md ç´¢å¼ï¼èªå¨å¹é ç¸ä¼¼ Dify æ¡ä¾
- 工使µç»æè®¾è®¡ï¼åæéæ±åç»åºæµç¨ç»æï¼ä¸ç¨æ·ç¡®è®¤
- 宿´ DSL çæï¼åè DSL èç¹æåï¼çæç¬¦åè§èç宿´ YAML é ç½®
使ç¨åºæ¯
- å建æºè½å®¢æå¯¹è¯æµç¨
- æå»º RAG ç¥è¯åºé®çç³»ç»
- 设计é³è§é¢å¤ç工使µ
- å¼å代ç çæåææ¡£å¤çå·¥å ·
- æå»ºå¤æ¨¡ååä½ç夿æµç¨
工使µç¨æ»è§
ç¨æ·éæ± â æ¡ä¾å®ä½ â æµç¨è®¾è®¡ â ç¨æ·ç¡®è®¤ â DSLçæ â 交ä»
æ ¸å¿æ¥éª¤
| æ¥éª¤ | åç§° | è¾åº |
|---|---|---|
| Step 1 | æ¶ééæ± | éæ±ææ¡£ |
| Step 2 | æ¡ä¾å®ä½ | åèæ¡ä¾å表 |
| Step 3 | æµç¨è®¾è®¡ | æµç¨ç»æå¾ |
| Step 4 | ç¨æ·ç¡®è®¤ | 确认åé¦ |
| Step 5 | DSLçæ | 宿´YAMLæä»¶ |
Step 1ï¼æ¶éç¨æ·éæ±
é¦å åç¨æ·è¯¢é®åºç¡ä¿¡æ¯ï¼æç¡®å·¥ä½æµçç®æ ååè½ã
1.1 åºç¡ä¿¡æ¯æ¶é
请åè¯æå
³äºä½ è¦å建ç Dify 工使µçåºæ¬ä¿¡æ¯ï¼
1. **工使µåç§°**ï¼è±æï¼ä½¿ç¨è¿å符ï¼å¦ï¼document-processorï¼
2. **ä¸å¥è¯æè¿°**ï¼è¿ä¸ªå·¥ä½æµåä»ä¹ï¼
3. **åºç¨ç±»å**ï¼
- workflowï¼æ¹å¤çä»»å¡ï¼åè½®æ§è¡
- advanced-chatï¼é«çº§è天模å¼ï¼æ¯æå¤è½®å¯¹è¯
- chatflowï¼å¯¹è¯å¼åºç¨ï¼ç®åå¤è½®äº¤äº
4. **ç®æ ç¨æ·**ï¼è°ä¼ä½¿ç¨è¿ä¸ªå·¥ä½æµï¼
1.2 åè½éæ±æ¶é
æ ¹æ®ç¨æ·éæ©çåºç¨ç±»åï¼æ·±å ¥è¯¢é®åè½éæ±ï¼
éç¨é®é¢ï¼
5. **è¾å
¥æ¹å¼**ï¼ç¨æ·å¦ä½æä¾è¾å
¥ï¼
- ææ¬è¾å
¥ï¼çææ¬/é¿ææ¬ï¼
- æä»¶ä¸ä¼ ï¼å¾ç/PDF/é³è§é¢/ææ¡£ï¼
- æ··åè¾å
¥
6. **æ ¸å¿å¤ç**ï¼å·¥ä½æµéè¦æ§è¡åªäºå¤çæ¥éª¤ï¼
- æ°æ®é¢å¤ç â æ ¸å¿å¤ç â ç»æè¾åº
- 请尽å¯è½æè¿°æ¯ä¸ªæ¥éª¤
7. **è¾åºå½¢å¼**ï¼æç»è¿åä»ä¹ç»æï¼
- ææ¬åå¤
- ç»æåæ°æ®ï¼JSON/Markdownè¡¨æ ¼ï¼
- æä»¶ï¼å¾ç/PDF/é³é¢ï¼
- æ··åè¾åº
æ ¹æ®åè½ç±»åè¡¥å ï¼
| åè½ç±»å | è¡¥å é®é¢ |
|---|---|
| RAGé®ç | ç¥è¯åºæ¥æºï¼æ£ç´¢çç¥ï¼å ³é®è¯/åéï¼ï¼å¬åæ°éï¼æ¯å¦éè¦éæåºï¼ |
| é³è§é¢å¤ç | é³é¢æåï¼è¯é³è¯å«ï¼ASRï¼ï¼å 容æ»ç»ï¼åå¹çæï¼ |
| ææ¡£å¤ç | PDFè§£æï¼å 容æåï¼æ ¼å¼è½¬æ¢ï¼OCRè¯å«ï¼ |
| å¾åçæ | æçå¾ï¼å¾çå¾ï¼é£æ ¼è¿ç§»ï¼æ¯å¦éè¦å¤å¾ç»åï¼ |
| æ°æ®å¤ç | æ°æ®æ¥æºï¼API/æ°æ®åº/æä»¶ï¼ï¼åæç»´åº¦ï¼å¾è¡¨ç±»åï¼ |
| å·¥å ·è°ç¨ | 使ç¨åªäºå·¥å ·/æä»¶ï¼è°ç¨é¢çï¼æ¯å¦éè¦MCPï¼ |
| 夿¨¡ååä½ | è°ç¨åªäºæ¨¡åï¼åå·¥æ¯ä»ä¹ï¼æ¨¡åé´å¦ä½ä¼ éä¿¡æ¯ï¼ |
1.3 模ååå·¥å ·é ç½®
8. **大模åéæ©**ï¼
- 模åæä¾åï¼OpenAI / Anthropic / å½å
模åï¼ç¡
åºæµå¨/éä¹åé®/é¶ä¸ä¸ç©çï¼
- 模ååç§°ï¼å¦ gpt-4o, deepseek-V3, qwen-max
- åæ°è®¾ç½®ï¼temperatureï¼åæåº¦ 0-1ï¼ãmax_tokens ç
9. **å·¥å
·/æä»¶**ï¼
- å
置工å
·ï¼ä»£ç æ§è¡ãç¥è¯æ£ç´¢ãHTTP请æ±ãTTSç
- ç¬¬ä¸æ¹æä»¶ï¼PDFå¤çãæ°æ®åºè¿æ¥ç
- MCPæå¡ï¼æ¯å¦éè¦éæå¤é¨MCPå·¥å
·ï¼
10. **ç¥è¯åºï¼å¯éï¼**ï¼
- æ¯å¦éè¦æ¥å
¥ç¥è¯åºï¼
- ç¥è¯åºIDååç§°
- æ£ç´¢çç¥é
ç½®
1.4 æµç¨æ§å¶è¯¢é®
11. **æµç¨åæ¯**ï¼æ¯å¦ææ¡ä»¶åæ¯ï¼ï¼æ¯/å¦ï¼
- 妿æ¯ï¼åæ¯æ¡ä»¶æ¯ä»ä¹ï¼ï¼ä¾å¦ï¼æ ¹æ®ç¨æ·æå¾å类走ä¸åå¤çè·¯å¾ï¼
12. **循ç¯å¤ç**ï¼æ¯å¦éè¦è¿ä»£å¤çæ¹éæ°æ®ï¼ï¼æ¯/å¦ï¼
- ä¾å¦ï¼æ¹éå¤çå¤ä¸ªæä»¶ã对åè¡¨ä¸æ¯é¡¹è¿è¡å¤ç
13. **ä¼è¯ç¶æ**ï¼æ¯å¦éè¦ä¿åä¼è¯ç¶æï¼ï¼æ¯/å¦ï¼
- ä¾å¦ï¼è®°å½ç¨æ·å好ã跨轮次åéä¼ é
14. **é误å¤ç**ï¼å¤±è´¥æ¶å¦ä½å¤çï¼
- ç»æ¢æµç¨å¹¶æ¥é
- ç»§ç»æ§è¡å
¶ä»åæ¯
- è¿åé»è®¤ç»æ
Step 2ï¼æ¡ä¾å®ä½ï¼åºäº INDEX.mdï¼
æ ¹æ®æ¶éçéæ±ï¼å¨ organized_dsl/INDEX.md ä¸å®ä½ç¸ä¼¼æ¡ä¾ã
2.0 æç´¢è·¯å¾é ç½®
â ï¸ **å
³é®æ¥éª¤ï¼æç´¢åå¿
é¡»å
忢尿è½ç®å½ï¼**
**ç¬¬ä¸æ¥ï¼åæ¢å°æè½ç®å½ï¼å¿
é¡»æ§è¡ï¼**
```bash
cd "c:\Users\14429\.claude\skills\dify_creator"
ç¬¬äºæ¥ï¼æç´¢ DSL æä»¶
- æç´¢
organized_dsl/**/*.ymlï¼å¨æè½ç®å½ä¸æç´¢ï¼
ç¬¬ä¸æ¥ï¼æç´¢ç´¢å¼æä»¶
- æç´¢
organized_dsl/INDEX.md - æç´¢
organized_dsl/Dify_DSL_èç¹å®æ´åèæå.md
éè¯¯åæ³ï¼
- â ç´æ¥æç´¢
**/*.ymlï¼å½åç®å½å¯è½ä¸å¯¹ï¼ - â æç´¢
**/organized_dsl/**/*.ymlï¼è·¯å¾éå¤ï¼ - â æç´¢
**/*.yamlï¼æä»¶æ¯ .yml 䏿¯ .yamlï¼ - â å¨å
¶ä»ç®å½ä¸æç´¢
organized_dsl/**/*.ymlï¼ä¼æ¾ä¸å°ï¼
æ£ç¡®åæ³ï¼
- å
æ§è¡
cd "c:\Users\14429\.claude\skills\dify_creator" - åæç´¢
organized_dsl/**/*.yml - åæç´¢
organized_dsl/INDEX.md
### 2.1 读å INDEX.md ç´¢å¼
é¦å
读åç´¢å¼æä»¶äºè§£æ¡ä¾åç±»ï¼
```markdown
1. æç´¢å¹¶è¯»å `organized_dsl/INDEX.md`
2. æ ¹æ®ç¨æ·éæ±çåè½ç±»åï¼å®ä½ç¸å
³åç±»ç®å½
3. å¨å¯¹åºç®å½ä¸æç´¢ç¸ä¼¼åè½ç DSL æ¡ä¾ï¼ä½¿ç¨ `organized_dsl/**/*.yml`ï¼
2.2 åç±»å®ä½
æ ¹æ®åè½ç±»åæ¥æ¾å¯¹åºç®å½ï¼
æ ¹æ®ä½ çéæ±ï¼æå®ä½å°ä»¥ä¸ç¸å
³åç±»ï¼
| åç±» | ç®å½è·¯å¾ |
|------|----------|
| å
容åä½ | `01_å
容çæä¸åä½/` |
| å¾åçæ | `02_å¾åçæä¸è®¾è®¡/` |
| è§é¢çæ | `03_è§é¢çæ/` |
| æ°æ®åæ | `04_æ°æ®åæä¸å¯è§å/` |
| ææ¡£å¤ç | `05_ææ¡£å¤çä¸OCR/` |
| ç¥è¯åºRAG | `06_ç¥è¯åºä¸RAG/` |
| Agentå·¥å
· | `07_Agentä¸å·¥å
·è°ç¨/` |
| æè²å¦ä¹ | `08_æè²ä¸å¦ä¹ /` |
| åä¸åå
¬ | `09_åä¸ä¸åå
¬/` |
| å¤åªä½å¤ç | `10_å¤åªä½å¤ç/` |
| 代ç å¼å | `11_代ç ä¸å¼å/` |
| åæå¨±ä¹ | `12_åæä¸å¨±ä¹/` |
2.3 å¤æåº¦å¹é
æ ¹æ®èç¹æ°éå¹é å¤æåº¦ï¼
| å¤æåº¦ | èç¹æ° | éç¨åºæ¯ |
|---|---|---|
| ç®å | 3-5个 | åä¸åè½ï¼çº¿æ§æµç¨ |
| ä¸ç | 6-15个 | 夿¥éª¤å¤çï¼æåæ¯ |
| 夿 | 16+个 | 夿¨¡ååä½ï¼å¾ªç¯å¤ç |
2.4 è¾åºåèæ¡ä¾å表
æ¾å°ä»¥ä¸ä¸ä½ éæ±ç¸å
³çåèæ¡ä¾ï¼
### ð æ¡ä¾1ï¼[æ¡ä¾åç§°]
- **ä½ç½®**ï¼`ç®å½è·¯å¾/æä»¶å.yml`
- **å¤æåº¦**ï¼ç®å/ä¸ç/夿
- **èç¹æ°**ï¼X个
- **主è¦èç¹**ï¼start â llm â answer
- **åèä»·å¼**ï¼èç¹ç»æãPrompt模æ¿ãæµç¨è®¾è®¡
### ð æ¡ä¾2ï¼[æ¡ä¾åç§°]
...
请确认ï¼
- æ¯å¦éè¦æ¥çæ´å¤ç¸ä¼¼æ¡ä¾ï¼
- åªäºæ¡ä¾çç»ææç¬¦åä½ çéæ±ï¼
2.5 读åå¹¶åæåèæ¡ä¾
éå®åèæ¡ä¾åï¼è¯»å DSL æä»¶è¿è¡åæï¼
æå·²è¯»ååèæ¡ä¾ï¼ä»¥ä¸æ¯å
³é®é
ç½®æåï¼
**èç¹ç»æï¼**
[å¼å§èç¹] â [LLMèç¹] – 模å: xxx, Prompt: xxx â [å·¥å ·èç¹] – å·¥å ·: xxx â [è¾åºèç¹]
**å
³é®é
ç½®åèï¼**
- LLM prompt模æ¿ï¼...
- åéä¼ éæ¹å¼ï¼...
- æ¡ä»¶åæ¯é»è¾ï¼...
Step 3ï¼å·¥ä½æµç»æè®¾è®¡
æ ¹æ®éæ±åæååèæ¡ä¾ï¼è®¾è®¡å·¥ä½æµç»æã
3.1 设计åå
- KISSååï¼ä¿æç®åï¼é¿å è¿åº¦è®¾è®¡
- 模ååï¼å°å¤ææµç¨æå为å¯å¤ç¨çæ¥éª¤
- æ¸ æ°åéï¼ä½¿ç¨ææä¹çåéåï¼ä¾¿äºè¿½è¸ª
3.2 è¾åºæµç¨ç»æå¾
æ ¹æ®ä½ çéæ±ï¼æè®¾è®¡äºä»¥ä¸å·¥ä½æµç»æï¼
## ð æµç¨ç»æå¾
âââââââââââââââ â å¼å§èç¹ â è¾å ¥ï¼{{input_var}} ââââââââ¬âââââââ â âââââââââââââââ â é¢å¤çèç¹ â åè½ï¼æ°æ®æ¸ æ´/æ ¼å¼è½¬æ¢ ââââââââ¬âââââââ â âââââââââââââââ â æ ¸å¿å¤ç â åè½ï¼LLMè°ç¨/å·¥å ·æ§è¡ â (忝夿) â æ¡ä»¶ï¼{{condition}} ââââââââ¬âââââââ ââââââ´âââââ â â ââââââââ ââââââââ â忝A â â忝B â ââââââ¬ââ ââââââ¬ââ â â ââââââ¬ââââââ â âââââââââââââââ â ç»æå¤ç â åè½ï¼æ ¼å¼å/èå ââââââââ¬âââââââ â âââââââââââââââ â è¾åºèç¹ â è¾åºï¼{{output_var}} âââââââââââââââ
## ð èç¹å表
| åºå· | èç¹åç§° | èç¹ç±»å | åè½æè¿° | è¾å
¥åé | è¾åºåé |
|------|---------|---------|---------|---------|---------|
| 1 | å¼å§ | start | æ¥æ¶ç¨æ·è¾å
¥ | - | user_input |
| 2 | é¢å¤ç | code | æ°æ®æ¸
æ´ | user_input | clean_data |
| 3 | LLMå¤ç | llm | çæå
容 | clean_data | llm_result |
| 4 | æ¡ä»¶å¤æ | if-else | 忝å¤ç | llm_result | branch |
| 5 | è¾åº | answer | è¿åç»æ | final_result | - |
## ð å
³é®é
ç½®
**LLMé
ç½®ï¼**
- 模åï¼xxx
- Prompt模æ¿ï¼xxx
**åéä¼ éï¼**
- 䏿¸¸è¾åº â 䏿¸¸è¾å
¥
Step 4ï¼ç¨æ·ç¡®è®¤ï¼â ï¸ å¿ é¡»æ¥éª¤ï¼
è¦åï¼æªè·å¾ç¨æ·æç¡®ç¡®è®¤åï¼ç¦æ¢çæ DSLï¼
åç¨æ·å±ç¤ºç»æè®¾è®¡ï¼å¿ é¡»è·å以ä¸ç¡®è®¤åæè½ç»§ç»ï¼
4.1 确认å 容
## 工使µç»æç¡®è®¤ â ï¸
å¨çæ DSL æä»¶ä¹åï¼è¯·ç¡®è®¤ä»¥ä¸è®¾è®¡ï¼
### â
æµç¨ç»æ
- èç¹æ°éï¼X 个
- æµç¨åæ¯ï¼X æ¡
- 循ç¯å¤çï¼X å¤
### â
èç¹é
ç½®
1. [èç¹1]ï¼ç¡®è®¤é
ç½® â
2. [èç¹2]ï¼éè¦è°æ´ â
3. [èç¹3]ï¼ç¡®è®¤é
ç½® â
### â
å¾
确认äºé¡¹
1. 模åéæ©æ¯å¦æ£ç¡®ï¼
2. Promptæ¨¡æ¿æ¯å¦éè¦è°æ´ï¼
3. 忝æ¡ä»¶æ¯å¦åçï¼
4. è¾åºæ ¼å¼æ¯å¦æ»¡è¶³éæ±ï¼
**请åå¤ã确认ãæãç»§ç»ãä»¥çæ DSLï¼ææä¾ä¿®æ¹æè§ã**
4.2 ç¡®è®¤æ£æ¥æ¸ å
çæ DSL åå¿
须确认以ä¸å
¨é¨é¡¹ç®ï¼
- [ ] ç¨æ·æç¡®åå¤ã确认ãæãç»§ç»ã
- [ ] ææèç¹é
置已ä¸ç¨æ·æ ¸å¯¹
- [ ] 模åååæ°å·²è·ç¨æ·è®¤å¯
- [ ] è¾åºæ ¼å¼ç¬¦åç¨æ·éæ±
**æªæ»¡è¶³ä¸è¿°æ¡ä»¶ï¼ç¦æ¢è·³å° Step 5ï¼**
4.3 è°æ´è¿ä»£
å¦æç¨æ·æä¿®æ¹æè§ï¼è¿ä»£è°æ´ç´å°ç¡®è®¤ï¼
æ ¹æ®ä½ çåé¦ï¼æè¿è¡äºä»¥ä¸è°æ´ï¼
1. ä¿®æ¹äº LLM èç¹ Prompt 模æ¿
2. æ·»å äºæ°çæ¡ä»¶åæ¯
3. è°æ´äºåéä¼ éé»è¾
è¯·åæ¬¡ç¡®è®¤ã
Step 5ï¼çæå®æ´ DSLï¼â ï¸ å¿ é¡»åèæ¡ä¾ï¼
çæ DSL åå¿ é¡»å®æä»¥ä¸æ¥éª¤ï¼
- â
已忢尿è½ç®å½ï¼
cd "c:\Users\14429\.claude\skills\dify_creator" - â å·²å¨ Step 2 ä¸è¯»åå¹¶åæäºåèæ¡ä¾
- â å·²å¨ Step 4 ä¸è·å¾ç¨æ·æç¡®ç¡®è®¤
- â
已读å
organized_dsl/Dify_DSL_èç¹å®æ´åèæå.md
5.1 åç½®æ£æ¥
çæ DSL å确认ï¼
- [ ] å·²éå®åèæ¡ä¾æä»¶ï¼è·¯å¾ï¼xxx/xxx.ymlï¼
- [ ] 已读åèç¹é
ç½®åèæå
- [ ] å·²è·å¾ç¨æ·ã确认ãåå¤
- [ ] ææèç¹é
置已确å®
**æªå®æä»¥ä¸æ¥éª¤ï¼ç¦æ¢çæ DSLï¼**
5.2 çæç»æ
app:
description: '{{description}}'
icon: '{{icon}}'
icon_background: '{{icon_background}}'
mode: '{{mode}}'
name: '{{name}}'
use_icon_as_answer_icon: false
kind: app
version: {{åèæ¡ä¾ççæ¬å·}}
workflow:
conversation_variables: []
environment_variables: []
features:
file_upload: {}
# ... å
¶ä»åè½é
ç½®
graph:
edges: []
nodes: []
viewport: {}
5.3 èç¹ ID çæè§å
- ä½¿ç¨æ¶é´æ³+éæºæ°ä½ä¸ºèç¹ ID
- æ ¼å¼ï¼
{æ¶é´æ³}{éæº6使°å} - 示ä¾ï¼
1741011655068,1735195133945
5.4 ä½ç½®è®¡ç®
èç¹å¨ç»å¸ä¸çä½ç½®æ ¹æ®æµç¨é¡ºåºèªå¨è®¡ç®ï¼
- X åæ ï¼æ¯å¢å ä¸ä¸ªèç¹åå³ç§»å¨çº¦ 300px
- Y åæ ï¼ç»ä¸å± ä¸ææ ¹æ®åæ¯è°æ´
5.5 宿´è¾åºç¤ºä¾
# ============================================
# Dify 工使µ DSL æä»¶
# åç§°ï¼xxx
# çææ¶é´ï¼2026-01-03
# åèæ¡ä¾ï¼xxx.yml
# ============================================
app:
description: '工使µæè¿°'
icon: ð¤
icon_background: '#FFEAD5'
mode: workflow
name: xxx
kind: app
version: {{åèæ¡ä¾ççæ¬å·}}
workflow:
graph:
edges:
# ... è¿æ¥é
ç½®
nodes:
# ... èç¹é
ç½®
â ï¸ 5.6 èç¹ç¼åè§åï¼éè¦ï¼ï¼
æ¯ä¸ªèç¹é½å¿ é¡»åè organized_dsl æ¡ä¾åºä¸çç¤ºä¾æ ¼å¼ç¼åï¼
çæå·¥ä½æµæ¶ï¼è¯·ä¸¥æ ¼éµå¾ªä»¥ä¸è§åï¼
1. **å
æ¥æ¾åèæ¡ä¾**
- æç´¢ `organized_dsl/**/*.yml` æ¾å°ç¸ä¼¼åè½ç DSL æä»¶
- æç´¢ `organized_dsl/Dify_DSL_èç¹å®æ´åèæå.md` æ¥çèç¹é
置说æ
2. **èç¹ç»æå¿
须宿´**
æ¯ä¸ªèç¹å¿
é¡»å
å«ï¼
- `id`: å¯ä¸æ è¯
- `data.type`: èç¹ç±»å
- `data.title`: èç¹æ é¢
- `position`: ç»å¸ä½ç½® {x, y}
- `width`/`height`: èç¹å°ºå¯¸ï¼å¯éï¼
3. **ç¦æ¢å空ç¼å**
- â ä¸è¦åè®°å¿ææ³è±¡ç¼åèç¹
- â
å¿
é¡»å¤å¶åèæ¡ä¾çç»æï¼æ¿æ¢å
³é®å段
4. **ç¹å«æ³¨æäºé¡¹**
- **è¿ä»£èç¹**ï¼å¿
é¡»å
å« iteration-start åèç¹åææå¿
è¦æ è®°
- **LLM èç¹**ï¼å¿
é¡»å
å« model.providerãmodel.nameãprompt_template
- **HTTP 请æ±**ï¼å¿
é¡»å
嫿£ç¡®ç authorization å body é
ç½®
- **åéå¼ç¨**ï¼å¿
é¡»ä½¿ç¨ `{{#èç¹ID.åé#}}` æ ¼å¼
â ï¸ 5.7 çæåå¼ºå¶æ£æ¥ï¼âå¿ é¡»æ§è¡ï¼
çæ DSL åï¼å¿ é¡»æä»¥ä¸æ¥éª¤å¼ºå¶æ£æ¥æ¯ä¸ªèç¹ï¼
## DSL çæåå¼ºå¶æ£æ¥ â ï¸
**è¦åï¼æªå®ææ£æ¥ï¼ç¦æ¢äº¤ä»ç»ç¨æ·ï¼**
### ç¬¬ä¸æ¥ï¼ç¡®å®çæ¬å·
```yaml
version: {{åèæ¡ä¾ççæ¬å·}} # â
ä¸åèæ¡ä¾ä¿æä¸è´
è¦ç¹ï¼ çæ¬å·åºä¸æéåèæ¡ä¾ä¿æä¸è´ï¼ä¸æ¯åºå®å¼ã
ç¬¬äºæ¥ï¼éåæ¯ä¸ªèç¹ï¼éä¸å¯¹ç §åèæ¡ä¾æ£æ¥
å¯¹äºæ¯ä¸ªçæçèç¹ï¼æ§è¡ä»¥ä¸æ£æ¥ï¼
-
å¨åèæ¡ä¾ä¸æ¾å°åç±»åèç¹
cd "c:\Users\14429\.claude\skills\dify_creator" rg "type: èç¹ç±»å" organized_dsl/**/*.yml | head -20 -
读ååèæ¡ä¾ä¸çèç¹ç»æ
- æå¼å¯¹åºç DSL æä»¶
- æ¾å°ç¸åç±»åçèç¹é ç½®
-
éåæ®µå¯¹æ¯
åæ®µ åèæ¡ä¾ çæç»æ æ¯å¦æ£ç¡® data.positionAbsolute false ? data.selected false ? height 52 ? width 242 ? … … … -
æ è®°å·®å¼å¹¶ä¿®æ£
- åç°ä»»ä½å·®å¼ï¼ç«å³ä¿®æ£
- ä¸è½ç¡®å®çåæ®µï¼åèæ¡ä¾ä½¿ç¨åå¼
ç¬¬ä¸æ¥ï¼è¾¹è¿æ¥æ£æ¥
é忝æ¡è¾¹ï¼æ£æ¥ä»¥ä¸å段ï¼
-
data.sourceType: æºèç¹ç±»å -
data.targetType: ç®æ èç¹ç±»å -
data.selected: false -
data.isInIteration: falseï¼è¿ä»£å¤ï¼ -
type: custom/true/false/isInIteration
ç¬¬åæ¥ï¼ç¹æ®èç¹éç¹æ£æ¥
| èç¹ç±»å | æ£æ¥éç¹ |
|---|---|
variable-aggregator |
output_type + variables æ°ç»ï¼ä¸æ¯ outputs/formatter_templateï¼ |
end |
type: end + outputsï¼ä¸æ¯ type: answerï¼ |
iteration |
start_node_id æå iteration-start |
llm |
model.provider, model.name, prompt_template |
http-request |
authorization, body é
ç½®å®æ´ |
ç¬¬äºæ¥ï¼æ£æ¥æ¥å
## DSL æ£æ¥æ¥å
### èç¹æ£æ¥ç»æ
| èç¹ID | èç¹ç±»å | æ£æ¥ç¶æ | é®é¢ |
|--------|---------|---------|------|
| xxx | start | â
éè¿ | æ |
| xxx | llm | â 失败 | ç¼ºå° model.provider |
### è¾¹æ£æ¥ç»æ
| è¾¹ID | ç±»å | æ£æ¥ç¶æ | é®é¢ |
|------|-----|---------|------|
| xxx | custom | â
éè¿ | æ |
### æç»ç»è®º
- [ ] ææèç¹æ£æ¥éè¿
- [ ] ææè¾¹æ£æ¥éè¿
- [ ] æ éä¿®æ£ï¼å¯ä»¥äº¤ä»
æ£æ¥ä¸éè¿çå¤çï¼
- å®ä½é®é¢èç¹
- 读ååèæ¡ä¾
- ä¿®æ£èç¹é ç½®
- éæ°æ£æ¥ç´å°éè¿
---
## Dify DSL ç»æè§è
### 宿´ç»ææ¨¡æ¿
```yaml
app:
description: 'åºç¨æè¿°'
icon: ð¤
icon_background: '#FFEAD5'
mode: workflow|advanced-chat|chatflow
name: åºç¨åç§°
use_icon_as_answer_icon: false
kind: app
version: {{åèæ¡ä¾ççæ¬å·}}
workflow:
conversation_variables: [] # ä¼è¯åé
environment_variables: [] # ç¯å¢åé
features:
file_upload: # æä»¶ä¸ä¼ é
ç½®
enabled: false
# ... 详ç»é
ç½®
opening_statement: '' # å¼åºç½
retriever_resource: # æ£ç´¢èµæº
enabled: true
text_to_speech: # TTSé
ç½®
enabled: false
graph:
edges: [] # è¿çº¿å表
nodes: [] # èç¹å表
viewport: # è§å¾ä½ç½®
x: 0
y: 0
zoom: 1
dependencies: [] # æä»¶ä¾èµ
èç¹ç±»å说æ
| èç¹ç±»å | ç¨é | å ³é®é ç½® |
|---|---|---|
start |
å¼å§èç¹ | variablesï¼è¾å ¥åéå®ä¹ï¼ |
llm |
大è¯è¨æ¨¡å | modelãprompt_templateãvisionãcontext |
answer |
Chatflow ç´æ¥åå¤ | answerï¼è¾åºæ¨¡æ¿ï¼ï¼ä» ç¨äºå¯¹è¯å¼åºç¨ |
knowledge-retrieval |
ç¥è¯åºæ£ç´¢ | dataset_idsãquery_variable_selector |
tool |
å·¥å ·è°ç¨ | provider_idãtool_nameãtool_parameters |
code |
ä»£ç æ§è¡ | codeãcode_languageãoutputsãvariables |
http-request |
HTTPè¯·æ± | methodãurlãauthorizationãbody |
if-else |
æ¡ä»¶åæ¯ | casesï¼æ¡ä»¶å¤æï¼ |
template-transform |
模æ¿è½¬æ¢ | templateãvariables |
assigner |
åå ¥ä¼è¯åé | itemsãwrite_mode |
variable-aggregator |
èåå¤åæ¯è¾åº | variablesãoutput_typeï¼ä¸æ¯ç®åæ´åï¼ï¼ |
iteration |
â ï¸ å¾ªç¯å¤ç | iterator_selectorãoutput_selectorãstart_node_idï¼å¿ å¡«ï¼ï¼ |
document-extractor |
ææ¡£æå | variable_selectorãis_array_file |
agent |
æºè½ä½ | agent_parametersãagent_strategy_name |
end |
Workflow ç»æèç¹ | outputsï¼è¾åºåéï¼ï¼ä» ç¨äºå·¥ä½æµ |
åéå¼ç¨è¯æ³
# å¼ç¨æ ¼å¼ï¼{{#èç¹ID.è¾åºå段#}}
# å¼ç¨å¼å§èç¹çè¾å
¥
{{#1742961448129.file#}}
# å¼ç¨ LLM èç¹çææ¬è¾åº
{{#1742965550311.text#}}
# å¼ç¨ Code èç¹çèªå®ä¹è¾åº
{{#1747670104835.result#}}
# å¼ç¨ä¼è¯åé
{{#conversation.status#}}
# å¼ç¨ç¯å¢åé
{{#env.API_KEY#}}
â ï¸ è¿ä»£èç¹è§èï¼å ³é®ï¼ï¼
è¿ä»£èç¹æ¯ DSL 䏿容æåºéçé¨åï¼ç¼ºå°ä»»ä½ä¸é¡¹é½ä¼å¯¼è´å¯¼å ¥å¤±è´¥ï¼
è¿ä»£èç¹å®æ´ç»æ
# 1. iteration èç¹ - å¾ªç¯æ§å¶å¨
- id: '1741011600006'
data:
iterator_selector: ['1741011655068', 'text'] # è¦éåçæ°ç»
output_selector: ['1741011662463', 'result'] # è¾åºç»æ
output_type: array[object] # å¿
é¡»æ ¼å¼
start_node_id: 1741011600006start # å¿
é¡»æå iteration-start
title: è¿ä»£å¤ç
type: iteration
position: {x: 200, y: 100}
# 2. iteration-start èç¹ - è¿ä»£å
¥å£ï¼å¿
é¡»æï¼ï¼
- id: 1741011600006start
data:
title: è¿ä»£å¼å§
type: custom-iteration-start
parentId: '1741011600006' # å¿
é¡»æåç¶è¿ä»£èç¹
position: {x: 200, y: 200}
# 3. è¿ä»£å
é¨èç¹ - å¤çæ¯ä¸ªå
ç´
- id: '1741011662463'
data:
isInIteration: true # å¿
é¡»æ è®°å¨è¿ä»£å
iteration_id: '1741011600006' # å¿
é¡»æ è¯æå±è¿ä»£
parentId: '1741011600006' # å¿
é¡»æåç¶è¿ä»£
title: å¤çèç¹
type: llm
position: {x: 200, y: 300}
# 4. è¿ä»£å
é¨è¾¹ - è¿æ¥è¿ä»£å
èç¹
- source: 1741011600006start
target: '1741011662463'
type: isInIteration # å¿
é¡»æ¯ isInIteration
zIndex: 1002 # å¿
é¡»çæ¸²æå±çº§
æåç vs 失败ç对æ¯
| 对æ¯é¡¹ | â æåç | â 失败ç |
|---|---|---|
| çæ¬ | åèæ¡ä¾ççæ¬ | çæ¬ä¸ä¸è´ |
| iteration-start | â æ | â ç¼ºå° |
| parentId | â æ | â ç¼ºå° |
| iteration_id | â æ | â ç¼ºå° |
| isInIteration è¾¹ | â æ | â ç¼ºå° |
| zIndex: 1002 | â æ | â ç¼ºå° |
| output_type æ ¼å¼ | array[object] |
éè¯¯æ ¼å¼ |
| start_node_id | â æå iteration-start | â ç¼ºå° |
â 常è§é误
| é®é¢ | 说æ |
|---|---|
| ç¼ºå° iteration-start | è¿ä»£å¿ é¡»æä¸é¨ç start åèç¹ï¼ä¸æ¯”å ç½®”ç |
| ç¼ºå° parentId | è¿ä»£å é¨èç¹æ æ³è¯å«å½å±åªä¸ªè¿ä»£ |
| ç¼ºå° iteration_id | è¿ä»£æ æ³æ£ç¡®ç®¡çå é¨èç¹ |
| ç¼ºå° zIndex: 1002 | è¿ä»£å é¨è¾¹æ¸²æå±çº§é误 |
| output_type æ ¼å¼é误 | å¿
é¡»æ¯ array[object] |
è¿ä»£è¾¹è¿æ¥ç±»å
| ç±»å | 说æ | æ¯å¦ç¨äºè¿ä»£ |
|---|---|---|
custom |
æ®éè¿æ¥ | â è¿ä»£å¤ |
true |
æ¡ä»¶ä¸ºç | â |
false |
æ¡ä»¶ä¸ºå | â |
isInIteration |
è¿ä»£å è¿æ¥ | â å¿ é¡»ç¨è¿ä¸ª |
Edge è¿æ¥ç±»å
| ç±»å | 说æ | ç¤ºä¾ |
|---|---|---|
custom |
æ®éè¿æ¥ | source â target |
true |
æ¡ä»¶ä¸ºç忝 | if-else â true |
false |
æ¡ä»¶ä¸ºå忝 | if-else â false |
custom_case_id |
èªå®ä¹åæ¯ | if-else â èªå®ä¹case_id |
isInIteration |
循ç¯å è¿æ¥ | iterationå èç¹è¿æ¥ |
使ç¨ç¤ºä¾
示ä¾ï¼ç¿»è¯å·¥ä½æµ
ç¨æ·éæ±ï¼
- åç§°ï¼zh-en-translator
- åè½ï¼ä¸è¯è±ç¿»è¯
- ç±»åï¼workflow
- è¾å ¥ï¼ä¸æææ¬
- æµç¨ï¼ç¨æ·è¾å ¥ â LLMç¿»è¯ â è¿åç»æ
çæé ç½®ï¼
app:
description: 'ä¸è±æç¿»è¯å·¥ä½æµ'
icon: ð
icon_background: '#E3F2FD'
mode: workflow
name: zh-en-translator
kind: app
version: {{åèæ¡ä¾ççæ¬å·}}
workflow:
graph:
edges:
- source: '1741011655068'
target: '1741011662463'
type: custom
- source: '1741011662463'
target: llm
type: custom
- source: llm
target: answer
type: custom
nodes:
- data:
title: å¼å§
type: start
variables:
- variable: text
type: paragraph
label: è¾å
¥ä¸æææ¬
required: true
id: '1741011655068'
position: {x: 0, y: 263}
- data:
context:
enabled: false
model:
provider: siliconflow
name: internlm2_5-7b-chat
mode: chat
prompt_template:
- role: system
text: '请å°ä»¥ä¸ä¸æç¿»è¯æè±æï¼åªè¾åºç¿»è¯ç»æï¼{{#1741011655068.text#}}'
title: LLMç¿»è¯
type: llm
id: llm
position: {x: 382, y: 263}
- data:
answer: '{{#llm.text#}}'
title: ç¿»è¯ç»æ
type: answer
id: answer
position: {x: 690, y: 263}
æä½³å®è·µ
1. æ¡ä¾å¤ç¨çç¥
- å å®ä½ï¼éè¿ INDEX.md æ¾å°æç¸ä¼¼çæ¡ä¾
- ååæï¼é 读 DSL æä»¶ï¼çè§£èç¹é ç½®
- åè°æ´ï¼åºäºåèæ¨¡æ¿è¿è¡ä¸ªæ§åä¿®æ¹
2. æµç¨è®¾è®¡åå
- ä»ç®åå¼å§ï¼å å®ç°æ ¸å¿åè½ï¼åæ·»å 忝å循ç¯
- 模åå设计ï¼å¤ææµç¨æå为å¯å¤ç¨æ¥éª¤
- æ¸ æ°å½åï¼ä½¿ç¨ææä¹çåéå
3. DSL ç¼åæ£æ¥æ¸ å
- èç¹ ID å¯ä¸ä¸æ ¼å¼æ£ç¡®
- ä½ç½®åæ åçï¼ä¸éå
- Edge è¿æ¥æ£ç¡®ï¼æ æé¾
- åéå¼ç¨æ ¼å¼æ£ç¡®
- Model/Provider é ç½®ææ
- è¾åºåéåä¸å¼ç¨ä¸è´
4. æµè¯éªè¯å»ºè®®
- çæåå¨ Dify ä¸å¯¼å ¥æµè¯
- æ£æ¥åèç¹çè¾å ¥è¾åº
- éªè¯æ¡ä»¶åæ¯é»è¾
- æµè¯è¾¹çæ åµåé误å¤ç
é误å¤ç
| é误类å | å¤çæ¹å¼ |
|---|---|
| éæ±ä¸å®æ´ | æç¤ºç¨æ·è¡¥å ç¼ºå¤±ä¿¡æ¯ |
| æµç¨é»è¾é误 | æåºå¯è½ç循ç¯å¼ç¨ææé¾ |
| èç¹é ç½®é误 | æä¾ä¿®æ£å»ºè®® |
| åéå¼ç¨æ æ | ååºå¯ç¨çåéé项 |
| æ¡ä¾å®ä½å¤±è´¥ | æ©å¤§æç´¢èå´ææå¨è®¾è®¡ |
åèèµæº
ð æ¡ä¾ç®å½ç»æ
organized_dsl/
âââ 01_å
容çæä¸åä½/
âââ 02_å¾åçæä¸è®¾è®¡/
âââ 03_è§é¢çæ/
âââ 04_æ°æ®åæä¸å¯è§å/
âââ 05_ææ¡£å¤çä¸OCR/
âââ 06_ç¥è¯åºä¸RAG/
âââ 07_Agentä¸å·¥å
·è°ç¨/
âââ 08_æè²ä¸å¦ä¹ /
âââ 09_åä¸ä¸åå
¬/
âââ 10_å¤åªä½å¤ç/
âââ 11_代ç ä¸å¼å/
âââ 12_åæä¸å¨±ä¹/
âââ 13_ä¿¡æ¯èå/
âââ 14_åè示ä¾/
âââ INDEX.md # æ¡ä¾ç´¢å¼ï¼æç´¢ organized_dsl/INDEX.mdï¼
âââ Dify_DSL_èç¹å®æ´åèæå.md # èç¹é
ç½®åèï¼æç´¢ organized_dsl/Dify_DSL_èç¹å®æ´åèæå.mdï¼
ð ææ¡£é¾æ¥
- INDEX.mdï¼æåè½åç±»çæ¡ä¾ç´¢å¼
- Dify_DSL_èç¹å®æ´åèæå.mdï¼åèç¹ç详ç»é 置说æ
èç¹èªå¨æ ¡éªä¸çæè§å
çæ¬å·è§å
# â
æ£ç¡® - çææ¶å¿
须使ç¨
version: {{åèæ¡ä¾ççæ¬å·}}
# â é误 - ç¦æ¢ä½¿ç¨
version: {{åèæ¡ä¾ççæ¬å·}}
èç¹åºç¡å段è§å
æ¯ä¸ªèç¹çææ¶å¿ é¡»å å«ï¼
- data:
positionAbsolute: false # â
å¿
é¡»
selected: false # â
å¿
é¡»
title: "èç¹åç§°"
type: "èç¹ç±»å"
# ... å
¶ä»å段
height: 52
id: 'èç¹ID'
position:
x: 0
y: 0
width: 242
Edges åæ®µè§å
æ¯æ¡è¾¹çææ¶å¿ é¡»å å«ï¼
- data:
isInIteration: false # â
å¿
é¡»
selected: false # â
å¿
é¡»
sourceType: "æºèç¹ç±»å"
targetType: "ç®æ èç¹ç±»å"
id: "è¾¹ID"
source: "æºèç¹ID"
sourceHandle: "source"
target: "ç®æ èç¹ID"
targetHandle: "target"
type: "custom|true|false|isInIteration"
variable-aggregator èç¹çæè§å
# â
æ£ç¡®åæ³ - ç¨äºèåå¤åæ¯è¾åº
- data:
output_type: string # èåç»æçè¾åºç±»å
type: variable-aggregator
variables: # èåå¤åæ¯çåéï¼äºç»´æ°ç»ï¼
- - '忝èç¹ID1' # 第ä¸ä¸ªåæ¯çè¾åº
- text
- - '忝èç¹ID2' # 第äºä¸ªåæ¯çè¾åº
- text
height: 211
id: 'èåèç¹ID'
# â é误çè§£ - 䏿¯ç®åç"å°å¤ä¸ªå
容æ´åå°ä¸èµ·"
# variable-aggregator ççæ£ç¨éï¼
# - æ´å IF/ELSE æ¡ä»¶åæ¯çè¾åº
# - æ´åå¹¶è¡ç»æçå¤ä¸ªè¾åº
# - ç¡®ä¿æ 论åªä¸ªåæ¯æ§è¡ï¼ä¸æ¸¸é½è½éè¿ç»ä¸åéå¼ç¨
end èç¹çæè§å
# â
æ£ç¡®åæ³ - Workflow åºç¨çç»æèç¹
- data:
outputs:
- value_selector:
- '䏿¸¸èç¹ID'
- text
variable: output
type: end # â
ä½¿ç¨ type: endï¼ä»
ç¨äº Workflowï¼
height: 103
id: end
answer èç¹ä½¿ç¨åºæ¯
# â
æ£ç¡®åæ³ - ä»
ç¨äº Chatflow åºç¨
- data:
answer: '{{#llm.text#}}' # ä½¿ç¨ answer åæ®µ
type: answer # â
ä½¿ç¨ type: answerï¼ä»
ç¨äº Chatflowï¼
DSL çææ£æ¥æ¸ åï¼çæåå¿ æ¥ï¼
çæ DSL åï¼éé¡¹æ£æ¥ï¼
åºç¨ç±»åæ£æ¥ï¼
- Workflow ç±»å使ç¨
type: endï¼Chatflow ç±»å使ç¨type: answer - Workflow åªè½æå¯ä¸ End èç¹
- Chatflow æ¯æå¤ä¸ª Answer èç¹
èç¹æ£æ¥ï¼
- çæ¬å·ä¸åèæ¡ä¾ä¸è´
- æ¯ä¸ªèç¹æ
data.positionAbsolute: false - æ¯ä¸ªèç¹æ
data.selected: false - æ¯ä¸ªèç¹æ
heightåwidth
è¾¹æ£æ¥ï¼
- æ¯æ¡è¾¹æ
data.sourceType - æ¯æ¡è¾¹æ
data.targetType - æ¯æ¡è¾¹æ
data.selected: false - æ¯æ¡è¾¹æ
data.isInIterationï¼è¿ä»£å¤ä¸º falseï¼
variable-aggregator æ£æ¥ï¼
- 使ç¨
output_typeï¼ä¸æ¯outputsï¼ - 使ç¨
variablesæ°ç»æ ¼å¼ï¼ä¸æ¯formatter_templateï¼ - çè§£ç¨éï¼èåå¤åæ¯è¾åºï¼ä¸æ¯ç®åæ´åå 容
assigner vs variable-aggregator æ£æ¥ï¼
- éè¦åå
¥ä¼è¯åé â 使ç¨
assigner - éè¦èåå¤åæ¯è¾åº â 使ç¨
variable-aggregator
æåæ´æ°: 2026-01-03 åèæ¡ä¾æ°: 125+