# 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(출처→응답 정합). - 스코어 산출·캘리브레이션: 위 특징을 0–1로 정규화해 가중 합산→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" ---