mcpField
A
azure-ai-contentsafety-py

azure-ai-contentsafety-py

github.com/sickn33その他48.7k77 回インストール今日更新
リポジトリ

azure-ai-contentsafety-py について

ユーザー生成または AI 生成のテキストや画像を分析し、テキストブロックリストを管理する Azure AI Content Safety の Python SDK です。ホスト型分類サービスをコンテンツモデレーションに組み込む開発者向けです。

主な機能

  1. 01有害コンテンツのテキスト分析
  2. 02画像コンテンツの分析
  3. 03カスタムテキストブロックリストの管理
  4. 04重大度レベルの設定
  5. 05API キーまたは Entra ID 認証

活用シーン

  1. 01ユーザー投稿テキストのモデレーション
  2. 02アプリで表示する画像の確認
  3. 03ドメイン固有語によるテキスト遮断
  4. 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カスタムブロックリストを管理します

ベストプラクティス

  1. ブロックリストを使用する:ドメイン固有の用語に対応します
  2. 重大度のしきい値を設定する:用途に適した値を設定します
  3. 複数のカテゴリを処理する:コンテンツは複数の点で有害な場合があります
  4. halt_on_blocklist_hit を使用する:該当時にただちに拒否します
  5. 分析結果を記録する:監査と改善に役立てます
  6. 8 段階の重大度モードを検討する:より細かな制御が可能です
  7. AI の出力を事前にモデレーションする:ユーザーに表示する前に実施します

使用するタイミング

このスキルは、概要で説明されているワークフローまたはアクションを実行する場合に適用できます。

制限事項

  • このスキルは、タスクが上記で説明されている範囲に明確に一致する場合にのみ使用してください。
  • 出力を、環境固有の検証、テスト、または専門家によるレビューの代替として扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を停止して確認を求めてください。

コメント