Desarrolle asistentes avanzados de IA generativa basados en chat mediante RAG y solicitudes ReAct - 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.

Desarrolle asistentes avanzados de IA generativa basados en chat mediante RAG y solicitudes ReAct

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

Resumen

Una empresa típica tiene el 70 por ciento de sus datos atrapados en sistemas aislados. Puede utilizar asistentes basados en el chat de IA generativa para obtener información y relaciones entre estos silos de datos mediante interacciones en lenguaje natural. Para aprovechar al máximo la IA generativa, los resultados deben ser fiables, precisos e incluir los datos corporativos disponibles. El éxito de los asistentes basados en el chat depende de lo siguiente:

  • Modelos de IA generativa (como Anthropic Claude 2)

  • Vectorización de orígenes de datos

  • Técnicas de razonamiento avanzadas, como el ReAct marco, para impulsar el modelo

Este patrón proporciona enfoques de recuperación de datos desde orígenes de datos como los buckets de Amazon Simple Storage Service (Amazon S3), AWS Glue y Amazon Relational Database Service (Amazon RDS). El valor se obtiene de esos datos intercalando la generación aumentada de recuperación (RAG) con los métodos. chain-of-thought Los resultados permiten mantener conversaciones complejas con asistentes basados en el chat que utilizan la totalidad de los datos almacenados en su empresa.

Este patrón utiliza los SageMaker manuales de Amazon y las tablas de datos de precios como ejemplo para explorar las capacidades de un asistente generativo basado en el chat de IA. Crearás un asistente basado en el chat que ayude a los clientes a evaluar el SageMaker servicio respondiendo a preguntas sobre los precios y las capacidades del servicio. La solución utiliza una biblioteca Streamlit para crear la aplicación frontend y el LangChain marco para desarrollar el backend de la aplicación con la tecnología de un gran modelo de lenguaje (LLM).

Las consultas al asistente basado en el chat se responden con una clasificación inicial de intenciones para redirigirlas a uno de los tres posibles flujos de trabajo. El flujo de trabajo más sofisticado combina una orientación de asesoramiento general con un análisis de precios complejo. Puede adaptar el patrón para que se ajuste a los casos de uso empresarial, corporativo e industrial.

Requisitos previos y limitaciones

Requisitos previos 

Limitaciones

  • LangChain no es compatible con todos los LLM para la transmisión. Los modelos Anthropic Claude son compatibles, pero los modelos de AI21 Labs no.

  • Esta solución se implementa en una única cuenta de AWS.

  • Esta solución solo se puede implementar en las regiones de AWS en las que estén disponibles Amazon Bedrock y Amazon Kendra. Para obtener información sobre la disponibilidad, consulte la documentación de Amazon Bedrock y Amazon Kendra.

Versiones de producto

  • Python versión 3.11 o posterior

  • Streamlit versión 1.30.0 o posterior

  • Streamlit versión de chat 0.1.1 o posterior

  • LangChain versión 0.1.12 o posterior

  • AWS CDK versión 2.132.1 o posterior

Arquitectura

Pila de tecnología de destino

  • Amazon Athena

  • Amazon Bedrock

  • Amazon Elastic Container Service (Amazon ECS)

  • AWS Glue

  • AWS Lambda

  • Amazon S3

  • Amazon Kendra

  • Elastic Load Balancing

Arquitectura de destino

El código de AWS CDK implementará todos los recursos necesarios para configurar la aplicación de asistente basado en el chat en una cuenta de AWS. La aplicación de asistente basada en el chat que se muestra en el siguiente diagrama está diseñada para responder a las consultas SageMaker relacionadas de los usuarios. Los usuarios se conectan a través de un equilibrador de carga de aplicación a una VPC que contiene un clúster de Amazon ECS que aloja la aplicación Streamlit. Una función de Lambda de orquestación se conecta a la aplicación. Los orígenes de datos del bucket de S3 proporcionan datos a la función de Lambda a través de Amazon Kendra y AWS Glue. La función de Lambda se conecta a Amazon Bedrock para responder a las consultas (preguntas) de los usuarios de asistentes basados en el chat.

Diagrama de arquitectura.
  1. La función de Lambda de orquestación envía la solicitud de petición LLM al modelo de Amazon Bedrock (Claude 2).

  2. Amazon Bedrock devuelve la respuesta LLM a la función de Lambda de orquestación.

