Dify 워크플로우 제어: 에이전트 오케스트레이션과 n8n 연동 팁 (4/5)

Workflow 에이전트 자동화 노드 체이닝 n8n 연동 API
Dify 워크플로우는 단순한 챗봇을 넘어 엔터프라이즈급 AI 자동화 파이프라인을 구축할 수 있는 시각적 오케스트레이션 엔진입니다. 노드 체이닝, 변수 라우팅, 조건 분기, 반복 처리를 통해 문서 자동 처리, 멀티 에이전트 협업, n8n/API 연동까지 — 복잡한 비즈니스 프로세스를 AI로 자동화하는 완전한 방법을 다룹니다.
📚
Dify 완전 정복 가이드 — 5편 시리즈
Docker 설치부터 프로덕션 운영까지
STEP01

RAG 챗봇 앱 — 5분 완성부터 고급 설정까지

Chatbot은 Dify 워크플로우에서 가장 빠르게 만들 수 있는 앱 유형입니다. 지식베이스 연결만으로 즉시 문서 기반 Q&A 봇이 완성됩니다. 단, 검색 결과를 정밀 제어하려면 Chat Flow가 필요합니다.

1

Studio → Create App → Chatbot → 앱 이름 입력

Basic Orchestration(간단) 또는 Expert Mode(고급) 선택 — 처음엔 Basic 권장

2

INSTRUCTION에 시스템 프롬프트 작성

봇의 역할, 응답 언어, 출처 인용 방식, 모르는 것 처리 방법 명시

3

Context에서 지식베이스 연결

+ Add → 지식베이스 선택 → Top K: 5~8, Score Threshold: 0.3~0.5

4

Features 설정 — Speech to Text, File Upload 활성화

사용자가 음성 입력이나 파일을 직접 업로드할 수 있게 설정

5

Publish → 채널별 배포

웹 앱, 임베드 코드, API Access, Slack/Discord 봇으로 배포 가능

고품질 시스템 프롬프트 예시

System Prompt — 기업 내부 지식 Q&A 봇
당신은 [회사명]의 내부 지식 관리 AI 어시스턴트입니다.

[역할]
- 제공된 지식베이스 문서를 바탕으로 정확한 정보를 제공합니다.
- 임직원의 업무 질문에 친절하고 전문적으로 답변합니다.

[응답 규칙]
1. 반드시 제공된 컨텍스트(지식베이스 문서)에 기반해서 답변하세요.
2. 컨텍스트에 없는 내용이라면 "제공된 문서에서 해당 정보를 찾을 수 없습니다. 관련 담당자에게 문의하시거나 문서를 업데이트해 주세요"라고 안내하세요.
3. 답변 말미에 참고한 문서명을 [출처: 문서명] 형식으로 명시하세요.
4. 단계별 절차가 있는 질문에는 번호 목록으로 구조화해서 답변하세요.
5. 한국어로 답변하세요.

[금지 사항]
- 외부 인터넷 정보나 학습 데이터로 추측하여 답변하지 마세요.
- 법률, 의료, 재무 관련 전문 조언을 직접 제공하지 마세요.
STEP02

Chat Flow — Workflow 기반 고급 RAG 챗봇

Chat Flow는 Dify 워크플로우의 정밀한 노드 제어와 대화형 UI를 결합합니다. 검색 전처리, 다중 지식베이스 라우팅, 답변 후처리가 필요한 경우에 사용하세요.

1

Studio → Create App → Chat Flow

비어있는 캔버스에서 Start → Answer 노드 기본 구조로 시작

2

언어 감지 Condition 노드 추가 (선택)

sys.query 언어를 감지해서 한국어/영어 지식베이스를 다르게 검색

3

Knowledge Retrieval 노드 추가

Query: sys.query, 지식베이스 선택, Top K: 5, Search Mode: Hybrid Search

4

LLM 노드 추가

