Claude Platform Docs
Best PracticesAnwendungsfälle

Inhaltsmoderation

Inhaltsmoderation ist ein entscheidender Aspekt, um in digitalen Anwendungen eine sichere, respektvolle und produktive Umgebung aufrechtzuerhalten. Dieser Leitfaden erläutert, wie Claude zur Moderation von Inhalten in deiner digitalen Anwendung eingesetzt werden kann.

Besuche das Cookbook zur Inhaltsmoderation, um eine Beispielimplementierung für Inhaltsmoderation mit Claude zu sehen.

Vor dem Entwickeln mit Claude

Entscheide, ob du Claude für die Inhaltsmoderation verwenden möchtest

Hier sind einige wichtige Indikatoren dafür, dass du ein „large language model“ (großes Sprachmodell), oder LLM, wie Claude anstelle eines traditionellen ML- oder regelbasierten Ansatzes für die Inhaltsmoderation verwenden solltest:

Generiere Beispiele für zu moderierende Inhalte

Bevor du eine Lösung zur Inhaltsmoderation entwickelst, erstelle zunächst Beispiele für Inhalte, die gekennzeichnet werden sollten, und für Inhalte, die nicht gekennzeichnet werden sollten. Achte darauf, Grenzfälle und anspruchsvolle Szenarien einzubeziehen, die für ein Inhaltsmoderationssystem schwer effektiv zu handhaben sein könnten. Überprüfe anschließend deine Beispiele, um eine klar definierte Liste von Moderationskategorien zu erstellen. Die von einer Social-Media-Plattform generierten Beispiele könnten etwa Folgendes umfassen:

client = anthropic.Anthropic()

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!",
]

# Beispiel-Nutzerkommentare zum Testen der Content-Moderation
user_comments = allowed_user_comments + disallowed_user_comments

# Kategorien, die für die Content-Moderation als unsicher gelten
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",
]

Die effektive Moderation dieser Beispiele erfordert ein nuanciertes Sprachverständnis. Beim Kommentar This movie was great, I really enjoyed it. The main actor really killed it! muss das Inhaltsmoderationssystem erkennen, dass „killed it“ eine Metapher ist und kein Hinweis auf tatsächliche Gewalt. Umgekehrt sollte der Kommentar Delete this post now or you better hide. I am coming after you and your family. vom Inhaltsmoderationssystem gekennzeichnet werden, obwohl Gewalt nicht explizit erwähnt wird.

Die unsicheren Kategorien können an deine spezifischen Bedürfnisse angepasst werden. Wenn du beispielsweise verhindern möchtest, dass Minderjährige Inhalte auf deiner Website erstellen, könntest du „Underage Posting“ zu den Kategorien hinzufügen.


So moderierst du Inhalte mit Claude

Wähle das richtige Claude-Modell

Bei der Auswahl eines Modells ist es wichtig, den Umfang deiner Daten zu berücksichtigen. Wenn Kosten eine Rolle spielen, ist ein kleineres Modell wie Claude Haiku 4.5 aufgrund seiner Kosteneffizienz eine ausgezeichnete Wahl. Im Folgenden findest du eine Schätzung der Kosten für die Textmoderation einer Social-Media-Plattform, die eine Milliarde Posts pro Monat erhält:

  • Inhaltsumfang

    • Posts pro Monat: 1 Mrd.
    • Zeichen pro Post: 100
    • Zeichen insgesamt: 100 Mrd.
  • Geschätzte Token

    • Input-Token: 28,6 Mrd. (bei angenommen 1 Token pro 3,5 Zeichen)
    • Anteil gekennzeichneter Nachrichten: 3 %
    • Output-Token pro gekennzeichneter Nachricht: 50
    • Output-Token insgesamt: 1,5 Mrd.
  • Geschätzte Kosten für Claude Haiku 4.5

    • Kosten für Input-Token: 28.600 MTok * 1,00 $ / MTok = 28.600 USD
    • Kosten für Output-Token: 1.500 MTok * 5,00 $ / MTok = 7.500 USD
    • Monatliche Kosten: 28.600 $ + 7.500 $ = 36.100 USD
  • Geschätzte Kosten für Claude Opus 5

    • Kosten für Input-Token: 28.600 MTok * 5,00 $ / MTok = 143.000 USD
    • Kosten für Output-Token: 1.500 MTok * 25,00 $ / MTok = 37.500 USD
    • Monatliche Kosten: 143.000 $ + 37.500 $ = 180.500 USD
  • Geschätzte Kosten für Claude Opus 4.8

    • Kosten für Input-Token: 28.600 MTok * 5,00 $ / MTok = 143.000 USD
    • Kosten für Output-Token: 1.500 MTok * 25,00 $ / MTok = 37.500 USD
    • Monatliche Kosten: 143.000 $ + 37.500 $ = 180.500 USD

