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

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_idaws_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?"}})

其他参考资料

📓 教程:创建 Vision+Text RAG 管道