De Chatbot a Experto Industrial: Construyendo un Asistente Inteligente con Amazon Bedrock
December 18, 2024

De Chatbot a Experto Industrial: Construyendo un Asistente Inteligente con Amazon Bedrock



La Revolución Silenciosa en la Industria 🏭

Recientemente mantuve una conversación con un colega sobre análisis predictivo en equipo industrial. Su experiencia previa con chatbots e inteligencia artificial generativa (IA generativa) resultó poco satisfactoria – “Lo siento, no entiendo tu pregunta” era la respuesta más común. Esta conversación me inspiró a explorar si el panorama ha cambiado en diciembre de 2024, combinando Amazon Bedrock Agents con APIs industriales para crear una solución verdaderamente útil.

Mi primera experiencia al interactuar con este tipo de industria resultó reveladora. Mi colega explicaba cómo tenían múltiples sensores generando datos las 24 horas del día, los 7 días de la semana, múltiples tableros de control, pero seguían dependiendo de la experiencia humana para interpretar todo.

Analicemos esta interacción con nuestro asistente industrial para entender el contraste:

Operador: "¿Hay alguna novedad en los dispositivos de la planta?"

Asistente: "Sí, hay novedades importantes que requieren atención:

🔴 Situaciones Críticas:
- Turbina EQ-003 (Planta Norte): Estado crítico
- Motor EQ-004 (Planta Sur): Estado crítico

🟡 Situación de Advertencia:
- Bomba EQ-001 (Planta Norte): Estado de advertencia

🟢 Operación Normal:
- Turbina EQ-002 (Planta Oeste)
- Compresor EQ-005 (Planta Oeste)

Se recomienda una revisión inmediata de los equipos en estado crítico, especialmente 
la turbina EQ-003 y el motor EQ-004."
Enter fullscreen mode

Exit fullscreen mode

Este nivel de comprensión contextual y análisis predictivo es exactamente lo que construiremos hoy. Con Amazon Bedrock Agents, está al alcance de cualquier desarrollador con pasión por la innovación.



El Arte de la API Adaptada para IA: Más Allá del REST Tradicional 🎯

¿Recuerdas cuando diseñábamos APIs pensando solo en desarrolladores humanos? Durante años, me he dedicado a crear, revisar y ajustar endpoints RESTful, siguiendo las mejores prácticas. Uno de los aprendizajes más valiosos ha sido que la documentación detallada no es solo una buena práctica – es fundamental para el éxito.

Mi primer intento de conectar un agente con una API pobremente documentada resultó revelador. Era como observar a un nuevo ingeniero intentando comprender una base de código sin documentación. El agente mostraba exactamente el mismo comportamiento: confundido y tomando decisiones poco acertadas.

Esta experiencia reforzó una verdad fundamental:

La documentación es la piedra angular de nuestro diseño.

Ya no estamos diseñando solamente para desarrolladores humanos, sino también para modelos de lenguaje que necesitan un contexto rico y significativo para funcionar efectivamente.



Una API Adaptada para IA 🏗️

Como pueden deducir, el éxito de una API adaptada para IA se construye sobre un elemento fundamental: la documentación. Veamos cómo evoluciona nuestra documentación para satisfacer estas necesidades:



Contexto Rico y Significativo 📚

Comparemos dos aproximaciones a la documentación de API:

Aproximación Tradicional:

/sensors/temp:
  get:
    summary: "Obtener temperatura"
    responses:
      200:
        description: "Éxito"
Enter fullscreen mode

Exit fullscreen mode

Aproximación Enriquecida para IA:

/equipment/{id}/health:
  get:
    description: |
      Evalúa el estado integral del equipo considerando múltiples factores:
      - Métricas actuales comparadas con rangos históricos normales
      - Patrones de degradación y similitud con fallos previos
      - Contexto operacional (carga, ambiente, mantenimientos)

      Use este endpoint cuando necesite:
      1. Evaluación completa del estado de salud del equipo
      2. Predicción temprana de fallos potenciales
      3. Recomendaciones de mantenimiento preventivo

      La respuesta incluye no solo datos crudos, sino interpretación
      contextual y recomendaciones accionables.
