Посетите наш справочник по модерации контента, чтобы увидеть пример реализации модерации контента с использованием Claude.
Вот некоторые ключевые показатели того, что вам следует использовать LLM, такую как Claude, вместо традиционного подхода на основе ML или правил для модерации контента:
Перед разработкой решения для модерации контента сначала создайте примеры контента, который должен быть помечен, и контента, который не должен быть помечен. Убедитесь, что вы включили граничные случаи и сложные сценарии, которые могут быть сложны для системы модерации контента. После этого просмотрите свои примеры, чтобы создать четко определенный список категорий модерации. Например, примеры, созданные платформой социальных сетей, могут включать следующее:
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'
]Эффективная модерация этих примеров требует тонкого понимания языка. В комментарии This movie was great, I really enjoyed it. The main actor really killed it! система модерации контента должна признать, что "killed it" — это метафора, а не указание на фактическое насилие. И наоборот, несмотря на отсутствие явных упоминаний насилия, комментарий Delete this post now or you better hide. I am coming after you and your family. должен быть помечен системой модерации контента.
Список unsafe_categories можно настроить в соответствии с вашими конкретными потребностями. Например, если вы хотите предотвратить создание контента несовершеннолетними на вашем веб-сайте, вы можете добавить "Underage Posting" в список.
При выборе модели важно учитывать размер ваших данных. Если затраты вызывают озабоченность, меньшая модель, такая как Claude Haiku 3, — отличный выбор благодаря своей экономичности. Ниже приведена оценка стоимости модерации текста для платформы социальных сетей, которая получает один миллиард постов в месяц:
Размер контента
Предполагаемые токены
Предполагаемая стоимость Claude Haiku 3
Предполагаемая стоимость Claude Opus 4.6
explanation из ответа.Чтобы использовать Claude для модерации контента, Claude должен понимать требования модерации вашего приложения. Давайте начнем с написания приглашения, которое позволяет вам определить ваши потребности в модерации:
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.")В этом примере функция moderate_message содержит приглашение оценки, которое включает категории небезопасного контента и сообщение, которое мы хотим оценить. Приглашение просит Claude оценить, должно ли сообщение быть модерировано, на основе определенных нами категорий небезопасного контента.
Оценка модели затем анализируется, чтобы определить, есть ли нарушение. Если есть нарушение, Claude также возвращает список нарушенных категорий, а также объяснение того, почему сообщение небезопасно.
Модерация контента — это проблема классификации. Таким образом, вы можете использовать те же методы, описанные в нашем справочнике по классификации, чтобы определить точность вашей системы модерации контента.
Одно дополнительное соображение заключается в том, что вместо того, чтобы рассматривать модерацию контента как проблему бинарной классификации, вы можете создать несколько категорий для представления различных уровней риска. Создание нескольких уровней риска позволяет вам регулировать агрессивность вашей модерации. Например, вы можете автоматически блокировать запросы пользователей, которые считаются высокорисковыми, в то время как пользователи со многими запросами среднего риска помечаются для проверки человеком.
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}")Этот код реализует функцию assess_risk_level, которая использует Claude для оценки уровня риска сообщения. Функция принимает сообщение и список категорий небезопасного контента в качестве входных данных.
В функции генерируется приглашение для Claude, включающее сообщение для оценки, категории небезопасного контента и конкретные инструкции для оценки уровня риска. Приглашение инструктирует Claude ответить объектом JSON, который включает уровень риска, нарушенные категории и необязательное объяснение.
Этот подход позволяет гибкую модерацию контента путем назначения уровней риска. Он может быть легко интегрирован в более крупную систему для автоматизации фильтрации контента или флагирования комментариев для проверки человеком на основе их оцененного уровня риска. Например, при выполнении этого кода комментарий 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. классифицируется как среднего риска.
Как только вы уверены в качестве вашего решения, пришло время развернуть его в производство. Вот некоторые лучшие практики, которые следует соблюдать при использовании модерации контента в производстве:
Предоставьте четкую обратную связь пользователям: Когда пользовательский ввод блокируется или ответ помечается из-за модерации контента, предоставьте информативную и конструктивную обратную связь, чтобы помочь пользователям понять, почему их сообщение было помечено и как они могут переформулировать его надлежащим образом. В примерах кодирования выше это делается через тег explanation в ответе Claude.
Анализируйте модерируемый контент: Отслеживайте типы контента, помечаемые вашей системой модерации, чтобы выявить тенденции и потенциальные области для улучшения.
Постоянно оценивайте и улучшайте: Регулярно оценивайте производительность вашей системы модерации контента, используя такие метрики, как отслеживание точности и полноты. Используйте эти данные для итеративного уточнения ваших приглашений модерации, ключевых слов и критериев оценки.
В сложных сценариях может быть полезно рассмотреть дополнительные стратегии для улучшения производительности помимо стандартных методов инженерии приглашений. Вот некоторые продвинутые стратегии:
В дополнение к перечислению категорий небезопасного контента в приглашении, дальнейшие улучшения можно сделать, предоставив определения и фразы, связанные с каждой категорией.
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.")Функция moderate_message_with_definitions расширяет более раннюю функцию moderate_message, позволяя каждой категории небезопасного контента быть связанной с подробным определением. Это происходит в коде путем замены списка unsafe_categories из исходной функции на словарь unsafe_category_definitions. Этот словарь сопоставляет каждую категорию небезопасного контента с соответствующим определением. Как имена категорий, так и их определения включены в приглашение.
Примечательно, что определение категории Specialized Advice теперь указывает типы финансовых советов, которые должны быть запрещены. В результате комментарий It's a great time to invest in gold!, который ранее прошел оценку moderate_message, теперь вызывает нарушение.
Чтобы снизить затраты в ситуациях, когда модерация в реальном времени не требуется, рассмотрите модерацию сообщений партиями. Включите несколько сообщений в контекст приглашения и попросите Claude оценить, какие сообщения должны быть модерированы.
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']}
""")В этом примере функция batch_moderate_messages обрабатывает модерацию целой партии сообщений с одним вызовом API Claude.
В функции создается приглашение, которое включает список сообщений для оценки, определенные категории небезопасного контента и их описания. Приглашение направляет Claude вернуть объект JSON, перечисляющий все сообщения, содержащие нарушения. Каждое сообщение в ответе идентифицируется по его id, который соответствует позиции сообщения в списке входных данных.
Имейте в виду, что поиск оптимального размера партии для ваших конкретных потребностей может потребовать некоторых экспериментов. Хотя большие размеры партий могут снизить затраты, они также могут привести к небольшому снижению качества. Кроме того, вам может потребоваться увеличить параметр max_tokens в вызове API Claude, чтобы вместить более длинные ответы. Для получения подробной информации о максимальном количестве токенов, которые может выводить выбранная вами модель, обратитесь к странице сравнения моделей.
Просмотрите полностью реализованный пример на основе кода того, как использовать Claude для модерации контента.
Изучите наше руководство по защитным механизмам для методов модерации взаимодействий с Claude.
Was this page helpful?