Creación de una base de conocimiento conectándola a un almacén de datos estructurados - Amazon Bedrock

Creación de una base de conocimiento conectándola a un almacén de datos estructurados

Para conectar una base de conocimiento a un almacén de datos estructurados, debe especificar los siguientes componentes:

  • Configuración del motor de consultas

    La configuración del servicio de computación que ejecutará las consultas SQL generadas El motor de consultas se utiliza para convertir las consultas de los usuarios en lenguaje natural en consultas SQL que se pueden utilizar para extraer datos del almacén de datos. Puede elegir Amazon Redshift como motor de consultas. Al elegir esta configuración, debe especificar:

    • Los metadatos de la conexión del recurso de computación, como el ID del clúster o el ARN del grupo de trabajo, según el motor de consultas elegido.

    • El método de autenticación para utilizar el motor de consultas, que puede consistir en utilizar un rol de servicio de IAM con los permisos adecuados, un usuario de la base de datos del motor de consultas o un secreto de AWS Secrets Manager vinculado a las credenciales de la base de datos.

  • Configuración de almacenamiento

    La configuración del almacén de datos que contiene los datos. Puede conectarse a Amazon Redshift aprovisionado o Amazon Redshift sin servidor y usar Amazon Redshift o AWS Glue Data Catalog como almacén de datos.

  • (Opcional) Configuraciones de consulta

    Puede usar configuraciones de consulta opcionales para mejorar la precisión de la generación de SQL:

    • Tiempo máximo de consulta: la cantidad de tiempo después del cual se agota el tiempo de espera de la consulta.

    • Descripciones: proporciona metadatos o información complementaria sobre tablas o columnas. Puede incluir descripciones de las tablas o columnas, notas de uso o cualquier atributo adicional. Las descripciones que agregue pueden mejorar la generación de consultas SQL al proporcionar contexto e información adicionales sobre la estructura de las tablas o columnas.

    • Inclusiones y exclusiones: especifica un conjunto de tablas o columnas que se van a incluir o excluir para la generación de SQL. Este campo es crucial si desea limitar el alcance de las consultas SQL a un subconjunto definido de tablas o columnas disponibles. Esta opción puede ayudar a optimizar el proceso de generación al reducir las referencias innecesarias de tablas o columnas.

      Si especifica inclusiones, se ignoran todas las demás tablas y columnas. Si especifica exclusiones, se ignoran las tablas y columnas que especifique.

      nota

      Las inclusiones y exclusiones no sustituyen a las barreras de protección y solo están pensadas para mejorar la precisión del modelo.

    • Consultas preparadas: un conjunto de ejemplos predefinidos de preguntas y respuestas. Las preguntas se escriben como consultas en lenguaje natural (NLQ) y las respuestas son la consulta SQL correspondiente. Estos ejemplos ayudan al proceso de generación de SQL al proporcionar ejemplos de los tipos de consultas que se deben generar. Sirven como puntos de referencia para mejorar la precisión y la relevancia de las salidas de SQL generativo.

Amplíe la sección que se corresponda con su caso de uso:

