Pull to refresh

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

Level of difficultyMedium
Reading time3 min
Views323

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

Tags:
Hubs:
0
Comments0

Articles