# task-1554: 카카오톡 인사이트 추출 고도화 (Phase 1~3)

## 3팀 한정승인 — Phase 1~3 전체를 3팀(다그다)이 일괄 진행

## 목표
카카오톡 단체톡 txt 파일에서 보험 도메인 인사이트를 **옵시디언급 지식 두뇌** 수준으로 추출하는 시스템을 구축한다.

## 현재 상태 (못 쓰는 수준)
- 위치: `/home/jay/projects/insuwiki/scripts/kakao_knowledge/`
- knowledge_extractor.py: `#궁금증` 태그 + "질문 드립니다" 패턴에만 의존
- 자연어 대화 속 인사이트 추출 불가
- 카테고리 5개뿐 (보상/고지의무/약관/상품/기타)
- Q&A 쌍으로만 추출 → 경험 공유, 사례, 뉘앙스 전부 누락
- LLM 경로도 Haiku만 사용 → 보험 도메인 깊이 부족

## 샘플 데이터
- `/home/jay/workspace/data/kakao-sample.txt` (1.5MB, ~32,946줄)
- 채팅방: "앞서가는 설계사" (보험 전문가 384명)
- 기간: 2025-12 (약 4개월)

---

## Phase 1: 다층 LLM 파이프라인

### 목표
형식적 패턴 의존을 탈피하고, 자연어 대화 속에서 보험 전문 지식을 추출한다.

### 구현

#### 1-1. 대화 흐름 분리 (Thread Splitter) 개선
- 현재: 15분 간격 + 날짜 변경으로만 분리
- 개선: **주제 기반 분리**
  - 같은 시간대라도 주제가 바뀌면 새 스레드
  - Haiku로 "이 메시지가 이전 대화의 연속인지 새 주제인지" 판별
  - 배치 처리: 메시지 20개씩 묶어서 Haiku에 한번에 분류 요청 (API 호출 최소화)

#### 1-2. 인사이트 유형 확장
현재 Q&A만 추출하는 것을 7가지 유형으로 확장:
1. **Q&A** — 질문 + 전문가 답변
2. **전문가 의견** — "제 경험상...", "실무에서는..." 같은 경험 공유
3. **사례 분석** — 실제 보험 사고/보상 사례 공유
4. **약관 해석** — 약관 조항에 대한 해석/논쟁
5. **실무 팁** — 설계사 영업/업무 관련 노하우
6. **규정 변경** — 법/규정/고시 변경 정보
7. **경고/주의** — "이런 건 주의하세요" 유형

#### 1-3. 2단계 LLM 추출
```
Step 1 (Haiku — 빠르고 저렴):
  - 스레드별 노이즈 제거 (인사, 이모티콘, 시스템 메시지)
  - 인사이트 포함 여부 판별 (Yes/No + 유형)
  - 인사이트 없는 스레드 필터링 (일상 대화 등)

Step 2 (Sonnet — 심층 분석):
  - Haiku가 인사이트 있다고 판별한 스레드만 대상
  - 구조화된 인사이트 추출:
    - title: 핵심 주제 (50자 이내)
    - type: 7가지 유형 중 하나
    - category: 확장된 카테고리 (아래 참조)
    - summary: 핵심 내용 요약 (200자)
    - key_points: 핵심 포인트 리스트
    - expert: 전문가 식별 (누가 가장 정확한 정보를 제공했는지)
    - confidence: high/medium/low
    - related_topics: 관련 주제 키워드 (Phase 2 그래프 연결용)
    - tags: #태그 리스트
```

#### 1-4. 카테고리 확장
5개 → 15개+:
- 보상(자동차/일반/장기), 고지의무, 약관해석, 상품비교
- 언더라이팅, 민원처리, 손해사정, 의학지식
- 세금/절세, 법률/판례, 영업노하우, 고객관리
- GA운영, 수수료체계, 디지털/IT, 기타

#### 1-5. 배치 처리 + 메모리 관리
- 32,000줄을 한번에 처리하면 안 됨
- 스레드 단위로 배치 (50스레드씩)
- 각 배치 완료 후 중간 결과 저장 (진행 중 중단 대비)
- 메모리: del + gc.collect() 적극 활용

### 산출물
- `knowledge_extractor_v2.py` (기존 파일 대체하지 말고 v2로 신규 생성)
- 중간 결과: `/home/jay/projects/insuwiki/data/insights_v2.json`

---

## Phase 2: 지식 그래프 (옵시디언 대체)

### 목표
인사이트 간 관계를 자동 연결하여 옵시디언의 그래프 뷰와 동일한 기능을 제공한다.

### 구현

