-
Dify 워크플로우 블록 역할 및 입출력 설명AI 개발 2025. 1. 23. 10:23
Dify의 워크플로우 오케스트레이션에서 사용되는 주요 블록(노드)과 각 블록의 역할, 입력(input), 출력(output)을 다음과 같이 정리합니다. 각 노드는 특정 기능을 수행하며 변수를 통해 데이터를 전달받거나 출력합니다.
1. 시작 (Start Node)
- 역할: 워크플로우 실행 시 초기 파라미터를 정의합니다.
- 입력: 없음 (시작 노드는 외부 사용자 입력 또는 시스템 변수를 받음).
- 출력:
sys.query
(Chatflow),sys.files
(파일 업로드),sys.user_id
등 시스템 변수를 생성.
2. 종료 (End Node)
- 역할: 워크플로우의 최종 결과를 정의합니다. Workflow 유형에서만 사용 가능.
- 입력: 이전 노드에서 전달된 모든 변수 (예: 처리된 데이터, 생성된 텍스트).
- 출력: 최종 사용자에게 노출되는 결과값.
3. 응답 (Answer Node)
- 역할: Chatflow에서 중간 단계 또는 최종 응답을 스트리밍 형식으로 출력합니다.
- 입력: 텍스트, 이미지 URL, 파일 BLOB 등.
- 출력: 사용자에게 표시되는 메시지 (예: 채팅 응답).
4. LLM (Large Language Model Node)
- 역할: GPT 등 대형 언어 모델을 호출하여 텍스트 생성/처리합니다.
- 입력: 프롬프트, 컨텍스트 변수(예:
{{input}}
), 모델 파라미터(온도, 토큰 제한). - 출력: 생성된 텍스트 또는 구조화된 데이터.
5. 코드 실행 (Code Node)
- 역할: Python/NodeJS 스크립트를 실행하여 데이터 변환 또는 연산을 수행합니다.
- 입력: 이전 노드의 변수 (예: JSON 문자열, 배열).
- 출력: 처리된 데이터 (예: 추출된 필드, 계산 결과).
※ 제한사항: 파일 시스템/네트워크 접근 불가, 샌드박스 환경에서 실행.
6. 조건 분기 (IF/ELSE Node)
- 역할: 조건에 따라 워크플로우를 분기합니다.
- 입력: 조건식 (예:
{{variable}} > 10
). - 출력:
True
또는False
분기 경로.
7. HTTP 요청 (HTTP Request Node)
- 역할: 외부 API 호출을 통해 데이터를 가져오거나 웹훅을 트리거합니다.
- 입력: URL, 헤더, 파라미터, 본문 데이터.
- 출력: API 응답 (JSON/텍스트 형식).
8. 반복 (Iteration Node)
- 역할: 배열 데이터를 순회하며 동일한 단계를 반복 실행합니다.
- 입력: 배열 형식의 변수 (예:
sections: Array[Object]
). - 출력: 처리된 배열 항목의 집계 결과.
※ 내장 변수:{{item}}
(현재 항목),{{index}}
(순번).
9. 지식 검색 (Knowledge Retrieval Node)
- 역할: 연결된 지식베이스에서 관련 문서를 검색하여 LLM 컨텍스트로 제공합니다.
- 입력: 사용자 쿼리 (예:
sys.query
). - 출력: 검색된 텍스트 조각.
10. 변수 할당 (Variable Assigner Node)
- 역할: 세션 변수(Conversation Variables)에 값을 할당합니다.
- 입력: 할당할 값 (문자열, 숫자, 객체 등).
- 출력: 업데이트된 세션 변수.
11. 템플릿 변환 (Template Node)
- 역할: Jinja2 템플릿 엔진을 사용해 데이터를 텍스트로 변환합니다.
- 입력: 변수 (예:
{{title}}
,{{content}}
). - 출력: 포맷팅된 문자열.
12. 도구 (Tools Node)
- 역할: Dify 내장 도구(예: Dall-E 이미지 생성) 또는 커스텀 도구를 호출합니다.
- 입력: 도구별 파라미터 (예: 이미지 생성용 프롬프트).
- 출력: 도구 실행 결과 (이미지 BLOB, 링크 등).
13. 변수 집계 (Variable Aggregator Node)
- 역할: 병렬 분기에서 생성된 변수를 단일 변수로 통합합니다.
- 입력: 여러 노드의 출력 변수.
- 출력: 집계된 변수.
14. 파라미터 추출 (Parameter Extractor Node)
- 역할: 자연어 입력에서 구조화된 파라미터(예: 날짜, 금액)를 추출합니다.
- 입력: 사용자 질문 (예: "내일 3시 회의 예약해줘").
- 출력:
{"time": "15:00", "date": "2025-01-24"}
.
15. 문제 분류 (Question Classifier Node)
- 역할: 사용자 입력을 사전 정의된 카테고리로 분류합니다.
- 입력: 텍스트 쿼리.
- 출력: 분류 레이블 (예: "예약", "문의").
주요 변수 유형
- 시스템 변수:
sys.*
(예:sys.user_id
,sys.conversation_id
) . - 환경 변수: API 키 등 민감 정보를 저장.
- 세션 변수: Chatflow에서 다중 회차에 걸쳐 데이터 유지.
더 자세한 내용은 Dify 공식 문서와 GitHub 워크플로우 예제를 참고하세요.