Communitygithub.com

SystemTce/dify-skills

Dify 워크플로우 디자인 완벽 가이드 - 노드 유형, 디자인 패턴, 템플릿 및 모범 사례

dify-skills란 무엇인가요?

이 스킬은 Dify 워크플로우 디자인의 핵심 지식과 모범 사례를 포괄적으로 제공합니다. AI 애플리케이션을 시각적으로 오케스트레이션하는 Dify 워크플로우 시스템에서 Start, LLM, Agent, Knowledge Retrieval, Code, HTTP Request, Tool, If-Else, Iteration, Answer 등 10가지 핵심 노드 유형을 상세히 설명합니다. 또한 순차 파이프라인, 조건부 분기, 반복 처리, RAG 기반 검색, 다중 소스 집계 등 주요 디자인 패턴을 제시하며, 시스템 변수, 노드 변수, 세션 변수, 환경 변수, 반복 변수 등 변수 시스템을 명확히 설명합니다. Claude Code와 Cursor, Codex 등 다양한 AI 에이전트 플랫폼에서 활용할 수 있도록 YAML 기반 DSL 정의와 함께 다양한 작업 흐름 템플릿과 모듈식 설계, 변수 명명 규칙, 오류 처리, 성능 최적화, 유지보수성 향상 등 모범 사례를 제공하여, 개발자가 Dify 워크플로우를 효과적으로 설계하고 최적화할 수 있도록 돕습니다.

지원 대상✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/SystemTce/dify-skills/tree/main/01-workflow

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Dify 워크플로우 디자인 SKILL

Dify 워크플로우 디자인의 핵심 지식과 모범 사례를 마스터하세요.

빠른 이동


워크플로우 개요

Dify 워크플로우는 시각적인 AI 애플리케이션 오케스트레이션 시스템으로, 노드와 엣지를 조합하여 복잡한 비즈니스 로직을 구현합니다.

핵심 개념

  • 노드 (Node): 워크플로우의 기본 실행 단위로, 각 노드는 특정 기능을 수행합니다.
  • 엣지 (Edge): 노드를 연결하여 데이터 흐름과 실행 순서를 정의합니다.
  • 변수 (Variable): 노드 간 데이터를 전달합니다.
  • DSL (Domain Specific Language): YAML 형식의 워크플로우 정의 언어입니다.

워크플로우 유형

  1. Workflow: 표준 워크플로우, 복잡한 다단계 처리에 적합합니다.
  2. Advanced Chat: 고급 대화 애플리케이션, 워크플로우 오케스트레이션을 지원합니다.
  3. Agent: 지능형 에이전트, 자율적인 의사 결정 및 도구 호출을 수행합니다.

실행 모델

  • 큐 기반: Ready Queue 기반 노드 스케줄링
  • 이벤트 기반: 노드 실행으로 이벤트 스트림 생성
  • 병렬 실행: 2~8개의 작업 스레드로 병렬 처리 지원
  • 스트리밍 응답: 실시간 스트리밍 출력 지원

핵심 노드 유형

1. Start 노드

기능: 워크플로우의 진입점이며, 입력 변수를 정의합니다.

구성 예시:

- data:
    desc: ''
    selected: false
    title: 시작
    type: start
    variables:
    - label: 사용자 입력
      max_length: 1000
      required: true
      type: text-input
      variable: user_input
  id: start
  type: custom

상세 문서: nodes/start.md


2. LLM 노드

기능: 대규모 언어 모델을 호출하여 추론 및 생성을 수행합니다.

구성 예시:

- data:
    type: llm
    model:
      provider: openai
      name: gpt-4
      completion_params:
        temperature: 0.7
        max_tokens: 2000
    prompt_template:
    - id: system
      role: system
      text: "당신은 전문적인 어시스턴트입니다."
    - id: user
      role: user
      text: "{{#sys.query#}}"
    context:
      enabled: true
      variable_selector: ["knowledge", "result"]
  id: llm

주요 매개변수:

  • model: 모델 구성 (공급자, 이름, 매개변수)
  • prompt_template: 프롬프트 템플릿 (시스템 메시지 및 사용자 메시지 지원)
  • context: 컨텍스트 구성 (지식 베이스 검색 결과 활성화)
  • memory: 대화 기억 구성
  • vision: 시각 능력 구성 (이미지 입력 지원)

