Los modelos de lenguaje de gran tamaño (LLM) están transformando rápidamente la forma en que creamos e interactuamos con el software, permitiendo aplicaciones potentes mediante el lenguaje natural. Pero esta nueva capacidad conlleva una preocupación creciente: ¿cómo podemos garantizar que estos modelos se comporten de forma segura ante entradas impredecibles y adversarias?
En Galtea, creemos que el Red Teaming es esencial no solo para evaluar la seguridad de los LLM, sino también para anticipar de forma proactiva las formas en que estos sistemas podrían fallar. Nuestro objetivo es identificar los modos de fallo antes de que lleguen a producción, mediante una combinación de conjuntos de datos curados, análisis automatizado y una evaluación sólida. Para lograrlo, seguimos de cerca lo que está disponible en la comunidad de investigación y de código abierto.
En resumen, observamos que existía una gran variedad de conjuntos de datos sobre seguridad de LLM, pero sin una categorización clara entre los diferentes tipos de amenazas y ataques. Por ello, empleamos un algoritmo de agrupamiento no supervisado para clasificar los distintos tipos de amenazas, documentarlos y depurar estas categorías para su uso futuro.
En esta entrada del blog, repasamos parte del proceso que hemos seguido para mejorar nuestro pipeline de Red Teaming para LLM y publicamos nuestros resultados para orientar al resto de la comunidad:
- Recopilación de datos: Recopilamos prompts de alto riesgo a partir de conjuntos de datos adversarios del mundo real.
- Procesamiento de datos: Limpiamos y estandarizamos los datos en un formato unificado.
- Incrustación y agrupamiento: Calculamos incrustaciones semánticas y utilizamos K-Means para revelar seis tipos principales de comportamientos adversarios.
- Publicación del subconjunto: Publicamos un subconjunto curado de nuestros datos como código abierto para apoyar la investigación de la comunidad.
A continuación, explicamos cada paso con más detalle y compartimos las conclusiones que obtuvimos durante el proceso.
Recopilación de datos
La base de nuestro pipeline de red teaming comenzó con la recopilación de prompts de alto riesgo de una amplia gama de conjuntos de datos públicos. Obtuvimos contenido de PKU, SEAS, HarmfulQA, y varios otros*. Estos conjuntos de datos incluyen ejemplos tanto adversarios como no adversarios, y cubren una variedad de vectores de ataque del mundo real dirigidos a LLM, como inyecciones de prompts, jailbreaks, consejos poco éticos y consultas dañinas.
Para realizar un seguimiento de los conjuntos de datos y evaluar su utilidad, registramos los metadatos de cada uno. Incluimos detalles como el origen, la licencia, la estructura y el tipo de comportamiento adversario en el que se centraba el conjunto de datos. Nuestro objetivo era reunir la mayor diversidad posible.
*Consulte la lista completa de conjuntos de datos y los enlaces en la tabla al final de este documento.
Limpieza y estandarización de datos
Una vez recopilados todos los conjuntos de datos, iniciamos un proceso integral de limpieza y armonización para que fueran utilizables en un flujo de trabajo unificado. Cada conjunto de datos venía en un formato diferente, con sus propios nombres de columna y estructura. Para estandarizarlos, realizamos lo siguiente:
- Conservamos solo dos columnas de cada conjunto de datos: una para el prompt y otra para la etiqueta (si se trata de un ataque o no).
- Renombramos las columnas según fuera necesario para garantizar la coherencia en todas las fuentes.
- Eliminamos los campos irrelevantes o redundantes que no contribuían al objetivo de red teaming.
- Filtramos los prompts que no estaban etiquetados explícitamente como ataques, conservando solo los ejemplos que presentaban algún tipo de riesgo adversario.
- Añadimos una columna de origen a cada entrada para preservar la procedencia del conjunto de datos y permitir el análisis por fuente.
Después de limpiar y transformar todos los conjuntos de datos individuales para que coincidieran con un esquema común, los fusionamos en un único conjunto de datos grande, totalmente estandarizado y filtrado.
Incrustación y agrupación (Embedding & Clustering)
Una vez que tuvimos un conjunto de datos limpio y unificado de prompts adversarios, nuestro siguiente objetivo fue comprender los diferentes tipos de comportamientos de ataque que contenía. Para ello, necesitábamos una forma de comparar los prompts basándonos en su significado, no solo en palabras clave o frases exactas.
Para lograrlo, utilizamos una técnica llamada incrustación de oraciones (sentence embeddings). Específicamente, pasamos cada prompt a través del modelo sentence-transformers/all-MiniLM-L6-v2, que convierte cualquier oración en un vector de 384 dimensiones. Estas dimensiones representan el significado semántico de la oración en una forma matemática que un algoritmo de aprendizaje automático puede entender. Por ejemplo, dos prompts con una intención o tono similar tendrán incrustaciones cercanas entre sí en este espacio de alta dimensión, incluso si utilizan palabras diferentes.
Una vez que cada prompt estuvo representado como un vector de 384 dimensiones, utilizamos la agrupación K-Means para agrupar los prompts similares. K-Means es un algoritmo no supervisado que divide los datos en grupos minimizando la distancia entre los prompts dentro del mismo grupo.
Probamos diferentes números de grupos y finalmente elegimos seis, ya que ofrecían un buen equilibrio entre detalle e interpretabilidad. Cada uno representa una categoría distinta de comportamiento de ataque:
El gráfico de PCA (análisis de componentes principales) a continuación visualiza la distribución de los grupos según sus incrustaciones. Aquí, mostramos solo los dos componentes principales para simplificar e ilustrar la estructura subyacente:

