--- id: natural-language-to-workflow-generation title: "Natural Language to Workflow Generation" category: "10_Wiki/Topics" status: "draft" verification_status: "conceptual" canonical_id: "" aliases: ["Natural Language to Workflow", "LLM-based Workflow Generation"] duplicate_of: "" source_trust_level: "B" confidence_score: 0.85 created_at: 2026-05-19 updated_at: 2026-05-19 review_reason: "" merge_history: [] tags: ["research", "Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•"] raw_sources: ["NotebookLM Synthesis"] applied_in: ["DanielPFlorian/ComfyUI-WorkflowGenerator", "ComfyGPT research"] github_commit: "82df278" --- # [[Natural Language to Workflow Generation]] ## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) ์ž์—ฐ์–ด ์„ค๋ช…์„ ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ(LLM)์„ ํ†ตํ•ด ComfyUI์˜ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„(JSON)๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•จ์œผ๋กœ์จ ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ง„์ž… ์žฅ๋ฒฝ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ƒ์„ฑ ์†๋„๋ฅผ ํ˜์‹ ์ ์œผ๋กœ ๋†’์ด๋Š” ๊ธฐ์ˆ ์ด๋‹ค [1, 2]. ## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) - **3๋‹จ๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ (Multi-stage Pipeline):** ๋…ผ๋ฆฌ ์ƒ์„ฑ(Generator), ์‹œ๋งจํ‹ฑ ๊ฒ€์ฆ(Validator), ๊ทธ๋ž˜ํ”„ ๊ตฌ์ถ•(Builder)์˜ ์ˆœ์ฐจ์  ๊ณผ์ •์„ ํ†ตํ•ด ์ž์—ฐ์–ด๋ฅผ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค [3, 4]. - **๋…ธ๋“œ ์นดํƒˆ๋กœ๊น… (Node Cataloging):** ๋กœ์ปฌ์— ์„ค์น˜๋œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์Šค์บ”ํ•˜๊ณ  ์ƒ‰์ธํ™”ํ•˜์—ฌ LLM์ด ์‹ค์ œ ์กด์žฌํ•˜๋Š” ๋…ธ๋“œ๋งŒ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค [5, 6]. - **ํŠนํ™” LLM ๋ฏธ์„ธ์กฐ์ • (Fine-tuned LLMs):** Qwen2.5์™€ ๊ฐ™์€ ๋ชจ๋ธ์„ ComfyUI ์Šคํ‚ค๋งˆ ๋ฐ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ฐ์ดํ„ฐ๋กœ ๋ฏธ์„ธ ์กฐ์ •ํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์กฐ์— ์ตœ์ ํ™”๋œ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•œ๋‹ค [1, 7]. - **์‹œ๋งจํ‹ฑ ์ž„๋ฒ ๋”ฉ (Semantic Embedding):** ์ž์—ฐ์–ด ์„ค๋ช…๊ณผ ์‹ค์ œ ๋…ธ๋“œ ํด๋ž˜์Šค ๋ช…์นญ ์‚ฌ์ด์˜ ์˜๋ฏธ์  ์œ ์‚ฌ์„ฑ์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ •ํ™•ํ•œ ๋…ธ๋“œ ๋งคํ•‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [7, 8]. ## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) - **ํ•ฉ์„ฑ-๊ฒ€์ฆ-์ปดํŒŒ์ผ ๋ฃจํ”„:** LLM์ด ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ์„ค๊ณ„(Logical Synthesis)ํ•˜๊ณ , ์ด๋ฅผ ๋กœ์ปฌ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋Œ€์กฐ(Semantic Validation)ํ•œ ๋’ค, ์ตœ์ข… JSON์œผ๋กœ ๋ณ€ํ™˜(Graph Compilation)ํ•˜๋Š” ๊ตฌ์กฐ์  ์„ค๊ณ„ ํŒจํ„ด์ด ๊ด€์ฐฐ๋œ๋‹ค [3]. - **๋กœ์ปฌ ํ™˜๊ฒฝ ์ ‘์ง€(Local Grounding):** ๋ชจ๋ธ์˜ ์ง€์‹์ด ํ›ˆ๋ จ ์‹œ์ ์— ๊ณ ์ •๋˜๋Š” ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด, ์‹คํ–‰ ์ „ "Update Node Catalog" ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ˜„์žฌ ์‹œ์Šคํ…œ์˜ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ๋‹ค [5, 9]. ## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) ์ž์—ฐ์–ด ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ์€ ์‚ฌ์šฉ์ž๊ฐ€ "SDXL์„ ์‚ฌ์šฉํ•œ ํ…์ŠคํŠธ-ํˆฌ-์ด๋ฏธ์ง€ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ"๊ณผ ๊ฐ™์€ ์ง€์‹œ์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์‹œ์Šคํ…œ์ด ์ด๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” JSON ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์ด๋‹ค [2]. **1. ์ƒ์„ฑ ๋‹จ๊ณ„ (Generator):** ์ด ๋‹จ๊ณ„์—์„œ๋Š” fine-tuned๋œ ๋ชจ๋ธ(์˜ˆ: Qwen2.5-14B)์ด ์ง€์‹œ์–ด์˜ ์˜๋„๋ฅผ ํ•ด์„ํ•˜์—ฌ ๋…ผ๋ฆฌ์  ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค [3, 7]. ๋ชจ๋ธ์€ ๋…ธ๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„(์˜ˆ: CLIP Text Encode์—์„œ KSampler๋กœ์˜ ์—ฐ๊ฒฐ)์„ ์ดํ•ดํ•˜๊ณ  ์ด๋ฅผ ์ถ”์ƒ์ ์ธ JSON ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•œ๋‹ค [8]. **2. ๊ฒ€์ฆ ๋‹จ๊ณ„ (Validator):** ์ƒ์„ฑ๋œ ๋…ผ๋ฆฌ ๊ตฌ์กฐ์˜ ๋…ธ๋“œ ๋ช…์นญ์ด ์‹ค์ œ ์‹œ์Šคํ…œ์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค [3, 4]. `sentence-transformers`์™€ ๊ฐ™์€ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜๋ฏธ์ ์œผ๋กœ ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ์‹ค์ œ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ์ˆ˜์ •ํ•˜๋ฉฐ, ์ด ๊ณผ์ •์„ ํ†ตํ•ด LLM์˜ ํ™˜๊ฐ(Hallucination) ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค [7, 8]. **3. ๊ตฌ์ถ• ๋‹จ๊ณ„ (Builder):** ๊ฒ€์ฆ๋œ ๊ตฌ์กฐ๋ฅผ ComfyUI ์‹คํ–‰ ์—”์ง„์ด ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์ข… .json ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค [3, 10]. ์ด ๊ณผ์ •์—์„œ ๋…ธ๋“œ์˜ ์œ„์น˜(pos), ํฌ๊ธฐ(size), ์œ„์ ฏ ๊ฐ’(widgets_values) ๋“ฑ UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์‹คํ–‰ ์ˆœ์„œ(order)๊ฐ€ ํ• ๋‹น๋œ๋‹ค [10, 11]. **์ฃผ์š” ๊ธฐ์ˆ ์  ์‚ฌ์–‘:** - **๋ชจ๋ธ ๊ตฌ์กฐ:** GGUF ํฌ๋งท์œผ๋กœ ์–‘์žํ™”๋œ Qwen2.5 ๋ชจ๋ธ๊ตฐ์ด ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ํšจ์œจ์ ์ธ ์ถ”๋ก ์„ ์œ„ํ•ด llama-cpp-python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์š”๊ตฌ๋œ๋‹ค [7, 12]. - **๋ฐ์ดํ„ฐ ํ•œ๊ณ„:** ์ •์  ๋ฏธ์„ธ ์กฐ์ •์„ ๊ฑฐ์นœ ๋ชจ๋ธ์€ ํ›ˆ๋ จ ์ดํ›„์— ์ถœ์‹œ๋œ ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ง€์‹์ด ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ง€์†์ ์ธ ์นดํƒˆ๋กœ๊ทธ ์—…๋ฐ์ดํŠธ์™€ ์‚ฌ์šฉ์ž์˜ ๊ฐ๋…์ด ๊ถŒ์žฅ๋œ๋‹ค [9, 13]. ## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) ๊ณผ๊ฑฐ์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ ๋ฐฉ์‹์ด ์ˆ˜๋™์ ์ธ ๋…ธ๋“œ ์—ฐ๊ฒฐ๊ณผ JSON ํŽธ์ง‘์— ์˜์กดํ–ˆ๋‹ค๋ฉด, ์ตœ์‹  ๊ธฐ์ˆ ์ธ **ComfyGPT** ์•„ํ‚คํ…์ฒ˜๋Š” ์ด๋ฅผ '๋Œ€ํ™”ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ' ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ  ์žˆ๋‹ค [3]. ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด, ์ •์  ๋ชจ๋ธ์€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€ํ™”ํ•˜๋Š” ์ปค์Šคํ…€ ๋…ธ๋“œ ์ƒํƒœ๊ณ„๋ฅผ ๋”ฐ๋ผ์žก๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์ œ๊ธฐ๋˜์—ˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ–ฅํ›„์—๋Š” ์ •์  ๋ฏธ์„ธ ์กฐ์ •์„ ๋„˜์–ด์„  ๋™์  ์•„ํ‚คํ…์ฒ˜๋กœ์˜ ์ง„ํ™”๊ฐ€ ํ•„์š”ํ•จ์ด ๋ช…์‹œ๋˜์–ด ์žˆ๋‹ค [9]. ## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) - **DanielPFlorian/ComfyUI-WorkflowGenerator:** ์ž์—ฐ์–ด ์„ค๋ช…์„ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹ค์ œ ์ปค์Šคํ…€ ๋…ธ๋“œ ๊ตฌํ˜„์ฒด์ด๋‹ค [2, 14]. - **ํ•ต์‹ฌ ๋…ธ๋“œ ๊ตฌ์„ฑ:** `Workflow Generator Pipeline`, `WorkflowGenerator`, `NodeValidator`, `WorkflowBuilder`, `UpdateNodeCatalog` ๋“ฑ์˜ ๋…ธ๋“œ๊ฐ€ ์‹ค์ œ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ๊ตฌ์กฐ(`nodes/`, `generators/`) ๋‚ด์— ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค [6, 8, 10, 14, 15]. - **์ˆ˜์ • ์ด๋ ฅ:** Git ์ปค๋ฐ‹ `82df278`์—์„œ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์˜ ์ค‘๋ณต ๋ชจ๋ธ ํ‘œ์‹œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ ๊ธฐ๋ก์ด ๋ฐœ๊ฒฌ๋œ๋‹ค [14]. - **์—ฐ๊ตฌ ๊ธฐ๋ฐ˜:** ์ด ๊ธฐ์ˆ ์€ "ComfyGPT: A Self-Optimizing Multi-Agent System..." ์—ฐ๊ตฌ์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋กœ์ปฌ ComfyUI ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค [2, 4]. ## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ - **์ƒํƒœ:** draft - **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ๊ตฌํ˜„์ฒด์ธ ComfyUI-WorkflowGenerator ํ”„๋กœ์ ํŠธ ํ™•์ธ๋จ) - **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ GitHub ์ €์žฅ์†Œ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜) - **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) ## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) - 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine.