

# Uso de incorporações do Amazon Nova
<a name="embeddings"></a>

O Incorporador Multimodal do Amazon Nova é um modelo de incorporação multimodal para aplicações agênticas de RAG e pesquisa semântica. Ele é compatível com texto, documentos, imagens, vídeo e áudio por meio de um único modelo, permitindo a recuperação intermodal. O Incorporador Multimodal do Nova mapeia cada um desses tipos de conteúdo em um espaço semântico unificado, permitindo que os desenvolvedores conduzam operações vetoriais unimodais, intermodais e multimodais.

Quando um conteúdo é processado pelas incorporações do Nova, o modelo converte esse conteúdo em um formato numérico universal, conhecido como vetor. Um vetor é um conjunto de valores numéricos que podem ser usados para várias funcionalidades de pesquisa. Conteúdos semelhantes recebem um vetor mais próximo do que conteúdos menos semelhantes. 

 Aplicações:
+ Recuperação e recomendação de conteúdo semântico: gere incorporações para seu conteúdo e use-as para encontrar itens semelhantes ou fornecer recomendações personalizadas. 
+ Pesquisa multimodal: combine incorporações de diferentes tipos de conteúdo para habilitar recursos de pesquisa intermodal.
+ RAG: gere incorporações a partir de conteúdo multimodal, como documentos com texto e imagens intercalados, para potencializar seu fluxo de trabalho de recuperação para aplicativos GenAI.

## Atributos principais
<a name="embeddings-features"></a>

 Esses recursos principais se distinguem do Incorporador do Nova: 
+ Suporte para texto, imagem, imagem de documento, vídeo e áudio em um espaço semântico unificado. A extensão máxima do contexto é de 8 mil tokens ou 30 segundos de vídeo e 30 segundos de áudio.
+ APIs síncronas e assíncronas: a API suporta o uso síncrono e assíncrono.
+ Segmentação de arquivos grandes: a API assíncrona facilita o trabalho com entradas grandes, fornecendo segmentação criada pela API para texto, vídeo e áudio longos, controlada por parâmetros definidos pelo usuário. O modelo gerará uma única incorporação para cada segmento.
+ Vídeo com áudio: processe vídeo com áudio simultaneamente. Especifique se você deseja uma única incorporação representando as duas modalidades ou duas incorporações separadas. 
+ Propósito da incorporação: otimize suas incorporações dependendo da aplicação downstream pretendida (recuperação/RAG/pesquisa, classificação, clustering). 
+ Tamanhos das dimensões: 4 tamanhos de dimensão para equilibrar a precisão da incorporação e o custo de armazenamento do vetor: 3072; 1024; 384; 256.
+ Métodos de entrada: transmita o conteúdo a ser incorporado especificando um URI do S3 ou em linha como uma codificação base64.

## Geração de incorporações
<a name="embeddings-examples"></a>

 Conclua as ações abaixo para gerar incorporações. 

Incorporação síncrona para texto: 

```
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))
```

 tente: 

```
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))
```

 Incorporação assíncrona para vídeo: 

```
 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 
            }, 
        }, 
    }, 
}
```

 tente: 

```
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'))
```

**Inferência em lote**

 Com a inferência em lote, é possível enviar várias solicitações e gerar incorporações de forma assíncrona. A inferência em lote ajuda você a processar muitas solicitações de forma eficaz, enviando uma única solicitação e gerando as respostas em um bucket do Amazon S3. 
+  Depois de definir as entradas do modelo em arquivos que você cria, carregue os arquivos em um bucket do S3. 
+  Envie uma solicitação de inferência em lote e especifique o bucket do S3. 
+ Quando o trabalho for concluído, será possível recuperar os arquivos de saída do S3. 
+  É possível usar a inferência em lote para melhorar a performance da inferência de modelos em grandes conjuntos de dados. 

**Formatar e carregar os dados de inferência**

Você deve adicionar seus dados de inferência em lote a um local do S3 que você escolherá ou especificará ao enviar um trabalho de invocação de modelo. O local do S3 deve conter os seguintes itens: 

 Pelo menos um arquivo JSONL que define as entradas do modelo. Um JSONL que contém linhas de objetos JSON. Seu arquivo JSONL deve terminar com a extensão .jsonl e estar no seguinte formato: 

```
{
    "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"
            }
        }
    }
}
```

** Tipos de arquivos de entrada compatíveis **
+ Formatos de imagem: PNG, JPEG, WEBP, GIF
+ Formatos de áudio: MP3, WAV, OGG
+ Formato de vídeo: MP4, MOV, MKV, WEBM, FLV, MPEG, MPG, WMV, 3GP