使用 Windows Copilot 运行时进行内容安全管理

重要

Windows 应用 SDK 的最新试验通道版本中提供。

Windows 应用 SDK 试验通道包括开发早期阶段的 API 和功能。 试验通道中的所有 API 都可能经过大量修订和中断性变更,并且随时可从后续版本中删除。 实验性功能不适合在生产环境中使用,使用这些功能的应用程序不能发布到微软商店。

Windows Copilot 运行时 API(如 Phi Silica API图像处理 API),实现文本内容审核,以分类和筛选潜在有害内容,使其不会被提示到这些生成模型或由这些生成模型返回。 默认情况下,API 将筛选出分类为潜在有害的内容,但开发人员可以配置不同的敏感度级别。

先决条件

文本内容管理

可以在输入提示上调整内容审查,以适应生成模型和 AI 生成的输出。 Windows Copilot 运行时 API 内容审查的设计和实施方式与 Azure AI 内容安全提供的 API 类似。

伤害类别

伤害类别与 Azure AI 内容安全中使用的定义保持一致,可在 Azure AI 内容安全指南中找到。 伤害类别包括:仇恨和公平、性内容、暴力或自残,并且可以在同一内容上包括多个标签。

这四个类别对潜在有害内容进行分类使敏感度筛选器能够进行调整。

类别 描述 API 名称
仇恨 仇恨和公平性伤害是指任何基于个人或身份群体的某些区分属性,攻击或使用歧视性语言的内容。 HateContentSeverity
性表示与解剖器官和生殖器、浪漫关系和性行为相关的语言,描述以色情或深情术语描绘的行为,包括被描述为攻击或违背自己意愿的强迫性暴力行为的情况。 SexualContentSeverity
暴力 暴力描述与旨在伤害、伤害、损害或杀害某人或某种行为的物理行为相关的语言:描述武器、枪支和相关实体。 ViolentContentSeverity
自我伤害 自残指的是与故意伤害、损伤、损害某人身体或自杀的身体行为相关的语言。 SelfHarmContentSeverity

严重性级别

默认情况下,对 Windows Copilot 运行时生成 API 的所有调用都使用内容审查,但可以调整严重性级别。

  • high:不可用。 分类为严重性级别 3+ 的内容(潜在危害高风险)当前被阻止由生成 AI 模型返回。

  • medium:默认严重性级别设置为 medium。 将返回严重性级别为 0-3 的内容。

  • low:进一步降低返回潜在有害内容的风险。 仅归类为影响等级 0 至 1 的内容会被返回。

若要详细了解严重性级别,请参阅 Azure AI 内容安全危害类别

文本内容审查代码示例

若要配置嵌入在 Windows Copilot 运行时中的文本内容审查严重性筛选器,需要将 ContentFilterOptions 结构作为参数传递给用于响应生成的 API,例如 Phi 硅 API

以下代码示例演示如何将文本内容审查严重性筛选器添加到 Microsoft Windows 生成 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;