TextEmbeddingRetriever
TextEmbeddingRetriever
TextEmbeddingRetriever 는 임베딩 기반 리트리버를 텍스트 임베더와 함께 하나의 컴포넌트로 묶어, 텍스트 질의를 그대로 받는 리트리버예요. 내부적으로 질의를 임베딩으로 변환한 뒤 문서를 관련성 점수 순으로 반환해요.
출처: 문서
본문
개요 (Overview)
TextEmbeddingRetriever 는 텍스트 임베더와 임베딩 기반 리트리버를 단일 컴포넌트로 묶어요. 일반 텍스트 질의를 받아 내부에서 임베딩으로 변환하고, 관련성 점수 순으로 정렬된 문서를 반환해요.
임베딩 기반 리트리버가 들어갈 자리라면 어디든 쓸 수 있어요: RAG 파이프라인에서 프롬프트 빌더 앞, 의미 검색 파이프라인의 마지막 컴포넌트, 또는 MultiRetriever 안의 드롭인 리트리버로요.
사용법 (Usage)
단독으로 쓰기
이 페이지의 예시는 sentence-transformers-haystack 패키지의 Sentence Transformers 임베더를 사용해요. 예시를 실행하려면 설치하세요:
pip install sentence-transformers-haystack
from haystack import Document
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.document_stores.types import DuplicatePolicy
from haystack_integrations.components.embedders.sentence_transformers import (
SentenceTransformersDocumentEmbedder,
SentenceTransformersTextEmbedder,
)
from haystack.components.retrievers import (
InMemoryEmbeddingRetriever,
TextEmbeddingRetriever,
)
from haystack.components.writers import DocumentWriter
documents = [
Document(
content="Renewable energy is energy that is collected from renewable resources.",
),
Document(
content="Solar energy is a type of green energy that is harnessed from the sun.",
),
Document(
content="Wind energy is another type of green energy that is generated by wind turbines.",
),
Document(
content="Geothermal energy is heat that comes from the sub-surface of the earth.",
),
]
doc_store = InMemoryDocumentStore()
doc_embedder = SentenceTransformersDocumentEmbedder(
model="sentence-transformers/all-MiniLM-L6-v2",
)
doc_writer = DocumentWriter(document_store=doc_store, policy=DuplicatePolicy.SKIP)
doc_writer.run(documents=doc_embedder.run(documents)["documents"])
retriever = TextEmbeddingRetriever(
retriever=InMemoryEmbeddingRetriever(document_store=doc_store, top_k=2),
text_embedder=SentenceTransformersTextEmbedder(
model="sentence-transformers/all-MiniLM-L6-v2",
),
)
result = retriever.run(query="Geothermal energy")
for doc in result["documents"]:
print(f"Content: {doc.content}, Score: {doc.score}")
MultiRetriever의 일부로 쓰기
TextEmbeddingRetriever 는 대부분 MultiRetriever 안의 리트리버 중 하나로 쓰여요:
from haystack_integrations.components.embedders.sentence_transformers import (
SentenceTransformersTextEmbedder,
)
from haystack.components.retrievers import (
InMemoryBM25Retriever,
InMemoryEmbeddingRetriever,
)
from haystack.components.retrievers import MultiRetriever, TextEmbeddingRetriever
retriever = MultiRetriever(
retrievers={
"bm25": InMemoryBM25Retriever(document_store=doc_store),
"embedding": TextEmbeddingRetriever(
retriever=InMemoryEmbeddingRetriever(document_store=doc_store),
text_embedder=SentenceTransformersTextEmbedder(
model="sentence-transformers/all-MiniLM-L6-v2",
),
),
},
)
더 알아보기 (Learn more)
- MultiRetriever — 여러 리트리버를 묶는 컴포넌트
- ChatPromptBuilder — RAG 파이프라인에서의 다음 단계
- Retrievers API 참조
- GitHub 소스