pgvector는 PostgreSQL 관계형 데이터베이스 관리 시스템을 위한 오픈소스 확장 프로그램으로, 벡터 유사성 검색 지원을 추가한다. 이를 통해 사용자는 고차원 벡터 임베딩을 PostgreSQL 테이블에 직접 저장하고, 의미적으로 유사한 레코드를 찾기 위한 효율적인 최근접 이웃 쿼리를 수행할 수 있다. 이 확장 프로그램은 2021년 4월에 처음 출시되었으며, 이후 기존 데이터베이스 워크플로우에 벡터 검색을 통합하는 데 널리 채택된 도구가 되었고, 특히 인공지능 및 머신러닝을 포함하는 애플리케이션에서 두드러진다.
이 확장 프로그램은 계층적 탐색 가능한 작은 세계(HNSW) 그래프와 역파일 및 곱 양자화(IVFFlat)를 포함한 근사 최근접 이웃 알고리즘을 구현하여, 대규모 벡터 컬렉션에 대한 빠른 유사성 검색을 가능하게 한다. PostgreSQL의 성숙한 트랜잭션 및 인덱싱 인프라를 활용함으로써, pgvector는 벡터 검색을 전통적인 관계형 쿼리, 메타데이터 필터링 및 하이브리드 검색 워크플로우와 결합해야 하는 개발자에게 친숙한 SQL 인터페이스를 제공한다.
아키텍처 및 기능
pgvector는 네이티브 PostgreSQL 확장 프로그램으로 작동하며, 별도의 서비스로 실행되는 대신 데이터베이스 엔진에 직접 통합된다. 이는 구성 가능한 차원(일반적으로 수백에서 수천 범위)을 가진 부동 소수점 숫자 배열을 저장할 수 있는 새로운 vector 데이터 유형을 도입한다. 확장 프로그램은 정확한 및 근사 최근접 이웃 검색을 모두 지원하며, 후자는 HNSW 그래프 또는 IVFFlat 인덱싱을 사용하여 검색 속도와 재현율 정확도 간의 균형을 맞춘다.
pgvector의 핵심 설계 원칙은 표준 SQL 연산과의 호환성이다. 사용자는 벡터 열을 생성하고, 딥러닝 모델에서 생성된 임베딩을 삽입하며, 유클리드 거리용 <->, 코사인 거리용 <=>, 음의 내적용 <#>과 같은 친숙한 연산자를 사용하여 쿼리할 수 있다. 확장 프로그램은 또한 쿼리를 가속화하기 위한 벡터 열 인덱싱을 지원하며, 부분 인덱스, 병렬 쿼리 실행 및 고가용성을 위한 복제와 같은 PostgreSQL의 내장 기능과 결합될 수 있다.
검색 증강 생성
pgvector의 가장 일반적인 사용 사례 중 하나는 검색 증강 생성(RAG) 파이프라인으로, 이는 대규모 언어 모델의 응답을 도메인 특화 지식으로 강화한다. 일반적인 RAG 설정에서 텍스트 문서는 청크로 분할되고, 각 청크는 신경망 모델을 사용하여 임베딩으로 변환되며, 결과 벡터는 pgvector가 활성화된 PostgreSQL 테이블에 저장된다. 사용자가 프롬프트를 제출하면 시스템은 프롬프트의 임베딩을 계산하고, pgvector에 가장 유사한 문서 청크를 쿼리하며, 해당 청크를 언어 모델에 추가 컨텍스트로 전달한다.
이 접근 방식은 조직이 기본 모델을 재훈련하지 않고도 독점적 또는 최신 정보를 활용하는 질의응답 시스템, 챗봇 및 지식 어시스턴트를 구축할 수 있게 한다. pgvector가 벡터 검색과 함께 메타데이터 필터링을 처리하는 능력은 RAG에서 특히 가치가 있으며, 검색 중 날짜 범위, 문서 유형 또는 접근 권한과 같은 제약 조건을 적용할 수 있다.
전용 벡터 데이터베이스와의 비교
pgvector는 Milvus, Pinecone 및 Weaviate와 같은 특수 벡터 데이터베이스 시스템과 아마존 웹 서비스, 애저 및 구글 클라우드와 같은 클라우드 제공업체의 벡터 검색 기능과 경쟁한다. 이러한 독립형 시스템과 달리 pgvector는 별도의 인프라 구성 요소를 배포할 필요가 없으며, 많은 조직이 기본 데이터 저장소로 이미 운영하는 기존 PostgreSQL 인스턴스 내에서 실행된다. 이는 운영 복잡성을 줄이고 소스 데이터가 있는 동일한 데이터베이스에서 벡터 검색을 수행할 수 있게 하여 시스템 간 데이터 동기화의 필요성을 제거한다.
그러나 전용 벡터 데이터베이스는 분산 샤딩에 대한 내장 지원, 더 정교한 양자화 기술 또는 특정 임베딩 모델 생태계와의 더 긴밀한 통합과 같은 pgvector에 없는 추가 기능을 제공하는 경우가 많다. 수십억 개의 벡터를 초과하는 매우 대규모 배포의 경우 특수 시스템이 더 나은 성능이나 확장성을 제공할 수 있다. 그럼에도 불구하고 pgvector의 단순성과 SQL과의 긴밀한 결합은 사용 편의성과 데이터 일관성을 우선시하는 스타트업 및 기업에서 인기 있는 선택이 되게 했다.
채택 및 생태계
이 확장 프로그램은 출시 이후 상당한 traction을 얻었다. PostgreSQL 커뮤니티에서 유지 관리되며 주요 Linux 배포판 및 macOS용 표준 패키지 관리자를 통해 사용할 수 있다. 아마존 웹 서비스 RDS, Google Cloud SQL 및 애저 Database for PostgreSQL을 포함한 여러 관리형 PostgreSQL 제공업체가 pgvector를 지원되는 확장 프로그램으로 제공하여, 데이터베이스를 자체 호스팅하지 않으려는 사용자에게 접근성을 높인다.
pgvector는 종종 오픈AI, 앤트로픽 및 구글 딥마인드와 같은 조직의 임베딩 모델과 BERT 및 GPT 계열의 오픈소스 모델과 함께 사용된다. 확장 프로그램의 문서는 Python, JavaScript 및 Go를 포함한 인기 프로그래밍 언어에서 임베딩 생성 및 유사성 검색 수행 예제를 제공한다. 이러한 생태계 지원은 전자상거래 추천 엔진부터 과학 연구 및 기업 검색 애플리케이션에 이르는 분야에서 채택에 기여했다.
제한 사항 및 고려 사항
pgvector는 강력한 도구이지만 사용자가 알아야 할 특정 제한 사항이 있다. 확장 프로그램은 모든 벡터 연산을 기본적으로 지원하지 않으며, 예를 들어 일부 전용 벡터 데이터베이스에서 사용할 수 있는 벡터 산술 또는 클러스터링을 위한 내장 함수가 부족하다. 근사 최근접 이웃 검색의 성능은 IVFFlat의 목록 수 또는 HNSW의 M 및 ef_construction 값과 같은 선택된 인덱스 매개변수에 크게 의존하며, 이러한 매개변수 튜닝은 특정 데이터 세트에 대한 실험이 필요하다.
또한 pgvector는 벡터를 테이블의 열에 저장하므로, 매우 큰 벡터 컬렉션은 상당한 저장 공간을 소비할 수 있다. 확장 프로그램은 기본적으로 곱 양자화와 같은 고급 압축 기술을 구현하지 않지만, 사용자는 차원 축소 또는 이진 양자화를 수동으로 사용할 수 있다. 하루에 수백만 개의 벡터를 실시간으로 수집해야 하는 워크로드의 경우 트랜잭션 데이터베이스에서 인덱스를 유지 관리하는 오버헤드가 병목 현상이 될 수 있으며, 일부 사용자는 PostgreSQL을 시스템 오브 레코드로 유지하면서 벡터 검색을 전용 시스템에 오프로드하게 된다.