Справочник по локальному пакету SDK для Foundry

Локальный пакет SDK Foundry позволяет добавлять функции ИИ в приложения, которые используют локальные модели искусственного интеллекта, с помощью простого и интуитивно понятного API. Пакет SDK абстрагирует сложности управления моделями ИИ и обеспечивает простой интерфейс для интеграции локальных возможностей искусственного интеллекта в ваши приложения. В этом справочнике описаны реализации пакета SDK для C#, C++, JavaScript, Python и Rust.

Пакет SDK не требует установки локального интерфейса командной строки Foundry на компьютере конечных пользователей, что позволяет отправлять приложения без дополнительных действий по настройке для пользователей — ваши приложения являются автономными. Дополнительные преимущества локального пакета SDK для Foundry:

  • Обнаружение оборудования и оптимизация: автоматическая оценка возможностей для GPU, NPU и ЦП.
  • Execution provider management (Windows): автоматическое скачивание и регистрация соответствующих поставщиков выполнения ONNX (CUDA, Vitis, QNN, OpenVINO, TensorRT) на основе возможностей устройств.
  • Поддержка металла с помощью WebGpu (macOS): встроенная поддержка запуска моделей в Apple Silicon с оптимизированной производительностью.
  • Приобретение модели: Беспрепятственная загрузка из каталога моделей Foundry с учетом версий, обновлений и автоматизированным подбором моделей, оптимизированным для оборудования, с поддержкой резервных вариантов.
  • Эффективная среда выполнения: добавляет примерно 20 МБ к размеру приложения, выполняется на устройствах от мобильных телефонов до настольных компьютеров.
  • Совместимость API OpenAI: простая интеграция с моделями и инструментами OpenAI.
  • Необязательный сервер REST: запуск Foundry Local в качестве локальной службы, доступной другими приложениями.

Справочник по пакету SDK для C#

Установка пакетов

dotnet add package Microsoft.AI.Foundry.Local
dotnet add package OpenAI

Примеры C# в репозитории GitHub предварительно настроены. Если вы создаете с нуля, ознакомьтесь со справочником по локальному пакету SDK Foundry для получения дополнительных сведений о настройке проекта C# с помощью Foundry Local.

конфигурация проекта

Примеры репозиториев включают .csproj файл, который автоматически обнаруживает платформу. Если вы создаете проект с нуля, используйте эту конфигурацию в качестве ссылки:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <!-- Windows: target Windows SDK for WinML hardware acceleration -->
  <PropertyGroup Condition="$([MSBuild]::IsOSPlatform('Windows'))">
    <TargetFramework>net9.0-windows10.0.19041.0</TargetFramework>
    <Platforms>ARM64;x64</Platforms>
    <WindowsPackageType>None</WindowsPackageType>
    <EnableCoreMrtTooling>false</EnableCoreMrtTooling>
  </PropertyGroup>

  <!-- Non-Windows: standard .NET -->
  <PropertyGroup Condition="!$([MSBuild]::IsOSPlatform('Windows'))">
    <TargetFramework>net9.0</TargetFramework>
  </PropertyGroup>

  <PropertyGroup Condition="'$(RuntimeIdentifier)'==''">
    <RuntimeIdentifier>$(NETCoreSdkRuntimeIdentifier)</RuntimeIdentifier>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AI.Foundry.Local" />
  </ItemGroup>

  <!-- Linux GPU support -->
  <ItemGroup Condition="'$(RuntimeIdentifier)' == 'linux-x64'">
    <PackageReference Include="Microsoft.ML.OnnxRuntime.Gpu" />
    <PackageReference Include="Microsoft.ML.OnnxRuntimeGenAI.Cuda" />
  </ItemGroup>

  <!-- Shared utilities -->
  <ItemGroup>
    <Compile Include="../Shared/*.cs" />
  </ItemGroup>

</Project>

В следующей таблице описываются ключевые параметры проекта:

Setting Описание
TargetFramework Предназначен для версии .NET, требуемой примером.
RuntimeIdentifier По умолчанию используется идентификатор среды выполнения текущего SDK, что обеспечивает выбор правильных бинарных файлов платформы.
Microsoft.AI.Foundry.Local Пакет локального SDK Foundry для Windows, macOS и Linux.

