Dify 완전 정복 가이드 2편: Ollama 연동·고급 워크플로우·에이전트 설계 (2/3)

0
78
Ollama 로컬 LLM 및 OpenAI API를 Dify에 연동하고 Chat Flow, 에이전트 ReAct 패턴, n8n 자동화를 설계하는 Dify 모델 워크플로우 가이드 대표 이미지
2편: 로컬·클라우드 모델 연동 및 고급 Workflow와 ReAct 에이전트 구현
🚀 Dify 완전 정복 가이드 — 3편 시리즈
시리즈2편 / 3편
퍼머링크dify-complete-guide-model-workflow
섹션13개
🦙 Ollama 연동 ⚡ OpenAI · Claude ⚙️ 워크플로우 🤖 에이전트 🔗 n8n 자동화 임베딩 · RAG 챗봇
Dify에 AI 모델을 연결하고 실제로 동작하는 앱을 만드는 방법을 다룹니다. Ollama 로컬 LLM부터 OpenAI·Claude API까지 연동하고, 임베딩 모델 선택 후 RAG 챗봇·Chat Flow·Workflow·에이전트를 순서대로 구축합니다. n8n으로 Dify API를 자동화하는 방법까지 — 2편 하나로 Dify의 모든 핵심 기능을 완성합니다.
SECTION01

모델 선택 전략 — 비용·성능·프라이버시 트레이드오프

Dify CUDA 환경 구축으로 로컬 LLM을 선택할 수 있는데 LLM 선택은 단순히 “어떤 모델이 좋은가”의 문제가 아닙니다. 비용, 성능, 데이터 프라이버시, 응답 속도, 컨텍스트 길이 등 여러 요소를 고려해서 용도별로 최적 모델을 배치하는 것이 핵심입니다.

모델 유형비용성능프라이버시속도적합한 용도
Ollama 로컬 (7B)무료완전 로컬GPU: 빠름 / CPU: 느림내부 문서, 민감 데이터
Ollama 로컬 (14B+)무료높음완전 로컬GPU 필수고품질 로컬 처리
Claude Haiku저렴외부 전송매우 빠름간단한 분류, 요약
Claude Sonnet중간높음외부 전송빠름RAG, 코드, 분석
GPT-4o-mini저렴중-상외부 전송빠름일반 챗봇, 요약
GPT-4o비쌈최고외부 전송중간복잡한 추론, 이미지
💡
실전 권장 혼합 구성

임베딩: bge-m3 로컬 (비용 0원, 한국어 포함) + LLM: 민감 데이터는 Ollama qwen2.5:14b, 일반 처리는 Claude Sonnet, 대량 처리는 Claude Haiku — 이 구성으로 비용과 품질을 동시에 최적화할 수 있습니다.

SECTION02

Ollama 설치 & GPU 최적화

Ollama 설치 (모든 OS 공통)

bash
# 공식 설치 스크립트
curl -fsSL https://ollama.com/install.sh | sh

# 서비스 등록
sudo systemctl enable --now ollama

# 버전 확인
ollama --version

NVIDIA GPU CUDA/VRAM 매핑 — 모델별 최소 VRAM

모델파라미터양자화최소 VRAM권장 GPUCPU 폴백
qwen2.5:7b7BQ4_K_M5GBRTX 3060 6GB+가능 (느림)
qwen2.5:14b14BQ4_K_M9GBRTX 3060 12GB가능 (매우 느림)
mistral-nemo:12b12BQ4_K_M7GBRTX 3060 12GB가능
gemma4:e4b4BE4B10GBRTX 3060 12GB비권장
llama3.1:70b70BQ4_K_M40GB+A100 / 2x RTX 4090불가
bge-m3567MF161.5GB어떤 GPU든빠름

Ollama GPU 최적화 환경변수

bash — systemd 환경변수 설정
# Ollama 서비스 환경변수 편집
sudo systemctl edit ollama