Para conectarse a un almacén de datos estructurados mediante la Consola de administración de AWS, haga lo siguiente:

  1. Inicie sesión en la Consola de administración de AWS con una identidad de IAM que tenga permisos para usar la consola de Amazon Bedrock. A continuación, abra la consola de Amazon Bedrock en https://console.aws.amazon.com/bedrock/.

  2. En el panel de navegación izquierdo, elija Bases de conocimientos.

  3. En la sección Bases de conocimientos, elija Crear y, a continuación, elija Base de conocimientos con almacén de datos estructurados.

  4. Configure los siguientes detalles para la base de conocimiento:

    1. (Opcional) Cambie el nombre predeterminado y proporcione una descripción para la base de conocimiento.

    2. Seleccione el motor de consultas que se utilizará para recuperar los datos del almacén de datos.

    3. Elija un rol de servicio de IAM con los permisos adecuados para crear y administrar esta base de conocimiento. Puede dejar que Amazon Bedrock cree el rol de servicio o elegir un rol personalizado que haya creado. Para obtener más información sobre cómo crear un rol personalizado, consulte Configuración del motor de consultas y los permisos para crear una base de conocimiento con un almacén de datos estructurados.

    4. (Opcional) Añada etiquetas para asociarlas a la base de conocimiento. Para obtener más información, consulte Etiquetado de los recursos de Amazon Bedrock.

    5. Elija Siguiente.

  5. Configure su motor de consultas:

    1. Seleccione el servicio en el que creó un clúster o un grupo de trabajo. A continuación, elija el clúster o grupo de trabajo que desea usar.

    2. Seleccione el método de autenticación y proporcione los campos necesarios.

    3. Seleccione el almacén de datos en el que desea almacenar los metadatos. A continuación, elija o escriba el nombre de la base de datos.

    4. (Opcional) Modifique las configuraciones de consulta según sea necesario. Consulte el principio de este tema para obtener más información sobre las diferentes configuraciones.

    5. Elija Siguiente.

  6. Revise las configuraciones de la base de conocimiento y edite las secciones según sea necesario. Confirme la operación para crear su base de conocimiento.

Para conectarse a un almacén de datos estructurados mediante la API de Amazon Bedrock, envíe una solicitud CreateKnowledgeBase con un punto de conexión en tiempo de compilación de Agentes para Amazon Bedrock con el siguiente cuerpo de solicitud general:

{ "name": "string", "roleArn": "string", "knowledgeBaseConfiguration": { "type": "SQL", "sqlKnowledgeBaseConfiguration": SqlKnowledgeBaseConfiguration }, "description": "string", "clientToken": "string", "tags": { "string": "string" } }

Los siguientes campos son obligatorios:

Campo Descripción básica
Nombre Un nombre para la base de conocimiento
roleArn Un rol de servicio de la base de conocimiento con los permisos adecuados. Puede utilizar la consola para crear un rol de servicio de forma automática con los permisos adecuados.
knowledgeBaseConfiguration Contiene configuraciones para la base de conocimiento. Para una base de datos estructurados, especifique SQL como type e incluya el campo sqlKnowledgeBaseConfiguration.

Los siguientes campos son opcionales.

Campo Uso
description Incluir una descripción de la base de conocimiento.
clientToken Para garantizar que la solicitud de la API se complete solo una vez. Para obtener más información, consulte Ensuring idempotency.
etiquetas Para asociar etiquetas con el flujo. Para obtener más información, consulte Etiquetado de los recursos de Amazon Bedrock.

SQLKnowledgeBaseConfiguration depende del motor de consultas que utilice. Para Amazon Redshift, especifique el campo type como REDSHIFT e incluya el campo redshiftConfiguration, que se asigna a un elemento RedshiftConfiguration. Para RedshiftConfiguration, debe configurar los siguientes campos:

Puede configurar los siguientes tipos de motor de consultas:

Si las bases de datos de Amazon Redshift se aprovisionan en nodos de procesamiento dedicados, el valor del campo queryEngineConfiguration debe ser un elemento RedshiftQueryEngineConfiguration con el siguiente formato:

{ "type": "PROVISIONED", "provisionedConfiguration": { "clusterIdentifier": "string", "authConfiguration": RedshiftProvisionedAuthConfiguration }, }

Especifique el ID del clúster en el campo clusterIdentifier. RedshiftProvisionedAuthConfiguration depende del tipo de autorización que utilice. Seleccione la pestaña que coincida con su método de autorización:

IAM role

Si realiza la autorización con su rol de IAM, solo debe especificar IAM como el tipo en RedshiftProvisionedAuthConfiguration sin campos adicionales.

{ "type": "IAM" }
Temporary credentials user name

Si realiza la autorización con el nombre de usuario de la base de datos, especifique type como USERNAME y especifique el nombre de usuario en el campo databaseUser en RedshiftProvisionedAuthConfig:

{ "type": "USERNAME", "databaseUser": "string" }
AWS Secrets Manager

