# 스레드 분리 LLM 정밀화 개선 — 병합+분리 양방향 + Q&A 경계 감지

## 배경
- 현재 `_llm_refine_thread_splits()`는 "이전 스레드와 병합할지"만 판단 (병합 only)
- 하나의 스레드에 여러 Q&A가 묶여도 분리 불가
- 각 스레드의 첫 2개 메시지만 LLM에 전달 → 맥락 부족

### 실제 오류 사례
**insight-021**: 21개 메시지 — 고지의무 Q&A(~메시지5) + 퀴즈 잡담(~12) + 인사/잡담(13~18) + 다음 질문양식(19~20)
**insight-023**: 15개 메시지 — 이전 질문 답변(~메시지3) + 새 질문 "유사암 보장"(3 중간~14)

## 수정 대상
- `/home/jay/projects/insuwiki/scripts/kakao_knowledge/knowledge_extractor_v2.py`
- `_llm_refine_thread_splits()` 함수 (라인 317~383)

## 수정 내용

### 1. 프롬프트 개선 — 병합 + 분리 양방향
현재 프롬프트:
```
각 스레드가 이전 스레드와 같은 주제의 연속인지 판별 → merge_with_prev: [false, true, ...]
```

개선 프롬프트:
```
아래는 규칙 기반으로 분리된 대화 스레드입니다.
각 스레드에 대해 두 가지를 판별하세요:

1. 이전 스레드와 같은 주제의 연속인가? → merge_with_prev
2. 이 스레드 내부에 주제 전환이 있는가? → split_at (메시지 인덱스 리스트)
   - 질문-답변이 끝난 후 새 질문이 시작되는 지점
   - 잡담/인사가 섞인 구간 이후 새 주제 시작 지점

JSON 응답:
{
  "threads": [
    {"merge_with_prev": false, "split_at": []},
    {"merge_with_prev": true, "split_at": [5, 12]},
    ...
  ]
}
- split_at이 [5, 12]이면 메시지 0~4, 5~11, 12~끝 으로 3개 스레드로 분리
```

### 2. 메시지 전달량 확대
- 현재: 각 스레드 첫 2개 메시지만 (`t.messages[:2]`)
- 변경: 최대 10개 메시지 (`t.messages[:10]`), 내용은 100자로 제한
- 10개 초과 시: 첫 3개 + 마지막 3개 + "... (N개 생략)"

### 3. 분리 로직 구현
`split_at` 배열이 있으면 해당 인덱스에서 스레드를 분할:
```python
if split_indices:
    sub_threads = []
    prev_idx = 0
    for idx in sorted(split_indices):
        if prev_idx < idx < len(thread.messages):
            sub = ThreadV2()
            sub.messages = thread.messages[prev_idx:idx]
            sub_threads.append(sub)
            prev_idx = idx
    # 나머지
    sub = ThreadV2()
    sub.messages = thread.messages[prev_idx:]
    sub_threads.append(sub)
    refined.extend(sub_threads)
```

### 4. 노이즈 스레드 필터링 강화
분리 후 잡담/인사만 남은 스레드(질문도 답변도 없는)는 자동 제거:
- 메시지가 3개 미만이면서 키워드 매칭 0인 스레드 제거

## 테스트
1. 3월 데이터로 파이프라인 재실행
2. insight-021에 해당하는 스레드가 3개 이상으로 분리되는지 확인
3. insight-023에 해당하는 스레드에서 이전 질문 답변이 분리되는지 확인
4. 전체 품질 샘플 5건 확인
5. pytest 전체 통과 확인

## 파이프라인 재실행
코드 수정 완료 후:
```bash
cd /home/jay/projects/insuwiki/.worktrees/task-1575.1-dev1
PYTHONPATH=scripts python3 -m scripts.kakao_knowledge pipeline-v2 \
  /tmp/kakao-march-2026.txt \
  --output scripts/kakao_knowledge/wiki_entries_march_v2.json \
  --use-llm --batch-size 20
```
검증 통과 시 main 반영 + 대시보드 재시작

## 보고서
`/home/jay/workspace/memory/reports/task-1577.md`에 작성
- 개선 전후 스레드 분리 비교 (insight-021, 023 기준)
- 전체 추출 건수 변화
- 샘플 5건 품질