# 아래 내용 추가
# [Service]
# Environment="OLLAMA_HOST=0.0.0.0"          # 외부 접근 허용
# Environment="OLLAMA_FLASH_ATTENTION=1"     # Flash Attention 활성화
# Environment="OLLAMA_NUM_PARALLEL=2"        # 동시 요청 처리 수
# Environment="OLLAMA_MAX_LOADED_MODELS=1"   # 메모리 보존
# Environment="OLLAMA_KEEP_ALIVE=24h"        # 모델 메모리 유지 시간
# Environment="CUDA_VISIBLE_DEVICES=0"       # GPU 0번만 사용

# 재시작
sudo systemctl restart ollama

# GPU 인식 확인
ollama ps  # 모델 실행 중이면 GPU 사용량 표시
nvidia-smi # GPU 메모리 사용량 확인

Dify에서 Ollama 연결 Base URL

구성Base URL설명
Dify Docker + Ollama 호스트 설치http://host.docker.internal:11434Linux: host.docker.internal 동작 확인 필요
Linux Docker + Ollama 호스트http://172.17.0.1:11434Docker 브릿지 게이트웨이 IP
별도 서버에 Ollamahttp://올라마서버IP:11434방화벽에서 11434 포트 허용 필요
Docker Compose 동일 네트워크http://ollama:11434컨테이너 이름으로 직접 통신
SECTION03

Ollama 모델 카탈로그 — 최적 선택 가이드

한국어/영어 LLM 추천 모델

bash — 추천 모델 다운로드
# ── 한국어/영어 균형 (RTX 3060 12GB 적합) ──
ollama pull qwen2.5:7b                      # 가장 가볍고 빠름
ollama pull qwen2.5:14b-instruct-q4_K_M    # 고품질, 한국어 최우수

# ── 영어 기술문서/논문 특화 ──
ollama pull mistral-nemo:12b               # 128K 컨텍스트

# ── 코드 생성 특화 ──
ollama pull qwen2.5-coder:7b               # 코드 생성 최적화
ollama pull deepseek-coder-v2:16b          # 고성능 코드 모델

# ── 임베딩 모델 (RAG 필수) ──
ollama pull bge-m3                         # 한국어 포함 100개+ 언어
ollama pull nomic-embed-text               # 영어 전용, 빠름

# 설치된 모델 목록 확인
ollama list
모델한국어영어코딩VRAM컨텍스트추천 용도
qwen2.5:14b-instruct-q4_K_M최우수우수우수~9GB128K한국어 RAG, 종합
qwen2.5:7b우수양호양호~5GB128K가볍고 빠른 처리
mistral-nemo:12b보통최우수우수~7GB128K영어 문서, 논문
qwen2.5-coder:7b양호우수최우수~5GB32K코드 생성/리뷰
SECTION04

OpenAI API 연동 & 호환 엔드포인트

OpenAI API는 Dify에서 가장 간단하게 연동됩니다. 또한 OpenAI 호환 엔드포인트 기능을 통해 vLLM, LM Studio, LocalAI, Azure OpenAI도 동일한 방식으로 연동할 수 있습니다.

1

platform.openai.com → API Keys → Create new secret key

발급 즉시 복사 필수. 이후 재확인 불가. 프로젝트별 키 분리 권장

2

Dify → 우측 상단 프로필 → Settings → Model Provider → OpenAI

API Key 입력 후 Save. gpt-4o, gpt-4o-mini, text-embedding-3 시리즈 자동 추가

3

사용량 모니터링 설정

platform.openai.com → Usage → 월별 한도 설정으로 예상치 못한 비용 방지

OpenAI 호환 엔드포인트 연동 (vLLM, LM Studio 등)

Dify Settings — OpenAI-API-compatible
Model Provider: OpenAI-API-compatible
Model Name: 실제 모델 이름 (예: qwen2.5-72b-instruct)
API Key: 없으면 임의 값 입력 (예: none)
API endpoint URL:
  └── vLLM:      http://YOUR_SERVER:8000/v1
  └── LM Studio: http://localhost:1234/v1
  └── LocalAI:   http://localhost:8080/v1
  └── Azure:     https://YOUR_RESOURCE.openai.azure.com/openai/deployments/YOUR_DEPLOY
