Sonamu 검색 API의 문제
Sonamu로 지식 베이스 앱을 만들고 있습니다:- ✅ “Sonamu는 TypeScript 프레임워크입니다” → 찾음
- ❌ “Sonamu는 Node.js API 라이브러리입니다” → 못 찾음 (키워드 다름)
- ❌ “Sonamu is a TS framework” → 못 찾음 (영어)
- ❌ “타입스크립트 프래임워크” → 못 찾음 (오타)
- 동의어 처리 안 됨
- 표현 방식이 달라지면 못 찾음
- 오타에 취약
- 의미는 같은데 단어가 다르면 실패
의미 기반 검색이 필요합니다
“TypeScript 프레임워크”와 “Node.js API 라이브러리”는 의미가 유사합니다. 키워드는 달라도 말이죠. 이런 의미를 컴퓨터가 이해하려면? → 임베딩(Embedding)임베딩이란?
임베딩은 텍스트를 고차원 숫자 배열(벡터)로 변환하는 과정입니다. 의미가 유사한 텍스트는 벡터 공간에서 가까운 위치에 배치됩니다. 핵심:- 숫자로 변환하면 거리 계산 가능
- 가까운 벡터 = 의미가 유사한 텍스트
- 먼 벡터 = 의미가 다른 텍스트
Sonamu에서의 흐름
Embedding 클래스
Sonamu는 임베딩을 쉽게 만들 수 있는Embedding 클래스를 제공합니다:
어떤 프로바이더를 선택할까?
Voyage AI vs OpenAI
Sonamu는 두 가지 임베딩 프로바이더를 지원합니다:| 항목 | Voyage AI | OpenAI |
|---|---|---|
| 한국어 성능 | ⭐⭐⭐⭐⭐ 최고 | ⭐⭐⭐⭐ 좋음 |
| 영어 성능 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 차원 | 1024 | 1536 |
| 최대 토큰 | 32,000 | 8,191 |
| 배치 크기 | 128 | 100 |
| 비대칭 임베딩 | ✅ (document/query 구분) | ❌ |
| Sonamu 추천 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
Sonamu 프로젝트 기준 선택
Voyage AI 추천:- ✅ 한국어 서비스 (한국어 성능 우수)
- ✅ 긴 문서 처리 (32,000 토큰)
- ✅ 검색 정확도 중요 (비대칭 임베딩)
- ✅ 글로벌 서비스 (다국어 균형)
- ✅ 이미 OpenAI API 사용 중
환경 설정
1. 패키지 설치
2. API 키 설정
- Voyage AI: https://www.voyageai.com/
- OpenAI: https://platform.openai.com/
Sonamu Model에서 사용하기
문서 저장 시 임베딩 생성
- 사용자가 POST /documents에 문서 업로드
- Sonamu API에서 Voyage AI로 임베딩 생성
- PostgreSQL에 텍스트 + 임베딩 함께 저장
검색 API (나중에 구현)
비대칭 임베딩 (Voyage AI)
Voyage AI는 문서와 쿼리를 구분하여 임베딩합니다.왜 구분할까?
문서 (document):- 긴 텍스트
- 상세 정보
- 저장 목적
- 짧은 텍스트
- 검색어
- 검색 목적
Sonamu에서 사용
배치 처리
여러 문서를 한 번에 처리할 때:- Voyage AI: 128개씩
- OpenAI: 100개씩
