ChromaEmbeddingRetriever
这是与 Chroma Document Store 兼容的 embedding Retriever。
| pipeline 中的最常见位置 | 1. 在 Text Embedder 之后,在 RAG pipeline 的 PromptBuilder 之前 2. 语义搜索 pipeline 中的最后一个组件 3. 在 Text Embedder 之后,在 extractive QA pipeline 的 ExtractiveReader 之前 |
| 必需的初始化变量 | "document_store": ChromaDocumentStore 实例 |
| 强制运行变量 | "query_embedding": 浮点数列表 |
| 输出变量 | “documents”:文档列表 |
| API 参考 | Chroma |
| GitHub 链接 | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/chroma |
概述
该ChromaEmbeddingRetriever 是一个基于 embedding 的 Retriever,兼容ChromaDocumentStore。它会比较查询和文档的 embedding,并根据结果从ChromaDocumentStore 中提取与查询最相关的文档。
查询在传递给此组件之前需要进行 embedding。例如,您可以使用文本 embedder 组件。
除了query_embedding 之外,ChromaEmbeddingRetriever 还接受其他可选参数,包括top_k(要检索的最大文档数)和filters(用于缩小搜索范围)。
用法
单独使用
此 Retriever 需要ChromaDocumentStore 和索引的文档才能运行。
from haystack_integrations.document_stores.chroma import ChromaDocumentStore
from haystack_integrations.components.retrievers.chroma import ChromaEmbeddingRetriever
document_store = ChromaDocumentStore()
retriever = ChromaEmbeddingRetriever(document_store=document_store)
# example run query
retriever.run(query_embedding=[0.1]*384)
在 pipeline 中
以下是如何在 pipeline 中使用ChromaEmbeddingRetriever。在此示例中,您将创建两个 pipeline:一个索引 pipeline 和一个查询 pipeline。
在索引 pipeline 中,文档会传递给 Document Embedder,然后写入 Document Store。
然后,在查询 pipeline 中,我们使用文本 embedder 获取输入查询的向量表示,该表示随后将传递给ChromaEmbeddingRetriever 以获取结果。
import os
from pathlib import Path
from haystack import Pipeline
from haystack.dataclasses import Document
from haystack.components.writers import DocumentWriter
# Note: the following requires a "pip install sentence-transformers"
from haystack.components.embedders import SentenceTransformersDocumentEmbedder, SentenceTransformersTextEmbedder
from haystack_integrations.document_stores.chroma import ChromaDocumentStore
from haystack_integrations.components.retrievers.chroma import ChromaEmbeddingRetriever
from sentence_transformers import SentenceTransformer
# Chroma is used in-memory so we use the same instances in the two pipelines below
document_store = ChromaDocumentStore()
documents = [
Document(content="This contains variable declarations", meta={"title": "one"}),
Document(content="This contains another sort of variable declarations", meta={"title": "two"}),
Document(content="This has nothing to do with variable declarations", meta={"title": "three"}),
Document(content="A random doc", meta={"title": "four"}),
]
indexing = Pipeline()
indexing.add_component("embedder", SentenceTransformersDocumentEmbedder())
indexing.add_component("writer", DocumentWriter(document_store))
indexing.connect("embedder.documents", "writer.documents")
indexing.run({"embedder": {"documents": documents}})
querying = Pipeline()
querying.add_component("query_embedder", SentenceTransformersTextEmbedder())
querying.add_component("retriever", ChromaEmbeddingRetriever(document_store))
querying.connect("query_embedder.embedding", "retriever.query_embedding")
results = querying.run({"query_embedder": {"text": "Variable declarations"}})
for d in results["retriever"]["documents"]:
print(d.meta, d.score)
其他参考资料
🧑🍳 食谱:使用 Chroma 进行 RAG 和索引
更新于 大约 1 年前
