검색 실패 케이스를 자동 수집해 gold dataset 시드로 활용. wiggly-weaving-puppy 플랜 Phase 0.3 산출물. 자동 수집 트리거 (3가지): - result_count == 0 → no_result - confidence < 0.5 → low_confidence - 60초 내 동일 사용자 재쿼리 → user_reformulated (이전 쿼리 기록) confidence는 Phase 0.3 휴리스틱 (top score + match_reason). Phase 2 QueryAnalyzer 도입 후 LLM 기반으로 교체 예정. 구현: - migrations/015_search_failure_logs.sql: 테이블 + 3개 인덱스 - app/models/search_failure.py: ORM - app/services/search_telemetry.py: confidence 계산 + recent 트래커 + INSERT - app/api/search.py: BackgroundTasks로 dispatch (응답 latency 영향 X) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
36 lines
1.8 KiB
SQL
36 lines
1.8 KiB
SQL
-- Phase 0.3: 검색 실패 자동 로깅
|
|
--
|
|
-- 목적: gold dataset 시드 수집. 평가셋(tests/search_eval/queries.yaml) 확장 재료.
|
|
-- 자동 수집 트리거:
|
|
-- 1) result_count = 0 → failure_reason = 'no_result'
|
|
-- 2) confidence < 0.5 → failure_reason = 'low_confidence'
|
|
-- 3) 같은 사용자 60초 내 재쿼리 → failure_reason = 'user_reformulated' (이전 쿼리 기록)
|
|
--
|
|
-- confidence는 Phase 0.3 시점엔 휴리스틱(top score 기반).
|
|
-- Phase 2 QueryAnalyzer 도입 후 LLM 기반 confidence로 교체될 예정.
|
|
|
|
CREATE TABLE IF NOT EXISTS search_failure_logs (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
query TEXT NOT NULL,
|
|
user_id BIGINT REFERENCES users(id) ON DELETE SET NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
result_count INTEGER NOT NULL,
|
|
confidence DOUBLE PRECISION, -- 0..1, NULL이면 미산정
|
|
failure_reason VARCHAR(30) NOT NULL, -- no_result | low_confidence | user_reformulated
|
|
context JSONB, -- top_score, mode, returned_ids[], reformulated_to 등
|
|
reviewed BOOLEAN NOT NULL DEFAULT FALSE -- 평가셋에 흡수되었는지 표시
|
|
);
|
|
|
|
-- 사용자별 시간순 조회 (recent failures, 동일 사용자 패턴 분석)
|
|
CREATE INDEX IF NOT EXISTS idx_search_failure_user_time
|
|
ON search_failure_logs (user_id, created_at DESC);
|
|
|
|
-- failure_reason별 집계 (대시보드/리포트)
|
|
CREATE INDEX IF NOT EXISTS idx_search_failure_reason
|
|
ON search_failure_logs (failure_reason, created_at DESC);
|
|
|
|
-- 미리뷰 항목 우선 노출 (gold dataset 큐레이션 작업 큐)
|
|
CREATE INDEX IF NOT EXISTS idx_search_failure_unreviewed
|
|
ON search_failure_logs (created_at DESC)
|
|
WHERE reviewed = FALSE;
|