View a markdown version of this page

Desarrollo de un asistente basado en el chat totalmente automatizado con los agentes y las bases de conocimiento de Amazon Bedrock - Recomendaciones de AWS

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.

Desarrollo de un asistente basado en el chat totalmente automatizado con los agentes y las bases de conocimiento de Amazon Bedrock

Jundong Qiao, Shuai Cao, Noah Hamilton, Kiowa Jackson, Praveen Kumar Jeyarajan y Kara Yang, Amazon Web Services

Resumen

Muchas organizaciones se enfrentan a desafíos a la hora de crear un asistente basado en el chat que sea capaz de organizar diversos orígenes de datos para ofrecer respuestas integrales. Este patrón presenta una solución para desarrollar un asistente basado en el chat que sea capaz de responder a consultas tanto de la documentación como de las bases de datos, con una implementación sencilla.

Empezando por Amazon Bedrock, este servicio de inteligencia artificial generativa (IA) totalmente gestionado ofrece una amplia gama de modelos básicos avanzados (FMs). Esto facilita la creación eficiente de aplicaciones de IA generativa con un fuerte enfoque en la privacidad y la seguridad. En el contexto de la recuperación de documentación, la generación aumentada por recuperación (RAG) es una característica fundamental. Utiliza bases de conocimiento para complementar las peticiones de FM con información relevante desde el punto de vista contextual procedente de orígenes externos. Un índice de Amazon OpenSearch Serverless sirve como base de datos vectorial detrás de las bases de conocimiento de Amazon Bedrock. Esta integración se mejora mediante una ingeniería de peticiones cuidadosa para minimizar las imprecisiones y garantizar que las respuestas se basen en la documentación fáctica. Para las consultas de bases FMs de datos, Amazon Bedrock transforma las consultas textuales en consultas SQL estructuradas, incorporando parámetros específicos. Esto permite la recuperación precisa de los datos de las bases de datos administradas por las bases de datos.AWS Glue Para estas consultas se utiliza Amazon Athena.

Para gestionar consultas más complejas, lograr respuestas integrales exige información procedente tanto de la documentación como de las bases de datos. Agentes para Amazon Bedrock es una característica de IA generativa que lo ayuda a crear agentes autónomos que puedan entender tareas complejas y dividirlas en tareas más sencillas para su orquestación. La combinación de información obtenida de las tareas simplificadas, facilitada por los agentes autónomos de Amazon Bedrock, mejora la síntesis de la información y permite obtener respuestas más completas y exhaustivas. Este patrón demuestra cómo crear un asistente basado en el chat mediante Amazon Bedrock y los servicios y características de IA generativa relacionados dentro de una solución automatizada.

Requisitos previos y limitaciones

Requisitos previos 

Limitaciones

  • Esta solución se implementa en una sola unidad Cuenta de AWS.

  • Esta solución solo se puede implementar en Regiones de AWS lugares donde Amazon Bedrock y Amazon OpenSearch Serverless sean compatibles. Para obtener más información, consulte la documentación de Amazon Bedrock y Amazon OpenSearch Serverless.

Versiones de producto

  • Llama-index versión 0.10.6 o posterior

  • Sqlalchemy versión 2.0.23 o posterior

  • Opensearch-py versión 2.4.2 o posterior

  • Requests_aws4auth versión 1.2.3 o posterior

  • AWS SDK para Python (Boto3) versión 1.34.57 o posterior

Arquitectura

Pila de tecnología de destino

AWS Cloud Development Kit (AWS CDK)Se trata de un marco de desarrollo de software de código abierto para definir la infraestructura de nube en el código y aprovisionarla mediante ella. AWS CloudFormation La AWS CDK pila utilizada en este patrón emplea los siguientes recursos: AWS  

  • AWS Key Management Service (AWS KMS)

  • Amazon Simple Storage Service (Amazon S3)

  • AWS Glue Data Catalog, para el componente de AWS Glue base de datos

  • AWS Lambda

  • AWS Identity and Access Management (IAM)

  • Amazon OpenSearch Serverless

  • Amazon Elastic Container Registry (Amazon ECR) 

  • Amazon Elastic Container Service (Amazon ECS)

  • AWS Fargate

  • Amazon Virtual Private Cloud (Amazon VPC)

  • Equilibrador de carga de aplicación

Arquitectura de destino

Diagrama de arquitectura mediante un agente y una base de conocimientos de Amazon Bedrock

El diagrama muestra una completa configuración AWS nativa de la nube dentro de una sola Región de AWS, usando múltiples. Servicios de AWS La interfaz principal del asistente basado en el chat es una aplicación de Streamlit alojada en un clúster de Amazon ECS. Un equilibrador de carga de aplicación administra la accesibilidad. Las consultas realizadas a través de esta interfaz activan la función de Lambda Invocation, que luego interactúa con los agentes para Amazon Bedrock. Este agente responde a las consultas de los usuarios consultando las bases de conocimiento de Amazon Bedrock o invocando una función de Lambda Agent executor. Esta función desencadena un conjunto de acciones asociadas al agente, siguiendo un esquema de API predefinido. Las bases de conocimiento de Amazon Bedrock utilizan un índice OpenSearch sin servidor como base de base de datos vectorial. Además, la Agent executor función genera consultas SQL que se ejecutan en la AWS Glue base de datos a través de Amazon Athena.

