Ricerca12 minFonte verificata 26 luglio 2026

Da @Generable a SwiftData: una pipeline di qualità di preventivo sul dispositivo

L'architettura di produzione dietro il generatore Foundation Models di RiseHush: streaming tipizzato, rifiuto a più livelli, strumenti locali, persistenza sicura per gli attori e percorsi di fallimento che contano.

Da @Generable a SwiftData: una pipeline di qualità di preventivo sul dispositivo — RiseHush editorial illustration — risehush.comrisehush.com

Il vincolo non era “fai in modo che un modello scriva un preventivo”

Un singolo prompt può produrre una frase. Non può stabilire se il modello del sistema è pronto, mantenere un'interfaccia reattiva, distinguere una riga generata da una citazione storica, impedire a un quasi duplicato di entrare in una libreria o lasciare il prodotto utile quando l'inferenza fallisce. Quelle decisioni circostanti sono la caratteristica.

RiseHush non ha un backend di inferenza. Sui dispositivi Apple Intelligence supportati, l'app invia un messaggio limitato al modello linguistico del sistema integrato nel dispositivo Apple e memorizza un risultato accettato in SwiftData locale. La pagina di intelligence rivolta al prodotto spiega ciò che vede una persona; questo articolo documenta il percorso di implementazione e i suoi limiti. L’API di disponibilità di Apple rimane l’autorità per stabilire se il modello può essere eseguito ora.

"Riproducibile" qui significa che un altro ingegnere può ripetere la matrice di disponibilità, i dispositivi di rifiuto, i percorsi di timeout e i controlli di persistenza. Ciò non significa che un modello linguistico non deterministico restituirà la stessa prosa bit per bit. Questa pagina riporta l'architettura sorgente ispezionata, non nuovi parametri di qualità del dispositivo fisico; nessun risultato del benchmark viene dedotto da uno script di test.

  • Inferenza: modello linguistico del sistema Apple, sul dispositivo.
  • Contratto di output: Un tipo Swift guidato, quindi convalida deterministica.
  • Archiviazione: Righe SwiftData locali contrassegnate come generate.
  • Percorso di rete: Nessun server di generazione RiseHush o modello di terze parti.

[1][2]

Dal prompt alla biblioteca: il percorso produttivo

Questa è l'architettura alla base del generatore di preventivi sul dispositivo di RiseHush come ispezionato nell'origine dell'app corrente. Documenta le porte, i percorsi di errore e i controlli che uno sviluppatore può riprodurre; non è un modello di riferimento o un’affermazione secondo cui ogni bozza è buona.

L'ordine è intenzionale. Controlli economici e spiegabili vengono eseguiti prima di ulteriori inferenze; non avviene alcuna scrittura finché tutte le porte richieste non hanno accettato il candidato. Una risposta trasmessa in streaming è un testo dell'interfaccia provvisorio, non una citazione salvata.

  1. Dimostrare la prontezza

    Il servizio controlla la disponibilità del modello di sistema e la locale richiesta prima di creare una sessione. L'idoneità del dispositivo, lo stato di Apple Intelligence, la preparazione delle risorse modello e il supporto linguistico sono risultati separati.

  2. Vincolare la bozza

    Un tipo Swift @Generable richiede una frase originale, normalmente 10-16 parole e mai più di 18, senza attribuzioni, ribassi, hashtag, emoji o virgolette racchiuse.

  3. Trasmetti in streaming dall'attore principale

    Una nuova LanguageModelSession viene preriscaldata per la richiesta. Gli snapshot strutturati parziali possono aggiornare l'interfaccia mentre il ciclo Foundation Models rimane fuori dall'attore principale.

  4. Rifiuta i fallimenti evidenti

    Prima di qualsiasi giudizio basato su modelli, un cancello deterministico controlla i limiti di frasi e parole, l'accordo linguistico, i frammenti vietati, la punteggiatura avvolgente e i modelli di cliché multilingue.

  5. Prova novità e qualità

    Quando sono disponibili incorporamenti di confronto, i sopravvissuti devono affrontare un controllo semantico quasi duplicato, quindi un giudice guidato separato e un punteggio di distinzione. Una bozza trasmessa in streaming che non raggiunge una soglia richiesta viene scartata anziché mantenuta in modo silenzioso.

  6. Perseverare il sopravvissuto

    I metadati vengono elaborati lontano dall'attore principale. L'inserimento di SwiftData ritorna all'attore principale, etichetta la linea come generata e non di dominio pubblico e ripristina gli inserimenti temporanei se il salvataggio fallisce.

  7. Riutilizzare lo stato locale

    Le superfici dell'app e del sistema utilizzano il preventivo archiviato. I widget leggono i dati persistenti; non riattivano il modello linguistico all'interno di una sequenza temporale di estensione.