#### 2-1. 마크다운 + 백링크 + 태그 포맷
각 인사이트를 마크다운 파일로 저장:
```markdown
---
id: insight-001
title: 광응고술 보상 기준
type: Q&A
category: 보상/장기
tags: [광응고술, 보상, 실비, 약관해석]
related: [insight-023, insight-045]
expert: 이해철/프라임/부산
confidence: high
source_date: 2025-12-03
---

## 질문
광응고술 시 실비 보상이 가능한가요?

## 답변
[[약관해석/실비보상기준]]에 따르면...
이해철 손해사정사의 의견: ...

## 관련 인사이트
- [[insight-023|고지의무 위반 시 보상 거절 사례]]
- [[insight-045|실비보험 자기부담금 계산법]]
```

#### 2-2. graph.json — 관계 그래프
```json
{
  "nodes": [
    {"id": "insight-001", "title": "광응고술 보상 기준", "category": "보상/장기", "tags": ["광응고술", "보상"]}
  ],
  "edges": [
    {"from": "insight-001", "to": "insight-023", "relation": "related_topic"},
    {"from": "insight-001", "to": "insight-045", "relation": "same_category"}
  ]
}
```

#### 2-3. 자동 연결 로직
- **태그 기반**: 같은 태그를 가진 인사이트끼리 연결
- **카테고리 기반**: 같은 카테고리/서브카테고리 연결
- **LLM 기반**: Haiku에게 "이 인사이트와 관련 있는 다른 인사이트는?" 질문
- **키워드 중복**: related_topics 필드 간 교집합

#### 2-4. 저장소
- 마크다운 파일: `/home/jay/projects/insuwiki/data/insights/` 디렉토리
- 그래프: `/home/jay/projects/insuwiki/data/graph.json`
- 인덱스: `/home/jay/projects/insuwiki/data/insights_index.json` (빠른 조회용)

### 산출물
- `knowledge_graph.py` — 그래프 빌더
- `insights/` 디렉토리 — 마크다운 인사이트 파일들
- `graph.json` — 관계 그래프

---

## Phase 3: 벡터 DB + RAG + 증분 업데이트

### 목표
유사 인사이트를 의미 기반으로 검색하고, 새 카톡 데이터로 기존 지식을 자동 보강한다.

### 구현

#### 3-1. 벡터 DB
- **chromadb** 사용 (로컬 설치, 서버 불필요)
- 각 인사이트의 title + summary + key_points를 임베딩
- 임베딩 모델: sentence-transformers (로컬) 또는 Anthropic embedding
- 저장소: `/home/jay/projects/insuwiki/data/chroma_db/`

#### 3-2. RAG 검색
```python
def search_similar(query: str, top_k: int = 5) -> list[Insight]:
    """의미 기반 유사 인사이트 검색"""
    # 1. 쿼리 임베딩
    # 2. chromadb에서 top_k 유사도 검색
    # 3. 인사이트 객체 반환
```

#### 3-3. 증분 업데이트
- 새 카톡 txt 파일이 들어올 때:
  1. Phase 1 파이프라인으로 새 인사이트 추출
  2. 벡터 검색으로 기존 유사 인사이트 찾기
  3. **신규**: 새 인사이트로 추가
  4. **보강**: 기존 인사이트에 정보 추가 (새 사례, 추가 의견 등)
  5. **충돌**: 기존 인사이트와 모순되면 플래그 표시 (수동 검토용)
  6. graph.json 자동 갱신

#### 3-4. CLI 확장
```bash
# 새 카톡 파일로 증분 업데이트
python3 -m kakao_knowledge update /path/to/new_chat.txt

# 유사 인사이트 검색
python3 -m kakao_knowledge similar "광응고술 보상"

# 그래프 조회 (특정 인사이트의 연결)
python3 -m kakao_knowledge graph insight-001
```

### 산출물
- `vector_store.py` — chromadb 래퍼
- `incremental_updater.py` — 증분 업데이트 로직
- CLI 확장 (__main__.py 수정)

---

## Phase 간 진행 규칙
- Phase 완료 시 `/compact` 실행 후 다음 Phase 진입
- 각 Phase 완료 시 중간 보고서 저장: `memory/reports/task-1554-phase{N}.md`
- 각 Phase 완료 시 `.done` 파일 생성하지 말고, 전체 완료 시 1회만 생성

## 테스트
- 각 Phase별 단위 테스트 작성
- Phase 1: kakao-sample.txt로 인사이트 추출, 기존 대비 추출량 비교
- Phase 2: 그래프 연결 정확도, 백링크 무결성
- Phase 3: 벡터 검색 정확도, 증분 업데이트 동작

## 보고서
`memory/reports/task-1554.md`에 작성 (Phase 3 완료 후 통합 보고서)