Multi-hop RAG: Temporal RAG 이후에도 계속 틀리는 이유
SOTAAZ·

Multi-hop RAG: Temporal RAG 이후에도 계속 틀리는 이유
Temporal RAG를 붙였는데도 'who is my boss's boss?' 라는 질문에는 여전히 틀린 답을 내놓습니다. RAG는 시간을 알게 되었지만, 여전히 '다음으로 무엇을 찾아야 할지'는 모릅니다.
문제 재정의: Single-hop vs Multi-hop
기존의 설명은 이렇습니다:
"Single-hop은 쉽고 Multi-hop은 어렵다"
하지만 이건 현상일 뿐, 본질이 아닙니다. 더 정확한 정의는 이렇습니다:
Single-hop은 '하나의 문서를 선택하는 문제'입니다.
Multi-hop은 '검색 순서를 결정하는 문제'입니다.
Single-hop: Query → Retrieve → Answer
Multi-hop: Query → Retrieve₁ → Reasoning → Retrieve₂ → ... → AnswerTemporal RAG는 '언제의 범위'를 줄여주지만, '다음에 무엇을 검색할지'는 여전히 알지 못합니다.
Multi-hop 질문의 예시
"OpenAI CEO가 해고됐을 때 Microsoft CEO는 뭐라고 했어?"이 질문을 답하려면:
- OpenAI CEO 해고 시점 파악 (2023-11-17)
- 그 시점의 Microsoft CEO 발언 검색
- 두 정보를 연결해서 답변
"Sam Altman이 복귀하기 전에 누가 CEO였어?"이 질문을 답하려면:
- Sam Altman 복귀 시점 파악 (2023-11-22)
- 그 직전 CEO 검색 (역방향 추론)
- Emmett Shear → Mira Murati 순서 파악
실패 패턴 해부
패턴 A: Partial Retrieval (부분 검색)
query = "OpenAI CEO가 해고됐을 때 Microsoft CEO는 뭐라고 했어?"
# Temporal RAG가 하는 일
temporal_filter = "2023-11-17 ± 1 day"
retrieved = search(query, time_filter=temporal_filter)
# 결과: CEO 해고 기사만 가져옴
# "Microsoft CEO 발언"이 들어간 문서는 검색 대상 아님문제: Temporal 필터링이 오히려 검색 공간을 좁혀서 다음 hop을 죽입니다.
패턴 B: Context Mixing (컨텍스트 혼합)
query = "Tesla가 가격 인하했을 때 주가는 어땠어?"
# 검색 결과
doc1: "Tesla가 Model 3 가격을 15% 인하했다" # 2023-01
doc2: "Tesla 주가가 12% 하락했다" # 2023-04
doc3: "Tesla 주가가 사상 최고치 경신" # 2023-07
# LLM은 원인-결과가 아니라 동시 등장으로 추론문제: 인과관계가 아닌 키워드 유사성으로 연결합니다.
패턴 C: Chain Collapse (체인 붕괴)
query = "Sam Altman이 복귀하기 전에 누가 CEO였어?"
# LLM의 추론
# 현재 CEO: Sam Altman ✓
# 과거 추론: ??? (역방향으로 못 감)
# 왜?
# - "복귀 전"이라는 시간 관계를 검색 쿼리로 변환 못함
# - Emmett Shear → Mira Murati 순서를 모름문제: 시간 순서의 역방향 추론이 안 됩니다.
핵심 인사이트
RAG의 실패는 답변 생성이 아니라 '검색 경로를 계획하지 못하는 데서 시작됩니다'
❌ 잘못된 진단: "LLM이 추론을 못 해서"
✓ 정확한 진단: "필요한 문서를 애초에 검색하지 못해서"솔루션: 나열이 아닌 역할 분리
1. Query Decomposition (질문 분해)
역할: 질문을 검색 가능한 단위로 쪼갭니다.
original = "OpenAI CEO가 해고됐을 때 Microsoft CEO는 뭐라고 했어?"
decomposed = [
"OpenAI CEO는 언제 해고됐나?",
"2023년 11월 17일 Microsoft CEO는 뭐라고 했나?"
]한계: 분해는 되지만 순서는 여전히 LLM 감(感)에 의존합니다
2. Iterative Retrieval (반복 검색)
역할: 이전 답을 다음 검색에 사용합니다.
# Step 1
q1 = "OpenAI CEO는 언제 해고됐나?"
a1 = "2023-11-17에 Sam Altman이 해고됨"
# Step 2 (a1을 활용)
q2 = f"2023-11-17에 Microsoft CEO는 뭐라고 했나?"
a2 = "Satya Nadella가 Sam Altman 지지 발언"
# Final
answer = combine(a1, a2)한계: 잘못된 hop 하나면 오류가 누적됩니다
3. Graph-based Reasoning (그래프 기반 추론)
역할: 탐색 가능한 경로를 명시합니다.
[Sam Altman] --fired_from--> [OpenAI] --at_time--> [2023-11-17]
|
v
[Satya Nadella] --commented_on--> [Sam Altman firing]장점: 순서/관계 안정성 확보
단점: 그래프 구축 비용, 스키마 설계 필요
4. Chain-of-Thought + RAG
역할: 추론 가시성을 확보합니다.
thought_chain = """
1. 먼저 OpenAI CEO 해고 시점을 찾아야 함
2. 그 시점의 Microsoft CEO 발언을 검색해야 함
3. 두 정보를 연결해서 답변
"""한계: Retrieval은 여전히 블랙박스입니다.
솔루션 비교
결론
Multi-hop 문제는 '더 똑똑한 LLM'이 아니라 '검색 경로를 구조화하느냐'의 문제입니다.
Temporal RAG는 필수 조건이 되었지만, Multi-hop을 풀기엔 충분 조건이 아닙니다.
다음 병목은 'Retrieval Planning'입니다.
Temporal RAG: "언제" 문제 해결 ✓
Multi-hop RAG: "무엇을 다음에 검색할지" 문제 → 미해결
다음 단계: Retrieval Planning
- 검색 순서를 명시적으로 계획
- 각 hop의 결과를 다음 hop에 전달
- 실패 시 백트래킹다음 글 예고
"Retrieval Planning: RAG가 검색 순서를 계획하게 만드는 방법"
- ReAct 패턴
- Self-Ask
- Plan-and-Solve