Tools (Herramientas)

Servicios de AWS

  • Amazon Athena es un servicio interactivo de consultas que le permite analizar datos directamente en Amazon Simple Storage Service (Amazon S3) usando SQL estándar.

  • Amazon Bedrock es un servicio totalmente gestionado que pone a su disposición modelos básicos de alto rendimiento (FMs) de las principales empresas emergentes de IA y Amazon a través de una API unificada.

  • AWS Cloud Development Kit (AWS CDK)es un marco de desarrollo de software que le ayuda a definir y aprovisionar AWS la infraestructura de la nube en código.

  • AWS Command Line Interface (AWS CLI) es una herramienta de código abierto que te ayuda a interactuar Servicios de AWS mediante comandos en tu shell de línea de comandos.

  • Amazon Elastic Container Service (Amazon ECS) es un servicio de administración de contenedores escalable y rápido que ayuda a ejecutar, detener y administrar contenedores en un clúster.

  • Elastic Load Balancing permite distribuir el tráfico entrante de las aplicaciones o de la red entre varios destinos. Así, por ejemplo, puede distribuir el tráfico a través de instancias de Amazon Elastic Compute Cloud (Amazon EC2), contenedores y direcciones IP de una o varias zonas de disponibilidad.

  • AWS Glue es un servicio de extracción, transformación y carga (ETL) completamente administrado. Ayuda a clasificar, limpiar, enriquecer y mover datos de forma fiable entre almacenes de datos y flujos de datos. Este patrón utiliza un AWS Glue rastreador y una tabla. AWS Glue Data Catalog

  • AWS Lambda es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

  • Amazon OpenSearch Serverless es una configuración sin servidor bajo demanda para Amazon OpenSearch Service. En este patrón, un índice OpenSearch sin servidor sirve como base de datos vectorial para las bases de conocimiento de Amazon Bedrock.

  • Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

Otras herramientas

  • Streamlit es un marco de Python de código abierto para crear aplicaciones de datos.

Repositorio de código

El código de este patrón está disponible en el GitHub genai-bedrock-agent-chatbotrepositorio. El repositorio de código contiene los siguientes archivos y carpetas:

  • Carpeta assets: los activos estáticos, como el diagrama de arquitectura y el conjunto de datos público.

  • Carpeta code/lambdas/action-lambda: el código de Python de la función de Lambda que actúa como una acción para el agente de Amazon Bedrock.

  • code/lambdas/create-index-lambdafolder: el código de Python de la función Lambda que crea el índice OpenSearch Serverless.

  • Carpeta code/lambdas/invoke-lambda: el código de Python de la función de Lambda que invoca el agente de Amazon Bedrock, al que se llama directamente desde la aplicación Streamlit.

  • code/lambdas/update-lambdacarpeta: el código de Python de la función Lambda que actualiza o elimina los recursos después de desplegarlos a AWS través de. AWS CDK

  • code/layers/boto3_layerfolder: la AWS CDK pila que crea una capa de Boto3 que se comparte entre todas las funciones de Lambda.

  • code/layers/opensearch_layercarpeta: la AWS CDK pila que crea una capa OpenSearch sin servidor que instala todas las dependencias para crear el índice.

  • code/streamlit-appfolder: el código de Python que se ejecuta como imagen del contenedor en Amazon ECS.

  • code/code_stack.py— AWS CDK Construyen archivos de Python que crean AWS recursos.

  • app.py— La AWS CDK pila de archivos Python que despliegan AWS recursos en la AWS cuenta de destino.

  • requirements.txt— La lista de todas las dependencias de Python que se deben instalar para. AWS CDK

  • cdk.json: el archivo de entrada que proporciona los valores necesarios para crear los recursos. Además, en los campos context/config, puede personalizar la solución en consecuencia. Para más información sobre la personalización, consulte la sección Información adicional.

Prácticas recomendadas

Epics

TareaDescripciónHabilidades requeridas

Exporte las variables de cuenta y región.

Para proporcionar AWS las credenciales AWS CDK mediante variables de entorno, ejecute los siguientes comandos.

export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number> export CDK_DEFAULT_REGION=<Region>
AWS DevOps, DevOps ingeniero

Configure el AWS CLI perfil indicado.

Para configurar el perfil AWS CLI designado para la cuenta, siga las instrucciones de los ajustes de configuración y del archivo de credenciales.

AWS DevOps, DevOps ingeniero
TareaDescripciónHabilidades requeridas

Clone el repositorio en su estación de trabajo local.

Para clonar el repositorio, ejecute el siguiente comando en el terminal.

