본문 바로가기
사이드프로젝트

[사이드 프로젝트] #2 RAG 챗봇 개발기 (4) - 문서를 FAQ로 바꿨더니 답변 품질이 10배 향상됐다

by Jaejin Sim 2025. 11. 8.
반응형

지난 3편에서는 간단한 파라미터 튜닝(청크 크기, k값)의 한계를 깨닫고, RAG 시스템의 근본적인 개선을 위해 1) 메타데이터 활용2) 하이브리드 검색3) 문서 재구조화라는 3가지 개선 계획을 세웠습니다.

 

이번 4편에서는 이 중 가장 극적인 성능 향상을 가져온 세 번째 계획, **'문서 재구조화'**를 실행한 과정을 자세히 공유합니다.

 

❌ 문제의 발견: 완벽한 매뉴얼, 쓸모없는 답변

RAG 챗봇을 구축하며 당혹스러운 경험을 했습니다. 3편에서 겪었던 '답변 잘림' 문제를 해결하고 나서도, 여전히 답변의 품질이 기대에 미치지 못했습니다.

분명 임베딩 대상이 되는 원본 매뉴얼 문서에는 모든 정보가 완벽하게 들어있는데, 정작 챗봇의 답변은 핵심을 비켜가거나 정보를 누락했습니다.

 

질문 예시: "우리가 지원하는 외부 서비스 목록을 알려줘"
기대했던 답변:  A, B, C, D, E, F, G... 총 30개 서비스의 완전한 목록과 각각의 특징
실제 받은 답변:  "A, B, C 등 그 외 다양한 서비스가 있습니다."

 

문서에는 분명 모든 서비스 목록이 상세히 기재되어 있었습니다. 하지만 청킹 과정에서 내용이 분산되거나, 벡터 검색이 '사람이 읽기 좋게 서술된' 매뉴얼 속에서 'AI가 답변하기 좋은' 정확한 조각을 찾지 못했습니다.

 

💡 깨달음: 기술이 아닌 '문서 설계'가 답이다

여기서 3편 마지막에 도달했던 근본적인 원인을 다시 한번 확인했습니다.

임베딩 기술과 청크 전략보다 중요한 것은 '임베딩할 문서의 품질'이다.

아무리 최신 임베딩 모델을 사용하고, 정교한 청크 전략을 세워도, 원본 문서가 AI의 질문-답변(Q&A) 구조에 최적화되지 않으면 한계가 명확합니다.

생각해 보면 '업무 지식' AI에서 사용자들이 하는 질문은 사실 뻔합니다. 패턴이 있고, 반복됩니다.

그렇다면, 아예 문서를 처음부터 질문-답변(FAQ) 형식으로 만들면 어떨까?

🛠️ 해결책: '매뉴얼'을 'FAQ'로 재구성하기

기존의 긴 서술형 매뉴얼 문서를 과감히 버리고, 예상되는 사용자 질문을 기반으로 문서를 'FAQ' 형태로 완전히 재구성했습니다.

 

1단계: 핵심 FAQ 목록 작성

먼저 업무 도메인에서 자주 받거나 예상되는 질문들을 나열했습니다. 머릿속에 떠오르는 질문들을 모두 적어 내려갔고, 약 30개의 핵심 FAQ를 만들었습니다.

  • "지원하는 외부 서비스 목록은?"
  • "A 서비스 설정 시 필수 확인 사항은?"
  • "B 서비스와 C 서비스의 차이점은?"
  • "D 기능은 어떤 조건에서 사용 가능한가요?"
  • ...

2단계: AI와 함께 고품질 답변 작성

기존 매뉴얼 문서가 좋은 참고자료가 되어주었습니다. AI 도구와 협업하여 각 질문(Q)에 대한 가장 완벽하고 상세한 답변(A)을 작성했습니다.

 

3단계: 표준화된 FAQ 문서 구조 설계

각 FAQ를 하나의 독립된 마크다운(.md) 문서로 만들되, 3편에서 계획했던 메타데이터를 헤더에 포함하는 일관된 구조를 적용했습니다.

---
doc_id: faq_service_list
title: 외부 서비스 목록
type: faq
category: 서비스설정
priority: high
keywords: [서비스목록, 전체리스트, 연동서비스]
---

# Q: 시스템에서 연동 가능한 외부 서비스 전체 리스트를 알려줘## 즉시 답변총 30개 이상의 외부 서비스와 연동되어 있습니다.

**주요 카테고리:**
- 결제 서비스: Service-A, Service-B, Service-C, Service-D, Service-E
- 인증 서비스: Auth-X, Auth-Y, Auth-Z
- 배송 서비스: Delivery-1, Delivery-2, Delivery-3

## 상세 내용### 결제 서비스 (12개)지원 기능: 카드결제, 계좌이체, 가상계좌

1. **Service-A**
   - 특징: 실시간 결제 지원
   - 필수 설정: API 키, 시크릿 키

2. **Service-B**
   - 특징: 정기결제 지원
   - 필수 설정: 머천트 ID, 인증 토큰

[... 각 서비스별 상세 정보 계속 ...]

 

