Cercetare12 minSursă verificată 26 iulie 2026

De la @Generable la SwiftData: o conductă de calitate a ofertei pe dispozitiv

Arhitectura de producție din spatele generatorului de modele ale fundației de la RiseHush: streaming tip, respingere stratificată, instrumente locale, persistență sigură pentru actor și căile de eșec care contează.

De la @Generable la SwiftData: o conductă de calitate a ofertei pe dispozitiv — RiseHush editorial illustration — risehush.comrisehush.com

Constrângerea nu a fost „faceți un model să scrie un citat”

Un singur prompt poate produce o propoziție. Nu poate stabili dacă modelul de sistem este pregătit, nu poate menține o interfață receptivă, nu poate distinge o linie generată de o cotație istorică, nu poate împiedica intrarea unui duplicat aproape într-o bibliotecă sau nu poate lăsa produsul util atunci când deducerea eșuează. Acele decizii din jur sunt caracteristica.

RiseHush nu are backend de inferență. Pe dispozitivele Apple Intelligence acceptate, aplicația trimite o solicitare delimitată modelului de limbă al sistemului Apple de pe dispozitiv și stochează un rezultat acceptat în SwiftData local. Pagina de informații despre produse explică ceea ce vede o persoană; acest articol documentează calea de implementare și limitele acesteia. API-ul de disponibilitate al Apple rămâne autoritatea pentru a stabili dacă modelul poate rula acum.

„Reproducibil” aici înseamnă că un alt inginer poate repeta matricea de pregătire, dispozitivele de respingere, căile de expirare și verificările de persistență. Nu înseamnă că un model de limbaj nedeterminist va returna aceeași proză bit pentru bit. Această pagină raportează arhitectura sursă inspectată, nu valori noi privind calitatea dispozitivului fizic; nici un rezultat de referință nu este dedus dintr-un script de testare.

  • Inferență:Modelul de limbă a sistemului Apple, pe dispozitiv.
  • Contract de ieșire:Un tip Swift ghidat, apoi validare deterministă.
  • Stocare:rânduri locale SwiftData marcate ca generate.
  • Cale de rețea:Fără server de generație RiseHush sau model terță parte.

[1][2]

De la prompt la bibliotecă: calea de producție

Aceasta este arhitectura din spatele generatorului de cotații RiseHush pe dispozitiv, așa cum este inspectat în sursa actuală a aplicației. Documentează porțile, căile de eșec și verificările pe care un dezvoltator le poate reproduce; nu este un model de referință sau o afirmație că fiecare proiect este bun.

Comanda este deliberată. Verificări ieftine, explicabile, înainte de mai multe concluzii; nicio scriere nu are loc până când fiecare poartă necesară acceptă candidatul. Un răspuns transmis în flux este un text de interfață provizoriu, nu un citat salvat.

  1. Dovediți disponibilitatea

    Serviciul verifică disponibilitatea modelului de sistem și localitatea solicitată înainte de a crea o sesiune. Eligibilitatea dispozitivului, starea Apple Intelligence, pregătirea modelului și suportul pentru limbă sunt rezultate separate.

  2. Constrângeți proiectul

    Un tip @Generable Swift solicită o propoziție originală, în mod normal 10-16 cuvinte și niciodată mai mult de 18, fără atribuire, reducere, hashtag-uri, emoji sau ghilimele de împachetare.

  3. Transmiteți în flux actorul principal

    O nouă LanguageModelSession este preîncălzită pentru cerere. Instantaneele structurate parțial pot actualiza interfața în timp ce bucla Modele de fundație rămâne în afara actorului principal.

  4. Respinge eșecurile evidente

    Înainte de orice judecată bazată pe model, o poartă deterministă verifică limitele de propoziție și de cuvinte, acordul lingvistic, fragmentele interzise, semnele de punctuație și modelele de clișee multilingve.

  5. Testați noutatea și calitatea

    Când sunt disponibile înglobări de comparație, supraviețuitorii se confruntă cu o verificare semantică aproape duplicată, apoi cu un judecător ghidat separat și un scor distinctiv. O versiune nefinalizată transmisă în flux care ratează un prag obligatoriu este renunțată în loc să persistă în tăcere.

  6. Persista supraviețuitorul

    Metadatele sunt calculate departe de actorul principal. Inserarea SwiftData revine la actorul principal, etichetează linia ca fiind generată și nu de domeniu public și derulează înapoi inserările tranzitorii dacă salvarea eșuează.

  7. Reutilizați statul local

    Aplicația și suprafețele sistemului consumă cotația stocată. Widgeturile citesc date persistente; ele nu trezesc modelul de limbaj în interiorul unei cronologie de extensie.

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

