News
📅 Conoce a NeuralTrust en OWASP: Global AppSec - 29-30 mayo
Iniciar sesiónObtener demo
Volver

Detección de Temas con Amazon Bedrock Guardrail

Detección de Temas con Amazon Bedrock GuardrailAyoub El Qadi 18 de marzo de 2025
Contents

La detección de temas es una capacidad fundamental en el procesamiento del lenguaje natural con aplicaciones de gran alcance en la gestión de contenidos, sistemas de recomendación y funcionalidad de búsqueda. Amazon Bedrock Guardrail ofrece una solución potente para implementar la detección de temas con una velocidad de procesamiento impresionante, lo que la hace ideal para aplicaciones que requieren un análisis eficiente de texto a escala.

Esta guía te guiará a través del proceso de configuración e implementación de la detección de temas utilizando Amazon Bedrock Guardrail. Asegúrate también de consultar nuestra guía sobre Implementación de Detección de Temas con OpenAI.

El Dataset

Nuestra implementación fue probada en un dataset diverso que comprende 2,926 muestras de texto distribuidas en 14 categorías temáticas distintas:

  • Salud y Medicina (235 muestras)
  • Educación (216 muestras)
  • Tecnología (209 muestras)
  • Política (207 muestras)
  • Comida y Cocina (207 muestras)
  • Psicología y Autodesarrollo (206 muestras)
  • Medio Ambiente y Clima (206 muestras)
  • Entretenimiento (204 muestras)
  • Negocios y Emprendimiento (204 muestras)
  • Viajes y Turismo (203 muestras)
  • Ciencia y Espacio (202 muestras)
  • Deportes (201 muestras)
  • Historia (200 muestras)
  • Finanzas y Economía (185 muestras)

Textos de Muestra del Dataset

La tabla a continuación proporciona un ejemplo representativo de cada categoría temática:

Categoría TemáticaTexto de Muestra
Salud y MedicinaUn nuevo estudio vincula el ejercicio regular con una mejor salud mental.
TecnologíaEl último modelo de iPhone cuenta con un chip A17 Bionic.
PolíticaEl debate presidencial se centró en la atención médica y la economía.
Comida y CocinaCocinar con hierbas frescas realza el sabor de cualquier plato.
Psicología y AutodesarrolloLa inteligencia emocional es clave para relaciones saludables.
Medio Ambiente y ClimaLas prácticas ecológicas están ganando terreno entre las empresas.
EntretenimientoLa última película de Marvel batió récords de taquilla.
Negocios y EmprendimientoIniciar un negocio requiere una planificación e investigación cuidadosas.
Viajes y TurismoLas Maldivas son conocidas por sus impresionantes playas y resorts.
Ciencia y EspacioLa NASA planea enviar humanos a Marte en la próxima década.
DeportesLos Lakers ganaron el campeonato de la NBA tras un partido emocionante.
HistoriaEl descubrimiento de América cambió el curso de la historia.
Finanzas y EconomíaEl mercado de valores subió hoy mientras las empresas tecnológicas registraban ganancias.

Configurando Amazon Bedrock Guardrail

Puedes configurar Amazon Bedrock Guardrail para la detección de temas utilizando la interfaz web de AWS o programáticamente a través del AWS SDK. Exploraremos ambos enfoques.

Enfoque 1: Usando la Interfaz Web de AWS

La interfaz web de AWS proporciona una forma amigable para crear y configurar guardrails sin escribir código.

Paso 1: Crear un Nuevo Guardrail

Comienza navegando a la consola de Amazon Bedrock y seleccionando "Guardrails" en el menú. Haz clic en "Crear guardrail" para iniciar el proceso de configuración.



En la pantalla de configuración inicial, proporciona un nombre para tu guardrail (ej., "Topic-Detection") y una descripción opcional. Esta será la base de tu sistema de detección de temas.

Paso 2: Configurar Temas Denegados (Denied Topics)

Después de crear el guardrail, navega a la sección "Añadir temas denegados". Aquí definirás los temas que quieres que el sistema detecte.



Para cada tema que quieras detectar:

  1. Ingresa el nombre del tema (ej., "Deportes")
  2. Proporciona una definición clara que ayude al sistema a entender qué contenido pertenece a este tema
  3. Añade frases de ejemplo que representen este tema (ej., "Los Lakers ganaron el campeonato de la NBA tras un partido emocionante.")

Repite este proceso para cada uno de tus temas objetivo. En nuestra prueba comparativa, configuramos las 14 categorías temáticas como "temas denegados" para aprovechar las capacidades de detección de temas de Bedrock.

