azure-ai-contentsafety-py – Writing & Content skill for AI agents
Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.
Install the azure-ai-contentsafety-py skill with one command
Pick the tool you use, copy the command and paste it in your terminal. The skill lands in that tool's skills folder and is ready in your next session.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/azure-ai-contentsafety-py-1cf17.tgz | tar xz -C ~/.claude/skills
Call it in Claude Code: /azure-ai-contentsafety-py – then describe the task you want done.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/azure-ai-contentsafety-py-1cf17.tgz | tar xz -C ~/.codex/skills
Call it in Codex: $azure-ai-contentsafety-py – then describe the task you want done.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/azure-ai-contentsafety-py-1cf17.tgz | tar xz -C ~/.hermes/skills
Call it in Hermes Agent: /azure-ai-contentsafety-py – then describe the task you want done.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/azure-ai-contentsafety-py-1cf17.tgz | tar xz -C ~/.deepcode/skills
Call it in DeepSeek: /azure-ai-contentsafety-py – then describe the task you want done.
SKILL.md content
Azure AI Content Safety SDK for Python
Detect harmful user-generated and AI-generated content in applications.
Installation
pip install azure-ai-contentsafetyEnvironment Variables
CONTENT_SAFETY_ENDPOINT=https://<resource>.cognitiveservices.azure.com
CONTENT_SAFETY_KEY=<your-api-key>Authentication
API Key
from azure.ai.contentsafety import ContentSafetyClient
from azure.core.credentials import AzureKeyCredential
import os
client = ContentSafetyClient(
endpoint=os.environ["CONTENT_SAFETY_ENDPOINT"],
credential=AzureKeyCredential(os.environ["CONTENT_SAFETY_KEY"])
)Entra ID
from azure.ai.contentsafety import ContentSafetyClient
from azure.identity import DefaultAzureCredential
client = ContentSafetyClient(
endpoint=os.environ["CONTENT_SAFETY_ENDPOINT"],
credential=DefaultAzureCredential()
)Use only an approved endpoint/account, content and cost/retention policy; uploads disclose text/images to a hosted classifier. Bound input bytes and use reviewed SDK models/imports (azure-identity is additionally needed for Entra ID). Classification can miss harm or flag benign context: severity zero is not a universal safety guarantee. Validate thresholds on representative languages/domains, define outage/ambiguous-result handling and human appeal/review. Blocklist mutations can affect real moderation and require explicit scope; redact content in logs and close clients/credentials.
Analyze Text
from azure.ai.contentsafety import ContentSafetyClient
from azure.ai.contentsafety.models import AnalyzeTextOptions, TextCategory
from azure.core.credentials import AzureKeyCredential
client = ContentSafetyClient(endpoint, AzureKeyCredential(key))
request = AnalyzeTextOptions(text="Your text content to analyze")
response = client.analyze_text(request)
# Check each category
for category in [TextCategory.HATE, TextCategory.SELF_HARM,
TextCategory.SEXUAL, TextCategory.VIOLENCE]:
result = next((r for r in response.categories_analysis
if r.category == category), None)
if result:
print(f"{category}: severity {result.severity}")Analyze Image
from azure.ai.contentsafety import ContentSafetyClient
from azure.ai.contentsafety.models import AnalyzeImageOptions, ImageData
from azure.core.credentials import AzureKeyCredential
import base64
client = ContentSafetyClient(endpoint, AzureKeyCredential(key))
# From file
with open("image.jpg", "rb") as f:
image_data = f.read() # SDK serializes bytes to the REST base64 representation
request = AnalyzeImageOptions(
image=ImageData(content=image_data)
)
response = client.analyze_image(request)
for result in response.categories_analysis:
print(f"{result.category}: severity {result.severity}")Image from URL
from azure.ai.contentsafety.models import AnalyzeImageOptions, ImageData
request = AnalyzeImageOptions(
image=ImageData(blob_url="https://example.com/image.jpg")
)
response = client.analyze_image(request)Text Blocklist Management
Create Blocklist
from azure.ai.contentsafety import BlocklistClient
from azure.ai.contentsafety.models import TextBlocklist
from azure.core.credentials import AzureKeyCredential
blocklist_client = BlocklistClient(endpoint, AzureKeyCredential(key))
blocklist = TextBlocklist(
blocklist_name="my-blocklist",
description="Custom terms to block"
)
result = blocklist_client.create_or_update_text_blocklist(
blocklist_name="my-blocklist",
options=blocklist
)Add Block Items
from azure.ai.contentsafety.models import AddOrUpdateTextBlocklistItemsOptions, TextBlocklistItem
items = AddOrUpdateTextBlocklistItemsOptions(
blocklist_items=[
TextBlocklistItem(text="blocked-term-1"),
TextBlocklistItem(text="blocked-term-2")
]
)
result = blocklist_client.add_or_update_blocklist_items(
blocklist_name="my-blocklist",
options=items
)Analyze with Blocklist
from azure.ai.contentsafety.models import AnalyzeTextOptions
request = AnalyzeTextOptions(
text="Text containing blocked-term-1",
blocklist_names=["my-blocklist"],
halt_on_blocklist_hit=True
)
response = client.analyze_text(request)
if response.blocklists_match:
for match in response.blocklists_match:
print(f"Blocked: {match.blocklist_item_text}")Severity Levels
Text analysis returns 4 severity levels (0, 2, 4, 6) by default. For 8 levels (0-7):
from azure.ai.contentsafety.models import AnalyzeTextOptions, AnalyzeTextOutputType
request = AnalyzeTextOptions(
text="Your text",
output_type=AnalyzeTextOutputType.EIGHT_SEVERITY_LEVELS
)Harm Categories
| Category | Description |
|----------|-------------|
| Hate | Attacks based on identity (race, religion, gender, etc.) |
| Sexual | Sexual content, relationships, anatomy |
| Violence | Physical harm, weapons, injury |
| SelfHarm | Self-injury, suicide, eating disorders |
Severity Scale
| Level | Text Range | Image Range | Meaning |
|-------|------------|-------------|---------|
| 0 | Not detected | Not detected | Model did not detect harm in supported categories |
| 2 | Low | Low | Mild references |
| 4 | Medium | Medium | Moderate content |
| 6 | High | High | Severe content |
Client Types
| Client | Purpose |
|--------|---------|
| ContentSafetyClient | Analyze text and images |
| BlocklistClient | Manage custom blocklists |
Best Practices
1. Use blocklists for domain-specific terms
2. Set severity thresholds appropriate for your use case
3. Handle multiple categories — content can be harmful in multiple ways
4. Use halt_on_blocklist_hit for immediate rejection
5. Log analysis results for audit and improvement
6. Consider 8-severity mode for finer-grained control
7. Pre-moderate AI outputs before showing to users
When to Use
This skill is applicable to execute the workflow or actions described in the overview.
Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
Related skills
- azure-ai-contentsafety-ts – Analyze text and images for harmful content with customizable blocklists.
- azure-ai-contentunderstanding-py – Azure AI Content Understanding SDK for Python. Use for multimodal content extraction…
- azure-ai-translation-text-py – Azure AI Text Translation SDK for real-time text translation, transliteration, language…
- azure-ai-translation-ts – Text and document translation with REST-style clients.
- content-creator – Deprecated redirect skill that routes legacy 'content creator' requests to the correct…
- content-humanizer – Makes AI-generated content sound genuinely human — not just cleaned up, but alive. Use…
- content-production – Full content production pipeline — takes a topic from blank page to published-ready…
- content-strategy – When the user wants to plan a content strategy, decide what content to create, or figure…