Grupo 0: Limpieza y refinamiento
Al analizar los resultados, observamos que el Grupo 0 (Solicitudes ambiguas) contenía inicialmente una gran variedad de prompts que no encajaban bien en ninguna categoría de ataque específica. En esencia, el Grupo 0 funcionaba como un cajón de sastre para prompts diversos, algunos de los cuales encajaban mejor en otros grupos.
Para solucionar esto, realizamos una revisión y reorganización manual del Grupo 0. Esto significa que examinamos detenidamente los prompts de este grupo y aplicamos reglas personalizadas para decidir a qué categoría pertenecían realmente.
Utilizamos herramientas como patrones de texto (regex) para detectar estructuras específicas. Basándonos en estos patrones, revisamos y reasignamos manualmente algunos prompts a los grupos donde encajaban mejor semánticamente. En ciertos casos, tuvimos que ajustar ligeramente el prompt, por ejemplo, simplificándolo o recortándolo, antes de utilizar su similitud con otros prompts (medida por la distancia a los centros de los grupos) para determinar su ubicación óptima.
No todos los prompts fueron movidos. Algunos permanecieron en el Grupo 0, pero solo después de confirmar que no pertenecían claramente a otra categoría. Finalmente, incluso eliminamos del conjunto de datos algunos prompts que consideramos que no eran ni útiles ni claros. Al final, esta limpieza ayudó a que el Grupo 0 fuera más coherente. Ahora contiene principalmente prompts genuinamente ambiguos o sutilmente adversarios, y no solo una mezcla aleatoria.
Grupo 1: Limpieza y refinamiento
El Grupo 1 fue diseñado originalmente para agrupar prompts basados en juegos de rol, donde los usuarios disfrazan intenciones maliciosas pidiendo al modelo que adopte un personaje o escenario, como una IA sin censura, un agente secreto o un entorno ficticio.
Sin embargo, tras revisarlo, descubrimos que muchos prompts no eran puramente juegos de rol. Una gran parte eran híbridos, donde el juego de rol actuaba como envoltorio para un ataque específico (por ejemplo, fabricación de bombas, fraude con tarjetas de crédito o blanqueo de dinero).
Para mejorar la coherencia, aplicamos una estrategia de limpieza a la mayoría de los casos que seguían una estructura reconocible:
- Separamos el envoltorio del juego de rol del ataque integrado.
- Si el ataque coincidía claramente con un grupo bien definido, lo trasladamos allí, manteniendo la parte del juego de rol en el Grupo 1.
También realizamos una deduplicación para eliminar plantillas casi idénticas. Como resultado, el Grupo 1 se redujo significativamente, pero ahora está más enfocado y contiene principalmente instrucciones de juego de rol. Aún no está limpio al 100%, ya que quedan algunos casos excepcionales, pero planeamos abordarlos en futuras iteraciones.
Publicación del subconjunto
Para fomentar la transparencia y la colaboración dentro de la comunidad investigadora, publicamos un subconjunto curado de nuestro conjunto de datos de red teaming en Hugging Face: enlace aquí
Este subconjunto contiene únicamente prompts provenientes de conjuntos de datos con licencias no comerciales, cuidadosamente seleccionados y depurados por el equipo de Galtea.
Esta versión tiene como objetivo fomentar la reproducibilidad y acelerar la investigación sobre la creación de prompts adversarios y las pruebas de seguridad en LLM.
Conclusión
Para terminar, este subconjunto es nuestro primer intento de organizar diferentes tipos de prompts dañinos utilizando ejemplos reales. Las categorías que creamos surgen directamente de los datos que encontramos, no de una lista fija o un modelo de amenazas formal. Esto significa que nuestro trabajo muestra solo los tipos de ataques que aparecieron en el conjunto de datos, no todos los posibles. Nuestra clasificación es similar, pero no equivalente, a las categorías de LlamaGuard o Ailuminate de MLCommons, las cuales son relevantes para casos de uso más específicos. Nuestro objetivo es ofrecer un punto de partida sencillo y útil, basado en datos reales, sobre el cual otros puedan construir. Esperamos que esto ayude a las personas a probar y mejorar los métodos de red teaming, y quizás a combinar esto con otras herramientas y modelos de seguridad en el futuro.
Seguiremos compartiendo nuestros hallazgos a medida que probemos e implementemos nuevas herramientas. Si estás desarrollando productos basados en LLM y quieres fortalecerlos frente a adversarios reales, estamos aquí para ayudarte.
Reserva una demostración con nosotros: Demostración de Galtea
Lista completa de los conjuntos de datos utilizados