azure-ai-contentsafety-py について
ユーザー生成または AI 生成のテキストや画像を分析し、テキストブロックリストを管理する Azure AI Content Safety の Python SDK です。ホスト型分類サービスをコンテンツモデレーションに組み込む開発者向けです。
主な機能
- 01有害コンテンツのテキスト分析
- 02画像コンテンツの分析
- 03カスタムテキストブロックリストの管理
- 04重大度レベルの設定
- 05API キーまたは Entra ID 認証
活用シーン
- 01ユーザー投稿テキストのモデレーション
- 02アプリで表示する画像の確認
- 03ドメイン固有語によるテキスト遮断
- 04表示前の AI 出力の検査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill azure-ai-contentsafety-pyインストール後、Claude Code で/azure-ai-contentsafety-pyを入力して読み込まれたか確認します。
詳細
Python 用 Azure AI Content Safety SDK
アプリケーション内のユーザー生成コンテンツと AI 生成コンテンツに有害な内容が含まれていないか検出します。
インストール
pip install azure-ai-contentsafety
環境変数
CONTENT_SAFETY_ENDPOINT=https://<resource>.cognitiveservices.azure.com
CONTENT_SAFETY_KEY=<your-api-key>
認証
API キー
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()
)
承認済みのエンドポイント/アカウント、コンテンツ、およびコスト/保持ポリシーのみを使用してください。アップロードすると、ホスト型分類器にテキスト/画像が開示されます。入力バイト数に上限を設定し、レビュー済みの SDK モデル/インポートを使用してください(Entra ID には azure-identity も必要です)。分類では有害な内容を見逃したり、無害な文脈にフラグを付けたりすることがあります。重大度がゼロでも、安全性が常に保証されるわけではありません。代表的な言語/ドメインでしきい値を検証し、サービス停止時/結果が曖昧な場合の処理と、人による異議申し立て/レビューの方法を定めてください。ブロックリストの変更は実際のモデレーションに影響する可能性があるため、適用範囲を明示してください。ログ内のコンテンツを編集して秘匿し、クライアント/認証情報を閉じてください。
テキストを分析する
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}")
画像を分析する
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}")
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)
テキストブロックリストの管理
ブロックリストを作成する
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
)
ブロック項目を追加する
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
)
ブロックリストを使って分析する
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}")
重大度レベル
テキスト分析では、デフォルトで 4 段階の重大度レベル(0、2、4、6)が返されます。8 段階(0~7)にするには:
from azure.ai.contentsafety.models import AnalyzeTextOptions, AnalyzeTextOutputType
request = AnalyzeTextOptions(
text="Your text",
output_type=AnalyzeTextOutputType.EIGHT_SEVERITY_LEVELS
)
有害カテゴリ
| カテゴリ | 説明 |
|---|---|
Hate | 人種、宗教、性別など、アイデンティティに基づく攻撃 |
Sexual | 性的な内容、人間関係、身体の部位 |
Violence | 身体的危害、武器、負傷 |
SelfHarm | 自傷行為、自殺、摂食障害 |
重大度スケール
| レベル | テキストの範囲 | 画像の範囲 | 意味 |
|---|---|---|---|
| 0 | 検出されない | 検出されない | モデルは、対応しているカテゴリで有害な内容を検出しませんでした |
| 2 | 低 | 低 | 軽度の言及 |
| 4 | 中 | 中 | 中程度の内容 |
| 6 | 高 | 高 | 深刻な内容 |
クライアントの種類
| クライアント | 用途 |
|---|---|
ContentSafetyClient | テキストと画像を分析します |
BlocklistClient | カスタムブロックリストを管理します |
ベストプラクティス
- ブロックリストを使用する:ドメイン固有の用語に対応します
- 重大度のしきい値を設定する:用途に適した値を設定します
- 複数のカテゴリを処理する:コンテンツは複数の点で有害な場合があります
halt_on_blocklist_hitを使用する:該当時にただちに拒否します- 分析結果を記録する:監査と改善に役立てます
- 8 段階の重大度モードを検討する:より細かな制御が可能です
- AI の出力を事前にモデレーションする:ユーザーに表示する前に実施します
使用するタイミング
このスキルは、概要で説明されているワークフローまたはアクションを実行する場合に適用できます。
制限事項
- このスキルは、タスクが上記で説明されている範囲に明確に一致する場合にのみ使用してください。
- 出力を、環境固有の検証、テスト、または専門家によるレビューの代替として扱わないでください。
- 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を停止して確認を求めてください。