4.8 KiB
4.8 KiB
의도 런타임(하이브리드) 설계: 임베딩 + 베이지안 + 동적학습 + LLM 재분석 + A/B/밴딧
작성일: 2025-10-23
작성자: happybell80
대상 서비스: rb8001 (51124)
1) 개요
- 목표: 룰/키워드 중심 의도 파악의 한계를 넘어, 의미 기반·불확실성 관리·지속 학습을 갖춘 “의도 런타임”으로 전환.
- 접근: FastPath(규칙/NB) + 임베딩 Top‑K 후보축소 + LLM JSON 재분석 + Beta(α,β) 기반 동적 임계치/경로 최적화.
- 기대: Unknown↓, 잘못된 실행<1%, LLM 호출≤30% 유지, 지연 관리(중앙값 < 800ms).
2) 아키텍처(Phase 1)
- FastPath: 기존
DecisionEngine(정규식 + Naive Bayes). conf≥0.9 시 즉시 결정. - 임베딩 후보축소: intent 설명/예시 벡터와 코사인 유사도 Top‑K + 마진 기반 신뢰도.
- LLM 재분석: Top‑K만 JSON 스키마(
{intent, slots, confidence, clarify})로 결정, conf<τ는 clarify. - 캘리브레이션: 유사도·마진 기반 conf를 온도/Isotonic 등으로 보정(과신 방지).
구현 파일(스캐폴드)
rb8001/app/brain/intent_graph.py— FastPath→Semantic→LLM 파이프(ENV:INTENT_ENGINE=graph)rb8001/app/brain/semantic_classifier.py— intent_registry 기반 제로샷 후보축소rb8001/app/llm/intent_parser.py— LLM 함수호출(JSON) 파서rb8001/app/brain/intent_registry.yaml— intent 설명/슬롯 레지스트리
3) 임베딩 설계
- 모델: 한국어 강건 다국어 SBERT/miniLM 계열(테스트 후 선정). 서비스는 HTTP 임베딩 사이드카 사용.
- 프로토타입: intent별 centroid(설명+예시 임베딩 평균). DB 버전관리 → 성공 샘플 EMA 반영(온라인), outlier 감쇠.
- 신뢰도: cos(top1)·마진(top1–top2) 합성 → 캘리브레이션으로 정규화.
4) 베이지안·동적 학습
- 의도/경로별 성공률 Beta(α,β) 추적: 성공 α+=1, 실패 β+=1 → θ~Beta(α,β).
- 경로 선택: Thompson Sampling으로 FastPath/LLM/clarify 임계치 τ 동적 최적화.
- 로그 스키마(요지): intent_decision_log(user_id, message, candidates, chosen, confs, path, success, clarify, latency, ts), prototype_version(intent, centroid_hash, updated_at).
5) LLM 재분석 가드레일
- 입력: Top‑K 후보명/설명 + 최근 컨텍스트 최소화 주입.
- 출력: JSON 한 줄. OOS/불확실은 clarify true, 슬롯 미충족 시 되묻기 우선.
6) 실험·배포 전략
- A/B → 밴딧: 10%→30%→50% 점진 롤아웃, 지표(Unknown/Clarify/오실행/지연/비용) 모니터링.
- 임계치/경로/모델 후보는 밴딧 “팔(Arm)”로 관리, Thompson Sampling으로 자동 최적.
7) 운영 지표
- 정확도/Unknown/Clarify/오실행(<1%)
- 비용/지연: LLM 호출율≤30%, 중앙 지연<800ms.
- 사용자 피드백/수정률, 슬롯 부족 비율.
8) rb8001 적용 계획
- Phase 1 (이번 배포): IntentGraph 플래그 경로 + Clarify UX(버튼 실패 시 숫자 선택 폴백) + 엔티티/패턴 보강.
- Phase 2: Beta(α,β)·임계치/경로 동적화 + 프로토타입 DB버전 관리 + 캘리브레이션 모듈.
- Phase 3: SetFit/경량 분류기 오프라인 재학습 + 개인화 사전(동의어/별칭) 자동 갱신.
활성화/헬스체크
- 활성화:
INTENT_ENGINE=graph - 헬스:
curl -sf http://localhost:8001/health - 로그:
docker logs rb8001 --tail 200 | grep -iE "IntentGraph|web_search|CLARIFY_ENTITY|error|fail"
9) 리스크·완화
- LLM 비용/지연: FastPath/임베딩 우선, conf 게이트/Top‑K 축소로 절감.
- 과신/오실행: 캘리브레이션+clarify 정책, Beta 기반 안전 임계치.
- 데이터 드리프트: 주간 리트레이닝/프로토타입 갱신, 밴딧으로 자동 적응.
10) 검증·모니터링
- 테스트:
rb8001/tests/test_intent_entity_skill_comprehensive.py— 40/40 통과(의도/엔티티/스킬). - 리포트:
rb8001/tests/test_results_251023_final.md— 100% 결과 기록. - 모니터: Unknown률/Clarify 비율/오실행/LLM 호출율/평균 지연, 슬랙 이슈는 즉시 로그 근거로 대응.
11) 참고(관련 구현 포인터)
rb8001/app/router/router.py— IntentGraph 게이트(ENV), 웹검색 경로rb8001/app/router/message_router.py— 대명사 해소/엔티티 스코어링rb8001/app/services/workflows/web_search_workflow.py— LangGraph 검색 워크플로
12) 3줄 요약
- 하이브리드 의도 파이프라인: FastPath → 임베딩 Top‑K → LLM JSON 재분석(+clarify) + 신뢰도 캘리브레이션.
- 동적 학습/최적화: 로그 기반 프로토타입·동의어 갱신, Beta(α,β)+Thompson Sampling·A/B/밴딧으로 임계치·경로 자동 튜닝.
- rb8001 IntentGraph 스캐폴드 위 단계적 적용 가능, Unknown↓·오실행<1%·LLM 호출≤30% 목표.