diff --git a/journey/worklog/260323_의도분류_LLM_first_v2_전환.md b/journey/worklog/260323_의도분류_LLM_first_v2_전환.md new file mode 100644 index 0000000..0def523 --- /dev/null +++ b/journey/worklog/260323_의도분류_LLM_first_v2_전환.md @@ -0,0 +1,61 @@ +--- +type: worklog +tags: [worklog, rb8001, intent, llm, pydantic, intent-classifier] +work_date: 2026-03-23 +--- + +# 260323 의도 분류 LLM-first(v2) 전환 + +## 배경 + +- 기존 의도 분류(v1): 키워드 정규식 FastPath → Naive Bayes → LLM 순차 +- 202개 질문 테스트 결과: 키워드 **27%** 정확도 +- 사용자 질문이 키워드에 안 걸리면 UNKNOWN → 일반 LLM 경로로 빠짐 + +## 변경 + +### 새 의도 분류기: `intent_classifier.py` + +- **LLM-first**: 키워드 없이 LLM이 바로 의도 판단 +- **Pydantic 검증**: `IntentResult(intent, confidence, slots, reasoning, needs_clarify)` +- **JSON 강제**: `response_format={"type": "json_object"}` +- **SKILL_REGISTRY**: OpenClaw 스타일 스킬 목록 (트리거 + 예시) +- **키워드 폴백**: LLM 실패 시에만 기존 DecisionEngine 사용 + +### 스킬 레지스트리 (10개 의도) + +| intent | 설명 | +|--------|------| +| self_inspect | 시간, 코드 탐색, 드래프트, 대화 이력 | +| companyx_rag | Company X 내부 문서 | +| web_search | 날씨, 주가, 환율, 실시간 정보 | +| calendar_event | 일정 등록 | +| calendar_query | 일정 조회 | +| email_read | 이메일 읽기 | +| email_send | 이메일 발송 | +| news_fetch | 뉴스 | +| greeting | 인사 | +| general_chat | 일반 대화 | + +### 환경변수 + +- `INTENT_ENGINE=v2` → LLM-first (현재 활성) +- `INTENT_ENGINE=graph` → 기존 IntentGraph (폴백/롤백) + +## 테스트 결과 (202개 질문) + +| 방식 | 정확도 | +|------|--------| +| OLD (키워드) | 27% (56/202) | +| **NEW (LLM)** | **94% (191/202)** | + +## 커밋 + +- `5f18a9a`: intent_classifier.py 신규 +- `ac3e617`: message_service v2 전환 + INTENT_ENGINE=v2 + +## 관련 파일 + +- `rb8001/app/services/brain/intent_classifier.py` +- `rb8001/app/services/message_service.py` +- `rb8001/docker-compose.yml`