🙅
【Azure】Content Safetyでテキストから「有害なカテゴリ」を検出する。
今回はAzure AIの「Content Safety」を使って、テキストのフィルタを作ります。
【関連】
→ 【Natural Language API】テキストから「有害なカテゴリ」を検出する。
→ 【OpenAI】ModerationAPIでテキストから「有害なカテゴリ」を検出する。
「Azure AI Content Safety」とは
「入力テキスト/画像」から、各カテゴリに対する「重大度(深刻度)」 を算出してくれます。
- 重大度
severity
→ どのくらい深刻な内容か(0, 2, 4, 6)
料金
- 約0.054円(1000文字あたり)
- (無料枠: 約500万文字)
https://azure.microsoft.com/ja-jp/pricing/details/cognitive-services/content-safety/#pricing
主要な機能
機能 | 内容 |
---|---|
Analyze Image | 画像を分析 |
Analyze Text | テキストを分析 |
Analyze Text Jailbreak | テキストのジェイルブレイクを分析 |
Analyze text prompt injection attacks | テキストプロンプトインジェクション攻撃を分析 |
テキスト判定
- センシティブコンテンツのレベルをカテゴリ別に検出
- 根拠がない情報を検出【日本非対応】
- 第三者の著作物や保護されたテキストの検出
- LLMの生成コードが、すでにGitHubのリポジトリに存在しているかを検出【日本非対応】
- プロンプトリーキングやJailbreak攻撃、間接攻撃(間接的なセキュリティ侵害)などの検出
画像判定
- センシティブコンテンツのレベルをカテゴリ別に検出
マルチモーダル判定
- センシティブコンテンツのレベルをカテゴリ別に検出【日本非対応】
検出カテゴリ
APIカテゴリ | 日本語 | 説明 |
---|---|---|
Hate | ヘイトと公平性 | - 人種、民族、国籍 - 性別のアイデンティティ グループと表現 - 性的指向 - 宗教 - 個人の外観、身体のサイズ - 障碍の状態 - 嫌がらせといじめ |
SelfHarm | 自傷行為 | - 摂食障害 - いじめと脅迫 |
Sexual | 性的 | - 低俗なコンテンツ - 売春 - ヌードおよびポルノ - 迷惑行為 - 児童搾取、児童虐待、チャイルド グルーミング |
Violence | 暴力 | - 武器 - いじめと脅迫 - テロリスト、暴力的な過激主義 - ストーカー行為 |
(参考: Azure AI Content Safety の危害カテゴリ - Azure AI services | Microsoft Learn)
実装の手順
用意するもの
- AzureのContent Safetyのエンドポイント
- AzureのContent Safetyのキー
パッケージをインストールする
$ npm install @azure-rest/ai-content-safety
テキスト検出する関数を作る
import ContentSafetyClient, { isUnexpected } from "@azure-rest/ai-content-safety";
import { AzureKeyCredential } from "@azure/core-auth";
// ---------------------------------------------
// テキストから有害コンテンツを検出する
// ---------------------------------------------
export async function analyzeText(text: string) {
// --- 環境変数からクライアント作成 ---
const endpoint = process.env.AZURE_CONTENT_SAFETY_ENDPOINT;
const key = process.env.AZURE_CONTENT_SAFETY_KEY;
const credential = new AzureKeyCredential(key || "");
const client = ContentSafetyClient(endpoint, credential);
// --- テキスト分析 ---
const analyzeTextParameters = { body: { text: text } };
const result = await client.path("/text:analyze").post(analyzeTextParameters);
const resultBody = result.body;
return resultBody;
}
APIドキュメント
APIリファレンス
参考
Discussion