建立一个带有 Claude 的审核过滤器
本指南将向您展示如何使用 Claude 为用户生成的内容构建一个内容审核过滤器。关键在于直接在提示中定义审核规则和类别,从而可以轻松进行自定义和实验。
基本方法
基本方法是向 Claude 提供一个描述您想要过滤的类别的提示(例如,“允许”和“阻止”),以及有关哪些类型的内容应归入每个类别的详细说明或示例。然后,您将要分类的用户生成文本作为提示的一部分插入,并要求 Claude 根据提供的指南对其进行分类。
这是一个示例提示结构:
您是一位内容审核专家,负责根据以下指南对用户生成的内容进行分类:
阻止类别:
- [应阻止的内容的描述或示例]
允许类别:
- [允许的内容的描述或示例]
这是要分类的用户生成文本:
<user_text>{{USER_TEXT}}</user_text>
根据以上指南,将此文本分类为允许或阻止。不要返回其他任何内容。
要使用此方法,您需要将 {{USER_TEXT}}
替换为要分类的实际用户生成文本,然后使用 Anthropic API 将提示发送给 Claude。Claude 的响应应为“允许”或“阻止”,指示应如何根据您提供的指南处理该文本。
示例用法
以下是一些演示如何使用此方法的 Python 代码示例:
%pip install anthropic
from anthropic import Anthropic
client = Anthropic()
MODEL_NAME = "claude-3-haiku-20240307"
def moderate_text(user_text, guidelines):
prompt_template = """
您是一位内容审核专家,负责根据以下指南对用户生成的内容进行分类:
{guidelines}
这是要分类的用户生成文本:
<user_text>{user_text}</user_text>
根据以上指南,将此文本分类为允许或阻止。不要返回其他任何内容。
"""
# 使用用户文本格式化提示
prompt = prompt_template.format(user_text=user_text, guidelines=guidelines)
# 将提示发送给 Claude 并获取响应
response = client.messages.create(
model=MODEL_NAME,
max_tokens=10,
messages=[{"role": "user", "content": prompt}]
).content[0].text
return response
以下是如何使用此函数审核一系列用户评论的示例:
example_guidelines = '''阻止类别:
- 宣传暴力、非法活动或仇恨言论
- 露骨的性内容
- 有害的错误信息或阴谋论
允许类别:
- 只要不明确禁止,大多数其他内容都允许
'''
user_comments = [
"这部电影很棒,我真的很喜欢。主角的表现非常出色!",
"立即删除此帖子,否则你最好躲起来。我要去找你和你的家人。",
"远离 5G 手机!!他们正在使用 5G 控制你。",
"感谢您提供的信息!",
]
for comment in user_comments:
classification = moderate_text(comment, example_guidelines)
print(f"评论:{comment}\n分类:{classification}\n")
评论:这部电影很棒,我真的很喜欢。主角的表现非常出色!
分类:允许
评论:立即删除此帖子,否则你最好躲起来。我要去找你和你的家人。
分类:阻止
评论:远离 5G 手机!!他们正在使用 5G 控制你。
分类:阻止
评论:感谢您提供的信息!
分类:允许
自定义
此方法的一个关键优势在于,您可以通过修改“阻止”和“允许”类别中提供的描述或示例来轻松自定义审核规则。这使您可以根据自己的特定需求或偏好来微调过滤。
例如,如果您想让 Claude 审核过山车爱好者论坛并确保帖子保持主题,您可以相应地更新“允许”和“阻止”类别描述:
rollercoaster_guidelines = '''阻止类别:
- 与过山车、主题公园或游乐行业无关的内容
- 露骨的暴力、仇恨言论或非法活动
- 垃圾邮件、广告或自我推销
允许类别:
- 关于过山车设计、乘坐体验和公园评论的讨论
- 分享关于新过山车项目的新闻、传闻或更新
- 关于最佳过山车、公园或游乐设施制造商的尊重辩论
- 一些轻微的脏话或粗俗语言,只要不是针对个人即可
'''
post_titles = [
"钢铁过山车上最疯狂的 10 个翻转动作",
"我对乐园的 RMC 猛禽过山车的评论",
"购买廉价登山装备的最佳地点",
"传闻:六旗乐园是否计划在 2025 年推出 Giga 过山车?",
"我对最新的漫威电影的看法",
]
for title in post_titles:
classification = moderate_text(title, rollercoaster_guidelines)
print(f"标题:{title}\n分类:{classification}\n")
标题:钢铁过山车上最疯狂的 10 个翻转动作
分类:允许
标题:我对乐园的 RMC 猛禽过山车的评论
分类:允许
标题:购买廉价登山装备的最佳地点
分类:阻止
标题:传闻:六旗乐园是否计划在 2025 年推出 Giga 过山车?
分类:允许
标题:我对最新的漫威电影的看法
分类:阻止
使用思维链 (CoT) 提高性能
一种可以增强 Claude 内容审核能力的技巧是“思维链”(CoT) 提示。此方法鼓励 Claude 将其推理过程分解为逐步的思维链,而不仅仅是提供最终输出。
要利用思维链进行审核,您可以修改提示,明确指示 Claude 在 <thinking>
标签内将过程分解为清晰的步骤。这是一个例子:
cot_prompt = '''您是一位内容审核专家,负责根据以下指南对用户生成的内容进行分类:
阻止类别:
- 与过山车、主题公园或游乐行业无关的内容
- 露骨的暴力、仇恨言论或非法活动
- 垃圾邮件、广告或自我推销
允许类别:
- 关于过山车设计、乘坐体验和公园评论的讨论
- 分享关于新过山车项目的新闻、传闻或更新
- 关于最佳过山车、公园或游乐设施制造商的尊重辩论
- 一些轻微的脏话或粗俗语言,只要不是针对个人即可
首先,在 `<thinking>` 标签内,根据以下指南识别帖子的任何潜在令人担忧的方面,并考虑这些方面是否严重到足以阻止该帖子。最后,将此文本分类为允许或阻止,并将其放在 `<output>` 标签内。不要返回其他任何内容。
根据这些说明,这是要分类的帖子:
<user_post>{user_post}</user_post>'''
user_post = "介绍我的新乐队 - Coaster Shredders。在 YouTube 上查看我们!"
response = client.messages.create(
model=MODEL_NAME,
max_tokens=1000,
messages=[{"role": "user", "content": cot_prompt.format(user_post=user_post)}]
).content[0].text
print(response)
<thinking>
该帖子似乎在宣传一个乐队,而不是讨论过山车、主题公园或游乐行业。这属于“垃圾邮件、广告或自我推销”类别,这是阻止该帖子的理由。
</thinking>
<output>阻止</output>
使用示例提高性能
提高性能的另一种技术是通过在提示中添加一些示例,为 Claude 提供一些初始训练数据或“少样本学习”,以更好地理解所需的分类。这对于类别边界可能不完全清楚的细微或模糊情况特别有帮助。以下是如何修改提示模板以包含示例的示例:
examples_prompt = '''您是一位内容审核专家,负责根据以下指南对用户生成的内容进行分类:
阻止类别:
- 与过山车、主题公园或游乐行业无关的内容
- 露骨的暴力、仇恨言论或非法活动
- 垃圾邮件、广告或自我推销
允许类别:
- 关于过山车设计、乘坐体验和公园评论的讨论
- 分享关于新过山车项目的新闻、传闻或更新
- 关于最佳过山车、公园或游乐设施制造商的尊重辩论
- 一些轻微的脏话或粗俗语言,只要不是针对个人即可
这里有一些例子:
<examples>
文本:我正在销售减肥产品,请查看我的链接购买!
类别:阻止
文本:我讨厌我当地的公园,那里的运营和客户服务都很糟糕。我希望那个地方就此烧毁。
类别:阻止
文本:有人骑过乐园的新 RMC 猛禽追踪坠落 2 吗?我听说它很疯狂!
类别:允许
文本:Hercs > B&Ms。这只是事实,无可否认!Arrow > Intamin 也是经典木制过山车。
类别:允许
</examples>
根据这些示例,这是要分类的用户生成文本:
<user_text>{user_text}</user_text>
根据以上指南,将此文本分类为允许或阻止。不要返回其他任何内容。'''
user_post = "为什么回旋过山车不行(别跟我杠)"
response = client.messages.create(
model=MODEL_NAME,
max_tokens=1000,
messages=[{"role": "user", "content": examples_prompt.format(user_text=user_post)}]
).content[0].text
print(response)
允许