Erstelle einen starken Prompt

Um Claude für die Inhaltsmoderation zu verwenden, muss Claude die Moderationsanforderungen deiner Anwendung verstehen. Beginne damit, einen Prompt zu schreiben, mit dem du deine Moderationsbedürfnisse definieren kannst:

def moderate_message(message, unsafe_categories):
    # Wandle die unsicheren Kategorien in einen String um, mit jeder Kategorie in einer neuen Zeile
    unsafe_category_str = "\n".join(unsafe_categories)

    # Erstelle den Prompt für Claude, einschließlich der Nachricht und der unsicheren Kategorien
    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.]
    }}
Do not include markdown formatting or code fences in your response."""

    # Sende die Anfrage zur Content-Moderation an Claude
    response = client.messages.create(
        model="claude-haiku-4-5-20251001",  # Using the Haiku model for lower costs
        max_tokens=200,
        messages=[{"role": "user", "content": assessment_prompt}],
    )

    # Parse die JSON-Antwort von Claude
    text_block = next(block for block in response.content if block.type == "text")
    assessment = json.loads(text_block.text)

    # Extrahiere den Verstoß-Status aus der Bewertung
    contains_violation = assessment["violation"]

    # Bei einem Verstoß hole die Kategorien und die Erklärung; andernfalls verwende leere Standardwerte
    violated_categories = assessment.get("categories", []) if contains_violation else []
    explanation = assessment.get("explanation") if contains_violation else None

    return contains_violation, violated_categories, explanation


# Verarbeite jeden Kommentar und gib die Ergebnisse aus
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.")

In diesem Beispiel enthält die Funktion moderate_message einen Bewertungs-Prompt, der die unsicheren Inhaltskategorien und die zu bewertende Nachricht umfasst. Der Prompt fordert Claude auf, anhand der zuvor von dir definierten unsicheren Kategorien zu beurteilen, ob die Nachricht moderiert werden sollte.

Die Bewertung des Modells wird anschließend geparst, um festzustellen, ob ein Verstoß vorliegt. Liegt ein Verstoß vor, gibt Claude zusätzlich eine Liste der verletzten Kategorien sowie eine Erklärung zurück, warum die Nachricht unsicher ist.

Evaluiere deinen Prompt

Inhaltsmoderation ist ein Klassifizierungsproblem. Daher kannst du dieselben Techniken verwenden, die im Klassifizierungs-Cookbook beschrieben sind, um die Genauigkeit deines Inhaltsmoderationssystems zu bestimmen.

Eine zusätzliche Überlegung ist, dass du Inhaltsmoderation nicht als binäres Klassifizierungsproblem behandeln musst, sondern stattdessen mehrere Kategorien erstellen kannst, die verschiedene Risikostufen repräsentieren. Durch das Erstellen mehrerer Risikostufen kannst du die Strenge deiner Moderation anpassen. Beispielsweise möchtest du vielleicht Nutzeranfragen, die als hohes Risiko eingestuft werden, automatisch blockieren, während Nutzer mit vielen Anfragen mittleren Risikos zur menschlichen Überprüfung gekennzeichnet werden.

def assess_risk_level(message, unsafe_categories):
    # Wandle die unsicheren Kategorien in einen String um, mit jeder Kategorie in einer neuen Zeile
    unsafe_category_str = "\n".join(unsafe_categories)

    # Erstelle den Prompt für Claude, einschließlich der Nachricht, der unsicheren Kategorien und der Risikostufen-Definitionen
    assessment_prompt = f"""
    Assess the risk level of the following message,
    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>
}}
Do not include markdown formatting or code fences in your response."""

    # Sende die Anfrage zur Risikobewertung an Claude
    response = client.messages.create(
        model="claude-haiku-4-5-20251001",  # Using the Haiku model for lower costs
        max_tokens=200,
        messages=[{"role": "user", "content": assessment_prompt}],
    )

    # Parse die JSON-Antwort von Claude
    text_block = next(block for block in response.content if block.type == "text")
    assessment = json.loads(text_block.text)

    # Extrahiere die Risikostufe, die verletzten Kategorien und die Erklärung aus der Bewertung
    risk_level = assessment["risk_level"]
    violated_categories = assessment["categories"]
    explanation = assessment.get("explanation")

    return risk_level, violated_categories, explanation


# Verarbeite jeden Kommentar und gib die Ergebnisse aus
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}")

Dieser Code implementiert eine Funktion assess_risk_level, die Claude verwendet, um die Risikostufe einer Nachricht zu bewerten. Die Funktion nimmt eine Nachricht und die unsicheren Kategorien als Eingaben entgegen.

Innerhalb der Funktion wird ein Prompt für Claude generiert, der die zu bewertende Nachricht, die unsicheren Kategorien und spezifische Anweisungen zur Bewertung der Risikostufe enthält. Der Prompt weist Claude an, mit einem JSON-Objekt zu antworten, das die Risikostufe, die verletzten Kategorien und eine optionale Erklärung enthält.

Dieser Ansatz ermöglicht eine flexible Inhaltsmoderation durch die Zuweisung von Risikostufen. Er lässt sich nahtlos in ein größeres System integrieren, um die Inhaltsfilterung zu automatisieren oder Kommentare basierend auf ihrer bewerteten Risikostufe zur menschlichen Überprüfung zu kennzeichnen. Beim Ausführen dieses Codes wird beispielsweise der Kommentar Delete this post now or you better hide. I am coming after you and your family. aufgrund seiner gefährlichen Drohung als hohes Risiko eingestuft. Umgekehrt wird der Kommentar Stay away from the 5G cellphones!! They are using 5G to control you. als mittleres Risiko kategorisiert.

Stelle deinen Prompt bereit

Sobald du von der Qualität deiner Lösung überzeugt bist, ist es Zeit, sie in der Produktion bereitzustellen. Hier sind einige Best Practices, die du beim Einsatz von Inhaltsmoderation in der Produktion befolgen solltest:

  1. Gib Nutzern klares Feedback: Wenn eine Nutzereingabe blockiert oder eine Antwort aufgrund der Inhaltsmoderation gekennzeichnet wird, gib informatives und konstruktives Feedback, damit Nutzer verstehen, warum ihre Nachricht gekennzeichnet wurde und wie sie sie angemessen umformulieren können. In den vorherigen Codebeispielen geschieht dies über das Feld explanation in der Claude-Antwort.

  2. Analysiere moderierte Inhalte: Behalte im Blick, welche Arten von Inhalten von deinem Moderationssystem gekennzeichnet werden, um Trends und potenzielle Verbesserungsbereiche zu identifizieren.

  3. Evaluiere und verbessere kontinuierlich: Bewerte regelmäßig die Leistung deines Inhaltsmoderationssystems anhand von Metriken wie Precision- und Recall-Tracking. Nutze diese Daten, um deine Moderations-Prompts, Schlüsselwörter und Bewertungskriterien iterativ zu verfeinern.


Leistung verbessern

In komplexen Szenarien kann es hilfreich sein, über die standardmäßigen Prompt-Engineering-Techniken hinaus zusätzliche Strategien zur Leistungsverbesserung in Betracht zu ziehen. Hier sind einige fortgeschrittene Strategien:

Definiere Themen und stelle Beispiele bereit

Zusätzlich zur Auflistung der unsicheren Kategorien im Prompt lassen sich weitere Verbesserungen erzielen, indem Definitionen und Formulierungen zu jeder Kategorie bereitgestellt werden.

# Kategorien, die für die Content-Moderation als unsicher gelten, mit ihren Definitionen
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):
    # Formatiere den String der unsicheren Kategorien, mit jeder Kategorie und ihrer Definition in einer neuen Zeile
    unsafe_category_str = "\n".join(
        f"{category}: {definition}"
        for category, definition in unsafe_category_definitions.items()
    )

    # Erstelle den Prompt für Claude, einschließlich der Nachricht und der unsicheren Kategorien
    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.]
}}
Do not include markdown formatting or code fences in your response."""

    # Sende die Anfrage zur Content-Moderation an Claude
    response = client.messages.create(
        model="claude-haiku-4-5-20251001",  # Using the Haiku model for lower costs
        max_tokens=200,
        messages=[{"role": "user", "content": assessment_prompt}],
    )

    # Parse die JSON-Antwort von Claude
    text_block = next(block for block in response.content if block.type == "text")
    assessment = json.loads(text_block.text)

    # Extrahiere den Verstoß-Status aus der Bewertung
    contains_violation = assessment["violation"]

    # Bei einem Verstoß hole die Kategorien und die Erklärung; andernfalls verwende leere Standardwerte
    violated_categories = assessment.get("categories", []) if contains_violation else []
    explanation = assessment.get("explanation") if contains_violation else None

    return contains_violation, violated_categories, explanation


