docs: 계획 문서 간결화 - 문서 작성 원칙 준수 (100줄 이하, 핵심만)

This commit is contained in:
Claude-51124 2025-12-23 18:32:53 +09:00
parent 8b5959d1fa
commit cd0973eae9

View File

@ -2,262 +2,68 @@
**작성일**: 2025-12-23
**목표**: 실패하는 질문 18개를 LLM 우선 접근 원칙으로 해결
**원칙**: `DOCS/book/300_architecture/311_FastAPI_구조_원칙.md` 섹션 13 참고
**원칙**: `311_FastAPI_구조_원칙.md` 섹션 13 참고
**테스트 결과**: `rb8001/tests/test_failed_questions_results.md`
---
## 문제 요약
## 문제
**실패한 질문 18개** (총 23개 중 78%):
1. 짧은 후속 질문: "어디서?", "언제?", "누구랑?", "뭐야?"
2. 맥락 의존 질문: "그거 어떻게 됐어?", "결과는?", "그럼 어떻게 할까?"
3. 모호한 질문: "어떻게 생각해?", "괜찮아?"
4. 부정/거부 표현: "안 해도 돼", "취소해줘", "보내지 마"
5. 비교/선택 질문: "어느 게 나아?", "A와 B 중에 뭐가 좋아?"
6. 시간 관련 모호한 질문: "언제 했어?"
7. 상태 확인: "지금 뭐 하고 있어?", "작업 끝났어?"
8. 정보 요청: "너는 뭘 할 수 있어?"
- 짧은 후속: "어디서?", "언제?", "누구랑?", "뭐야?"
- 맥락 의존: "그거 어떻게 됐어?", "결과는?", "그럼 어떻게 할까?"
- 모호한: "어떻게 생각해?", "괜찮아?"
- 부정/거부: "안 해도 돼", "취소해줘", "보내지 마"
- 비교/선택: "어느 게 나아?", "A와 B 중에 뭐가 좋아?"
- 시간 모호: "언제 했어?"
- 상태 확인: "지금 뭐 하고 있어?", "작업 끝났어?"
- 정보 요청: "너는 뭘 할 수 있어?"
**현재 문제**:
- CONTEXT_FOLLOWUP Intent는 구현되어 있으나 패턴 매칭이 제대로 작동하지 않음
- 규칙 기반 접근으로 복잡한 규칙 체인 구축 시도
- LLM 호출을 피하려는 접근으로 정확도 저하
---
## 핵심 원칙
**LLM 우선 접근**:
- LLM을 기본으로 사용, 규칙은 성능 최적화용으로만 제한
- 애매한 케이스는 LLM이 맥락을 해석하여 처리
- 새로운 패턴마다 규칙 추가하지 말고 LLM 활용
**금지 사항**:
- ❌ LLM 호출을 피하기 위해 규칙/패턴 매칭으로 처리
- ❌ 복잡한 규칙 체인 구축
- ❌ 새로운 패턴마다 규칙 추가
**현재 문제**: CONTEXT_FOLLOWUP Intent 구현되어 있으나 패턴 매칭 미작동, 규칙 기반 접근으로 정확도 저하
---
## 해결 방안 (LLM 우선)
### 1. LLM 기반 질문 확장 (Question Expansion)
### 1. LLM 질문 확장
- 짧은 질문(len <= 10 또는 확신도 < 0.7) LLM이 맥락 포함 완전한 질문으로 확장
- 구현: `llm_service.py:expand_question()`, `message_service.py:206-228` 수정
- Few-shot 예시로 정확도 향상
**구현 방법**:
```
1. 짧은 질문 감지 (len <= 10 또는 확신도 < 0.7)
2. LLM에 질문 확장 요청 (Few-shot 예시 포함)
3. 확장된 질문으로 의도 분류 재시도
```
### 2. LLM 의도 분류 강화
- 확신도 < 0.7 LLM이 맥락 포함하여 재분류
- 구현: `intent_graph.py`, `intent_parser.py` 맥락 포함 분류 추가
**프롬프트 템플릿**:
```
다음은 짧은 후속 질문입니다. 직전 대화 맥락을 참고하여 완전한 질문으로 확장하세요.
### 3. LangGraph 워크플로우
- 질문 확장 → 의도 분류 → 엔티티 추출 → 스킬 선택
- 구현: `intent_graph_langgraph.py` (신규)
예시:
- 직전: "11월 18일 오전 6시 40분에 검진이 있습니다"
- 짧은 질문: "어디서?"
- 확장: "검진은 어디서 하시나요?"
- 직전: "이메일 보냈어"
- 짧은 질문: "결과는?"
- 확장: "이메일 발송 결과는 어떻게 되었나요?"
- 직전: "일정 등록할까요?"
- 짧은 질문: "취소해줘"
- 확장: "일정 등록을 취소해주세요"
직전 대화:
사용자: {previous_message}
로빙: {previous_response}
현재 세션 슬롯:
{slot_info}
현재 짧은 질문: {message}
확장된 질문만 출력하세요:
```
**적용 대상**:
- 짧은 후속 질문 ("어디서?", "언제?", "누구랑?", "뭐야?")
- 맥락 의존 질문 ("그거 어떻게 됐어?", "결과는?", "그럼 어떻게 할까?")
- 부정/거부 표현 ("안 해도 돼", "취소해줘", "보내지 마")
- 모호한 질문 ("어떻게 생각해?", "괜찮아?")
**구현 위치**:
- `rb8001/app/services/message_service.py`: CONTEXT_FOLLOWUP 처리 시 질문 확장
- `rb8001/app/services/llm/llm_service.py`: 질문 확장 전용 메서드 추가
---
### 2. LLM 기반 의도 분류 (맥락 포함)
**구현 방법**:
```
1. FastPath (정규식) → 매우 명확한 케이스만 (인사, 명령어)
2. SemanticIntentClassifier (임베딩) → 확신도 < 0.7이면 LLM으로
3. LLM 의도 분류 → 맥락 포함 질문으로 의도 분류
```
**프롬프트 템플릿**:
```
다음 사용자 질문의 의도를 분류하세요. 직전 대화 맥락을 참고하여 정확하게 분류하세요.
직전 대화:
사용자: {previous_message}
로빙: {previous_response}
현재 질문: {expanded_message}
가능한 의도:
- email_send: 이메일 작성/발송 요청
- email_read: 이메일 읽기 요청
- calendar_event: 일정 등록 요청
- calendar_query: 일정 조회 요청
- calendar_delete: 일정 삭제 요청
- web_search: 웹 검색 요청
- context_followup: 직전 대화에 대한 후속 질문
- cancel_request: 취소/거부 요청
- comparison_query: 비교/선택 질문
- status_check: 상태 확인 질문
- capability_query: 기능 조회 질문
- general_chat: 일반 대화
- unknown: 알 수 없음
JSON 형식으로 출력:
{"intent": "의도명", "confidence": 0.0-1.0, "reasoning": "분류 이유"}
```
**적용 대상**:
- 확신도 < 0.7인 모든 질문
- 맥락이 필요한 모든 질문
**구현 위치**:
- `rb8001/app/services/brain/intent_graph.py`: LLM 의도 분류 추가
- `rb8001/app/services/llm/intent_parser.py`: 맥락 포함 의도 분류 강화
---
### 3. LangGraph 기반 다단계 워크플로우
**구현 방법**:
```
1. 의도 분류 → LLM으로 맥락 포함 분류
2. 질문 확장 → LLM으로 완전한 질문 생성
3. 엔티티 추출 → LLM으로 맥락 기반 엔티티 추출
4. 스킬 선택 → LLM으로 적절한 스킬 결정
```
**LangGraph 노드 구성**:
- `classify_intent`: LLM 기반 의도 분류
- `expand_question`: 짧은 질문 확장
- `extract_entities`: 맥락 기반 엔티티 추출
- `select_skill`: 적절한 스킬 선택
- `execute_skill`: 스킬 실행
**조건부 분기**:
- 짧은 질문(len <= 10) → expand_question 노드
- 확신도 < 0.7 LLM 재분류
- 맥락 필요 → 직전 대화 포함
**구현 위치**:
- `rb8001/app/services/brain/intent_graph_langgraph.py` (신규)
- 기존 `intent_graph.py`를 LangGraph로 전환
---
### 4. 세션 기반 맥락 관리 (LLM 활용)
**구현 방법**:
```
1. 세션 슬롯에 active_action 저장 (LLM이 추출)
2. 부정 표현 감지 시 LLM이 active_action 참고하여 해석
3. 세션 상태를 LLM에 전달하여 맥락 유지
```
**LLM 프롬프트**:
```
현재 세션 상태:
- 활성 작업: {active_action}
- 슬롯 정보: {slot_info}
- 직전 대화: {previous_message}
사용자 질문: {message}
위 맥락을 참고하여 질문을 해석하고 적절한 의도로 분류하세요.
```
**구현 위치**:
- `rb8001/app/services/brain/session_manager.py`: 세션 상태를 LLM에 전달
- `rb8001/app/services/message_service.py`: 세션 맥락 포함하여 LLM 호출
### 4. 세션 맥락 통합
- 세션 상태를 LLM에 전달하여 맥락 유지
- 구현: `session_manager.py`, `message_service.py` 세션 맥락 포함
---
## 구현 단계
### Phase 1: LLM 질문 확장 (1주)
1. ✅ `llm_service.py``expand_question()` 메서드 추가
2. ✅ `message_service.py`에서 CONTEXT_FOLLOWUP 시 질문 확장
3. ✅ Few-shot 예시로 정확도 향상
4. ✅ 테스트: 실패한 짧은 질문 4개 해결 확인
### Phase 2: LLM 의도 분류 강화 (1주)
5. ✅ `intent_parser.py`에 맥락 포함 의도 분류 추가
6. ✅ 확신도 < 0.7인 경우 LLM 재분류
7. ✅ 맥락 의존 질문 LLM 처리
8. ✅ 테스트: 실패한 맥락 의존 질문 3개 해결 확인
### Phase 3: LangGraph 워크플로우 (2주)
9. ✅ LangGraph 기반 의도 분류 워크플로우 구현
10. ✅ 질문 확장 → 의도 분류 → 엔티티 추출 → 스킬 선택
11. ✅ 조건부 분기 및 상태 관리
12. ✅ 테스트: 전체 워크플로우 검증
### Phase 4: 세션 맥락 통합 (1주)
13. ✅ 세션 상태를 LLM에 전달
14. ✅ 부정 표현 LLM 해석
15. ✅ 비교/선택 질문 LLM 처리
16. ✅ 테스트: 실패한 질문 18개 중 15개 이상 해결 확인
| Phase | 작업 | 기간 |
|-------|------|------|
| 1 | LLM 질문 확장 구현 | 1주 |
| 2 | LLM 의도 분류 강화 | 1주 |
| 3 | LangGraph 워크플로우 | 2주 |
| 4 | 세션 맥락 통합 | 1주 |
---
## 예상 효과
## 목표
**정량적 목표**:
- 실패한 질문 18개 → 3개 이하로 감소 (78% → 13%)
- 실패한 질문 18개 → 3개 이하 (78% → 13%)
- 짧은 후속 질문 정확도: 30% → 90% 이상
- 맥락 의존 질문 정확도: 30% → 85% 이상
**정성적 개선**:
- 사용자 경험: 자연스러운 대화 흐름 유지
- 시스템 신뢰도: LLM의 맥락 이해 능력 활용
- 유지보수: 규칙 관리 부담 감소, LLM이 자동으로 패턴 학습
---
## 비용 최적화
**LLM 호출 최소화**:
- 매우 명확한 케이스(인사, 명령어)는 FastPath로 처리
- 확장된 질문 캐싱 (동일 패턴 재사용)
- 배치 처리 가능한 경우 통합
**예상 비용 증가**:
- 짧은 질문당 1회 추가 LLM 호출 (질문 확장)
- 확신도 < 0.7인 경우 1회 추가 LLM 호출 (의도 재분류)
- 전체적으로 20-30% LLM 호출 증가 예상
---
## 참고 문서
- `DOCS/book/300_architecture/311_FastAPI_구조_원칙.md` (섹션 13: LLM 우선 접근 원칙)
- `DOCS/journey/research/context_followup_question_solutions.md` (연구 문서)
- `rb8001/tests/test_failed_questions_results.md` (테스트 결과)
---
**작성일**: 2025-12-23
**상태**: 계획 완료, 구현 대기
## 참고
- `311_FastAPI_구조_원칙.md` (섹션 13: LLM 우선 접근 원칙)
- `context_followup_question_solutions.md` (연구 문서)