PgvectorDocumentStore

PgvectorDocumentStore

Pgvector는 PostgreSQL의 확장 기능으로, 벡터 유사도 검색 능력을 더해줘요. ACID 준수, 특정 시점 복구(point-in-time recovery) 같은 PostgreSQL의 고전적인 기능 위에, 벡터를 사용한 정확(exact) 및 근사(approximate) 최근접 이웃 검색을 수행하는 능력을 더하죠.

자세한 내용은 pgvector 저장소를 참고하세요.

Pgvector Document Store는 임베딩 검색과 메타데이터 필터링을 지원해요.

출처: 문서

본문

항목 내용
API reference Pgvector
GitHub 링크 pgvector 통합

설치

pgvector가 있는 PostgreSQL 데이터베이스를 빠르게 구성하려면 Docker를 사용할 수 있어요:

docker run -d -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=postgres pgvector/pgvector:pg17

pgvector 설치에 대한 자세한 내용은 pgvector GitHub 저장소를 방문하세요.

Haystack에서 pgvector를 사용하려면 pgvector-haystack 통합 패키지를 설치하세요:

pip install pgvector-haystack

사용법

연결 문자열

PostgreSQL 데이터베이스에 대한 연결 문자열을 PG_CONN_STR 환경 변수에 정의하세요. 두 가지 형식을 지원해요.

URI 형식:

export PG_CONN_STR="postgresql://USER:***@HOST:PORT/DB_NAME"

키워드/값 형식:

export PG_CONN_STR="host=HOST port=PORT dbname=DB_NAME user=USER password=PASSWORD"

연결 URI의 특수 문자

URI 형식을 사용하면 비밀번호의 특수 문자를 퍼센트 인코딩해야 해요. 그렇지 않으면 연결 오류가 발생할 수 있어요. p=ssword 같은 비밀번호는 psycopg.OperationalError: [Errno -2] Name or service not known 오류를 일으키죠.

예를 들어 비밀번호가 p=ssword라면 연결 문자열은 다음과 같아야 해요:

export PG_CONN_STR="postgresql://postgres:***@localhost:5432/postgres"

또는 퍼센트 인코딩이 필요 없는 키워드/값 형식을 사용해도 돼요:

export PG_CONN_STR="host=localhost port=5432 dbname=postgres user=postgres password=p=ssword"

자세한 내용은 PostgreSQL 연결 문자열 문서를 참고하세요.

초기화

PostgreSQL 데이터베이스에 연결된 PgvectorDocumentStore 객체를 초기화하고 문서를 써 보세요:

from haystack_integrations.document_stores.pgvector import PgvectorDocumentStore
from haystack import Document

document_store = PgvectorDocumentStore(
    embedding_dimension=768,
    vector_function="cosine_similarity",
    recreate_table=True,
    search_strategy="hnsw",
)

document_store.write_documents(
    [
        Document(content="This is first", embedding=[0.1] * 768),
        Document(content="This is second", embedding=[0.3] * 768),
    ],
)
print(document_store.count_documents())

초기화 파라미터에 대해 더 알아보려면 API 문서를 보세요.

문서의 임베딩을 제대로 계산하려면 Document Embedder를 사용할 수 있어요(예: SentenceTransformersDocumentEmbedder).

지원하는 Retriever

  • PgvectorEmbeddingRetriever: Retriever에 제공된 쿼리 임베딩을 기반으로 Document Store에서 문서를 가져오는 임베딩 기반 Retriever예요.
  • PgvectorKeywordRetriever: Pgvector Document Store에서 쿼리와 일치하는 문서를 가져오는 키워드 기반 Retriever예요.

더 알아보기 (Learn more)