Windows アプリ SDKで Phi Silica を使ってみる
重要
Windows App SDK の最新の試験的チャネル リリースで使用できます。
Windows App SDK の実験用チャネルには、開発の初期段階の API と機能が含まれています。 実験用チャネル内のすべての API は、広範な変更と破壊的変更の対象となり、今後のリリースからいつでも削除される可能性があります。 試験段階の機能は運用環境での使用はサポートされておらず、使用するアプリは Microsoft Store に公開できません。
- Phi Silica は中国では使用できません。
- パッケージ化されていないアプリはサポートされていません。
Phi Silica は、Windows App SDKを使用して Windows アプリに統合できるローカル言語モデルです。
Microsoft の最も強力な NPU チューニングローカル言語モデルとして、Phi Silica は Windows Copilot+ PC デバイスの効率とパフォーマンスを最適化しながら、L 言語モデル (LLM) に含まれる多くの機能を提供します。
このレベルの最適化は、Windows アプリ SDK内のモデルに限定され、他のバージョンの Phi では使用できません。
API の詳細については、Windows App SDK の Phi Silica の API リファレンスを参照してください。
コンテンツ モデレーションの詳細については、「生成 AI API を使用したコンテンツの安全性」を参照してください。
ヒント
これらの API とその機能に関するフィードバックをご提供ください。これには、Windows App SDK GitHub リポジトリで新しい問題を作成する (タイトルに Phi Silica を含める) 方法と、既存の問題に返信する方法があります。
前提条件
- Qualcomm Snapdragon® X Elite プロセッサを含む CoPilot+ PC。
- Arm64EC (エミュレーション互換) は現在サポートされていません。
- Windows 11 Insider Preview Build 26120.3073 (開発およびベータ チャネル) 以降をデバイスにインストールする必要があります。
Windows アプリ SDKを使用して Phi Silica を Windows アプリに統合する
ローカルの Phi Silica 言語モデルと 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 には、カスタマイズ可能なコンテンツ モデレーションが組み込まれています。 この例では、内部コンテンツ モデレーションに独自のしきい値を指定する方法を示します。 のコンテンツモデレーションについて、Windows Copilot Runtimeで詳しく学びましょう。
- ローカル言語モデルを参照する
LanguageModel
オブジェクトを作成します。 *前のスニペットで、Phi Silica 言語モデルがユーザーのデバイスで使用できることを確認するためのチェックが既に実行されています。 ContentFilterOptions
オブジェクトを作成し、任意の値を指定します。- パラメーターの 1 つとして
ContentFilterOptions
を指定したGenerateResponseAsync
メソッドを使用して、文字列プロンプトをモデルに送信します。
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 言語モデルがユーザーのデバイスで使用できることを確認するためのチェックが既に実行されています。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
オブジェクトを作成し、LanguageModelOptions
オブジェクトの Skill フィールドにLanguageModelSkill
列挙型を割り当てることで、使用する定義済みのテキスト形式を指定します。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 Silica は、安全で安全な AI エクスペリエンスを使用してアプリを構築するための強力で信頼できるモデルを開発者に提供します。 Phi Silica が信頼でき、安全で、責任を持って構築されていることを確認するために、次の手順が実行されています。 アプリで AI 機能を実装する場合は、「Windows での責任ある生成 AI 開発」で説明されているベスト プラクティスを確認することをお勧めします。
- モデルの品質を徹底的にテストおよび評価し、潜在的なリスクを特定して軽減します。
- Phi Silica の実験リリースの段階的なロールアウト。 Phi Silica の最終実験リリース後、展開は署名済みアプリに拡大されます。これにより、ローカルモデル機能を備えたアプリケーションにマルウェア スキャンが確実に適用されるようにします。
- Phi Silica は、テキスト コンテンツ モデレーション API を含むローカライズされた AI モデルを提供します。 この API は、入力と AI によって生成された出力の両方で、有害な可能性のあるコンテンツを識別してフィルター処理します。 ローカル テキスト コンテンツ モデレーション モデルは、コンテンツ モデレーション用の azure AI Content Safety モデル に基づいており、同様のパフォーマンスを提供します。 重大度レベルのフィルター オプションの説明と、これらのオプションを実装する方法を示すコード サンプルについては、Windows Copilot Runtime を使用したテキスト コンテンツ モデレーションの を参照してください。
重要
コンテンツの安全性システムは間違いがなく、時折エラーが発生する可能性があるため、補足的な責任ある AI (RAI) のツールとプラクティスを統合することをお勧めします。 詳細については、「 Windows での応答可能なジェネレーティブ AI 開発を参照してください。