Узнайте о требованиях к оборудованию Windows AI API и о том, как настроить устройство для успешного создания приложений с помощью ИИ APIsWindows.
Зависимости
Убедитесь, что компьютер поддерживает Windows AI APIs и все зависимости установлены. Это можно сделать автоматически (рекомендуется) или вручную.
Убедитесь, что устройство является компьютером Copilot+ (мы рекомендуем устройства, перечисленные в руководстве разработчика Copilot+ PCs).
Выполните следующую команду в терминале Windows.
winget configure https://raw.githubusercontent.com/microsoft/winget-dsc/refs/heads/main/samples/Configuration%20files/Learn%20tutorials/Windows%20AI/learn_wcr.winget
В результате запускается файл конфигурации WinGet , выполняющий следующие задачи:
- Проверяет минимальную версию ОС.
- Включает режим разработчика.
- Устанавливает Visual Studio Community Edition с WinUI и другими необходимыми рабочими нагрузками.
- Устанавливает пакет SDK для приложений Windows.
Создание нового приложения
Ниже описано, как создать приложение, использующее Windows AI APIs (выберите вкладку для предпочтительной платформы пользовательского интерфейса).
В Visual Studio создайте новый проект WinUI, выбрав шаблон "Пустое приложение, упакованное (WinUI 3 для настольных ПК)".
В обозревателе решений щелкните правой кнопкой мыши узел проекта, выберите "Свойства>Приложения>Общие", и убедитесь, что целевая платформа установлена на .NET 8.0, а целевая операционная система — 10.0.22621 или более поздней версии.
Измените файл Package.appxmanifest (щелкните правой кнопкой мыши и выберите код представления) и добавьте следующие фрагменты кода.
Возможность systemAIModels для узла <Capabilities> :
<Capabilities>
<systemai:Capability Name="systemAIModels"/>
</Capabilities>
Спецификатор systemai пространства имен для "IgnorableNamespaces" в узле <Package>:
xmlns:systemai="http://schemas.microsoft.com/appx/manifest/systemai/windows10"
IgnorableNamespaces="uap rescap systemai"
Максимальная версия, протестированная в элементе TargetDeviceFamily узла <Dependencies>, должна быть не ниже 10.0.26226.0:
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26226.0" />
Добавьте следующий код в файл WAPROJ, CSPROJ или .vcxproj. Этот шаг необходим для того, чтобы Visual Studio не переопределило протестированную максимальную версию.
<AppxOSMinVersionReplaceManifestVersion>false</AppxOSMinVersionReplaceManifestVersion>
<AppxOSMaxVersionTestedReplaceManifestVersion>false</AppxOSMaxVersionTestedReplaceManifestVersion>
Щелкните правой кнопкой мыши узел проекта и выберите пункт "Управление пакетами NuGet...".
В диспетчере пакетов NuGet установите флажок "Включить предварительную версию " и выберите пакет SDK для приложений Windows версии 1.8.250410001-experimental1. Нажмите кнопку "Установить " или "Обновить".
Убедитесь, что конфигурация сборки имеет значение ARM64.
Создайте и запустите приложение.
Если приложение запускается успешно, перейдите к добавлению первого ИИ API. В противном случае см. раздел "Устранение неполадок".
В Visual Studio создайте проект WPF, выбрав шаблон приложения WPF .
В обозревателе решений щелкните правой кнопкой мыши узел проекта и выберите команду "Изменить файл проекта ", чтобы открыть как XML. Замените все внутри <PropertyGroup> следующим образом:
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows10.0.22621.0</TargetFramework>
<RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
<Nullable>enable</Nullable>
<UseWPF>true</UseWPF>
<ImplicitUsings>enable</ImplicitUsings>
<WindowsPackageType>None</WindowsPackageType>
Измените файл Package.appxmanifest (щелкните правой кнопкой мыши и выберите код представления) и добавьте следующие фрагменты кода.
Возможность systemAIModels для узла <Capabilities> :
<Capabilities>
<systemai:Capability Name="systemAIModels"/>
</Capabilities>
Спецификатор systemai пространства имен для "IgnorableNamespaces" в узле <Package>:
xmlns:systemai="http://schemas.microsoft.com/appx/manifest/systemai/windows10"
IgnorableNamespaces="uap rescap systemai"
Максимальная версия, протестированная в элементе TargetDeviceFamily узла <Dependencies>, должна быть не ниже 10.0.26226.0:
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26226.0" />
Добавьте следующий код в файл WAPROJ, CSPROJ или .vcxproj. Этот шаг необходим для того, чтобы Visual Studio не переопределило протестированную максимальную версию.
<AppxOSMinVersionReplaceManifestVersion>false</AppxOSMinVersionReplaceManifestVersion>
<AppxOSMaxVersionTestedReplaceManifestVersion>false</AppxOSMaxVersionTestedReplaceManifestVersion>
В обозревателе решений щелкните правой кнопкой мыши узел зависимостей и выберите пункт "Управление пакетами Nuget...".
В диспетчере пакетов NuGet установите флажок "Включить предварительную версию " и выберите пакет SDK для приложений Windows версии 1.8.250410001-experimental1. Нажмите кнопку "Установить " или "Обновить".
Создайте и запустите приложение.
Если приложение запускается успешно, перейдите к добавлению первого ИИ API. В противном случае см. раздел "Устранение неполадок".
Дополнительные сведения см. в статье "Настройка проекта WPF для поддержки пакета SDK для приложений Windows".
Создайте проект MAUI, выполнив инструкции по созданию первого приложения .NET MAUI.
В Обозревателе решений щелкните правой кнопкой мыши по узлу > проекта, затем выберите Изменить файл проекта, чтобы открыть его в формате XML.
В нижней части файла проекта добавьте эти строки, чтобы ссылаться на правильную версию пакета Microsoft.WindowsAppSDK (при компиляции для платформы Windows):
<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.8.250410001-experimental1"/>
</ItemGroup>
Замечание
Хотя вы можете щелкнуть узел проекта и выбрать параметр "Управление пакетами NuGet...", чтобы добавить необходимый пакет, если ваше приложение также собирается для других платформ, таких как Android и iOS, необходимо изменить файл проекта, чтобы условно добавить ссылку на пакет для сборок только для Windows.
Добавьте следующий код в файл WAPROJ, CSPROJ или .vcxproj. Этот шаг необходим для того, чтобы Visual Studio не переопределило протестированную максимальную версию.
<AppxOSMinVersionReplaceManifestVersion>false</AppxOSMinVersionReplaceManifestVersion>
<AppxOSMaxVersionTestedReplaceManifestVersion>false</AppxOSMaxVersionTestedReplaceManifestVersion>
В обозревателе решений щелкните правой кнопкой мыши узел проекта, выберите "Свойства" и убедитесь, что целевая платформа Windows Framework имеет значение 10.0.22621 или более поздней версии.
Измените файл Package.appxmanifest (щелкните правой кнопкой мыши и выберите код представления) и добавьте следующие фрагменты кода.
Возможность systemAIModels для узла <Capabilities> :
<Capabilities>
<systemai:Capability Name="systemAIModels"/>
</Capabilities>
Спецификатор systemai пространства имен для "IgnorableNamespaces" в узле <Package>:
xmlns:systemai="http://schemas.microsoft.com/appx/manifest/systemai/windows10"
IgnorableNamespaces="uap rescap systemai"
Максимальная версия, протестированная в элементе TargetDeviceFamily узла <Dependencies>, должна быть не ниже 10.0.26226.0:
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26226.0" />
Создайте и запустите приложение.
Если приложение запускается успешно, перейдите к добавлению первого ИИ API. В противном случае см. раздел "Устранение неполадок".
Добавьте вашего первого ИИ API
При реализации функции с помощью Windows AI APIsприложение должно сначала проверить доступность модели ИИ, поддерживающей эту функцию.
В следующем фрагменте кода показано, как проверить доступность модели и создать ответ.
В MainWindow.xaml добавьте TextBlock для отображения ответа LanguageModel .
<TextBlock x:Name="OutputText" HorizontalAlignment="Center" VerticalAlignment="Center" />
В верхней части MainWindow.xaml.cs добавьте следующую using Microsoft.Windows.AI директиву.
using Microsoft.Windows.AI;
В MainWindow.xaml.cs, замените класс MainWindow следующим кодом, который подтверждает, что LanguageModel доступен, а затем отправляет запрос модели ответить с молекулярной формулой глюкозы.
public sealed partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
InitAI();
}
private async void InitAI()
{
OutputText.Text = "Loading..";
if (LanguageModel.GetReadyState() == AIFeatureReadyState.EnsureNeeded)
{
var result = await LanguageModel.EnsureReadyAsync();
if (result.Status != PackageDeploymentStatus.CompletedSuccess)
{
throw new Exception(result.ExtendedError().Message);
}
}
using LanguageModel languageModel =
await LanguageModel.CreateAsync();
string prompt = "Provide the molecular formula of glucose.";
var result = await languageModel.GenerateResponseAsync(prompt);
OutputText.Text = result.Response;
}
}
Создайте и запустите приложение.
Формула глюкозы должна появиться в текстовом блоке.
В MainWindow.xaml добавьте TextBlock для отображения ответа LanguageModel .
<TextBlock x:Name="OutputText" HorizontalAlignment="Center" VerticalAlignment="Center" />
В верхней части MainWindow.xaml.cs добавьте следующую using Microsoft.Windows.AI директиву.
using Microsoft.Windows.AI;
В файле MainWindow.xaml.cs замените класс MainWindow следующим кодом: он подтверждает доступность LanguageModel, а затем отправляет запрос, в котором просит модель ответить с молекулярной формулой глюкозы.
public sealed partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
InitAI();
}
private async void InitAI()
{
OutputText.Text = "Loading..";
if (LanguageModel.GetReadyState() == AIFeatureReadyState.EnsureNeeded)
{
var result = await LanguageModel.EnsureReadyAsync();
if (result.Status != PackageDeploymentStatus.CompletedSuccess)
{
throw new Exception(result.ExtendedError().Message);
}
}
using LanguageModel languageModel = await LanguageModel.CreateAsync();
string prompt = "Provide the molecular formula for glucose.";
var result = await languageModel.GenerateResponseAsync(prompt);
OutputText.Text = result.Response;
}
}
Создайте и запустите приложение.
Формула глюкозы должна появиться в текстовом блоке.
Дополнительные сведения о добавлении кода платформы для конкретной платформы в приложение MAUI см. в статье "Вызов кода платформы ".
В этом примере мы используем частичные классы и частичные методы, чтобы поместить код Windows в папку Platform\Windows.
В MainPage.xaml.cs добавьте определение частичного метода как partial void ChangeLanguageModelAvailability(); и вызовите этот частичный метод из обработчика OnCounterClicked для CounterBtn кнопки, созданной шаблоном приложения .NET MAUI.
В обозревателе решений разверните узел "Платформы", щелкните правой кнопкой мыши Windows, выберите " Добавить>класс...", введите имя MainPage.cs и нажмите кнопку "Добавить".
Новый MainPage.cs должен отображаться в окне редактора. Вернитесь к MainPage.xaml.cs, чтобы скопировать строку пространства имен.
Вернитесь к новой MainPage.cs и замените строку пространства имен строкой из MainPage.xaml.cs. Это позволяет классу Platform\Windows быть частичным расширением базового класса MainPage .
Чтобы завершить превращение MainPage.cs в расширение, замените в объявлении класса internal на partial.
Добавьте следующий код в частичный метод ChangeLanguageModelAvailability , определенный на шаге 1.
partial void ChangeLanguageModelAvailability()
{
try
{
AIFeatureReadyState readyState = Microsoft.Windows.AI.LanguageModel.GetReadyState();
System.Diagnostics.Debug.WriteLine($"LanguageModel.GetReadyState: {readyState}");
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine($"LanguageModel is not available: {e}");
}
}
Снова запустите приложение, нажмите кнопку «Нажмите на меня» и просмотрите результат в панели вывода отладки Visual Studio.
Продвинутые учебные материалы и APIs
Теперь, когда вы успешно проверили доступность модели, продолжите изучение APIs в различных учебных пособиях по ИИ Windows API.
Устранение неполадок
Если возникают ошибки, обычно это связано с оборудованием или отсутствием требуемой модели.
- Метод GetReadyState проверяет, доступна ли модель, требуемая функцией ИИ, на устройстве пользователя. Этот метод необходимо вызвать перед любым вызовом модели.
- Если модель недоступна на устройстве пользователя, можно вызвать метод EnsureReadyAsync для установки требуемой модели. Установка модели выполняется в фоновом режиме, и пользователь может проверить ход установки на странице параметров>обновления Windows.
- Метод EnsureReadyAsync имеет параметр состояния, который может отображать пользовательский интерфейс загрузки. Если у пользователя имеется неподдерживаемое оборудование, то EnsureReadyAsync завершится с ошибкой.
См. статью об устранении неполадок и часто задаваемых вопросах по API Windows AI для получения дополнительной помощи.
См. также