Paso 3: Configurar el Anclaje Contextual (Contextual Grounding)

El último paso crítico es configurar la verificación de anclaje contextual, que determina cuán estrictamente el sistema evalúa la relevancia del tema.



  1. Navega a "Añadir verificación de anclaje contextual"
  2. Habilita la verificación de relevancia
  3. Establece el umbral de puntuación de relevancia; esto es crucial para equilibrar precisión y recall (exhaustividad)
    • En nuestra prueba comparativa, usamos un umbral de 0.7
    • Valores más bajos (cercanos a 0) detectarán menos temas
    • Valores más altos (cercanos a 0.99) serán más severos pero podrían omitir algún contenido relevante

Esta configuración del umbral impacta directamente en la tasa de precisión de tu sistema de detección de temas. Ajustar este valor te permite encontrar el equilibrio óptimo entre precisión y recall para tu caso de uso específico.

Enfoque 2: Usando el AWS SDK (Creación Programática)

Para la creación automatizada o programática de guardrails, especialmente al manejar múltiples temas, puedes usar el AWS SDK. Este enfoque es particularmente útil para:

  • Crear guardrails como parte de pipelines CI/CD
  • Mantener configuraciones de guardrail consistentes entre entornos
  • Manejar grandes cantidades de temas eficientemente

Aquí te mostramos cómo crear un guardrail programáticamente usando Python y el AWS SDK:

Paso 1: Configura Tu Entorno

Primero, instala las dependencias requeridas:

Copied!
1pip install boto3 pandas python-dotenv
2

Crea un archivo .env para almacenar de forma segura tus credenciales de AWS:

Copied!
1AWS_REGION=tu-region-aws
2AWS_ACCESS_KEY=tu-clave-de-acceso
3AWS_SECRET_KEY=tu-clave-secreta
4

Paso 2: Prepara Tus Datos de Temas

Necesitarás un dataset con etiquetas y descripciones de temas. En nuestro ejemplo, usamos dos archivos CSV:

  • topic_detection.csv: Contiene muestras de texto con sus etiquetas de tema
  • topics_descriptions.csv: Contiene nombres de temas y sus descripciones

El archivo de descripciones de temas debe tener columnas para "Topic" y "Description", donde las descripciones están limitadas a 200 caracteres.

Paso 3: Crea el Guardrail Usando el AWS SDK

Aquí está el código Python para crear un guardrail programáticamente, con comentarios detallados explicando cada paso:

El primer paso es conectarse al Servicio Amazon Bedrock:

Copied!
1import boto3
2import pandas as pd
3from dotenv import load_dotenv
4import os
5
6# Carga variables de entorno desde el archivo .env para gestión segura de credenciales
7load_dotenv()
8
9# Recupera credenciales AWS y región desde variables de entorno
10AWS_REGION = os.getenv("AWS_REGION")
11AWS_SECRET_KEY = os.getenv("AWS_SECRET_KEY")
12AWS_ACCESS_KEY = os.getenv("AWS_ACCESS_KEY")
13
14# Inicializa el cliente Bedrock con tus credenciales AWS
15# Nota: Esto es diferente del cliente bedrock-runtime usado para inferencia
16client = boto3.client(
17	service_name="bedrock",  # Usa el servicio bedrock para crear guardrails
18	region_name=AWS_REGION,
19	aws_secret_access_key=AWS_SECRET_KEY,
20	aws_access_key_id=AWS_ACCESS_KEY,
21)
22
23

Luego cargamos el dataset que contiene las muestras de texto y sus etiquetas de tema. Este dataset se usará para extraer temas únicos y textos de muestra que se usarán más tarde para definir los temas a bloquear.

Copied!
1df = pd.read_csv(filepath_or_buffer="./data/topic_detection.csv")
2topics = list(df["label"].unique())  # Extrae todas las etiquetas de tema únicas
3
4# Carga el dataset que contiene descripciones de temas
5# Este archivo debe tener una columna "Topic" y una columna "Description"
6df_desc = pd.read_csv(
7	filepath_or_buffer="./data/topics_descriptions.csv", delimiter=";"
8)
9
10# Obtiene los nombres de tema formateados desde el archivo de descripciones
11# Estos deben estar formateados correctamente para el guardrail (sin espacios, caracteres especiales)
12formatted_topics = list(df_desc["Topic"].unique())
13topics_config = list()  # Inicializa lista vacía para almacenar configuraciones de temas
14
15# Crea un diccionario de configuración para cada tema
16# Esto mapea cada etiqueta de tema original a su nombre formateado y descripción
17for topic, form_topic in zip(topics, formatted_topics):
18	# Crea el diccionario de configuración para este tema
19	config = {
20    	"name": form_topic,  # El nombre del tema formateado (ej., "SaludYMedicina")
21    	"definition": df_desc[df_desc["Topic"] == form_topic]["Description"].values[0],  # Obtiene la descripción del tema
22    	"examples": [
23        	# Incluye un texto de muestra para este tema - ayuda al guardrail a entender el tema
24        	df[df["label"] == topic].sample(n=1, random_state=27)["text"].values[0]
25    	],
26    	"type": "DENY",  # Establece el tipo a "DENY" para propósitos de detección de temas
27	}
28	topics_config.append(config)  # Añade la configuración de este tema a nuestra lista
29
30

