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예요.