docs: 의도 Phase 3 완료 정리 (251023) - troubleshooting 추가, 계획 남은 작업 갱신

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Claude-51124 2026-02-03 11:09:07 +09:00
parent 81d0745e6f
commit 4583a14746
3 changed files with 34 additions and 38 deletions

View File

@ -20,46 +20,24 @@
## Phase 3: 베이지안 동적 학습 (부분 완료)
→ 완료: `intent_path_stats` (Beta α,β 추적), `decision_logs` (의도 결정 로깅), ActionPlanner 경로별 성공률 조회
→ 완료: `intent_path_stats`, `decision_logs`, ActionPlanner 경로별 성공률 조회
→ 2번 DB 접근·1번 Thompson·4번 Thompson 테스트: `troubleshooting/260203_intent_phase3_db_thompson_tests.md`
### 작업 순서 (권장)
1. **2번(DB 접근)** 선행 → ActionPlanner가 `intent_store` 경유하도록 정리 후, 1번(Thompson)에서 동일 저장소 사용.
2. **1번(Thompson)****4번(테스트)** 순. τ 동적 적용 후 eval로 검증.
3. **3번(LLM 문서화)·5번(프롬프트)·6번(LangGraph)** 서로 독립, 병렬 진행 가능.
- **3번(LLM 문서화)·5번(프롬프트)·6번(LangGraph)** 서로 독립, 병렬 진행 가능.
### 관련 코드 위치 (rb8001)
| 역할 | 경로 |
|------|------|
| 분기·임계치 사용 | `app/services/brain/intent_graph.py` (fastpath 0.9, low_conf 0.7, result 0.5) |
| 경로별 α 조회 | `app/services/brain/intent_store.py` (`load_path_stats_params`, `load_path_stats_means`) |
| ActionPlanner DB 직접 연결 | `app/services/brain/intent/action_planner.py` (psycopg2, path=`action_planner` 쿼리) |
| 분기·임계치·Thompson τ | `app/services/brain/intent_graph.py` (`INTENT_USE_DYNAMIC_TAU``get_thompson_thresholds`) |
| 경로별 α·Thompson τ 계산 | `app/services/brain/intent_store.py` (`load_path_stats_params`, `get_thompson_thresholds`) |
| ActionPlanner | `app/services/brain/intent/action_planner.py` (intent_store만 사용, psycopg2 없음) |
| Beta 갱신·decision 로깅 | `app/state/intent_runtime_repository.py` |
### 남은 작업
#### 1. Thompson Sampling τ 동적 최적화
| 항목 | 내용 |
|------|------|
| **대상** | FastPath/Semantic/LLM 분기 임계치 τ (현재 0.9, 0.7, 0.5 하드코딩) |
| **입력** | `intent_store.load_path_stats_params(intent_name)` → path별 (α, β) |
| **출력** | 경로별 τ 또는 경로 선택 확률 (intent_graph에서 사용) |
| **알고리즘** | (1) intent별 path별 Beta(α,β)에서 θ 샘플 (2) argmax θ로 경로 선택 또는 τ = percentile로 계산 (3) `intent_graph.py`에서 해당 τ 적용 |
| **위치** | `intent_store``get_thompson_tau(intent_name)` 추가 또는 `intent_graph` 내부 함수 |
| **롤백** | 환경변수 `INTENT_USE_DYNAMIC_TAU=0`이면 기존 하드코딩 τ 사용 |
| **검증** | `scripts/` 또는 `tests/` eval로 τ 변경 시 정확도/지연 비교 |
| **완료 조건** | intent_graph가 DB 기반 τ(또는 경로 확률)를 사용하고, eval 스크립트로 비교 결과 문서화 |
#### 2. DB 접근 원칙 준수 (311)
| 항목 | 내용 |
|------|------|
| **현재** | ActionPlanner가 psycopg2 직접 연결, `path='action_planner'` 쿼리 (intent_path_stats path는 fastpath/semantic/llm/clarify) |
| **필수** | ActionPlanner에서 `intent_store.load_path_stats_params(intent_name)` 또는 `intent_store.load_path_stats_means(intent_name)` 호출로 전환, psycopg2 제거 |
| **완료 조건** | `action_planner.py`에 psycopg2 및 직접 SQL 없음, intent_store만 사용 |
#### 3. LLM 호출 최적화 (311 섹션 14)
| 항목 | 내용 |
@ -68,14 +46,6 @@
| **확인** | API 할당량(RPM/RPD) 대비 호출량 검토 |
| **완료 조건** | 경로별 호출 수·할당량 대비 비율이 troubleshooting 또는 plans 하위 문서에 기록됨 |
#### 4. 테스트 보강 (315)
| 항목 | 내용 |
|------|------|
| **시나리오 3·4** | 복합 의도·맥락 기반 의도 처리 개선 후 `test_intent_3step_scenarios` 보강 |
| **Thompson** | τ 동적 적용 검증을 일회성 스크립트가 아닌 **pytest 기반 벤치마크 테스트**로 구현 (315 원칙 준수: 스크립트는 삭제 대상이므로 지속 관리 불가) |
| **완료 조건** | 시나리오 3·4 테스트 케이스 추가 및 `tests/` 내에 Thompson τ 변경 효과를 검증하는 자동화된 테스트 존재 |
#### 5. 의도 분류 프롬프트 (313)
| 항목 | 내용 |
@ -100,6 +70,7 @@
- `troubleshooting/251126_happybell80_rb8001_의도_3단계_아키텍처_도입_및_배포.md`
- `troubleshooting/251126_intent_3step_db_bayesian_integration.md`
- `troubleshooting/260203_intent_phase3_db_thompson_tests.md` (Phase 3 DB 접근·Thompson·테스트)
- `plans/archive/251017_intent_analysis_improvement_plan.md` (251023으로 통합됨)
- `book/300_architecture/311_백엔드_구조_원칙.md`
- `book/300_architecture/313_Gemini_프롬프트_설계_원칙.md`

