View a markdown version of this page

Cree una aplicación RAG con las bases de conocimiento de Amazon Bedrock - FSx para ONTAP

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

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

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, consulteCreación de un punto de acceso.

  • 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 ejemploamazon.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 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

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
  2. Cargue cada archivo en el punto de acceso. access-point-aliasSustitú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
  3. 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

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

Si utiliza la consola para crear la base de conocimientosPaso 4: Cree la base de conocimientos y la fuente de datos, 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.

Para crear un almacén de vectores de Amazon S3 mediante el AWS CLI

  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 únicofsxn-kb-vectors; sustitúyalo por un nombre único.

    $ aws s3vectors create-vector-bucket --vector-bucket-name fsxn-kb-vectors
  2. 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 respuestaindexArn; lo usará en. Paso 4: Cree la base de conocimientos y la fuente de datos

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}]'
  2. 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" ] }]'
  3. Cree la colección y espere a que aparezcaACTIVE.

    $ aws opensearchserverless create-collection --name fsxn-kb --type VECTORSEARCH aws opensearchserverless batch-get-collection --names fsxn-kb \ --query 'collectionDetails[0].{status:status,endpoint:collectionEndpoint}'
  4. 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 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

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

Cuando cree la base de conocimientos con la consola de Amazon Bedrock enPaso 4: Cree la base de conocimientos y la fuente de datos, 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.

  1. Guarde la siguiente política de confianza comokb-trust-policy.json. Permite que Amazon Bedrock asuma la función. account-idSustitú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"}} }] }
  2. Guarde la siguiente política de permisos comokb-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/*" ] } ] }
  3. 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

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

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

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

  3. En Detalles de la base de conocimientos, introduce un nombre (por ejemplofsxn-kb) y una descripción.

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

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

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

  7. En el caso del URI de S3, s3:// introdúzcalo seguido del alias del punto de acceso, por ejemplos3://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.

  8. Elija Siguiente.

  9. En el modelo Embeddings, selecciona Titan Text Embeddings v2.

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

  11. 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

  1. Cree la base de conocimientos. Sustituya los marcadores de posición por sus valores. indexArnEs 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.

  2. Cree la fuente de datos. Pase el alias del punto de acceso Amazon S3 como nombre del bucket en el bucketArn campo mediante el formularioarn: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

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

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

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

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

Para ejecutar la ingestión mediante el AWS CLI

  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.

  2. 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 aCOMPLETE. El statistics campo muestra cuántos documentos se escanearon e indexaron.

Paso 6: consulte la base de conocimientos

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

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

  2. Elija Probar la base de conocimientos.

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

  4. 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

Utilice el comando retrieve-and-generate. Sustituya los marcadores de posición por sus valores. modelArnDebe 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 formularios3://access-point-alias/file.pdf.

Resolución de problemas

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.

AccessDeniedExceptiondurante 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

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

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