在 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,了解 內容審核詳細資訊。
必要條件
-
Copilot+ PC 包含 Qualcomm Snapdragon® X 處理器。
- Arm64EC(Emulation Compatible,模擬相容)目前不支援。
- Windows 11 Insider Preview 組建 26120.3073 版本(Dev 和 Beta 通道) 或更新版本必須安裝在您的裝置上。
使用 Windows 應用程式 SDK 將 Phi Mixed 整合到您的 Windows 應用程式中
使用本機 Phi 矽語言模型和 Windows 應用程式 SDK,您可以產生使用者提示的文字回應。
產生完整的回應
此範例示範如何在傳回結果之前產生完整回應的 Q&A 提示字元回應。
呼叫
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 內建了可自定義的內容仲裁。 此範例示範如何為內部內容仲裁指定您自己的臨界值。 了解更多關於 Content Moderation 使用 Windows Copilot Runtime。
- 建立
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;
產生部分回應的數據流
此範例示範如何產生回應給 Q&A 提示,其中回應會以部分結果數據流傳回。
建立
LanguageModel
對象來參考本機語言模型。 *已經進行檢查,確保使用者的裝置上可以使用 Phi Silica 語言模型,並且是在先前的程式碼片段中確認的。在對
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:將提示回應轉換成表格格式。
- 摘要:根據提示文字傳回摘要。
- 重寫:以更容易理解的方式重新撰寫提示文字,以更清楚的方式表達回應。
建立
LanguageModel
對象來參考本機語言模型。 *已經進行檢查,確保使用者的裝置上可以使用 Phi Silica 語言模型,並且是在先前的程式碼片段中確認的。建立
LanguageModelOptions
物件,並指定預先定義的文字格式,方法是將LanguageModelSkill
列舉指派到LanguageModelOptions
物件的 Skill 字段。 下列值適用於LanguageModelSkill
列舉。列舉 描述 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 能為開發人員提供強大的可靠模型,以安全且安全的 AI 體驗建置應用程式。 已採取下列步驟,以確保 Phi Silica 能夠被信賴、安全且負責任地進行開發。 建議您在應用程式中實作 AI 功能時,檢閱 Windows 上的負責任生成式 AI 開發 所描述的最佳做法。
- 徹底測試和評估模型品質,以識別並降低潛在風險。
- 增量推出菲矽實驗版本。 在最終的 Phi 矽實驗版本之後,推出將會擴充至已簽署的應用程式,以確保惡意代碼掃描已套用至具有本機模型功能的應用程式。
- Phi Silica 提供本地化的 AI 模型,其中包含文字內容審核 API。 此 API 會識別並篩選輸入和 AI 產生的輸出中潛在的有害內容。 本機文字內容仲裁模型是以 azure AI 內容安全性 模型為基礎的 內容仲裁模型,並提供類似的效能。 如需有關 Windows Copilot Runtime 之文字內容仲裁 的嚴重性層級篩選選項的描述,以及展示如何實作這些選項的程式代碼範例,請參閱。
重要
沒有任何內容安全性系統無法發生,而且偶爾會發生錯誤,因此我們建議整合補充責任 AI(RAI) 工具和做法。 如需詳細資訊,請參閱 Windows 上的負責任 Generative AI 開發。