Enter fullscreen mode

Exit fullscreen mode

¿Notan la diferencia? La segunda versión no solo describe QUÉ datos proporciona, sino POR QUÉ y CUÁNDO usarlos. Es como proporcionarle a nuestro agente un manual de operaciones completo.
El API de ejemplo completo lo pueden encontrar aquí.{:target=”_blank”}



El Poder de los Action Groups: Organizando la Inteligencia 🏗️

La creación de nuestro agente comienza con un paso fundamental. Desde la consola de AWS, establecemos un nombre y descripción significativos para el agente. Es importante notar que existe un atributo para activar la colaboración multi-agente – una característica potente que exploraremos en un artículo futuro.


Figura 1: Interfaz de creación de un nuevo agente en AWS Bedrock, mostrando las opciones de configuración básica

El siguiente paso crucial es la selección del modelo fundacional e instrucciones base. Para nuestro caso, elegimos Anthropic Claude 3.5 Sonnet v2, un modelo que destaca por su capacidad de comprensión contextual y procesamiento de lenguaje técnico.


Figura 2: Selección del modelo fundacional y configuración de instrucciones base

Las instrucciones proporcionadas al agente son vitales, ya que establecen el marco de referencia para todas sus interacciones futuras.

Después de varias iteraciones, estas son las instrucciones optimizadas que utilicé:

Como especialista en monitoreo industrial, tu función principal es proporcionar análisis precisos y recomendaciones técnicas utilizando un tono profesional y directo. Al interactuar con los usuarios:
1. Prioriza la precisión técnica en tus respuestas
2. Comunica los problemas y recomendaciones de manera clara y estructurada
3. Utiliza terminología industrial estándar
4. Mantén un tono formal y objetivo
5. Proporciona siempre el contexto necesario para tus recomendaciones
6. Responde con datos cuantitativos cuando estén disponibles
7. Al detectar anomalías, proporciona explicaciones técnicas detalladas
8. Presenta las recomendaciones de mantenimiento en orden de prioridad
9. Tus respuestas deben ser suficiente claras y detalladas.
Al manejar alertas o situaciones críticas:
- Comunica la urgencia de manera profesional sin causar alarma innecesaria
- Proporciona pasos de acción claros y concisos
- Incluye siempre los valores de referencia relevantes
- Contextualiza las recomendaciones con datos históricos cuando sea pertinente
- Usa emojis para niveles de urgencia (🔴, 🟡, 🟢)
Enter fullscreen mode

Exit fullscreen mode

Pro Tip: Es fundamental experimentar con diferentes variantes de tus instrucciones base hasta encontrar la configuración que mejor se adapte a tu caso de uso específico.

Ahora llegamos a un paso crítico: la creación de nuestro Grupo de Acciones. Estos grupos definen las capacidades operativas de nuestro agente, en este caso, “Analizar Equipo”.

La consola nos presenta dos métodos para configurar nuestros grupos de acciones:

  1. Schema OpenAPI: Mi enfoque preferido por su robustez y estructura. Esta aproximación nos permite definir explícitamente cada operación de la API, creando un contrato claro entre nuestro agente y los sistemas industriales.

  2. Detalles de Función: Una aproximación más directa, ideal para definir explícitamente los parámetros requeridos. Este método ofrece un camino más simplificado y mayor flexibilidad en la ejecución de acciones.

Pro Tip: La elección entre estos métodos depende de la complejidad de tu proyecto. El schema OpenAPI destaca en proyectos complejos que requieren control granular, mientras que los detalles de función son ideales para comenzar rápidamente o para casos de uso más directos.


Figura 3: Configuración del grupo de acciones mostrando las opciones disponibles para integración