# Verarbeite jeden Kommentar und gib die Ergebnisse aus
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.")

Die Funktion moderate_message_with_definitions erweitert die frühere Funktion moderate_message, indem sie es ermöglicht, jede unsichere Kategorie mit einer detaillierten Definition zu verknüpfen. Im Code geschieht dies, indem die Sammlung unsafe_categories aus der ursprünglichen Funktion durch ein Mapping unsafe_category_definitions ersetzt wird. Dieses Mapping ordnet jeder unsicheren Kategorie ihre entsprechende Definition zu. Sowohl die Kategorienamen als auch ihre Definitionen werden in den Prompt aufgenommen.

Bemerkenswert ist, dass die Definition der Kategorie Specialized Advice nun die Arten von Finanzberatung spezifiziert, die verboten sein sollten. Infolgedessen löst der Kommentar It is a great time to invest in gold!, der zuvor die Bewertung durch moderate_message bestanden hat, nun einen Verstoß aus.

Ziehe Batch-Verarbeitung in Betracht

Um Kosten in Situationen zu senken, in denen keine Echtzeit-Moderation erforderlich ist, ziehe in Betracht, Nachrichten in Batches zu moderieren. Nimm mehrere Nachrichten in den Kontext des Prompts auf und bitte Claude zu beurteilen, welche Nachrichten moderiert werden sollten.

