HuggingFaceAPITextEmbedder
使用此组件通过各种 Hugging Face API 嵌入字符串。
| pipeline 中的最常见位置 | 在查询/RAG 管道中的嵌入 检索器 之前 |
| 必需的初始化变量 | "api_type": 要使用的 Hugging Face API 类型 "api_params": 一个包含以下键之一的字典 - model: Hugging Face 模型 ID。当api_type 是SERVERLESS_INFERENCE_API 时必需。或 -url: 推理终结点的 URL。当api_type 是INFERENCE_ENDPOINTS 或TEXT_EMBEDDINGS_INFERENCE 时必需。."token": Hugging Face API 令牌。可以通过 HF_API_TOKEN 或HF_TOKEN 环境变量设置。 |
| 强制运行变量 | “text”: 一个字符串 |
| 输出变量 | “embedding”: 一个浮点数列表 |
| API 参考 | Embedders (嵌入器) |
| GitHub 链接 | https://github.com/deepset-ai/haystack/blob/main/haystack/components/embedders/hugging_face_api_text_embedder.py |
概述
HuggingFaceAPITextEmbedder 可用于通过不同的 Hugging Face API 嵌入字符串。
此组件应用于嵌入纯文本。要嵌入文档列表,请使用
HuggingFaceAPIDocumentEmbedder。
该组件默认使用HF_API_TOKEN 环境变量。否则,您可以在初始化时使用 token 传入 Hugging Face API 令牌——请参阅下面的代码示例。
令牌是必需的
- 如果您使用无服务器推理 API,或者
- 如果您使用推理终结点。
用法
与其他文本嵌入器类似,此组件允许添加前缀(和后缀)以包含指令。
有关更精细的细节,请参阅组件的 API 参考。
单独使用
使用免费无服务器推理 API
以前称为(免费)Hugging Face 推理 API,此 API 允许您快速尝试 Hugging Face Hub 上托管的许多模型,将推理卸载到 Hugging Face 服务器。它有速率限制,不适合生产环境。
要使用此 API,您需要一个 免费的 Hugging Face 令牌。
嵌入器期望model 在api_params.
from haystack.components.embedders import HuggingFaceAPITextEmbedder
from haystack.utils import Secret
text_embedder = HuggingFaceAPITextEmbedder(api_type="serverless_inference_api",
api_params={"model": "BAAI/bge-small-en-v1.5"},
token=Secret.from_token("<your-api-key>"))
print(text_embedder.run("I love pizza!"))
# {'embedding': [0.017020374536514282, -0.023255806416273117, ...]}
使用付费推理终结点
在这种情况下,Hugging Face 会部署模型的私有实例,您通常按小时付费。
要了解如何启动推理终结点,请访问 Hugging Face 文档。
此外,在这种情况下,您需要提供您的 Hugging Face 令牌。
嵌入器期望url 的您的终结点在api_params.
from haystack.components.embedders import HuggingFaceAPITextEmbedder
from haystack.utils import Secret
text_embedder = HuggingFaceAPITextEmbedder(api_type="inference_endpoints",
api_params={"model": "BAAI/bge-small-en-v1.5"},
token=Secret.from_token("<your-api-key>"))
print(text_embedder.run("I love pizza!"))
# {'embedding': [0.017020374536514282, -0.023255806416273117, ...]}
使用自托管文本嵌入推理 (TEI)
Hugging Face Text Embeddings Inference 是一个用于高效部署和提供文本嵌入模型的工具包。
虽然它支持无服务器推理 API 和推理终结点的最新版本,但也可以通过 Docker 轻松地在本地使用。
例如,您可以如下运行 TEI 容器
model=BAAI/bge-large-en-v1.5
revision=refs/pr/5
volume=$PWD/data # share a volume with the Docker container to avoid downloading weights every run
docker run --gpus all -p 8080:80 -v $volume:/data --pull always ghcr.io/huggingface/text-embeddings-inference:1.2 --model-id $model --revision $revision
有关更多信息,请参阅 官方 TEI 仓库。
嵌入器期望url 的您的 TEI 实例在api_params.
from haystack.components.embedders import HuggingFaceAPITextEmbedder
from haystack.utils import Secret
text_embedder = HuggingFaceAPITextEmbedder(api_type="text_embeddings_inference",
api_params={"url": "https://:8080"})
print(text_embedder.run("I love pizza!"))
# {'embedding': [0.017020374536514282, -0.023255806416273117, ...],
在 pipeline 中
from haystack import Document
from haystack import Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.embedders import HuggingFaceAPITextEmbedder, HuggingFaceAPIDocumentEmbedder
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
document_store = InMemoryDocumentStore(embedding_similarity_function="cosine")
documents = [Document(content="My name is Wolfgang and I live in Berlin"),
Document(content="I saw a black horse running"),
Document(content="Germany has many big cities")]
document_embedder = HuggingFaceAPIDocumentEmbedder(api_type="serverless_inference_api",
api_params={"model": "BAAI/bge-small-en-v1.5"})
documents_with_embeddings = document_embedder.run(documents)['documents']
document_store.write_documents(documents_with_embeddings)
text_embedder = HuggingFaceAPITextEmbedder(api_type="serverless_inference_api",
api_params={"model": "BAAI/bge-small-en-v1.5"})
query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", text_embedder)
query_pipeline.add_component("retriever", InMemoryEmbeddingRetriever(document_store=document_store))
query_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
query = "Who lives in Berlin?"
result = query_pipeline.run({"text_embedder":{"text": query}})
print(result['retriever']['documents'][0])
# Document(id=..., content: 'My name is Wolfgang and I live in Berlin', ...)
更新于 大约 1 年前