Flujo lógico dentro de la función de Lambda de orquestación

Cuando los usuarios hacen una pregunta a través de la aplicación Streamlit, esta invoca directamente la función de Lambda de orquestación. El siguiente diagrama muestra el flujo lógico cuando se invoca la función de Lambda.

Diagrama de arquitectura.
  • Paso 1: la entrada query (pregunta) se clasifica en una de las tres intenciones:

    • Preguntas de SageMaker orientación general

    • Preguntas generales SageMaker sobre precios (formación/inferencia)

    • Preguntas complejas relacionadas con los precios SageMaker

  • Paso 2: la entrada query inicia uno de los tres servicios:

    • RAG Retrieval service, que recupera el contexto relevante de la base de datos vectorial de Amazon Kendra y llama al LLM a través de Amazon Bedrock para resumir el contexto recuperado como respuesta.

    • Database Query service, que utiliza el LLM, los metadatos de la base de datos y las filas de muestra de las tablas relevantes para convertir la entrada query en una consulta SQL. El servicio Database Query ejecuta la consulta SQL en la base de datos de SageMaker precios a través de Amazon Athena y resume los resultados de la consulta como respuesta.

    • In-context ReACT Agent service, que divide la entrada query en varios pasos antes de proporcionar una respuesta. El agente utiliza RAG Retrieval service y Database Query service como herramientas para recuperar información relevante durante el proceso de razonamiento. Una vez completados los procesos de razonamiento y acción, el agente genera la respuesta final como respuesta.

  • Paso 3: la respuesta de la función de Lambda de orquestación se envía a la aplicación Streamlit como salida.

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 la infraestructura de la nube de AWS en código.

  • La Interfaz de la línea de comandos de AWS (AWS CLI) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en el intérprete de comandos de la 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.

  • 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 emplea un rastreador de AWS Glue y una tabla del catálogo de datos de AWS Glue.

  • Amazon Kendra es un servicio de búsqueda inteligente que usa el procesamiento del lenguaje natural y algoritmos avanzados de machine learning para devolver respuestas específicas a las preguntas de búsqueda a partir de sus datos.

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

  • Elastic Load Balancing (ELB) distribuye el tráfico entrante de aplicaciones o redes 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.

Repositorio de código

El código de este patrón está disponible en el GitHub genai-bedrock-chatbotrepositorio.

El repositorio de código contiene los siguientes archivos y carpetas:

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

  • Carpeta code/lambda-container: el código Python que se ejecuta en la función de Lambda.

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

  • Carpeta tests: los archivos de Python que se ejecutan para realizar pruebas unitarias de los constructos de AWS CDK.

  • Carpeta code/code_stack.py: los archivos de Python de constructo de AWS CDK usados para crear los recursos de AWS.

  • app.py: los archivos de Python de la pila de AWS CDK que se utilizan para implementar los recursos de AWS en la cuenta de AWS de destino.

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

  • requirements-dev.txt: la lista de todas las dependencias de Python que se deben instalar para AWS CDK para ejecutar el conjunto de pruebas unitarias.

  • cdk.json – El archivo de entrada que proporciona los valores necesarios para activar los recursos

Prácticas recomendadas

Epics

TareaDescripciónHabilidades requeridas

Exporte las variables de la cuenta y región de AWS en las que se implementará la pila.

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

export CDK_DEFAULT_ACCOUNT=<12 Digit AWS Account Number> export CDK_DEFAULT_REGION=<region>
DevOps ingeniero, AWS DevOps

Configure el perfil de AWS CLI.

Para configurar el perfil de AWS CLI para la cuenta, siga las instrucciones de la documentación de AWS.

DevOps ingeniero, AWS DevOps
TareaDescripciónHabilidades requeridas

Clone el repositorio en su máquina local.

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

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

Configure el entorno virtual de Python e instale las dependencias necesarias.

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

cd genai-bedrock-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 entorno de AWS CDK y sintetice el código de AWS CDK.

  1. Para configurar el entorno de AWS CDK en su cuenta de AWS, ejecute el siguiente comando.

    cdk bootstrap aws://ACCOUNT-NUMBER/REGION
  2. Para convertir el código en una configuración de CloudFormation pila de AWS, ejecute el comandocdk synth.

