Blog de Amazon Web Services (AWS)

Screening Eagle – Desarrollo de un asistente de ventas virtual low-cost con Amazon Bedrock

Sobre Screening Eagle Technologies

Screening Eagle, una empresa formada por la fusión de Dreamlab y Proceq. Proporciona una plataforma tecnológica para la inspección inteligente del entorno construido. La plataforma combina software y sensores para generar datos que mejoren la toma de decisiones en cuanto a la construcción y mantenimiento de activos. Screening Eagle tiene presencia en Suiza, España, Singapur, EE.UU., Reino Unido, China, Emiratos Árabes y Brasil.

El reto

El amplio y creciente catálogo de soluciones de Screening Eagle contiene una riqueza de detalles técnicos que exige un profundo conocimiento del producto. Ésto, en ocasiones, suponía una barrera de entrada para sus clientes e implica una curva de aprendizaje importante para nuevos empleados. Para abordar este reto, Screening Eagle se planteó desarrollar una herramienta capaz de servir información detallada sobre sus productos, así como de responder a preguntas avanzadas y ofrecer recomendaciones sobre el uso de sus soluciones. En el diseño de esta solución, se identificaron tres retos clave:

  1. La complejidad técnica de la información a servir y del usuario objetivo, altamente especializado en la materia.
  2. La necesidad de ingerir fuentes de datos heterogéneas : hojas de datos y bases de datos, y registros no estructurados con texto, imágenes y datos numéricos.
  3. Mantener bajos costes y tiempos de respuesta mínimos, crucial para asegurar la escalabilidad del sistema y mejorar la experiencia del cliente.

La solución con AWS

Screening Eagle desarrolló un asistente virtual que permite a sus empleados y clientes acceder de forma interactiva a detalles específicos sobre productos y soluciones a través de un formato de preguntas y respuestas basadas en lenguaje natural. Este asistente virtual está disponible a través de diversos canales, permitiendo a los usuarios acceder fácilmente a la información que requieren en cualquier momento.

Esta herramienta, basada en servicios de AWS, está formada por los siguientes componentes clave:

  • Un pipeline de procesamiento e ingesta de la información en una base de datos vectorial.
  • El uso de modelos de lenguaje de gran tamaño (LLM) disponibles en Amazon Bedrock para generar respuestas a preguntas técnicas avanzadas.
  • La categorización, el seguimiento del historial de la conversación y técnicas de prompt-engineering e inferencias auxiliares para mejorar la calidad de las respuestas.
  • La posibilidad de realizar búsquedas híbridas en una base de datos vectorial mediante Retrieval Augmented Generation (RAG).

Todo esto se encuentra disponible a través de una API REST que permite integrar la herramienta en diversos canales, como Telegram, WhatsApp o la web.

La siguiente imagen describe a alto nivel la arquitectura implementada por Screening Eagle:

  1. El usuario escribe la pregunta en el chat. Ésta se envía a través de Amazon API Gateway a la función AWS Lambda Orchestration encargada de realizar la orquestación.
  2. A la pregunta se le añade como contexto el chat histórico del usuario junto con los tópicos asociados a preguntas anteriores.
  3. La función AWS Lambda Orchestration realiza una primera llamada al modelo de Anthropic Claude a través de Amazon Bedrock para inferir la categoría y tópico de la pregunta (primer prompt).
  4. Con el tópico y categorías recuperadas se enriquece la pregunta del usuario. Por ejemplo:
    • Pregunta: ¿Dónde puedo comprar su mejor dispositivo para el mapeo subterráneo?
    • Tópico: «Compra de un buen dispositivo para inspección subterránea. Dispositivos GPR»
    • Categorías: «Productos, Ventas»
  5. Para obtener un vector de la pregunta y de cara al proceso de RAG, la función AWS Lambda Orchestration realiza una llamada/inferencia al modelo de embeddings, que se ejecuta en la función AWS Lambda Embeddings. Se utiliza un modelo de embeddings de HuggingFace que se carga de forma local en la propia función AWS Lambda.
  6. La función AWS Lambda Orchestration realiza una llamada a la función AWS Lambda Retrieval de recuperación de documentos. Ésta es la encargada de realizar búsquedas semánticas y por palabras clave para obtener fragmentos de texto relevantes en recursos como manuales, FAQ y tablas en la base de datos de Amazon RDS postgreSQL, usando el plugin pgvector.
  7. La función AWS Lambda Orchestration utiliza los fragmentos de documentos relacionados con la búsqueda para realizar una segunda inferencia contra el modelo de cross-encoding alojado en la función AWS Lambda Cross-encoding. Como resultado, se obtiene una puntuación o score para cada fragmento de texto en función de la relevancia con respecto a la pregunta enriquecida. Se utiliza un modelo de cross-encoding HuggingFace que se carga de forma local en la propia función AWS Lambda Cross-encoding.
  8. Como último paso de la función AWS Lambda Orchestration, se crea un prompt aumentado utilizando Tags XML para identificar de forma clara las diferentes secciones del prompt:
    • Instrucción, contexto, respuesta y planteamiento (<context>, <thinking> y <answer>)
    • Información, descripción y aplicación de los productos
    • Información de la compañía
    • Categoría y chat histórico
    • Reglas y guardarrailes
    • El prompt aumentado se utiliza para invocar al modelo de Athropic Claude a través de Amazon Bedrock y generar una respuesta final para el usuario (segundo prompt).
  9. El LLM produce una salida que incluye un espacio de «thinking» para razonamiento y una etiqueta «answer» con la respuesta final para el usuario.
  10. Se recibe la respuesta final.
  11. La respuesta final se muestra al usuario a través de la interfaz web.
  12. Los datos como tópicos, historial de chat y categorías se almacenan en una base de datos Amazon DynamoDB para su uso futuro.