System: 시스템 프롬프트 / User: {{#context#}} + {{sys.query}} — context에 Knowledge Retrieval 결과 연결

5

Answer 노드에 LLM 출력 연결 → Publish

LLM.text를 Answer에 연결

💡
Chat Flow 고급 패턴 — 멀티 지식베이스 라우팅

Condition 노드에서 질문 카테고리를 분류하고, 각 카테고리에 맞는 전문 지식베이스로 라우팅하면 검색 정확도가 크게 향상됩니다. 예: “IT 질문” → IT 매뉴얼 KB, “HR 질문” → HR 정책 KB, “재무 질문” → 재무 규정 KB

STEP03

Workflow 기초 — 노드 체이닝과 변수 라우팅

Dify 워크플로우의 핵심은 변수(Variable)입니다. 모든 노드는 이전 노드의 출력을 변수로 받아 처리하고, 결과를 다음 노드에 전달합니다.

변수 참조 문법

Dify Variable Reference
-- 시스템 변수 --
{{sys.query}}           사용자 입력 텍스트
{{sys.user_id}}         사용자 ID
{{sys.conversation_id}} 대화 ID

-- 노드 출력 변수 --
{{노드이름.output}}      노드의 text 출력
{{llm1.text}}           LLM 노드 "llm1"의 텍스트 출력
{{code1.result}}        Code 노드 "code1"의 result 변수
{{retriever1.result}}   Knowledge Retrieval 결과

-- Start 노드 입력 변수 --
{{input_text}}          Start 노드에서 정의한 변수
{{language}}            Start 노드에서 정의한 언어 선택 변수

노드 간 데이터 흐름 예시

Workflow — 문서 요약 파이프라인
Start (input: document_text, target_lang)
    ↓
LLM #1 "summarizer"
    System: "다음 문서를 핵심 포인트 5개로 요약하세요"
    User: {{document_text}}
    ↓ summarizer.text
LLM #2 "translator"
    System: "다음 텍스트를 {{target_lang}}로 번역하세요"
    User: {{summarizer.text}}
    ↓ translator.text
End (output: translator.text)
STEP04

실전 Dify 워크플로우 패턴

패턴 1 — 다중 문서 일괄 처리 (Iteration 노드)

Workflow Pattern — Batch Document Processing
Start (input: document_list Array)
    ↓
Iteration (items: document_list)
    ├── LLM: 개별 문서 요약
    └── Code: 결과 포맷팅
    ↓
Variable Aggregator (각 문서 요약 통합)
    ↓
LLM: 통합 인사이트 생성
    ↓
HTTP Request: Slack으로 결과 전송
    ↓
End

패턴 2 — 조건 분기 라우팅 (Condition 노드)

Workflow Pattern — Intent-based Routing
Start (input: user_query)
    ↓
LLM #1: 의도 분류 → "technical" / "billing" / "general"
    ↓
Condition
    ├── IF intent == "technical" → Knowledge Retrieval (기술 문서 KB)
    ├── IF intent == "billing"   → Knowledge Retrieval (청구 정책 KB)
    └── ELSE                     → LLM (일반 답변)
    ↓
Variable Aggregator
    ↓
LLM #2: 최종 답변 생성
    ↓
End

실전 워크플로우 활용 사례

활용 사례핵심 노드 구성예상 효과
이메일 자동 분류 & 답변 초안HTTP → LLM(분류) → Condition → LLM(초안) → HTTP응답 시간 70% 단축
주간 보고서 자동 생성HTTP(데이터) → Code(파싱) → LLM(분석) → LLM(보고서) → HTTP(전송)보고서 작성 공수 90% 절감
코드 리뷰 자동화HTTP(GitHub) → Code(파싱) → LLM(리뷰) → HTTP(댓글)리뷰 대기 시간 제거
다국어 콘텐츠 처리LLM(감지) → Condition → LLM(번역/요약) → End다국어 지원 즉시 확장
지식베이스 자동 업데이트HTTP(RSS/API) → LLM(요약) → Knowledge Retrieval(저장)실시간 지식 갱신
STEP05

Dify 워크플로우 에이전트(Agent) 설계 — Tool 활용과 ReAct 패턴

Agent 앱은 LLM이 스스로 어떤 도구(Tool)를 사용할지 판단하는 자율적인 AI입니다. 웹 검색, 코드 실행, 지식베이스 검색을 AI가 상황에 맞게 선택합니다.

Dify 내장 도구 목록

도구기능활용 예시
웹 검색 (Google/Bing/DuckDuckGo)실시간 인터넷 검색최신 뉴스, 현재 정보 조회
Wikipedia위키피디아 검색일반 지식 조회
계산기 (Calculator)수식 계산재무 계산, 통계
코드 실행 (Code Interpreter)Python 코드 실행데이터 분석, 그래프 생성
지식베이스 (Knowledge Base)벡터 검색내부 문서 참조
날씨 (Weather)날씨 정보 조회기후 기반 추천
💡
ReAct 패턴 이해

Agent는 Reasoning(추론) + Acting(행동)을 반복하는 ReAct 패턴으로 동작합니다. “현재 상황 분석 → 필요한 도구 선택 → 실행 → 결과 분석 → 다음 행동 결정”을 목표 달성까지 자율적으로 반복합니다. 복잡한 리서치나 다단계 문제 해결에 강력합니다.

STEP06

Dify 워크플로우 API 엔드포인트 & n8n 자동화 연동

Dify는 모든 앱을 즉시 REST API로 노출합니다. 이 API를 통해 n8n, Zapier, 자체 서비스 등 외부 시스템과 완전히 연동할 수 있습니다.

API 키 발급 & 기본 테스트

bash — Chatbot API 호출
# Chatbot: 메시지 전송 (blocking)
curl -X POST 'http://YOUR_DIFY_URL/v1/chat-messages' \
  -H 'Authorization: Bearer app-YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "inputs": {},
    "query": "안녕하세요, 테스트 질문입니다.",
    "response_mode": "blocking",
    "conversation_id": "",
    "user": "user-001"
  }'

# 응답 구조
# {
#   "answer": "AI 응답 내용",
#   "conversation_id": "xxxx",
#   "message_id": "xxxx"
# }
bash — Workflow API 실행
# Workflow 실행
curl -X POST 'http://YOUR_DIFY_URL/v1/workflows/run' \
  -H 'Authorization: Bearer app-YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "inputs": {
      "document_text": "분석할 문서 내용",
      "target_language": "한국어"
    },
    "response_mode": "blocking",
    "user": "user-001"
  }'

