本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您使用 InvokeModel 對Embed模型提出推論請求 您需要您想要使用的模型的模型 ID。若要取得模型 ID,請參閱 Amazon Bedrock 中支援的基礎模型。
注意
Amazon Bedrock 不支援來自CohereEmbed模型的串流回應。
請求與回應
這些CohereEmbed模型具有下列推論參數。
{
"input_type": "search_document|search_query|classification|clustering|image",
"texts":[string],
"images":[image_base64_image_uri]
"truncate": "NONE|START|END",
"embedding_types": embedding_types
}
下列是必要的參數。
-
texts – 要內嵌之模型的字串陣列。為獲得最佳效能,我們建議將每個文字的長度減少到 512 個記號以下。1 個記號約為 4 個字元。
以下是每個呼叫的文字和字元限制。
每次呼叫的文字數
下限 最大 0 個文字
96 個文字
字元
下限 最大 0 個字元
2048 個字元
-
input_type – 加上特殊字符,以區分每種類型。除了混合類型以進行搜尋和檢索外,不應將不同類型混合在一起。在這種情況下,將您的主體嵌入到類型
search_document
,並將查詢內嵌到類型search_query
。-
search_document
- 在搜尋使用案例中,當您為儲存在向量資料庫中的內嵌項目文件編碼時,可使用search_document
。 -
search_query
- 查詢向量資料庫以尋找相關文件時使用search_query
。 -
classification
- 使用內嵌項目作為文字分類器的輸入內容時使用classification
。 -
clustering
- 使用clustering
叢集內嵌項目。 -
images
– 這是影像陣列。-
要內嵌之模型的影像資料 URIs陣列。每次呼叫的影像數量上限為 1 (即模型僅支援一個影像輸入)。
-
映像必須是有效的資料 URI。影像必須是 image/jpeg 或 image/png 格式,且大小上限為 5MB。
-
只能提供其中一個「影像」或「文字」。
-
-
以下是選用參數:
-
截斷 – 指定 API 如何處理超過字符長度上限的輸入。請使用下列其中一個:
-
NONE
- (預設) 當輸入超過輸入記號長度上限時傳回錯誤。 -
START
– 捨棄輸入的開始。 -
END
- 捨棄輸入的結尾。
如果您指定
START
或END
,則模型會捨棄輸入,直到剩餘的輸入完全符合模型的輸入記號長度上限。 -
-
embedding_types – 指定您要傳回的內嵌類型。選用且預設為
None
,這會傳回Embed Floats
回應類型。可以是下列一或多個類型:-
float
– 使用此值傳回預設浮點數內嵌。 -
int8
– 使用此值傳回已簽署的 int8 內嵌。 -
uint8
– 使用此值傳回未簽署的 int8 內嵌。 -
binary
– 使用此值傳回已簽章的二進位內嵌。 -
ubinary
– 使用此值傳回未簽署的二進位內嵌。
-
如需詳細資訊,請參閱 Cohere 文件中的 https://https://docs.cohere.com/reference/embed
程式碼範例
此範例示範如何呼叫CohereEmbed English模型。
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to generate text embeddings using the Cohere Embed English 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-english-v3'
text1 = "hello world"
text2 = "this is a test"
input_type = "search_document"
embedding_types = ["int8", "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()
影像輸入
# 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 English 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_image_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"
model_id = 'cohere.embed-english-v3'
input_type = "image"
images = [get_base64_image_uri(image_file_path, image_mime_type)]
embedding_types = ["int8", "float"]
try:
body = json.dumps({
"images": images,
"input_type": input_type,
"embedding_types": embedding_types
})
response = generate_image_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()