View File

@ -81,8 +81,8 @@
- **참고**: `plans/251016_ontology_coldmail_implementation.md`
### 4. 의도 런타임 하이브리드 (251023)
- **완료**: Phase 1 3단계 아키텍처, Phase 2 하이브리드 파이프라인
- **남은 작업**: Phase 3 Thompson τ 동적 최적화, DB 접근 원칙, 테스트 보강
- **완료**: Phase 1·2, Phase 3 DB 접근(311)·Thompson τ·Thompson pytest
- **남은 작업**: Phase 3 LLM 호출 문서화, 의도 프롬프트(313), LangGraph 검토
- **참고**: `plans/251023_happybell80_의도_런타임_하이브리드_임베딩_베이지안_동적학습.md`
---

View File

@ -0,0 +1,25 @@
# 의도 Phase 3: DB 접근 311 준수 + Thompson τ + Thompson pytest
**날짜**: 2026-02-03
**작성자**: happybell80
**관련 파일**: `rb8001/app/services/brain/intent/action_planner.py`, `intent_store.py`, `intent_graph.py`, `tests/test_intent_thompson.py`
---
## 변경 요약
- **ActionPlanner**: psycopg2 및 직접 SQL 제거. 경로 통계 필요 시 `intent_store.load_path_stats_params(intent_name)` 사용 (311 계층 준수).
- **intent_store**: `get_thompson_thresholds(intent_name)` 추가. path별 (α,β) 없으면 기본 τ(0.9, 0.7, 0.5) 반환; 있으면 Beta(α,β) 샘플로 τ 계산.
- **intent_graph**: `INTENT_USE_DYNAMIC_TAU=1`일 때 fastpath/semantic 분기에서 `get_thompson_thresholds` 사용. `=0`이면 기존 하드코딩 τ.
- **테스트**: `tests/test_intent_thompson.py` 추가. get_thompson_thresholds 기본값·params·IntentGraph 동적 τ 호출 여부 검증 (315 pytest).
## 검증
- `pytest tests/test_intent_3step_architecture.py tests/test_intent_3step_scenarios.py tests/test_intent_thompson.py` 15 passed.
- rb8001 푸시 후 Gitea Actions 배포 완료, `docker ps` healthy, `curl localhost:8001/health` 200.
## 교훈
- 311: services는 state를 통해서만 DB 접근. ActionPlanner의 직접 psycopg2 제거로 계층 준수.
- Thompson τ는 데이터 없을 때 기본값 반환으로 롤백 부담 감소. 동적 τ는 `INTENT_USE_DYNAMIC_TAU=0`으로 비활성화 가능.
- 315: τ 검증은 일회성 스크립트 대신 pytest로 유지해 지속 검증 가능.