feat(search): B-2 evidence LLM → 4B triage 전환 + answerability 컬럼

Plan 본래 의도: 근거 선별은 4B, 합성은 26B.

- evidence_service: LLM 호출을 primary(26B MLX) → triage(4B Ollama) 로 전환.
  Ollama concurrent 가능하므로 get_mlx_gate() 제거. synthesis 는 여전히
  llm_gate Semaphore(1) 경유로 MLX 보호.
- prompt_version v3-evidence-triage bump (synthesis 프롬프트 자체는 v2-600char
  그대로, evidence LLM 경로 변경을 분리 추적).
- migrations 161/162: analyze_events 에 answerability / partial_basis /
  suggested_query_count 컬럼 + partial index. /ask 는 이미 ask_events 에
  completeness (full/partial/insufficient) 기록 운영 중이므로, analyze_events
  쪽은 향후 문서 분석에서 answerability 개념 도입 시 활용 예비.
- telemetry record_analyze_event 에 answerability / partial_basis /
  suggested_query_count 파라미터 확장.

기존 /ask 3-state completeness 로직 (classifier_service + 7-tier gate) 은
그대로 유지 — 이미 Phase 3.5a 에서 완성된 상태. B-2 는 LLM 부하 재분배와
관측성 확장에 집중.

MLX 부하 감소 효과: 이전엔 쿼리 1건당 evidence(26B) + synthesis(26B) 2번
MLX 호출. 이제는 evidence(4B Ollama) + synthesis(26B MLX) 로 MLX 호출 절반.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-04-24 10:33:32 +09:00
parent 6fdc48e5b6
commit 34f79f84f2
6 changed files with 52 additions and 11 deletions
@@ -0,0 +1,21 @@
-- 161_analyze_events_answerability.sql
-- PR-B B-2: /ask 의 3-state completeness (direct/partial/insufficient) 독립 컬럼화.
-- plan: ~/.claude/plans/swirling-swimming-liskov.md §B-2
--
-- 기존 /ask 응답의 completeness 필드(이미 full/partial/insufficient 3-state 로
-- 운영 중인 Phase 3.5a 결과)를 analyze_events 에서도 독립 컬럼으로 집계 가능하게.
-- mode 컬럼 문자열 파싱 회피 + "Backlog Suppression" 카드와 동일 패턴.
--
-- answerability 값 매핑:
-- /ask completeness='full' → 'direct'
-- /ask completeness='partial' → 'partial'
-- /ask completeness='insufficient' → 'insufficient'
--
-- partial_basis: synthesis 가 partial 답변 본문을 실제로 생성했는지 (unanswered_aspects
-- 를 답변 뒤에 명시). completeness=partial 이어도 synthesis 가 스킵되면 false.
-- suggested_query_count: insufficient 때 사용자에게 돌려주는 추가 검색어 제안 개수.
ALTER TABLE analyze_events
ADD COLUMN IF NOT EXISTS answerability TEXT,
ADD COLUMN IF NOT EXISTS partial_basis BOOLEAN,
ADD COLUMN IF NOT EXISTS suggested_query_count INTEGER;
@@ -0,0 +1,6 @@
-- 162_analyze_events_answerability_idx.sql
-- PR-B B-2: answerability 분포 조회 인덱스 (대시보드 "에스컬레이션 비율" 카드).
CREATE INDEX IF NOT EXISTS idx_analyze_events_answerability
ON analyze_events (answerability, created_at DESC)
WHERE answerability IS NOT NULL;