Apple Foundation Models Framework: обзор и первые шаги

от автора

На конференции разработчиков WWDC 2025 Apple представили Foundation Models framework — встроенную в устройства LLM, работающую локально и без доступа к интернету. Модель не увеличивает размер приложения, имеет три миллиона параметров и, по словам Apple, оптимизирована для выполнения специфических задач, таких как обобщение, информирование и классификация, однако не подходит для продвинутых рассуждений. У модели также есть ограничения на контент, описанные на сайте Apple.

Требования и совместимость

Для работы с Foundation Models требуются устройства, поддерживающие Apple AI: iPhone 15 Pro и выше, iPad mini и устройства Apple на чипах Apple Silicon. Для разработки понадобятся Xcode 26 и macOS 26 Tahoe.

Проверка доступности Apple AI

Для проверки доступности модели используется свойство availability с двумя возможными состояниями:

  • .available — модель доступна и готова к работе;

  • .unavailable с указанием причины:

    • .deviceNotEligible — устройство не поддерживает Apple AI;

    • .appleIntelligenceNotEnabled — Apple AI отключен;

    • .modelNotReady — Apple AI включен, но модель еще не загружена.

Apple предлагает использовать отдельный View для проверки статуса:

struct AvailabilityExample: View {     private let model = SystemLanguageModel.default      var body: some View {         switch model.availability {         case .available:             Text("Model is available").foregroundStyle(.green)         case .unavailable(let reason):             Text("Model is unavailable").foregroundStyle(.red)             Text("Reason: \(reason)")         }     } }

Основы работы с моделью

Минимальный код для работы с моделью включает создание сессии и получение ответа на промпт. Важно отметить, что язык обращения к модели должен поддерживаться Apple AI; русский язык не поддерживается.

let session = LanguageModelSession() let response = try await session.respond(to: "Promt example") let content: String = response.content

Также можно задавать предварительные инструкции для поведения модели:

let session = LanguageModelSession(     instructions: """         You are a helpful assistant who always \         responds in rhyme.         """ )

Использование макросов @Generable и @Guide

Foundation Models могут напрямую генерировать пользовательские типы данных, для чего используются макросы:

  • @Generable — аннотирует структуры и перечисления, генерируемые моделью.

  • @Guide — уточняет предназначение и ограничения свойств внутри структур (например, ограничения по количеству элементов в массиве, диапазоны для чисел и регулярные выражения для строк).

@Generable struct SearchSuggestions {     let title: String      @Guide(description: "A list of suggested search terms", .count(4))     let searchTerms: [String] }  let prompt = """     Generate a list of suggested search terms.     """  let response = try await session.respond(     to: prompt,     generating: SearchSuggestions.self )  print(response.content)

Потоковая генерация ответов

Foundation Models позволяют выводить промежуточные результаты по мере генерации с использованием stream:

@State private var searchSuggestions: SearchSuggestions.PartiallyGenerated?  let stream = session.streamResponse(     to: "Generate a list of suggested search terms",     generating: SearchSuggestions.self )  for try await partial in stream {     searchSuggestions = partial }

Протокол Tool для предварительных расчётов

Если необходимо использовать внешние данные (например, погоду или местоположение), используется протокол Tool. Модель автоматически применяет инструменты при необходимости, обеспечивая актуальность данных:

struct GetWeatherTool: Tool {     let name = "getWeather"     let description = "Retrieve the latest weather information for a city"      @Generable     struct Arguments {         @Guide(description: "The city to fetch the weather for")         var city: String     }      func call(arguments: Arguments) async throws -> ToolOutput {         let places = try await CLGeocoder().geocodeAddressString(arguments.city)         let weather = try await WeatherService.shared.weather(for: places.first!.location!)         let temperature = weather.currentWeather.temperature.value         let content = GeneratedContent(properties: ["temperature": temperature])         let output = ToolOutput(content)         return output     } }  let session = LanguageModelSession(     tools: [GetWeatherTool()],     instructions: "Help the user with weather forecasts." )  let response = try await session.respond(     to: "What is the temperature in Cupertino?" )  print(response.content) // It’s 71˚F in Cupertino!

Это основные возможности и способы работы с новым фреймворком Foundation Models от Apple. Дополнительную информацию, включая прогрев модели, оптимизацию и динамические схемы генерации инструкций (DynamicGenerationSchema), можно найти в соответствующих сессиях WWDC.


ссылка на оригинал статьи https://habr.com/ru/articles/922644/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *