Cohere Embed v4 - Amazon Bedrock

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Cohere Embed v4

Cohere Embed v4 は、テキスト入力と画像入力の両方をサポートするマルチモーダル埋め込みモデルです。インターリーブテキストや画像のコンテンツを処理できるため、ドキュメント理解、視覚的検索、マルチモーダル取得のアプリケーションに最適です。このモデルは、float、int8、uint8、binary、ubinary 形式を含むさまざまな埋め込みタイプをサポートしており、256~1536 の出力ディメンションを設定できます。

Cohere Embed v4 のモデル ID は cohere.embed-v4 です。

その他の使用上の注意

  • コンテキスト長: 最大 128,000 トークンがサポートされています。RAG の場合、チャンクを小さくすると取得とコストが向上することがよくあります。

  • 画像のサイズ設定: 2,458,624 ピクセルを超える画像はそのサイズにダウンサンプリングされ、3,136 ピクセル未満の画像はアップサンプリングされます。

  • インターリーブ入力: テキストコンテキスト (ファイル名、エンティティなど) が画像とともに移動するように、ページのようなマルチモーダルコンテンツには input.content[] を優先します。

リクエストとレスポンス

Request

コンテンツタイプ: application/json

{ "input_type": "search_document | search_query | classification | clustering", "texts": ["..."], // optional; text-only "images": ["data:<mime>;base64,..."], // optional; image-only "inputs": [ { "content": [ { "type": "text", "text": "..." }, { "type": "image_url", "image_url": "data:<mime>;base64,..." } ] } ], // optional; mixed (interleaved) text+image "embedding_types": ["float" | "int8" | "uint8" | "binary" | "ubinary"], "output_dimension": 256 | 512 | 1024 | 1536, "max_tokens": 128000, "truncate": "NONE | LEFT | RIGHT" }
パラメータ

  • input_type (必須) – ユースケースを区別するための特殊なトークンを追加します。search_documentsearch_queryclassificationclustering が使用可能です。検索/RAG の場合は、コーパスを search_document で埋め込み、クエリを search_query で埋め込みます。

  • texts (オプション) – 埋め込む文字列の配列。呼び出し 1 件あたり最大 96 です。texts を使用する場合は、同じ呼び出しで images を送信しないでください。

  • images (オプション) – 埋め込む data-URI base64 画像の配列。呼び出し 1 件あたり最大 96 です。textsimages を一緒に送信しないでください。(インターリーブには inputs を使用します。)

  • inputs (オプション、混合/融合モダリティ) – 各項目にパートのコンテンツリストが含まれているリスト。各パートは { "type": "text", "text": ... } または { "type": "image_url", "image_url": "data:<mime>;base64,..." } です。ページのようなインターリーブコンテンツ (PDF ページの画像とキャプション/メタデータなど) をここで送信します。最大 96 項目です。

  • embedding_types (オプション) – floatint8uint8binaryubinary のうち 1 つ以上。省略した場合、float の埋め込みが返されます。

  • output_dimension (オプション) – ベクトル長を選択します。25651210241536 を指定できます (指定しない場合のデフォルトは 1536 です)。

  • max_tokens (オプション) – 入力オブジェクト 1 つあたりの切り捨て予算。このモデルは最大 128,000 トークンをサポートします。RAG の場合は、適宜チャンクを小さくしてください。

  • truncate (オプション) – 長すぎる入力の処理方法: LEFT の場合、トークンを先頭からドロップします。RIGHT の場合、末尾からドロップします。NONE の場合、入力が制限を超えるとエラーを返します。

制限とサイズ設定

  • 1 リクエストあたりの項目: 最大 96 個の画像。元の画像ファイルタイプは png、jpeg、webp、gif のいずれかの形式である必要があり、サイズは最大 5 MB です。

  • リクエストサイズの上限: 合計ペイロードで最大 20 MB。

  • 最大入力トークン: 最大 128,000 トークン。画像ファイルはトークンに変換され、トークンの合計数が 128,000 未満である必要があります。

  • 画像: 2,458,624 ピクセルを超えるとダウンサンプリングされます。3,136 ピクセル未満の画像はアップサンプリングされます。画像は data:<mime>;base64,.... として指定します

  • トークンアカウンティング (inputs 項目 1 つあたり): 画像入力のトークン数 ≈ (画像のピクセル数 ÷ 784) x インターリーブテキストと画像入力からの 4 トークン = (画像のピクセル数 ÷ 784) x 4 + (テキストトークン数)

ヒント: PDF の場合、各ページを画像に変換し、隣接するテキスト部分のページメタデータ (file_name、エンティティなど) とともに inputs 経由で送信します。

Response

コンテンツタイプ: application/json

1 つの埋め込みタイプ (例: float のみ) をリクエストした場合:

{ "id": "string", "embeddings": [[ /* length = output_dimension */ ]], "response_type": "embeddings_floats", "texts": ["..."], // present if text was provided "inputs": [ { "content": [ ... ] } ] // present if 'inputs' was used }

複数の埋め込みタイプ (例: ["float","int8"]) をリクエストした場合:

{ "id": "string", "embeddings": { "float": [[ ... ]], "int8": [[ ... ]] }, "response_type": "embeddings_by_type", "texts": ["..."], // when text used "inputs": [ { "content": [ ... ] } ] // when 'inputs' used }
  • 返されるベクトルの数は、texts 配列の長さ、または inputs 項目の数と一致します。

  • 各ベクトルの長さは output_dimension (デフォルトは 1536) と等しくなります。

さまざまな input_types のリクエストとレスポンス

A) コンパクトな int8 ベクトルを含むインターリーブページ (画像とキャプション)

リクエスト

{ "input_type": "search_document", "inputs": [ { "content": [ { "type": "text", "text": "Quarterly ARR growth chart; outlier in Q3." }, { "type": "image_url", "image_url": "data:image/png;base64,{{BASE64_PAGE_IMG}}" } ] } ], "embedding_types": ["int8"], "output_dimension": 512, "truncate": "RIGHT", "max_tokens": 128000 }
レスポンス (切り捨て後)

{ "id": "836a33cc-61ec-4e65-afaf-c4628171a315", "embeddings": { "int8": [[ 7, -3, ... ]] }, "response_type": "embeddings_by_type", "inputs": [ { "content": [ { "type": "text", "text": "Quarterly ARR growth chart; outlier in Q3." }, { "type": "image_url", "image_url": "data:image/png;base64,{{...}}" } ] } ] }

B) テキストのみのコーパスインデックス作成 (デフォルトの float、1536 ディメンション)

リクエスト

{ "input_type": "search_document", "texts": [ "RAG system design patterns for insurance claims", "Actuarial loss triangles and reserving primer" ] }
レスポンス (例)

{ "response_type": "embeddings_floats", "embeddings": [ [0.0135, -0.0272, ...], // length 1536 [0.0047, 0.0189, ...] ] }

コードの例

Text input
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to generate embeddings using the Cohere Embed v4 model. """ import json import logging import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def generate_text_embeddings(model_id, body, region_name): """ Generate text embedding by using the Cohere Embed model. Args: model_id (str): The model ID to use. body (str) : The reqest body to use. region_name (str): The AWS region to invoke the model on Returns: dict: The response from the model. """ logger.info("Generating text embeddings with the Cohere Embed model %s", model_id) accept = '*/*' content_type = 'application/json' bedrock = boto3.client(service_name='bedrock-runtime', region_name=region_name) response = bedrock.invoke_model( body=body, modelId=model_id, accept=accept, contentType=content_type ) logger.info("Successfully generated embeddings with Cohere model %s", model_id) return response def main(): """ Entrypoint for Cohere Embed example. """ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") region_name = 'us-east-1' model_id = 'cohere.embed-v4:0' text1 = "hello world" text2 = "this is a test" input_type = "search_document" embedding_types = ["float"] try: body = json.dumps({ "texts": [ text1, text2], "input_type": input_type, "embedding_types": embedding_types }) response = generate_text_embeddings(model_id=model_id, body=body, region_name=region_name) response_body = json.loads(response.get('body').read()) print(f"ID: {response_body.get('id')}") print(f"Response type: {response_body.get('response_type')}") print("Embeddings") embeddings = response_body.get('embeddings') for i, embedding_type in enumerate(embeddings): print(f"\t{embedding_type} Embeddings:") print(f"\t{embeddings[embedding_type]}") print("Texts") for i, text in enumerate(response_body.get('texts')): print(f"\tText {i}: {text}") except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) else: print( f"Finished generating text embeddings with Cohere model {model_id}.") if __name__ == "__main__": main()
Mixed modalities
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to generate image embeddings using the Cohere Embed v4 model. """ import json import logging import boto3 import base64 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def get_base64_image_uri(image_file_path: str, image_mime_type: str): with open(image_file_path, "rb") as image_file: image_bytes = image_file.read() base64_image = base64.b64encode(image_bytes).decode("utf-8") return f"data:{image_mime_type};base64,{base64_image}" def generate_embeddings(model_id, body, region_name): """ Generate image embedding by using the Cohere Embed model. Args: model_id (str): The model ID to use. body (str) : The reqest body to use. region_name (str): The AWS region to invoke the model on Returns: dict: The response from the model. """ logger.info("Generating image embeddings with the Cohere Embed model %s", model_id) accept = '*/*' content_type = 'application/json' bedrock = boto3.client(service_name='bedrock-runtime', region_name=region_name) response = bedrock.invoke_model( body=body, modelId=model_id, accept=accept, contentType=content_type ) logger.info("Successfully generated embeddings with Cohere model %s", model_id) return response def main(): """ Entrypoint for Cohere Embed example. """ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") region_name = 'us-east-1' image_file_path = "image.jpg" image_mime_type = "image/jpg" text = "hello world" model_id = 'cohere.embed-v4:0' input_type = "search_document" image_base64_uri = get_base64_image_uri(image_file_path, image_mime_type) embedding_types = ["int8","float"] try: body = json.dumps({ "inputs": [ { "content": [ { "type": "text", "text": text }, { "type": "image_url", "image_url": "data:image/png;base64,{{image_base64_uri}}" } ] } ], "input_type": input_type, "embedding_types": embedding_types }) response = generate_embeddings(model_id=model_id, body=body, region_name=region_name) response_body = json.loads(response.get('body').read()) print(f"ID: {response_body.get('id')}") print(f"Response type: {response_body.get('response_type')}") print("Embeddings") embeddings = response_body.get('embeddings') for i, embedding_type in enumerate(embeddings): print(f"\t{embedding_type} Embeddings:") print(f"\t{embeddings[embedding_type]}") print("inputs") for i, input in enumerate(response_body.get('inputs')): print(f"\tinput {i}: {input}") except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) else: print( f"Finished generating embeddings with Cohere model {model_id}.") if __name__ == "__main__": main()