RAG2026-5일28차시 · Conditional Edge 이해8 / 17← 이전목차다음 →MetaContents

28차시. Conditional Edge 이해

5. 질문 유형 라우팅 개념

출처: 원본 PDF 28차시_ConditionalEdge이해.pdf 13~14쪽 · 쪽 그림 13쪽 14쪽

29차시에서 실제로 구현할 내용입니다. 오늘은 설계만 봅니다.

5-1) 유형 분류 노드

출력
START
  ↓
classify_node          ← 질문 유형을 판단해 State에 기록
  ↓
[route_by_intent]
  ├─ greeting ──→ greeting_node ──→ END
  ├─ calc ──────→ calc_node ─────→ END
  ├─ out_of_scope → scope_node ──→ END
  └─ document ──→ retrieve → ... (기존 RAG 흐름)

5-2) 분류 방법 두 가지

방법비용정확도적합한 경우
규칙 기반 (키워드)없음낮음인사말 등 패턴이 명확할 때
LLM 분류있음높음유형이 많고 표현이 다양할 때
출력
■ 규칙 기반 예시
──────────────────────────────────────
GREETINGS = ["안녕", "반가", "하이", "고마워", "감사"]
def classify_node(state):
    q = state["question"].strip()
    # 인사말이 하나라도 포함되어 있고 문장이 짧으면 인사로 판단
    is_greeting = False
    for g in GREETINGS:
        if g in q:
            is_greeting = True
            break
    if is_greeting and len(q) < 20:
        return {"intent": "greeting"}
    if re.fullmatch(r"[\d\s\+\-\*/\(\)\.]+", q):
        return {"intent": "calc"}
    return {"intent": "document"}       # 기본은 문서 질의

💡 2단 분류가 실무적입니다
1차 규칙 — 명확한 것만 빠르게 거름 (비용 0)
2차 LLM — 애매한 것만 분류 (비용 발생)
26차시 2단 검증과 같은 발상입니다.
"코드로 판단할 수 있는 것은 LLM에게 묻지 않는다"

⚠️ 기본 경로는 반드시 document로
분류가 애매하면 RAG로 보내는 것이 안전합니다.
문서 질문을 인사로 잘못 분류하면?
→ "안녕하세요!"라고만 답합니다. 최악입니다
인사를 문서 질문으로 잘못 분류하면?
→ 검색해보고 없으면 안내합니다. 견딜 만합니다
실수했을 때 덜 나쁜 쪽을 기본값으로 두세요.

← 이전 절28차시 · 4. 다중 분기 설계다음 절 →28차시 · 6. 실습 — 조건표 설계 연습