Быстрый старт

Используйте этот фрагмент кода, чтобы убедиться, что пакет SDK может инициализировать и получить доступ к локальному каталогу моделей.

using Microsoft.AI.Foundry.Local;
using Microsoft.Extensions.Logging;
using System.Linq;

var config = new Configuration
{
  AppName = "app-name",
  LogLevel = Microsoft.AI.Foundry.Local.LogLevel.Information,
};

using var loggerFactory = LoggerFactory.Create(builder =>
{
  builder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Information);
});
var logger = loggerFactory.CreateLogger<Program>();

await FoundryLocalManager.CreateAsync(config, logger);
var manager = FoundryLocalManager.Instance;

var catalog = await manager.GetCatalogAsync();
var models = await catalog.ListModelsAsync();

Console.WriteLine($"Models available: {models.Count()}");

В этом примере выводится количество моделей, доступных для вашего оборудования.

Образцы

Справочник по API

API транскрибирования собственного звука

Пакет SDK для C# включает собственный звуковой клиент для транскрибирования аудиофайлов на устройстве с помощью моделей Whisper. При этом выполняется вывод в процессе без необходимости веб-сервера REST.

Установите аудиоклиент

После загрузки модели Whisper получите звуковой клиент:

var audioClient = await model.GetAudioClientAsync();

Методы транскрибирования звука

Метод Signature Описание
TranscribeAudioStreamingAsync() (string audioFilePath, CancellationToken ct) => IAsyncEnumerable<TranscriptionChunk> Результаты транскрибирования передаются потоком пошагово. Каждый блок имеет Text свойство.

Параметры AudioClient

Недвижимость Тип Описание
Language string Код языка ISO 639-1 (например, "en"). Улучшает точность.
Temperature float Температура выборки (0,0–1.0). Более низкие значения являются более детерминированными.

Пример

var audioClient = await model.GetAudioClientAsync();
audioClient.Settings.Language = "en";
audioClient.Settings.Temperature = 0.0f;

await foreach (var chunk in audioClient.TranscribeAudioStreamingAsync(
    "recording.mp3", CancellationToken.None))
{
    Console.Write(chunk.Text);
}

Ссылки:

Справочник по пакету SDK для JavaScript

Установка пакетов

npm install foundry-local-sdk openai

Быстрый старт

Используйте этот фрагмент кода, чтобы убедиться, что пакет SDK может инициализировать и получить доступ к локальному каталогу моделей.

import { FoundryLocalManager } from 'foundry-local-sdk';

console.log('Initializing Foundry Local SDK...');

const manager = FoundryLocalManager.create({
    appName: 'foundry_local_samples',
    logLevel: 'info'
});
console.log('✓ SDK initialized successfully');

// Explore available models
console.log('\nFetching available models...');
const catalog = manager.catalog;
const models = await catalog.getModels();

console.log(`Found ${models.length} models:`);
for (const model of models) {
    console.log(`  - ${model.alias}`);
}

В этом примере выводится список доступных моделей для оборудования.

Образцы

Справочник по API

Ссылки

Справочник по пакету SDK Python

Установка пакетов

pip install foundry-local-sdk openai

Быстрый старт

Используйте этот фрагмент кода, чтобы убедиться, что пакет SDK может инициализировать и получить доступ к локальному каталогу моделей.

import asyncio
from foundry_local_sdk import Configuration, FoundryLocalManager


async def main():
    config = Configuration(app_name="app-name")
    FoundryLocalManager.initialize(config)
    manager = FoundryLocalManager.instance

    models = manager.catalog.list_models()
    print(f"Models available: {len(models)}")


if __name__ == "__main__":
    asyncio.run(main())

В этом примере выводится количество моделей, доступных для вашего оборудования.

Образцы

  • Для примеров приложений, демонстрирующих использование Foundry Local Python SDK, см. репозиторий GitHub Foundry Local SDK Samples.

Конфигурация

Класс Configuration позволяет настроить поведение пакета SDK:

from foundry_local_sdk import Configuration