[2][3][4][5]

L'uscita guidata restringe la forma; il codice possiede ancora la politica

La bozza è di tipo Swift contrassegnata con@Generable. La sua guida richiede una frase originale, normalmente 10-16 parole con un massimo di 18 parole, e vieta l'attribuzione, le virgolette racchiuse, gli hashtag, gli emoji, il markdown e le interruzioni di riga. Le opzioni di produzione utilizzano la temperatura 0,7 e un limite massimo di 40 token: spazio sufficiente per l'involucro strutturato e una frase breve, senza invitare un output lungo un paragrafo.

Ciò non rende la convalida facoltativa. Apple descrive la generazione guidata come un modo per produrre dati Swift strutturati, non come una garanzia che il contenuto soddisfi tutte le regole del prodotto. RiseHush tratta quindi il valore digitato del modello come una bozza non attendibile. Lo schizzo ridotto di seguito conserva l'ordine di produzione e le soglie omettendo i dettagli relativi a prompt e persistenza specifici dell'app.

Architecture sketch — abridged from the current app sourceswift
@Generable
private struct GeneratedQuoteDraft {
    @Guide(description: "One original sentence; 10–16 words; no attribution")
    var text: String
}

guard availability(locale: locale) == .available else {
    throw GenerationError.unavailable
}

let stream = session.streamResponse(
    to: prompt,
    generating: GeneratedQuoteDraft.self,
    options: generationOptions
)

for try await snapshot in stream {
    yield(snapshot.content.text)          // interface update
}

guard deterministicGate.passes(text, locale: locale),
      await noveltyGate.isNearDuplicate(text) == false,
      await judge.score(text).overall >= 6,
      distinctiveness.score(text).overall >= 5
else {
    throw GenerationError.noCandidate
}

return try persistAsGeneratedQuote(text)

This is explanatory code, not a drop-in package. It intentionally omits app-private prompt construction, error mapping, and SwiftData model definitions.

[4][5]

Perché un secondo passaggio ancora non bastava

Il primo livello di rifiuto è deterministico: output vuoto, residui di prompt vietati, virgolette a capo, limiti di parole e frasi, disaccordo linguistico e cliché multilingue. Un filtro gusto Core ML locale può aggiungere un segnale appreso per inglese, tedesco, spagnolo, francese, italiano e portoghese; viene deliberatamente saltato piuttosto che applicato erroneamente al di fuori di quei locali calibrati.

Successivamente, quando sono disponibili incorporamenti di confronto, un cancello di novità semantica confronta il candidato con un catalogo locale limitato e rifiuta i quasi duplicati a una soglia di similarità coseno di 0,90. Se il catalogo è vuoto o non è possibile produrre un'inclusione, quello strato passa attraverso anziché pretendere che la novità sia stata dimostrata. Una nuova sessione di Foundation Models ottiene quindi punteggi di qualità, originalità e calore complessivi. Quel giudice è una sessione separata che utilizza lo stesso modello di sistema: non un modello indipendente e non una revisione umana. Se non è disponibile, rifiuta o non può produrre output strutturato, un punteggio deterministico fornisce un fallback limitato.

Infine, un punteggio di distinzione premia le immagini concrete, l’azione, la specificità emotiva e l’azione, penalizzando le formule e le recenti ancore negative. L'accettazione attualmente richiede un punteggio della giuria di almeno 6 e un carattere distintivo di almeno 5. Queste sono soglie del prodotto, non una prova di originalità o sicurezza globale.

