К основному содержанию
скилл

azure-ai-contentsafety-py — скилл для Claude Code: анализ и установка

Скилл помогает подключить Azure AI Content Safety SDK для Python и проверять текст и изображения на вредный контент. Подходит для модерации в приложении.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add microsoft/skills --skill azure-ai-contentsafety-py -a claude-code
Открыть на GitHub

Что делает azure-ai-contentsafety-py

Скилл подсказывает, как работать с Azure AI Content Safety SDK для Python. Через ContentSafetyClient можно анализировать текст и изображения, получать категории вредного контента и уровни severity. Для изображений поддерживаются данные из файла в Base64 и URL.

В материалах есть примеры с DefaultAzureCredential, analyze_text и analyze_image, а также настройка BlocklistClient: создание блок-листа, добавление терминов и проверка совпадений. Для анализа текста доступны категории HATE, SELF_HARM, SEXUAL и VIOLENCE; по умолчанию возвращаются уровни 0, 2, 4 и 6.

Перед запуском нужен пакет azure-ai-contentsafety и переменная CONTENT_SAFETY_ENDPOINT. При использовании ключевой аутентификации понадобится CONTENT_SAFETY_KEY; для DefaultAzureCredential в production задают AZURE_TOKEN_CREDENTIALS=prod. Без CONTENT_SAFETY_ENDPOINT клиент не создастся.

Какие задачи решает

  • проверять пользовательский текст на вредный контент
  • анализировать изображения из файла или URL
  • выводить severity по категориям риска
  • создавать блок-лист запрещённых терминов
  • останавливать проверку при совпадении с блок-листом

Примеры запросов агенту

  • Подключи Azure AI Content Safety SDK для Python и добавь проверку текста через ContentSafetyClient.
  • Покажи, как проанализировать image.jpg и вывести категории с их severity.
  • Настрой BlocklistClient для списка my-blocklist и проверь текст с halt_on_blocklist_hit=True.

Как установить azure-ai-contentsafety-py

1Через Skills CLI (Vercel)

npx skills add microsoft/skills --skill azure-ai-contentsafety-py -a claude-code

2Вручную: положить файлы

~/.claude/skills/azure-ai-contentsafety-py/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/azure-ai-contentsafety-py/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о azure-ai-contentsafety-py

Как установить azure-ai-contentsafety-py в Claude Code?

Выполните npx skills add microsoft/skills --skill azure-ai-contentsafety-py -a claude-code, затем используйте файл ~/.claude/skills/azure-ai-contentsafety-py/SKILL.md.

Что делает azure-ai-contentsafety-py?

Скилл помогает использовать Azure AI Content Safety SDK для Python: анализировать текст и изображения, читать уровни severity и управлять текстовыми блок-листами.

Что нужно для аутентификации в Azure AI Content Safety?

Основной вариант — DefaultAzureCredential; для него нужен CONTENT_SAFETY_ENDPOINT, а в production задают AZURE_TOKEN_CREDENTIALS=prod. Для существующего keyed deployment можно использовать CONTENT_SAFETY_KEY и AzureKeyCredential.

Исходный текст

SKILL.md · MIT
---
name: azure-ai-contentsafety-py
description: |
  Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.
  Triggers: "azure-ai-contentsafety", "ContentSafetyClient", "content moderation", "harmful content", "text analysis", "image analysis".
license: MIT
metadata:
  author: Microsoft
  version: "1.0.0"
  package: azure-ai-contentsafety
---

# Azure AI Content Safety SDK for Python

Detect harmful user-generated and AI-generated content in applications.

## Installation

```bash
pip install azure-ai-contentsafety
```

## Environment Variables

```bash
CONTENT_SAFETY_ENDPOINT=https://<resource>.cognitiveservices.azure.com  # Required for all auth methods
AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
CONTENT_SAFETY_KEY=<your-api-key>  # Only required for the legacy API-key auth path below
```

## Authentication & Lifecycle

> **🔑 Two rules apply to every code sample below:**
>
> 1. **Prefer `DefaultAzureCredential`.** It works locally (Azure CLI / VS Code / Developer CLI) and in Azure (managed identity, workload identity) with no code change. Avoid connection strings, account/API keys — they bypass Entra audit and rotation.
>    - Local dev: `DefaultAzureCredential` works as-is.
>    - Production: set `AZURE_TOKEN_CREDENTIALS=prod` (or `AZURE_TOKEN_CREDENTIALS=<specific_credential>`) to constrain the credential chain to production-safe credentials.
> 2. **Wrap every client in a context manager** so HTTP transports, sockets, and token caches are released deterministically:
>    - Sync: `with <Client>(...) as client:`
>    - Async: `async with <Client>(...) as client:` **and** `async with DefaultAzureCredential() as credential:` (from `azure.identity.aio`)
>
> Snippets may abbreviate this setup, but production code should always follow both rules.

```python
import os
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.ai.contentsafety import ContentSafetyClient
from azure.ai.contentsafety.models import AnalyzeTextOptions

# Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
credential = DefaultAzureCredential(require_envvar=True)
# Or use a specific credential directly in production:
# See https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()

with ContentSafetyClient(
    endpoint=os.environ["CONTENT_SAFETY_ENDPOINT"],
    credential=credential,
) as client:
    response = client.analyze_text(AnalyzeTextOptions(text="Hello, world!"))
```

### Legacy: API Key (existing keyed deployments)

New code should use `DefaultAzureCredential` above. Use `AzureKeyCredential` only if you have an existing keyed deployment that hasn't been migrated to Entra ID yet — for example, regulated environments still completing their Entra rollout.

