DOCS/journey/troubleshooting/251023_admin_rb8001_웹검색_엔티티_정확도_개선.md
Claude-51124 22557e7132 docs: 오래된 트러블슈팅 아카이브 및 구조 정리
- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동
- book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서)
- 빈 폴더 제거 (journey/assets/*)
2025-11-17 14:06:05 +09:00

8.9 KiB
Raw Permalink Blame History

rb8001: 웹검색 엔티티 확정·정확도 개선 설계/적용

날짜: 2025-10-23
작성자: admin
관련 파일: app/router/message_router.py, app/router/slack_handler.py, app/services/workflows/web_search_workflow.py, app/brain/decision_engine.py


문제 요약 (로그 근거 포함)

  • “이 기업 …” 질의가 오래된 기억/파일명 상수(CODE_OF_CONDUCT 등)에 끌려가 잘못된 엔티티로 검색/요약됨.
  • LangGraph 경로 예외로 폴백(/search)로 자주 떨어져 대명사 해소·CQR·rerank 미실행, LLM 기본응답 반복.
  • 대표/이름 질의가 엔티티 미확정 상태에서 실행되어 잘못된 대상에 대한 답변 반복.

해결 설계/적용

1) 불확실성 기반 하이브리드 라우팅 (LLM 하니스 최신 동향)

원칙: 경량 NER → 불확실성 평가 → 저신뢰만 LLM 승격 → 고신뢰 즉시 실행

구현:

  • 1차 경량 NER: 최근 N턴(10~15분) 대화에서 한글/기업 접미사(주식회사, Inc, Corp, Ltd, Labs) 패턴 추출
  • 불확실성 앙상블 스코어링:
    • a) NER 매칭 스코어 (TF-IDF, 편집거리 기반)
    • b) 시간 감쇠 가중 (최근 턴: 1.0, 5분 이상: 0.5, 파일명/전대문자 상수: 0.0)
    • c) 후보 개수·분산도 (단일 후보 고신뢰 vs 복수 후보 저신뢰)
  • 동적 임계치: 고신뢰(>2.0) 즉시 검색, 중신뢰(1.0~2.0) LLM 승격, 저신뢰(<1.0) clarify 우선
  • 비용/지연 최적화: LLM 승격율 <30% 목표, 지연 중앙값 <500ms 유지

학술 근거: ACL 2024 EMNLP Industry Track - "Intent Detection in the Age of LLMs"는 SetFit 등 경량 분류기와 LLM을 불확실성 기반으로 라우팅하여 LLM 단독 대비 정확도 유지하며 지연/비용을 절반으로 절감한 사례 보고.

2) 맥락 축소 프롬프트 + OOS 가드레일

그래프 파이프 강화:

  • resolve(코리퍼런스) → link(엔티티링크/신뢰도) → CQR(재작성) → search → rerank → summarize → format
  • AsyncSqliteSaver(체크포인터) + thread_id/checkpoint_ns 지정, 실패 시 폴백 로깅

맥락 축소 전략:

  • LLM 프롬프트에 한글 기업명 후보 하위집합만 주입 (파일명/상수 블랙리스트 제외)
  • 최근 10~15분 윈도우로 제한, 오래된 턴은 감쇠 가중(0.5× 이하)
  • 다자 대화 시 발화자 역할·화행 정보 포함하여 라벨 공간 축소

OOS 가드레일 (폴백 경로 동등 정책):

  • /search 경로에서도 대명사 해소 스코어링(한글/기업접미사 가중, 파일·상수 패널티) 적용
  • 저신뢰(<2) 또는 미해결 시 즉시 재질문(clarify) 반환
  • OOS 판단 앙상블: a) NER 불확실성, b) LLM 거절/근거 점수, c) 로짓 기반 에너지 점수
  • OOS 시 우회: Slack clarify 버튼 → FAQ 검색 → 상담원 연결

학술 근거:

  • arXiv 2024 - "Intent Recognition in Multi-party Conversations"는 동적 프롬프트 축소로 라벨 공간을 줄여 성능과 비용 개선 보고
  • arXiv 2024 - "Efficient Out-of-Scope Detection via Uncertainty-Driven LLM Routing"는 불확실성 기반 OOS 라우팅의 효율성 강조

3) Clarify UX 및 의도 발견 루프

Clarify UX:

  • Slack 버튼으로 후보(최대 3) 제시 → 선택 즉시 재검색/응답
  • 버튼 라벨: "[기업명] (최근 언급: [턴수]턴 전, 신뢰도: [스코어])"

의도-회귀(곱씹기) 단계:

  • 실행 전 "요청-대상-행위" 삼단 체크리스트로 의도 재확인
    • 예: [요청] 이 기업 대표? [대상] 지에프솔루션? [행위] 웹검색/대표확인
  • 엔티티 확정(clarify/CQR) 없이는 실행 금지, 질문 모호 시 clarify 우선

의도 발견 루프 (신규 엔티티 패턴 자동 발견):

  • 주기적(매주) OOS·clarify 실패 로그를 LLM으로 군집화·요약
  • 신규 의도 후보(예: 약어 기업명, 신조어) 제안 → 운영자 승인 → 라벨셋 반영
  • 반복 실패 패턴을 블랙리스트에서 화이트리스트로 전환 (점진적 학습)

학술 근거: arXiv 2024 - "IntentGPT: Few-shot Intent Discovery with Large Language Models"는 LLM 기반 의도 군집화·명명의 효율성 보고, 개방세계(open-world) 시나리오 대응에 유리.

4) 라우팅 보강

  • "(기업|회사).*(이름|대표|대표이사)" 등도 웹검색 파이프로 라우팅
  • 함수 호출(tool calling) 패턴: 분류 결과를 구조화된 JSON으로 반환, 백엔드 액션 연결

5) 시간 감쇠·윈도우 제한

  • 메모리/최근 대화 검색은 최신 N개·최근 T분(10~15분) 윈도우로 제한
  • 오래된 기억은 감쇠 가중(0.5× 이하), 파일명/전대문자 상수 토큰은 기본 제외

정확도/표현

  • 확신도 낮은 경우: “재질문/보류(출처 부족)”로 응답.
  • 요약/포맷: ‘출처: 블록에 상위 3개 제목+URL 표준 표기.

대답 정확도(자신감) 평가 로직

  • 신뢰도 특징: (a) 근거 커버리지(출처 수·다양성) (b) 엔티티 일치도(질의 엔티티↔결과 타이틀/본문) (c) 최신성(KST 기준 타임스탬프) (d) NLI(출처→응답 정합).
  • 스코어 산출·캘리브레이션: 위 특징을 01로 정규화해 가중 합산→ECE/Brier로 보정; 임계 미만은 재질문/보류 라벨 부여.
  • 반성적 리라이트: 응답 말미에 “가정/근거/시간/확신도”를 메타로 요약하여 과장 금지, 불확실 영역은 분리 표기.

검증/모니터링

테스트 (로컬)

  • 엔티티 우선순위·clarify·그래프 경로 안정화 검증
  • 불확실성 스코어링 시뮬레이션 (다양한 턴 간격·파일명 혼입 시나리오)

로그

  • [WebSearch] CAND entity: 후보 엔티티 목록 및 스코어
  • Pronoun resolved: 대명사 해소 결과 (원본 → 확정 엔티티)
  • Fallback /search: LangGraph 예외 시 폴백 경로 진입
  • Clarify 버튼 액션 로그: 사용자 선택 엔티티 및 턴 인덱스

핵심 지표 (LLM 하니스 운영 모니터링)

  1. 인스코프 성능:

    • 웹검색 성공률 (정확한 엔티티로 검색 완료)
    • Clarify 비율 (전체 요청 대비 재질문 비율)
    • 폴백 비율 (LangGraph 실패 → /search 경로 진입 비율)
  2. OOS/불확실성 관련:

    • OOS 리콜 (실제 엔티티 미확정 중 OOS로 판단한 비율)
    • LLM 승격율 (경량 NER 저신뢰 → LLM 승격 비율, 목표 <30%)
    • 에이전트 전환율 (clarify 실패 → FAQ/상담원 연결 비율)
  3. 지연/비용:

    • 평균 지연 (응답 시간 중앙값, 목표 <500ms)
    • LLM 토큰 비용 (맥락 축소로 절감 효과 측정)
  4. 정확도/신뢰도:

    • 응답 확신도 (ECE/Brier Score, 캘리브레이션 품질)
    • 엔티티 충돌율 (후보 복수 시 잘못된 선택 비율)
    • 의도 드리프트 (라벨 분포·문체 변화 추적)

A/B 실험

  • 불확실성 임계치 (1.0 vs 1.5 vs 2.0) 비교
  • 맥락 윈도우 (5분 vs 10분 vs 15분) 성능 측정
  • LLM 프롬프트 템플릿 변경 (라벨 공간 축소 전략)

휴먼 인 더 루프

  • Clarify 실패 티켓을 주간 단위 어노테이션
  • 신규 엔티티 패턴 승인 (의도 발견 루프 운영자 검토)

교훈

기본 원칙

  • 엔티티 미확정 상태의 실행 금지, 재질문→확정→실행으로 느린 경로라도 안정성 우선
  • 오래된 기억/파일 토큰은 강한 패널티, 최신/한글 기업명·기업 접미사 가중으로 현실적 후보를 우선

LLM 하니스 최신 동향 적용 (2024-2025)

  1. 하이브리드 라우팅의 효율성:

    • 경량 분류기 + LLM 불확실성 기반 라우팅은 정확도 유지하며 지연/비용을 절반으로 절감
    • LLM 단독 사용보다 실용적, 동적 임계치로 SLA 충족 가능
  2. 맥락 축소와 라벨 공간 관리:

    • 프롬프트에 전체 히스토리 주입은 비효율, 윈도우 제한 + 필터링으로 토큰 비용 절감
    • 라벨 공간 확대 시 OOS 성능 저하 → 하위집합 동적 생성이 핵심
  3. 개방세계(Open-World) 대응:

    • 사전 정의 라벨만으론 한계, 의도 발견 루프로 신규 패턴을 점진적 학습
    • LLM 군집화·명명은 빠른 부트스트랩에 유리, 도메인 특화는 미세조정 병행
  4. 불확실성 앙상블이 OOS 탐지 핵심:

    • 단일 지표(NER 스코어, LLM 신뢰도)보다 앙상블이 강건
    • OOS 리콜 모니터링 필수, 에이전트 전환율로 실효성 측정
  5. 휴먼 인 더 루프의 중요성:

    • 자동화된 의도 발견·드리프트 감지도 운영자 검토 없이는 품질 저하
    • 주기적 어노테이션과 A/B 실험으로 정책 검증 필수

참고 문헌

  • ACL 2024 EMNLP Industry Track: "Intent Detection in the Age of LLMs"
  • arXiv 2024: "Efficient Out-of-Scope Detection via Uncertainty-Driven LLM Routing"
  • arXiv 2024: "Intent Recognition in Multi-party Conversations"
  • arXiv 2024: "IntentGPT: Few-shot Intent Discovery with Large Language Models"