Zpět na domů

Makra @Generable @Guide FoundationModels Swift

Makra @Generable a @Guide v FoundationModels automatizují generování Swift struktur z jazykových modelů. Podpora streamových session, property-instrukcí a integrace SwiftUI zajišťuje typovou bezpečnost a responzivitu UI. Příklady kódu demonstrují praktické použití.

Generování modelů Swift s @Generable a @Guide
Advertisement 728x90

Makra @Generable a @Guide ve FoundationModels: automatizace generování modelů

Makra @Generable a @Guide ve frameworku FoundationModels umožňují generovat instance Swift struktur na základě výstupu jazykových modelů. Kompilátor syntetizuje protokoly a metody pro streamové zpracování odpovědí z LanguageModelSession. To snižuje boilerplate kód a zajišťuje typovou bezpečnost při práci se strukturovanými daty z LLM.

Použití @Generable na strukturu ji činí kompatibilní s mechanismy generování. Struktura musí konformovat Identifiable pro správnou identifikaci objektů.

@Generable
struct ShoppingItem: Identifiable {
    let id: String
    let value: String
}

Volitelný parametr description upřesňuje kontext generování, nasměrovává LLM k relevantním výsledkům.

Google AdInline article slot
@Generable(description: "Generovat položky pro nákupní seznam")
struct ShoppingItem: Identifiable {
    let id: String
    let value: String
}

Detaily vlastností pomocí @Guide

Makro @Guide se aplikuje na jednotlivé vlastnosti pro poskytnutí instrukcí LLM. To zajišťuje přesnou kontrolu nad obsahem polí bez změny logiky generování modelu.

@Generable(description: "Generovat položky pro nákupní seznam")
struct ShoppingItem: Identifiable {
    let id: String

    @Guide(description: "Název produktu pro nákup")
    let value: String
}

Anotace @Guide se předávají do session jazykového modelu jako direktivy, ovlivňující parsování a validaci výstupů. To je užitečné pro složité struktury s vnořenými typy nebo specifickými formáty dat.

Integrace s LanguageModelSession

Generované modely se integrují do asynchronních úloh přes streamResponse. Metoda přijímá typ výsledku a prompt, vrací stream chunků.

Google AdInline article slot
private func generateShoppingList() {
    let prompt = "Vytvořit 15 položek nákupního seznamu"
    Task {
        do {
            let session = LanguageModelSession()

            let response = session.streamResponse(
                generating: [ShoppingItem].self
            ) {
                prompt
            }

            isGenerating = true

            for try await chunk in response {
                self.shoppingList = chunk.compactMap {
                    guard let id = $0.id, let task = $0.value else {
                        return nil
                    }

                    return ShoppingItem(id: id, value: task)
                }
            }

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

Zpracování chunků zahrnuje filtrování nil hodnot a aktualizaci stavu UI. To zajišťuje responzivitu rozhraní během generování.

  • Streamové zpracování: Chunky přicházejí asynchronně, minimalizují zpoždění.
  • Typová bezpečnost: Kompilátor kontroluje shodu struktury s protokoly.
  • Validace: Guard výrazy odstraňují neúplné objekty.
  • Zpracování chyb: Try-catch zachycuje selhání session.

SwiftUI integrace pro streamové generování

V pohledech SwiftUI se modely spojují s @State. Tlačítko spouští generování, blokuje se po dobu provádění.

struct ContentView: View {
    @State private var shoppingList: [ShoppingItem] = []
    @State private var isGenerating: Bool = false

    var body: some View {
        List(shoppingList) { item in
            Text(item.value)
        }
        .toolbar {
            ToolbarItem(placement: .bottomBar) {
                Button(
                    "Vygenerovat nákupní seznam",
                    systemImage: "cart.fill.badge.plus"
                ) {
                    generateShoppingList()
                }
                .disabled(isGenerating)
            }
        }
    }

    private func generateShoppingList() {
        // ...
    }
}

UI se aktualizuje reaktivně s příchodem dat. To demonstruje reálné použití pro dynamický obsah v aplikacích.

Google AdInline article slot

Co je důležité

  • @Generable syntetizuje protokoly pro streamové generování z LLM do Swift struktur.
  • @Guide poskytuje property-level instrukce pro přesné parsování výstupů.
  • Integrace s LanguageModelSession podporuje asynchronní streaming s typovou bezpečností.
  • Vhodné pro generování seznamů, formulářů a dynamických dat v SwiftUI aplikacích.
  • Snižuje šablonový kód, zachovává kontrolu nad strukturou generovaných objektů.

— Editorial Team

Advertisement 728x90

Číst dál