Le decisioni di produzione e il fallimento che ognuna di esse previene
PreoccupazioneAttuazionePerché esiste
DisponibilitàControllare lo stato del modello e il supporto locale prima di ogni percorso di generazione; registrare il motivo per cui la preparazione non è riuscita.“Compatibile con Apple Intelligence” non significa che il modello sia pronto adesso o supporti la lingua attiva del visitatore.
StrutturaUtilizza @Generable e @Guide per la forma bozza invece di analizzare una risposta JSON inventata.Il tipo Swift è il contratto di output, mentre il codice deterministico possiede ancora le regole del prodotto.
ConcorrenzaMantenere lo streaming del modello e il lavoro sui metadati lontani dall'attore principale; crossback solo per la persistenza del modello locale.Il turno dei modelli Foundation può richiedere pochi secondi, mentre gli oggetti del modello SwiftData rimangono legati all'attore.
QualitàRegole deterministiche di livello, novità semantica, un giudice separato e soglie di distinzione.La generazione guidata restringe la forma; non garantisce la verità, l'originalità, il tono o la qualità del prodotto.
LatenzaPreriscalda solo su superfici in primo piano compatibili con la generazione e applica budget limitati: 45 secondi nell'interfaccia, 20 per Siri, 120 per un pool di sfondo.Una richiesta rivolta all'utente non deve attendere per sempre risorse, limiti di velocità o una lenta svolta del modello.
PersistenzaMemorizzare le righe accettate come record generati localmente, mai come citazioni di autori di dominio pubblico; tornare indietro dopo un salvataggio fallito.La scrittura generata necessita di una provenienza duratura e non deve mai ereditare l’attribuzione di una persona reale.

[7]

Tieni il modello lontano dall'attore principale

Il servizio pubblico restituisce oggetti del modello SwiftData, quindi i suoi punti di ingresso rimangono legati all'attore principale. Il costoso ciclo di risposta dei Foundation Models non lo fa. Ogni richiesta possiede un nuovoLanguageModelSession; lo streaming e il calcolo dei metadati scappano dall'attore principale, con piccoli salti espliciti per segnali immediati e persistenza legati all'attore.

Lo streaming produce istantanee strutturate parziali per l'interfaccia, quindi trasmette il testo finale attraverso le stesse barre di gate, novità, giudizio e distinzione del percorso del pool. Un flusso completato attraversa gli attori tramite un identificatore persistente anziché spostare un modello SwiftData non inviabile. Il chiamante risolve quell'identificatore sul proprio attore.

Viene inserito solo il testo accettato. Il record è stato creato come RiseHush, contrassegnato consource = .generatedeisPublicDomain = false, contrassegnato con le relative impostazioni internazionali e arricchito con metadati calcolati localmente. Se il salvataggio fallisce, gli inserimenti temporanei vengono eliminati prima che l'errore ritorni.

[5][10]

Metti a terra il concierge con tre strumenti di sola lettura

Chiedi a RiseHush non è consentito inventare lo stato della biblioteca di una persona. L'API di chiamata degli strumenti di Apple consente a una sessione di richiedere funzioni dell'app limitate e incorporare i dati restituiti. L'app espone tre strumenti limitati e di sola lettura; nessuno raggiunge un server RiseHush.

Gli argomenti dello strumento e le dimensioni dell'output sono vincolati. La ricerca delle virgolette salvate restituisce al massimo otto risultati, la ricerca nel catalogo al massimo cinque e l'output totale dello strumento è limitato. Lo strumento delle virgolette salvate può restituire elementi corrispondenti recenti, ma non accetta un intervallo di calendario, quindi il prodotto non dovrebbe promettere che il modello possa rispondere "cosa ho salvato la scorsa settimana?"

  • Ricerca preventivo catalogo

    Cerca nel catalogo delle citazioni in bundle per stato d'animo, categoria o tema. Non chiede al modello di inventare una fonte.

  • Ricerca preventivo salvato

    Cerca le citazioni salvate e preferite della persona nella memoria locale.

  • Stato della serie

    Legge la serie di ispirazione locale in modo che Ask RiseHush possa rispondere a una domanda personale limitata.

[6]

Il comportamento in caso di errore fa parte dell'architettura

La disponibilità non è un valore booleano. Un dispositivo compatibile potrebbe ancora avere Apple Intelligence disabilitato, risorse del modello in preparazione o una lingua non supportata dal modello di sistema. La generazione del runtime può anche rifiutarsi, colpire un guardrail, superare il contesto, essere limitata, incontrare una richiesta simultanea, fallire l'analisi strutturata o andare in timeout.

RiseHush mappa questi casi sul comportamento del prodotto finito. La generazione in primo piano ha un budget di 45 secondi, Siri 20 secondi e la generazione del pool in background 120 secondi. La biblioteca curata rimane l'onesto ripiego; l'app non memorizza mai la prosa segnaposto come se un modello avesse avuto successo.

