

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Cree una aplicación RAG con las bases de conocimiento de Amazon Bedrock
<a name="tutorial-build-rag-with-bedrock"></a>

Muchas empresas acumulan grandes repositorios de documentos en sus archivos compartidos de NFS y SMB: manuales de productos, documentos de políticas, contratos, informes de investigación, especificaciones de ingeniería y contenido generado por los usuarios.

Con un punto de acceso Amazon S3 conectado al volumen FSx for ONTAP, las bases de conocimiento de Amazon Bedrock ingieren contenido directamente del volumen. Foundation-model las respuestas se basan en los documentos donde sus equipos las guardan en NFS o SMB. El contenido que los redactores actualizan al compartir estará disponible en la base de conocimientos en la próxima sincronización.

En este tutorial, cargará un pequeño conjunto de ejemplos de archivos PDF a su volumen de FSx for ONTAP a través de un punto de acceso de Amazon S3, creará una base de conocimientos de Amazon Bedrock que apunte al punto de acceso, recopilará los documentos y formulará una pregunta a través de la API. `RetrieveAndGenerate`

**nota**  
Este tutorial tarda aproximadamente entre **35 y 45 minutos en completarse**. Los Servicios de AWS usuarios incurren en cargos por los recursos que cree. Si completa todos los pasos, incluida la sección de **limpieza**, con prontitud, el coste previsto será inferior a **1 dólar** en la zona este de EE. UU. (Virginia del Norte) Región de AWS. Esta estimación no incluye los cargos continuos del FSx para el propio volumen de ONTAP.

## Requisitos previos
<a name="tutorial-bedrock-kb-prerequisites"></a>

Antes de empezar, asegúrese de que tiene lo siguiente:
+ Un volumen FSx para ONTAP con un punto de acceso Amazon S3 conectado. El punto de acceso debe tener un origen de red de **Internet** para que el servicio Amazon Bedrock pueda acceder a él. Para obtener instrucciones sobre cómo crear un punto de acceso, consulte[Creación de un punto de acceso](fsxn-creating-access-points.md).
+ El acceso al modelo está habilitado para un modelo de incrustación compatible con las bases de conocimiento de Amazon Bedrock y al menos un modelo de generación de texto (por ejemplo`amazon.nova-lite-v1:0`) en el Región de AWS que va a crear la base de conocimientos. Este tutorial utiliza `amazon.titan-embed-text-v2:0` (1024 dimensiones) como modelo de incrustación; también se admiten los modelos Cohere Embed. Si elige un modelo de incrustación diferente, ajuste la dimensión del índice vectorial en el paso 2 para que coincida con la dimensión de salida del modelo. El acceso a modelos está habilitado en la consola de Amazon Bedrock en **Acceso a modelos**. Para obtener más información, consulte [Acceder a los modelos de cimentación de Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html) en la Guía del *usuario de Amazon Bedrock*.
+ AWS CLI versión 2 instalada y configurada con credenciales que pueden crear funciones de IAM, recursos de Amazon S3 Vectors y bases de conocimiento de Amazon Bedrock.

## Paso 1: Cargue documentos de muestra en el punto de acceso
<a name="tutorial-bedrock-kb-upload"></a>

Descargue algunos archivos PDF públicos para usarlos como corpus de muestra y, a continuación, cárguelos en su punto de acceso con el alias del punto de acceso Amazon S3.

1. Cree un directorio local y descargue archivos PDF de muestra.

   ```
   $ mkdir -p ~/kb-pdfs && cd ~/kb-pdfs
   curl -sSL -o aws-overview.pdf https://d1.awsstatic.com/whitepapers/aws-overview.pdf
   curl -sSL -o wellarchitected-framework.pdf https://docs.aws.amazon.com/pdfs/wellarchitected/latest/framework/wellarchitected-framework.pdf
   curl -sSL -o s3-userguide.pdf https://docs.aws.amazon.com/pdfs/AmazonS3/latest/userguide/s3-userguide.pdf
   ```