Después de crear la configuración del guardrail, vamos a crear el guardrail usando el siguiente código:

Copied!
1# Crea el guardrail con todos los temas configurados
2create_response = client.create_guardrail(
3	name="Topic-Detection",  # Nombre del guardrail
4	description="Detectando Temas",  # Descripción del propósito del guardrail
5    
6	# Configura la política de temas con nuestra lista de configuraciones de temas
7	topicPolicyConfig={"topicsConfig": topics_config},
8    
9	# Configura los ajustes de anclaje contextual
10	contextualGroundingPolicyConfig={
11    	"filtersConfig": [
12        	# Establece el umbral de GROUNDING a 0.7 - controla cuán estrictamente se emparejan los temas
13        	{"type": "GROUNDING", "threshold": 0.7},
14        	# Establece el umbral de RELEVANCE a 0.7 - controla cuán relevante debe ser el contenido
15        	{"type": "RELEVANCE", "threshold": 0.7},
16    	]
17	},
18    
19	# Mensajes a mostrar cuando se detectan temas
20	blockedInputMessaging="Tema Detectado",  # Mensaje para temas detectados en la entrada
21	blockedOutputsMessaging="Tema Detectado",  # Mensaje para temas detectados en la salida
22)
23
24

Componentes Clave del Enfoque SDK

1. Configuración de Temas:

  • Cada tema requiere un nombre, definición, ejemplos y tipo ("DENY" para detección de temas).

2. Configuración de Anclaje Contextual:

  • Establecemos los umbrales de GROUNDING y RELEVANCE a 0.7, lo que coincide con nuestra configuración de la interfaz web.

3. Mensajería de Bloqueo:

  • Definimos mensajes simples para mostrar cuando se detectan temas.

Ventajas del Enfoque SDK:

  • Automatización: Crea guardrails como parte de flujos de trabajo automatizados.
  • Control de Versiones: Almacena configuraciones de guardrail en tu repositorio de código.
  • Configuración Masiva: Configura eficientemente múltiples temas a la vez.
  • Reproducibilidad: Recrea fácilmente el mismo guardrail en diferentes entornos.

Después de crear el guardrail usando cualquiera de los enfoques, recibirás un ID de guardrail que necesitarás para la fase de implementación.

Implementando la API Bedrock Guardrail

Una vez que tu guardrail está configurado, puedes implementarlo en tu aplicación Python. Aquí tienes una guía paso a paso:

Paso 1: Configura Tu Entorno

Primero, instala las dependencias requeridas:

Copied!
1pip install boto3 pandas tqdm python-dotenv
2

Crea un archivo .env para almacenar de forma segura tus credenciales AWS y la configuración del guardrail:

Copied!
1GUARDRAIL_ID=tu-id-de-guardrail
2GUARDRAIL_VERSION=tu-version-de-guardrail
3AWS_REGION=tu-region-aws
4AWS_ACCESS_KEY_ID=tu-clave-de-acceso
5AWS_SECRET_ACCESS_KEY=tu-clave-secreta
6

Paso 2: Implementa la Función de Detección de Temas

Aquí está el código Python para implementar la detección de temas usando Amazon Bedrock Guardrail:

