Zurück zur Startseite

Foundation Models in SwiftUI: Lokale KI

Das Foundation Models-Framework ermöglicht die Integration von Apples lokalen Sprachmodellen in SwiftUI-Apps mit Streaming-Antwortgenerierung. Das Beispiel implementiert eine Chat-Schnittstelle mit Inferenz auf dem Gerät, die Datenschutz und niedrige Latenz gewährleistet. Unterstützung für iOS 26+ und höher.

SwiftUI + Foundation Models: Echtzeit-KI lokal
Advertisement 728x90

Lokale KI in SwiftUI: Integration von Foundation-Modellen mit Streaming

Apples Foundation-Models-Framework ermöglicht die Integration lokaler Sprachmodelle in SwiftUI-Anwendungen. Diese Modelle führen Textgenerierung, Zusammenfassung und Klassifizierung vollständig auf dem Gerät durch, wodurch Cloud-Anfragen überflüssig werden. Die Klasse LanguageModelSession erleichtert Streaming-Antworten über die Methode streamResponse(to:), was für reaktionsschnelle Benutzeroberflächen entscheidend ist.

Die Implementierung konzentriert sich auf die Echtzeitverarbeitung von Benutzeranfragen: Texteingabe, Prompt-Übermittlung und dynamische Aktualisierung der Ausgabe, während das Modell Textabschnitte generiert.

Schnittstellenstruktur für Chat-Interaktion

Die App basiert auf einem NavigationStack mit einer ScrollView für KI-Antworten und einem unteren Eingabebereich. Ein TextField mit dem glassEffect-Modifikator passt sich an iOS 26 an. Die Senden-Schaltfläche löst eine asynchrone Aufgabe aus und verhindert doppelte Anfragen über den inputDisabled-Status.

Google AdInline article slot

Vollständiger Beispielcode:

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("Frag mich alles", 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
            }
        }
    }
}

Streaming-Generierungsmechanismus

Die Methode streamResponse(to:) gibt eine asynchrone Sequenz von Textabschnitten zurück. Die Schleife for try await chunk in streamResponse aktualisiert die @State var output bei jedem Schritt und löst SwiftUI-Neurendering aus. Dies gewährleistet eine flüssige Benutzererfahrung ohne Blockierung der UI-Operationen.

Die Fehlerbehandlung erfolgt über do-catch: Wenn eine Sitzung fehlschlägt, wird localizedDescription ausgegeben und das Eingabefeld wieder aktiviert.

Google AdInline article slot

Wichtige Integrationsaspekte

  • Streaming: Abschnitte werden inkrementell generiert, geeignet für langfristige Antworten; erfordert präzises Zustandsmanagement, um Race Conditions zu vermeiden.
  • Datenschutz: Alle Berechnungen erfolgen auf dem Gerät, Daten verlassen niemals das Gerät.
  • Plattformunterstützung: iOS 26+, macOS 26+, tvOS 26+, watchOS 26+.

Was wichtig ist

  • LanguageModelSession ist die Hauptklasse für lokale LLM-Sitzungen mit Batch- und Streaming-Unterstützung.
  • streamResponse(to:) minimiert UI-Latenz durch inkrementelle Updates.
  • On-Device-Inferenz eliminiert Netzwerkverzögerungen und API-Kosten.
  • SwiftUI @State + Task ermöglichen Nebenläufigkeit ohne GCD.
  • glassEffect ist ein nativer Modifikator für iOS-26-Glasmorphismus.

Leistungsoptimierung

Für mittlere/senior Entwickler: Überwachen Sie den Speicherverbrauch der Sitzung – jede LanguageModelSession lädt ein Modell in den RAM. Erwägen Sie Sitzungspooling oder Instanzwiederverwendung. Testen Sie auf Geräten mit Neural Engine (A17+ oder M3+). Streaming reduziert die Spitzen-CPU-Auslastung, erhöht jedoch die Dauer im Vergleich zum Batch-Modus.

In der Produktion fügen Sie Input-Debouncing, Kontexthistorie und Fallbacks für leistungsschwache Geräte hinzu.

— Editorial Team

Google AdInline article slot
Advertisement 728x90

Weiterlesen