1. Cargue cada archivo en el punto de acceso. {{access-point-alias}}Sustitúyalo por el alias de tu punto de acceso (por ejemplo,`my-kb-ap-a1b2c3d4e5f6g7h8i9j0kl1mnop2uuse1a-ext-s3alias`). Puede encontrar el alias en la consola de Amazon FSx, en los **puntos de acceso Amazon S3 adjuntos** a su volumen o ejecutándolo. `aws fsx describe-s3-access-point-attachments`

   ```
   $ for f in *.pdf; do
       aws s3 cp "$f" "s3://{{access-point-alias}}/$f"
   done
   ```

1. Compruebe que los archivos se encuentran en el volumen.

   ```
   $ aws s3 ls s3://{{access-point-alias}}/
   ```

**nota**  
Las bases de conocimiento de Amazon Bedrock exigen un tamaño de archivo máximo de 50 MB por documento. Los archivos de más de 50 MB se omiten durante la ingestión.

## Paso 2: Crea un almacén de vectores
<a name="tutorial-bedrock-kb-vector-store"></a>

La base de conocimientos almacena los documentos incrustados en un almacén vectorial. Las bases de conocimiento de Amazon Bedrock admiten varios almacenes de vectores; en este tutorial, se utiliza Amazon S3 Vectors de forma predeterminada porque tiene un coste optimizado para las cargas de trabajo de RAG y requiere una configuración mínima. Amazon OpenSearch Serverless también es compatible; consulta la sección de plegables al final de este paso para ver esas instrucciones.

### Para crear el almacén de vectores mediante la consola
<a name="tutorial-bedrock-kb-vector-store-console"></a>

