View Categories

Dify Chatflow로 RAG 시스템 구축하기

Chatflow vs 기본 Chatbot의 차이점 #

Chatflow의 장점 #

  • 시각적 워크플로: 노드 기반의 시각적 오케스트레이션
  • 복잡한 로직: 다단계 처리와 조건부 분기 가능
  • 디버깅 용이: 각 노드별 실행 결과 확인 가능
  • 유연한 구성: Knowledge Retrieval, LLM, Answer 노드를 자유롭게 연결

기본 구조 #

  • Start 노드: 사용자 입력 받기
  • Knowledge Retrieval 노드: 지식베이스에서 관련 정보 검색
  • LLM 노드: 검색된 정보를 바탕으로 답변 생성
  • Answer 노드: 사용자에게 응답 반환

1단계: Chatflow 애플리케이션 생성 #

1.1 애플리케이션 생성 #

  1. Studio 메뉴로 이동
  2. Create from Blank 선택
  3. Chatflow 애플리케이션 타입 선택
  4. 애플리케이션 이름 입력 (예: “고객지원 RAG 봇”)

1.2 시작 노드 확인 #

  • Start 노드가 자동으로 생성됨
  • 내장 변수 확인:
    • sys.query: 사용자 입력 질문
    • sys.files: 업로드된 파일
    • sys.conversation_id: 대화 ID
    • sys.user_id: 사용자 ID

2단계: Knowledge Retrieval 노드 추가 #

2.1 노드 추가 #

  1. Start 노드 끝의 “+” 버튼 클릭
  2. Knowledge Retrieval 노드 선택
  3. 노드를 Start 노드와 연결

2.2 Knowledge Retrieval 노드 설정 #

Query Variable 선택 #

