Windows 应用 SDK 中的 Phi Silica

使用 Windows 应用 SDK 将 Windows 应用连接到设备上的语言模型,包括 Phi Silica,这是我们迄今为止功能最强大的经过 NPU 优化的本地语言模型。

Windows 应用 SDK 附带多个人工智能 (AI) API,可访问这些模型来执行本地处理和聊天生成、数学求解、代码生成、推理文本等任务。

重要

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

先决条件

负责任 AI

Phi Silica 为开发人员提供了一个强大的可信模型,用于构建具有安全 AI 体验的应用。 开发人员采取以下步骤来确保 Phi Silica 是可信和安全的,而且是负责任地构建的。

  • 对模型质量进行全面的测试和评估,以识别和缓解潜在风险。
  • 创建 Phi Silica 模型卡,用以描述模型的优势和局限,明确它的预期用途。
  • Phi Silica 实验版将逐步推出。 在最终的 Phi Silica 试验版本发布之后,还会将该版本扩展到已签名应用,以确保恶意软件扫描已应用于具有本地模型功能的应用。
  • 通过“设置”中的“功能访问管理器”提供客户控制,让用户能够为系统、用户、应用关闭设备上的模型。

注意

内容审核功能目前正在开发中。

除了上述内容之外,我们还建议查看 Windows 上负责任的生成式 AI 开发中介绍的最佳实践。

Phi Silica 和 Windows 应用 SDK 的用途

借助本地 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.

根据字符串提示获取部分结果流

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

  1. 首先,创建一个 LanguageModel 对象来引用本地语言模型(我们已经在前面的代码片段中检查了语言模型是否存在)。
  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;

其他资源

使用 Windows 应用 SDK 和 WinRT API 访问文件和文件夹