Si realiza la autorización con AWS Secrets Manager, especifique type como USERNAME_PASSWORD y especifique el ARN del secreto en el campo usernamePasswordSecretArn en RedshiftProvisionedAuthConfig:

{ "type": "USERNAME_PASSWORD", "usernamePasswordSecretArn": "string" }

Si utiliza Amazon Redshift sin servidor, el valor del campo queryConfiguration debe ser RedshiftQueryEngineConfiguration con el siguiente formato:

{ "type": "SERVERLESS", "serverlessConfiguration": { "workgroupArn": "string", "authConfiguration": } }

Especifique el ARN de su grupo de trabajo en el campo workgroupArn. RedshiftServerlessAuthConfiguration depende del tipo de autorización que utilice. Seleccione la pestaña que coincida con su método de autorización:

IAM role

Si realiza la autorización con su rol de IAM, solo debe especificar IAM como el tipo en RedshiftServerlessAuthConfiguration sin campos adicionales.

{ "type": "IAM" }
AWS Secrets Manager

Si realiza la autorización con AWS Secrets Manager, especifique type como USERNAME_PASSWORD y especifique el ARN del secreto en el campo usernamePasswordSecretArn en RedshiftServerlessAuthConfiguration:

{ "type": "USERNAME_PASSWORD", "usernamePasswordSecretArn": "string" }

Este campo se asigna a una matriz que contiene un solo elemento RedshiftQueryEngineStorageConfiguration, cuyo formato depende de dónde estén almacenados los datos.

Si los datos están almacenados en AWS Glue Data Catalog, RedshiftQueryEngineStorageConfiguration debe tener el siguiente formato:

{ "type": "AWS_DATA_CATALOG", "awsDataCatalogConfiguration": { "tableNames": ["string"] } }

Agregue el nombre de cada tabla a la que desee conectar su base de conocimiento en la matriz a la que se asigna tableNames.

nota

Introduzca los nombres de las tablas siguiendo el patrón descrito en Consultas entre bases de datos (${databaseName}.${tableName}). Puede incluir todas las tablas especificando ${databaseName.*}.

Si los datos están almacenados en una base de datos de Amazon Redshift, RedshiftQueryEngineStorageConfiguration debe tener el siguiente formato:

{ "type": "string", "redshiftConfiguration": { "databaseName": "string" } }

Especifique el nombre de la base de datos de Amazon Redshift en el campo databaseName.

nota

Introduzca los nombres de las tablas siguiendo el patrón descrito en Consultas entre bases de datos (${databaseName}.${tableName}). Puede incluir todas las tablas especificando ${databaseName.*}.

Si la base de datos se ha montado mediante Amazon SageMaker AI Lakehouse, el nombre de la base de datos tendrá el formato ${db}@${schema}.

Este campo se asigna al elemento QueryGenerationConfiguration siguiente que puede usar para configurar la forma en que se consultan los datos:

{ "executionTimeoutSeconds": number, "generationContext": { "tables": [ { "name": "string", "description": "string", "inclusion": "string", "columns": [ { "name": "string", "description": "string", "inclusion": "string" }, ... ] }, ... ], "curatedQueries": [ { "naturalLanguage": "string", "sql": "string" }, ... ] } }

Si desea que se agote el tiempo de espera de la consulta, especifique la duración del tiempo de espera en segundos en el campo executionTimeoutSeconds.

El campo generationContext se asigna a un objeto QueryGenerationContext en el que puede configurar tantas de las siguientes opciones como necesite.

importante

Si incluye un contexto de generación, el motor de consultas hace todo lo posible por aplicarlo al generar SQL. El contexto de generación no es determinista y solo pretende mejorar la precisión del modelo. Para garantizar la precisión, compruebe las consultas de SQL generativo.

Para obtener información sobre los contextos de generación que puede incluir, amplíe las siguientes secciones:

