- 다층 검색 프로바이더 아키텍처 설계 - Tavily 기본, Brave/Serper/DuckDuckGo 보조 - 쿼리 타입별 라우팅 규칙 정의 - 캐싱 전략 및 비용 최적화 (월 /bin/bash.05) - 4단계 구현 로드맵
85 lines
2.2 KiB
Markdown
85 lines
2.2 KiB
Markdown
# 로빙 검색 API 통합 전략
|
|
|
|
**작성일**: 2025-09-09
|
|
**작성자**: happybell80 & Claude
|
|
**관련 서비스**: rb8001, skill-search
|
|
**핵심 기술**: Multi-provider Search API, Query Routing, Caching
|
|
|
|
## 1. 검색 프로바이더 계층 구조
|
|
|
|
### 1.1 기본 드라이버: Tavily
|
|
- 검색과 본문 추출 통합 제공
|
|
- 월 1,000회 무료
|
|
- RAG 파이프라인 단순화
|
|
|
|
### 1.2 보조 프로바이더
|
|
- **Brave Search API**: 자체 인덱스, 월 2,000회 무료
|
|
- **Serper.dev**: Google SERP, 2,500회 무료
|
|
- **DuckDuckGo IA**: 즉답형 무료 무제한
|
|
- **Exa API**: 심층 분석용 (유료)
|
|
- **SearxNG**: 자체 호스팅 폴백
|
|
|
|
## 2. 쿼리 라우팅 규칙
|
|
|
|
```python
|
|
class QueryRouter:
|
|
def route(self, query, query_type):
|
|
if query_type == 'fact':
|
|
return 'duckduckgo' # 즉답형
|
|
elif query_type == 'general':
|
|
return 'tavily' # 기본
|
|
elif query_type == 'navigational':
|
|
return 'serper' # Google SERP
|
|
elif query_type == 'deep_research':
|
|
return 'exa' # 심층 분석
|
|
else:
|
|
return 'brave' # 다양성 보완
|
|
```
|
|
|
|
## 3. 구현 아키텍처
|
|
|
|
```
|
|
사용자 → rb8001 (의도 분류) → skill-search
|
|
↓
|
|
[Query Router]
|
|
↓
|
|
[Provider Manager]
|
|
/ | | \
|
|
Tavily Brave Serper DuckDuckGo
|
|
↓
|
|
[Result Merger]
|
|
↓
|
|
[Redis Cache]
|
|
```
|
|
|
|
## 4. 캐싱 전략
|
|
|
|
| 쿼리 타입 | TTL | 근거 |
|
|
|----------|-----|------|
|
|
| 즉답형 | 24시간 | 변하지 않는 사실 |
|
|
| 일반 | 6시간 | 적당한 최신성 |
|
|
| 뉴스 | 30분 | 실시간성 중요 |
|
|
| 네비게이셔널 | 12시간 | URL 변경 드물음 |
|
|
|
|
## 5. 비용 최적화
|
|
|
|
### 월간 쿼터 배분 (70-20-10)
|
|
- Tavily: 700회 (기본)
|
|
- Brave: 200회 (다양성)
|
|
- Serper/Exa: 100회 (특수 목적)
|
|
|
|
### 예상 월 비용: $0.05
|
|
|
|
## 6. 구현 우선순위
|
|
|
|
1. **Phase 1**: Tavily + DuckDuckGo IA 통합
|
|
2. **Phase 2**: Brave 폴백 추가
|
|
3. **Phase 3**: Serper/Exa 조건부 라우팅
|
|
4. **Phase 4**: SearxNG 자체 호스팅
|
|
|
|
## 7. 핵심 차별점
|
|
|
|
- 다층 프로바이더로 안정성 확보
|
|
- 쿼리 타입별 최적 API 자동 선택
|
|
- 무료 한도 최대 활용으로 비용 최소화
|
|
- 캐싱으로 중복 검색 방지 |