Phi シリカ アドオンの作成

このガイドでは、Electron アプリで Phi Silica AI API を呼び出す C# ネイティブ アドオンを作成する方法について説明します。 Phi Silica は、NPU (ニューラル処理ユニット) を使用Windows 11デバイス上でローカルに実行される小さな言語モデルです。

[前提条件]

このガイドを開始する前に、次の作業が完了していることを確認してください。

  • 開発環境のセットアップが完了しました
  • Copilot+ PC - Phi Silica には NPU (ニューラル処理装置) を備えたデバイスが必要です

Copilot+ PCを使用していない場合でも、このガイドに従ってアドオンの作成プロセスを学習できます。 このコードでは、モデルが使用できないというメッセージを返すことで、NPU をサポートしていないデバイスを適切に処理します。

手順 1: C# ネイティブ アドオンを作成する

次に、エキサイティングな部分として、Windows API を呼び出すネイティブ アドオンを作成しましょう。 node-api-dotnet を利用して JavaScript と C# をブリッジする C# テンプレートを使用します。

npx winapp node create-addon --template cs

これにより、次の csAddon/ フォルダーが作成されます。

  • addon.cs - Windows API を呼び出す C# コード
  • csAddon.csproj - Windows SDK と Windows アプリ SDK への参照を含むProject ファイル
  • README.md - アドオンの使用方法に関するドキュメント

また、このコマンドは、アドオンをビルドするためのbuild-csAddon スクリプトと、ビルド成果物をクリーニングするためのpackage.json スクリプトをclean-csAddonに追加します。

{
  "scripts": {
    "build-csAddon": "dotnet publish ./csAddon/csAddon.csproj -c Release",
    "clean-csAddon": "dotnet clean ./csAddon/csAddon.csproj"
  }
}

テンプレートには両方の SDK への参照が自動的に含まれるため、Windows API の呼び出しをすぐに開始できます。

アドオンをビルドして、すべてが正しく設定されていることを確認しましょう。

# Build the C# addon
npm run build-csAddon

npx winapp node create-addon (--template フラグなし) を使用して C++ アドオンを作成することもできます。 C++ アドオンは、node-addon-api を使用し、最大のパフォーマンスでWindows API に直接アクセスできるようにします。 その他のオプションについては、チュートリアルまたは完全なコマンド ドキュメントについては、C++ 通知アドオン ガイドを参照してください。

手順 2: Phi Silica を使用して AI 機能を追加する

実際のWindows アプリ SDK API を追加しましょう。Phi Silica AI モデルを使用して、デバイス上でテキストを直接集計します。

csAddon/addon.csを開き、次のコードを追加します。

using System;
using System.Threading.Tasks;
using Microsoft.JavaScript.NodeApi;
using Microsoft.Windows.AI;
using Microsoft.Windows.AI.Text;

namespace csAddon
{
    [JSExport]
    public class Addon
    {
        /// <summary>
        /// Summarizes the provided text using the Phi Silica AI model.
        /// </summary>
        /// <param name="text">The text to summarize</param>
        /// <returns>A summary of the input text</returns>
        [JSExport]
        public static async Task<string> SummarizeText(string text)
        {
            try
            {
                var readyState = LanguageModel.GetReadyState();
                if (readyState is AIFeatureReadyState.Ready or AIFeatureReadyState.NotReady)
                {
                    if (readyState == AIFeatureReadyState.NotReady)
                    {
                        await LanguageModel.EnsureReadyAsync();
                    }

                    using LanguageModel languageModel = await LanguageModel.CreateAsync();
                    TextSummarizer textSummarizer = new TextSummarizer(languageModel);

                    var result = await textSummarizer.SummarizeParagraphAsync(text);

                    return result.Text;
                }

                return "Model is not available";
            }
            catch (Exception ex)
            {
                return $"Error calling Phi Silica API: {ex.Message}";
            }
        }
    }
}

Phi Silica には、NPU 搭載デバイス (Copilot+ PC) を使用したWindows 11が必要です。 互換性のあるハードウェアがない場合、API はモデルが使用できないことを示すメッセージを返します。 このチュートリアルを完了してアプリをパッケージ化することもできます。NPU サポートなしでデバイスが適切に処理されます。

