Criando um complemento Phi Silica

Este guia mostra como criar um complemento nativo em C# que chama a API de IA do Phi Silica em seu aplicativo Electron. O Phi Silica é um modelo de linguagem pequeno que é executado localmente em dispositivos Windows 11 com NPUs (Unidades de Processamento Neural).

Pré-requisitos

Antes de iniciar este guia, verifique se você:

Observação

Se você não estiver em um Copilot+ PC, ainda poderá seguir este guia para aprender o processo de criação do complemento. O código manipulará normalmente dispositivos sem suporte à NPU retornando uma mensagem indicando que o modelo não está disponível.

Etapa 1: Criar um complemento nativo em C#

Agora vem a parte emocionante - vamos criar um complemento nativo que chama APIs do Windows! Usaremos um modelo C# que aproveita o node-api-dotnet para fazer a ponte entre JavaScript e C#.

npx winapp node create-addon --template cs

Isso cria uma csAddon/ pasta com:

  • addon.cs - Seu código C# que chamará APIs do Windows
  • csAddon.csproj – arquivo Project com referências ao SDK do Windows e SDK do Aplicativo Windows
  • README.md - Documentação sobre como usar o complemento

O comando também adiciona um build-csAddon script à sua package.json criação do complemento e um clean-csAddon script para limpar artefatos de build:

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

O modelo inclui automaticamente referências para ambos os SDKs, para que você possa iniciar imediatamente a chamada Windows APIs!

Vamos verificar se tudo está configurado corretamente criando o complemento:

# Build the C# addon
npm run build-csAddon

Observação

Você também pode criar um complemento C++ usando npx winapp node create-addon (sem o --template sinalizador). Os complementos do C++ usam node-addon-api e fornecem acesso direto às APIs Windows com desempenho máximo. Consulte o guia do Complemento de Notificação do C++ para obter um passo a passo ou a documentação completa do comando para obter mais opções.

Etapa 2: Adicionar recursos de IA com o Phi Silica

Vamos adicionar uma API SDK do Aplicativo Windows real– usaremos o modelo de IA Phi Silica para resumir o texto diretamente no dispositivo.

Abra csAddon/addon.cs e adicione este código:

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

Observação

O Phi Silica requer Windows 11 com um dispositivo equipado com NPU (Copilot+ PC). Se você não tiver hardware compatível, a API retornará uma mensagem indicando que o modelo não está disponível. Você ainda pode concluir este tutorial e empacotar o aplicativo– ele manipulará normalmente os dispositivos sem suporte à NPU.

Etapa 3: Criar o complemento do C#

Agora, crie o complemento novamente:

npm run build-csAddon

Isso compila seu código C# usando Native AOT (compilação em tempo antecipado), que:

  • Cria um .node binário (formato de complemento nativo)
  • Corta o código não utilizado para um tamanho de pacote menor
  • Não requer .NET runtime em computadores de destino
  • Fornece desempenho nativo

O complemento compilado estará em csAddon/dist/csAddon.node.

Etapa 4: Testar a API de Windows

Agora, vamos verificar se o complemento funciona chamando-o do processo principal. Abra src/main.js e siga estas etapas:

4.1. Carregar o complemento do C#

Adicione isso com suas outras require declarações na parte superior do arquivo:

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

4.2. Criar uma função de teste

Adicione essa função em algum lugar do arquivo (após as instruções necessárias):

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. Chamar a função

Adicione essa linha no final da createWindow() função para testar a API quando o aplicativo for iniciado:

callPhiSilica();

Quando você executar o aplicativo, o resumo será impresso no console. A partir daqui, você pode integrar o complemento ao seu aplicativo como desejar, seja expondo-o ao processo do renderizador por meio de um script de pré-carregamento, chamando-o a partir dos manipuladores IPC, ou usando-o diretamente no processo principal.

Etapa 5: Adicionar funcionalidade necessária

Antes de usar a API Phi Silica, você precisa declarar a funcionalidade necessária no manifesto do aplicativo. Abra Package.appxmanifest e adicione a systemAIModels funcionalidade dentro da <Capabilities> seção:

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

Dica

ApIs de Windows diferentes exigem recursos diferentes. Sempre verifique a documentação da API para ver quais recursos são necessários. As mais comuns incluem microphone, webcame locationbluetooth.

Etapa 6: Atualizar identidade de depuração

Sempre que você modificar Package.appxmanifest ou alterar ativos referenciados no manifesto (como ícones de aplicativo), será necessário atualizar a identidade de depuração do aplicativo. Execute:

npx winapp node add-electron-debug-identity

Este comando:

  1. Lê o seu Package.appxmanifest para obter detalhes e funcionalidades do aplicativo
  2. Registra electron.exe em sua node_modules com uma identidade temporária
  3. Permite que você teste APIs que exigem identidade sem a necessidade de empacotamento MSIX completo

Observação

Esse comando já faz parte do postinstall script que adicionamos no guia de instalação, portanto, ele é executado automaticamente após npm install. No entanto, você precisa executá-lo manualmente sempre que:

  • Modificar Package.appxmanifest (alterar recursos, identidade ou propriedades)
  • Atualizar ativos do aplicativo (ícones, logotipos etc.)
  • Reinstalar ou atualizar dependências

Agora, execute seu aplicativo:

npm start

Verifique a saída do console – você deve ver o resumo do Phi Silica impresso!

⚠️ Problema Conhecido: Falhas de aplicativo ou janela em branco (clique para expandir)

Há um bug de Windows conhecido com aplicativos Electron de empacotamento esparso que faz com que o aplicativo falhe no início ou não renderize o conteúdo da Web. O problema foi corrigido em Windows mas ainda não foi propagado para todos os dispositivos.

Consulte a configuração do ambiente de desenvolvimento para solução alternativa.

Próximas etapas

Parabéns! Você criou com êxito um complemento nativo que chama APIs de IA do Windows! 🎉

Agora você está pronto para:

Ou explore outros guias:

Recursos adicionais