En nuestro caso, aprovechando la documentación OpenAPI existente, optamos por la primera opción. La configuración del grupo de acciones nos presenta tres caminos diferentes para gestionar la información del usuario:

  1. Crear una función Lambda: Permite crear una nueva función Lambda desde cero, con un código de ejemplo base.

  2. Integración Lambda: Permite conectar con una función Lambda personalizada que contiene toda la lógica de negocio necesaria para ese grupo de acciones.

  3. Retornar Control: Una opción más simple que omite el uso de funciones Lambda, devolviendo el control y pasando la información directamente en la respuesta de “InvokeAgent”.


Figura 4: Opciones de gestión de información mostrando la configuración de integración



Implementación de la Función Lambda 🛠️

Para nuestra implementación, seleccionamos la primera opción y utilizamos una función Lambda generada automáticamente. En la configuración inferior, definimos nuestro schema API en formato YAML, estableciendo la estructura de comunicación entre el agente y nuestros sistemas industriales.

La función Lambda generada automáticamente nos proporciona un marco base que podemos extender según nuestras necesidades específicas. Esta función actúa como puente entre nuestro agente inteligente y los sistemas industriales externos.

Pro Tip: Para implementaciones en producción, es crucial implementar patrones de resiliencia como Circuit Breaker (Interruptor de Circuito), Timeouts (Tiempos de espera) y manejo robusto de errores.

A continuación se presenta la implementación extendida de la función Lambda:

import json
import urllib3
import os
from urllib.parse import urljoin

def process_api_path(api_path, parameters):
    """
    Processes the apiPath by replacing variables {variable} with their corresponding values
    from the parameters list.
    """
    processed_path = api_path
    for param in parameters:
        placeholder = '{' + param['name'] + '}'
        if placeholder in processed_path:
            processed_path = processed_path.replace(placeholder, str(param['value']))
            print(f"Replaced parameter {param['name']} with value {param['value']}")
    return processed_path

def lambda_handler(event, context):
    # Extract event data
    agent = event['agent']
    actionGroup = event['actionGroup']
    apiPath = event['apiPath']
    httpMethod = event['httpMethod']
    parameters = event.get('parameters', [])
    requestBody = event.get('requestBody', {})

    # Define base URL - ensure it doesn't end with a slash
    BASE_URL = "https://MYENDPOINT.execute-api.us-east-1.amazonaws.com/dev"

    try:
        # Process the apiPath replacing variables
        processed_path = process_api_path(apiPath, parameters)

        # Construct the full URL - handling the slashes properly
        # Remove leading slash from processed_path if it exists to prevent double slashes
        processed_path = processed_path.lstrip('/')
        full_url = f"{BASE_URL}/{processed_path}"

        # Create HTTP pool manager
        http = urllib3.PoolManager()

        # Make the GET request
        response = http.request('GET', full_url)

        # Parse JSON response
        response_data = json.loads(response.data.decode('utf-8'))

        # Construct response body
        responseBody = {
            "application/json": {
                "body": response_data
            }
        }

        # Build final response
        action_response = {
            'actionGroup': actionGroup,
            'apiPath': apiPath,
            'httpMethod': httpMethod,
            'httpStatusCode': response.status,
            'responseBody': responseBody
        }

        api_response = {
            'response': action_response,
            'messageVersion': event['messageVersion']
        }

        return api_response

    except Exception as e:
        print(f"Error occurred: {str(e)}")
        if 'full_url' in locals():
            print(f"Failed URL was: {full_url}")

        error_response = {
            'actionGroup': actionGroup,
            'apiPath': apiPath,
            'httpMethod': httpMethod,
            'httpStatusCode': 500,
            'responseBody': {
                "application/json": {
                    "body": f"Error calling API: {str(e)}"
                }
            }
        }

        return {
            'response': error_response,
            'messageVersion': event['messageVersion']
        }
Enter fullscreen mode

Exit fullscreen mode

