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

HuggingFaceTEIRanker

使用此组件通过 Text Embeddings Inference (TEI) API 端点,根据文档与查询的相似性对文档进行排名。

pipeline 中的最常见位置在查询管道中,紧随返回文档列表的组件之后,例如 Retriever
必需的初始化变量“url”: TEI 重排序服务的基 URL(例如,“https://api.example.com")。
强制运行变量“query”: 查询字符串

“documents”: 文档对象列表
输出变量“documents”: 分组的文档列表
API 参考Rankers (排序器)
GitHub 链接https://github.com/deepset-ai/haystack/blob/main/haystack/components/rankers/hugging_face_tei.py

概述

HuggingFaceTEIRanker 根据与指定查询的语义相关性对文档进行排名。

您可以使用以下任一 Text Embeddings Inference (TEI) API 端点:

您还可以指定top_k 参数来设置要返回的文档的最大数量。

根据您的 TEI 服务器配置,您可能还需要 Hugging Face token 进行授权。您可以通过设置HF_API_TOKENHF_TOKEN 环境变量,或使用 Haystack 的 Secret management 来设置。

用法

单独使用

您可以使用HuggingFaceTEIRanker 在管道之外,根据您的查询对文档进行排序。

此示例使用HuggingFaceTEIRanker 对两个简单文档进行排名。要运行 Ranker,请传递一个查询,提供文档,并在 top_k 参数中设置要返回的文档数量。top_k 参数中设置要返回的文档数量。

from haystack import Document
from haystack.components.rankers import HuggingFaceTEIRanker
from haystack.utils import Secret

reranker = HuggingFaceTEIRanker(
    url="https://:8080",
    top_k=5,
    timeout=30,
    token=Secret.from_token("my_api_token")
)

docs = [Document(content="The capital of France is Paris"), Document(content="The capital of Germany is Berlin")]

result = reranker.run(query="What is the capital of France?", documents=docs)

ranked_docs = result["documents"]
print(ranked_docs)
>> {'documents': [Document(id=..., content: 'the capital of France is Paris', score: 0.9979767),
>>                Document(id=..., content: 'the capital of Germany is Berlin', score: 0.13982213)]}

在 pipeline 中

HuggingFaceTEIRanker 在查询管道中最有效,因为它是在 Retriever 之后使用的。

以下是一个管道的示例,该管道使用InMemoryDocumentStore 基于关键字搜索(使用InMemoryBM25Retriever)设置要排名的文档数量。然后,它使用HuggingFaceTEIRanker 根据检索到的文档与查询的相似性对它们进行排名。该管道使用 Ranker 的默认设置。

from haystack import Document, Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
from haystack.components.rankers import HuggingFaceTEIRanker

docs = [Document(content="Paris is in France"), 
        Document(content="Berlin is in Germany"),
        Document(content="Lyon is in France")]
document_store = InMemoryDocumentStore()
document_store.write_documents(docs)

retriever = InMemoryBM25Retriever(document_store = document_store)
ranker = HuggingFaceTEIRanker(url="https://:8080")
ranker.warm_up()

document_ranker_pipeline = Pipeline()
document_ranker_pipeline.add_component(instance=retriever, name="retriever")
document_ranker_pipeline.add_component(instance=ranker, name="ranker")

document_ranker_pipeline.connect("retriever.documents", "ranker.documents")

query = "Cities in France"
document_ranker_pipeline.run(data={"retriever": {"query": query, "top_k": 3}, 
                                   "ranker": {"query": query, "top_k": 2}})