Content Moderation — Xây dựng bộ lọc nội dung với Claude
Điểm nổi bật
Nhấn để đến mục tương ứng
- 1 Công cụ AI sẽ thay đổi cách bạn làm việc: Thay vì hardcode rules, ta mô tả categories bằng ngôn ngữ tự nhiên trong system prompt. Điểm mấu chốt là biết cách đặt prompt đúng để nhận kết quả có thể sử dụng ngay.
- 2 Góc nhìn thực tế: MODERATIONSYSTEMPROMPT = """Bạn là hệ thống kiểm duyệt nội dung cho diễn đàn công nghệ Việt Nam. Điều quan trọng là hiểu rõ khi nào nên và không nên áp dụng phương pháp này.
- 3 Không thể bỏ qua: import anthropic client = anthropic.Anthropic def moderatecontentcontent: str -> dict: """Kiểm duyệt một đoạn nội. Đây là kiến thức nền tảng mà mọi người làm việc với AI đều cần hiểu rõ.
- 4 Để đạt hiệu quả tối đa: from dataclasses import dataclass from enum import Enum from datetime import datetime class ModerationActionEnum: ALLOW. Nhiều người bỏ qua bước này và mất thời gian gấp đôi để đạt cùng kết quả.
- 5 Không có giải pháp hoàn hảo: Điểm mạnh nhất của approach này: chỉ cần thay system prompt để adapt cho platform khác: FORUMRULES = { "techforum": """. Bài viết phân tích rõ trade-off giúp bạn đưa ra quyết định phù hợp với tình huống thực tế.
Mọi nền tảng có nội dung do người dùng tạo ra — forum, mạng xã hội, comment section — đều cần content moderation. Làm thủ công tốn người, làm bằng keyword filter thì sai nhiều. Claude có thể hiểu ngữ cảnh và phân loại chính xác hơn cả hai phương pháp đó.
Bài này hướng dẫn xây dựng content moderation system từ đầu — linh hoạt, có thể tùy chỉnh cho từng platform.
Thiết kế hệ thống
Thay vì hardcode rules, ta mô tả categories bằng ngôn ngữ tự nhiên trong system prompt. Claude hiểu ngữ nghĩa, không chỉ keyword.
Hai loại quyết định cơ bản:
- ALLOW: Nội dung được phép đăng
- BLOCK: Nội dung vi phạm, cần xóa hoặc review
Bước 1: System Prompt định nghĩa luật
MODERATION_SYSTEM_PROMPT = """Bạn là hệ thống kiểm duyệt nội dung cho diễn đàn công nghệ Việt Nam.
DANH MỤC ĐƯỢC PHÉP (ALLOW):
- Thảo luận kỹ thuật, lập trình, công nghệ
- Chia sẻ kinh nghiệm và kiến thức
- Câu hỏi và trả lời liên quan đến tech
- Tin tức công nghệ, sản phẩm mới
- Feedback và góp ý mang tính xây dựng
- Nội dung off-topic nhẹ nếu không vi phạm
DANH MỤC BỊ CẤM (BLOCK):
- Nội dung thù ghét, phân biệt chủng tộc, giới tính, tôn giáo
- Spam, quảng cáo không được phép, link lừa đảo
- Thông tin cá nhân của người khác (số điện thoại, địa chỉ, CMND)
- Nội dung khiêu dâm hoặc bạo lực
- Hướng dẫn hack/crack phần mềm bất hợp pháp
- Misinformation rõ ràng về sức khỏe hoặc an toàn
Nhiệm vụ: Đánh giá nội dung và trả về quyết định ALLOW hoặc BLOCK."""
Bước 2: Classifier cơ bản
import anthropic
client = anthropic.Anthropic()
def moderate_content(content: str) -> dict:
"""Kiểm duyệt một đoạn nội dung."""
response = client.messages.create(
model="claude-haiku-4-5",
max_tokens=10,
system=MODERATION_SYSTEM_PROMPT,
messages=[
{
"role": "user",
"content": f"Nội dung cần kiểm duyệt:
{content}"
},
# Prefill để force format output
{
"role": "assistant",
"content": "Quyết định: "
}
],
stop_sequences=["
"],
temperature=0.0,
)
decision = response.content[0].text.strip()
return {
"content": content[:100] + "..." if len(content) > 100 else content,
"decision": decision,
"allowed": decision == "ALLOW",
}
# Test
examples = [
"Làm sao cài đặt Python 3.11 trên Ubuntu 22.04?",
"Bán tài khoản Netflix giá rẻ, inbox mình nhé!",
"Mình vừa đọc xong Clean Code, cuốn sách này hay lắm mọi người ơi.",
"Đồ mày ngu, không biết gì hết còn đòi code.",
]
for text in examples:
result = moderate_content(text)
status = "✓" if result["allowed"] else "✗"
print(f"[{result['decision']}] {status} {result['content']}")
Bước 3: Chain-of-Thought cho độ chính xác cao hơn
Với nội dung mơ hồ, simple classifier dễ sai. Chain-of-Thought buộc Claude phân tích trước khi quyết định:
COT_MODERATION_PROMPT = """Bạn là hệ thống kiểm duyệt nội dung cho diễn đàn công nghệ.
[Các rules giống trên...]
Quy trình đánh giá:
1. Phân tích nội dung: nó đang nói về điều gì?
2. Kiểm tra từng rule: có vi phạm không?
3. Xem xét ngữ cảnh: intent của người viết là gì?
4. Kết luận: ALLOW hoặc BLOCK
Format trả lời:
Phân tích ngắn gọn
ALLOW hoặc BLOCK
Lý do chính """
def moderate_with_cot(content: str) -> dict:
response = client.messages.create(
model="claude-haiku-4-5",
max_tokens=300,
system=COT_MODERATION_PROMPT,
messages=[{"role": "user", "content": content}],
temperature=0.0,
)
text = response.content[0].text
# Parse XML tags
import re
def extract_tag(tag, text):
match = re.search(f"<{tag}>(.*?){tag}>", text, re.DOTALL)
return match.group(1).strip() if match else ""
decision = extract_tag("decision", text)
analysis = extract_tag("analysis", text)
reason = extract_tag("reason", text)
return {
"content": content,
"decision": decision,
"allowed": decision == "ALLOW",
"analysis": analysis,
"reason": reason,
}
# Test với nội dung mơ hồ
ambiguous = "Share tool crack Adobe Photoshop nhé mọi người, mình cần gấp."
result = moderate_with_cot(ambiguous)
print(f"Decision: {result['decision']}")
print(f"Analysis: {result['analysis']}")
print(f"Reason: {result['reason']}")
Bước 4: Xây dựng pipeline hoàn chỉnh
from dataclasses import dataclass
from enum import Enum
from datetime import datetime
class ModerationAction(Enum):
ALLOW = "allow"
BLOCK = "block"
REVIEW = "review" # Cần human review
@dataclass
class ModerationResult:
content_id: str
content: str
action: ModerationAction
reason: str
confidence: str # HIGH, MEDIUM, LOW
timestamp: str
def smart_moderation(content_id: str, content: str) -> ModerationResult:
"""
Pipeline 2 bước:
1. Quick check với simple classifier (Haiku, rẻ)
2. Nếu uncertain, dùng CoT classifier (chính xác hơn)
"""
# Bước 1: Quick classification
quick = moderate_content(content)
# Bước 2: Nếu content dài hoặc phức tạp, dùng CoT
is_complex = len(content) > 200 or any(
word in content.lower()
for word in ["hack", "crack", "lừa", "spam"]
)
if is_complex:
detailed = moderate_with_cot(content)
action = ModerationAction.ALLOW if detailed["allowed"] else ModerationAction.BLOCK
reason = detailed["reason"]
confidence = "HIGH"
else:
action = ModerationAction.ALLOW if quick["allowed"] else ModerationAction.BLOCK
reason = "Quick classification"
confidence = "MEDIUM"
return ModerationResult(
content_id=content_id,
content=content[:200],
action=action,
reason=reason,
confidence=confidence,
timestamp=datetime.now().isoformat(),
)
# Test pipeline
test_posts = [
("post_001", "Ai biết cách optimize MySQL query không? Database mình đang chậm quá."),
("post_002", "Bán nick Facebook 5000 bạn bè, đủ loại, giá rẻ. LH Zalo 090xxx"),
("post_003", "Mình đang học React, có ai recommend khóa học tốt không?"),
("post_004", "Chia sẻ tool hack wifi, dùng được ở khu vực đông người."),
]
for content_id, content in test_posts:
result = smart_moderation(content_id, content)
emoji = "✓" if result.action == ModerationAction.ALLOW else "✗"
print(f"[{result.action.value.upper()}] {emoji} [{result.confidence}] {content[:60]}...")
print(f" Reason: {result.reason}")
print()
Tùy chỉnh cho các context khác nhau
Điểm mạnh nhất của approach này: chỉ cần thay system prompt để adapt cho platform khác:
FORUM_RULES = {
"tech_forum": """
ALLOW: Thảo luận kỹ thuật, câu hỏi lập trình, chia sẻ project
BLOCK: Spam, quảng cáo, nội dung phi kỹ thuật liên tục
""",
"ecommerce_reviews": """
ALLOW: Review sản phẩm trung thực, so sánh, khuyến nghị
BLOCK: Fake reviews, review trả tiền không tiết lộ, thông tin sai về sản phẩm
""",
"kids_platform": """
ALLOW: Nội dung giáo dục, vui chơi lành mạnh, câu hỏi học tập
BLOCK: Bất kỳ nội dung người lớn, bạo lực, ngôn ngữ thô tục, thông tin liên lạc
""",
}
def get_moderator(forum_type: str):
rules = FORUM_RULES.get(forum_type, FORUM_RULES["tech_forum"])
system_prompt = f"Bạn là content moderator. Rules:
{rules}
Trả về ALLOW hoặc BLOCK."
def moderator(content: str) -> bool:
response = client.messages.create(
model="claude-haiku-4-5",
max_tokens=10,
system=system_prompt,
messages=[{"role": "user", "content": content}],
temperature=0.0,
)
return "ALLOW" in response.content[0].text
return moderator
kids_mod = get_moderator("kids_platform")
print(kids_mod("Bài toán: 5 + 3 = ?")) # True (ALLOW)
print(kids_mod("Cho mình số điện thoại nhé bạn")) # False (BLOCK)
Giám sát và cải thiện liên tục
- Log tất cả decisions: Đặc biệt những case gần ranh giới (borderline)
- Human review sample: Review ngẫu nhiên 5% decisions mỗi ngày để phát hiện false positives/negatives
- Feedback loop: Khi phát hiện sai, thêm vào test cases để cải thiện prompt
- Theo dõi metrics: False positive rate (nội dung tốt bị block) quan trọng hơn false negative rate
Content moderation với Claude đặc biệt hiệu quả vì nó hiểu ngữ cảnh và ý định, không chỉ từ khóa. "Hack" trong "hackathon" khác hoàn toàn "hack" trong "share tool hack wifi".
Kết hợp với Building Evals để đo lường và cải thiện hệ thống liên tục.
Bài viết liên quan
Bai viet co huu ich khong?
Bản quyền thuộc về tác giả. Vui lòng dẫn nguồn khi chia sẻ.