Ramo osservato e comportamento risultante del prodotto
SegnaleComportamento
Dispositivo non idoneo o Apple Intelligence disabilitataLa generazione non è disponibile. La libreria curata esistente rimane utilizzabile senza pretendere che si sia verificata una risposta del modello.
Risorse del modello non pronteLa richiesta segnala uno stato non pronto. Una volta presenti le risorse del modello di Apple, l’inferenza stessa non richiede un server RiseHush.
La lingua richiesta non è supportataUn percorso compatibile con la traduzione può delimitare completamente una bozza inglese e tradurla localmente laddove il framework di traduzione di Apple supporta la coppia; in caso contrario l'app mantiene il fallback curato. Il testo tradotto viene controllato per un risultato non vuoto ma non ripete l'intero gate, novità e stack dei giudici della lingua di destinazione.
Errore di guardrail, rifiuto, limite di velocità, analisi, contesto, concorrenza o timeoutIl percorso di streaming non ruota attraverso un tentativo in linea illimitato. Non restituisce alcun candidato generato e lascia che il prodotto ricada in modo pulito.
Il draft non raggiunge una soglia di qualitàIl percorso del pool finito può provare un'altra bozza; il live streaming si interrompe anziché animare una seconda risposta. Il testo rifiutato non viene salvato.
Il salvataggio di SwiftData fallisceIl servizio rimuove gli inserti temporanei e segnala un errore di persistenza invece di lasciare un preventivo salvato a metà.

[2][3][7]

Un protocollo di riproducibilità, senza risultati inventati

Il protocollo seguente separa l'ispezione della fonte dalla prova del dispositivo attivo. Registra hardware, build del sistema operativo, impostazioni locali, stato di Apple Intelligence, disponibilità del modello, installazione rapida, tempo trascorso, ramo del terminale, motivo del rifiuto e risultato della persistenza per ogni esecuzione. Gli strumenti Foundation Models di Apple possono esporre il comportamento di prompt, strumento, token e latenza durante una sessione reale.

Una versione leggibile dalla macchina è disponibile come protocollo di valutazione dei modelli Foundation (JSON). Contiene la matrice e il contratto sul campo, non misurazioni fabbricate. Quando viene approvata l'esecuzione corrente di un dispositivo fisico, aggiungi le relative righe rese anonime e pubblica i valori aggregati di accettazione, timeout e latenza con il dispositivo e il sistema operativo esatti.

  1. Utilizza hardware compatibile con un sistema operativo supportato. Prova Apple Intelligence abilitato e pronto, disabilitato e ancora in download.
  2. Ripetere con una locale supportata e una locale non supportata; verificare che l'app distingua il supporto del modello dall'idoneità generale del dispositivo.
  3. Una volta pronte le risorse del modello, ripetere l'operazione in modalità aereo e verificare che non sia richiesto alcun endpoint di generazione di RiseHush.
  4. Osservare il testo parziale mentre si interagisce con l'interfaccia; confermare che lo scorrimento e i controlli rimangano reattivi durante la virata del modello.
  5. Fornire contenuti vuoti, con più frasi, troppo lunghi, racchiusi tra virgolette, nella lingua sbagliata, cliché o quasi duplicati; nessuno dovrebbe diventare righe generate salvate.
  6. Attivare il rifiuto del giudice e un timeout finito; confermare che nessuna bozza rifiutata viene mantenuta e che l'esperienza curata rimane disponibile.
  7. Forzare un errore di salvataggio locale in un archivio di prova; confermare che viene eseguito il rollback dei modelli inseriti.
  8. Esercita Siri con il suo budget di tempo più breve e verifica che i widget leggano solo i dati persistenti anziché avviare la generazione nell'estensione.

[8]

Ciò che questa architettura non dimostra

Una pipeline di qualità può rendere visibili i guasti e ridurre la persistenza negativa. Non può trasformare un piccolo modello linguistico sul dispositivo in una fonte storica, né dimostrare che una frase non sia mai stata scritta da nessuna parte, né garantire il gusto. Le linee generate quindi non vengono mai attribuite ad autori storici e non entrano mai nel catalogo di pubblico dominio.

