

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
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases"></a>

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

## Resumen
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-summary"></a>

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](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html), 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)](https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-customize-rag.html) es una característica fundamental. Utiliza [bases de conocimiento](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html) 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](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) 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](https://docs.aws.amazon.com/glue/latest/dg/define-database.html) Para estas consultas se utiliza [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html).

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](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html) 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
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Docker [instalado](https://docs.docker.com/engine/install/)
+ AWS Cloud Development Kit (AWS CDK), [instalado](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_tools) y [arrancado en el](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_bootstrap) o `us-east-1` `us-west-2` Regiones de AWS
+ AWS CDK [Kit de herramientas, versión 2.114.1 o posterior, instalado](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)
+ AWS Command Line Interface [https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ La versión 3.11 o posterior de Python [instalada](https://www.python.org/downloads/)
+ En Amazon Bedrock, [habilite el acceso](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html) a Claude 2, Claude 2.1, Claude Instant y Titan Embeddings G1 — Text

**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](https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-regions.html) y [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html#serverless-regions).

**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\$1aws4auth versión 1.2.3 o posterior
+ AWS SDK para Python (Boto3) versión 1.34.57 o posterior

## Arquitectura
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-architecture"></a>

**Pila de tecnología de destino**

[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)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](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) 

**Arquitectura de destino**

![\[Diagrama de arquitectura mediante un agente y una base de conocimientos de Amazon Bedrock\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/15372718-3a5d-4918-9cfa-422c455f288d/images/ff19152e-0bb6-4758-a6dd-4f6140e55113.png)


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](https://docs.streamlit.io/) alojada en un clúster de Amazon ECS. Un [equilibrador de carga de aplicación](https://aws.amazon.com/elasticloadbalancing/application-load-balancer/) 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)
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-tools"></a>

**Servicios de AWS**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) 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](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) 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)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)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)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 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)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) 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](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) 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](https://docs.aws.amazon.com/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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) 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)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 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](https://docs.streamlit.io/) 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-chatbot](https://github.com/awslabs/genai-bedrock-agent-chatbot/)repositorio. 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-lambda`folder: 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-lambda`carpeta: 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_layer`folder: la AWS CDK pila que crea una capa de Boto3 que se comparte entre todas las funciones de Lambda.
+ `code/layers/opensearch_layer`carpeta: la AWS CDK pila que crea una capa OpenSearch sin servidor que instala todas las dependencias para crear el índice.
+ `code/streamlit-app`folder: 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](#develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-additional).

## Prácticas recomendadas
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-best-practices"></a>
+ El ejemplo de código que se proporciona aquí es únicamente para fines proof-of-concept (PoC) o piloto. Si desea llevar el código a producción, asegúrese de seguir las siguientes prácticas recomendadas:
  + Habilitación del [registro de acceso a Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)
  + Habilitación de los [registros de flujo de VPC](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)
+ Configure la supervisión y las alertas para las funciones de Lambda. Para obtener más información, consulte [Supervisión y solución de problemas de funciones de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html). Para obtener información sobre las prácticas recomendadas, consulte las [prácticas recomendadas para trabajar con AWS Lambda funciones](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html).

## Epics
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-epics"></a>

### Configure AWS las credenciales en su estación de trabajo local
<a name="set-up-aws-credentials-on-your-local-workstation"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Exporte las variables de cuenta y región. | Para proporcionar AWS las credenciales AWS CDK mediante variables de entorno, ejecute los siguientes comandos.<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number><br />export CDK_DEFAULT_REGION=<Region></pre> | 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](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html). | AWS DevOps, DevOps ingeniero | 

### Configure su entorno
<a name="set-up-your-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio en su estación de trabajo local. | Para clonar el repositorio, ejecute el siguiente comando en el terminal.<pre>git clone https://github.com/awslabs/genai-bedrock-agent-chatbot.git</pre> | DevOps ingeniero, AWS DevOps | 
| Configure un entorno de Python virtual. | Para configurar y activar el entorno virtual de Python, ejecute el siguiente comando.<pre>cd genai-bedrock-agent-chatbot<br />python3 -m venv .venv<br />source .venv/bin/activate</pre>Para configurar las dependencias necesarias, ejecute el siguiente comando.<pre>pip3 install -r requirements.txt</pre> | DevOps ingeniero, AWS DevOps | 
| Configure el AWS CDK entorno. | Para convertir el código en una AWS CloudFormation plantilla, ejecute el comando`cdk synth`. | AWS DevOps, DevOps ingeniero | 

### Configuración e implementación de la aplicación
<a name="configure-and-deploy-the-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implementar recursos en la cuenta. | Para implementar recursos en el Cuenta de AWS mediante el AWS CDK, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.html)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 | 

### Limpie todos los AWS recursos de la solución
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| Tarea | Descripción | Habilidades 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
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-resources"></a>

**AWS documentación**
+ Recursos de Amazon Bedrock:
  + [Acceso a modelos](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
  + [Parámetros de inferencia para modelos básicos](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
  + [Agentes de Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html)
  + [Bases de conocimiento de Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html)
+ [Creación de funciones de Lambda con Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ AWS CDK recursos:
  + [Comience con el AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
  + [Solución de AWS CDK problemas comunes](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html)
  + [Trabajando con el AWS CDK en Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Creador de aplicaciones de IA generativa en AWS](https://docs.aws.amazon.com/solutions/latest/generative-ai-application-builder-on-aws/solution-overview.html)

**Otros recursos AWS **
+ [Motor vectorial para Amazon OpenSearch Serverless](https://aws.amazon.com/opensearch-service/serverless-vector-engine/)

**Otros recursos**
+ [LlamaIndex documentación](https://docs.llamaindex.ai/en/stable/)
+ [Documentación de Streamlit](https://docs.streamlit.io/)

## Información adicional
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-additional"></a>

**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/`.

1. Coloque el conjunto de datos en esta carpeta.

**Ajustes de configuración**

1. Abra el archivo `cdk.json`.

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

1. 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`.

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

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

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

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

1. 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`.

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