OpenAI 모델컨텍스트멀티모달권장 용도비용 수준
gpt-4o128K✅ 이미지복잡한 추론, 이미지 분석높음
gpt-4o-mini128K✅ 이미지일반 챗봇, RAG, 코드중간
text-embedding-3-large8K고품질 영어 임베딩저렴
text-embedding-3-small8K대량 처리, 비용 절감매우 저렴
SECTION05

Anthropic Claude API 연동

Claude는 200K 컨텍스트, 정밀한 지시 따르기, 뛰어난 한국어 품질이 강점입니다. 특히 긴 문서 처리와 정교한 프롬프트 엔지니어링이 필요한 작업에서 GPT-4o 대비 우수한 결과를 냅니다.

1

console.anthropic.com → API Keys → Create Key

sk-ant-로 시작하는 키 발급. 발급 즉시 복사

2

Dify → Settings → Model Provider → Anthropic

API Key 입력 후 Save

3

모델 선택 및 파라미터 조정

Temperature, Max Tokens, Top P 등 앱별로 최적값 설정

Claude 모델컨텍스트특징권장 용도비용
claude-opus-4200K최고 성능, 복잡한 멀티스텝 추론정교한 분석, 복잡한 워크플로우최고
claude-sonnet-4200K성능/비용 최적, 한국어 우수RAG 챗봇, 코드, 문서 처리중간
claude-haiku-4-5200K초고속, 저비용분류, 요약, 간단한 Q&A낮음
💡
Claude vs GPT-4o — 실전 선택 기준

Claude가 유리한 경우: 긴 문서(50페이지+) 분석, 정교한 지시 따르기, 한국어 자연스러운 응답, 복잡한 추론. GPT-4o가 유리한 경우: 이미지 분석(Vision), 함수 호출(Function Calling), Code Interpreter 기능이 필요한 경우. 비용 효율만 따진다면 Claude Haiku가 GPT-4o-mini 대비 동급 성능에 더 저렴합니다.

SECTION06

임베딩 모델 심층 비교 & 최적 선택

임베딩 모델은 RAG 검색 품질의 80%를 결정합니다. 특히 한국어 문서를 처리한다면 영어 전용 임베딩 모델을 사용해서는 안 됩니다 — 검색 결과가 현저히 나빠집니다.

임베딩 모델언어DimensionsMax Tokens실행비용품질
bge-m3 (권장)100개+ 언어10248192Ollama 로컬무료최고
text-embedding-3-large주로 영어30728191OpenAI API유료높음
text-embedding-3-small주로 영어15368191OpenAI API저렴중간
nomic-embed-text영어7688192Ollama 로컬무료중간
BAAI/bge-large-zh중국어/영어1024512로컬무료중간
⚠️
임베딩 모델 변경 시 전체 재인덱싱 필요

지식베이스 생성 후 임베딩 모델을 변경하면 기존의 모든 벡터가 새 모델과 호환되지 않아 전체 재인덱싱이 필요합니다. 대용량 지식베이스에서는 수 시간이 걸릴 수 있습니다. 처음부터 올바른 임베딩 모델을 선택하세요. 한국어가 포함되어 있다면 무조건 bge-m3를 권장합니다.

SECTION07

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. 한국어로 답변하세요.

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

Chat Flow — Workflow 기반 고급 RAG 챗봇

Chat Flow는 Workflow의 정밀한 노드 제어와 대화형 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

SECTION09

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

Workflow의 핵심은 변수(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)
SECTION10

실전 워크플로우 패턴

패턴 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(저장)실시간 지식 갱신
SECTION11

에이전트(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 패턴으로 동작합니다. “현재 상황 분석 → 필요한 도구 선택 → 실행 → 결과 분석 → 다음 행동 결정”을 목표 달성까지 자율적으로 반복합니다. 복잡한 리서치나 다단계 문제 해결에 강력합니다.

SECTION12

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, 사용자 직접 인터페이스
SECTION13

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

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

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

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

프롬프트 버전 관리

1

앱 편집 → Publish → Save as Draft

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

2

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

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

3

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

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

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

← 이전 편1편 — Dify 소개·아키텍처·완전 설치 가이드다음 편 →3편 — 고급 RAG·트러블슈팅·프로덕션 운영

Leave A Reply

Please enter your comment!
Please enter your name here