La traduzione merita un avvertimento a parte. Per le impostazioni internazionali non supportate direttamente da Foundation Models, il percorso opzionale supporta completamente una bozza inglese e quindi utilizza il framework di traduzione sul dispositivo Apple dove la coppia è disponibile. Il risultato tradotto viene controllato per una risposta non vuota e persiste con nuovi metadati, ma attualmente non ripete l'intera sequenza di gate, novità e giudizio della lingua di destinazione dopo la traduzione. Questo percorso è un ripiego, non una prova di pari qualità di generazione diretta.

Gli aggiornamenti del modello e del sistema operativo possono modificare la disponibilità, la latenza, il comportamento di rifiuto e la distribuzione dell'output. Apple consiglia di rivedere le istruzioni e la valutazione man mano che i modelli di base cambiano. La matrice di test di RiseHush deve quindi essere rieseguita dopo gli aggiornamenti della piattaforma materiale piuttosto che trattare questa pagina come una prova di riferimento permanente.

  • Il modello di sistema non viene utilizzato come fonte di citazioni storiche o di attribuzione dell'autore.
  • L'output strutturato e un secondo passaggio del modello riducono le modalità di fallimento; non dimostrano che una linea sia profonda, originale in senso globale, adatta a tutti.
  • Lo strato di novità semantica passa quando il suo catalogo delimitato è vuoto o gli incorporamenti di confronto non sono disponibili; riduce i quasi duplicati conosciuti ma non certifica l'originalità globale.
  • La generazione offline dipende dall'hardware compatibile, dall'Apple Intelligence abilitata, dal comportamento linguistico supportato e dalle risorse del modello già pronte.
  • Il filtro gusto Core ML appreso opzionale è calibrato per inglese, tedesco, spagnolo, francese, italiano e portoghese; altre località ricevono ancora i livelli deterministici e basati su modelli che li supportano.
  • Un fallback tradotto localmente non equivale alla generazione diretta della lingua di destinazione: il risultato tradotto corrente non ripete ogni livello di qualità dopo la traduzione.
  • Gli aggiornamenti del sistema operativo e del modello possono modificare la latenza e la distribuzione dell'output, quindi la matrice del dispositivo deve essere eseguita nuovamente dopo le modifiche della piattaforma materiale.
  • Questa pagina descrive l'architettura attuale, non una promessa che ogni superficie della piattaforma esegua i Foundation Models. I widget consumano intenzionalmente risultati persistenti.

[3][9][11]

RiseHush invia richieste di generazione di preventivi al proprio server?

No. Sui dispositivi supportati in cui è disponibile il modello di sistema, la bozza del preventivo e i pass di qualità vengono eseguiti con i framework sul dispositivo Apple. RiseHush non ha endpoint di inferenza per questo percorso.

@Generable garantisce un preventivo buono o originale?

No. Vincola la forma dell'output strutturato. RiseHush applica ancora formattazione deterministica e regole linguistiche, rilevamento semantico quasi duplicato quando sono disponibili incorporamenti di confronto, una sessione di valutazione separata, punteggio di distinzione e comportamento di rifiuto finito.

Un altro sviluppatore può riprodurre l'esatta frase generata?

Non in modo affidabile. L'output del modello linguistico non è deterministico e può cambiare con gli aggiornamenti del modello o del sistema operativo. L'unità riproducibile è il protocollo readiness, fixture, gate, timeout e persistenza, non identico.

Ogni lingua supportata riceve lo stesso percorso di qualità?

No. Le impostazioni internazionali supportate direttamente ricevono il percorso di generazione comune, mentre il filtro Core ML appreso è calibrato per sei lingue. Un fallback opzionale tradotto localmente inizia da una bozza inglese controllata ma non ripete ogni livello di qualità della lingua di destinazione dopo la traduzione.

  1. Apple Developer Documentation — Foundation Models framework overview: direct access to Apple’s on-device language model
  2. Apple Developer Documentation — SystemLanguageModel availability and unavailable reasons
  3. Apple Developer Documentation — supporting languages and locales with Foundation Models
  4. Apple Developer Documentation — generating Swift data structures with guided generation
  5. Apple Developer Documentation — LanguageModelSession, responses, and streaming
  6. Apple Developer Documentation — expanding generation with tool calling
  7. Apple Developer Documentation — improving the safety of generative model output
  8. Apple Developer Documentation — analyzing Foundation Models runtime performance
  9. Apple Developer Documentation — Foundation Models framework updates
  10. Apple Developer Documentation — SwiftData
  11. Apple Developer Documentation — Translation framework