使用 Amazon Nova Embeddings
Amazon Nova Multimodal Embeddings 是一种多模态嵌入模型,可用于代理式 RAG 和语义搜索应用程序。其通过单个模型支持文本、文档、图像、视频和音频,从而实现跨模态检索。Nova Multimodal Embeddings 将各类内容映射到统一语义空间,支持执行单模态、跨模态和多模态向量操作。
当一段内容通过 Nova 嵌入传递时,模型会将该内容转换为通用的数值格式,称为向量。向量是一组数值,可用于各种搜索功能。与不太相似的内容相比,为相似内容分配的向量会更加接近。
应用程序:
-
语义内容检索和推荐:为内容生成嵌入,然后用来查找相似项目或提供个性化推荐。
-
多模态搜索:融合不同内容类型的嵌入向量,实现跨模态搜索能力。
-
RAG:利用多模态内容(例如含有交错文本和图像的文档)生成嵌入,从而支持生成式人工智能应用程序的检索工作流。
主要特征
这些关键特性使 Nova Embeddings 与众不同:
-
支持在统一语义空间中处理文本、图像、文档图像、视频和音频。最大上下文长度为 8K 词元或 30s 视频和 30s 音频。
-
同步和异步 API:该 API 支持同步和异步使用。
-
大文件分段:异步 API 通过为长文本、视频和音频提供 API 构建的分段,并由用户定义的参数进行控制,从而轻松处理大型输入。该模型将为每个分段生成一个嵌入。
-
带音频的视频:同时处理带音频的视频。指定是采用同时表示两种模态的单个嵌入,还是分别生成两个独立的嵌入。
-
嵌入用途:根据下游应用场景(检索/RAG/搜索、分类、聚类)对嵌入进行优化。
-
尺寸大小:4 个平衡嵌入准确度要求和向量存储成本的尺寸大小:3072;1024;384;256。
-
输入方式:通过指定 S3 URI 传入待嵌入内容,或以 Base64 编码形式内联传入。
生成嵌入
完成以下步骤以生成嵌入。
文本同步嵌入:
import boto3 import json # Create the Bedrock Runtime client. bedrock_runtime = boto3.client( service_name='bedrock-runtime', region_name='us-east-1', ) # Define the request body. request_body = { 'taskType': 'SINGLE_EMBEDDING', 'singleEmbeddingParams': { 'embeddingPurpose': 'GENERIC_INDEX', 'embeddingDimension': 3072, 'text': {'truncationMode': 'END', 'value': 'Hello, World!'}, }, } try: # Invoke the Nova Embeddings model. response = bedrock_runtime.invoke_model( body=json.dumps(request_body, indent=2), modelId='amazon.nova-2-multimodal-embeddings-v1:0', accept='application/json', contentType='application/json', ) except Exception as e: # Add your own exception handling here. print(e) # Print the request ID. print('Request ID:', response.get('ResponseMetadata').get('RequestId')) # Print the response body. response_body = json.loads(response.get('body').read()) print(json.dumps(response_body, indent=2))
尝试执行:
response = bedrock_runtime.invoke_model( body=json.dumps(request_body, indent=2), modelId='amazon.nova-2-multimodal-embeddings-v1:0', accept='application/json', contentType='application/json', ) except Exception as e: print(e) print('Request ID:', response.get('ResponseMetadata').get('RequestId')) response_body = json.loads(response.get('body').read()) print(json.dumps(response_body, indent=2))
视频异步嵌入:
import boto3 bedrock_runtime = boto3.client( service_name='bedrock-runtime', region_name='us-east-1', ) model_input = { 'taskType': 'SEGMENTED_EMBEDDING', 'segmentedEmbeddingParams': { 'embeddingPurpose': 'GENERIC_INDEX', 'embeddingDimension': 3072, 'video': { 'format': 'mp4', 'embeddingMode': 'AUDIO_VIDEO_COMBINED', 'source': { 's3Location': {'uri': 's3://my-bucket/path/to/video.mp4'} }, 'segmentationConfig': { 'durationSeconds': 15 # Segment into 15 second chunks }, }, }, }
尝试执行:
response = bedrock_runtime.start_async_invoke( modelId='amazon.nova-2-multimodal-embeddings-v1:0', modelInput=model_input, outputDataConfig={ 's3OutputDataConfig': { 's3Uri': 's3://my-bucket' } }, ) except Exception as e: print(e) print('Request ID:', response.get('ResponseMetadata').get('RequestId')) print('Invocation ARN:', response.get('invocationArn'))
批量推理
使用批量推理,您可以提交多个请求并异步生成嵌入。批量推理通过发送单个请求并在 Amazon S3 存储桶中生成响应,帮助您高效地处理大量请求。
-
在您创建的文件中定义模型输入后,您需要将相应文件上传到 S3 存储桶。
-
然后,您需要提交批量推理请求并指定 S3 存储桶。
-
作业完成后,您可以从 S3 检索输出文件。
-
您可以使用批量推理来提高对大型数据集的模型推理性能。
格式化并上传批量推理数据
您必须将批量推理数据添加到在提交模型调用作业时要选择或指定的 S3 位置。S3 位置必须包含以下项目:
至少一个定义模型输入的 JSONL 文件。一个包含 JSON 对象行的 JSONL。JSONL 文件必须以扩展名 .jsonl 结尾,并且为以下格式:
{ "recordId": "record001", "modelInput": { "taskType": "SINGLE_EMBEDDING", "singleEmbeddingParams": { "embeddingPurpose": "GENERIC_INDEX", "embeddingDimension": 3072, "text": { "source": { "s3Location": { "uri": "s3://batch-inference-input-bucket/text_001.txt", "bucketOwner": "111122223333" } }, "truncationMode": "END" } } } }
支持的输入文件类型
-
图像格式:PNG、JPEG、WEBP、GIF
-
音频格式:MP3、WAV、OGG
-
视频格式:MP4、MOV、MKV、WEBM、FLV、MPEG、MPG、WMV、3GP