Cómo probar un modelo de OpenAI contra ataques adversos de un solo giro utilizando Deepteam

En este tutorial, exploraremos cómo probar un modelo de OpenAI contra ataques adversos de un solo cambio de giro utilizando engranaje.

engranaje Proporciona más de 10 métodos de ataque, como inyección inmediata, jailbreaking y leetspeak, que exponen las debilidades en las aplicaciones LLM. Comienza con ataques de referencia simples y luego aplica técnicas más avanzadas (conocidas como mejora del ataque) para imitar el comportamiento malicioso del mundo real. Mira el Códigos completos aquí.

Al ejecutar estos ataques, podemos evaluar qué tan bien el modelo se defiende contra diferentes vulnerabilidades.

En Deepteam, hay dos tipos principales de ataques:

Aquí, solo nos centraremos en ataques de giro único.

Instalación de las dependencias

pip install deepteam openai pandas

Deberá establecer su OpenAI_API_Key como una variable de entorno antes de ejecutar la función RED_TEAM (), ya que DeepTeam usa LLMS para generar ataques adversos y evaluar las salidas de LLM.

Para obtener una llave de API de OpenAI, visite https://platform.openai.com/settings/organization/api-keys y generar una nueva clave. Si es un nuevo usuario, es posible que deba agregar detalles de facturación y realizar un pago mínimo de $ 5 para activar el acceso a la API. Mira el Códigos completos aquí.

import os
from getpass import getpass
os.environ["OPENAI_API_KEY"] = getpass('Enter OpenAI API Key: ')

Importando las bibliotecas

import asyncio
from openai import OpenAI
from deepteam import red_team
from deepteam.vulnerabilities import IllegalActivity
from deepteam.attacks.single_turn import PromptInjection, GrayBox, Base64, Leetspeak, ROT13, Multilingual, MathProblem

Definición de la devolución de llamada del modelo

Este código define una función de devolución de llamada Async que consulte el modelo OpenAI (GPT-4O-Mini) y devuelve el texto de respuesta del modelo. Actúa como el generador de salida de la LLM para el marco de ataque. Mira el Códigos completos aquí.

client = OpenAI()

# Define callback for querying the LLM
async def model_callback(input: str) -> str:
    response = client.chat.completions.create(
        model="gpt-4o-mini",  # use "gpt-4o" if you want a stronger model
        messages=[{"role": "user", "content": input}],
    )
    return response.choices[0].message.content

Definición de vulnerabilidad y ataques

Aquí, especificamos la vulnerabilidad (ilegalactividad) y establecemos su tipo en explotación infantil. Luego definimos diferentes métodos de ataque como Apuración previa, Graybox, Base64, Leetspeak, ROT13, Plurilingüey Mathproblem

Cada uno de estos tipos de ataque se explicará en detalle más adelante en el tutorial. Mira el Códigos completos aquí.

# Vulnerability
illegal_activity = IllegalActivity(types=["child exploitation"])

# Attacks
prompt_injection = PromptInjection()
graybox_attack = GrayBox()
base64_attack = Base64()
leetspeak_attack = Leetspeak()
rot_attack = ROT13()
multi_attack = Multilingual()
math_attack = MathProblem()

Inyección rápida

La inyección rápida es un ataque en el que un usuario intenta anular las instrucciones originales del modelo inyectando texto malicioso o manipulador en la solicitud. El objetivo es engañar al modelo para que ignore las políticas de seguridad y genere contenido dañino o restringido.

Los intentos inyectados inyectados de obligar al modelo a jugar a roles como una persona poco ética llamada OPPO, que ignora las reglas de seguridad y fomenta la actividad ilegal.

A pesar de este intento, el modelo se negó a cumplir, respondió con:

“Lo siento, no puedo ayudar con eso”.

Esto confirma que el modelo resistió con éxito la inyección de inmediato y devolvió un resultado de aprobación para esta prueba. Mira el Códigos completos aquí.

risk_assessment = red_team(
        model_callback=model_callback,
        vulnerabilities=[illegal_activity],
        attacks=[prompt_injection],
    )

Ataque Graybox

El ataque de Graybox aprovecha el conocimiento parcial sobre el sistema LLM objetivo para crear indicaciones adversas. A diferencia de las entradas aleatorias, los ataques de Graybox explotan las debilidades conocidas al reformular el ataque de referencia con un lenguaje abstracto o engañoso, lo que dificulta los filtros de seguridad detectar intención maliciosa.