Ieșirea ghidată îngustează forma; codul încă deține politica

Schița este de tip Swift marcată@Generable. Ghidul său solicită o propoziție originală, în mod normal 10-16 cuvinte, cu un maxim de 18, și interzice atribuirea, împachetarea ghilimelelor, hashtag-urile, emoji, markdown și rupturi de rând. Opțiunile de producție folosesc o temperatură de 0,7 și un plafon de 40 de jetoane: spațiu suficient pentru învelișul structurat și propoziție scurtă, fără a invita o ieșire cu lungimea de paragraf.

Acest lucru nu face validarea opțională. Apple descrie generarea ghidată ca o modalitate de a produce date Swift structurate, nu o garanție că conținutul respectă fiecare regulă de produs. Prin urmare, RiseHush tratează valoarea introdusă a modelului ca pe o schiță neîncrezătoare. Schița prescurtată de mai jos păstrează ordinea de producție și pragurile, omițând în același timp detaliile de promptare și persistență specifice aplicației.

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]

De ce o a doua trecere tot nu a fost suficientă

Primul strat de respingere este determinist: ieșire goală, reziduuri prompte interzise, ghilimele de împachetare, limite de cuvinte și propoziții, dezacord de limbă și elemente de clișeu multilingv. Un filtru de gust Core ML local poate adăuga un semnal învățat pentru engleză, germană, spaniolă, franceză, italiană și portugheză; este omis în mod deliberat, mai degrabă decât aplicat greșit în afara acelor locații calibrate.

Apoi, atunci când sunt disponibile înglobări de comparație, o poartă de noutate semantică compară candidatul cu un catalog local mărginit și respinge aproape duplicatele la un prag de asemănare cosinus de 0,90. Dacă catalogul este gol sau nu poate fi produsă o încorporare, acel strat trece, mai degrabă decât să pretindă că noutatea a fost dovedită. O sesiune de modele de fundație proaspătă obține apoi nota de calitate generală, originalitate și căldură. Acel judecător este o sesiune separată care utilizează același model de sistem – nu un model independent și nu o analiză umană. Dacă nu este disponibil, refuză sau nu poate produce rezultate structurate, un scor determinist oferă o rezervă limitată.

În cele din urmă, un scor distinctiv recompensează imaginile concrete, acțiunea, specificitatea emoțională și agenția în timp ce penalizează formulele și ancorele negative recente. Acceptarea necesită în prezent un punctaj al arbitrului de cel puțin 6 și un caracter distinctiv de cel puțin 5. Acestea sunt praguri ale produselor, nu o dovadă a originalității sau siguranței globale.