```python
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.contentsafety import ContentSafetyClient
from azure.ai.contentsafety.models import AnalyzeTextOptions

with ContentSafetyClient(
    endpoint=os.environ["CONTENT_SAFETY_ENDPOINT"],
    credential=AzureKeyCredential(os.environ["CONTENT_SAFETY_KEY"]),
) as client:
    response = client.analyze_text(AnalyzeTextOptions(text="Hello, world!"))
```

The `BlocklistClient` accepts the same `AzureKeyCredential` if you also need to manage blocklists with a key.

## Analyze Text

```python
from azure.ai.contentsafety import ContentSafetyClient
from azure.ai.contentsafety.models import AnalyzeTextOptions, TextCategory
from azure.identity import DefaultAzureCredential

with ContentSafetyClient(endpoint, DefaultAzureCredential()) as client:
    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

```python
from azure.ai.contentsafety import ContentSafetyClient
from azure.ai.contentsafety.models import AnalyzeImageOptions, ImageData
from azure.identity import DefaultAzureCredential
import base64

with ContentSafetyClient(endpoint, DefaultAzureCredential()) as client:
    # From file
    with open("image.jpg", "rb") as f:
        image_data = base64.b64encode(f.read()).decode("utf-8")

    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

```python
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

```python
from azure.ai.contentsafety import BlocklistClient
from azure.ai.contentsafety.models import TextBlocklist
from azure.identity import DefaultAzureCredential

with BlocklistClient(endpoint, DefaultAzureCredential()) as blocklist_client:
    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

```python
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

```python
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):

```python
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 | Safe | Safe | No harmful content |
| 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. **Pick sync OR async and stay consistent.** Do not mix `azure.ai.contentsafety` sync clients with `azure.ai.contentsafety.aio` async clients in the same call path. Choose one mode per module.
2. **Always use context managers for clients and async credentials.** Wrap every client in `with ContentSafetyClient(...) as client:` (sync) or `async with ContentSafetyClient(...) as client:` (async). For async `DefaultAzureCredential` from `azure.identity.aio`, also use `async with credential:` so tokens and transports are cleaned up.
3. **Use blocklists** for domain-specific terms
4. **Set severity thresholds** appropriate for your use case
5. **Handle multiple categories** — content can be harmful in multiple ways
6. **Use halt_on_blocklist_hit** for immediate rejection
7. **Log analysis results** for audit and improvement
8. **Consider 8-severity mode** for finer-grained control
9. **Pre-moderate AI outputs** before showing to users

## Reference Files

| File | Contents |
|------|----------|
| [references/capabilities.md](references/capabilities.md) | Additional non-hero capabilities, operation-group coverage, and production checklists. |
| [references/non-hero-scenarios.md](references/non-hero-scenarios.md) | Dedicated non-hero examples for secondary/advanced scenarios. |

© Microsoft · MIT · microsoft/skills

Похожие скиллы

Все скиллы по теме «ИИ и ML» →
skill-creator официальный anthropics Помогает создать новый скилл, доработать существующий и проверить результат через тестовые промпты и оценки. 414 180установок writing-for-agents Matt Pocock Помогает писать скиллы и документы с инструкциями для агентов. Пригодится при правках AGENTS.md, CLAUDE.md и связанных справочных файлов. 466 719установок media-use heygen-com Находит и генерирует ассеты для видео в HyperFrames — музыку, дикторский голос, аватары и эффекты. Сохраняет всё локально в assets. CX Codex +1 1 100 000установок mcp-builder официальный anthropics Скилл проводит через создание MCP-сервера на TypeScript или Python: от изучения протокола до тестов и оценки качества. 130 949установок subagent-driven-development Jesse Vincent Скилл выполняет план через отдельных субагентов для каждой задачи и проверяет результат после каждого шага. Подходит для независимых задач в одной сессии. CX Codex 237 746установок orchestration stablyai Координирует воркеров Orca через DAG задач, циклы супервизора и цепочки сообщений. Пригодится для распределения сложной работы между агентами. CX Codex +1 350 300установок

Из того же набора143

Весь набор →
azure-ai-vision-imageanalysis-py Скилл помогает работать с Azure AI Vision Image Analysis SDK на Python: извлекать текст, находить объекты и получать подписи к изображениям. Пригодится для задач компьютерного зрения. 2установок azure-ai-translation-text-py Скилл по Python SDK Azure AI Translator: перевод текста, транслитерация, определение языка и словарные статьи. Пригодится, когда в приложении нужно переводить строки на лету. 2установок azure-ai-transcription-py Скилл помогает писать Python-код для Azure AI Transcription: преобразовывать речь в текст пакетно или в реальном времени. Пригодится для расшифровки записей с отметками времени и разделением говорящих. 2установок azure-ai-textanalytics-py Скилл для работы с Azure AI Language из Python: тональность, сущности, ключевые фразы, определение языка, поиск персональных данных и медицинский NLP. 2установок azure-servicebus-dotnet Помогает писать .NET-код для Azure Service Bus: отправлять и получать сообщения, обрабатывать очереди в фоне и работать с dead-letter очередью. 2установок azure-ai-openai-dotnet Скилл помогает писать .NET-код для Azure OpenAI и OpenAI: чат, эмбеддинги, изображения, расшифровка аудио и ассистенты. 2установок azure-upgrade Проводит оценку и автоматизирует переход Azure-нагрузок между планами, тарифами и SKU, а также обновляет устаревшие Azure SDK в коде. 1установок azure-quotas Проверяет лимиты, текущую нагрузку и доступную ёмкость Azure по регионам. Пригодится перед развёртыванием или при ошибке превышения квоты. 1установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой