Loading...
    • Guía para desarrolladores
    • Referencia de API
    • MCP
    • Recursos
    • Notas de la versión
    Search...
    ⌘K
    Recursos
    Descripción generalGlosarioPrompts del sistema
    Descripción generalEnrutamiento de ticketsAgente de atención al clienteModeración de contenidoResumen legal
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Help and security

    • Availability
    • Status
    • Support
    • Discord

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    Casos de uso

    Moderación de contenido

    La moderación de contenido es un aspecto crítico para mantener un entorno seguro, respetuoso y productivo en aplicaciones digitales. En esta guía, discutiremos cómo Claude puede utilizarse para moderar contenido dentro de tu aplicación digital.

    Visita 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 se enfoca en moderar contenido generado por usuarios dentro de tu aplicación. Si buscas orientación sobre cómo moderar interacciones con Claude, consulta nuestra guía de protecciones.

    Antes de construir con Claude

    Decide si usar Claude para moderación de contenido

    Aquí hay algunos indicadores clave de que deberías usar un LLM como Claude en lugar de un enfoque tradicional basado en ML o 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 (de acuerdo con nuestra Política de Uso Aceptable), independientemente del prompt utilizado. Por ejemplo, un sitio web para adultos que desea permitir que los usuarios publiquen contenido sexual explícito puede encontrar que Claude aún marca el contenido explícito como requiriendo moderación, incluso si especifican en su prompt no moderar contenido sexual explícito. Recomendamos revisar nuestra AUP antes de construir una solución de moderación.

    Genera ejemplos de contenido a moderar

    Antes de desarrollar una solución de moderación de contenido, primero crea ejemplos de contenido que debería ser marcado y contenido que no debería ser marcado. Asegúrate de incluir casos límite y escenarios desafiantes que pueden ser difíciles para un sistema de moderación de contenido manejar efectivamente. Después, revisa tus 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 = [
        'This movie was great, I really enjoyed it. The main actor really killed it!',
        'I hate Mondays.',
        'It is a great time to invest in gold!'
    ]
    
    disallowed_user_comments = [
        'Delete this post now or you better hide. I am coming after you and your family.',
        'Stay away from the 5G cellphones!! They are using 5G to control you.',
        'Congratulations! You have won a $1,000 gift card. Click here to claim your prize!'
    ]
    
    # Sample user comments to test the content moderation
    user_comments = allowed_user_comments + disallowed_user_comments
    
    # List of categories considered unsafe for content moderation
    unsafe_categories = [
        'Child Exploitation',
        'Conspiracy Theories',
        'Hate',
        'Indiscriminate Weapons', 
        'Intellectual Property',
        'Non-Violent Crimes', 
        'Privacy',
        'Self-Harm',
        'Sex Crimes',
        'Sexual Content',
        'Specialized Advice',
        'Violent Crimes'
    ]

    Moderar efectivamente estos ejemplos requiere una comprensión matizada del lenguaje. En el comentario, This movie was great, I really enjoyed it. The main actor really killed it!, el sistema de moderación de contenido necesita reconocer que "killed it" es una metáfora, no una indicación de violencia real. Conversamente, a pesar de la falta de menciones explícitas de violencia, el comentario Delete this post now or you better hide. I am coming after you and your family. debería ser marcado por el sistema de moderación de contenido.

    La lista unsafe_categories puede ser personalizada para ajustarse a tus necesidades específicas. Por ejemplo, si deseas prevenir que menores creen contenido en tu sitio web, podrías añadir "Underage Posting" a la lista.


    Cómo moderar contenido usando Claude

    Selecciona el modelo Claude correcto

    Al seleccionar un modelo, es importante considerar el tamaño de tus datos. Si los costos son una preocupación, un modelo más pequeño como Claude Haiku 3 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 posts por mes:

    • Tamaño del contenido

      • Posts por mes: 1bn
      • Caracteres por post: 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 Haiku 3

      • 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 Opus 4.6

      • Costo de tokens de entrada: 2,860 MTok * $5.00/MTok = $14,300
      • Costo de tokens de salida: 1,500 MTok * $25.00/MTok = $37,500
      • Costo mensual: $14,300 + $37,500 = $51,800
    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.

    Construye un prompt fuerte

    Para usar Claude para moderación de contenido, Claude debe entender los requisitos de moderación de tu aplicación. Comencemos escribiendo un prompt que te permita definir tus necesidades de moderación:

    import anthropic
    import json
    
    # Initialize the Anthropic client
    client = anthropic.Anthropic()
    
    def moderate_message(message, unsafe_categories):
        # Convert the list of unsafe categories into a string, with each category on a new line
        unsafe_category_str = '\n'.join(unsafe_categories)
        
        # Construct the prompt for Claude, including the message and unsafe categories
        assessment_prompt = f"""
        Determine whether the following message warrants moderation, 
        based on the unsafe categories outlined below.
        
        Message:
        <message>{message}</message>
    
        Unsafe Categories:
        <categories>
        {unsafe_category_str}
        </categories>
    
        Respond with ONLY a JSON object, using the format below:
        {{
        "violation": <Boolean field denoting whether the message should be moderated>,
        "categories": [Comma-separated list of violated categories],
        "explanation": [Optional. Only include if there is a violation.]
        }}"""
    
        # Send the request to Claude for content moderation
        response = client.messages.create(
            model="claude-3-haiku-20240307",  # Using the Haiku model for lower costs
            max_tokens=200,
            temperature=0,   # Use 0 temperature for increased consistency
            messages=[
                {"role": "user", "content": assessment_prompt}
            ]
        )
        
        # Parse the JSON response from Claude
        assessment = json.loads(response.content[0].text)
        
        # Extract the violation status from the assessment
        contains_violation = assessment['violation']
        
        # If there's a violation, get the categories and explanation; otherwise, use empty defaults
        violated_categories = assessment.get('categories', []) if contains_violation else []
        explanation = assessment.get('explanation') if contains_violation else None
        
        return contains_violation, violated_categories, explanation
    
    # Process each comment and print the results
    for comment in user_comments:
        print(f"\nComment: {comment}")
        violation, violated_categories, explanation = moderate_message(comment, unsafe_categories)
        
        if violation:
            print(f"Violated Categories: {', '.join(violated_categories)}")
            print(f"Explanation: {explanation}")
        else:
            print("No issues detected.")

    En este ejemplo, la función moderate_message contiene un prompt de evaluación que incluye las categorías de contenido inseguro y el mensaje que deseamos evaluar. El prompt le pide a Claude que evalúe si el mensaje debería ser moderado, basándose en las categorías inseguras que definimos.

    La evaluación del modelo se analiza luego para determinar si hay una violación. Si hay una violación, Claude también devuelve una lista de categorías violadas, así como una explicación de por qué el mensaje es inseguro.

    Evalúa tu prompt

    La moderación de contenido es un problema de clasificación. Por lo tanto, puedes usar las mismas técnicas descritas en nuestro libro de recetas de clasificación para determinar la precisión de tu sistema de moderación de contenido.

    Una consideración adicional es que en lugar de tratar la moderación de contenido como un problema de clasificación binaria, podrías crear múltiples categorías para representar varios niveles de riesgo. Crear múltiples niveles de riesgo te permite ajustar la agresividad de tu moderación. Por ejemplo, podrías querer bloquear automáticamente consultas de usuarios que se consideren de alto riesgo, mientras que los usuarios con muchas consultas de riesgo medio se marcan para revisión humana.

    import anthropic
    import json
    
    # Initialize the Anthropic client
    client = anthropic.Anthropic()
    
    def assess_risk_level(message, unsafe_categories):
        # Convert the list of unsafe categories into a string, with each category on a new line
        unsafe_category_str = '\n'.join(unsafe_categories)
        
        # Construct the prompt for Claude, including the message, unsafe categories, and risk level definitions
        assessment_prompt = f"""
        Assess the risk level of the following message warrants moderation, 
        based on the unsafe categories listed below.
        
    Message:
    <message>{message}</message>
    
    Unsafe Categories:
    <categories>
    {unsafe_category_str}
    </categories>
    
    Assign a risk level based on your confidence that the user's message should be moderated 
    based on the defined unsafe categories:
    
    0 - No risk
    1 - Low risk
    2 - Medium risk
    3 - High risk
    
    Respond with ONLY a JSON object, using the format below:
    {{
      "risk_level": <Numerical field denoting the risk level>,
      "categories": [Comma-separated list of violated categories],
      "explanation": <Optional. Only include if risk level is greater than 0>
    }}"""
    
        # Send the request to Claude for risk assessment
        response = client.messages.create(
            model="claude-3-haiku-20240307",  # Using the Haiku model for lower costs
            max_tokens=200,
            temperature=0,   # Use 0 temperature for increased consistency
            messages=[
                {"role": "user", "content": assessment_prompt}
            ]
        )
        
        # Parse the JSON response from Claude
        assessment = json.loads(response.content[0].text)
        
        # Extract the risk level, violated categories, and explanation from the assessment
        risk_level = assessment["risk_level"]
        violated_categories = assessment["categories"]
        explanation = assessment.get("explanation")
        
        return risk_level, violated_categories, explanation
    
    # Process each comment and print the results
    for comment in user_comments:
        print(f"\nComment: {comment}")
        risk_level, violated_categories, explanation = assess_risk_level(comment, unsafe_categories)
        
        print(f"Risk Level: {risk_level}")
        if violated_categories:
            print(f"Violated Categories: {', '.join(violated_categories)}")
        if explanation:
            print(f"Explanation: {explanation}")

    Este código implementa una función assess_risk_level que usa Claude para evaluar el nivel de riesgo de un mensaje. La función acepta un mensaje y una lista de categorías inseguras como entradas.

    Dentro de la función, se genera un prompt para Claude, incluyendo el mensaje a evaluar, las categorías inseguras e instrucciones específicas para evaluar el nivel de riesgo. El prompt instruye a Claude que responda con un objeto JSON que incluya el nivel de riesgo, las categorías violadas y una explicación opcional.

    Este enfoque permite moderación de contenido flexible asignando niveles de riesgo. Puede integrarse sin problemas en un sistema más grande para automatizar el filtrado de contenido o marcar comentarios para revisión humana basándose en su nivel de riesgo evaluado. Por ejemplo, al ejecutar este código, el comentario Delete this post now or you better hide. I am coming after you and your family. se identifica como de alto riesgo debido a su amenaza peligrosa. Conversamente, el comentario Stay away from the 5G cellphones!! They are using 5G to control you. se categoriza como riesgo medio.

    Despliega tu prompt

    Una vez que estés confiado en la calidad de tu solución, es hora de desplegarla a producción. Aquí hay algunas mejores prácticas a seguir cuando uses moderación de contenido en producción:

    1. Proporciona retroalimentación clara a los usuarios: Cuando la entrada del usuario se bloquea o una respuesta se marca debido a moderación de contenido, proporciona retroalimentación informativa y constructiva para ayudar a los usuarios a entender por qué su mensaje fue marcado y cómo pueden reformularlo apropiadamente. En los ejemplos de código anteriores, esto se hace a través de la etiqueta explanation en la respuesta de Claude.

    2. Analiza contenido moderado: Mantén un registro de los tipos de contenido siendo marcados por tu sistema de moderación para identificar tendencias y áreas potenciales de mejora.

    3. Evalúa y mejora continuamente: Evalúa regularmente el desempeño de tu sistema de moderación de contenido usando métricas como seguimiento de precisión y recall. Usa estos datos para refinar iterativamente tus prompts de moderación, palabras clave y criterios de evaluación.


    Mejora el desempeño

    En escenarios complejos, puede ser útil considerar estrategias adicionales para mejorar el desempeño más allá de las técnicas estándar de ingeniería de prompts. Aquí hay algunas estrategias avanzadas:

    Define temas y proporciona ejemplos

    Además de listar las categorías inseguras en el prompt, se pueden hacer mejoras adicionales proporcionando definiciones y frases relacionadas con cada categoría.

    import anthropic
    import json
    
    # Initialize the Anthropic client
    client = anthropic.Anthropic()
    
    # Dictionary of categories considered unsafe for content moderation, with their definitions
    unsafe_category_definitions = {
        'Child Exploitation': 'Content that depicts child nudity or that enables, encourages, excuses, or depicts the sexual abuse of children.',
        'Conspiracy Theories': """Content that promotes or endorses unfounded, false, or misleading theories about events, situations, or individuals, 
            which can incite harm or undermine public trust in institutions or facts.""",
        'Hate': """Content that is hateful toward people on the basis of their protected characteristics 
            (race, color, ethnicity, national origin, disability, religious affiliation, caste, sexual orientation, sex, gender identity and serious disease), 
            or content that perpetuates negative stereotypes.""",
        'Indiscriminate Weapons': 'Content that enables the creation of weapons of mass destruction.', 
        'Intellectual Property': 'Content that violates the intellectual property rights of third parties.',
        'Non-Violent Crimes': 'Content that enables, encourages, or excuses the commission of non-violent crimes.', 
        'Privacy': 'Content that contains sensitive, personal information about private individuals.',
        'Self-Harm': 'Content that enables, encourages, or excuses acts of intentional self-harm.',
        'Sex Crimes': 'Content that enables, encourages, or excuses the commission of sex crimes.',
        'Sexual Content': 'Content that contains erotic descriptions or explicit depictions of sex acts.',
        'Specialized Advice': """Content that contains financial, medical, or legal advice. 
            Financial advice includes guidance on investments, stocks, bonds, or any financial planning.""",
        'Violent Crimes': 'Content that enables, encourages, or excuses the commission of violent crimes.', 
    }
    
    
    def moderate_message_with_definitions(message, unsafe_category_definitions):
        # Format unsafe categories string, with each category and its definition on a new line
        unsafe_category_str = '\n'.join(f'{category}: {definition}' 
            for category, definition in unsafe_category_definitions.items()
        )
        
        # Construct the prompt for Claude, including the message and unsafe categories
        assessment_prompt = f"""Determine whether the following message warrants moderation, based on the unsafe categories outlined below.
    
    Message:
    <message>{message}</message>
    
    Unsafe Categories and Their Definitions:
    <categories>
    {unsafe_category_str}
    </categories>
    
    It's important that you remember all unsafe categories and their definitions.
    
    Respond with ONLY a JSON object, using the format below:
    {{
      "violation": <Boolean field denoting whether the message should be moderated>,
      "categories": [Comma-separated list of violated categories],
      "explanation": [Optional. Only include if there is a violation.]
    }}"""
    
        # Send the request to Claude for content moderation
        response = client.messages.create(
            model="claude-3-haiku-20240307",  # Using the Haiku model for lower costs
            max_tokens=200,
            temperature=0,   # Use 0 temperature for increased consistency
            messages=[
                {"role": "user", "content": assessment_prompt}
            ]
        )
        
        # Parse the JSON response from Claude
        assessment = json.loads(response.content[0].text)
        
        # Extract the violation status from the assessment
        contains_violation = assessment['violation']
        
        # If there's a violation, get the categories and explanation; otherwise, use empty defaults
        violated_categories = assessment.get('categories', []) if contains_violation else []
        explanation = assessment.get('explanation') if contains_violation else None
        
        return contains_violation, violated_categories, explanation
    
    
    # Process each comment and print the results
    for comment in user_comments:
        print(f"\nComment: {comment}")
        violation, violated_categories, explanation = moderate_message_with_definitions(comment, unsafe_category_definitions)
        
        if violation:
            print(f"Violated Categories: {', '.join(violated_categories)}")
            print(f"Explanation: {explanation}")
        else:
            print("No issues detected.")

    La función moderate_message_with_definitions se expande sobre la función anterior moderate_message al permitir que cada categoría insegura se empareje con una definición detallada. Esto ocurre en el código reemplazando la lista unsafe_categories de la función original con un diccionario unsafe_category_definitions. Este diccionario mapea cada categoría insegura a su definición correspondiente. Tanto los nombres de categoría como sus definiciones se incluyen en el prompt.

    Notablemente, la definición para la categoría Specialized Advice ahora especifica los tipos de consejo financiero que deberían ser prohibidos. Como resultado, el comentario It's a great time to invest in gold!, que previamente pasó la evaluación moderate_message, ahora desencadena una violación.

    Considera procesamiento por lotes

    Para reducir costos en situaciones donde la moderación en tiempo real no es necesaria, considera moderar mensajes en lotes. Incluye múltiples mensajes dentro del contexto del prompt y pídele a Claude que evalúe qué mensajes deberían ser moderados.

    import anthropic
    import json
    
    # Initialize the Anthropic client
    client = anthropic.Anthropic()
    
    def batch_moderate_messages(messages, unsafe_categories):
        # Convert the list of unsafe categories into a string, with each category on a new line
        unsafe_category_str = '\n'.join(unsafe_categories)
        
        # Format messages string, with each message wrapped in XML-like tags and given an ID
        messages_str = '\n'.join([f'<message id={idx}>{msg}</message>' for idx, msg in enumerate(messages)])
        
        # Construct the prompt for Claude, including the messages and unsafe categories
        assessment_prompt = f"""Determine the messages to moderate, based on the unsafe categories outlined below.
    
    Messages:
    <messages>
    {messages_str}
    </messages>
    
    Unsafe categories and their definitions:
    <categories>
    {unsafe_category_str}
    </categories>
    
    Respond with ONLY a JSON object, using the format below:
    {{
      "violations": [
        {{
          "id": <message id>,
          "categories": [list of violated categories],
          "explanation": <Explanation of why there's a violation>
        }},
        ...
      ]
    }}
    
    Important Notes:
    - Remember to analyze every message for a violation.
    - Select any number of violations that reasonably apply."""
    
        # Send the request to Claude for content moderation
        response = client.messages.create(
            model="claude-3-haiku-20240307",  # Using the Haiku model for lower costs
            max_tokens=2048,  # Increased max token count to handle batches
            temperature=0,    # Use 0 temperature for increased consistency
            messages=[
                {"role": "user", "content": assessment_prompt}
            ]
        )
        
        # Parse the JSON response from Claude
        assessment = json.loads(response.content[0].text)
        return assessment
    
    
    # Process the batch of comments and get the response
    response_obj = batch_moderate_messages(user_comments, unsafe_categories)
    
    # Print the results for each detected violation
    for violation in response_obj['violations']:
        print(f"""Comment: {user_comments[violation['id']]}
    Violated Categories: {', '.join(violation['categories'])}
    Explanation: {violation['explanation']}
    """)

    En este ejemplo, la función batch_moderate_messages maneja la moderación de un lote completo de mensajes con una sola llamada a la API de Claude. Dentro de la función, se crea un prompt que incluye la lista de mensajes a evaluar, las categorías de contenido inseguro definidas y sus descripciones. El prompt dirige a Claude a devolver un objeto JSON listando todos los mensajes que contienen violaciones. Cada mensaje en la respuesta se identifica por su id, que corresponde a la posición del mensaje en la lista de entrada. Ten en cuenta que encontrar el tamaño de lote óptimo para tus necesidades específicas puede requerir algo de experimentación. Mientras que tamaños de lote más grandes pueden reducir costos, también podrían llevar a una ligera disminución en la calidad. Además, puede que necesites aumentar el parámetro max_tokens en la llamada a la API de Claude para acomodar respuestas más largas. Para detalles sobre el número máximo de tokens que tu modelo elegido puede generar, consulta la página de comparación de modelos.

    Libro de recetas de moderación de contenido

    Ver un ejemplo completamente implementado basado en código de cómo usar Claude para moderación de contenido.

    Guía de protecciones

    Explora nuestra guía de protecciones para técnicas de moderación de interacciones con Claude.

    Was this page helpful?

    • Antes de construir con Claude
    • Decide si usar Claude para moderación de contenido
    • Genera ejemplos de contenido a moderar
    • Cómo moderar contenido usando Claude
    • Selecciona el modelo Claude correcto
    • Construye un prompt fuerte
    • Evalúa tu prompt
    • Despliega tu prompt
    • Mejora el desempeño
    • Define temas y proporciona ejemplos
    • Considera procesamiento por lotes