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 内容安全。
先决条件
- 包含 Qualcomm Snapdragon® X Elite 处理器的 CoPilot+ 电脑。
- Windows 11 预览版 26120.3073(开发和测试版频道) 或更高版本必须安装在设备上。
使用 Windows 应用 SDK将 Phi 二氧化铁集成到 Windows 应用中
借助本地 Phi Silica 语言模型和 Windows 应用 SDK,可以生成对用户提示的文本响应。
生成完整的响应
此示例演示如何生成对问答提示的响应,在返回结果之前生成完整响应。
通过调用
IsAvailable
方法并等待MakeAvailableAsync
方法成功返回,确保语言模型可用。语言模型可用后,创建一个
LanguageModel
对象来引用它。使用返回完整结果的
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 运行时进行内容审核的信息。
- 创建
LanguageModel
对象以引用本地语言模型。 已进行了检查,以确保 Phi Silica 语言模型可用于用户的设备,正如之前代码片段中所述。 - 创建
ContentFilterOptions
对象并指定首选值。 - 使用
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;
生成部分响应流
此示例演示如何生成对问答提示的响应,其中响应作为部分结果流返回。
创建
LanguageModel
对象以引用本地语言模型。 *已经进行了检查,以确保在前面的代码段中,Phi-Silica 语言模型在用户的设备上可用。在对
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 提供了可以在应用中使用的预定义文本响应格式的功能。 预定义文本格式可以提供更一致的响应结果,并提供以下选项:
- 文本转换为表格:将提示响应转换为表格格式。
- 汇总:根据提示文本返回摘要。
- 重写:重新编写提示文本,以更加清晰的方式表达响应。
创建
LanguageModel
对象以引用本地语言模型。 已经执行检查,以确保用户设备上的 Phi Silica 语言模型已在上一个代码片段中可用。创建一个
LanguageModelOptions
对象,并通过将LanguageModelSkill
枚举分配给LanguageModelOptions
对象的 Skill 字段来指定要使用的预定义文本格式。 以下值可用于LanguageModelSkill
枚举。Enum 说明 LanguageModelSkill.General
默认值,未应用预定义的格式。 LanguageModelSkill.TextToTable
如果适用,请将提示文本转换为表格。 LanguageModelSkill.Summarize
基于提示文本返回摘要。 LanguageModelSkill.Rewrite
重写提示文本响应以提高清晰度和理解性。 然后,在对 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 开发。