SupabasePgvectorEmbeddingRetriever
SupabasePgvectorEmbeddingRetriever
SupabasePgvectorEmbeddingRetriever 는 SupabasePgvectorDocumentStore 와 호환되는 임베딩 기반 리트리버예요. 질의 임베딩과 문서 임베딩을 비교해 벡터 유사도 기준으로 질의와 가장 관련 있는 문서를 가져와요.
출처: 문서
본문
개요 (Overview)
SupabasePgvectorEmbeddingRetriever 는 PgvectorEmbeddingRetriever 를 SupabasePgvectorDocumentStore 와 함께 쓰도록 맞춘 얇은 래퍼예요. 질의와 문서 임베딩을 비교해 벡터 유사도 기준으로 질의와 가장 관련 있는 문서를 가져와요.
파이프라인에서 이 리트리버를 쓸 때는 임베딩이 준비되어 있어야 해요. 인덱싱 파이프라인에 Document Embedder를, 쿼리 파이프라인에 Text Embedder를 추가하세요.
query_embedding 외에 이 리트리버는 선택 파라미터로 top_k(가져올 최대 문서 수), 검색 범위를 좁히는 filters, 그리고 Document Store에 설정된 유사도 함수를 오버라이드하는 vector_function 을 받아요.
임베딩 검색에 영향을 주는 몇 가지 파라미터는 SupabasePgvectorDocumentStore 를 초기화할 때 정의해야 해요: embedding_dimension, vector_function, 그리고 search_strategy("exact_nearest_neighbor" 또는 "hnsw").
설치 (Installation)
pip install supabase-haystack
이 페이지의 예시는 sentence-transformers-haystack 패키지의 Sentence Transformers 임베더를 사용해요. 예시를 실행하려면 설치하세요:
pip install sentence-transformers-haystack
사용법 (Usage)
단독으로 쓰기
이 리트리버는 SupabasePgvectorDocumentStore 와 인덱싱된 문서가 있어야 동작해요. Supabase 데이터베이스 연결 문자열로 SUPABASE_DB_URL 환경 변수를 설정하세요.
from haystack_integrations.document_stores.supabase import SupabasePgvectorDocumentStore
from haystack_integrations.components.retrievers.supabase import (
SupabasePgvectorEmbeddingRetriever,
)
document_store = SupabasePgvectorDocumentStore(embedding_dimension=768)
retriever = SupabasePgvectorEmbeddingRetriever(document_store=document_store)
# using a fake vector to keep the example simple
retriever.run(query_embedding=[0.1] * 768)
파이프라인에서 쓰기
from haystack import Document, Pipeline
from haystack.document_stores.types import DuplicatePolicy
from haystack_integrations.components.embedders.sentence_transformers import (
SentenceTransformersTextEmbedder,
SentenceTransformersDocumentEmbedder,
)
from haystack_integrations.document_stores.supabase import SupabasePgvectorDocumentStore
from haystack_integrations.components.retrievers.supabase import (
SupabasePgvectorEmbeddingRetriever,
)
document_store = SupabasePgvectorDocumentStore(
embedding_dimension=768,
vector_function="cosine_similarity",
recreate_table=True,
)
documents = [
Document(content="There are over 7,000 languages spoken around the world today."),
Document(
content="Elephants have been observed to behave in a way that indicates a high level of self-awareness, such as recognizing themselves in mirrors.",
),
Document(
content="In certain parts of the world, like the Maldives, Puerto Rico, and San Diego, you can witness the phenomenon of bioluminescent waves.",
),
]
document_embedder = SentenceTransformersDocumentEmbedder()
documents_with_embeddings = document_embedder.run(documents)
document_store.write_documents(
documents_with_embeddings.get("documents"),
policy=DuplicatePolicy.OVERWRITE,
)
query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", SentenceTransformersTextEmbedder())
query_pipeline.add_component(
"retriever",
SupabasePgvectorEmbeddingRetriever(document_store=document_store),
)
query_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
query = "How many languages are there?"
result = query_pipeline.run({"text_embedder": {"text": query}})
print(result["retriever"]["documents"][0])
더 알아보기 (Learn more)
- SupabaseDocumentStore —
SupabasePgvectorDocumentStore가 포함된 문서 저장소 - PgvectorEmbeddingRetriever — 이 리트리버의 기반
- PromptBuilder, TransformersExtractiveReader
- Supabase API 참조
- GitHub 저장소