Deciziile de producție și eșecul pe care fiecare îl previne
ÎngrijorareImplementareaDe ce există
DisponibilitateVerificați starea modelului și suportul local înainte de fiecare cale de generație; înregistrați de ce a eșuat pregătirea.„Apple Intelligence capabil” nu înseamnă că modelul este gata acum sau acceptă limbajul activ al vizitatorului.
StructuraUtilizați @Generable și @Guide pentru forma nefinalizată în loc să analizați un răspuns JSON inventat.Tipul Swift este contractul de ieșire, în timp ce codul determinist încă deține reguli de produs.
ConcurențăPăstrați fluxul de model și funcționarea metadatelor departe de actorul principal; cruce înapoi numai pentru persistența modelului local.Turnarea Modelelor Fundației poate dura câteva secunde, în timp ce obiectele modelului SwiftData rămân legate de actor.
CalitateReguli deterministe stratificate, noutate semantică, un judecător separat și praguri de distincție.Generarea ghidată îngustează forma; nu garantează adevărul, originalitatea, tonul sau calitatea produsului.
LatențaPreîncălziți numai pe suprafețele din prim plan capabile de generare și aplicați bugete finite: 45 de secunde în interfață, 20 pentru Siri, 120 pentru un pool de fundal.O solicitare adresată utilizatorului nu trebuie să aștepte pentru totdeauna active, limite de rată sau o schimbare lentă a modelului.
PersistențăStocați liniile acceptate ca înregistrări generate local, niciodată ca citate de autor din domeniul public; derulați înapoi după o salvare eșuată.Scrierea generată are nevoie de proveniență durabilă și nu trebuie să moștenească niciodată atribuțiile unei persoane reale.

[7]

Țineți modelul să se întoarcă departe de actorul principal

Serviciul public returnează obiecte model SwiftData, astfel încât punctele sale de intrare rămân legate de actorul principal. Bucla de răspuns scumpă a modelelor de fundație nu. Fiecare solicitare deține o nouă sesiune de model de limbă; Streamingul și calculul metadatelor fug de actorul principal, cu mici șocuri explicite pentru semnale prompte și persistență legate de actor.

Streamingul oferă instantanee parțial structurate pentru interfață, apoi transmite textul final prin aceleași bare de poartă, de noutate, de judecată și de distincție ca și traseul piscinei. Un flux finalizat încrucișează actori prin identificator persistent, mai degrabă decât mutarea unui model SwiftData care nu poate fi trimis. Apelantul rezolvă acel identificator pe propriul actor.

Se inserează doar textul acceptat. Înregistrarea este creată ca RiseHush, marcatăsursă = .generatedșiisPublicDomain = false, etichetată cu locația sa și îmbogățită cu metadate calculate local. Dacă salvarea eșuează, inserările tranzitorii sunt șterse înainte ca eroarea să revină.

[5][10]

Pământați concierge cu trei instrumente numai pentru citire

Ask RiseHush nu are voie să inventeze starea bibliotecii unei persoane. API-ul de apelare a instrumentelor Apple permite unei sesiuni să solicite funcții restrânse ale aplicației și să încorporeze datele returnate. Aplicația expune trei instrumente limitate, numai pentru citire; niciunul nu ajunge la un server RiseHush.

Argumentele instrumentului și dimensiunile de ieșire sunt constrânse. Căutarea cotației salvate returnează cel mult opt ​​rezultate, căutarea în catalog cel mult cinci și rezultatul total al instrumentului este limitat. Instrumentul de ghilimele salvate poate returna articole care se potrivesc recente, dar nu acceptă o gamă de calendar, așa că produsul nu ar trebui să promită că modelul poate răspunde „ce am salvat săptămâna trecută?”

  • Căutare oferte de catalog

    Caută în catalogul de cotații în funcție de starea de spirit, categorie sau temă. Nu cere modelului să inventeze o sursă.

  • Căutare de cotație salvată

    Caută citatele salvate și preferate ale persoanei în stocarea locală.

  • Stare streak

    Citește seria de inspirație locală, astfel încât Ask RiseHush să poată răspunde la o întrebare personală limitată.

[6]

Comportamentul eșecului face parte din arhitectură

Disponibilitatea nu este booleană. Este posibil ca un dispozitiv compatibil să aibă în continuare Apple Intelligence dezactivată, se pregătesc elemente de model sau o limbă pe care modelul de sistem nu o acceptă. Generarea timpului de execuție poate, de asemenea, să refuze, să lovească o balustradă, să depășească contextul, să fie accelerată, să întâmpine o solicitare concomitentă, să eșueze analiza structurată sau să expire.

RiseHush mapează aceste cazuri la comportamentul produsului finit. Generarea primului plan are un buget de 45 de secunde, Siri 20 de secunde, iar generarea de fond de 120 de secunde. Biblioteca organizată rămâne cinstit de rezervă; aplicația nu stochează niciodată proză substituentă ca și cum un model ar fi reușit.