git clone https://github.com/awslabs/genai-bedrock-agent-chatbot.git
DevOps ingeniero, AWS DevOps

Configure un entorno de Python virtual.

Para configurar y activar el entorno virtual de Python, ejecute el siguiente comando.

cd genai-bedrock-agent-chatbot python3 -m venv .venv source .venv/bin/activate

Para configurar las dependencias necesarias, ejecute el siguiente comando.

pip3 install -r requirements.txt
DevOps ingeniero, AWS DevOps

Configure el AWS CDK entorno.

Para convertir el código en una AWS CloudFormation plantilla, ejecute el comandocdk synth.

AWS DevOps, DevOps ingeniero
TareaDescripciónHabilidades requeridas

Implementar recursos en la cuenta.

Para implementar recursos en el Cuenta de AWS mediante el AWS CDK, haga lo siguiente:

  1. En la raíz del repositorio clonado, en el archivo cdk.json, introduzca entradas para los parámetros de registro: Los valores de ejemplo son INFO, DEBUG, WARN y ERROR.

    Estos valores definen los mensajes de cada registro para las funciones de Lambda y la aplicación Streamlit.

  2. El cdk.json archivo de la raíz del repositorio clonado contiene el nombre de la AWS CloudFormation pila utilizada para la implementación. El nombre predeterminado de la pila es chatbot-stack. El nombre predeterminado del agente de Amazon Bedrock es ChatbotBedrockAgent y el alias predeterminado del agente de Amazon Bedrock es Chatbot_Agent.

  3. Ejecute el cdk deploy comando para implementar los recursos. El comando cdk deploy usa constructos de capa 3 para crear varias funciones de Lambda para copiar documentos y archivos de conjuntos de datos CSV en buckets de S3. También implementa el agente de Amazon Bedrock, las bases de conocimiento y la función de Lambda Action group para el agente de Amazon Bedrock.

  4. Inicie sesión en la CloudFormation consola y Consola de administración de AWS, a continuación, ábrala.

  5. Confirme que se ha implementado correctamente la pila. Para obtener instrucciones, consulta Cómo revisar tu pila en la AWS CloudFormation consola.

Tras una implementación correcta, puede acceder a la aplicación de asistente basada en el chat mediante la URL proporcionada en la pestaña Resultados de la CloudFormation consola.

DevOps ingeniero, AWS DevOps
TareaDescripciónHabilidades requeridas

Elimine los AWS recursos.

Después de probar la solución, limpie los recursos y ejecute el comando cdk destroy.

AWS DevOps, DevOps ingeniero

Recursos relacionados

AWS documentación

Otros recursos AWS

Otros recursos

Información adicional

Personalización del asistente basado en el chat con sus propios datos

Para integrar sus datos personalizados para implementar la solución, siga estas pautas estructuradas. Estos pasos están diseñados para garantizar un proceso de integración eficiente y fluido, lo que le permitirá implementar la solución de manera efectiva con sus datos personalizados.

Para la integración de datos de la base de conocimientos

Preparación de datos

  1. Localice el directorio assets/knowledgebase_data_source/.

  2. Coloque el conjunto de datos en esta carpeta.

Ajustes de configuración

  1. Abra el archivo cdk.json.

  2. Navegue hasta el campo context/configure/paths/knowledgebase_file_name y, a continuación, actualícelo en consecuencia.

  3. Navegue hasta el campo bedrock_instructions/knowledgebase_instruction y, a continuación, actualícelo para que refleje con precisión los matices y el contexto de su nuevo conjunto de datos.

Para la integración de datos estructurales

Organización de datos

  1. En el directorio assets/data_query_data_source/, cree un subdirectorio, como tabular_data.

  2. Coloque su conjunto de datos estructurado (los formatos aceptables incluyen CSV, JSON, ORC y Parquet) en esta subcarpeta recién creada.

  3. Si se está conectando a una base de datos existente, actualice la función create_sql_engine() en code/lambda/action-lambda/build_query_engine.py para conectarse a su base de datos.

Actualizaciones de configuración y código

  1. En el archivo cdk.json, actualice el campo context/configure/paths/athena_table_data_prefix para alinearlo con la nueva ruta de datos.

  2. Realice code/lambda/action-lambda/dynamic_examples.csv la revisión incorporando nuevos text-to-SQL ejemplos que se correspondan con su conjunto de datos.

  3. Revise code/lambda/action-lambda/prompt_templates.py para reflejar los atributos de su conjunto de datos estructurado.

  4. En el archivo cdk.json, actualice el campo context/configure/bedrock_instructions/action_group_description para explicar el propósito y la funcionalidad de la función de Lambda Action group.

  5. En el archivo assets/agent_api_schema/artifacts_schema.json, explique las nuevas funcionalidades de la función de Lambda Action group.

Actualización general

En el archivo cdk.json, en la sección context/configure/bedrock_instructions/agent_instruction, proporcione una descripción completa de la funcionalidad y el propósito de diseño previstos por el agente de Amazon Bedrock, teniendo en cuenta los datos recién integrados.