Para mejorar la precisión de la generación de SQL para consultar la base de datos, puede proporcionar una descripción de la tabla o columna que proporcione más contexto que un nombre corto de tabla o columna. Puede hacer lo siguiente:

  • Para añadir una descripción a una tabla, incluya un objeto QueryGenerationTable en la matriz tables. En ese objeto, especifique el nombre de la tabla en el campo name y una descripción en el campo description, como en el ejemplo siguiente:

    { "name": "database.schema.tableA", "description": "Description for Table A" }
  • Para añadir una descripción a una columna, incluya un objeto QueryGenerationTable en la matriz tables. En ese objeto, especifique el nombre de la tabla en el campo name e incluya el campo columns, que se asigna a una matriz de QueryGenerationColumn. En un objeto QueryGenerationColumn, incluya el nombre de la tabla en el campo name y una descripción en el campo description, como en el ejemplo siguiente:

    { "name": "database.schema.tableA", "columns": [ { "name": "Column A", "description": "Description for Column A" } ] }
  • Puede añadir una descripción para una tabla y para una columna, como en el siguiente ejemplo:

    { "name": "database.schema.tableA", "description": "Description for Table A", "columns": [ { "name": "columnA", "description": "Description for Column A" } ] }
    nota

    Introduzca los nombres de las tablas y columnas siguiendo el patrón descrito en Consultas entre bases de datos. Si la base de datos está en AWS Glue Data Catalog, el formato es awsdatacatalog.gluedatabase.table.

Puede sugerir tablas o columnas para incluirlas o excluirlas al generar SQL mediante el campo inclusion en los objetos QueryGenerationTable y QueryGenerationColumn. Puede especificar uno de los siguientes valores en el campo inclusion:

  • INCLUIR: solo las tablas o columnas que especifique se incluyen como contexto al generar SQL.

  • EXCLUIR: las tablas o columnas que especifique se excluyen como contexto al generar SQL.

Puede especificar si desea incluir o excluir tablas o columnas de las siguientes maneras:

  • Para incluir o excluir una tabla, incluya un objeto QueryGenerationTable en la matriz tables. En ese objeto, especifique el nombre de la tabla en el campo name y si desea incluirla o excluirla en el campo inclusion, como en el ejemplo siguiente:

    { "name": "database.schema.tableA", "inclusion": "EXCLUDE" }

    El motor de consultas no añade Table A en el contexto adicional para generar SQL.

  • Para incluir o excluir una columna, incluya un objeto QueryGenerationTable en la matriz tables. En ese objeto, especifique el nombre de la tabla en el campo name e incluya el campo columns, que se asigna a una matriz de QueryGenerationColumn. En un objeto QueryGenerationColumn, especifique el nombre de la columna en el campo name y si desea incluirla o excluirla en el campo inclusion, como en el ejemplo siguiente:

    { "name": "database.schema.tableA", "columns": [ { "name": "database.schema.tableA.columnA", "inclusion": "EXCLUDE" } ] }

    La generación de SQL ignora Column A en Table A en el contexto al generar SQL.

  • Puede combinar tablas y columnas al especificar inclusiones o exclusiones, como en el siguiente ejemplo:

    { "name": "database.schema.tableA", "inclusion": "INCLUDE", "columns": [ { "name": "database.schema.tableA.columnA", "inclusion": "EXCLUDE" } ] }

    La generación de SQL incluye Table A, pero excluye Column A, al añadir contexto para generar SQL.

importante

Las exclusiones de tablas y columnas no sustituyen a las barreras de protección. Estas inclusiones y exclusiones de tablas y columnas se utilizan como contexto adicional para que el modelo lo tenga en cuenta al generar SQL.

Para mejorar la precisión de un motor de consultas a la hora de convertir las consultas de los usuarios en consultas de SQL, puede proporcionarle ejemplos en el campo curatedQueries del objeto QueryGenerationContext, que se asigna a una matriz de objetos CuratedQuery. Cada objeto incluye los siguientes campos:

  • naturalLanguage: un ejemplo de consulta en lenguaje natural.

  • sql: la consulta SQL que corresponde a la consulta en lenguaje natural.