---
id: adr-0007-hybrid-retrieval-deterministic-first
title: "ADR-0007 하이브리드 검색과 결정론 우선"
category: "Architecture_Decision"
status: "draft"
verification_status: "applied"
canonical_id: ""
aliases: ["ADR retrieval", "왜 TF-IDF 먼저", "하이브리드 검색 결정", "결정론 우선"]
duplicate_of: ""
source_trust_level: "A"
confidence_score: 0.9
created_at: 2026-06-13
updated_at: 2026-06-13
review_reason: ""
merge_history: []
tags: ["adr", "rag", "retrieval", "decision", "connectai"]
raw_sources: ["ConnectAI/src/retrieval/index.ts", "ConnectAI/src/retrieval/scoring.ts"]
applied_in: ["ConnectAI"]
github_commit: ""
---

# [[ADR-0007 하이브리드 검색과 결정론 우선]]

## 🎯 한 줄 통찰 (One-line insight)
검색의 기본은 **TF-IDF(sparse)로 항상 동작**하게 하고, 임베딩(dense)은 *가용할 때만 가산 혼합* 하기로 결정했다 — 임베딩 엔진이 없거나 미색인이어도 검색이 절대 망가지지 않게 하기 위해 [S1].

## 🧠 핵심 개념 (Core concepts)
- **결정:** TF-IDF 기본 + 임베딩 blend(α). 벡터 없는 문서는 순수 sparse 유지.
- 구현은 [[RAG 검색 파이프라인]], [[TF-IDF 이중언어 스코어링]] 참조.

## 📖 세부 내용 (Details · ADR)
### Problem
의미 검색(임베딩)은 강력하지만 임베딩 모델 가용성·색인 상태에 의존한다. 그것에만 의존하면 모델이 없을 때 검색이 죽는다. 반대로 키워드만 쓰면 환언/동의를 놓친다.

### Context
로컬 환경에서 임베딩 모델이 있을 수도/없을 수도. brain 은 한/영 혼용. "검색은 언제나 동작" 이 신뢰의 기본.

### Options Considered
1. **임베딩 단독(dense only)** — 의미 강하나 가용성·비용 의존, 무관 문서도 높은 cos.
2. **키워드 단독(sparse only)** — 항상 동작·설명가능하나 환언 놓침.
3. **하이브리드(결정론 우선 + 임베딩 가산)** — 기본 보장 + 의미 보강.

### Chosen Solution
3번. TF-IDF 로 점수, 임베딩이 있으면 `(1-α)·sparse + α·dense`. 모든 후보를 maxTfidf 로 정규화(벡터 있는 것만 줄이면 안 됨), cosine 은 후보군 min-max 정규화 [S1].

### Why It Was Chosen
가용성 보장(임베딩 없어도 동작), 설명가능(왜 매치됐는지), 그러면서 의미 검색의 이득을 더한다. 실측 버그(스케일 불일치)를 정규화로 해결.

### Benefits
무중단 검색, 점진 도입(임베딩 색인이 늘수록 좋아짐), 설명가능, 한/영 교차 매칭(동의어 확장).

### Drawbacks
스케일 정규화가 까다로움(2건의 실측 버그), 수작업 동의어 사전 유지, 형태소 분석 부재.

### Future Risks
brain 규모↑ 시 sparse 인덱스 메모리·시간 증가. 동의어 사전 누락이 recall 을 갉아먹음.

### Alternative Approaches
대규모면 BM25 + 벡터 DB 하이브리드, 또는 reranker 모델 도입. 한국어 정밀도가 critical 하면 형태소 분석기.

## ⚖️ 모순 및 업데이트 (Contradictions & updates)
"임베딩이 최신이고 우월" 통념과 달리, *가용성·설명가능성* 을 위해 결정론을 1순위로 둔다 — 단, 의미 검색을 버리지 않고 가산.

## 🛠️ 적용 사례 (Applied in summary)
`retrieval/index.ts`(하이브리드 blend), `scoring.ts`(TF-IDF/토크나이저) [S1].

## 🔗 지식 그래프 (Knowledge Graph)
- **상위/루트:** [[ConnectAI 아키텍처 개요]]
- **관련 개념:** [[RAG 검색 파이프라인]], [[TF-IDF 이중언어 스코어링]], [[RAG Pattern]], [[Caching Pattern]]
- **참조 맥락:** 로컬 LLM 이 검색을 설계할 때 "dense only vs 하이브리드" 와 가용성 보장을 판단할 때 참조.

## 📚 출처 (Sources)
- [S1] ConnectAI/src/retrieval/index.ts — 하이브리드 blend, 스케일 정규화 버그 기록
- [S2] ConnectAI/src/retrieval/scoring.ts — TF-IDF, 이중언어 토크나이저, 동의어

## 📝 변경 이력 (Change history)
- 2026-06-13: ConnectAI 코드 분석 기반 ADR 작성.
