На конференции разработчиков 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/
Добавить комментарий