次の方法で共有


Windows Copilot ランタイムを使用したコンテンツの安全性モデレーション

重要

Windows App SDK の最新の実検的チャネル リリースで使用できます。

Windows App SDK の実験用チャネルには、開発の初期段階の API と機能が含まれています。 試験段階チャネルに含まれる API はすべて、大幅な改訂および重大な変更の対象であり、後続のリリースからいつでも削除される可能性があります。 試験段階の機能は運用環境での使用はサポートされておらず、それらを使用するアプリは Microsoft Store に公開できません。

Phi Silica APIImaging APIなどの Windows Copilot ランタイム API は、テキスト コンテンツ モデレーションを実装して、有害な可能性のあるコンテンツを分類して、これらの生成モデルに対してプロンプトが表示されたり、返されたりしないように除外します。 API は、既定で有害な可能性があるコンテンツを除外しますが、開発者は異なる秘密度レベルを構成できます。

必須コンポーネント

テキスト コンテンツ モデレーション

入力プロンプトで、生成モデルと AI によって生成された出力に合わせてコンテンツ モデレーションを調整できます。 Windows Copilot ランタイム API のコンテンツ モデレーションは、Azure AI Content Safetyによって提供されるのと同様に設計および実装されます。

有害性カテゴリ

損害カテゴリは、Azure AI Content Safety で使用される定義と一致しており、Azure AI コンテンツの安全性に関するガイダンス で確認できます。 損害カテゴリには、ヘイトとフェアネス、性的コンテンツ、暴力、または自傷行為が含まれており、同じコンテンツに複数のラベルを含めることができます。

有害な可能性があるコンテンツを分類するこれら 4 つのカテゴリにより、機密フィルターを調整できます。

カテゴリ 説明 API 名
Hate ヘイトや公平性に関する有害性とは、特定の区別属性に基づいて、人やアイデンティティ グループに攻撃を加えたり、差別的な言葉を使用したりするコンテンツを指します。 HateContentSeverity
性的 性的表現は、解剖学的な臓器や性器、ロマンチックな関係、性的行為、性的または愛情のある言葉で描かれた行為、暴行や自分の意志に対する強制的な性的暴力行為として描かれた行為などです。 SexualContentSeverity
暴力 暴力とは、人や動物などに苦痛を与える、傷つける、ダメージを与える、または殺害することを意図した物理的行為に関連する言葉、武器、銃器などを表します。 ViolentContentSeverity
自傷行為 自傷行為とは、故意に自分の体に苦痛を与える、傷つける、ダメージを与える、または自殺することを意図した物理的行為に関連する言葉を表します。 SelfHarmContentSeverity

セキュリティ レベル

既定では、Windows Copilot ランタイム生成 API へのすべての呼び出しではコンテンツ モデレーションが使用されますが、重大度レベルは調整できます。

  • high: 使用できません。 重大度レベル 3 以上 (潜在的な損害のリスクが高い) として分類されたコンテンツは、現在、生成 AI モデルによって返されるのをブロックされています。

  • medium: 既定の重大度レベルは mediumに設定されます。 重大度レベル 0 から 3 に分類されたコンテンツが返されます。

  • low: 有害な可能性のあるコンテンツをさらに返すリスクを低減します。 重大度レベル 0 ~ 1 として分類されたコンテンツのみが返されます。

重大度レベルの詳細については、「Azure AI コンテンツの安全性に関する害カテゴリ 」を参照してください。

テキスト コンテンツ モデレーション のコード サンプル

Windows Copilot ランタイム内に埋め込まれたテキスト コンテンツ モデレーション重要度フィルターを構成するには、Phi Silica APIなど、応答生成に使用される API にパラメーターとして ContentFilterOptions 構造体を渡す必要があります。

次のコード サンプルは、Microsoft Windows Generative AI LanguageModelにテキスト コンテンツ モデレーションの重大度フィルターを追加する方法を示しています。

var languageModelOptions = new LanguageModelOptions {
    Temp =  0.9f,
    Top_p = 0.9f, 
    Top_k = 40
};

var promptMinSeverityLevelToBlock = new TextContentFilterSeverity {
    HateContentSeverity = SeverityLevel.Low,
    SexualContentSeverity = SeverityLevel.Low,
    ViolentContentSeverity = SeverityLevel.Medium,
    SelfHarmContentSeverity = SeverityLevel.Low
};

var responseMinSeverityLevelToBlock = new TextContentFilterSeverity {
    HateContentSeverity = SeverityLevel.Low,
    SexualContentSeverity = SeverityLevel.Low,
    ViolentContentSeverity = SeverityLevel.Low,
    SelfHarmContentSeverity = SeverityLevel.Medium
};

var contentFilterOptions = new ContentFilterOptions {
    PromptMinSeverityLevelToBlock = promptMinSeverityLevelToBlock,
    ResponseMinSeverityLevelToBlock = responseMinSeverityLevelToBlock
};

IProgress<string> progress;
var languageModelResponseWithProgress = model.GenerateResponseWithProgressAsync(languageModelOptions, prompt, contentFilterOptions);
languageModelRepsonseWithProgress.Progress = (_, generationProgress) =>
{
    progress.Report(generationProgress);
};
string response = (await languageModelResponseWithProgress).Response;