AmazonBedrockDocumentImageEmbedder
AmazonBedrockDocumentImageEmbedder 使用 Amazon Bedrock API 提供的模型来计算文档的图像嵌入。它将获得的向量存储在每个文档的嵌入字段中。
| pipeline 中的最常见位置 | 在索引管道中的 DocumentWriter 之前 |
| 必需的初始化变量 | "model": 要使用的多模态嵌入模型。 "aws_access_key_id": AWS 访问密钥 ID。可以使用 AWS_ACCESS_KEY_ID 环境变量设置。"aws_secret_access_key": AWS 密钥访问密钥。可以使用 AWS_SECRET_ACCESS_KEY 环境变量设置。"aws_region_name": AWS 区域名称。可以使用 AWS_DEFAULT_REGION 环境变量设置。 |
| 强制运行变量 | "documents": 文档列表,其中包含一个包含图像文件路径的 meta 字段 |
| 输出变量 | "documents": 文档列表(已添加 embedding) |
| API 参考 | Amazon Bedrock |
| GitHub 链接 | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/amazon_bedrock |
概述
Amazon Bedrock 是一项全托管服务,可通过统一的 API 访问基础模型。
AmazonBedrockDocumentImageEmbedder 期望一个包含图像或 PDF 文件路径的文档列表,该路径位于元字段中。可以使用file_path_meta_field 初始化参数指定。
嵌入器会高效地加载图像,使用选定的 Bedrock 模型计算嵌入,并将每个嵌入存储在embedding 字段中。
支持的模型有:amazon.titan-embed-image-v1, cohere.embed-english-v3,以及cohere.embed-multilingual-v3.
AmazonBedrockDocumentImageEmbedder 通常用于索引管道。在检索时,您需要在使用的 Embedding Retriever 之前,使用相同的模型与AmazonBedrockTextEmbedder 来嵌入查询。
安装
要开始使用此集成与 Haystack,请使用以下命令安装软件包:
pip install amazon-bedrock-haystack
身份验证
AmazonBedrockDocumentImageEmbedder 使用 AWS 进行身份验证。您可以直接将凭证作为参数提供给组件,或者使用 AWS CLI 通过 IAM 进行身份验证。有关如何设置 IAM 身份策略的更多信息,请参阅 官方文档。
要初始化 AmazonBedrockDocumentImageEmbedder 并提供凭证进行身份验证,请提供 model 名称,以及 aws_access_key_id, aws_secret_access_key 和 aws_region_name。其他参数是可选的,您可以在我们的 API 参考 中查看它们。
模型特定参数
尽管 Haystack 提供了统一的接口,但 Bedrock 提供的每个模型都可以接受特定的参数。您可以在初始化时传递这些参数。
- Amazon Titan:使用
embeddingConfig来控制嵌入行为。 - Cohere v3:使用
embedding_types来为图像选择单一的嵌入类型。
from haystack_integrations.components.embedders.amazon_bedrock import AmazonBedrockDocumentImageEmbedder
embedder = AmazonBedrockDocumentImageEmbedder(
model="cohere.embed-english-v3",
embedding_types=["float"] # single value only
)
请注意,此组件仅支持 一个 值在embedding_types 中。传递多个值会引发错误。
用法
单独使用
import os
from haystack import Document
from haystack_integrations.components.embedders.amazon_bedrock import AmazonBedrockDocumentImageEmbedder
os.environ["AWS_ACCESS_KEY_ID"] = "..."
os.environ["AWS_SECRET_ACCESS_KEY"] = "..."
os.environ["AWS_DEFAULT_REGION"] = "us-east-1" # example
# Point Documents to image/PDF files via metadata (default key: "file_path")
documents = [
Document(content="A photo of a cat", meta={"file_path": "cat.jpg"}),
Document(content="Invoice page", meta={"file_path": "invoice.pdf", "mime_type": "application/pdf", "page_number": 1}),
]
embedder = AmazonBedrockDocumentImageEmbedder(
model="amazon.titan-embed-image-v1",
image_size=(1024, 1024), # optional downscaling
)
result = embedder.run(documents=documents)
embedded_docs = result["documents"]
在 pipeline 中
在此示例中,我们可以看到一个包含 3 个组件的索引管道
ImageFileToDocument转换器,它创建空文档,并在 meta.file_path 字段;AmazonBedrockDocumentImageEmbedder,它加载图像、计算嵌入并将其存储在文档中;DocumentWriter,它将文档写入InMemoryDocumentStore.
还有一个多模态检索管道,由一个AmazonBedrockTextEmbedder(使用与之前相同的模型)和一个InMemoryEmbeddingRetriever.
from haystack import Document, Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.writers import DocumentWriter
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
from haystack_integrations.components.embedders.amazon_bedrock import (
AmazonBedrockDocumentImageEmbedder,
AmazonBedrockTextEmbedder,
)
# Document store using vector similarity for retrieval
document_store = InMemoryDocumentStore(embedding_similarity_function="cosine")
# Sample corpus with file paths in metadata
documents = [
Document(content="A sketch of a horse", meta={"file_path": "horse.png"}),
Document(content="A city map", meta={"file_path": "map.jpg"}),
]
# Indexing pipeline: image embeddings -> write to store
indexing = Pipeline()
indexing.add_component("image_embedder", AmazonBedrockDocumentImageEmbedder(model="cohere.embed-english-v3"))
indexing.add_component("writer", DocumentWriter(document_store=document_store))
indexing.connect("image_embedder", "writer")
indexing.run({"image_embedder": {"documents": documents}})
# Query pipeline: text -> embedding -> vector retriever
query = Pipeline()
query.add_component("text_embedder", AmazonBedrockTextEmbedder(model="cohere.embed-english-v3"))
query.add_component("retriever", InMemoryEmbeddingRetriever(document_store=document_store))
query.connect("text_embedder.embedding", "retriever.query_embedding")
res = query.run({"text_embedder": {"text": "Which document shows a horse?"}})
其他参考资料
更新于 20 天前
