文档API 参考📓 教程🧑‍🍳 食谱🤝 集成💜 Discord🎨 Studio
文档

PgvectorEmbeddingRetriever

一个与 Pgvector Document Store 兼容的基于嵌入的检索器。

pipeline 中的最常见位置1. 在 Text Embedder 之后,在 RAG pipeline 的 PromptBuilder 之前 2. 语义搜索 pipeline 中的最后一个组件 3. 在 Text Embedder 之后,在 extractive QA pipeline 的 ExtractiveReader 之前
必需的初始化变量"document_store": 一个 PgvectorDocumentStore 实例
强制运行变量“query_embedding”: 代表查询的向量(一个浮点数列表)
输出变量“documents”:文档列表
API 参考Pgvector
GitHub 链接https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/pgvector

概述

PgvectorEmbeddingRetriever 是一个基于嵌入的检索器,与PgvectorDocumentStore 兼容。它比较查询和文档的嵌入,并根据结果从PgvectorDocumentStore 中检索与查询最相关的文档。

使用在您的 Pipeline 中使用 PgvectorEmbeddingRetriever,请确保查询和文档嵌入都可用。您可以通过在索引 Pipeline 中添加 Document Embedder,并在查询 Pipeline 中添加 Text Embedder 来实现此目的。

除了query_embedding 之外,PgvectorEmbeddingRetriever 还接受其他可选参数,包括top_k(要检索的文档的最大数量)和filters(用于缩小搜索范围)。

在初始化相应的PgvectorDocumentStore 初始化时使用的参数,这些参数包括嵌入维度、向量函数以及其他与搜索策略(精确最近邻或 HNSW)相关的参数。

安装

要快速设置带有 pgvector 的 PostgreSQL 数据库,您可以使用 Docker

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

有关安装 pgvector 的更多信息,请访问 pgvector GitHub 存储库

要将 pgvector 与 Haystack 一起使用,请安装pgvector-haystack 集成

pip install pgvector-haystack

用法

单独使用

此检索器需要PgvectorDocumentStore 并为运行索引的文档。

import os
from haystack_integrations.document_stores.pgvector import PgvectorDocumentStore
from haystack_integrations.components.retrievers.pgvector import PgvectorEmbeddingRetriever

os.environ["PG_CONN_STR"] = "postgresql://postgres:postgres@localhost:5432/postgres"

document_store = PgvectorDocumentStore()
retriever = PgvectorEmbeddingRetriever(document_store=document_store)

# using a fake vector to keep the example simple
retriever.run(query_embedding=[0.1]*768)

在 Pipeline 中

import os
from haystack.document_stores import DuplicatePolicy
from haystack import Document, Pipeline
from haystack.components.embedders import SentenceTransformersTextEmbedder, SentenceTransformersDocumentEmbedder

from haystack_integrations.document_stores.pgvector import PgvectorDocumentStore
from haystack_integrations.components.retrievers.pgvector import PgvectorEmbeddingRetriever

os.environ["PG_CONN_STR"] = "postgresql://postgres:postgres@localhost:5432/postgres"

document_store = PgvectorDocumentStore(
    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()  
document_embedder.warm_up()
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", PgvectorEmbeddingRetriever(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])

相关链接

请查看 GitHub 仓库或我们的文档中的 API 参考。