상세 문서: nodes/llm.md


3. Agent 노드

기능: 지능형 에이전트로, 사용자 요청에 따라 자율적으로 도구를 호출합니다.

구성 예시:

- data:
    type: agent
    agent_parameters:
      instruction:
        type: constant
        value: "사용자의 요청에 따라 적절한 도구를 호출하여 작업을 완료합니다."
      model:
        type: constant
        value:
          provider: openai
          model: gpt-4
          completion_params:
            temperature: 0.7
      query:
        type: constant
        value: "{{#sys.query#}}"
      tools:
        type: constant
        value:
        - enabled: true
          provider_name: time
          tool_name: current_time
          type: builtin
        - enabled: true
          provider_name: duckduckgo
          tool_name: ddgo_search
          type: builtin
    agent_strategy_name: function_calling
  id: agent

지원 전략:

  • function_calling: 함수 호출 (권장)
  • react: ReAct 추론 모드

상세 문서: nodes/agent.md


4. Knowledge Retrieval 노드

기능: 지식 베이스에서 관련 정보를 검색합니다 (RAG).

구성 예시:

- data:
    type: knowledge-retrieval
    dataset_ids:
    - "dataset-uuid-1"
    - "dataset-uuid-2"
    query_variable_selector: ["start", "sys.query"]
    retrieval_mode: single
    single_retrieval_config:
      model:
        provider: openai
        name: text-embedding-3-small
      top_k: 3
      score_threshold: 0.7
      reranking_model:
        provider: cohere
        model: rerank-english-v2.0
  id: knowledge

검색 모드:

  • single: 단일 검색
  • multiple: 다중 검색

상세 문서: nodes/knowledge-retrieval.md


5. Code 노드

기능: Python 또는 JavaScript 코드를 실행합니다.

구성 예시:

- data:
    type: code
    code_language: python3
    code: |
      def main(input_text: str) -> dict:
          # 처리 로직
          result = input_text.upper()
          return {
              "output": result,
              "length": len(result)
          }
    variables:
    - variable: input_text
      value_selector: ["start", "user_input"]
    outputs:
      output:
        type: string
      length:
        type: number
  id: code

지원 언어:

  • Python 3
  • JavaScript (Node.js)

상세 문서: nodes/code.md


6. HTTP Request 노드

기능: 외부 HTTP API를 호출합니다.

구성 예시:

- data:
    type: http-request
    method: POST
    url: "https://api.example.com/endpoint"
    headers:
      Content-Type: application/json
      Authorization: "Bearer {{#env.API_KEY#}}"
    body:
      type: json
      data:
        query: "{{#sys.query#}}"
        options:
          temperature: 0.7
    timeout: 30
  id: http

지원 메서드: GET, POST, PUT, DELETE, PATCH

상세 문서: nodes/http-request.md


7. Tool 노드

기능: 내장 또는 사용자 정의 도구를 호출합니다.

구성 예시:

- data:
    type: tool
    provider_id: google_translate
    provider_type: builtin
    provider_name: google_translate
    tool_name: translate
    tool_parameters:
      content:
        type: mixed
        value: "{{#sys.query#}}"
      dest:
        type: mixed
        value: "zh-CN"
  id: tool

도구 유형:

  • builtin: 내장 도구
  • api: API 도구
  • workflow: 워크플로우 도구

상세 문서: nodes/tool.md


8. If-Else 노드

기능: 조건부 분기 제어.

구성 예시:

- data:
    type: if-else
    conditions:
    - variable_selector: ["llm", "text"]
      comparison_operator: contains
      value: "키워드"
    logical_operator: and
  id: condition

지원 연산자:

  • contains, not contains
  • is, is not
  • empty, not empty
  • >, <, >=, <=, =, !=

상세 문서: nodes/if-else.md


9. Iteration 노드

기능: 배열 데이터를 반복 처리합니다.

구성 예시:

- data:
    type: iteration
    iterator_selector: ["start", "items"]
    output_selector: ["iteration_inner", "output"]
    parallel_nums: 3
    error_handle_mode: continue
  id: iteration

오류 처리 모드:

  • continue: 계속 실행
  • stop: 반복 중단

상세 문서: nodes/iteration.md


10. Answer 노드

기능: 워크플로우 결과를 출력합니다.

구성 예시:

