Besuchen Sie unser Inhaltsmoderation-Cookbook, um eine Beispielimplementierung der Inhaltsmoderation mit Claude zu sehen.
Hier sind einige wichtige Indikatoren dafür, dass Sie ein LLM wie Claude anstelle eines traditionellen ML- oder regelgestützten Ansatzes für die Inhaltsmoderation verwenden sollten:
Bevor Sie eine Inhaltsmoderierungslösung entwickeln, erstellen Sie zunächst Beispiele von Inhalten, die gekennzeichnet werden sollten, und Inhalten, die nicht gekennzeichnet werden sollten. Stellen Sie sicher, dass Sie Grenzfälle und schwierige Szenarien einbeziehen, die für ein Inhaltsmoderierungssystem schwierig zu handhaben sein können. Überprüfen Sie anschließend Ihre Beispiele, um eine gut definierte Liste von Moderationskategorien zu erstellen. Beispielsweise könnten die von einer Social-Media-Plattform generierten Beispiele Folgendes enthalten:
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'
]Eine effektive Moderation dieser Beispiele erfordert ein nuanciertes Sprachverständnis. Im Kommentar This movie was great, I really enjoyed it. The main actor really killed it! muss das Inhaltsmoderierungssystem erkennen, dass „killed it" eine Metapher ist, keine Anzeichen tatsächlicher Gewalt. Umgekehrt sollte der Kommentar Delete this post now or you better hide. I am coming after you and your family. trotz fehlender expliziter Gewalterwähnungen vom Inhaltsmoderierungssystem gekennzeichnet werden.
Die Liste unsafe_categories kann an Ihre spezifischen Anforderungen angepasst werden. Wenn Sie beispielsweise verhindern möchten, dass Minderjährige Inhalte auf Ihrer Website erstellen, könnten Sie „Underage Posting" zur Liste hinzufügen.
Bei der Auswahl eines Modells ist es wichtig, die Größe Ihrer Daten zu berücksichtigen. Wenn Kosten ein Problem darstellen, ist ein kleineres Modell wie Claude Haiku 3 aufgrund seiner Kosteneffizienz eine ausgezeichnete Wahl. Nachfolgend finden Sie eine Kostenschätzung für die Moderation von Text für eine Social-Media-Plattform, die eine Milliarde Beiträge pro Monat erhält:
Inhaltsgröße
Geschätzte Token
Claude Haiku 3 geschätzte Kosten
Claude Opus 4.6 geschätzte Kosten
explanation aus der Antwort noch weiter reduziert werden.Um Claude für die Inhaltsmoderation zu verwenden, muss Claude die Moderationsanforderungen Ihrer Anwendung verstehen. Beginnen wir mit dem Schreiben einer Eingabeaufforderung, mit der Sie Ihre Moderationsanforderungen definieren können:
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.")In diesem Beispiel enthält die Funktion moderate_message eine Bewertungsaufforderung, die die unsicheren Inhaltskategorien und die Nachricht enthält, die wir bewerten möchten. Die Eingabeaufforderung fordert Claude auf, zu bewerten, ob die Nachricht basierend auf den von uns definierten unsicheren Kategorien moderiert werden sollte.
Die Bewertung des Modells wird dann analysiert, um festzustellen, ob eine Verletzung vorliegt. Wenn eine Verletzung vorliegt, gibt Claude auch eine Liste der verletzten Kategorien sowie eine Erklärung zurück, warum die Nachricht unsicher ist.
Inhaltsmoderation ist ein Klassifizierungsproblem. Daher können Sie die gleichen Techniken verwenden, die in unserem Klassifizierungs-Cookbook beschrieben sind, um die Genauigkeit Ihres Inhaltsmoderierungssystems zu bestimmen.
Eine zusätzliche Überlegung ist, dass Sie anstatt Inhaltsmoderation als binäres Klassifizierungsproblem zu behandeln, mehrere Kategorien erstellen können, um verschiedene Risikostufen darzustellen. Das Erstellen mehrerer Risikostufen ermöglicht es Ihnen, die Aggressivität Ihrer Moderation anzupassen. Beispielsweise möchten Sie möglicherweise Benutzerabfragen, die als hohes Risiko eingestuft werden, automatisch blockieren, während Benutzer mit vielen Abfragen mit mittlerem Risiko zur menschlichen Überprüfung gekennzeichnet werden.
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}")Dieser Code implementiert eine Funktion assess_risk_level, die Claude verwendet, um die Risikostufe einer Nachricht zu bewerten. Die Funktion akzeptiert eine Nachricht und eine Liste unsicherer Kategorien als Eingaben.
Innerhalb der Funktion wird eine Eingabeaufforderung für Claude generiert, die die zu bewertende Nachricht, die unsicheren Kategorien und spezifische Anweisungen zur Bewertung der Risikostufe enthält. Die Eingabeaufforderung 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 flexible Inhaltsmoderation durch Zuweisung von Risikostufen. Er kann nahtlos in ein größeres System integriert werden, um Inhaltsfilterung zu automatisieren oder Kommentare zur menschlichen Überprüfung basierend auf ihrer bewerteten Risikostufe zu kennzeichnen. Beispielsweise wird bei der Ausführung dieses Codes 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 identifiziert. Umgekehrt wird der Kommentar Stay away from the 5G cellphones!! They are using 5G to control you. als mittleres Risiko kategorisiert.
Sobald Sie sich der Qualität Ihrer Lösung sicher sind, ist es Zeit, sie in der Produktion bereitzustellen. Hier sind einige bewährte Verfahren, die bei der Verwendung von Inhaltsmoderation in der Produktion zu befolgen sind:
Geben Sie klares Feedback an Benutzer: Wenn Benutzereingaben blockiert werden oder eine Antwort aufgrund von Inhaltsmoderation gekennzeichnet wird, geben Sie informatives und konstruktives Feedback, um Benutzern zu helfen, zu verstehen, warum ihre Nachricht gekennzeichnet wurde und wie sie sie angemessen umformulieren können. In den obigen Codebeispielen wird dies durch das Tag explanation in der Claude-Antwort durchgeführt.
Analysieren Sie moderierte Inhalte: Verfolgen Sie die Arten von Inhalten, die von Ihrem Moderationssystem gekennzeichnet werden, um Trends und potenzielle Verbesserungsbereiche zu identifizieren.
Kontinuierlich bewerten und verbessern: Bewerten Sie regelmäßig die Leistung Ihres Inhaltsmoderierungssystems anhand von Metriken wie Präzisions- und Recall-Verfolgung. Verwenden Sie diese Daten, um Ihre Moderationsaufforderungen, Schlüsselwörter und Bewertungskriterien iterativ zu verfeinern.
In komplexen Szenarien kann es hilfreich sein, zusätzliche Strategien in Betracht zu ziehen, um die Leistung über standardmäßige Prompt-Engineering-Techniken hinaus zu verbessern. Hier sind einige fortgeschrittene Strategien:
Zusätzlich zur Auflistung der unsicheren Kategorien in der Eingabeaufforderung können weitere Verbesserungen durch die Bereitstellung von Definitionen und Phrasen im Zusammenhang mit jeder Kategorie vorgenommen werden.
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.")Die Funktion moderate_message_with_definitions erweitert die frühere Funktion moderate_message, indem sie jede unsichere Kategorie mit einer detaillierten Definition paaren kann. Dies geschieht im Code durch Ersetzen der Liste unsafe_categories aus der ursprünglichen Funktion durch ein Wörterbuch unsafe_category_definitions. Dieses Wörterbuch ordnet jede unsichere Kategorie ihrer entsprechenden Definition zu. Sowohl die Kategorienamen als auch ihre Definitionen sind in der Eingabeaufforderung enthalten.
Bemerkenswert ist, dass die Definition für die Kategorie Specialized Advice nun die Arten von Finanzberatung angibt, die verboten sein sollten. Infolgedessen löst der Kommentar It's a great time to invest in gold!, der zuvor die Bewertung moderate_message bestanden hat, nun eine Verletzung aus.
Um Kosten in Situationen zu senken, in denen Echtzeit-Moderation nicht erforderlich ist, erwägen Sie die Moderation von Nachrichten in Batches. Fügen Sie mehrere Nachrichten im Kontext der Eingabeaufforderung ein und bitten Sie Claude, zu bewerten, welche Nachrichten moderiert werden sollten.
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']}
""")In diesem Beispiel verarbeitet die Funktion batch_moderate_messages die Moderation eines gesamten Batches von Nachrichten mit einem einzigen Claude-API-Aufruf.
Innerhalb der Funktion wird eine Eingabeaufforderung erstellt, die die Liste der zu bewertenden Nachrichten, die definierten unsicheren Inhaltskategorien und ihre Beschreibungen enthält. Die Eingabeaufforderung weist Claude an, ein JSON-Objekt zurückzugeben, das alle Nachrichten mit Verletzungen auflistet. Jede Nachricht in der Antwort wird durch ihre ID identifiziert, die der Position der Nachricht in der Eingabeliste entspricht.
Beachten Sie, dass das Finden der optimalen Batch-Größe für Ihre spezifischen Anforderungen möglicherweise einige Experimente erfordert. Während größere Batch-Größen die Kosten senken können, können sie auch zu einem leichten Qualitätsverlust führen. Darüber hinaus müssen Sie möglicherweise den Parameter max_tokens im Claude-API-Aufruf erhöhen, um längere Antworten zu berücksichtigen. Weitere Informationen zur maximalen Anzahl von Token, die Ihr ausgewähltes Modell ausgeben kann, finden Sie auf der Modellvergleichsseite.
Sehen Sie sich ein vollständig implementiertes codebasiertes Beispiel an, wie Claude für die Inhaltsmoderation verwendet wird.
Erkunden Sie unseren Guardrails-Leitfaden für Techniken zur Moderation von Interaktionen mit Claude.
Was this page helpful?