Посетите руководство по модерации контента в cookbook, чтобы увидеть пример реализации модерации контента с использованием Claude.
Вот несколько ключевых признаков того, что вам следует использовать «large language model» (большую языковую модель), или LLM, такую как Claude, вместо традиционного подхода на основе машинного обучения или правил для модерации контента:
Перед разработкой решения для модерации контента сначала создайте примеры контента, который должен быть помечен, и контента, который не должен быть помечен. Убедитесь, что вы включили пограничные случаи и сложные сценарии, с которыми системе модерации контента может быть трудно эффективно справиться. После этого просмотрите свои примеры, чтобы создать чётко определённый список категорий модерации. Например, примеры, созданные платформой социальных сетей, могут включать следующее:
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!",
]
# Примеры пользовательских комментариев для тестирования модерации контента
user_comments = allowed_user_comments + disallowed_user_comments
# Список категорий, считающихся небезопасными при модерации контента
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 4.5, является отличным выбором благодаря своей экономичности. Ниже приведена оценка стоимости модерации текста для платформы социальных сетей, которая получает один миллиард публикаций в месяц:
Объём контента
Оценочное количество токенов
Оценочная стоимость Claude Haiku 4.5
explanation из ответа.Чтобы использовать Claude для модерации контента, Claude должен понимать требования к модерации вашего приложения. Начнём с написания подсказки, которая позволит вам определить ваши потребности в модерации:
import json
# Инициализируем клиент Anthropic
client = anthropic.Anthropic()
def moderate_message(message, unsafe_categories):
# Преобразуем список небезопасных категорий в строку, каждая категория на новой строке
unsafe_category_str = "\n".join(unsafe_categories)
# Формируем подсказку для Claude, включая сообщение и небезопасные категории
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.]
}}"""
# Отправляем запрос Claude для модерации контента
response = client.messages.create(
model="claude-haiku-4-5-20251001", # Using the Haiku model for lower costs
max_tokens=200,
temperature=0, # Use 0 temperature for increased consistency
messages=[{"role": "user", "content": assessment_prompt}],
)
# Разбираем JSON-ответ от Claude
assessment = json.loads(response.content[0].text)
# Извлекаем статус нарушения из оценки
contains_violation = assessment["violation"]
# Если есть нарушение, получаем категории и объяснение; иначе используем пустые значения по умолчанию
violated_categories = assessment.get("categories", []) if contains_violation else []
explanation = assessment.get("explanation") if contains_violation else None
return contains_violation, violated_categories, explanation
# Обрабатываем каждый комментарий и выводим результаты
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 также возвращает список нарушенных категорий, а также объяснение того, почему сообщение является небезопасным.
Модерация контента — это задача классификации. Таким образом, вы можете использовать те же методы, описанные в руководстве по классификации в cookbook, чтобы определить точность вашей системы модерации контента.
Ещё одно соображение: вместо того чтобы рассматривать модерацию контента как задачу бинарной классификации, вы можете создать несколько категорий для представления различных уровней риска. Создание нескольких уровней риска позволяет регулировать строгость вашей модерации. Например, вы можете автоматически блокировать пользовательские запросы, которые считаются высокорисковыми, в то время как пользователи с большим количеством запросов среднего риска помечаются для проверки человеком.
import json
# Инициализируем клиент Anthropic
client = anthropic.Anthropic()
def assess_risk_level(message, unsafe_categories):
# Преобразуем список небезопасных категорий в строку, каждая категория на новой строке
unsafe_category_str = "\n".join(unsafe_categories)
# Формируем подсказку для Claude, включая сообщение, небезопасные категории и определения уровней риска
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>
}}"""
# Отправляем запрос Claude для оценки риска
response = client.messages.create(
model="claude-haiku-4-5-20251001", # Using the Haiku model for lower costs
max_tokens=200,
temperature=0, # Use 0 temperature for increased consistency
messages=[{"role": "user", "content": assessment_prompt}],
)
# Разбираем JSON-ответ от Claude
assessment = json.loads(response.content[0].text)
# Извлекаем уровень риска, нарушенные категории и объяснение из оценки
risk_level = assessment["risk_level"]
violated_categories = assessment["categories"]
explanation = assessment.get("explanation")
return risk_level, violated_categories, explanation
# Обрабатываем каждый комментарий и выводим результаты
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 json
# Инициализация клиента Anthropic
client = anthropic.Anthropic()
# Словарь категорий, считающихся небезопасными для модерации контента, с их определениями
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):
# Форматирование строки небезопасных категорий: каждая категория и её определение на новой строке
unsafe_category_str = "\n".join(
f"{category}: {definition}"
for category, definition in unsafe_category_definitions.items()
)
# Формирование подсказки для Claude, включающей сообщение и небезопасные категории
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.]
}}"""
# Отправка запроса к Claude для модерации контента
response = client.messages.create(
model="claude-haiku-4-5-20251001", # Using the Haiku model for lower costs
max_tokens=200,
temperature=0, # Use 0 temperature for increased consistency
messages=[{"role": "user", "content": assessment_prompt}],
)
# Разбор JSON-ответа от Claude
assessment = json.loads(response.content[0].text)
# Извлечение статуса нарушения из оценки
contains_violation = assessment["violation"]
# Если есть нарушение, получить категории и объяснение; иначе использовать пустые значения по умолчанию
violated_categories = assessment.get("categories", []) if contains_violation else []
explanation = assessment.get("explanation") if contains_violation else None
return contains_violation, violated_categories, explanation
# Обработка каждого комментария и вывод результатов
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 is a great time to invest in gold!, который ранее проходил проверку moderate_message, теперь вызывает нарушение.
Чтобы снизить затраты в ситуациях, когда модерация в реальном времени не требуется, рассмотрите возможность модерации сообщений пакетами. Включите несколько сообщений в контекст подсказки и попросите Claude оценить, какие сообщения следует модерировать.
import json
# Инициализируем клиент Anthropic
client = anthropic.Anthropic()
def batch_moderate_messages(messages, unsafe_categories):
# Преобразуем список небезопасных категорий в строку, каждая категория на новой строке
unsafe_category_str = "\n".join(unsafe_categories)
# Форматируем строку сообщений: каждое сообщение оборачиваем в XML-подобные теги и присваиваем ему ID
messages_str = "\n".join(
[f"<message id={idx}>{msg}</message>" for idx, msg in enumerate(messages)]
)
# Формируем подсказку для Claude, включая сообщения и небезопасные категории
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."""
# Отправляем запрос 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
temperature=0, # Use 0 temperature for increased consistency
messages=[{"role": "user", "content": assessment_prompt}],
)
# Разбираем JSON-ответ от Claude
assessment = json.loads(response.content[0].text)
return assessment
# Обрабатываем пакет комментариев и получаем ответ
response_obj = batch_moderate_messages(user_comments, unsafe_categories)
# Выводим результаты для каждого обнаруженного нарушения
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?
Оценочная стоимость Claude Opus 4.8