- data:
    type: answer
    answer: "{{#llm.text#}}"
  id: answer

상세 문서: nodes/answer.md


디자인 패턴

1. 순차 파이프라인 패턴

적용 시나리오: 간단한 선형 처리 흐름.

구조:

Start → LLM → Answer

예시: patterns/sequential.md


2. 조건부 분기 패턴

적용 시나리오: 조건에 따라 다른 처리 로직을 실행합니다.

구조:

Start → LLM → If-Else → [분기A / 분기B] → Answer

예시: patterns/conditional.md


3. 반복 처리 패턴

적용 시나리오: 배열 데이터를 일괄 처리합니다.

구조:

Start → Code → Iteration → LLM → Answer

예시: patterns/iterative.md


4. 지식 검색 패턴 (RAG)

적용 시나리오: 지식 베이스 기반 질의응답.

구조:

Start → Knowledge Retrieval → LLM (with context) → Answer

예시: patterns/rag.md


5. 다중 소스 집계 패턴

적용 시나리오: 여러 데이터 소스의 정보를 통합합니다.

구조:

Start → [Tool1, Tool2, HTTP] → Variable Aggregator → LLM → Answer

예시: patterns/aggregation.md


워크플로우 템플릿

간단한 질의응답

파일: templates/simple-qa.yml

설명: 가장 기본적인 질의응답 워크플로우입니다.

노드: Start → LLM → Answer


RAG 어시스턴트

파일: templates/rag-assistant.yml

설명: 지식 베이스 기반 지능형 어시스턴트입니다.

노드: Start → Knowledge Retrieval → LLM → Answer


에이전트 도구 호출

파일: templates/agent-tools.yml

설명: 지능형 에이전트가 자율적으로 도구를 호출합니다.

노드: Start → Agent → Answer


다단계 처리

파일: templates/multi-step.yml

설명: 복잡한 다단계 처리 흐름입니다.

노드: Start → Code → HTTP → LLM → If-Else → Answer


변수 시스템

시스템 변수

{{#sys.query#}}              # 사용자 질의
{{#sys.files#}}              # 업로드된 파일
{{#sys.conversation_id#}}    # 대화 ID
{{#sys.user_id#}}            # 사용자 ID

노드 변수

{{#노드ID.출력필드#}}         # 노드 출력 참조
{{#llm.text#}}               # LLM 텍스트 출력
{{#knowledge.result#}}       # 지식 검색 결과
{{#code.output#}}            # 코드 노드 출력

세션 변수

{{#conversation.변수명#}}     # 대화 수준 변수

환경 변수

{{#env.API_KEY#}}            # 환경 변수
{{#env.DATABASE_URL#}}       # 데이터베이스 연결

반복 변수

{{#item#}}                   # 현재 반복 항목
{{#index#}}                  # 현재 인덱스

모범 사례

1. 모듈식 설계

  • 복잡한 프로세스를 여러 독립 노드로 분할합니다.
  • 변수를 사용하여 데이터를 전달하고 하드코딩을 피합니다.
  • 조건부 분기 및 반복 노드를 적절히 사용합니다.

2. 변수 명명 규칙

  • 의미 있는 변수명을 사용합니다.
  • 일관된 명명 규칙을 따릅니다.
  • 필요한 설명 정보를 추가합니다.

3. 오류 처리

  • 주요 노드에 오류 처리 로직을 추가합니다.
  • 조건부 분기를 사용하여 예외 상황을 처리합니다.
  • 사용자 친화적인 오류 메시지를 제공합니다.

4. 성능 최적화

  • 불필요한 노드 호출을 피합니다.
  • 캐싱 메커니즘을 적절히 사용합니다.
  • 루프 반복 횟수를 제어합니다.
  • 병렬 분기를 사용하여 성능을 향상시킵니다.

5. 유지보수성

  • 노드 설명과 주석을 추가합니다.
  • 명확한 노드 이름을 사용합니다.
  • 워크플로우 구조를 간결하게 유지합니다.
  • 정기적으로 검토하고 최적화합니다.

상세 내용: best-practices.md


다음 단계


관련 SKILL


버전: v1.0.0 마지막 업데이트: 2026-03-04 돌아가기: 전체 SKILL

Individual skills in this repo

This repo contains 5 individual skills — each has its own dedicated page.

관련 스킬