AmazonBedrockDocumentImageEmbedder
AmazonBedrockDocumentImageEmbedder
AmazonBedrockDocumentImageEmbedder는 Amazon Bedrock API로 노출된 모델로 문서의 이미지 임베딩을 계산해요. 얻은 벡터를 각 문서의 embedding 필드에 저장합니다.
파이프라인에서 가장 흔한 위치: 인덱싱 파이프라인에서 DocumentWriter 앞
필수 init 변수: model(사용할 멀티모달 임베딩 모델), aws_access_key_id(AWS_ACCESS_KEY_ID 환경 변수로 설정 가능), aws_secret_access_key(AWS_SECRET_ACCESS_KEY 환경 변수로 설정 가능), aws_region_name(AWS_DEFAULT_REGION 환경 변수로 설정 가능)
필수 run 변수: documents — 이미지 파일 경로를 담은 meta 필드가 있는 문서 목록
출력 변수: documents — 임베딩이 추가된 문서 목록
API reference: Amazon Bedrock
GitHub link: https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/amazon_bedrock
Package name: amazon-bedrock-haystack
출처: 문서
본문
Overview
Amazon Bedrock은 통합 API를 통해 파운데이션 모델에 접근하게 해주는 완전 관리형 서비스예요.
AmazonBedrockDocumentImageEmbedder는 이미지 또는 PDF 파일 경로를 meta 필드에 담은 문서 목록을 입력으로 기대합니다. meta 필드는 이 컴포넌트의 file_path_meta_field init 파라미터로 지정할 수 있어요.
임베더는 이미지를 효율적으로 로드하고, 선택한 Bedrock 모델로 임베딩을 계산한 뒤 각각을 문서의 embedding 필드에 저장합니다.
Amazon Titan과 Cohere 멀티모달 임베딩 모델이 지원돼요. 예를 들어 amazon.titan-embed-image-v1, cohere.embed-english-v3, cohere.embed-multilingual-v3, cohere.embed-v4:0 등이 있죠.
AmazonBedrockDocumentImageEmbedder는 주로 인덱싱 파이프라인에서 사용됩니다. 검색 시점에는 AmazonBedrockTextEmbedder로 같은 모델을 사용해 쿼리를 임베딩한 뒤, Embedding Retriever를 사용해야 해요.
Installation
이 통합을 Haystack과 함께 쓰려면 패키지를 설치하세요:
pip install amazon-bedrock-haystack
Authentication
AmazonBedrockDocumentImageEmbedder는 인증에 AWS를 사용해요. 자격 증명을 컴포넌트에 파라미터로 직접 제공하거나, AWS CLI를 쓰고 IAM으로 인증할 수 있습니다. IAM 아이덴티티 기반 정책 설정 방법은 공식 문서를 참고하세요.
AmazonBedrockDocumentImageEmbedder를 초기화하고 자격 증명을 제공해 인증하려면 model 이름과 aws_access_key_id, aws_secret_access_key, aws_region_name을 제공하세요. 나머지 파라미터는 선택이며, API reference에서 확인할 수 있습니다.
Model-specific parameters
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에서는 하나의 값만 지원된다는 점을 기억하세요. 여러 값을 넘기면 오류가 발생해요.
Usage
On its own
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"]
In a pipeline
이 예시에서는 3개 컴포넌트로 된 인덱싱 파이프라인을 볼 수 있어요:
ImageFileToDocumentConverter —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?"}})