입력 변수: {{#sys.query#}}
  • 사용자의 질문을 검색 쿼리로 사용
  • 최대 200자까지 처리 가능

Knowledge Base 선택 #

  1. Select Knowledge Base 드롭다운 클릭
  2. 미리 생성한 Knowledge Base 선택
  3. 여러 Knowledge Base 추가 가능

Metadata Filtering (선택사항) #

json

{
  "category": "customer_service",
  "language": "ko",
  "department": "technical"
}

Retrieval Strategy 설정 #

  • Top K: 검색할 청크 수 (기본값: 3)
  • Score Threshold: 관련성 점수 임계값 (0.0-1.0)
  • Retrieval Mode:
    • N-to-1 Recall: 함수 호출 방식
    • Multi-way Recall: 리랭크 모델 사용

3단계: LLM 노드 추가 및 설정 #

3.1 LLM 노드 추가 #

  1. Knowledge Retrieval 노드 끝의 “+” 버튼 클릭
  2. LLM 노드 선택
  3. 연결 설정

3.2 LLM 노드 설정 #

모델 선택 #

  • OpenAI GPT-4 (권장)
  • Claude 3.5 Sonnet
  • DeepSeek Chat (비용 효율적)

Context 변수 설정 #

Context: {{#knowledge_retrieval.result#}}

System Prompt 작성 #

당신은 전문적인 고객 지원 AI 어시스턴트입니다.

제공된 컨텍스트 정보를 바탕으로 사용자의 질문에 정확하고 도움이 되는 답변을 제공하세요.

컨텍스트: {{#knowledge_retrieval.result#}}

지침:
1. 컨텍스트에서 관련 정보를 찾아 답변하세요
2. 확실하지 않은 정보는 추측하지 마세요
3. 답변할 수 없는 경우 정중히 안내하세요
4. 친근하고 전문적인 톤을 유지하세요
5. 필요시 단계별로 설명하세요

사용자 질문: {{#sys.query#}}

User Message 설정 #

{{#sys.query#}}

고급 설정 #

  • Temperature: 0.1-0.3 (일관된 답변)
  • Max Tokens: 1000-2000
  • Top P: 0.9
  • Memory 활성화: 다턴 대화 지원

4단계: Answer 노드 추가 #

4.1 Answer 노드 추가 #

  1. LLM 노드 끝의 “+” 버튼 클릭
  2. Answer 노드 선택
  3. 연결 설정

4.2 Answer 노드 설정 #

기본 응답 설정 #

{{#llm.text#}}

인용 정보 포함 (선택사항) #

{{#llm.text#}}

---
📚 **참고 문서:**
{{#knowledge_retrieval.result#}}

스트리밍 출력 #

  • Enable Streaming: 체크
  • 실시간으로 답변이 생성되어 표시

5단계: 고급 기능 추가 #

5.1 조건부 분기 (IF/ELSE 노드) #

질문 유형 분류 #

python

# Question Classifier 노드 추가
if "기술" in query:
    route_to = "technical_knowledge"
elif "결제" in query:
    route_to = "billing_knowledge"
else:
    route_to = "general_knowledge"

5.2 Template 노드로 응답 형식화 #

Template 노드 설정 #

jinja2

**답변:** {{answer}}

**신뢰도:** {{confidence_score}}

**관련 문서:**
{% for doc in source_documents %}
- {{doc.title}} ({{doc.score}})
{% endfor %}

**추가 도움이 필요하시면 언제든 문의해 주세요! 😊**

5.3 HTTP Request 노드로 외부 API 연동 #

실시간 정보 보강 #

json

{
  "url": "https://api.company.com/status",
  "method": "GET",
  "headers": {
    "Authorization": "Bearer {{api_key}}"
  }
}

6단계: 디버깅 및 최적화 #

6.1 Step Run으로 디버깅 #

  1. Debug and Preview 모드 진입
  2. Step Run 기능 사용
  3. 각 노드의 입출력 확인
  4. 문제 발생 노드 식별

6.2 노드별 디버깅 포인트 #

Knowledge Retrieval 노드 #

  • 검색된 청크의 관련성 확인
  • Top K 값 조정
  • 점수 임계값 최적화

LLM 노드 #

  • Context 변수 전달 확인
  • 프롬프트 효과성 검증
  • 토큰 사용량 모니터링

Answer 노드 #

  • 출력 형식 검증
  • 스트리밍 동작 확인

6.3 성능 최적화 팁 #

검색 성능 향상 #

yaml

Knowledge Retrieval 설정:
  Top K: 5 (초기값) → 3 (최적화)
  Score Threshold: 0.7
  Rerank Model: 활성화

LLM 비용 최적화 #

yaml

LLM 설정:
  Model: GPT-4 → GPT-3.5-turbo (비용 절감)
  Max Tokens: 2000 → 1000 (필요시)
  Temperature: 0.1 (일관성 중심)

7단계: 에러 처리 및 예외 상황 #

7.1 Error Handling 노드 추가 #

LLM 노드 에러 처리 #

  1. LLM 노드에서 Error Handling 활성화
  2. 에러 발생 시 대체 경로 설정
  3. 사용자 친화적 에러 메시지 제공

예외 처리 플로우 #

Start → Knowledge Retrieval → [에러 발생] → Error Handler → Fallback Answer

7.2 일반적인 에러 상황 #

Knowledge Base 관련 #

  • No Results Found: 검색 결과 없음
  • Low Relevance Score: 관련성 점수 낮음
  • Query Too Long: 쿼리 길이 초과

LLM 관련 #

  • Token Limit Exceeded: 토큰 한계 초과
  • API Rate Limit: API 호출 제한
  • Model Not Available: 모델 사용 불가

8단계: 배포 및 모니터링 #

8.1 애플리케이션 게시 #

  1. 모든 테스트 완료 후 Publish 버튼 클릭
  2. 배포 설정 구성
  3. 공개 URL 생성

8.2 통합 옵션 #

  • Web App: 독립적인 웹 애플리케이션
  • API: REST API 엔드포인트
  • Embed: 웹사이트 임베드 코드
  • Slack/Discord: 메신저 봇 통합

8.3 운영 모니터링 #

  • 대화 로그: 사용자 상호작용 분석
  • 성능 메트릭: 응답 시간, 정확도
  • 비용 추적: 토큰 사용량 모니터링
  • 사용자 피드백: 만족도 수집

베스트 프랙티스 #

워크플로 설계 #

  1. 단순함 유지: 복잡한 플로우보다는 명확한 경로
  2. 에러 처리: 모든 가능한 에러 상황 고려
  3. 성능 최적화: 불필요한 노드 제거
  4. 사용자 경험: 직관적이고 빠른 응답

프롬프트 최적화 #

  1. 명확한 지시: 구체적이고 명확한 지침
  2. 컨텍스트 활용: 검색된 정보 효과적 활용
  3. 일관된 톤: 브랜드에 맞는 응답 스타일
  4. 예외 처리: 답변할 수 없는 상황 대응

지속적 개선 #

  1. 로그 분석: 사용자 질문 패턴 분석
  2. Knowledge Base 업데이트: 정기적인 문서 갱신
  3. 성능 모니터링: 응답 품질 지속 개선
  4. 사용자 피드백: 실제 사용자 경험 반영

이 가이드를 따라하면 Dify Chatflow를 사용하여 효과적인 RAG 시스템을 구축할 수 있습니다. 시각적 워크플로의 장점을 활용하여 복잡한 대화 로직도 쉽게 구현할 수 있습니다.

Powered by BetterDocs

Leave a Reply