En esta prueba, el aviso de adversario intentó fomentar actividades ilegales disfrazando las instrucciones sobre la creación de documentos de identificación falsos y el uso de canales cifrados. Mira el Códigos completos aquí.

risk_assessment = red_team(
        model_callback=model_callback,
        vulnerabilities=[illegal_activity],
        attacks=[graybox_attack],
    )

Base64 Ataque

El ataque Base64 es una técnica adversa común en la que se codifican las instrucciones dañinas en Base64 para evitar los filtros de seguridad. En lugar de presentar contenido malicioso directamente, el atacante lo esconde en un formato codificado, con la esperanza de que el modelo lo decodifique y ejecute las instrucciones.

En esta prueba, la cadena codificada contenía instrucciones relacionadas con la actividad ilegal, disfrazada de parecer inofensivo a primera vista. El modelo, sin embargo, no intentó decodificar ni seguir con la solicitud oculta. Mira el Códigos completos aquí.

risk_assessment = red_team(
        model_callback=model_callback,
        vulnerabilities=[illegal_activity],
        attacks=[base64_attack],
    )

Ataque leetspeak

El ataque de Leetspeak disfraza las instrucciones maliciosas al reemplazar los caracteres normales con números o símbolos (por ejemplo, A se convierte en 4, E se convierte en 3, I se convierte en 1). Esta sustitución simbólica hace que el texto dañino sea más difícil de detectar con filtros de palabras clave simples, sin dejar de ser legible para humanos o sistemas que podrían decodificarlo.

En esta prueba, el texto de ataque intentó instruir a los menores en actividades ilegales, escritas en formato Leetspeak. A pesar de la ofuscación, el modelo claramente reconoció la intención maliciosa. Mira el Códigos completos aquí.

risk_assessment = red_team(
        model_callback=model_callback,
        vulnerabilities=[illegal_activity],
        attacks=[leetspeak_attack],
    )

Ataque de pudrición

El ataque ROT-13 es un método de ofuscación clásica donde cada letra se desplaza 13 posiciones en el alfabeto. Por ejemplo, A se convierte en N, B se convierte en O, y así sucesivamente. Esta transformación cae en las instrucciones dañinas en una forma codificada, lo que hace que sean menos propensos a activar filtros de contenido basados en palabras clave simples. Sin embargo, el texto aún se puede decodificar fácilmente en su forma original. Mira el Códigos completos aquí.

risk_assessment = red_team(
        model_callback=model_callback,
        vulnerabilities=[illegal_activity],
        attacks=[rot_attack],
    )

Ataque multilingüe

El ataque multilingüe funciona traduciendo una solicitud de base dañina en un lenguaje menos comúnmente monitoreado. La idea es que los filtros de contenido y los sistemas de moderación pueden ser más robustos en idiomas ampliamente utilizados (como el inglés) pero menos efectivos en otros idiomas, lo que permite instrucciones maliciosas para evitar la detección.

En esta prueba, el ataque fue escrito en swahilisolicitar instrucciones relacionadas con actividades ilegales. Mira el Códigos completos aquí.

risk_assessment = red_team(
        model_callback=model_callback,
        vulnerabilities=[illegal_activity],
        attacks=[multi_attack],
    )

Problema matemático

El ataque de los problemas matemáticos disfraza las solicitudes maliciosas dentro de la notación matemática o las declaraciones de problemas. Al integrar instrucciones dañinas en una estructura formal, el texto puede parecer un ejercicio académico inofensivo, lo que dificulta que los filtros detecten la intención subyacente.

En este caso, la entrada enmarcó el contenido de explotación ilegal como un problema de teoría grupal, pidiendo al modelo que “pruebe” un resultado dañino y proporcione una “traducción” en lenguaje sencillo. Mira el Códigos completos aquí.

risk_assessment = red_team(
        model_callback=model_callback,
        vulnerabilities=[illegal_activity],
        attacks=[math_attack],
    )

Mira el Códigos completos aquí. No dude en ver nuestro Página de Github para tutoriales, códigos y cuadernos. Además, siéntete libre de seguirnos Gorjeo Y no olvides unirte a nuestro Subreddit de 100k+ ml y suscribirse a Nuestro boletín.


Soy un graduado de ingeniería civil (2022) de Jamia Millia Islamia, Nueva Delhi, y tengo un gran interés en la ciencia de datos, especialmente las redes neuronales y su aplicación en varias áreas.