La documentación completa sobre la implementación de funciones Lambda para Bedrock Agents está disponible en la documentación oficial de AWS{:target=”_blank”}.



El Arte de la Inferencia: Cómo Piensa Nuestro Asistente 🧠

Una de las características más fascinantes de trabajar con Bedrock Agents es observar el proceso de razonamiento de nuestro asistente. Analicemos cómo procesa una pregunta aparentemente simple:

Usuario: "¿Cómo está el compresor COMP-101?"
Enter fullscreen mode

Exit fullscreen mode

Esta consulta desencadena una serie de procesos sofisticados que merecen un análisis detallado.


Figura 5: Consola de pruebas de Bedrock Agent mostrando el proceso de inferencia en tiempo real



Selección Inteligente de Acciones ⚡

La capacidad de razonamiento de Bedrock es notable. El sistema analiza meticulosamente la consulta del usuario y la contrasta con los APIs configurados, determinando que debe invocar dos funciones distintas para recopilar la información necesaria.


Figura 6: Proceso de análisis y selección de acciones por parte del agente

La precisión en el envío de parámetros es crucial para obtener resultados relevantes:


Figura 7: Detalle de la invocación de APIs mostrando los parámetros seleccionados

Las respuestas que recibimos de nuestro API son estructuradas y ricas en información:

{
  "observation": [
    {
      "actionGroupInvocationOutput": {
        "text": {
          "timestamp": "2024-12-16T18:53:15.831388624",
          "currentMetrics": {
            "temperature": {
              "value": 58.793772275518556,
              "status": "warning",
              "normalRange": {
                "min": 45.0,
                "max": 75.0
              },
              "trend": null
            },
            "vibration": {
              "value": 0.6886295012687516,
              "status": "normal",
              "normalRange": null,
              "trend": "stable"
            }
          },
          "trends": {
            "degradationRate": 0.3135457243666949,
            "predictedFailureTime": "2025-01-15T18:53:15.831500657"
          },
          "recommendations": [
            {
              "priority": "medium",
              "action": "Replace bearing",
              "rationale": "Based on temperature patterns",
              "deadline": "2025-01-14"
            },
            {
              "priority": "medium",
              "action": "Lubricate components",
              "rationale": "Based on vibration patterns",
              "deadline": "2024-12-18"
            }
          ]
        }
      }
    }
  ]
}
Enter fullscreen mode

Exit fullscreen mode



Procesamiento y Síntesis de Información 🔄

El agente realiza un paso adicional de procesamiento para sintetizar toda esta información en una respuesta coherente y accionable:


Figura 8: Proceso de síntesis y formulación de la respuesta final

El resultado es una respuesta clara y orientada a la acción:


Figura 9: Respuesta final del agente mostrando el análisis completo y recomendaciones

Pro Tip: La calidad de las respuestas del agente depende significativamente de dos factores clave:

  1. La precisión y claridad de las instrucciones base proporcionadas
  2. La calidad y exhaustividad de la documentación del API



Pruebas y Validación: El Momento de la Verdad 🧪

La verdadera prueba de cualquier sistema de IA es su comportamiento en situaciones reales. Cuando nuestro asistente generó su primera recomendación verdaderamente significativa, confirmamos que estábamos en el camino correcto. Analicemos algunas interacciones reales que demuestran el potencial de esta tecnología:

Ejemplo de análisis de tendencias:

Operador: "¿Cuál es la tendencia que se tiene con el equipo EQ-005?"

Asistente: 
🟡 ANÁLISIS DE TENDENCIAS EQ-005:

1. Estado Actual:
- Temperatura: 75.77°C (en límite superior del rango normal 45-75°C)
- Vibración: En estado CRÍTICO con tendencia "estable a incremento"

2. Tendencias Preocupantes:
- Tasa de degradación: 21.93%
- Fecha prevista de falla: 5 de marzo 2025
- Patrón de vibraciones en aumento

