Table of Contents
Chatflow vs 기본 Chatbot의 차이점 #
Chatflow의 장점 #
- 시각적 워크플로: 노드 기반의 시각적 오케스트레이션
- 복잡한 로직: 다단계 처리와 조건부 분기 가능
- 디버깅 용이: 각 노드별 실행 결과 확인 가능
- 유연한 구성: Knowledge Retrieval, LLM, Answer 노드를 자유롭게 연결
기본 구조 #
- Start 노드: 사용자 입력 받기
- Knowledge Retrieval 노드: 지식베이스에서 관련 정보 검색
- LLM 노드: 검색된 정보를 바탕으로 답변 생성
- Answer 노드: 사용자에게 응답 반환
1단계: Chatflow 애플리케이션 생성 #
1.1 애플리케이션 생성 #
- Studio 메뉴로 이동
- Create from Blank 선택
- Chatflow 애플리케이션 타입 선택
- 애플리케이션 이름 입력 (예: “고객지원 RAG 봇”)
1.2 시작 노드 확인 #
- Start 노드가 자동으로 생성됨
- 내장 변수 확인:
sys.query
: 사용자 입력 질문sys.files
: 업로드된 파일sys.conversation_id
: 대화 IDsys.user_id
: 사용자 ID
2단계: Knowledge Retrieval 노드 추가 #
2.1 노드 추가 #
- Start 노드 끝의 “+” 버튼 클릭
- Knowledge Retrieval 노드 선택
- 노드를 Start 노드와 연결
2.2 Knowledge Retrieval 노드 설정 #
Query Variable 선택 #
입력 변수: {{#sys.query#}}
- 사용자의 질문을 검색 쿼리로 사용
- 최대 200자까지 처리 가능
Knowledge Base 선택 #
- Select Knowledge Base 드롭다운 클릭
- 미리 생성한 Knowledge Base 선택
- 여러 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 노드 추가 #
- Knowledge Retrieval 노드 끝의 “+” 버튼 클릭
- LLM 노드 선택
- 연결 설정
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 노드 추가 #
- LLM 노드 끝의 “+” 버튼 클릭
- Answer 노드 선택
- 연결 설정
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으로 디버깅 #
- Debug and Preview 모드 진입
- Step Run 기능 사용
- 각 노드의 입출력 확인
- 문제 발생 노드 식별
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 노드 에러 처리 #
- LLM 노드에서 Error Handling 활성화
- 에러 발생 시 대체 경로 설정
- 사용자 친화적 에러 메시지 제공
예외 처리 플로우 #
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 애플리케이션 게시 #
- 모든 테스트 완료 후 Publish 버튼 클릭
- 배포 설정 구성
- 공개 URL 생성
8.2 통합 옵션 #
- Web App: 독립적인 웹 애플리케이션
- API: REST API 엔드포인트
- Embed: 웹사이트 임베드 코드
- Slack/Discord: 메신저 봇 통합
8.3 운영 모니터링 #
- 대화 로그: 사용자 상호작용 분석
- 성능 메트릭: 응답 시간, 정확도
- 비용 추적: 토큰 사용량 모니터링
- 사용자 피드백: 만족도 수집
베스트 프랙티스 #
워크플로 설계 #
- 단순함 유지: 복잡한 플로우보다는 명확한 경로
- 에러 처리: 모든 가능한 에러 상황 고려
- 성능 최적화: 불필요한 노드 제거
- 사용자 경험: 직관적이고 빠른 응답
프롬프트 최적화 #
- 명확한 지시: 구체적이고 명확한 지침
- 컨텍스트 활용: 검색된 정보 효과적 활용
- 일관된 톤: 브랜드에 맞는 응답 스타일
- 예외 처리: 답변할 수 없는 상황 대응
지속적 개선 #
- 로그 분석: 사용자 질문 패턴 분석
- Knowledge Base 업데이트: 정기적인 문서 갱신
- 성능 모니터링: 응답 품질 지속 개선
- 사용자 피드백: 실제 사용자 경험 반영
이 가이드를 따라하면 Dify Chatflow를 사용하여 효과적인 RAG 시스템을 구축할 수 있습니다. 시각적 워크플로의 장점을 활용하여 복잡한 대화 로직도 쉽게 구현할 수 있습니다.