Вызов Phi Silica из JavaScript (привязки JS)

В этом руководстве показано, как вызвать API сводных данных Windows App SDK Phi Silica непосредственно из Electron JavaScript с помощью созданных привязок JS.

Prerequisites

Перед началом работы с этим руководством убедитесь, что вы:

  • Завершил настройку среды разработки.
  • Протестировано на Copilot+ PC. Для Phi Silica требуется оборудование, поддерживающее локальную языковую модель.

Шаг 1. Добавление возможности ИИ

Phi Silica требует наличия возможности systemAIModels с ограниченным доступом. Добавьте его в Package.appxmanifest внутри <Capabilities>:

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

После изменения манифеста обновите идентификатор отладки:

npx winapp node add-electron-debug-identity

Шаг 2: Вызов Phi Silica из основного процесса Electron

Импортируйте созданные привязки с помощью #winapp/bindings, создайте TextSummarizerи вызовите его в конце createWindow() , чтобы убедиться, что все работает:

Требуется @microsoft/dynwinrt-codegen0.1.0-preview.8 — см. Начало работы с Electron, чтобы узнать об альтернативных вариантах для старых проектов.

// src/index.js (Electron main, CommonJS)
const {
  AIFeatureReadyState,
  LanguageModel,
  TextSummarizer,
} = require('#winapp/bindings');

const callPhiSilica = async () => {
  console.log('Summarizing with Phi Silica:');

  const readyState = LanguageModel.getReadyState();
  if (readyState !== AIFeatureReadyState.Ready && readyState !== AIFeatureReadyState.NotReady) {
    console.log('Summary: Model is not available');
    return;
  }
  if (readyState === AIFeatureReadyState.NotReady) {
    await LanguageModel.ensureReadyAsync();
  }

  const languageModel = await LanguageModel.createAsync();
  try {
    const summarizer = TextSummarizer.createInstance(languageModel);
    const result = await summarizer.summarizeParagraphAsync(
      "The Windows App Development CLI lets Electron apps call Windows-native APIs from JavaScript. Package identity enables features such as notifications and background tasks."
    );
    console.log('Summary:', result.text);
  } finally {
    languageModel.close();
  }
};

const createWindow = () => {
  // ... existing window creation code ...

  // Test the Phi Silica AI API
  callPhiSilica();
};

Note

getReadyState() возвращает один из Ready, NotReady, DisabledByUser или NotSupportedOnCurrentSystem. Вызов ensureReadyAsync() вызывает систему для скачивания и инициализации модели, если она еще не готова.

Шаг 3. Запуск

npm start

Проверьте выходные данные консоли— вы увидите сводку phi Silica, напечатанную!

Если модель недоступна на устройстве, функция записывает в журнал "Summary: Model is not available". Убедитесь, что вы используете поддерживаемое оборудование (Copilot+ PC) и что манифест включает systemAIModels.

Отсюда вы можете интегрировать модуль суммаризации в своё приложение любым удобным для вас способом — предоставив к нему доступ из процесса рендеринга через preload-скрипт, подключив его к обработчикам IPC или вызывая его напрямую в основном процессе.

Дальнейшие шаги

Поздравляем! Теперь можно вызывать Phi Silica напрямую из JavaScript — без дополнения на C# и без этапа сборки node-gyp. 🎉

Теперь вы готовы:

Или ознакомьтесь с другими руководствами:

Дополнительные ресурсы