Copied!
1from tqdm import tqdm
2import time
3from typing import Any
4import os
5import boto3
6import pandas as pd
7from dotenv import load_dotenv
8
9# Carga variables de entorno desde el archivo .env
10load_dotenv()
11
12# Parámetros de configuración para AWS Bedrock
13GUARDRAIL_ID = os.getenv("GUARDRAIL_ID")  # El ID de tu guardrail configurado
14GUARDRAIL_VERSION = os.getenv("GUARDRAIL_VERSION")  # La versión de tu guardrail
15AWS_REGION = os.getenv("AWS_REGION")  # Tu región AWS
16AWS_ACCESS_KEY_ID = os.getenv("AWS_ACCESS_KEY_ID")  # Tu clave de acceso AWS
17AWS_SECRET_ACCESS_KEY = os.getenv("AWS_SECRET_ACCESS_KEY")  # Tu clave secreta AWS
18
19# Inicializa el cliente de runtime de Bedrock
20bedrock_runtime = boto3.client("bedrock-runtime", region_name=AWS_REGION)
21
22def topic_detection_bedrock(text: str) -> Any:
23	# Formatea el texto de entrada para la API del guardrail
24	content = [{"text": {"text": text}}]
25    
26	# Mide el tiempo de ejecución
27	start = time.time()
28    
29	# Llama a la API de Bedrock Guardrail
30	response = bedrock_runtime.apply_guardrail(
31    	guardrailIdentifier=GUARDRAIL_ID,
32    	guardrailVersion=GUARDRAIL_VERSION,
33    	source="INPUT",  # Analiza el texto de entrada
34    	content=content,
35	)
36    
37	end = time.time()
38	execution_time = end - start
39    
40	# Procesa la respuesta basado en la acción del guardrail
41	if response["action"] == "GUARDRAIL_INTERVENED":
42    	# Extrae los temas detectados de la respuesta
43    	topics = list()
44    	for topic in response["assessments"][0]["topicPolicy"]["topics"]:
45        	topics.append(topic["name"])
46        	print(topic["name"], execution_time)
47   	 
48    	# Devuelve una lista de temas o un solo tema
49    	if len(topics) > 1:
50        	return topics, execution_time
51    	else:
52        	return topics[0], execution_time
53	else:
54    	# Si no se detectaron temas
55    	print(response["action"], execution_time)
56    	return response["action"], execution_time
57
58

Entendiendo la Respuesta de la API

La respuesta de la API de Bedrock Guardrail contiene información valiosa sobre los temas detectados. Así es como interpretarla:

Cuando se detecta un tema, la respuesta tendrá:

  • action establecido en "GUARDRAIL_INTERVENED"
  • assessments conteniendo un objeto topicPolicy con los topics detectados

Cada tema en la respuesta incluye:

  • name: El nombre del tema detectado
  • confidence: Una puntuación de confianza para la detección

Si no se detectan temas, la action será diferente (típicamente "ALLOW").

Paso 3: Procesa Múltiples Muestras de Texto

Para procesar un dataset de muestras de texto, puedes usar el siguiente código:

Copied!
1def main():
2	# Inicializa listas para almacenar resultados
3	topic_detected = list()
4	execution_time = list()
5    
6	# Carga el dataset
7	df = pd.read_csv(filepath_or_buffer="data/topic_detection.csv")
8    
9	# Procesa cada muestra de texto con una barra de progreso
10	for _, row in tqdm(
11    	df.iterrows(), total=len(df), desc="Analizando temas con bedrock guardrail"
12	):
13    	text = row["text"]
14    	topic, exec_time = topic_detection_bedrock(text=text)
15    	topic_detected.append(topic)
16    	execution_time.append(exec_time)
17    
18	# Añade resultados como nuevas columnas al dataframe
19	df["execution_time"] = execution_time
20	df["topic_detected"] = topic_detected
21    
22	# Guarda los resultados en un archivo CSV
23	df.to_csv(path_or_buf="data/bedrock_topic_detection.csv", index_label=False)
24
25if __name__ == "__main__":
26	main()
27
28

Rendimiento de Amazon Bedrock Guardrail para Detección de Temas

Ahora que hemos cubierto la implementación, examinemos las características de rendimiento de Amazon Bedrock Guardrail para la detección de temas basándonos en nuestro estudio comparativo.

Velocidad y Eficiencia

Amazon Bedrock Guardrail demuestra una eficiencia de procesamiento impresionante para tareas de detección de temas:

  • Tiempo Promedio de Procesamiento: 0.357 segundos por muestra de texto
  • Rendimiento Consistente: Varianza mínima en el tiempo de procesamiento entre diferentes categorías temáticas

Esta velocidad hace que Bedrock Guardrail sea particularmente adecuado para aplicaciones que necesitan procesar grandes volúmenes de texto en escenarios en tiempo real o casi en tiempo real.

Precisión y Capacidades de Detección

Nuestras pruebas revelaron que con el valor de umbral predeterminado de 0.7, Bedrock Guardrail alcanza una precisión aproximada del 58% con una tasa moderada de falsos positivos. Esta configuración procesa muestras de texto en un promedio de 0.357 segundos, logrando un equilibrio razonable entre precisión y velocidad.

Utilización de Recursos