Deep Dive

Complejidad de la información y fuentes de datos heterogéneas: Estrategias de prompt engineering y cross-encoding

Screening Eagle se enfrentó a dos desafíos principales: En primer lugar, la complejidad de la información técnica y las complejas consultas de los usuarios. Muchas preguntas no mencionan explícitamente el producto en cuestión, lo que dificulta la búsqueda semántica y a menudo provoca que se proporcione información irrelevante. En segundo lugar, cuando una pregunta contiene los nombres de varios productos, la búsqueda semántica a veces devuelve información incompleta o ignora alguno de esos productos.

Para abordar estos desafíos, Screening Eagle implementa estrategias avanzadas de prompt engineering y cross-encoding.

Prompt Engineering

El prompt engineering es un proceso clave para guiar a los modelos de IA generativa y obtener respuestas precisas y relevantes. Screening Eagle utilizó las siguientes técnicas:

Clasificación de los intents (intenciones) mediante múltiples prompts y llamadas:

  1. Primer prompt: Se utiliza un primer prompt para realizar una primera llamada al modelo Anthropic Claude para extraer el tópico de la conversación y asignar una categoría a la pregunta. Este primer prompt incluye:
    • Instrucción para que el modelo responda con el tópico y categoría
    • Reglas
    • Categorías
    • Listado de productos
    • Historial del chat del usuario junto con los tópicos detectados en conversaciones previas
    • Pregunta del usuario
  2.  Segundo prompt: Una vez obtenidos los tópicos y categorías, y los fragmentos de documentos relevantes a la pregunta mediante RAG, se realiza una llamada adicional al modelo Anthropic Claude que genera la respuesta final para el usuario, con un segundo prompt que incluye:
    • Instrucción para que el modelo responda a la pregunta del usuario
    • Reglas y guardarrailes
    • Contexto e historial del chat
    • Información obtenida mediante búsqueda híbrida: producto, descripción de producto, aplicación de producto e información de la compañía
    • Categoría de la pregunta
    • Listado de productos
    • Historial del chat del usuario junto con los tópicos detectados en conversaciones previas
    • Pregunta del usuario

Etiquetas XML y prompts de sistema

  1. Utilización de etiquetas XML siguiendo las recomendaciones de Anthropic para construir prompts de sistema (system prompts), lo que ayuda al modelo a comprender relaciones complejas dentro de la estructura del prompt.
  2. División de la respuesta del modelo en dos partes: <thinking> para el razonamiento y <answer> para la respuesta final al usuario.

Reglas de prompt (Guardrails)

Inclusión de reglas dentro de las etiquetas <rules> para guiar el comportamiento del modelo mediante guardarrailes: como permanecer dentro del contexto, responder de manera concisa y segura, limitar las menciones a productos específicos, responder apropiadamente cuando no está seguro, y omitir referencias explícitas a las etiquetas XML o respuestas no autorizadas.

