Een Phi Silica-add-on maken

Deze handleiding laat zien hoe u een systeemeigen C#-invoegtoepassing maakt die de Phi Silicium AI-API aanroept in uw Electron-app. PhiSilium is een klein taalmodel dat lokaal wordt uitgevoerd op Windows 11 apparaten met NPU's (Neural Processing Units).

Vereiste voorwaarden

Voordat u aan deze handleiding begint, moet u het volgende doen:

Opmerking

Als u zich niet op een Copilot+ PC bevindt, kunt u deze handleiding nog steeds volgen om het proces voor het maken van invoegtoepassingen te leren. De code verwerkt apparaten zonder NPU-ondersteuning probleemloos door een bericht te retourneren dat het model niet beschikbaar is.

Stap 1: Een systeemeigen C#-invoegtoepassing maken

Laten we nu een systeemeigen invoegtoepassing maken die Windows API's aanroept. We gebruiken een C#-sjabloon die gebruikmaakt van node-api-dotnet om JavaScript en C# te overbrugmen.

npx winapp node create-addon --template cs

Hiermee maakt u een csAddon/ map met:

  • addon.cs - Uw C#-code die Windows-API's aanroept
  • csAddon.csproj - Project bestand met verwijzingen naar Windows SDK en Windows App SDK
  • README.md - Documentatie over het gebruik van de invoegtoepassing

Met de opdracht wordt ook een build-csAddon script aan uw package.json toegevoegd voor het bouwen van de invoegtoepassing en een clean-csAddon script voor het opschonen van buildartefacten:

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

De sjabloon bevat automatisch verwijzingen naar beide SDK's, zodat u onmiddellijk Windows API's kunt aanroepen.

Laten we controleren of alles correct is ingesteld door de invoegtoepassing te bouwen:

# Build the C# addon
npm run build-csAddon

Opmerking

U kunt ook een C++-invoegtoepassing maken met behulp van npx winapp node create-addon (zonder de --template vlag). C++ invoegtoepassingen gebruiken node-addon-api en bieden directe toegang tot Windows API's met maximale prestaties. Zie de handleiding voor de C++-meldingsinvoegtoepassing voor een overzicht of de volledige opdrachtdocumentatie voor meer opties.

Stap 2: AI-mogelijkheden toevoegen met PhiSilium

We gaan een echte Windows App SDK-API toevoegen. We gebruiken het ai-model PhiSilium om tekst rechtstreeks op het apparaat samen te vatten.

Open csAddon/addon.cs deze code en voeg deze toe:

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}";
            }
        }
    }
}

Opmerking

PhiSilium vereist Windows 11 met een NPU-apparaat (Copilot+ PC). Als u geen compatibele hardware hebt, retourneert de API een bericht dat aangeeft dat het model niet beschikbaar is. U kunt deze zelfstudie nog steeds voltooien en de app verpakken - de app zal apparaten zonder NPU-ondersteuning soepel verwerken.

Stap 3: de C#-invoegtoepassing bouwen

Bouw de invoegtoepassing nu opnieuw:

npm run build-csAddon

Hiermee compileert u uw C#-code met behulp van systeemeigen AOT (compilatie vooraf), die:

  • Maakt een .node binaire bestand (native addon formaat)
  • Verwijdert ongebruikte code voor een kleinere bundel.
  • Vereist geen .NET-runtime op doelcomputers.
  • Biedt systeemeigen prestaties

De gecompileerde invoegtoepassing bevindt zich in csAddon/dist/csAddon.node.

Stap 4: de Windows-API testen

Laten we nu controleren of de invoegtoepassing werkt door deze aan te roepen vanuit het hoofdproces. Open src/main.js en volg deze stappen:

4.1. De C#-invoegtoepassing laden

Voeg dit toe met uw andere require instructies boven aan het bestand:

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

4.2. Een testfunctie maken

Voeg deze functie ergens in uw bestand toe (na de vereiste instructies):

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. De functie aanroepen

Voeg deze regel toe aan het einde van de createWindow() functie om de API te testen wanneer de app wordt gestart:

callPhiSilica();

Wanneer u de app uitvoert, wordt de samenvatting afgedrukt op de console. Vanaf hier kunt u de invoegtoepassing integreren in uw app zoals u wilt - of u deze nu via een preloadscript aan het rendererproces blootstelt, het vanuit IPC-handlers aanroept, of het direct in het main process gebruikt.

Stap 5: Vereiste mogelijkheid toevoegen

Voordat u de Phi Silicium-API kunt gebruiken, moet u de vereiste mogelijkheid declareren in uw app-manifest. Open Package.appxmanifest en voeg de systemAIModels mogelijkheid toe in de <Capabilities> sectie:

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

Tip

Voor verschillende Windows-API's zijn verschillende mogelijkheden vereist. Controleer altijd de API-documentatie om te zien welke mogelijkheden er nodig zijn. Veelvoorkomende zijn onder andere microphone, webcam, locationen bluetooth.

Stap 6: Foutopsporingsidentiteit bijwerken

Wanneer u Package.appxmanifest of assets die in het manifest worden vermeld (zoals app-pictogrammen) wijzigt, moet u de foutopsporingsidentiteit van uw app bijwerken. Rennen:

npx winapp node add-electron-debug-identity

Deze opdracht:

  1. Leest uw Package.appxmanifest gegevens voor het ophalen van app-details en -mogelijkheden
  2. Registreert electron.exe in uw node_modules met een tijdelijke identiteit
  3. Hiermee kunt u API's waarvoor authenticatie vereist is testen zonder volledige MSIX-verpakkingen

Opmerking

Deze opdracht maakt al deel uit van het postinstall script dat we in de installatiehandleiding hebben toegevoegd, dus deze wordt automatisch uitgevoerd na npm install. U moet deze echter handmatig uitvoeren wanneer u het volgende doet:

  • Wijzigen Package.appxmanifest (mogelijkheden, identiteit of eigenschappen wijzigen)
  • App-assets bijwerken (pictogrammen, logo's, enzovoort)
  • Afhankelijkheden opnieuw installeren of bijwerken

Voer nu uw app uit:

npm start

Controleer de console-uitvoer. U ziet dat de phi-siliciumsamenvatting wordt afgedrukt.

⚠️ Bekend probleem: app-crashes of een leeg venster (klik om uit te vouwen)

Er is een bekende Windows-bug bij sparse packaging van Electron-toepassingen die ervoor zorgt dat de app vastloopt bij het starten of geen webinhoud weergeeft. Het probleem is opgelost in Windows, maar is nog niet doorgegeven aan alle apparaten.

Zie inrichting van de ontwikkelomgeving voor een tijdelijke oplossing.

Volgende stappen

Gefeliciteerd! U hebt een systeemeigen invoegtoepassing gemaakt die Windows AI-API's aanroept. 🎉

U kunt nu het volgende doen:

Of bekijk andere handleidingen:

Aanvullende informatiebronnen