共用方式為


在 Windows 應用程式 SDK 開始使用菲矽

重要

Windows App SDK 的最新 實驗通道 版本中提供。

Windows App SDK 實驗通道包含開發初期階段的 API 和功能。 實驗通道中的所有 API 都受限於廣泛的修訂和中斷性變更,而且可以隨時從後續版本中移除。 實驗性功能不支援在生產環境中使用,且使用它們的應用程式無法發佈至Microsoft市集。

  • 中國大陸中不提供 Phi 二氧化鐵。
  • 不支援獨立應用程式。

Phi Silica 是一種本機語言模型,您可以使用 Windows App SDK將其整合到 Windows 應用程式中。

作為Microsoft功能最強大的 NPU 調音當地語言模型,Phi Io 已針對 Windows Copilot+ 電腦裝置上的效率和效能優化,同時仍提供大型語言模型 (LLM) 中找到的許多功能。

此優化層級專屬於 Windows 應用程式 SDK 內的模型,不適用於其他版本的 Phi。

如需 API 詳細資訊,請參閱 Windows App SDK 中 Phi Silica 的API 參照。

請參閱 內容安全性與生成式 AI API,了解 內容審核詳細資訊

提示

藉由在 Windows App SDK GitHub 存放庫中建立 新問題(在標題中包含 Phi Silica),或回應 現有問題,提供對這些 API 及其功能的意見反應。

必要條件

使用 Windows 應用程式 SDK 將 Phi Mixed 整合到您的 Windows 應用程式中

使用本機 Phi 矽語言模型和 Windows 應用程式 SDK,您可以產生使用者提示的文字回應。

產生完整的回應

此範例示範如何在傳回結果之前產生完整回應的 Q&A 提示字元回應。

  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 內建了可自定義的內容仲裁。 此範例示範如何為內部內容仲裁指定您自己的臨界值。 了解更多關於 Content Moderation 使用 Windows Copilot Runtime

  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;

產生部分回應的數據流

此範例示範如何產生回應給 Q&A 提示,其中回應會以部分結果數據流傳回。

  1. 建立 LanguageModel 對象來參考本機語言模型。 *已經進行檢查,確保使用者的裝置上可以使用 Phi Silica 語言模型,並且是在先前的程式碼片段中確認的。

  2. 在對 LanguageModelResponse呼叫中,以異步方式擷取 GenerateResponseWithProgressAsync。 在產生回應時,將它寫入主控台。

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 包含了一項功能,可以預先定義文字回應格式以供在您的應用程式中使用。 預先定義文字格式可以提供更一致的回應結果,並提供下列選項:

  • Text to Table:將提示回應轉換成表格格式。
  • 摘要:根據提示文字傳回摘要。
  • 重寫:以更容易理解的方式重新撰寫提示文字,以更清楚的方式表達回應。
  1. 建立 LanguageModel 對象來參考本機語言模型。 *已經進行檢查,確保使用者的裝置上可以使用 Phi Silica 語言模型,並且是在先前的程式碼片段中確認的。

  2. 建立 LanguageModelOptions 物件,並指定預先定義的文字格式,方法是將 LanguageModelSkill 列舉指派到 LanguageModelOptions 物件的 Skill 字段。 下列值適用於 LanguageModelSkill 列舉。

    列舉 描述
    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 能為開發人員提供強大的可靠模型,以安全且安全的 AI 體驗建置應用程式。 已採取下列步驟,以確保 Phi Silica 能夠被信賴、安全且負責任地進行開發。 建議您在應用程式中實作 AI 功能時,檢閱 Windows 上的負責任生成式 AI 開發 所描述的最佳做法。

  • 徹底測試和評估模型品質,以識別並降低潛在風險。
  • 增量推出菲矽實驗版本。 在最終的 Phi 矽實驗版本之後,推出將會擴充至已簽署的應用程式,以確保惡意代碼掃描已套用至具有本機模型功能的應用程式。
  • Phi Silica 提供本地化的 AI 模型,其中包含文字內容審核 API。 此 API 會識別並篩選輸入和 AI 產生的輸出中潛在的有害內容。 本機文字內容仲裁模型是以 azure AI 內容安全性 模型為基礎的 內容仲裁模型,並提供類似的效能。 如需有關 Windows Copilot Runtime 之文字內容仲裁 的嚴重性層級篩選選項的描述,以及展示如何實作這些選項的程式代碼範例,請參閱

重要

沒有任何內容安全性系統無法發生,而且偶爾會發生錯誤,因此我們建議整合補充責任 AI(RAI) 工具和做法。 如需詳細資訊,請參閱 Windows 上的負責任 Generative AI 開發。