Información adicional en los prompts

Inclusión de información sobre la relación entre productos y sus familias según el caso de uso. Actualmente varias fuentes de información se añaden siempre al prompt y el LLM es guiado para saber en qué parte del mismo debe fijarse según el tipo de pregunta.

El  historial de la conversación, los temas y las categorías se almacenan en DynamoDB para su uso futuro durante el resto de la conversación y troubleshooting.

Cross-Encoding

Además del prompt engineering, Screening Eagle implementó técnicas de cross-encoding para mejorar la relevancia de los fragmentos de documentos recuperados durante el proceso de RAG.

El cross-encoding es una técnica que utiliza un modelo de IA para calcular la similitud entre dos secuencias de texto (en este caso, la pregunta del usuario enriquecida con el tópico y los fragmentos de documentos recuperados). El modelo de cross-encoding produce un puntaje (score) de similitud que se utiliza para ordenar los fragmentos de documentos, lo que permite filtrar por relevancia en función del score. Los fragmentos resultantes se utilizan como contexto en la llamada al modelo LLM para generar la respuesta final.

El modelo de cross-encoding se carga localmente en una función AWS Lambda como se detalla en la siguiente sección.

Teniendo en cuenta ambas estrategias, prompt engineering y cross-encoding el flujo completo se detalla a continuación.

Costes y rendimiento: Arquitectura serverless y pre-calentamiento de las Lambdas

Una de las decisiones clave que ha permitido a Screening Eagle minimizar los tiempos de respuesta y los costes de infraestructura ha sido el despliegue de los modelos de cross-encoding y embeddings empaquetando el código y dependencias en una imagen contenedor en AWS Lambda.

Para ello, Screening Eagle ha definido la siguiente estructura en su paquete de despliegue:

  • Infraestructura y el sistema operativo es totalmente gestionado por AWS Lambda.
  • Contenedor Docker: El Dockerfile define, importa, y carga en caché los modelos de código abierto utilizados (Hugging Face) para las tareas de Cross-Encoding y Embeddings, e instala librerías adicionales como PyTorch. En el contenedor Docker también se define el punto de entrada del contendor apuntando al handler de la función AWS Lambda.
  • Función AWS Lambda: Dentro del Handler, se define la lógica de procesamiento e inferencia que se ejecuta en cada invocación. La carga del modelo, por el contrario, se realiza en el contexto global de la función y se ejecuta durante la inicialización del contenedor, en la primera invocación. Esto asegura que el modelo esté listo para ser utilizado en ejecuciones subsecuentes, minimizando así el impacto de la carga del modelo en los tiempos de respuesta. En este blogpost se detalla cómo desplegar modelos en funciones de AWS Lambda.
// Importación de librerías y dependencias
// Definición y carga del modelo
model_dir = os.environ.get('MODEL_DIR')
device = torch.device('cpu')
model = AutoModelForSequenceClassification.from_pretrained(model_dir).to(device)

// Función Handler
def handler(event, _):
  // Lógica de inferencia invocando al modelo (variable model)

Para las funciones Lambda que no están contenerizadas, como la de Orchestration o Retrieval, se importan las librerías auxiliares de LangChain, PyTorch y la última versión de boto3 (que soporta el cliente actualizado de Amazon Bedrock) como Lambda Layers. Ésto permite optimizar el rendimiento y la eficiencia en la ejecución de las funciones, así como facilita el mantenimiento y la actualización de las mismas a lo largo del tiempo.

Por último, para mejorar los tiempos de arranque en frío de las primeras invocaciones de AWS Lambda que cargan los modelos de cross-encoding y embeddings, Screening Eagle ha implementado un proceso de invocación proactiva, asíncrona, y en segundo plano de las funciones AWS Lambda. Ésto ocurre cuando un usuario accede al chatbot después de un período de inactividad, garantizando así que las funciones estén pre-calentadas y listas para una inferencia inmediata.

Con estas estrategias, Screening Eagle ha logrado reducir los tiempos de inferencia de entre 10 y 30 segundos a menos de un segundo, optimizando tanto la experiencia del usuario como los costes de ejecución de las funciones. Además, esta arquitectura Serverless elimina la necesidad de mantenimiento y operación de la infraestructura, y permite a Screening Eagle únicamente pagar por las solicitudes de sus usuarios.

Siguientes pasos

