- skill-search 대신 rb8001 내부 구현으로 변경 - 네트워크 홉 감소로 성능 향상 - 구현 위치: rb8001/app/services/search_service.py
2.3 KiB
2.3 KiB
로빙 검색 API 통합 전략
작성일: 2025-09-09
작성자: happybell80 & Claude
관련 서비스: rb8001 (SearchService 내부 구현)
핵심 기술: 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. 쿼리 라우팅 규칙
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 내부 SearchService
↓
[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. 구현 위치: rb8001/app/services/search_service.py
별도 스킬 서비스 대신 rb8001 내부 SearchService로 구현
- 의도 분류 후 직접 처리 (네트워크 홉 감소)
- Phase 1: Tavily + DuckDuckGo 통합
- Phase 2: 복잡도 증가 시 skill-search 분리 검토
7. 핵심 차별점
- 다층 프로바이더로 안정성 확보
- 쿼리 타입별 최적 API 자동 선택
- 무료 한도 최대 활용으로 비용 최소화
- 캐싱으로 중복 검색 방지