def batch_moderate_messages(messages, unsafe_categories):
    # Wandle die unsicheren Kategorien in einen String um, mit jeder Kategorie in einer neuen Zeile
    unsafe_category_str = "\n".join(unsafe_categories)

    # Formatiere den Nachrichten-String, wobei jede Nachricht in XML-ähnliche Tags eingeschlossen wird und eine ID erhält
    messages_str = "\n".join(
        [f"<message id={idx}>{msg}</message>" for idx, msg in enumerate(messages)]
    )

    # Erstelle den Prompt für Claude, einschließlich der Nachrichten und der unsicheren Kategorien
    assessment_prompt = f"""Determine the messages to moderate, based on the unsafe categories outlined below.

Messages:
<messages>
{messages_str}
</messages>

Unsafe Categories:
<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.
- Do not include markdown formatting or code fences in your response."""

    # Sende die Anfrage zur Content-Moderation an Claude
    response = client.messages.create(
        model="claude-haiku-4-5-20251001",  # Using the Haiku model for lower costs
        max_tokens=2048,  # Increased max token count to handle batches
        messages=[{"role": "user", "content": assessment_prompt}],
    )

    # Parse die JSON-Antwort von Claude
    text_block = next(block for block in response.content if block.type == "text")
    assessment = json.loads(text_block.text)
    return assessment


# Verarbeite den Batch von Kommentaren und hole die Antwort
response_obj = batch_moderate_messages(user_comments, unsafe_categories)

# Gib die Ergebnisse für jeden erkannten Verstoß aus
for violation in response_obj["violations"]:
    print(f"""Comment: {user_comments[violation["id"]]}
Violated Categories: {", ".join(violation["categories"])}
Explanation: {violation["explanation"]}
""")

In diesem Beispiel übernimmt die Funktion batch_moderate_messages die Moderation eines gesamten Batches von Nachrichten mit einem einzigen Claude-API-Aufruf. Innerhalb der Funktion wird ein Prompt erstellt, der die Liste der zu bewertenden Nachrichten und die unsicheren Inhaltskategorien enthält. Der Prompt weist Claude an, ein JSON-Objekt zurückzugeben, das alle Nachrichten auflistet, die Verstöße enthalten. Jede Nachricht in der Antwort wird durch ihre id identifiziert, die der Position der Nachricht im Batch entspricht. Bedenke, dass das Finden der optimalen Batch-Größe für deine spezifischen Bedürfnisse etwas Experimentieren erfordern kann. Größere Batch-Größen können zwar die Kosten senken, aber auch zu einer leichten Qualitätsminderung führen. Außerdem musst du möglicherweise den Parameter max_tokens im Claude-API-Aufruf erhöhen, um längere Antworten zu ermöglichen. Details zur maximalen Anzahl an Token, die dein gewähltes Modell ausgeben kann, findest du in der Modellvergleichstabelle.

Sieh dir ein vollständig implementiertes, codebasiertes Beispiel an, wie du Claude für die Inhaltsmoderation verwenden kannst.

Erkunde Guardrail-Techniken zur Moderation von Interaktionen mit Claude.

Was this page helpful?