Screening Eagle tiene planeado continuar mejorando su solución de asistente virtual de ventas. Algunos de los próximos pasos incluyen:

  1. Conexión con bases de datos de productos y clientes: Integración del asistente virtual con bases de datos internas de Screening Eagle para obtener información más detallada y personalizada sobre productos y clientes. Permitiendo generar respuestas más precisas y relevantes, adaptadas a las necesidades específicas de cada cliente.
  2. Implementación de agentes ReAct (Reasoning and Action): Un agente ReAct en el contexto del prompt engineering es un tipo de agente conversacional que combina el razonamiento lógico y la toma de decisiones con la generación de respuestas basadas en el contexto. Esto permitirá manejar flujos de conversación más complejos al dividir la tarea en múltiples pasos y seleccionar semánticamente las herramientas adecuadas para cada paso.
  3. Selección semántica de herramientas adicionales: Exploración de la selección semántica de herramientas adicionales, como bases de conocimiento externas, APIs de terceros u otras fuentes de información relevantes. Estas herramientas serían seleccionadas y utilizadas por los agentes ReAct de manera dinámica, según el contexto de la conversación y la tarea a realizar.

Conclusión

Screening Eagle ha transformado la forma en la que proporcionan asistencia técnica a sus clientes y empleados, ofreciendo un acceso eficiente a la información técnica sobre sus productos y soluciones.

Basándose en servicios de AWS, han logrado integrar el uso de modelos de lenguaje de gran tamaño, con estrategias de prompt engineering, búsquedas híbridas en bases de datos vectoriales, y la categorización y el seguimiento del historial de la información. Esto les ha permitido generar respuestas de calidad frente a consultas técnicas complejas, manteniendo un control preciso sobre la información proporcionada en todo momento. Además, mediante la adopción de una arquitectura Serverless basada en AWS Lambda, han logrado minimizar los tiempos de respuesta y los costes de infraestructura, optimizando tanto la experiencia del usuario como la eficiencia operativa.

Sobre los autores

Jesús Hormigo es informático, tecnólogo e inventor comprometido con el desarrollo de hardware y software de tecnologías que generan un impacto significativo y sostenible en distintos ámbitos, desde la atención médica hasta el mundo del entretenimiento. Actualmente es responsable de nube e inteligencia artificial en Screening Eagle Technologies, donde lidera un equipo de ingenieros talentosos en la creación de soluciones únicas basadas en IA y visión artificial en la nube para la industria de la inspección.
Julián Martínez es Site Reliability Engineer basado en Málaga, y lleva trabajando con entornos Linux de alto rendimiento desde hace más de 15 años. Actualmente está centrado en ayudar a los equipos de infraestructura de Screening Eagle a mejorar el rendimiento de sus cargas de trabajo e implementar las mejores prácticas en el entorno de AWS. Julián contribuye a proyectos populares en el mundo de Kubernetes y la Inteligencia Artificial.
Antonio Villalpando es físico y actualmente se dedica al desarrollo de modelos de Inteligencia Artificial en el campo de la inspección no destructiva de infraestructuras. Su interés por las matemáticas aplicadas y la física teórica le ha llevado a trabajar anteriormente en ámbitos tan dispares como la física de materiales, la computación cuántica o finanzas, siempre entusiasmado por la vanguardia tecnológica. Recientemente su actividad gira en torno a la IA generativa y sus posibilidades para resolver de forma eficiente problemas de gran complejidad.
Sergio Garcés Vitale es un Arquitecto Senior de Soluciones en AWS, apasionado por la IA generativa. Con más de 10 años de experiencia en el sector de las telecomunicaciones, donde ayudó a construir plataformas de datos y observabilidad, Sergio ahora se enfoca en guiar a los clientes del sector Retail y CPG en su adopción de la nube y a clientes de todas las industrias y tamaños en implementar casos de uso de Inteligencia Artificial.
Carmen Pino es arquitecta de soluciones en AWS basada en Madrid. Trabaja con clientes españoles ayudándolas a definir, desplegar, y optimizar sus cargas de trabajo en la nube de AWS. Aunque su trayectoria profesional ha estado ligada mayoritariamente al mundo del networking tradicional, hoy tiene un especial interés en las tecnologías de analítica de datos e información. Su pasión además es la utilización de la tecnología como motor de impacto positivo en la sociedad actual.