手順 3: C# アドオンをビルドする

次に、アドオンをもう一度ビルドします。

npm run build-csAddon

これにより、 ネイティブ AOT (Ahead-of-Time コンパイル) を使用して C# コードがコンパイルされます。これは次のとおりです。

  • .node バイナリ (ネイティブ アドオン形式) を作成します。
  • 未使用のコードをトリミングしてバンドル サイズを小さくする
  • ターゲット マシンに.NETランタイムは必要ありません。
  • ネイティブ パフォーマンスを提供します

コンパイルされたアドオンは csAddon/dist/csAddon.node

手順 4: Windows API をテストする

次に、メイン プロセスからアドオンを呼び出して、アドオンが機能することを確認しましょう。 src/main.jsを開き、次の手順に従います。

4.1。 C# アドオンを読み込む

これを、ファイルの先頭にある他の require ステートメントと共に追加します。

const csAddon = require('../csAddon/dist/csAddon.node');

4.2. テスト関数を作成する

この関数をファイル内のどこかに追加します (require ステートメントの後)。

const callPhiSilica = async () => {
  console.log('Summarizing with Phi Silica: ')
  const result = await csAddon.Addon.summarizeText("The Windows App Development CLI is a powerful tool that bridges cross-platform development with Windows-native capabilities.");
  console.log('Summary:', result);
};

4.3. 関数を呼び出す

アプリの起動時に API をテストするには、 createWindow() 関数の末尾に次の行を追加します。

callPhiSilica();

アプリを実行すると、概要がコンソールに出力されます。 ここから、アドオンをアプリに統合することができますが、必要に応じて、レンダラー プロセスへの事前読み込みスクリプトを使用してアドインを公開するか、IPC ハンドラーから呼び出すか、メイン プロセスで直接使用するかを指定します。

手順 5: 必要な機能を追加する

Phi Silica API を使用する前に、アプリ マニフェストで必要な機能を宣言する必要があります。 Package.appxmanifestを開き、systemAIModels セクション内に<Capabilities>機能を追加します。

<Capabilities>
  <rescap:Capability Name="runFullTrust" />
  <rescap:Capability Name="systemAIModels" />
</Capabilities>

Tip

Windows API が異なると、さまざまな機能が必要になります。 必要な機能については、API ドキュメントを常に確認してください。 一般的なものには、 microphonewebcamlocationbluetoothなどがあります。

手順 6: デバッグ ID を更新する

マニフェストで参照されている Package.appxmanifest を変更したり、アセット (アプリ アイコンなど) を変更したりするたびに、アプリのデバッグ ID を更新する必要があります。 走れ

npx winapp node add-electron-debug-identity

このコマンド:

  1. Package.appxmanifestを読み取り、アプリの詳細と機能を取得します
  2. electron.exe内でnode_modulesを一時的な ID で登録します
  3. 完全な MSIX パッケージ化なしで ID が必要な API をテストできます

このコマンドは既にセットアップ ガイドで追加した postinstall スクリプトの一部であるため、 npm install後に自動的に実行されます。 ただし、次の場合は必ず手動で実行する必要があります。

  • Package.appxmanifestの変更 (機能、ID、またはプロパティの変更)
  • アプリ資産 (アイコン、ロゴなど) を更新する
  • 依存関係を再インストールまたは更新する

次に、アプリを実行します。

npm start

コンソールの出力を確認します。Phi Silica の概要が印刷されています。

⚠️ 既知の問題: アプリのクラッシュまたは空のウィンドウ (クリックして展開)

電子アプリケーションのパッケージ化が疎である既知のWindowsバグがあり、アプリが起動時にクラッシュしたり、Web コンテンツをレンダリングしたりすることはありません。 この問題はWindowsで修正されましたが、まだすべてのデバイスに反映されていません。

回避策については、 開発環境のセットアップ を参照してください。

次のステップ

おめでとうございます! これで、WINDOWS AI API を呼び出すネイティブ アドオンが正常に作成されました。 🎉

これで、次の準備ができました。

または、他のガイドを調べる:

その他のリソース