Visite nuestro libro de recetas de moderación de contenido para ver un ejemplo de implementación de moderación de contenido usando Claude.

Esta guía está enfocada en moderar el contenido generado por usuarios dentro de su aplicación. Si busca orientación sobre cómo moderar las interacciones con Claude, consulte nuestra guía de barreras de protección.

Antes de construir con Claude

Decida si usar Claude para la moderación de contenido

Aquí hay algunos indicadores clave de que debería usar un LLM como Claude en lugar de un enfoque tradicional de ML o basado en reglas para la moderación de contenido:

Anthropic ha entrenado todos los modelos de Claude para ser honestos, útiles e inofensivos. Esto puede resultar en que Claude modere contenido considerado particularmente peligroso (en línea con nuestra Política de Uso Aceptable), independientemente del prompt utilizado. Por ejemplo, un sitio web para adultos que quiera permitir que los usuarios publiquen contenido sexual explícito puede encontrar que Claude aún marca el contenido explícito como que requiere moderación, incluso si especifican en su prompt no moderar contenido sexual explícito. Recomendamos revisar nuestra PUA antes de construir una solución de moderación.

Genere ejemplos de contenido para moderar

Antes de desarrollar una solución de moderación de contenido, primero cree ejemplos de contenido que debería ser marcado y contenido que no debería ser marcado. Asegúrese de incluir casos límite y escenarios desafiantes que pueden ser difíciles de manejar efectivamente para un sistema de moderación de contenido. Después, revise sus ejemplos para crear una lista bien definida de categorías de moderación. Por ejemplo, los ejemplos generados por una plataforma de redes sociales podrían incluir lo siguiente:

allowed_user_comments = [
    'Esta película fue genial, realmente la disfruté. ¡El actor principal la rompió!',
    'Odio los lunes.',
    '¡Es un gran momento para invertir en oro!'
]

disallowed_user_comments = [
    'Borra esta publicación ahora o mejor escóndete. Voy por ti y tu familia.',
    '¡Aléjate de los teléfonos celulares 5G!! Están usando el 5G para controlarte.',
    '¡Felicitaciones! Has ganado una tarjeta de regalo de $1,000. Haz clic aquí para reclamar tu premio!'
]

# Comentarios de usuario de ejemplo para probar la moderación de contenido
user_comments = allowed_user_comments + disallowed_user_comments

# Lista de categorías consideradas inseguras para la moderación de contenido
unsafe_categories = [
    'Explotación Infantil',
    'Teorías Conspirativas',
    'Odio',
    'Armas Indiscriminadas', 
    'Propiedad Intelectual',
    'Crímenes No Violentos', 
    'Privacidad',
    'Autolesión',
    'Crímenes Sexuales',
    'Contenido Sexual',
    'Consejos Especializados',
    'Crímenes Violentos'
]

Moderar efectivamente estos ejemplos requiere una comprensión matizada del lenguaje. En el comentario, Esta película fue genial, realmente la disfruté. ¡El actor principal la rompió!, el sistema de moderación de contenido necesita reconocer que “la rompió” es una metáfora, no una indicación de violencia real. Por el contrario, a pesar de la falta de menciones explícitas de violencia, el comentario Borra esta publicación ahora o mejor escóndete. Voy por ti y tu familia. debería ser marcado por el sistema de moderación de contenido.

La lista unsafe_categories puede ser personalizada para adaptarse a sus necesidades específicas. Por ejemplo, si desea evitar que los menores creen contenido en su sitio web, podría agregar “Publicación de Menores” a la lista.


Cómo moderar contenido usando Claude

Seleccione el modelo Claude correcto

Al seleccionar un modelo, es importante considerar el tamaño de sus datos. Si los costos son una preocupación, un modelo más pequeño como Claude 3 Haiku es una excelente opción debido a su rentabilidad. A continuación se muestra una estimación del costo para moderar texto para una plataforma de redes sociales que recibe mil millones de publicaciones por mes:

  • Tamaño del contenido

    • Publicaciones por mes: 1bn
    • Caracteres por publicación: 100
    • Total de caracteres: 100bn
  • Tokens estimados

    • Tokens de entrada: 28.6bn (asumiendo 1 token por 3.5 caracteres)
    • Porcentaje de mensajes marcados: 3%
    • Tokens de salida por mensaje marcado: 50
    • Total de tokens de salida: 1.5bn
  • Costo estimado de Claude 3 Haiku

    • Costo de tokens de entrada: 2,860 MTok * $0.25/MTok = $715
    • Costo de tokens de salida: 1,500 MTok * $1.25/MTok = $1,875
    • Costo mensual: $715 + $1,875 = $2,590
  • Costo estimado de Claude 3.5 Sonnet

    • Costo de tokens de entrada: 2,860 MTok * $3.00/MTok = $8,580
    • Costo de tokens de salida: 1,500 MTok * $15.00/MTok = $22,500
    • Costo mensual: $8,580 + $22,500 = $31,080
Los costos reales pueden diferir de estas estimaciones. Estas estimaciones se basan en el prompt destacado en la sección sobre procesamiento por lotes. Los tokens de salida pueden reducirse aún más eliminando el campo explanation de la respuesta.

Construya un prompt sólido

Para usar Claude para la moderación de contenido, Claude debe entender los requisitos de moderación de su aplicación. Comencemos escribiendo un prompt que le permita definir sus necesidades de moderación:

import anthropic
import json

# Inicializar el cliente de Anthropic
client = anthropic.Anthropic()

def moderate_message(message, unsafe_categories):
    # Convertir la lista de categorías inseguras en una cadena, con cada categoría en una nueva línea
    unsafe_category_str = '\n'.join(unsafe_categories)
    
    # Construir el prompt para Claude, incluyendo el mensaje y las categorías inseguras
    assessment_prompt = f"""
    Determina si el siguiente mensaje requiere moderación, 
    basado en las categorías inseguras descritas a continuación.
    
    Mensaje:
    <message>{message}</message>

    Categorías Inseguras:
    <categories>
    {unsafe_category_str}
    </categories>

    Responde SOLO con un objeto JSON, usando el formato a continuación:
    {{
    "violation": <Campo booleano que indica si el mensaje debe ser moderado>,
    "categories": [Lista separada por comas de categorías violadas],
    "explanation": [Opcional. Solo incluir si hay una violación.]
    }}"""

    # Enviar la solicitud a Claude para moderación de contenido
    response = client.messages.create(
        model="claude-3-haiku-20240307",  # Usando el modelo Haiku para costos más bajos
        max_tokens=200,
        temperature=0,   # Usar temperatura 0 para mayor consistencia
        messages=[
            {"role": "user", "content": assessment_prompt}
        ]
    )
    
    # Analizar la respuesta JSON de Claude
    assessment = json.loads(response.content[0].text)
    
    # Extraer el estado de violación de la evaluación
    contains_violation = assessment['violation']
    
    # Si hay una violación, obtener las categorías y explicación; de lo contrario, usar valores predeterminados vacíos
    violated_categories = assessment.get('categories', []) if contains_violation else []
    explanation = assessment.get('explanation') if contains_violation else None
    
    return contains_violation, violated_categories, explanation

# Procesar cada comentario e imprimir los resultados
for comment in user_comments:
    print(f"\nComentario: {comment}")
    violation, violated_categories, explanation = moderate_message(comment, unsafe_categories)
    
    if violation:
        print(f"Categorías Violadas: {', '.join(violated_categories)}")
        print(f"Explicación: {explanation}")
    else:
        print("No se detectaron problemas.")

[Continúa en la siguiente parte debido al límite de caracteres…]