Back to Promptfoo

Moderation

site/docs/configuration/expected-outputs/moderation.md

0.121.99.7 KB
Original Source

Moderation

Use the moderation assert type to ensure that LLM outputs are safe.

Currently, this supports OpenAI's moderation model, Meta's LlamaGuard models (LlamaGuard 3 and 4) via Replicate, and Azure Content Safety API.

In general, we encourage the use of Meta's LlamaGuard as it substantially outperforms OpenAI's moderation API as well as GPT-4. See benchmarks.

OpenAI moderation

By default, the moderation assertion uses OpenAI if an OpenAI API key is provided. Just make sure that the OPENAI_API_KEY environment variable is set:

yaml
tests:
  - vars:
      foo: bar
    assert:
      # Ensure that it passes OpenAI's moderation filters
      - type: moderation

OpenAI monitors the following categories:

CategoryDescription
hateContent that promotes hate based on race, gender, ethnicity, religion, nationality, sexual orientation, disability, or caste. Hateful content aimed at non-protected groups is harassment.
hate/threateningHateful content that includes violence or serious harm towards the targeted group.
harassmentContent that promotes harassing language towards any target.
harassment/threateningHarassment content that includes violence or serious harm towards any target.
self-harmContent that promotes or depicts acts of self-harm, such as suicide, cutting, and eating disorders.
self-harm/intentContent where the speaker expresses intent to engage in self-harm.
self-harm/instructionsContent that encourages or gives instructions on how to commit acts of self-harm.
sexualContent meant to arouse sexual excitement or promote sexual services (excluding sex education and wellness).
sexual/minorsSexual content involving individuals under 18 years old.
violenceContent that depicts death, violence, or physical injury.
violence/graphicContent that depicts death, violence, or physical injury in graphic detail.

Check specific categories

The assertion value allows you to only enable moderation for specific categories:

yaml
tests:
  - vars:
      foo: bar
    assert:
      - type: moderation
        // highlight-start
        value:
          - harassment
          - harassment/threatening
          - sexual
          - sexual/minors
        // highlight-end

Meta LlamaGuard moderation

This example uses the LlamaGuard model hosted on Replicate. Be sure to set the REPLICATE_API_KEY environment variable:

yaml
tests:
  - vars:
      foo: bar
    assert:
      - type: moderation
        # Use the latest Llama Guard on replicate
        provider: 'replicate:moderation:meta/llama-guard-3-8b:146d1220d447cdcc639bc17c5f6137416042abee6ae153a2615e6ef5749205c8'

:::tip LlamaGuard 4 is the default moderation provider on Replicate, featuring enhanced capabilities and an additional category (S14: Code Interpreter Abuse). You can explicitly specify it:

yaml
provider: 'replicate:moderation:meta/llama-guard-4-12b'

For compatibility or specific use cases, you can use LlamaGuard 3:

yaml
provider: 'replicate:moderation:meta/llama-guard-3-8b:146d1220d447cdcc639bc17c5f6137416042abee6ae153a2615e6ef5749205c8'

:::

LlamaGuard monitors the following categories:

CategoryDescriptionCode
Violent CrimesContent that enables, encourages, or excuses violent crimes (e.g., terrorism, murder, child abuse, animal abuse)S1
Non-Violent CrimesContent that enables, encourages, or excuses non-violent crimes (e.g., fraud, burglary, drug trafficking)S2
Sex CrimesContent that enables, encourages, or excuses sex crimes (e.g., human trafficking, sexual assault, harassment)S3
Child ExploitationContent depicting child nudity or sexual abuse of childrenS4
DefamationContent containing defamatory statements about individuals or entitiesS5
Specialized AdviceContent containing specialized financial, medical, or legal adviceS6
PrivacyContent containing sensitive, personal information about private individualsS7
Intellectual PropertyContent that violates intellectual property rights of third partiesS8
Indiscriminate WeaponsContent that enables the creation of weapons of mass destruction (e.g., chemical, biological, nuclear weapons)S9
HateContent that is hateful toward people based on protected characteristics or perpetuates negative stereotypesS10
Self-HarmContent that enables, encourages, or excuses acts of intentional self-harm (e.g., suicide, self-injury)S11
Sexual ContentDepictions of nude adults or content with erotic descriptions or explicit sex actsS12
ElectionsContent containing misinformation or illegal activity related to electionsS13
Code Interpreter AbuseContent that seeks to abuse code interpreters (e.g., denial of service, container escapes) - LlamaGuard 4 onlyS14

Check specific categories

The assertion value allows you to only enable moderation for specific categories:

yaml
tests:
  - vars:
      foo: bar
    assert:
      - type: moderation
        provider: 'replicate:moderation:meta/llama-guard-3-8b:146d1220d447cdcc639bc17c5f6137416042abee6ae153a2615e6ef5749205c8'
        // highlight-start
        value:
          - S1
          - S3
          - S4
        // highlight-end

Azure Content Safety moderation

You can use the Azure Content Safety API for moderation. To set it up, you need to create an Azure Content Safety resource and get the API key and endpoint.

Setup

First, set these environment variables:

bash
AZURE_CONTENT_SAFETY_ENDPOINT=https://your-resource-name.cognitiveservices.azure.com
AZURE_CONTENT_SAFETY_API_KEY=your-api-key
AZURE_CONTENT_SAFETY_API_VERSION=2024-09-01  # Optional, defaults to this version

If AZURE_CONTENT_SAFETY_ENDPOINT is set, PromptFoo will automatically use the Azure Content Safety service for moderation instead of OpenAI's moderation API.

Or you can explicitly use the Azure moderation provider in your tests:

yaml
tests:
  - vars:
      foo: bar
    assert:
      - type: moderation
        provider: 'azure:moderation'

Moderation Categories

The Azure Content Safety API checks content for these categories:

CategoryDescription
HateContent that expresses discrimination or derogatory sentiments
SelfHarmContent related to inflicting physical harm on oneself
SexualSexually explicit or adult content
ViolenceContent depicting or promoting violence against people or animals

Check specific categories

The assertion value allows you to only enable moderation for specific categories

yaml
tests:
  - vars:
      foo: bar
    assert:
      - type: moderation
        provider: 'azure:moderation'
        value:
          - hate
          - sexual

You can also set blocklist names and halt on blocklist hit in the provider config:

yaml
tests:
  - vars:
      foo: bar
    assert:
      - type: moderation
        provider:
          id: azure:moderation
          config:
            blocklistNames: ['my-custom-blocklist', 'industry-terms']
            haltOnBlocklistHit: true