Microsoft.Extensions.AIを利用してFoundry Local(Phi-4)を試してみる

普段のお仕事に役立つ普遍的なプログラミングTIPSや、業界で注目度が高い最新情報をお届けする「編集部ピックアップ」。
今回は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 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.AIIChatClientインターフェイスを使用して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はまだプレビューの段階ですが今後の正式リリースに期待したいところです。

\  この記事をシェアする  /