핵심 요약
"답하는 검색"의 핵심은 모델이 아니라 파이프라인이다. 질문 분류 → 다중 소스 검색 → 리랭킹 → 인용 강제 → 스트리밍 응답. 사내 도메인 자료(2.4만 문서) + 웹 검색을 결합한 답변형 어시스턴트를 6주 만에 만들어 사내 검색 사용자가 일 2,800명까지 늘었다. 직접 만든 비용이 SaaS 대비 1/8 수준.
1. 아키텍처 한눈에
질문 → [분류기 Haiku 4.5] → web? / docs? / both?
↓ both
[Brave Search API] + [pgvector 검색] → top 12
↓
[Cohere Rerank 3.5] → top 5
↓
[Sonnet 4.6, 인용 강제 system 프롬프트] → 스트리밍 응답
2. 질문 분류 — Haiku로 충분
"오늘 환율"·"최근 뉴스"는 웹 검색, "사내 휴가 규정"은 내부 검색, "PostgreSQL 18 신기능 우리 코드에 적용하는 법"은 둘 다. Haiku 4.5에 5-shot 프롬프트로 95% 정확도.
3. 임베딩 + pgvector
CREATE INDEX docs_emb_idx ON docs
USING hnsw (embedding vector_cosine_ops) WITH (m=16, ef_construction=64);
Voyage 3 임베딩 1024차원. 2.4만 문서 인덱스 빌드 4분. 검색 p50 38ms.
4. 웹 검색 — Brave / Tavily 비교
| API | 단가/1K | 한국어 결과 품질 |
|---|---|---|
| Brave Search | $3 | 중상 |
| Tavily | $8 | 상(요약 포함) |
| SerpAPI | $5 | 상 |
Tavily는 결과에 본문 추출이 포함돼 별도 스크래핑이 줄어든다. 단가는 비싸지만 종합 비용은 비슷.
5. 리랭킹 — Cohere Rerank 3.5
BM25만 쓸 때 hit rate@5 71% → Rerank 적용 후 89%. 12개를 5개로 줄이면서 LLM 입력 토큰도 60% 감소.
6. 인용 강제 system 프롬프트
system = '''
답변 중 사실 진술은 반드시 [1] 형식으로 인용한다.
인용이 불가능한 정보는 답변에 포함하지 않는다.
출처는 마지막에 번호 목록으로 표시한다.
'''
이 한 줄로 환각률이 측정 가능한 수준에서 12% → 2.4%로 떨어졌다. citation 베타 헤더를 추가하면 source span을 자동 표시도 가능.
7. 스트리밍 — SSE + 점진적 인용 표시
토큰을 받으며 인용 마커를 만나면 프론트에서 작은 footnote 뱃지를 즉시 렌더. 사용자가 답변이 끝나기 전에 출처를 클릭할 수 있어 체감 만족도가 크다.
8. 비용 — 일 5,000 질의 기준
| 항목 | 월 비용 |
|---|---|
| Brave 검색 | $450 |
| Voyage 임베딩(증분) | $30 |
| Rerank | $60 |
| Sonnet 4.6 답변(캐시 적용) | $720 |
| 합계 | $1,260 |
유사 SaaS(엔터프라이즈 플랜) 월 $9,800 대비 87% 절감.
자주 묻는 질문
Q. 한국어 BM25 토크나이저는? Postgres라면 pg_search + Mecab. 또는 OpenSearch에 nori. 한국어는 형태소 분석이 hit rate 차이를 크게 낸다.

댓글 0