config = Configuration(
    app_name="app-name",
    log_level="info",
    model_cache_dir="./foundry_local_data/model_cache",
    web={"urls": "http://127.0.0.1:55588"},
)
Параметр Тип Описание
app_name str Имя приложения.
log_level str Уровень ведения журнала (например, "info", "debug").
model_cache_dir str Каталог для кэшированных моделей.
web dict Конфигурация веб-службы с ключом urls .

Основной API

Метод Описание
FoundryLocalManager.initialize(config) Инициализируйте синглтон-менеджер с помощью Configuration.
FoundryLocalManager.instance Получите доступ к инициализированному экземпляру диспетчера.
manager.catalog.list_models() Список всех доступных моделей в каталоге.
manager.catalog.get_model(alias) Получение модели по псевдониму.
manager.catalog.get_cached_models() Перечисление моделей в локальном кэше.
manager.catalog.get_loaded_models() Список моделей, загруженных в данный момент.
model.download(progress_callback) Загрузите модель (будет пропущено, если уже кэшировано).
model.load() Загрузите модель для вывода.
model.unload() Выгрузите модель.
model.is_cached Проверьте, кэшируется ли модель локально.
model.is_loaded Проверьте, загружена ли модель.

API собственных завершений чата

После загрузки модели получите клиент чата:

client = model.get_chat_client()
Метод Описание
client.complete_chat(messages) Создайте полный чат-ответ.
client.complete_streaming_chat(messages) Потоки блоков ответа в чате.

API транскрибирования собственного звука

После загрузки модели Whisper получите звуковой клиент:

audio_client = model.get_audio_client()
Метод Описание
audio_client.transcribe(file_path) Транскрибирование звукового файла. Возвращает объект со свойством text .

Ссылки:

Справочник по пакету SDK Rust

Установка пакетов

cargo add foundry-local-sdk
cargo add tokio --features full
cargo add tokio-stream anyhow

Быстрый старт

Используйте этот фрагмент кода, чтобы убедиться, что пакет SDK может инициализировать и получить доступ к локальному каталогу моделей.

use foundry_local_sdk::{FoundryLocalConfig, FoundryLocalManager};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let manager = FoundryLocalManager::create(FoundryLocalConfig::new("app-name"))?;

    let models = manager.catalog().get_models().await?;
    println!("Models available: {}", models.len());

    Ok(())
}

В этом примере выводится количество моделей, доступных для вашего оборудования.

Образцы

Конфигурация

Структура FoundryLocalConfig позволяет настроить поведение пакета SDK.

use foundry_local_sdk::FoundryLocalConfig;

let config = FoundryLocalConfig::new("app-name")
    .with_log_level("info")
    .with_model_cache_dir("./foundry_local_data/model_cache")
    .with_web_urls("http://127.0.0.1:55588");

Основной API

Метод Описание
FoundryLocalManager::create(config) Создайте новый менеджер с помощью FoundryLocalConfig.
manager.catalog().get_models().await Список всех доступных моделей.
manager.catalog().get_model(alias).await Получение модели по псевдониму.
manager.catalog().get_cached_models().await Перечисление моделей в локальном кэше.
manager.catalog().get_loaded_models().await Список моделей, загруженных в данный момент.
model.download(callback).await Загрузите модель (будет пропущено, если уже кэшировано).
model.load().await Загрузите модель для вывода.
model.unload().await Выгрузите модель.

API собственных завершений чата

После загрузки модели создайте клиент чата с дополнительными параметрами:

let client = model.create_chat_client()
    .temperature(0.7)
    .max_tokens(256);
Метод Описание
client.complete_chat(&messages, tools).await Создайте полный чат-ответ.
client.complete_streaming_chat(&messages, tools).await Потоки блоков ответа в чате.

Типы сообщений: ChatCompletionRequestSystemMessage, ChatCompletionRequestUserMessage, ChatCompletionRequestMessage.

API транскрибирования собственного звука

После загрузки модели Whisper создайте звуковой клиент:

let audio_client = model.create_audio_client();
Метод Описание
audio_client.transcribe(file_path).await Транскрибирование звукового файла. Возвращает объект с полем text .