DevOps ingeniero, AWS DevOps
TareaDescripciónHabilidades requeridas

Proporcione acceso al modelo Claude.

Para activar el acceso al modelo Anthropic Claude en su cuenta de AWS, siga las instrucciones de la documentación de Amazon Bedrock.

AWS DevOps

Implementar recursos en la cuenta.

Para implementar recursos en la cuenta de AWS mediante AWS CDK, haga lo siguiente:

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

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

  2. El app.py archivo de la raíz del repositorio clonado contiene el nombre de la CloudFormation pila de AWS utilizada para la implementación. El nombre predeterminado de la pila es chatbot-stack.

  3. Ejecute el cdk deploy comando para implementar los recursos.

    El comando cdk deploy usa constructos de L3 para crear varias funciones de Lambda para copiar documentos y archivos de conjuntos de datos CSV en buckets de S3.

  4. Una vez completado el comando, inicie sesión en la consola de administración de AWS, abra la CloudFormation consola y compruebe que la pila se ha implementado correctamente.

Tras una implementación correcta, puede acceder a la aplicación de asistente basada en el chat mediante la URL proporcionada en la sección de CloudFormation resultados.

AWS DevOps, DevOps ingeniero

Ejecute el rastreador de AWS Glue y cree la tabla del catálogo de datos.

El rastreador de AWS Glue se usa para mantener el esquema de datos dinámico. La solución crea y actualiza las particiones en la tabla del catálogo de datos de AWS Glue mediante la ejecución del rastreador bajo demanda. Una vez copiados los archivos del conjunto de datos CSV en el bucket de S3, ejecute el rastreador de AWS Glue y cree el esquema de la tabla del catálogo de datos para realizar las pruebas:

  1. Vaya la consola de AWS Glue.

  2. En el panel de navegación, en Catálogo de datos, seleccione rastreador.

  3. Seleccione el rastreador con el sufijo sagemaker-pricing-crawler.

  4. Ejecute el rastreador.

  5. Una vez que el rastreador se ejecuta correctamente, crea una tabla de Catálogo de datos de AWS Glue.

nota

El código de AWS CDK configura el rastreador de AWS Glue para que se ejecute bajo demanda, pero también puede programarlo para que se ejecute de forma periódica.

DevOps ingeniero, AWS DevOps

Inicie la indexación de documentos.

Una vez copiados los archivos en el bucket de S3, utilice Amazon Kendra para rastrearlos e indexarlos:

  1. Vaya a la consola de Amazon Kendra.

  2. Seleccione el índice con el sufijo chatbot-index.

  3. En el panel de navegación, elija Orígenes de datos y seleccione el conector de orígenes de datos con el sufijo chatbot-index.

  4. Seleccione Sincronizar ahora para iniciar el proceso de indexación.

nota

El código de AWS CDK configura la sincronización de índices de Amazon Kendra para que se ejecute bajo demanda, pero también puede ejecutarla periódicamente mediante el parámetro de programación.

AWS DevOps, DevOps ingeniero
TareaDescripciónHabilidades requeridas

Elimine los recursos de AWS.

Después de probar la solución, limpie los recursos:

  1. Para eliminar los recursos de AWS implementados por la solución, ejecute el comando cdk destroy.

  2. Elimine todos los objetos de los dos buckets de S3 y, a continuación, elimine los buckets.

    Para obtener más información, consulte Eliminación de un bucket.

DevOps ingeniero, AWS DevOps

Resolución de problemas

ProblemaSolución

AWS CDK devuelve errores.

Para obtener ayuda con los errores de AWS CDK, consulte Solución de problemas comunes de AWS CDK.

Recursos relacionados

Información adicional

Comandos de AWS CDK

Cuando trabaje con AWS CDK, recuerde los siguientes comandos útiles:

  • Muestra todas las pilas de la aplicación

    cdk ls
  • Emite la plantilla de AWS CloudFormation sintetizada

    cdk synth
  • Implementa la pila en la cuenta y región de AWS predeterminadas

    cdk deploy
  • Compara la pila implementada con el estado actual

    cdk diff
  • Abre la documentación de AWS CDK

    cdk docs
  • Elimina la CloudFormation pila y elimina los recursos desplegados por AWS

    cdk destroy