n8n HTTP Request 노드로 Dify 연동

1

n8n에서 HTTP Request 노드 추가

Method: POST / URL: http://dify서버IP/v1/chat-messages

2

Authentication → Header Auth

Name: Authorization / Value: Bearer app-YOUR_API_KEY

3

Body (JSON)

query: 이전 노드의 텍스트 값, user: 고정값 또는 동적 user ID

4

응답에서 answer 추출

{{ $json.answer }} 로 Dify 응답 텍스트 추출

Streaming vs Blocking 응답 방식

방식특징권장 사용
blocking생성 완료 후 전체 응답 반환. 처리 단순n8n, 자동화 연동, API 호출
streaming토큰 생성 시마다 실시간 전송 (SSE)웹 UI, 사용자 직접 인터페이스
STEP07

프롬프트 엔지니어링 & 버전 관리

Dify 워크플로우의 강력한 기능 중 하나는 배포 없이 프롬프트를 수정하고 버전 히스토리로 롤백할 수 있다는 점입니다.

효과적인 프롬프트 작성 원칙

원칙설명예시
역할 명시AI의 역할과 전문성 명확히 정의“당신은 10년 경력의 시니어 백엔드 개발자입니다”
출력 형식 지정응답 구조를 구체적으로 요구“결과를 JSON 형식으로: {score, reason, recommendation}”
제약 사항 명시하면 안 되는 것을 명확히“컨텍스트에 없는 내용은 추측하지 마세요”
예시 제공 (Few-shot)원하는 출력 패턴을 예시로 보여주기입력/출력 예시 2~3개 포함
언어 명시응답 언어를 명확히“반드시 한국어로 답변하세요”

프롬프트 버전 관리

1

앱 편집 → Publish → Save as Draft

현재 프롬프트를 버전으로 저장 (배포 전 안전하게 보관)

2

Publish History에서 버전 히스토리 확인

이전 버전 내용 조회 및 특정 버전으로 롤백 가능

3

A/B 테스트 — 복수 앱 운영

동일 지식베이스에 다른 프롬프트를 가진 앱 2개를 만들어 성능 비교

다음 단계: 앱 운영이 시작됐다면 다음 글에서 하이브리드 RAG 검색 튜닝, 데이터 백업 전략, 모니터링으로 프로덕션 품질을 완성합니다.

이전 글 모델 연동 & 인프라 최적화 — Ollama · OpenAI · Claude · CUDA/VRAM 다음 글 고급 RAG 튜닝 & 프로덕션 유지보수 — 하이브리드 검색 · 백업 · 모니터링

Leave a reply

Please enter your comment!
Please enter your name here