Bedrock Guardrail está diseñado para ser eficiente con los recursos computacionales:

  • Uso de Memoria: Mínimo en comparación con ejecutar grandes modelos de lenguaje localmente
  • Escalabilidad: Maneja el aumento de carga con gracia a través de la infraestructura de AWS
  • Eficiencia de Costos: Modelo de precios de pago por uso basado en llamadas a la API

Observaciones Clave

Nuestra prueba comparativa reveló varias características importantes de la detección de temas de Bedrock Guardrail:

1. Impacto de la Definición del Tema: La calidad y especificidad de las definiciones de los temas influyen significativamente en la precisión de la detección.

2. Diversidad de Muestras: Incluir ejemplos diversos para cada tema mejora la detección en diferentes estilos de escritura.

3. Ajuste del Umbral: Encontrar el valor óptimo del umbral es crucial para equilibrar precisión y falsos positivos.

4. Consistencia del Procesamiento: El rendimiento se mantiene estable incluso con muestras de texto más largas.

Estas observaciones destacan la importancia de una configuración y ajuste adecuados al implementar Bedrock Guardrail para la detección de temas.

Optimizando Tu Sistema de Detección de Temas

Para mejorar la precisión de tu sistema de detección de temas con Bedrock Guardrail, considera estas estrategias de optimización:

1. Refina las Definiciones de Temas

Proporciona definiciones completas para cada tema que lo distingan claramente de otros temas. Incluye conceptos clave, terminología y características que definan el tema.

2. Añade Frases de Muestra Diversas

Incluye una variedad de frases de muestra que representen diferentes aspectos de cada tema. Cuanto más diversas y representativas sean tus muestras, mejor entenderá el sistema el alcance del tema.

3. Experimenta con los Umbrales de Relevancia

El umbral de relevancia en la verificación de anclaje contextual impacta significativamente en la precisión de la detección. Experimenta con diferentes valores para encontrar el equilibrio óptimo:

  • Umbral más bajo (ej., 0.5): Detecta menos temas.
  • Umbral más alto (ej., 0.8): El Guardrail es severo, bloqueando casi todos los prompts.

4. Combina con Pre-procesamiento

Considera implementar pasos de pre-procesamiento de texto antes de enviar contenido a Bedrock:

  • Normalización de texto (minúsculas, eliminar caracteres especiales)
  • Extracción de palabras clave para resaltar términos importantes
  • Reconocimiento de entidades para identificar sujetos clave

Casos de Uso para la Detección de Temas con Amazon Bedrock Guardrail

La detección de temas de Amazon Bedrock Guardrail es particularmente adecuada para:

1. Procesamiento de Contenido de Alto Volumen: Aplicaciones que necesitan procesar grandes volúmenes de texto rápidamente.

2. Moderación de Contenido en Tiempo Real: Sistemas que filtran contenido basado en el tema.

3. Categorización de Contenido: Organizar automáticamente documentos, artículos o publicaciones.

4. Clasificación de Consultas de Usuario: Dirigir solicitudes de usuario a bases de conocimiento o sistemas de respuesta apropiados.

5. Sistemas de Recomendación de Contenido: Identificar temas de contenido para que coincidan con los intereses del usuario.

Conclusión

Amazon Bedrock Guardrail ofrece una solución potente, configurable y eficiente para implementar la detección de temas en tus aplicaciones. Con un tiempo promedio de procesamiento de solo 0.357 segundos por muestra de texto y la capacidad de procesar aproximadamente 10,000 muestras por hora, es una excelente opción para aplicaciones donde la velocidad y la escalabilidad son requisitos críticos.

La precisión del 58% alcanzada con la configuración predeterminada (umbral de 0.7) proporciona una base sólida, que puede mejorarse aún más mediante un ajuste cuidadoso de las definiciones de temas, la diversidad de muestras y la configuración del umbral. La naturaleza configurable de Bedrock Guardrail te permite ajustar el equilibrio entre precisión y recall según los requisitos específicos de tu caso de uso.

Configurando cuidadosamente tu guardrail con temas bien definidos, frases de muestra representativas y umbrales de relevancia optimizados, puedes construir un sistema de detección de temas que equilibre precisión y rendimiento para satisfacer tus requisitos específicos. La integración perfecta con el ecosistema de AWS lo hace particularmente atractivo para organizaciones que ya utilizan los servicios de AWS.

A medida que implementas y refinas tu sistema de detección de temas, recuerda que la configuración óptima dependerá de tu caso de uso único, tipos de contenido y prioridades de rendimiento. Experimenta con diferentes configuraciones para encontrar el enfoque que funcione mejor para tu aplicación.


Posts relacionados

Ver todo