docs: detail coldmail ontology phase2-3 plan

This commit is contained in:
Claude-51124 2026-02-05 17:40:51 +09:00
parent 9f64b0d275
commit f8ade085ad

View File

@ -48,6 +48,52 @@
---
## Phase 2-3 상세 작업 (결정 완료)
### 1) 데이터 구조 (Neo4j)
- **노드**: `Email`, `Rule`, `Company`, `Topic`, `User`
- **관계**: `(:Email)-[:MATCHED_RULE]->(:Rule)`, `(:Email)-[:MENTIONS]->(:Company|Topic)`, `(:User)-[:RECEIVED]->(:Email)`
- **필수 속성**:
- `Email`: `email_id`, `subject`, `sender`, `received_at`, `confidence`, `source`(hybrid/ontology)
- `Rule`: `rule_id`, `rule_type`, `confidence`
- `Company`: `name`, `domain`
- `Topic`: `keyword`
- `User`: `user_id`
### 2) 서비스/레포지토리 구조 (계층 분리)
- **state/repositories**: `rb8001/app/state/repositories/coldmail_memory_repository.py` (Neo4j CRUD)
- **services**: `rb8001/app/services/coldmail_memory_service.py` (기억 저장/조회/요약 로직)
- **services**: `rb8001/app/services/coldmail_ontology_reasoner.py`와 연결 (규칙/기억 반영)
- **workflows**: `rb8001/app/services/workflows/coldmail_workflow.py`에서 기억 저장 호출
### 3) 인터페이스 (입출력 고정)
- `save_email_memory(user_id, email_payload, matched_rules, topics, companies) -> memory_id`
- `get_recent_memory(user_id, limit=20) -> List[MemoryItem]`
- `get_rule_context(rule_id) -> Dict` (해당 규칙과 연결된 최근 이메일 요약)
### 4) 데이터 흐름 (실행 순서)
1. hybrid_coldmail_filter 결과에 `matched_rules` 포함
2. 콜드메일 확정 시 `coldmail_memory_service.save_email_memory()` 호출
3. 온톨로지 판단 시 `get_rule_context()`로 기억 기반 보정
### 5) DB 스키마 확인/동기화
- Neo4j 실제 스키마 확인 후 Repository/Service 동시 반영
- 스키마 변경 시 ORM/DDL/Repository 동기화 원칙 준수
### 6) 테스트 (TDD, pytest)
- **파일**: `rb8001/tests/test_coldmail_memory_repository.py`
- Neo4j 저장/조회/관계 생성 검증
- **파일**: `rb8001/tests/test_coldmail_memory_service.py`
- save/get 동작, rule context 요약 결과 검증
- **UX 검증**: “왜 콜드메일인지” 설명 문구 포함 여부 확인
### 7) 완료 기준
- Neo4j에 콜드메일 기억 저장/조회 성공
- 온톨로지 판단에 기억 보정 값 반영
- Slack 브리핑에서 누락/오판 사례 재현 시 개선 확인
---
## 참고
- `book/300_architecture/311_백엔드_구조_원칙.md`