Ссылки:

Справочник по SDK для C++

Prerequisites

Пакет SDK для C++ предоставляет обёртку, состоящую только из заголовочных файлов, над собственной средой выполнения Foundry Local. Развернутое приложение не требует Foundry Local CLI или среды выполнения .NET.

Клонируйте пример нативного чата, чтобы начать работу с настроенным проектом CMake:

git clone https://github.com/microsoft-foundry/foundry-samples.git
cd foundry-samples/samples/cpp/foundry-local/native-chat-completions

Для примеров C++ требуется:

  • CMake версии 3.20 или новее.
  • Компилятор C++20.
  • NuGet CLI в вашей PATH.

Настройте и создайте пример:

cmake -S . -B build
cmake --build build --config Release

Во время настройки пример восстанавливает пакет NuGet версии 2.2.1 Microsoft.AI.Foundry.Local.Runtime в build/_packages. Пакет содержит заголовки C++ и нативные библиотеки для Windows, Linux и macOS. Вам не нужен отдельный пакет WinML.

Конфигурация CMake выбирает ресурсы среды выполнения для вашей операционной системы и архитектуры и копирует необходимые собственные библиотеки рядом с исполняемым файлом. В macOS и Linux запустите исполняемый файл из build. В Windows запустите .exe файл из build.

Выберите нативные ресурсы, соответствующие операционной системе и архитектуре вашего приложения:

Операционная система Architecture Идентификатор среды выполнения (RID)
Windows x64 или ARM64 win-x64 или win-arm64
Linux x64 или ARM64 linux-x64 или linux-arm64
macOS Apple silicon (ARM64) osx-arm64

Добавить build/_packages/Microsoft.AI.Foundry.Local.Runtime.2.2.1/build/native/include в путь поиска include-файлов компилятора. Свяжите нативную библиотеку из пакета's build/_packages/Microsoft.AI.Foundry.Local.Runtime.2.2.1/runtimes/<rid>/native каталог:

  • foundry_local.libна Windows.
  • libfoundry_local.so в Linux.
  • libfoundry_local.dylib в macOS.

Разверните соответствующую нативную среду выполнения и библиотеки зависимостей рядом с исполняемым файлом или в пути поиска библиотек платформы. Храните восстановленные версии пакета вместе. Не смешивайте заголовки и нативные библиотеки из разных выпусков.

Быстрый старт

Замените main.cpp в примере следующим кодом, чтобы инициализировать пакет SDK и подсчитать модели в каталоге:

#include <foundry_local/foundry_local_cpp.h>

#include <iostream>

using namespace foundry_local;

int main() {
    try {
        Manager manager{Configuration("app-name")};
        auto models = manager.GetCatalog().GetModels();
        std::cout << "Models available: " << models.size() << "\n";
    } catch (const Error& error) {
        std::cerr << "Foundry Local error [" << error.Code()
                  << "]: " << error.what() << "\n";
        return 1;
    }
    return 0;
}

Пример выводит Models available:, за которым следует число моделей каталога. Не скачивает и не загружает модель. Сохраняйте диспетчер активным при использовании объектов каталогов, моделей или метаданных, полученных из него.

Ссылка: объявления оболочки C++ для Configuration, Manager и Catalog.

Основной API

Оболочка использует идиому RAII (инициализация при получении ресурса) для освобождения нативных дескрипторов, когда объекты выходят из области видимости.

API Описание
Manager{Configuration("app-name")} Инициализировать менеджер с именем приложения.
manager.GetCatalog() Получите каталог моделей.
catalog.GetModels() Перечислите модели в каталоге.
catalog.GetModel(alias) Найдите модель по псевдониму. Проверьте возвращенный указатель перед его использованием.
model->Download() Загрузите модель в локальный кэш.
model->Load() Загрузите модель для вывода.
model->Unload() Выгрузите модель из памяти.
ChatSession::ProcessRequest(request) Запустите запрос чата и верните ответ.

Справочник по API и примеры

Используйте общедоступный заголовочный файл и поддерживаемые примеры для полных рабочих процессов API и инференса: