Zpět na domů

Foundation Models v SwiftUI: lokální AI

Framework Foundation Models umožňuje integrovat lokální jazykové modely Apple do aplikací SwiftUI se streamovou generací odpovědí. Příklad implementuje chatové rozhraní s on-device inference, zajišťuje soukromí a nízkou latenci. Podpora iOS 26+ a vyšší.

SwiftUI + Foundation Models: real-time AI lokálně
Advertisement 728x90

Lokální umělá inteligence v SwiftUI: Integrace Foundation Models se streamovým zpracováním

Framework Foundation Models od Apple umožňuje integrovat lokální jazykové modely do aplikací v SwiftUI. Modely provádějí generování textu, shrnutí a klasifikaci přímo na zařízení bez cloudových dotazů. Třída LanguageModelSession zajišťuje streamování odpovědí pomocí metody streamResponse(to:), což je klíčové pro responsivní uživatelská rozhraní.

Implementace se zaměřuje na zpracování uživatelských dotazů v reálném čase: zadávání textu, odeslání promptu a dynamické aktualizace výstupu při generování fragmentů modelem.

Struktura uživatelského rozhraní pro chatovou interakci

Aplikace je postavena kolem NavigationStack s ScrollView pro odpovědi umělé inteligence a spodní vstupní panel. TextField s modifikátorem glassEffect odpovídá iOS 26. Tlačítko odeslání aktivuje asynchronní úlohu, která blokuje opakované dotazy pomocí stavu inputDisabled.

Google AdInline article slot

Kompletní příklad kódu:

import SwiftUI
import FoundationModels

struct ContentView: View {
    @State private var input: String = ""
    @State private var output: String = ""
    @State private var inputDisabled: Bool = false

    var body: some View {
        NavigationStack {
            ScrollView {
                Text(output)
            }
        }
        .safeAreaBar(edge: .bottom) {
            inputAccessoryView
        }
    }

    private var inputAccessoryView: some View {
        HStack {
            TextField("Zeptejte se mě na cokoliv", text: $input)
                .padding()
                .glassEffect()

            Button {
                sendPrompt()
            } label: {
                Image(systemName: "paperplane")
                    .frame(width: 25, height: 25)
                    .rotationEffect(.degrees(40))
            }
            .buttonStyle(.borderedProminent)
            .controlSize(.mini)
            .disabled(inputDisabled)
            .padding(8)
        }
    }

    private func sendPrompt() {
        Task {
            guard input.isEmpty == false else { return }

            do {
                let session = LanguageModelSession()
                inputDisabled = true

                let streamResponse = session.streamResponse(to: input)

                for try await chunk in streamResponse {
                    self.output = chunk
                }

                inputDisabled = false
            } catch {
                print(error.localizedDescription)
                inputDisabled = false
            }
        }
    }
}

Mechanismus streamové generace

Metoda streamResponse(to:) vrací asynchronní sekvenci fragmentů textu. Cyklus for try await chunk in streamResponse aktualizuje @State var output v každém kroku, což spouští SwiftUI překreslení. To zajišťuje plynulý UX bez blokujících operací uživatelského rozhraní.

Zpracování chyb je implementováno pomocí do-catch: při selhání se vypíše localizedDescription a vstupní pole se odblokuje.

Google AdInline article slot

Klíčové aspekty integrace

  • Streamování: Fragmenty jsou generovány postupně, vhodné pro dlouhé odpovědi; vyžaduje přesné řízení stavu, aby se předešlo race conditions.
  • Soukromí: Všechny výpočty probíhají na zařízení, data neopouštějí zařízení.
  • Podpora platforem: iOS 26+, macOS 26+, tvOS 26+, watchOS 26+.

Co je důležité

  • LanguageModelSession — hlavní třída pro lokální LLM relace s podporou dávkového a streamového zpracování.
  • streamResponse(to:) minimalizuje latenci v uživatelském rozhraní díky přírůstkovým aktualizacím.
  • On-device inference eliminuje síťová zpoždění a náklady na API.
  • SwiftUI @State + Task zajišťují souběžnost bez GCD.
  • glassEffect — nativní modifikátor pro glassmorphism v iOS 26.

Optimalizace výkonu

Pro middle/senior vývojáře: sledujte paměťovou náročnost relací — každá LanguageModelSession načítá model do RAM. Doporučuje se pooling relací nebo opakované použití instancí. Testujte na zařízeních s Neural Engine (A17+ nebo M3+). Streamové zpracování snižuje špičkové zatížení CPU, ale prodlužuje dobu oproti dávkovému režimu.

V produkci přidejte debounce na vstup, historii kontextu a záložní řešení pro zařízení s nižším výkonem.

— Editorial Team

Google AdInline article slot
Advertisement 728x90

Číst dál