Si utiliza la consola para crear la base de conocimientos[Paso 4: Cree la base de conocimientos y la fuente de datos](#tutorial-bedrock-kb-create-kb), elija **Creación rápida de un nuevo almacén de vectores** en el paso **Base de datos vectorial** y seleccione **Amazon S3 Vectors** (recomendado) o **Amazon OpenSearch Serverless**. Amazon Bedrock crea automáticamente el almacén de vectores y toda la configuración necesaria. Vaya a [Paso 3: Cree un rol de IAM para la base de conocimientos](#tutorial-bedrock-kb-iam-role).

### Para crear un almacén de vectores de Amazon S3 mediante el AWS CLI
<a name="tutorial-bedrock-kb-vector-store-cli"></a>

1. Cree un bucket vectorial de Amazon S3. Los nombres de los buckets vectoriales siguen las mismas reglas de exclusividad global que los buckets estándar de Amazon S3. En este tutorial se utiliza un nombre único`fsxn-kb-vectors`; sustitúyalo por un nombre único.

   ```
   $ aws s3vectors create-vector-bucket --vector-bucket-name fsxn-kb-vectors
   ```

1. Cree un índice vectorial en el cubo. La dimensión del índice debe coincidir con la dimensión de salida del modelo de incrustación; Titan Text Embeddings v2 genera 1024 dimensiones. La `nonFilterableMetadataKeys` configuración marca los campos de metadatos de Bedrock como no filtrables, lo que los mantiene fuera del límite de 2 KB de metadatos filtrables por vector.

   ```
   $ aws s3vectors create-index --vector-bucket-name fsxn-kb-vectors \
       --index-name bedrock-kb-index \
       --dimension 1024 --distance-metric cosine --data-type float32 \
       --metadata-configuration '{"nonFilterableMetadataKeys":["AMAZON_BEDROCK_METADATA","AMAZON_BEDROCK_TEXT"]}'
   ```

   Anote esto en la respuesta`indexArn`; lo usará en. [Paso 4: Cree la base de conocimientos y la fuente de datos](#tutorial-bedrock-kb-create-kb)

### Alternativa: cree un almacén vectorial sin servidor de OpenSearch servicios utilizando el AWS CLI
<a name="tutorial-bedrock-kb-vector-store-oss"></a>

Si prefiere OpenSearch Service Serverless (para consultas más altas por segundo, funciones de búsqueda avanzada o familiaridad operativa existente), utilice los siguientes pasos en lugar del procedimiento de Amazon S3 Vectors anterior.

1. Cree políticas de cifrado y seguridad de red para la recopilación.

   ```
   $ aws opensearchserverless create-security-policy --name kb-enc --type encryption \
       --policy '{"Rules":[{"ResourceType":"collection","Resource":["collection/fsxn-kb"]}],"AWSOwnedKey":true}'
   aws opensearchserverless create-security-policy --name kb-net --type network \
       --policy '[{"Rules":[{"ResourceType":"collection","Resource":["collection/fsxn-kb"]},{"ResourceType":"dashboard","Resource":["collection/fsxn-kb"]}],"AllowFromPublic":true}]'
   ```

1. Cree una política de acceso a los datos que otorgue al rol de base de conocimientos y a su usuario actual permiso para leer y escribir la colección. Reemplace {{account-id}} y {{current-user}} con sus valores.

   ```
   $ aws opensearchserverless create-access-policy --name kb-data --type data --policy '[{
       "Rules":[
           {"ResourceType":"index","Resource":["index/fsxn-kb/*"],"Permission":["aoss:*"]},
           {"ResourceType":"collection","Resource":["collection/fsxn-kb"],"Permission":["aoss:*"]}
       ],
       "Principal":[
           "arn:aws:iam::{{account-id}}:role/fsxn-kb-role",
           "arn:aws:iam::{{account-id}}:user/{{current-user}}"
       ]
   }]'
   ```

1. Cree la colección y espere a que aparezca`ACTIVE`.

   ```
   $ aws opensearchserverless create-collection --name fsxn-kb --type VECTORSEARCH
   aws opensearchserverless batch-get-collection --names fsxn-kb \
       --query 'collectionDetails[0].{status:status,endpoint:collectionEndpoint}'
   ```

1. Cree el índice vectorial de la colección mediante un script de Python con solicitudes firmadas. El índice debe usar la dimensión 1024 (para Titan Text Embeddings v2) y los nombres de campo que Amazon Bedrock Knowledge Bases espera. Para ver el script completo y los pasos de configuración posteriores, consulte [Requisitos previos para usar OpenSearch Service Serverless](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-oss.html) en la Guía del usuario de *Amazon Bedrock*. Utilice el ARN de la colección y el nombre de índice resultantes en el paso 4 con un tipo `storage-configuration` de. `OPENSEARCH_SERVERLESS`

## Paso 3: Cree un rol de IAM para la base de conocimientos
<a name="tutorial-bedrock-kb-iam-role"></a>

La base de conocimientos necesita una función de IAM que pueda asumir para invocar el modelo de incrustación, leer objetos a través del punto de acceso Amazon S3 y acceder al almacén vectorial. La política que se muestra a continuación permite el acceso a un almacén vectorial de Amazon S3 Vectors. Si, en su lugar, utiliza OpenSearch Service Serverless, sustituya la `S3Vectors` declaración por una que otorgue `aoss:APIAccessAll` el ARN de la colección.

### Para crear el rol mediante la consola
<a name="tutorial-bedrock-kb-iam-role-console"></a>

Cuando cree la base de conocimientos con la consola de Amazon Bedrock en[Paso 4: Cree la base de conocimientos y la fuente de datos](#tutorial-bedrock-kb-create-kb), elija **Crear y usar un nuevo rol de servicio**. Amazon Bedrock crea un rol con la confianza y los permisos necesarios, en función de su base de conocimientos, modelo de incrustación, almacén vectorial y fuente de datos. Vaya a [Paso 4: Cree la base de conocimientos y la fuente de datos](#tutorial-bedrock-kb-create-kb).

### Para crear el rol mediante AWS CLI
<a name="tutorial-bedrock-kb-iam-role-cli"></a>

1. Guarde la siguiente política de confianza como`kb-trust-policy.json`. Permite que Amazon Bedrock asuma la función. {{account-id}}Sustitúyalo por tu Cuenta de AWS ID.

   ```
   {
       "Version": "2012-10-17", 		 	 	 
       "Statement": [{
           "Effect": "Allow",
           "Principal": {"Service": "bedrock.amazonaws.com"},
           "Action": "sts:AssumeRole",
           "Condition": {"StringEquals": {"aws:SourceAccount": "{{account-id}}"}}
       }]
   }
   ```

1. Guarde la siguiente política de permisos como`kb-permissions.json`. Otorga acceso al modelo de incrustación, al punto de acceso Amazon S3 y al almacén vectorial. Sustituya los marcadores de posición por sus valores.

   ```
   {
       "Version": "2012-10-17", 		 	 	 
       "Statement": [
           {
               "Sid": "FoundationModel",
               "Effect": "Allow",
               "Action": ["bedrock:InvokeModel"],
               "Resource": ["arn:aws:bedrock:{{region}}::foundation-model/amazon.titan-embed-text-v2:0"]
           },
           {
               "Sid": "S3AccessPoint",
               "Effect": "Allow",
               "Action": ["s3:GetObject", "s3:ListBucket"],
               "Resource": [
                   "arn:aws:s3:{{region}}:{{account-id}}:accesspoint/{{access-point-name}}",
                   "arn:aws:s3:{{region}}:{{account-id}}:accesspoint/{{access-point-name}}/object/*"
               ]
           },
           {
               "Sid": "S3Vectors",
               "Effect": "Allow",
               "Action": [
                   "s3vectors:GetIndex",
                   "s3vectors:PutVectors",
                   "s3vectors:GetVectors",
                   "s3vectors:ListVectors",
                   "s3vectors:DeleteVectors",
                   "s3vectors:QueryVectors"
               ],
               "Resource": [
                   "arn:aws:s3vectors:{{region}}:{{account-id}}:bucket/fsxn-kb-vectors",
                   "arn:aws:s3vectors:{{region}}:{{account-id}}:bucket/fsxn-kb-vectors/index/*"
               ]
           }
       ]
   }
   ```

1. Cree el rol y adjunte la política de permisos.

   ```
   $ aws iam create-role --role-name fsxn-kb-role \
       --assume-role-policy-document file://kb-trust-policy.json
   aws iam put-role-policy --role-name fsxn-kb-role --policy-name kb-access \
       --policy-document file://kb-permissions.json
   ```

## Paso 4: Cree la base de conocimientos y la fuente de datos
<a name="tutorial-bedrock-kb-create-kb"></a>

La fuente de datos apunta al alias de su punto de acceso Amazon S3. Amazon Bedrock Knowledge Bases acepta el alias del punto de acceso en lugar del nombre del bucket.

### Para crear la base de conocimientos mediante la consola
<a name="tutorial-bedrock-kb-create-kb-console"></a>

1. Abra la consola Amazon Bedrock en [https://console.aws.amazon.com/bedrock/](https://console.aws.amazon.com/bedrock/).

1. En el panel de navegación izquierdo, elija **Bases de conocimiento** y, a continuación, elija **Crear base de conocimiento**.

1. En **Detalles de la base de conocimientos**, introduce un nombre (por ejemplo`fsxn-kb`) y una descripción.

1. En **Permisos de IAM**, elija **Crear y usar un nuevo rol de servicio**.

1. En **Fuente de datos**, elija **Amazon S3** y, a continuación, elija **Siguiente**.

1. Introduzca el nombre de una fuente de datos (por ejemplo,`fsxn-s3ap-source`).

1. En el **caso del URI de S3**, `s3://` introdúzcalo seguido del alias del punto de acceso, por ejemplo`s3://my-kb-ap-a1b2c3d4e5f6g7h8i9j0kl1mnop2uuse1a-ext-s3alias`. La consola no distingue entre un nombre de bucket y un alias de punto de acceso en este campo; el alias del punto de acceso se acepta tal cual.

1. Elija **Siguiente**.

1. En el **modelo Embeddings**, selecciona **Titan Text** Embeddings v2.

1. En **Base de datos vectorial**, elija **Crear rápidamente un nuevo almacén** de **vectores y seleccione Amazon S3 Vectors**. Elija **Siguiente**.

1. Revise la configuración y elija **Crear base de conocimientos**. La creación de la base de conocimientos puede tardar varios minutos.

### Para crear la base de conocimientos mediante AWS CLI
<a name="tutorial-bedrock-kb-create-kb-cli"></a>

1. Cree la base de conocimientos. Sustituya los marcadores de posición por sus valores. `indexArn`Es el ARN del índice vectorial de Amazon S3 que creó en el paso 2.

   ```
   $ aws bedrock-agent create-knowledge-base --name fsxn-kb \
       --role-arn arn:aws:iam::{{account-id}}:role/fsxn-kb-role \
       --knowledge-base-configuration '{
           "type":"VECTOR",
           "vectorKnowledgeBaseConfiguration":{
               "embeddingModelArn":"arn:aws:bedrock:{{region}}::foundation-model/amazon.titan-embed-text-v2:0"
           }
       }' \
       --storage-configuration '{
           "type":"S3_VECTORS",
           "s3VectorsConfiguration":{
               "indexArn":"{{index-arn}}"
           }
       }'
   ```

   Tenga en cuenta los `knowledgeBaseId` en la respuesta.

1. Cree la fuente de datos. Pase el alias del punto de acceso Amazon S3 como nombre del bucket en el `bucketArn` campo mediante el formulario`arn:aws:s3:::{{access-point-alias}}`.

   ```
   $ aws bedrock-agent create-data-source \
       --knowledge-base-id {{knowledge-base-id}} \
       --name fsxn-s3ap-source \
       --data-source-configuration '{
           "type":"S3",
           "s3Configuration":{"bucketArn":"arn:aws:s3:::{{access-point-alias}}"}
       }'
   ```

   Tenga en cuenta los `dataSourceId` en la respuesta.

## Paso 5: Ingiera los documentos
<a name="tutorial-bedrock-kb-ingest"></a>

Ejecute un trabajo de ingestión para rastrear los documentos a través del punto de acceso, generar incrustaciones e indexarlos en el almacén vectorial.

### Para ejecutar la ingestión mediante la consola
<a name="tutorial-bedrock-kb-ingest-console"></a>

1. En la consola de Amazon Bedrock, abra su base de conocimientos.

1. En la sección **Fuente de datos**, seleccione su fuente de datos y, a continuación, elija **Sincronizar**.

1. Espera a que **el estado de sincronización** muestre **Listo**.

### Para ejecutar la ingestión mediante el AWS CLI
<a name="tutorial-bedrock-kb-ingest-cli"></a>

1. Inicie el trabajo de ingestión.

   ```
   $ aws bedrock-agent start-ingestion-job \
       --knowledge-base-id {{knowledge-base-id}} \
       --data-source-id {{data-source-id}}
   ```

   Tenga en cuenta los `ingestionJobId` en la respuesta.

1. Sondea el trabajo hasta que se complete.

   ```
   $ aws bedrock-agent get-ingestion-job \
       --knowledge-base-id {{knowledge-base-id}} \
       --data-source-id {{data-source-id}} \
       --ingestion-job-id {{ingestion-job-id}}
   ```

   El `status` campo pasa de `IN_PROGRESS` a`COMPLETE`. El `statistics` campo muestra cuántos documentos se escanearon e indexaron.

## Paso 6: consulte la base de conocimientos
<a name="tutorial-bedrock-kb-query"></a>

Haga una pregunta a la base de conocimientos basada en los documentos ingeridos. La respuesta incluye citas que hacen referencia a los documentos fuente a través del alias del punto de acceso Amazon S3.

### Para realizar consultas mediante la consola
<a name="tutorial-bedrock-kb-query-console"></a>

1. En la consola de Amazon Bedrock, abra su base de conocimientos.

1. Elija **Probar la base de conocimientos.**

1. En **Generar respuestas**, seleccione un modelo de generación de texto (por ejemplo, **Nova Lite**).

1. Introduzca una pregunta como, por ejemplo, `What are the pillars of the AWS Well-Architected Framework?` y elija **Ejecutar**. La respuesta se muestra con referencias de citas que enlazan con los documentos fuente en el punto de acceso Amazon S3.

### Para realizar consultas utilizando el AWS CLI
<a name="tutorial-bedrock-kb-query-cli"></a>

Utilice el comando `retrieve-and-generate`. Sustituya los marcadores de posición por sus valores. `modelArn`Debe hacer referencia a un perfil de inferencia para un modelo de generación de texto al que tenga acceso.

```
$ aws bedrock-agent-runtime retrieve-and-generate \
    --input '{"text":"What are the pillars of the AWS Well-Architected Framework?"}' \
    --retrieve-and-generate-configuration '{
        "type":"KNOWLEDGE_BASE",
        "knowledgeBaseConfiguration":{
            "knowledgeBaseId":"{{knowledge-base-id}}",
            "modelArn":"arn:aws:bedrock:{{region}}:{{account-id}}:inference-profile/us.amazon.nova-lite-v1:0"
        }
    }'
```

La respuesta contiene la respuesta generada `output.text` y una lista de citas en la `citations` matriz. Cada cita incluye un `s3Location.uri` campo que apunta al documento fuente a través del alias del punto de acceso, en el formulario`s3://{{access-point-alias}}/{{file.pdf}}`.

## Resolución de problemas
<a name="tutorial-bedrock-kb-troubleshooting"></a>

Se ignoraron los archivos de informes de tareas de ingestión  
Las bases de conocimiento de Amazon Bedrock exigen un tamaño de archivo máximo de 50 MB por documento. Los archivos de más de 50 MB se enumeran `failureReasons` y se omiten. Divida o comprima documentos grandes antes de cargarlos.

`ValidationException`: modelo marcado como Legacy  
El modelo de generación de texto que especificó ha quedado obsoleto en su cuenta. Elija un perfil de inferencia activo, por ejemplo, `us.amazon.nova-lite-v1:0` u otro modelo compatible actualmente. Ejecute `aws bedrock list-inference-profiles` para ver una lista de los perfiles disponibles.

`AccessDeniedException`durante la ingestión  
Compruebe que la función de IAM de la base de conocimientos esté `s3:ListBucket` en el ARN del punto de acceso (no en el volumen subyacente) y que el punto de acceso tenga un origen en una red de Internet para que el servicio Amazon Bedrock pueda acceder a él. `s3:GetObject` Si eligió la alternativa OpenSearch Service Serverless en el paso 2, compruebe también que la política de acceso a los datos incluya la función como principal.

El trabajo de ingestión se realiza correctamente, pero las consultas no devuelven ningún pasaje relevante  
Confirme que el índice vectorial se creó con `dimension: 1024` (para Titan Text Embeddings v2) y que los nombres de los campos del mapeo de índices coinciden con los nombres de campo configurados en la base de conocimientos.

## Limpieza
<a name="tutorial-bedrock-kb-clean-up"></a>

Para evitar que se sigan cobrando cargos, elimine los recursos que ha creado:
+ Base de conocimiento y fuente de datos de Amazon Bedrock
+ Índice vectorial y depósito vectorial de Amazon S3 (o colección OpenSearch Service Serverless, si utilizó la alternativa del paso 2)
+ Función de IAM y política en línea
+ Objetos cargados en el punto de acceso (si ya no se necesitan)

```
$ aws bedrock-agent delete-data-source --knowledge-base-id {{knowledge-base-id}} --data-source-id {{data-source-id}}
aws bedrock-agent delete-knowledge-base --knowledge-base-id {{knowledge-base-id}}
aws s3vectors delete-index --vector-bucket-name fsxn-kb-vectors --index-name bedrock-kb-index
aws s3vectors delete-vector-bucket --vector-bucket-name fsxn-kb-vectors
aws iam delete-role-policy --role-name fsxn-kb-role --policy-name kb-access
aws iam delete-role --role-name fsxn-kb-role
```

### Alternativa: Limpiar los recursos OpenSearch de Service Serverless
<a name="tutorial-bedrock-kb-clean-up-oss"></a>

Si eligió la alternativa OpenSearch Service Serverless en el paso 2, sustituya los `s3vectors` comandos anteriores por los siguientes. Los cobros OpenSearch de Idle Service Serverless acumulan OCU-hour cargos, así que elimínelos cuanto antes cuando haya terminado con el tutorial.

```
$ # Get the collection ID (required by delete-collection; the name is not accepted)
COLLECTION_ID=$(aws opensearchserverless batch-get-collection --names fsxn-kb \
    --query 'collectionDetails[0].id' --output text)

# Delete the collection, then the policies
aws opensearchserverless delete-collection --id "$COLLECTION_ID"
aws opensearchserverless delete-access-policy --name kb-data --type data
aws opensearchserverless delete-security-policy --name kb-net --type network
aws opensearchserverless delete-security-policy --name kb-enc --type encryption
```