# kakao_knowledge v2 파이프라인 — LLM 호출을 내부 Claude CLI로 전환 + 재실행

## Phase 1: LLM 호출 코드 전환

### 배경
- `knowledge_extractor_v2.py`의 LLM 호출부가 `import anthropic` + API 키 방식
- 내부 환경에서는 API 키 없이 `claude` CLI를 사용해야 함 (피드백: LLM 내부 모델 우선)
- 현재 `--use-llm` 옵션이 API 키 미설정으로 항상 규칙 기반 폴백

### 수정 대상
- `/home/jay/projects/insuwiki/scripts/kakao_knowledge/knowledge_extractor_v2.py`

### 수정 범위
`client.messages.create()` 호출이 3곳에 있음:
1. `_llm_refine_thread_splits()` (라인 336) — 스레드 분리 LLM 강화
2. `_stage1_filter()` (라인 410) — Haiku로 노이즈 필터링
3. `_stage2_extract()` (라인 488) — Sonnet으로 심층 분석

### 전환 패턴
각 `client.messages.create()` 호출을 아래 패턴으로 교체:

```python
import subprocess, json

def _call_claude(prompt: str, model: str = "haiku") -> str:
    """내부 Claude CLI로 LLM 호출"""
    result = subprocess.run(
        ["/home/jay/.local/bin/claude", "-p", prompt, "--model", model],
        capture_output=True, text=True, timeout=120,
        cwd="/tmp",
        env={**os.environ, "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"}
    )
    if result.returncode != 0:
        raise RuntimeError(f"Claude CLI 오류: {result.stderr[:200]}")
    return result.stdout.strip()
```

- `_llm_refine_thread_splits`: `--model haiku` (빠른 판별)
- `_stage1_filter`: `--model haiku` (노이즈 필터)
- `_stage2_extract`: `--model sonnet` (심층 분석)

### 추가 수정
1. `import anthropic` 제거
2. `api_key` 파라미터 → 불필요 (제거 또는 무시)
3. `ANTHROPIC_API_KEY` 체크 → 불필요 (제거)
4. LLM 폴백 분기(라인 777~805) → CLI 실패 시에만 규칙 기반 폴백
5. 기존 테스트가 `anthropic` mock을 사용한다면 테스트도 수정

### 주의
- 배치 처리 시 CLI 호출이 반복되므로, 속도를 고려하여 batch_size 조정 가능
- timeout은 120초 (haiku), 300초 (sonnet) 각각 설정

## Phase 2: v2 파이프라인 재실행

### Phase 1 완료 후 실행
```bash
cd /home/jay/projects/insuwiki
python3 -m scripts.kakao_knowledge pipeline-v2 /home/jay/workspace/data/kakao-sample.txt \
  --output scripts/kakao_knowledge/wiki_entries_v2.json \
  --use-llm
```

### 결과 검증
1. LLM 경로로 실행되는지 확인 (로그에 "규칙 기반으로 fallback" 없어야 함)
2. 추출 건수 확인
3. 샘플 5건 품질 확인:
   - 질문과 답변이 주제적으로 일치하는지
   - 공지사항/인사말이 질문으로 분류되지 않는지
   - 스레드 경계가 정확한지 (다음 질문이 포함되지 않는지)
4. 검증 통과 시:
   - wiki_entries_v2.json → wiki_entries.json 복사
   - wiki.db import
   - 대시보드 서버 재시작

### 주의
- 32,946줄 × LLM 호출 → 시간이 상당히 소요 (수십 분~수 시간)
- 중간 결과 저장 (output_dir 활용)으로 실패 시 이어서 작업 가능하도록

## 보고서
`/home/jay/workspace/memory/reports/task-1575.md`에 작성
- Phase 1: 코드 변경 내역
- Phase 2: 추출 건수, 카테고리 분포, 샘플 품질 비교 (규칙 기반 vs LLM)