今回はMicrosoft.Extensions.AIからFoundry Local(Phi-4)を使用する方法についてお届けします。
前回はMicrosoft.Extensions.AIからOllama(Phi-4)を利用する方法を紹介しました。今回はWindows AI Foundryの機能のひとつである「Foundry Local」を使用して、マイクロソフトが提供するAIモデル「Phi-4」を利用する方法を確認してみます。
Foundry Localとは?
Foundry LocalはWindows AI Foundry(昨年発表されたWindows Copilot Runtimeの進化形としてBuild 2025で発表)の機能のひとつであり、Windows OSおよびmacOSが動作するローカル環境で大規模言語モデル(LLM)を実行することができます。現時点ではプレビュー機能となっています。
使ってみる
Foundry Localのインストール
ローカル環境にFoundry Localをインストールします。ターミナルを開いて以下のコマンドを実行します。
winget install Microsoft.FoundryLocal
インストールが完了すると以下のように表示されます。

使用可能なモデルを確認
Foundry Localで使用可能なモデルを確認します。ターミナルを開いて以下のコマンド実行します。
foundry model list
以下のように使用可能モデルのリストが表示されます。

Phi-4モデルのダウンロード
今回はPhi-4を使うのでターミナルで以下のコマンドを実行してモデルをダウンロードします。
foundry model run phi-4
ダウンロードが完了するとモデルとチャットができるようになります。試しに「こんにちは!」と入力すると以下のようにPhi-4モデルから応答が返されます。

これでFoundry LocalでPhi-4モデルを使う準備は完了です。
なお、現時点でFoundry LocalではOpenAIのオープンソースモデル「GPT-OSS-20B」を使用することが可能ですが、今回使用するローカル環境ではモデルを実行するための要件を満たしていないためPhi-4を使用しています。
アプリケーションの作成
Visual Studioでコンソールアプリケーションを作成します。

NuGetパッケージマネージャーから以下のパッケージをインストールします。
- Microsoft.Extensions.AI
- Microsoft.Extensions.AI.OpenAI
- Microsoft.AI.Foundry.Local

Microsoft.AI.Foundry.Local
はFoundry Localの.NETアプリケーション向けのSDKです。
このSDKに含まれるOpenAIFoundryLocalManager
クラスを使用して、Foundry Local サービスと呼ばれるOpenAI互換のRESTサーバーをアプリケーションから利用することができます。
Program.csを以下のように更新します。最初にOpenAIFoundryLocalManager
クラスを使用してサービスの起動と停止を9、13行目で実施します。
using Microsoft.AI.Foundry.Local;
using Microsoft.Extensions.AI;
using OpenAI.Chat;
using System.ClientModel;
Console.WriteLine("Microsoft.Extensions.AIを利用してFoundry Local(Phi-4)を試してみる");
FoundryLocalManager manager = new();
await manager.StartServiceAsync(CancellationToken.None);
// ここに処理を記載
await manager.StopServiceAsync(CancellationToken.None);
await manager.DisposeAsync();
次にMicrosoft.Extensions.AI
のIChatClient
インターフェイスを使用してOpenAIのクライアントChatClient
クラスを使用します。前述したようにFoundry Localはローカルサーバーを起動しており、Endpoint
プロパティを使用してエンドポイントを設定することができます。
使用するモデルは、Foundry Local サービスでキャッシュされているモデルをListCachedModelsAsync
メソッドで取得してDisplayName
プロパティで設定します。また、APIキーはApiKey
プロパティで設定することが可能です。
using Microsoft.AI.Foundry.Local;
using Microsoft.Extensions.AI;
using OpenAI.Chat;
using System.ClientModel;
Console.WriteLine("Microsoft.Extensions.AIを利用してFoundry Local(Phi-4)を試してみる");
FoundryLocalManager manager = new();
await manager.StartServiceAsync(CancellationToken.None);
List<ModelInfo> models = await manager.ListCachedModelsAsync();
IChatClient client = new ChatClient(
models.First().DisplayName,
new ApiKeyCredential(manager.ApiKey),
new OpenAI.OpenAIClientOptions()
{
Endpoint = manager.Endpoint
}
).AsIChatClient();
await manager.StopServiceAsync(CancellationToken.None);
await manager.DisposeAsync();
最後にGetResponseAsync
メソッドでチャットメッセージを送信して応答を受け取ります。
Console.WriteLine(await client.GetResponseAsync(
"ActiveReportsについて300文字程度で簡単に教えてください。",
new ChatOptions { MaxOutputTokens = 400 }));

応答をストリーミングで受け取る場合はGetStreamingResponseAsync
メソッドを使用します。
await foreach (var update in client.GetStreamingResponseAsync(
"ActiveReportsについて300文字程度で簡単に教えてください。",
new ChatOptions { MaxOutputTokens = 400 }))
{
Console.Write(update);
}
さいごに
今回はFoundry LocalをMicrosoft.Extensions.AIから利用する方法を確認してみました。Foundry LocalのSDKを使用するとOllamaやLM Studioを使用するケースと違ってアプリケーションからサービスの起動と停止を実行できるので、あらかじめサービスを起動しておいたり常駐させておく必要がありませんしサービスを終了させることも可能です。これはローカル環境でLLMを使用するアプリケーションを運用する際のメリットになるかと思います。現時点でFoundry Localはまだプレビューの段階ですが今後の正式リリースに期待したいところです。