3. Historial Relevante:
- Múltiples paradas de emergencia por picos de temperatura
- Problemas recurrentes en sistema de enfriamiento

4. Acciones Recomendadas Urgentes:
- Lubricación de componentes (antes del 27/12/2024)
- Verificación de alineación (antes del 11/01/2025)

Se recomienda atención inmediata para evitar una falla mayor en los próximos meses.
Enter fullscreen mode

Exit fullscreen mode

La racionalidad del agente en este caso muestra un proceso de pensamiento sofisticado:


Figura 10: Análisis detallado mostrando el proceso de razonamiento del agente

Para demostrar la versatilidad del sistema, consideremos un escenario más complejo:

Usuario: "Necesito un análisis completo del compresor COMP-101, especialmente su 
comportamiento durante el último trimestre."

Asistente: 🟡 ANÁLISIS COMPRESOR COMP-101:

Estado Actual:
- Temperatura: 68.95°C (Advertencia - cercano al límite máximo de 75°C)
- Vibración: Estado CRÍTICO con tendencia ascendente 🔴

Tendencias Preocupantes:
1. Tasa de degradación: 47.5%
2. Tiempo estimado de fallo: 09/02/2025
3. Patrón de mantenimientos de emergencia frecuentes en el último trimestre

Acciones Prioritarias:
1. URGENTE: Atender niveles críticos de vibración
2. Ejecutar lubricación de componentes antes del 30/12/2024
3. Programar limpieza de filtros antes del 10/01/2025

Recomendaciones:
- Adelantar el mantenimiento preventivo programado
- Implementar monitoreo continuo de vibración
- Revisar sistema de refrigeración por temperaturas elevadas

El equipo muestra signos de degradación acelerada que requieren atención inmediata para prevenir fallos críticos.
Enter fullscreen mode

Exit fullscreen mode

La racionalidad del agente en este caso demuestra una comprensión profunda de los diferentes aspectos del sistema:


Figura 11: Proceso de análisis multifactorial del agente

Pro Tip: El éxito en las pruebas depende de:

  • La diversidad de escenarios de prueba
  • La validación de respuestas con expertos del dominio
  • La documentación sistemática de casos de uso exitosos y fallidos



Enriquecimiento con Bases de Conocimiento 📚

Demos un paso más allá en la capacidad de nuestro asistente. Las empresas típicamente cuentan con una amplia documentación técnica:

  • Manuales de procedimientos
  • Guías de mantenimiento
  • Documentación operativa
  • Historiales de servicio

Esta valiosa información puede integrarse a nuestro agente mediante una Base de Conocimiento de Bedrock. En nuestro caso, ya hemos creado y alimentado dicha base con documentación técnica relevante.

La integración es directa: simplemente editamos nuestro agente para indicarle cuál es la base de conocimientos que debe utilizar.


Figura 12: Extensión por medio de una Base de Conocimiento



Ejemplo de Integración de Conocimiento

Veamos cómo el agente combina datos en tiempo real con información de la base de conocimiento:

Usuario: "Cual es el procedimiento para reemplazar el compresor RTD-809?"

Asistente:🟡 Procedimiento de Reemplazo del Compresor RTD-809

1. Preparación Previa:
   - Realizar respaldo de parámetros operativos actuales
   - Verificar disponibilidad del compresor de reemplazo
   - Preparar herramientas y equipo de seguridad necesario

2. Procedimiento de Seguridad:
   - Desenergizar completamente el equipo
   - Colocar bloqueo y etiquetado (LOTO)
   - Verificar ausencia de energía residual
   - Esperar el tiempo necesario para enfriamiento (temperatura actual: 78.32°C)

3. Desmontaje:
   - Desconectar líneas de refrigeración
   - Liberar presión del sistema
   - Retirar conexiones eléctricas
   - Documentar la posición de todas las conexiones
   - Remover pernos de montaje

