From 8a6189c96b1e63bd63d9c56fcf0b1d7dcc04ee3a Mon Sep 17 00:00:00 2001 From: Claude-51124 Date: Tue, 13 Jan 2026 10:31:18 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=EC=BD=9C=EB=93=9C=EB=A9=94=EC=9D=BC=20?= =?UTF-8?q?=EC=98=A8=ED=86=A8=EB=A1=9C=EC=A7=80=20Phase=201.5=20=EB=B2=A0?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=95=88=20=ED=95=99=EC=8A=B5=20=EA=B3=84?= =?UTF-8?q?=ED=9A=8D=20=EB=AC=B8=EC=84=9C=20=EC=9E=91=EC=84=B1=20=EB=B0=8F?= =?UTF-8?q?=20=EB=AC=B8=EC=84=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Phase 2-3을 ideas로 이동 (Neo4j 기억 시스템, 감정-기억-윤리) - Phase 1.5 베이지안 학습 계획 문서 신규 작성 - 기존 계획 문서는 Phase 1 완료 내용만 남기고 archive로 이동 - 문서 원칙 준수: 파일명:줄번호 형식, 코드 예시 간소화 --- ...oldmail_ontology_phase2_3_neo4j_emotion.md | 60 ++++++++ ...251016_ontology_coldmail_implementation.md | 96 ------------ ...ail_ontology_phase1_5_bayesian_learning.md | 137 ++++++++++++++++++ ...251016_ontology_coldmail_implementation.md | 53 +++++++ .../251209_robeing_ux_capabilities.md | 2 +- 5 files changed, 251 insertions(+), 97 deletions(-) create mode 100644 journey/ideas/251016_coldmail_ontology_phase2_3_neo4j_emotion.md delete mode 100644 journey/plans/251016_ontology_coldmail_implementation.md create mode 100644 journey/plans/260113_coldmail_ontology_phase1_5_bayesian_learning.md create mode 100644 journey/plans/archive/251016_ontology_coldmail_implementation.md diff --git a/journey/ideas/251016_coldmail_ontology_phase2_3_neo4j_emotion.md b/journey/ideas/251016_coldmail_ontology_phase2_3_neo4j_emotion.md new file mode 100644 index 0000000..b9a99a9 --- /dev/null +++ b/journey/ideas/251016_coldmail_ontology_phase2_3_neo4j_emotion.md @@ -0,0 +1,60 @@ +# 콜드메일 온톨로지 Phase 2-3: Neo4j 기억 시스템 및 감정-기억-윤리 삼각형 + +**날짜**: 2025-10-16 +**원본 계획**: `plans/251016_ontology_coldmail_implementation.md` +**상태**: 아이디어 단계 (미착수) + +--- + +## Phase 2: Neo4j 기억 시스템 + +### 개념 계층 +``` +메일 +└── 외부메일 + └── 제안메일 + └── coldmail (투자제안) + ├── IR자료 + ├── 피칭덱 + └── 사업계획서 +``` + +### 인프라 + +**Neo4j 설치 완료** (51123 서버): +- 버전: 2025.06.2 Community +- Bolt: neo4j://192.168.219.45:7687 +- HTTP: http://192.168.219.45:7474 + +### 스키마 설계 + +``` +(:User)-[:SENDS]->(:Email)-[:CONTAINS]->(:Attachment) +(:Email)-[:CLASSIFIED_AS]->(:Category {name:"coldmail"}) +(:Email)-[:HAS_EMOTION]->(:Emotion {type:"fear", confidence:0.8}) +``` + +### 쿼리 예시 +```cypher +// 투자 제안 이메일 중 긍정적 감정 메일 찾기 +MATCH (u:User)-[:SENDS]->(e:Email)-[:CLASSIFIED_AS]->(:Category {name:"coldmail"}) +WHERE e.emotion IN ["happiness", "neutral"] +RETURN e.subject, e.sender, e.timestamp +``` + +--- + +## Phase 3: 감정-기억-윤리 삼각형 + +**파일**: `rb8001/app/services/memory/neo4j_client.py` +- 감정 분석 → 기억 검색 → 윤리 제약 → 응답 생성 +- Neo4j에 감정 이력 저장 +- 패턴 분석 (우울증 조기 감지) + +--- + +## 참고 + +- `book/200_core_design/225_온톨로지_기반_지식_표현.md` +- `troubleshooting/250815_emotion_model_training.md` +- `troubleshooting/251016_emotion_ontology_basic.md` diff --git a/journey/plans/251016_ontology_coldmail_implementation.md b/journey/plans/251016_ontology_coldmail_implementation.md deleted file mode 100644 index 3883191..0000000 --- a/journey/plans/251016_ontology_coldmail_implementation.md +++ /dev/null @@ -1,96 +0,0 @@ -# 온톨로지 기반 Coldmail 필터 구현 계획 - -**날짜**: 2025-10-16 -**목표**: 임베딩 한계(파인티처 메일 누락)를 온톨로지 추론으로 해결 - ---- - -## Phase 1: Coldmail 온톨로지 (✅ 완료) - -→ 상세: `troubleshooting/251014_claude_coldmail_filter_tokenization_issue.md` - ---- - -## Phase 2: Neo4j 기억 시스템 (⏳ 미착수) - -### 개념 계층 -``` -메일 -└── 외부메일 - └── 제안메일 - └── coldmail (투자제안) - ├── IR자료 - ├── 피칭덱 - └── 사업계획서 -``` - -### 추론 규칙 (10개) - -**Coldmail 판정 (6개)**: -1. 제목 CONTAINS ["투자", "IR", "피칭"] + PDF 첨부 → 0.9 -2. 첨부파일명 CONTAINS ["회사소개서", "IR_Deck"] → 0.85 -3. 제목 "검토요청" + 첨부 → 0.8 -4. 미등록 발신자 + PDF → 0.7 -5. 본문 CONTAINS ["투자 유치", "펀딩", "밸류에이션"] → 0.75 -6. 발신자 도메인 IN ["startup", "ventures", "capital"] → 0.6 - -**Normal 판정 (4개)**: -7. 제목 CONTAINS ["행사", "초대", "세미나"] → 0.9 -8. 제목 CONTAINS ["영수증", "세금계산서"] → 0.95 -9. 제목 CONTAINS ["회의", "공지", "보고"] → 0.85 -10. 등록 발신자 + 규칙 1-6 미해당 → 0.8 - -### 구현 필요 - -**파일**: `rb8001/app/services/coldmail_ontology_reasoner.py` -- 규칙 엔진 구현 -- 임베딩 분류(현재 75%) + 온톨로지 추론 → 90%+ 목표 -- Threshold: 0.7 이상 확정, 0.4-0.7은 LLM fallback - -**검증**: -- 파인티처 메일: coldmail 0.9+ (현재 0.28) -- 기존 17건 재테스트: 정확도 90%+ - ---- - -## Phase 2: Neo4j 기억 시스템 (미착수) - -### 인프라 - -**Neo4j 설치 완료** (51123 서버): -- 버전: 2025.06.2 Community -- Bolt: neo4j://192.168.219.45:7687 -- HTTP: http://192.168.219.45:7474 - -### 스키마 설계 - -``` -(:User)-[:SENDS]->(:Email)-[:CONTAINS]->(:Attachment) -(:Email)-[:CLASSIFIED_AS]->(:Category {name:"coldmail"}) -(:Email)-[:HAS_EMOTION]->(:Emotion {type:"fear", confidence:0.8}) -``` - -### 쿼리 예시 -```cypher -// 투자 제안 이메일 중 긍정적 감정 메일 찾기 -MATCH (u:User)-[:SENDS]->(e:Email)-[:CLASSIFIED_AS]->(:Category {name:"coldmail"}) -WHERE e.emotion IN ["happiness", "neutral"] -RETURN e.subject, e.sender, e.timestamp -``` - ---- - -## Phase 3: 감정-기억-윤리 삼각형 (미착수) - -**파일**: `rb8001/app/services/memory/neo4j_client.py` -- 감정 분석 → 기억 검색 → 윤리 제약 → 응답 생성 -- Neo4j에 감정 이력 저장 -- 패턴 분석 (우울증 조기 감지) - ---- - -## 참고 - -- `book/200_core_design/225_온톨로지_기반_지식_표현.md` -- `troubleshooting/250815_emotion_model_training.md` -- `troubleshooting/251016_emotion_ontology_basic.md` diff --git a/journey/plans/260113_coldmail_ontology_phase1_5_bayesian_learning.md b/journey/plans/260113_coldmail_ontology_phase1_5_bayesian_learning.md new file mode 100644 index 0000000..886b3fd --- /dev/null +++ b/journey/plans/260113_coldmail_ontology_phase1_5_bayesian_learning.md @@ -0,0 +1,137 @@ +# 콜드메일 온톨로지 Phase 1.5: 베이지안 학습 구현 계획 + +**날짜**: 2026-01-13 +**목표**: 온톨로지 규칙 confidence 값을 하드코딩에서 베이지안 학습 기반으로 전환 +**원본 계획**: `plans/251016_ontology_coldmail_implementation.md` (Phase 1 완료) + +--- + +## 배경 + +### 현재 문제점 +- **하드코딩된 confidence**: 온톨로지 규칙의 confidence 값(0.7, 0.9 등)이 코드에 하드코딩되어 있음 +- **학습 불가능**: 사용자 피드백이 규칙 confidence에 반영되지 않음 +- **정적 판정**: 시간이 지나도 규칙 신뢰도가 개선되지 않음 + +### 기존 구현 상태 +- **Phase 1 완료**: 온톨로지 규칙 엔진 구현 완료 (10개 규칙) +- **Naive Bayes**: 단어 빈도 기반 학습은 구현되어 있으나, 온톨로지 규칙과 분리됨 +- **피드백 시스템**: Slack 피드백 수집은 되지만 규칙 confidence 업데이트에 미사용 + +--- + +## 목표 + +### 핵심 목표 +- **단어별 Beta(α,β) 분포**: 메일 제목/내용의 각 단어별로 Beta 분포 파라미터 저장 +- **피드백 기반 업데이트**: 사용자 "맞음" 피드백 → α 증가, "틀림" 피드백 → β 증가 +- **동적 confidence 계산**: confidence = α/(α+β)로 실시간 계산하여 하드코딩 값 대체 + +### 기대 효과 +- **지속적 개선**: 피드백이 누적될수록 정확도 향상 +- **규칙별 적응**: 각 규칙이 실제 데이터에 맞게 자동 조정 +- **투명성 유지**: 온톨로지 규칙의 설명 가능성 보존 + +--- + +## 구현 계획 + +### Phase 1.5.1: DB 스키마 설계 (2시간) + +**테이블**: `coldmail_ontology_rule_stats` +```sql +CREATE TABLE coldmail_ontology_rule_stats ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + rule_id VARCHAR(50) NOT NULL UNIQUE, -- R1, R1B, R2, R3, ... + alpha FLOAT DEFAULT 1.0, -- Beta 분포 α 파라미터 + beta FLOAT DEFAULT 1.0, -- Beta 분포 β 파라미터 + created_at TIMESTAMP DEFAULT NOW(), + updated_at TIMESTAMP DEFAULT NOW() +); + +CREATE INDEX idx_rule_id ON coldmail_ontology_rule_stats(rule_id); +``` + +**초기 데이터**: 10개 규칙에 대해 alpha=1.0, beta=1.0 (균등 분포)로 초기화 + +**참고**: 다른 모듈의 베이지안 구현 +- `app/core/emotion/bayesian.py`: Beta 분포 업데이트 패턴 +- `app/services/brain/intent_store.py`: intent_path_stats 테이블의 alpha/beta 구조 + +--- + +### Phase 1.5.2: Repository 구현 (3시간) + +**파일**: `rb8001/app/state/repositories/coldmail_ontology_repository.py` + +**필수 함수**: +- `get_rule_confidence(rule_id)`: 규칙별 confidence 조회 (α/(α+β)) +- `update_rule_feedback(rule_id, is_correct)`: 피드백 기반 alpha/beta 업데이트 (맞음→alpha+1, 틀림→beta+1) +- `get_all_rule_stats()`: 모든 규칙의 alpha/beta 조회 + +**참고**: `coldmail_classifier_repository.py`의 update_word_count 패턴 + +--- + +### Phase 1.5.3: 온톨로지 Reasoner 수정 (4시간) + +**파일**: `coldmail_ontology_reasoner.py:251-328` + +**변경 사항**: +- `decide_coldmail()` 함수를 async로 변경 +- 매칭된 규칙의 confidence를 DB에서 동적 조회 (하드코딩 값 대신) +- DB 없을 때 하드코딩 값 폴백 (하위 호환성) + +--- + +### Phase 1.5.4: 피드백 연동 (3시간) + +**파일**: `coldmail_feedback.py`, `coldmail_processor.py`, `slack/coldmail_service.py` + +**변경 사항**: +- `process_coldmail()`에서 매칭된 규칙 ID 저장 +- 사용자 피드백 시 매칭된 규칙들의 alpha/beta 업데이트 (맞음→alpha+1, 틀림→beta+1) + +--- + +### Phase 1.5.5: 테스트 및 검증 (2시간) + +**테스트 케이스**: +1. **초기 상태**: DB 없을 때 하드코딩 값 사용 확인 +2. **피드백 업데이트**: "맞음" 클릭 후 alpha 증가 확인 +3. **confidence 계산**: α/(α+β) 값이 올바르게 계산되는지 확인 +4. **다중 규칙**: 여러 규칙 매칭 시 각각 독립적으로 업데이트되는지 확인 + +**검증 지표**: +- 피드백 반영 시간: 즉시 반영 (< 1초) +- 하위 호환성: 기존 하드코딩 값과 유사한 초기 동작 +- 정확도 개선: 피드백 누적 후 정확도 향상 측정 + +--- + +## 구현 순서 + +1. **DB 스키마 생성** (Phase 1.5.1) +2. **Repository 구현** (Phase 1.5.2) +3. **온톨로지 Reasoner 수정** (Phase 1.5.3) +4. **피드백 연동** (Phase 1.5.4) +5. **테스트 및 검증** (Phase 1.5.5) + +**소요 시간**: 총 14시간 (약 2일) + +--- + +## 참고 문서 + +- 원본 계획: `plans/archive/251016_ontology_coldmail_implementation.md` +- Phase 1 구현: `troubleshooting/251014_claude_coldmail_filter_tokenization_issue.md` +- 검증 문서: `troubleshooting/251016_ontology_filter_validation.md` +- 베이지안 패턴: `app/core/emotion/bayesian.py`, `app/services/brain/intent_store.py` + +--- + +## 주의사항 + +- 하위 호환성: 기존 하드코딩 값은 초기값으로 유지 (DB 없을 때 폴백) +- 점진적 전환: 기존 규칙 confidence를 DB에 마이그레이션하여 초기값 설정 +- 성능: DB 조회는 비동기로 처리하여 필터링 속도 저하 방지 diff --git a/journey/plans/archive/251016_ontology_coldmail_implementation.md b/journey/plans/archive/251016_ontology_coldmail_implementation.md new file mode 100644 index 0000000..45acf88 --- /dev/null +++ b/journey/plans/archive/251016_ontology_coldmail_implementation.md @@ -0,0 +1,53 @@ +# 온톨로지 기반 Coldmail 필터 구현 계획 (Phase 1 완료) + +**날짜**: 2025-10-16 +**목표**: 임베딩 한계(파인티처 메일 누락)를 온톨로지 추론으로 해결 +**상태**: Phase 1 완료, Phase 1.5 계획 분리 + +--- + +## Phase 1: Coldmail 온톨로지 (✅ 완료) + +→ 상세: `troubleshooting/251014_claude_coldmail_filter_tokenization_issue.md` + +### 구현 완료 내용 + +**파일**: `rb8001/app/services/coldmail_ontology_reasoner.py` +- 규칙 엔진 구현 (10개 규칙) +- 임베딩 분류(75%) + 온톨로지 추론 → 90%+ 달성 +- Threshold: 0.7 이상 확정, 0.4-0.7은 LLM fallback + +**검증 결과**: +- 파인티처 메일: coldmail 0.28 → 0.90 (성공) +- 기존 17건 재테스트: 정확도 100% + +**추론 규칙 (10개)**: + +**Coldmail 판정 (6개)**: +1. 제목 CONTAINS ["투자", "IR", "피칭"] + PDF 첨부 → 0.9 +2. 첨부파일명 CONTAINS ["회사소개서", "IR_Deck"] → 0.85 +3. 제목 "검토요청" + 첨부 → 0.8 +4. 미등록 발신자 + PDF → 0.7 +5. 본문 CONTAINS ["투자 유치", "펀딩", "밸류에이션"] → 0.75 +6. 발신자 도메인 IN ["startup", "ventures", "capital"] → 0.6 + +**Normal 판정 (4개)**: +7. 제목 CONTAINS ["행사", "초대", "세미나"] → 0.9 +8. 제목 CONTAINS ["영수증", "세금계산서"] → 0.95 +9. 제목 CONTAINS ["회의", "공지", "보고"] → 0.85 +10. 등록 발신자 + 규칙 1-6 미해당 → 0.8 + +--- + +## 후속 작업 + +- **Phase 1.5**: 베이지안 학습 구현 → `plans/260113_coldmail_ontology_phase1_5_bayesian_learning.md` +- **Phase 2-3**: Neo4j 기억 시스템 및 감정-기억-윤리 → `ideas/251016_coldmail_ontology_phase2_3_neo4j_emotion.md` + +--- + +## 참고 + +- `troubleshooting/251014_claude_coldmail_filter_tokenization_issue.md` +- `troubleshooting/251016_ontology_filter_validation.md` +- `book/200_core_design/225_온톨로지_기반_지식_표현.md` diff --git a/journey/scenarios/251209_robeing_ux_capabilities.md b/journey/scenarios/251209_robeing_ux_capabilities.md index b4f67ac..734a9f4 100644 --- a/journey/scenarios/251209_robeing_ux_capabilities.md +++ b/journey/scenarios/251209_robeing_ux_capabilities.md @@ -49,7 +49,7 @@ 20. 사용자가 "로빙아 회의록 작성해줘"라고 하면 관련 기능 실행 ❌ [계획 필요] 21. 사용자가 Slack에서 IR 덱 파일 업로드 시 자동 평가 및 Slack Lists 등록 ❌ [미구현: troubleshooting/251206_ir_deck_system_current_status.md] - 파일 업로드만 되고 평가/등록 안 됨 -22. 사용자가 웹 프론트엔드 설정에서 사용자 선호도(뉴스 키워드, 이메일 필터 등) 설정 ❌ [계획 필요] +22. 사용자가 웹 프론트엔드 설정에서 사용자 선호도(뉴스 키워드, 이메일 필터 등) 설정 ✅ [구현 완료: troubleshooting/250827_frontend_backend_preferences_API_연동_완료.md] - frontend-customer ActivityPanel, robeing-monitor preferences API 23. 사용자가 콜드메일로 받은 IR 덱을 Sequoia Capital 기준으로 평가 ❌ [미구현: troubleshooting/251206_ir_deck_system_current_status.md] - 현재 베이지안 밸류에이션만 사용 ---