본문 바로가기

콩's AI

📄사내 문서 Q&A 챗봇, 파이썬으로 구축 (feat. Gemini) - 2단계 (문제점 피드백)

반응형

📄 사내 문서 Q&A 챗봇, 파이썬으로 구축 (feat. Gemini) - 1단계

 

📄 사내 문서 Q&A 챗봇, 파이썬으로 구축 (feat. Gemini) - 1단계

📄 사내 문서 Q&A 봇, 파이썬으로 10분 컷! (feat. Gemini)회사 생활하다 보면 "규정집 어디 있어요?" 혹은 "이거 절차가 어떻게 되나요?" 같은 질문을 정말 많이 받게 되죠. 매번 파일 찾아서 알려주기

tikongs.tistory.com

실제 1단계를 실행하고 테스트를 했을 때 발생한 현상을 확인하고 개선해봅시다.

RAG 시스템 개발 중 만난 '환각 현상', 원인과 해결책

😵 "분명 문서에 있는데 왜 딴소리를 하죠?"

기업 문서를 기반으로 답변하는 시스템(RAG)을 개발하다 보면 정말 당황스러운 순간이 옵니다. 원본 문서에 정답이 떡하니 있는데도, AI가 엉뚱한 페이지를 보고 오답을 내놓는 경우죠. 흔히 환각 현상(Hallucination)이라고 부릅니다.

결론부터 말씀드리면 이건 '참고 문서를 잘못 가져왔거나(Retrieval 오류)', '가져온 문서의 맥락을 오해(Reasoning 오류)'했기 때문에 발생하는 잘못된 연결(Misattribution) 문제입니다. 제가 겪은 실제 사례를 통해 해결책을 공유해 드릴게요.

🕵️‍♂️ 원인 분석: AI는 왜 18페이지를 정답이라 생각했을까?

로그를 뜯어보니 원인은 명확했습니다. 사용자가 "9층 임차인이 누구야?"라고 물었을 때 AI가 참조한 문서는 정답인 12페이지가 아니라 18페이지였습니다.

  • 정답 (12p): 'GS네트웍스'라고 명시된 임대차 현황 표가 있음.
  • 오답 (18p): 제목이 'Coupang(쿠팡)'이고 쿠팡 설명이 가득함. 근데 옆에 건물 층별 안내도(그림)가 같이 있음.
AI의 착각 과정:
"이 페이지 주제는 쿠팡이네? 근데 그림에 9층이 있네? 아하, 그럼 9층도 쿠팡이 쓰는구나!"

즉, 텍스트(쿠팡)와 이미지(층별 안내도)를 멋대로 연결해서 추론해버린 겁니다. 정작 표로 정리된 12페이지는 검색 결과 순위에서 밀려버렸고요.

🛠️ 해결 방법: 튜닝으로 바로잡기

이 문제를 해결하려면 "표(Table)가 있는 페이지를 더 잘 찾게 하거나", "표를 더 신뢰하라고 가르쳐야" 합니다.

✅ 1단계: 검색 개수(k) 늘리기

가장 쉬운 방법입니다. 정답 페이지(12p)가 검색 순위 10위 밖으로 밀려났을 확률이 높습니다. AI가 참고할 문서 개수를 넉넉하게 늘려주세요.

# app.py 수정 예시
# 기존: k=15
# 변경: 정답 페이지가 딸려 들어오도록 넉넉하게
k_val = 20 

✅ 2단계: 프롬프트 교육 (매우 중요)

AI에게 "그림에 있는 층수랑 페이지 제목을 맘대로 엮지 마!"라고 따끔하게 지시해야 합니다. System Prompt를 아래처럼 구체적으로 수정해 보세요.

template = """
[매우 중요한 원칙]
1. '층별 임차인' 질문은 반드시 **'임대차 현황 표'**나 **'표(Table)'** 데이터를 최우선 근거로 삼으세요.
2. 특정 기업(예: 쿠팡) 설명 페이지에 있는 건물 도면만 보고, 그 건물을 다 쓴다고 단정 짓지 마세요.
3. 정보가 충돌하면 텍스트나 표로 명시된 '계약 정보'를 따르세요.
"""

🚀 장기적 해결책: 하이브리드 검색

이건 사실 단순 벡터 검색(Vector Search)의 한계입니다. 벡터 DB는 '9층'과 '임차인'이라는 단어의 맥락만 보기 때문에, 엉뚱한 설명이 있는 페이지를 더 관련성 높다고 판단하기 쉽습니다.

  • 키워드 검색(BM25): "9층", "GS네트웍스" 단어가 정확히 박힌 문서를 강제로 찾아냄.
  • 벡터 검색: 문맥과 의미를 파악함.

나중에 시스템을 고도화하신다면 이 두 가지를 섞어서 사용하는 하이브리드 검색(Hybrid Search) 도입을 꼭 고려해 보세요. 환각 현상을 획기적으로 줄일 수 있습니다.

 

반응형

⚠️ 광고 차단 프로그램 감지

애드블록, 유니콘 등 광고 차단 확장 프로그램을 해제하거나
화이트리스트에 추가해주세요.