4단계: '문서 단위' 청킹 전략

가장 중요한 기술적 결정입니다. 문서를 chunk_size로 잘게 쪼개는 대신, FAQ 문서 하나를 통째로 하나의 청크(Chunk)로 처리했습니다.

# 기존 방식: 긴 문서를 여러 조각으로 분할
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50
)
chunks = text_splitter.split_documents(documents)
# 결과: 1개 문서 → 5~10개 청크로 분할됨 (질문과 답변이 분리될 위험)# 새로운 방식: FAQ 문서 전체를 하나의 단위로 유지
loader = DirectoryLoader("data/faqs", glob="**/*.md")
documents = loader.load()
chunks = documents# 청크 분할 없이 문서 그대로 사용# 결과: 1개 FAQ 문서 = 1개 청크 (질문+답변 완전 보존)

이렇게 하면 다음과 같은 엄청난 이점이 생깁니다:

  • 질문(Q)과 답변(A)이 절대 분리되지 않습니다
  • 하나의 FAQ 문서가 완전한 검색 단위가 됩니다
  • 답변 생성을 위한 컨텍스트가 항상 완전하게 유지됩니다

✨ 결과: 기대 이상의 성능 향상

동일한 벡터 DB, 동일한 검색 알고리즘을 사용했지만, 단지 문서를 FAQ로 재설계한 것만으로 결과는 완전히 달라졌습니다.

질문: "시스템에서 지원하는 외부 서비스는 무엇이 있어?"

새로운 답변 (FAQ 기반):

총 30개 이상의 외부 서비스와 연동되어 있습니다.

주요 서비스:

  • 결제 카테고리 (12개): Service-A, Service-B, Service-C, Service-D, Service-E, Service-F, Service-G, Service-H, Service-I, Service-J, Service-K, Service-L
  • 인증 카테고리 (6개): Auth-X, Auth-Y, Auth-Z, Auth-W, Auth-V, Auth-U
  • 배송 카테고리 (4개): Delivery-1, Delivery-2, Delivery-3, Delivery-4
  • 기타 서비스 (8개): Utility-1, Utility-2, Analytics-1, Analytics-2, Monitoring-1, Monitoring-2, Cache-1, Queue-1

어떤 질문을 하더라도 의도에 맞는 정확하고 완전한 답변을 받을 수 있게 되었습니다.

💭 핵심 교훈 및 실전 팁

🎯 핵심 교훈

RAG 시스템 구축에서 가장 중요한 것은 기술적 튜닝이 아니었습니다.

  • 최신 임베딩 모델 ❌
  • 정교한 청크 전략 ❌
  • 복잡한 검색 알고리즘 ❌
  • 질문-답변(Q&A)에 최적화된 문서 설계 ✅

AI 챗봇이 제공할 정보를 미리 예측하고, 그에 맞춰 'AI가 읽기 좋은' 문서를 설계하면 기술적 한계를 뛰어넘는 품질을 얻을 수 있습니다.

💡 실전 팁: FAQ 문서 작성 가이드

1. FAQ 문서 작성 시 주의사항

  • 즉시 답변 섹션: 핵심만 간단명료하게 2-3문장으로 요약합니다
  • 상세 내용 섹션: 모든 정보를 빠짐없이, 필요시 표나 리스트를 활용해 상세히 기술합니다
  • 메타데이터: category, keywords 등 검색 정확도를 높일 필터를 반드시 포함합니다 (다음 편에 활용 예정)
  • 문서 ID: doc_id 등 추적과 업데이트를 위한 고유 식별자를 지정합니다

2. FAQ 문서 설계 템플릿 (재사용 추천)

실제 적용 가능한 FAQ 마크다운 문서 템플릿입니다:

---
doc_id: faq_{unique_id}
title: {질문 요약}
type: faq
category: {카테고리명}
priority: high|medium|low
keywords: [키워드1, 키워드2, 키워드3]
last_updated: {YYYY-MM-DD}
---

# Q: {사용자가 실제로 하는 질문 (최대한 구어체로)}## 즉시 답변{핵심 내용만 2-3문장으로 요약}

## 상세 내용### {하위 섹션 1}{상세 설명, 표, 코드 블록 등}

### {하위 섹션 2}{상세 설명}

## 관련 FAQ- {관련 FAQ 1의 title}
- {관련 FAQ 2의 title}

🚀 마치며

임베딩 모델이나 청크 크기 같은 기술적인 부분을 조정하는 것보다, '문서를 다시 쓰는 것'이 가장 큰 성능 향상을 가져다주었습니다.

때로는 기술 그 자체보다, 문제에 접근하는 방식의 전환이 더 큰 차이를 만드는 것 같습니다.

이제 우리는 '잘 설계된 FAQ 문서'라는 강력한 자산을 얻었습니다. 다음 5편에서는 3편에서 계획했던 나머지 2가지, 즉 오늘 만든 '메타데이터'를 활용한 필터링과 키워드 검색을 결합하는 '하이브리드 검색'을 구현하여 RAG의 정확도를 극한까지 높여보겠습니다.

반응형