На конференции разработчиков 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.