Dify 워크플로우 디자인 SKILL
Dify 워크플로우 디자인의 핵심 지식과 모범 사례를 마스터하세요.
빠른 이동
워크플로우 개요
Dify 워크플로우는 시각적인 AI 애플리케이션 오케스트레이션 시스템으로, 노드와 엣지를 조합하여 복잡한 비즈니스 로직을 구현합니다.
핵심 개념
- 노드 (Node): 워크플로우의 기본 실행 단위로, 각 노드는 특정 기능을 수행합니다.
- 엣지 (Edge): 노드를 연결하여 데이터 흐름과 실행 순서를 정의합니다.
- 변수 (Variable): 노드 간 데이터를 전달합니다.
- DSL (Domain Specific Language): YAML 형식의 워크플로우 정의 언어입니다.
워크플로우 유형
- Workflow: 표준 워크플로우, 복잡한 다단계 처리에 적합합니다.
- Advanced Chat: 고급 대화 애플리케이션, 워크플로우 오케스트레이션을 지원합니다.
- 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 containsis,is notempty,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
2. 조건부 분기 패턴
적용 시나리오: 조건에 따라 다른 처리 로직을 실행합니다.
구조:
Start → LLM → If-Else → [분기A / 분기B] → Answer
3. 반복 처리 패턴
적용 시나리오: 배열 데이터를 일괄 처리합니다.
구조:
Start → Code → Iteration → LLM → Answer
4. 지식 검색 패턴 (RAG)
적용 시나리오: 지식 베이스 기반 질의응답.
구조:
Start → Knowledge Retrieval → LLM (with context) → Answer
예시: patterns/rag.md
5. 다중 소스 집계 패턴
적용 시나리오: 여러 데이터 소스의 정보를 통합합니다.
구조:
Start → [Tool1, Tool2, HTTP] → Variable Aggregator → LLM → Answer
워크플로우 템플릿
간단한 질의응답
설명: 가장 기본적인 질의응답 워크플로우입니다.
노드: Start → LLM → Answer
RAG 어시스턴트
파일: templates/rag-assistant.yml
설명: 지식 베이스 기반 지능형 어시스턴트입니다.
노드: Start → Knowledge Retrieval → LLM → Answer
에이전트 도구 호출
설명: 지능형 에이전트가 자율적으로 도구를 호출합니다.
노드: Start → Agent → Answer
다단계 처리
설명: 복잡한 다단계 처리 흐름입니다.
노드: 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
- 02-plugin SKILL - 사용자 정의 도구 및 플러그인 개발
- 03-performance SKILL - 워크플로우 성능 최적화
- 06-reference SKILL - DSL 문법 참조
버전: v1.0.0 마지막 업데이트: 2026-03-04 돌아가기: 전체 SKILL