RAG 챗봇 만들기 에 앞서 이전 포스트에서는 Dify에서 챗봇을 만들고 API 테스트까지 진행해봤다.
이번에는 그 챗봇에 사내 문서를 본격적으로 연동하고, RAG(Retrieval-Augmented Generation) 전략을 활용해 실제로 지식기반 응답을 생성하는 방법을 다룬다.
1. 왜 RAG인가?
RAG는 단순한 LLM 응답이 아닌, 외부 문서에서 관련 정보를 검색해 LLM에게 제공함으로써 더 정확하고 신뢰할 수 있는 답변을 만든다.
특히 사내 정책, 기술 문서, 제품 매뉴얼 같은 자료를 기반으로 하는 챗봇에 적합하다.
2. 사내 문서 준비 및 구조화
연동할 문서는 다음 기준을 고려해 준비한다:
기준 | 설명 |
---|---|
포맷 | PDF, Markdown, .txt 등 텍스트 추출 가능한 형식 |
크기 | 너무 큰 문서는 2~3 페이지 단위로 나누는 것이 유리 |
내용 | 최신 정보가 반영된 문서로, 질문과 직접 관련 있는 컨텍스트 포함 |
Dify는 문서를 업로드하면 이를 chunk 단위로 분리하고 벡터화하여 DB에 저장한다.
faq 샘플 파일을 준비한다. (acmetech_fqa.md)
# AcmeTech 고객 FAQ
## 제품 배송은 얼마나 걸리나요?
일반적으로 주문 후 2~3일 이내에 배송이 시작됩니다. 배송 상황은 마이페이지에서 확인하실 수 있습니다.
## 환불은 어떻게 진행되나요?
구매일로부터 14일 이내라면 고객센터에 접수 후 환불 요청이 가능합니다. 제품 상태에 따라 환불이 제한될 수 있습니다.
## 기술 지원은 어떻게 받을 수 있나요?
기술 지원은 support@acmetech.com 으로 이메일을 보내주시거나, 홈페이지의 라이브챗을 통해 받으실 수 있습니다.
## 제품 보증 기간은 얼마인가요?
모든 제품은 기본적으로 1년의 무상 보증이 제공됩니다.
3. 데이터셋 생성과 문서 업로드
- Dify 관리자 UI에서 Datasets 메뉴 클릭
- New Dataset 클릭 후 이름, 설명 입력
- 생성된 데이터셋 안으로 들어가 Upload Files 실행
- 업로드 후 데이터 파싱 및 인덱싱 진행 확인 (상태: Completed)
Dify는 Qdrant 또는 Weaviate 벡터 DB와 연동되어 있어, 문서 유사도를 기준으로 검색한다.
위 faq 샘플 파일을 지식으로 등록했다.

4. App과 데이터셋 연결
- 챗봇 App 설정에서 Configuration > Dataset Settings 진입
- 앞서 만든 데이터셋 선택 후 저장
- 설정 완료 후, 해당 App에서 문서 기반 응답이 가능해진다
llm 노드 앞에 지식 검색 노드를 추가하고 검색결과를 llm 에 전달한다.

5. 응답 품질 개선을 위한 추가 설정
항목 | 설정 위치 | 설명 |
Chunk Size | Dataset 설정 | 문서 분할 크기, 기본 500~800 token 권장 |
Top-K | App 설정 | 검색 결과 중 몇 개를 참조할지 (예: 3~5개) |
Filter 조건 | Dataset 필터 기능 | 특정 태그나 파일 유형 기준으로 검색 제한 가능 |
6. API 테스트 예시 (RAG 연동)
curl -X POST http://localhost:5001/v1/chat-messages \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"inputs": {},
"query": "제품 배송은 얼마나 걸리나요?",
"response_mode": "blocking",
"conversation_id": "",
"conversation_id": "conv-123"
}'
api 키를 발급받아 외부에서 curl 로 테스트 할 수 있다.
{
"event": "message",
"task_id": "2bdc8258-9e03-4acf-a046-583c7be105bb",
"id": "d184bfe1-425a-41e1-97c8-d41ea2794bb9",
"message_id": "d184bfe1-425a-41e1-97c8-d41ea2794bb9",
"conversation_id": "eb167e9c-2feb-4f95-8767-3aeb303c663a",
"mode": "advanced-chat",
"answer": "제품 배송은 일반적으로 주문 후 2~3일 이내에 시작됩니다. 배송 상황은 마이페이지에서 확인하실 수 있습니다.",
"metadata": {
"annotation_reply": null,
"retriever_resources": [],
"usage": {
"prompt_tokens": 916,
"prompt_unit_price": "5",
"prompt_price_unit": "0.000001",
"prompt_price": "0.00458",
"completion_tokens": 31,
"completion_unit_price": "15",
"completion_price_unit": "0.000001",
"completion_price": "0.000465",
"total_tokens": 947,
"total_price": "0.005045",
"currency": "USD",
"latency": 1.1559185839996644
}
},
"created_at": 1750201928
}
응답에는 챗봇의 답변뿐 아니라, 참조한 문서 조각들의 위치와 내용도 함께 포함된다.
6. Web UI에서 테스트
Apps > [내 App] > Preview 탭에서 실제로 대화를 시뮬레이션할 수 있다.
업로드한 문서를 기반으로 질문을 던져보고, 응답 품질을 확인해본다.

RAG는 챗봇이 단순히 말 잘하는 AI를 넘어, 실제 정보를 기반으로 정확하게 답하도록 만드는 핵심 전략이다.
사내 문서를 구조화해 연동하고, 적절한 설정을 통해 신뢰성 있는 응답을 만드는 것이 이번 단계의 핵심이다.
다음 글에서는 VSCode에서 Continue를 설치하고, 코드 어시스턴트를 붙이는 실습을 이어간다.