Windows 应用 SDK中的 Phi 硅入门

重要

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

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

  • 皮硅在中国不可用。
  • 不支持解压缩的应用。

Phi 硅石是一种本地语言模型,可以使用 Windows 应用 SDK集成到 Windows 应用中。

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

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

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

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

提示

通过在 Windows 应用 SDK GitHub 存储库中创建 新问题(在标题中包括 Phi Silica)或通过响应 现有问题来提供关于这些 API 及其功能的意见反馈。

先决条件

使用 Windows 应用 SDK将 Phi 二氧化铁集成到 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 开发。