Windows 应用 SDK 中的 Phi Silica 入门

重要

可在 Windows 应用 SDK 的最新 实验性频道 版本中使用。

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

  • Phi 硅在中国大陆中不可用。
  • 不支持自包含应用。

Phi Silica 是一个本地语言模型,你可以使用 Windows 应用 SDK将其集成到 Windows 应用中。

作为 Microsoft 最强大的 NPU 优化本地语言模型,Phi Silica 针对 Windows Copilot+ PC 设备上的效率和性能进行了优化,同时仍提供大型语言模型 (LLM) 中的许多功能。

这种优化级别仅适用于 Windows 应用 SDK 中的模型,在其他版本的 Phi 中不可用。

有关 API 的详细信息,请参阅 Windows 应用 SDK 中 Phi Silica 的API 参考。

有关 内容审核详细信息,请参阅 生成式 AI API 的内容安全

提示

通过在 Windows 应用 SDK GitHub 存储库中创建 新议题(在标题中包含 Phi Silica),或通过对 现有议题作出回应,来提供有关这些 API 及其功能的意见反馈。

先决条件

使用 Windows 应用 SDK 将 Phi Silica 集成到 Windows 应用中

借助本地 Phi Silica 语言模型和 Windows 应用 SDK,可以生成对用户提示的文本响应。

生成完整的响应

此示例演示如何生成对问答提示的响应,在返回结果之前生成完整响应。

  1. 通过调用 IsAvailable 方法并等待 MakeAvailableAsync 方法成功返回,确保语言模型可用。

  2. 语言模型可用后,创建一个 LanguageModel 对象来引用它。

  3. 使用返回完整结果的 GenerateResponseAsync 方法向模型提交字符串提示。

using Microsoft.Windows.AI.Generative; 
 
 
if (!LanguageModel.IsAvailable()) 
{ 
   var op = await LanguageModel.MakeAvailableAsync(); 
} 
 
using LanguageModel languageModel = await LanguageModel.CreateAsync(); 
 
string prompt = "Provide the molecular formula for glucose."; 
 
var result = await languageModel.GenerateResponseAsync(prompt); 
 
Console.WriteLine(result.Response); 
using namespace winrt::Microsoft::Windows::AI::Generative;

if (!LanguageModel::IsAvailable()) 
{
    auto op = LanguageModel::MakeAvailableAsync().get();
}

auto languageModel = LanguageModel::CreateAsync().get();

std::string prompt = "Provide the molecular formula for glucose.";

auto result = languageModel.GenerateResponseAsync(prompt).get();

std::cout << result.Response() << std::endl;

此示例生成的响应为:

The molecular formula for glucose is C6H12O6.

生成完整的响应

我们的 API 内置了可自定义的内容审查。 此示例演示如何为内部内容审查指定自己的阈值。 了解更多关于使用 Windows Copilot 运行时进行内容审核的信息。

  1. 创建 LanguageModel 对象以引用本地语言模型。 *已经进行了检查,以确保在前面的代码段中,Phi-Silica 语言模型在用户的设备上可用。
  2. 创建 ContentFilterOptions 对象并指定首选值。
  3. 使用 GenerateResponseAsync 方法将字符串提示符与参数 ContentFilterOptions 一起提交到模型。
using Microsoft.Windows.AI.Generative; 

using LanguageModel languageModel = await LanguageModel.CreateAsync(); 
 
string prompt = "Provide the molecular formula for glucose."; 

ContentFilterOptions filterOptions = new ContentFilterOptions();
filterOptions.PromptMinSeverityLevelToBlock.ViolentContentSeverity = SeverityLevel.Medium;
filterOptions.ResponseMinSeverityLevelToBlock.ViolentContentSeverity = SeverityLevel.Medium;
 
// var result = await languageModel.GenerateResponseAsync(null, prompt, filterOptions); 
 
Console.WriteLine(result.Response);
using namespace winrt::Microsoft::Windows::AI::Generative;

auto languageModel = LanguageModel::CreateAsync().get();

std::string prompt = "Provide the molecular formula for glucose.";

ContentFilterOptions contentFilter = ContentFilterOptions(); 
contentFilter.PromptMinSeverityLevelToBlock().ViolentContentSeverity(SeverityLevel::Medium); 
contentFilter.ResponseMinSeverityLevelToBlock().ViolentContentSeverity(SeverityLevel::Medium); 

// auto result = languageModel.GenerateResponseAsync(nullptr, prompt, filterOptions).get();

std::cout << result.Response() << std::endl;

生成部分响应流

此示例演示如何生成对问答提示的响应,其中响应作为部分结果流返回。

  1. 创建 LanguageModel 对象以引用本地语言模型。 *已经进行了检查,以确保在前面的代码段中,Phi-Silica 语言模型在用户的设备上可用。

  2. 在对 GenerateResponseWithProgressAsync 的调用中异步检索 LanguageModelResponse。 生成响应时,将其写入控制台。