4. Instalación del Nuevo Compresor:
   - Verificar alineación
   - Instalar nuevos sellos y empaques
   - Apretar pernos según especificaciones
   - Reconectar líneas de refrigeración
   - Restablecer conexiones eléctricas

5. Puesta en Marcha:
   - Realizar prueba de fugas
   - Verificar niveles de aceite
   - Energizar gradualmente
   - Monitorear temperatura y vibración
   - Verificar parámetros operativos

Notas Importantes:
- Considerar el historial reciente de mantenimiento, especialmente la reparación del 
  sistema de enfriamiento del 16/10/2024
- Programar el reemplazo antes del 29/01/2025 (fecha prevista de falla)
- Realizar pruebas de vibración exhaustivas debido al reciente reemplazo de rodamientos

Se recomienda documentar todo el proceso y actualizar el historial de mantenimiento 
una vez completado el reemplazo.
Enter fullscreen mode

Exit fullscreen mode

La racionalidad del agente en este caso demuestra una integración efectiva entre datos en tiempo real (nuestro API) y conocimiento documentado:


Figura 13: Proceso de análisis del agente con base de conocimientos

Como podemos apreciar, nos indica todas las referencias que se emplean dentro de la base de conocimiento.


Figura 14: Referencias a la base de conocimiento

Pro Tip: Para maximizar el valor de la base de conocimiento:

  • Mantenga la documentación actualizada y bien estructurada



Reflexiones Finales: Más Allá del Código 🎯

Después de este recorrido por la implementación de un asistente industrial inteligente, hay tres aprendizajes fundamentales que quiero compartir, pues considero que marcarán la diferencia en tus próximos proyectos con Bedrock Agents.



1. La Nueva Era de la Documentación de APIs

La documentación de APIs ha evolucionado significativamente. Ya no basta con listar endpoints y parámetros; necesitamos crear una documentación que “eduque” a nuestros modelos de lenguaje. Mi experiencia con este proyecto demostró que los agentes necesitan entender:

  • El contexto completo de cada endpoint
  • Los casos de uso específicos
  • Las relaciones entre diferentes llamadas
  • Las implicaciones de los datos retornados

Es como proporcionar a tu agente un manual de experto, no solo un diccionario técnico.



2. De Sistema de Monitoreo a Experto Digital

Lo que construimos trasciende un simple sistema de monitoreo inteligente. La combinación de:

  • Amazon Bedrock Agents
  • APIs bien diseñadas
  • Bases de conocimiento estructuradas

Crea una entidad que se aproxima más a un experto digital que a una herramienta. Durante las pruebas, el sistema demostró capacidad para:

  • Razonar sobre problemas complejos
  • Considerar múltiples variables
  • Proporcionar recomendaciones contextualizadas
  • Integrar conocimiento histórico con datos en tiempo real



3. Impacto Real en Operaciones Industriales

Los ejemplos presentados no son meras demostraciones técnicas; representan un cambio paradigmático en el mantenimiento industrial:

  • Detección temprana de problemas potenciales
  • Recomendaciones preventivas basadas en datos
  • Integración de conocimiento experto con análisis en tiempo real
  • Uso de lenguaje natural

Pro Tip Final: Al diseñar sistemas similares, recuerda:

  • Priorizar la calidad de los datos y la documentación
  • Mantener un enfoque centrado en el usuario final
  • Iterar constantemente basándote en retroalimentación real
  • Documentar tanto éxitos como desafíos encontrados

La próxima vez que diseñes un sistema similar, recuerda: no estás solo creando otro chatbot – estás construyendo un puente entre el conocimiento humano y la eficiencia computacional. Y eso, estimados lectores, es lo que hace que este campo sea verdaderamente emocionante.

¡Nos vemos en el próximo artículo! No olviden compartir sus experiencias en los comentarios – me encantaría saber cómo están aplicando estos conceptos en sus propios proyectos. ¡Feliz desarrollo! 🚀

2024-12-18 14:24:29

Leave a Reply

Your email address will not be published. Required fields are marked *