Ramura observată și comportamentul produsului rezultat
SemnalComportament
Dispozitivul nu este eligibil sau Apple Intelligence este dezactivatăGenerarea este indisponibilă. Biblioteca organizată existentă rămâne utilizabilă fără a pretinde că a avut loc un răspuns model.
Elementele model nu sunt gataSolicitarea raportează o stare nepregătită. Odată ce activele modelului Apple sunt prezente, inferența în sine nu necesită un server RiseHush.
Localizarea solicitată nu este acceptatăO cale capabilă de traducere poate închide complet o versiune nefinalizată în limba engleză și o poate traduce local acolo unde cadrul de traducere Apple acceptă perechea; în caz contrar, aplicația păstrează rezerva selectată. Textul tradus este verificat pentru un rezultat nevid, dar nu repetă întreaga limbă țintă, noutatea și stiva de judecători.
Eroare de gardă, refuz, limită de rată, analiză, context, concurență sau timeoutCalea de streaming nu se rotește printr-o reîncercare nelimitată în linie. Nu returnează niciun candidat generat și lasă produsul să cadă în mod curat.
Schița pierde un prag de calitateCalea bazinului finit poate încerca un alt proiect; fluxul live se întrerupe în loc să anime un al doilea răspuns. Textul respins nu este salvat.
Salvarea SwiftData eșueazăServiciul elimină inserțiile sale tranzitorii și evidențiază o eroare de persistență în loc să lase o cotație salvată pe jumătate.

[2][3][7]

Un protocol de reproductibilitate, fără rezultate inventate

Protocolul de mai jos separă inspecția sursei de proba dispozitivului live. Înregistrați hardware-ul, construcția sistemului de operare, locația, starea Apple Intelligence, pregătirea modelului, fixarea promptă, timpul scurs, ramura terminalului, motivul respingerii și rezultatul persistenței pentru fiecare rulare. Apple’s Foundation Models Instruments poate expune comportamentul prompt, instrument, token și latență în timpul unei sesiuni reale.

O versiune care poate fi citită de mașină este disponibilă ca protocol de evaluare a modelelor fundației(JSON). Conține matricea și contractul de teren, nu măsurători fabricate. Când o rulare curentă a dispozitivului fizic este aprobată, adăugați rândurile anonimizate ale acesteia și publicați valorile agregate de acceptare, timeout și latență cu dispozitivul și sistemul de operare exact.

  1. Utilizați hardware compatibil cu un sistem de operare acceptat. Testați Apple Intelligence activat și gata, dezactivat și încă se descarcă.
  2. Repetați cu o localitate acceptată și o localitate neacceptată; verificați dacă aplicația distinge suportul pentru model de eligibilitatea generală a dispozitivului.
  3. După ce activele modelului sunt gata, repetați în modul Avion și confirmați că nu este necesar niciun punct final de generare RiseHush.
  4. Observați textul parțial în timp ce interacționați cu interfața; confirmați că derularea și comenzile rămân receptive în timpul întoarcerii modelului.
  5. Feed-uri care sunt goale, cu mai multe propoziții, prea lungi, împachetate între ghilimele, într-o limbă greșită, clișeate sau aproape duplicate; niciunul nu ar trebui să devină rânduri generate salvate.
  6. Declanșează respingerea judecătorului și un timeout finit; confirmați că nicio schiță respinsă nu persistă și că experiența organizată rămâne disponibilă.
  7. Forțați o eroare de salvare locală într-un magazin de testare; confirmați că modelele introduse sunt returnate.
  8. Exercitați Siri cu bugetul de timp mai scurt și verificați că widget-urile citesc doar date persistente, mai degrabă decât să înceapă generarea în extensie.

[8]

Ceea ce nu demonstrează această arhitectură

