# Task: conversation_memory.py Phase 2 — 스마트 검색 + 지연 인덱싱 + 안정성 고도화

## 개요
task-597.1에서 P0 수정 + Phase 1 핵심 기능, task-597.2에서 P1 보강(세마포어, 레이트 리밋, InlineKeyboard, 날짜 경계, topic 확정)을 구현 완료.
task-597.3에서는 미팅 합의 Phase 2 항목(LLM 자연어 검색, 지연 인덱싱)과 안정성 고도화를 반영한다.

## 참고 문서
- 미팅 기록: `/home/jay/workspace/memory/meetings/2026-03-15-groupchat-memory-intelligence.md`
- task-597.1 보고서: `/home/jay/workspace/memory/reports/task-597.1.md`
- task-597.2 보고서: `/home/jay/workspace/memory/reports/task-597.2.md`
- 이전 Phase 산출물: `/home/jay/workspace/services/multimodel-bot/conversation_memory.py`, `main_bot.py`

## 대상 파일
- `/home/jay/workspace/services/multimodel-bot/conversation_memory.py`
- `/home/jay/workspace/services/multimodel-bot/main_bot.py`
- `/home/jay/workspace/services/multimodel-bot/tests/test_conversation_memory.py`

## 작업 내용

### 1. /스마트검색 — LLM 자연어 검색 (미팅 합의 Phase 2)
미팅 합의 5.검색: "Phase 2: LLM 자연어 검색 (`/스마트검색`)"
- conversation_memory.py에 `smart_search(query: str, chat_id: int) -> str` 메서드 추가
- 검색 흐름:
  1. 요약 메타데이터(topic_tags, key_decisions)에서 키워드 매칭 (기존 /기억 로직 활용)
  2. 매칭 결과 상위 5건을 LLM에 전달하여 자연어 답변 생성
  3. LLM 프롬프트에 `<user_content>` XML 태그 분리 적용
- main_bot.py에 `/스마트검색 <질문>` 명령어 핸들러 추가
- 레이트 리밋 예산 적용 (기존 _llm_call_count 활용)

### 2. 지연 인덱싱 — 요약 파일 200개 초과 시 캐시 인덱스
미팅 합의 4.인덱스: "지연 인덱싱: 요약 파일 200개 초과 시 캐시 인덱스 파일 자동 생성"
- summaries/ 파일 수 200개 초과 시 `summaries/_index.json` 자동 생성
- 인덱스 구조: `[{"filename": ..., "date": ..., "topic_tag": ..., "summary": ...[:50]}]`
- `get_all_summary_files()`에서 인덱스 파일 있으면 그것을 사용, 없으면 기존 glob 방식
- 인덱스는 새 요약 생성 시 자동 갱신

### 3. JSONL rotation — 5만줄 초과 시 자동 분할
미팅 합의 1.저장구조: "JSONL rotation: 단일 파일 5만줄 초과 시 자동 분할"
- `_append_to_jsonl`에서 현재 파일 줄 수 확인 (캐시 활용)
- 5만줄 초과 시 `{날짜}_part2.jsonl`, `{날짜}_part3.jsonl` 등으로 자동 분할
- `load_today`에서 같은 날짜의 모든 part 파일 로드

### 4. 한국어 특성 대응 프롬프트
미팅 합의 2.주제감지: "한국어 특성 대응 프롬프트 포함 (주어 생략, 감탄사 무시 등)"
- `_do_generate_summary` 프롬프트에 한국어 특성 힌트 추가:
  - "한국어 대화에서 주어는 자주 생략됩니다"
  - "감탄사(ㅋㅋ, ㅎㅎ, 와)는 주제 분류에 포함하지 마세요"

## 테스트 요구사항
- task-597.2의 104개 테스트 회귀 없음
- 신규 테스트: 스마트검색, 지연 인덱싱, JSONL rotation, 한국어 프롬프트
- pytest 전체 통과 + pyright 0 에러

## 절대 규칙
- 기존 동작 하위호환 유지
- bot_settings.json 모델 설정 변경 금지
- 인메모리 deque에는 원본 저장, JSONL에만 PII 마스킹