using Microsoft.Windows.AI.Generative; 

using LanguageModel languageModel = await LanguageModel.CreateAsync(); 
 
string prompt = "Provide the molecular formula for glucose."; 
 
AsyncOperationProgressHandler<LanguageModelResponse, string> 
progressHandler = (asyncInfo, delta) => 
{ 
    Console.WriteLine($"Progress: {delta}"); 
    Console.WriteLine($"Response so far: {asyncInfo.GetResults().Response()}"); 
 }; 
 
var asyncOp = languageModel.GenerateResponseWithProgressAsync(prompt); 
 
asyncOp.Progress = progressHandler; 
 
var result = await asyncOp;  
 
Console.WriteLine(result.Response);
using namespace winrt::Microsoft::Windows::AI::Generative;

auto languageModel = LanguageModel::CreateAsync().get();

std::string prompt = "Provide the molecular formula for glucose.";

AsyncOperationProgressHandler<LanguageModelResponse, std::string> progressHandler = 
    [](const IAsyncOperationWithProgress<LanguageModelResponse, std::string>& asyncInfo, const std::string& delta) 
    { 
        std::cout << "Progress: " << delta << std::endl; 
        std::cout << "Response so far: " << asyncInfo.GetResults().Response() << std::endl; 
    };

auto asyncOp = languageModel.GenerateResponseWithProgressAsync(prompt);

asyncOp.Progress(progressHandler); 

auto result = asyncOp.get();

std::cout << result.Response() << std::endl;

在应用中应用预定义的文本格式,以提升响应的一致性

Phi Silica 具备可用于应用中预定义文本响应格式的能力。 预定义文本格式可以提供更一致的响应结果,并提供以下选项:

  • 文本转换为表格:将提示响应转换为表格格式。
  • 汇总:根据提示文本返回摘要。
  • 重写:重新编写提示文本,以更加清晰的方式表达响应。
  1. 创建 LanguageModel 对象以引用本地语言模型。 *已经进行了检查,以确保在前面的代码段中,Phi-Silica 语言模型在用户的设备上可用。

  2. 创建一个 LanguageModelOptions 对象,并通过将 LanguageModelSkill 枚举分配给 LanguageModelOptions 对象的 Skill 字段来指定要使用的预定义文本格式。 以下值可用于 LanguageModelSkill 枚举。

    Enum 说明
    LanguageModelSkill.General 默认值,未应用预定义的格式。
    LanguageModelSkill.TextToTable 如果适用,请将提示文本转换为表格。
    LanguageModelSkill.Summarize 基于提示文本返回摘要。
    LanguageModelSkill.Rewrite 重写提示文本响应以提高清晰度和理解性。
  3. 然后,在对 GenerateResponseWithProgressAsync 的调用中异步检索 LanguageModelResponse,并在生成响应时将其写入控制台。

using Microsoft.Windows.AI.Generative; 
 
using LanguageModel languageModel = await LanguageModel.CreateAsync(); 
 
string prompt = "This is a large amount of text I want to have summarized.";

LanguageModelOptions options = new LanguageModelOptions {
    Skill = LanguageModelSkill.Summarize
};
 
var result = await languageModel.GenerateResponseAsync(options, prompt); 
 
Console.WriteLine(result.Response); 
using namespace winrt::Microsoft::Windows::AI::Generative;

auto languageModel = LanguageModel::CreateAsync().get();

std::string prompt = "This is a large amount of text I want to have summarized.";

LanguageModelOptions options = LanguageModelOptions();
options.Skill = LanguageModelSkill.Summarize;

auto result = languageModel.GenerateResponseAsync(options, prompt).get();

std::cout << result.Response() << std::endl;

负责任的 AI

Phi Silica 为开发人员提供了一个强大的可信模型,用于构建具有安全 AI 体验的应用。 已采取以下步骤来确保 Phi 硅是可信的、安全的,并负责任地构建的。 我们建议在应用中实施 AI 功能时,参阅 Windows 上负责任的生成式 AI 开发中描述的最佳做法。

  • 对模型质量进行全面的测试和评估,以识别和缓解潜在风险。
  • Phi Silica 实验版将逐步推出。 在最终的 Phi Silica 试验版本发布之后,还会将该版本扩展到已签名应用,以确保恶意软件扫描已应用于具有本地模型功能的应用。
  • Phi 硅提供了一个本地化的 AI 模型,其中包括文本内容审查 API。 此 API 可识别和筛选输入和 AI 生成的输出中可能有害的内容。 本地文本内容审查模型基于 Azure AI 内容安全 模型进行内容审查,并提供类似的性能。 有关严重性级别筛选器选项的说明及演示如何实现这些选项的代码示例,请参阅使用 Windows Copilot 运行时进行内容审核

重要

没有一个内容安全系统是绝对可靠的,偶尔会出现错误,因此我们建议整合补充的负责任 AI (RAI) 工具和实践。 有关更多详细信息,请参阅 Windows 上负责任的生成式 AI 开发