O conductă de calitate poate face vizibilă eșecul și poate reduce persistența proastă. Nu poate transforma un mic model de limbaj pe dispozitiv într-o sursă istorică, nu poate dovedi că o propoziție nu a fost niciodată scrisă nicăieri sau nu poate garanta gustul. Prin urmare, liniile generate nu sunt atribuite niciodată autorilor istorici și nu intră niciodată în catalogul de domeniul public.

Traducerea merită un avertisment separat. Pentru o locație neacceptată direct de Foundation Models, calea opțională închide complet o versiune nefinalizată în limba engleză și apoi folosește cadrul Apple de traducere pe dispozitiv, unde perechea este disponibilă. Rezultatul tradus este verificat pentru un răspuns nevid și a persistat cu metadate noi, dar în prezent nu repetă întreaga limbă țintă, noutatea și secvența de evaluare după traducere. Această cale este o alternativă, nu o dovadă a calității egale de generare directă.

Actualizările modelului și ale sistemului de operare pot modifica disponibilitatea, latența, comportamentul de refuz și distribuția rezultatelor. Apple recomandă revizuirea solicitărilor și evaluării pe măsură ce modelele de bază se schimbă. Prin urmare, matricea de testare a lui RiseHush trebuie reluată după actualizările platformei materiale, mai degrabă decât să trateze această pagină ca o dovadă de referință permanentă.

  • Modelul de sistem nu este folosit ca sursă de fapte de citare istorică sau de atribuire a autorului.
  • Ieșirea structurată și un al doilea model de trecere reduc modurile de eșec; nu demonstrează că o linie este profundă, originală în sens global sau potrivită pentru toată lumea.
  • Stratul de noutate semantică trece atunci când catalogul său mărginit este gol sau înglobările de comparație nu sunt disponibile; reduce aproape duplicatele cunoscute, dar nu certifică originalitatea globală.
  • Generarea offline depinde de hardware compatibil, Apple Intelligence activat, comportamentul lingvistic acceptat și elementele modelului deja pregătite.
  • Filtrul de gust Core ML opțional învățat este calibrat pentru engleză, germană, spaniolă, franceză, italiană și portugheză; alte locații primesc în continuare straturile deterministe și bazate pe model care le suportă.
  • O alternativă tradusă local nu este echivalentă cu generarea directă a limbii țintă: rezultatul tradus curent nu repetă fiecare strat de calitate după traducere.
  • Actualizările sistemului de operare și ale modelului pot modifica latența și distribuția ieșirii, astfel încât matricea dispozitivului trebuie reluată după modificări ale platformei materiale.
  • Această pagină descrie arhitectura actuală, nu o promisiune că fiecare suprafață de platformă rulează Foundation Models. Widgeturile consumă în mod intenționat rezultate persistente.

[3][9][11]

Trimite RiseHush solicitări de generare a cotațiilor către propriul server?

Nu. Pe dispozitivele acceptate în care modelul de sistem este disponibil, proiectul de cotație și permisele de calitate rulează cu cadrele Apple pe dispozitiv. RiseHush nu are un punct final de inferență pentru această cale.

@Generable garantează o cotație bună sau originală?

Nu. Constrânge forma ieșirii structurate. RiseHush aplică în continuare reguli de formatare și limbaj deterministă, detectarea semantică aproape duplicată atunci când sunt disponibile înglobări de comparație, o sesiune separată de jurizare, scorul distinctiv și comportamentul de respingere finit.

Poate un alt dezvoltator să reproducă propoziția exactă generată?

Nu de încredere. Ieșirea modelului de limbă este nedeterministă și se poate modifica cu actualizările modelului sau ale sistemului de operare. Unitatea reproductibilă este protocolul de pregătire, fixare, poarta, timeout și persistență – nu proză identică.

Fiecare limbă acceptată primește calea de calitate identică?

Nu. Localurile acceptate direct primesc calea de generare comună, în timp ce filtrul Core ML învățat este calibrat pentru șase limbi. O alternativă opțională tradusă local începe de la o versiune nefinalizată în limba engleză, dar nu repetă fiecare strat de calitate a limbii țintă după traducere.

  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