API Rewriter

Pubblicato il 22 ottobre 2025

Divulgatore Web Estensioni Stato di Chrome Intenzione
GitHub Prova per sviluppatoriProva per sviluppatori Prova per sviluppatoriProva per sviluppatori Visualizza Intenzione di sperimentare

L'API Rewriter ti aiuta a rivedere e ristrutturare il testo. Questa API e l' API Writer fanno parte della proposta delle API di assistenza alla scrittura.

Queste API possono aiutarti a migliorare i contenuti creati dagli utenti.

Casi d'uso

Perfeziona il testo esistente allungandolo, accorciandolo o modificandone il tono. Ad esempio, potresti:

  • Riscrivere una breve email in modo che suoni più educata e formale.
  • Suggerire modifiche alle recensioni dei clienti per aiutare gli altri clienti a comprendere il feedback o rimuovere i contenuti tossici.
  • Formattare i contenuti in modo che soddisfino le aspettative di determinati segmenti di pubblico.

Il tuo caso d'uso non è presente? Partecipa al programma di anteprima per condividere il tuo feedback.

Inizia

Partecipa alla prova dell'origine dell'API Rewriter, in esecuzione in Chrome 137-148.

Esamina i requisiti hardware

Esistono i seguenti requisiti per gli sviluppatori e gli utenti che utilizzano le funzionalità che utilizzano queste API in Chrome. Altri browser potrebbero avere requisiti operativi diversi.

Le API Language Detector e Translator funzionano in Chrome su computer. Queste API non funzionano sui dispositivi mobili.

Le API Prompt, Summarizer, Writer, Rewriter e Proofreader funzionano in Chrome quando vengono soddisfatte le seguenti condizioni:

  • Sistema operativo: Windows 10 o 11; macOS 13+ (Ventura e versioni successive); Linux; o ChromeOS (dalla piattaforma 16389.0.0 e versioni successive) sui dispositivi Chromebook Plus. Chrome per Android, iOS e ChromeOS sui dispositivi non Chromebook Plus non sono ancora supportati dalle API che utilizzano Gemini Nano.
  • Spazio di archiviazione: almeno 22 GB di spazio libero sul volume che contiene il tuo profilo Chrome.
  • GPU o CPU: i modelli integrati possono essere eseguiti con GPU o CPU.
    • GPU: rigorosamente più di 4 GB di VRAM.
    • CPU: almeno 16 GB di RAM e almeno 4 core CPU.
    • Nota: l'API Prompt con input audio richiede una GPU.
  • Rete: dati illimitati o una connessione non a consumo.

Le dimensioni esatte di Gemini Nano possono variare man mano che il browser aggiorna il modello. Per determinare le dimensioni attuali, visita chrome://on-device-internals.

Registrati alla prova dell'origine

L'API Rewriter è disponibile in una prova dell'origine congiunta con l'API Writer. Per iniziare a utilizzare queste API:

  1. Vai alla prova dell'origine dell'API Rewriter.
  2. Fai clic su Registra e compila il modulo. Nel campo Origine web, fornisci la tua origine o l'ID dell'estensione, chrome-extension://YOUR_EXTENSION_ID.
  3. Per inviare, fai clic su Registra.
  4. Copia il token fornito e aggiungilo a ogni pagina web partecipante nella tua origine o includilo nel manifest dell'estensione.
  5. Inizia a utilizzare l'API Rewriter.

Scopri di più su come iniziare a utilizzare le prove dell'origine.

Aggiungi il supporto a localhost

Per accedere all'API Rewriter su localhost, utilizza i flag di Chrome:

  1. Imposta chrome://flags/#optimization-guide-on-device-model su Attivato.
  2. Imposta i seguenti flag su Attivato o Attivato multilingue:
    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
    • chrome://flags/#writer-api-for-gemini-nano
  3. Fai clic su Riavvia o riavvia Chrome.

Utilizza l'API Rewriter

Innanzitutto, esegui il rilevamento delle funzionalità per verificare se il browser supporta queste API.

if ('Rewriter' in self) {
  // The Rewriter API is supported.
}

L'API Rewriter e tutte le altre API AI integrate sono integrate nel browser. Gemini Nano viene scaricato separatamente la prima volta che un sito web utilizza un'API AI integrata. In pratica, se un utente ha già interagito con un'API integrata, ha scaricato il modello nel browser.

Per determinare se il modello è pronto per l'uso, chiama la funzione asincrona Rewriter.availability(). Se la risposta a availability() è stata downloadable, ascolta l'avanzamento del download e informa l'utente, poiché il download potrebbe richiedere del tempo.

const availability = await Rewriter.availability();

Per attivare il download del modello e avviare il rewriter, verifica l'attivazione dell'utente e chiama la funzione Rewriter.create().

const rewriter = await Rewriter.create({
  monitor(m) {
    m.addEventListener("downloadprogress", e => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  }
});

Funzioni API

La funzione create() consente di configurare un nuovo oggetto rewriter. Accetta un oggetto options facoltativo con i seguenti parametri:

  • tone: Tono di scrittura può fare riferimento allo stile, al carattere o all'atteggiamento dei contenuti. Il valore può essere impostato su more-formal, as-is (valore predefinito) o more-casual.
  • format: la formattazione dell'output, con i valori consentiti as-is (valore predefinito), markdown e plain-text.
  • length: la lunghezza dell'output, con i valori consentiti shorter, as-is (valore predefinito) e longer.
  • sharedContext: quando si riscrivono più contenuti, un contesto condiviso può aiutare il modello a creare contenuti più in linea con le tue aspettative.

L'esempio seguente mostra come avviare un oggetto rewriter:

const options = {
  sharedContext: 'This is an email to acquaintances about an upcoming event.',
  tone: 'more-casual',
  format: 'plain-text',
  length: 'shorter',
};

const available = await Rewriter.availability();
let rewriter;
if (available === 'unavailable') {
  // The Rewriter API isn't usable.
  return;
}
if (available === 'available') {
  // The Rewriter API can be used immediately .
  rewriter = await Rewriter.create(options);
} else {
  // The Rewriter can be used after the model is downloaded.
  rewriter = await Rewriter.create(options);
  rewriter.addEventListener('downloadprogress', (e) => {
    console.log(e.loaded, e.total);
  });
}

Assegna le lingue previste

L'API Rewriter supporta più lingue. Imposta le lingue di input, output e contesto previste quando crei la sessione. In questo modo, il browser può rifiutare la richiesta se non è in grado di supportare una combinazione di lingue specifica.

const rewriter = await Rewriter.create({
  tone: "more-formal",
  expectedInputLanguages: ["en", "ja", "es"],
  expectedContextLanguages: ["en", "ja", "es"],
  outputLanguage: "es",
  sharedContext: "These are requests to rewrite messages to teachers in a
    Spanish language program, by students who may speak Spanish, Japanese, or
    English. Staff expect questions to be written in Spanish."
});

Inizia a riscrivere

Esistono due modi per generare l'output dei contenuti dal modello: output basato su richiesta e streaming.

Output basato su richiesta

Per l'output basato su richiesta (o "non in streaming"), il modello attende che venga generato l'intero input, lo elabora nel suo complesso e poi produce l'output.

Per ottenere un output basato su richiesta, chiama la funzione asincrona rewrite(). Devi includere il testo iniziale che vuoi riscrivere. Puoi aggiungere un context facoltativo per fornire al modello informazioni di background, che potrebbero aiutarlo a soddisfare meglio le tue aspettative per l'output.

// Request-based
const rewriter = await Rewriter.create({
  sharedContext: "A review for the Flux Capacitor 3000 from TimeMachines Inc."
});
const result = await rewriter.rewrite(reviewEl.textContent, {
  context: "Avoid any toxic language and be as constructive as possible."
});

Output di riscrittura in streaming

Lo streaming offre risultati in tempo reale. L'output viene aggiornato continuamente man mano che l'input viene aggiunto e modificato.

Per ottenere un rewriter in streaming, chiama la funzione rewriteStreaming() ed esegui l'iterazione sui segmenti di testo disponibili nel flusso. Puoi aggiungere un context facoltativo per fornire al modello informazioni di background, che potrebbero aiutarlo a soddisfare meglio le tue aspettative per l'output.

const rewriter = await Rewriter.create({
  sharedContext: "A review for the Flux Capacitor 3000 from TimeMachines Inc."
});

const stream = rewriter.rewriteStreaming(reviewEl.textContent, {
  context: "Avoid any toxic language and be as constructive as possible.",
  tone: "more-casual",
});

for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

Condividi il contesto per più attività

Potresti voler utilizzare un rewriter per generare più contenuti. In questo caso, è utile aggiungere sharedContext. Ad esempio, potresti voler aiutare i revisori a fornire feedback migliori nei commenti.

// Shared context and per writing task context
const rewriter = await Rewriter.create({
  sharedContext: "This is for publishing on [popular website name], a business and employment-focused social media platform."
});

const stream = rewriter.rewriteStreaming(
  "Love all this work on generative AI at Google! So much to learn and so many new things I can do!",
  {
    context: "The request comes from someone working at a startup providing an e-commerce CMS solution.",
    tone: "more-casual",
  }
);

for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

Riutilizza un rewriter

Puoi utilizzare lo stesso rewriter per modificare più contenuti. Questo può essere particolarmente utile se aggiungi il rewriter a uno strumento di feedback o di commento, per aiutare gli autori a offrire feedback produttivi e utili.

// Reusing a rewriter
const rewriter = await Rewriter.create({
  sharedContext: "A review for the Flux Capacitor 3000 from TimeMachines Inc."
});

const rewrittenReviews = await Promise.all(
  Array.from(
    document.querySelectorAll("#reviews > .review"),
    (reviewEl) => rewriter.rewrite(reviewEl.textContent, {
      context: "Avoid any toxic language and be as constructive as possible.",
      tone: "more-casual",
    })
  ),
);

Interrompi il rewriter

Per terminare il processo di riscrittura, interrompi il controller ed elimina il rewriter.

// Stop a rewriter
const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const rewriter = await Rewriter.create({ signal: controller.signal });
await rewriter.rewrite(reviewEl.textContent, { signal: controller.signal });

// Destroy a rewriter
rewriter.destroy();

Demo

Norme relative alle autorizzazioni, iframe e worker web

Per impostazione predefinita, l'API Rewriter è disponibile solo per le finestre di primo livello e per i relativi iframe della stessa origine. L'accesso all'API può essere delegato a iframe di origine diversa utilizzando l'attributo allow="" delle norme relative alle autorizzazioni:

<!--
  The hosting site at https://main.example.com can grant a cross-origin iframe
  at https://cross-origin.example.com/ access to the Rewriter API by
  setting the `allow="rewriter"` attribute.
-->
<iframe src="https://cross-origin.example.com/" allow="rewriter"></iframe>

L'API Rewriter non è disponibile nei worker web. Ciò è dovuto alla complessità di stabilire un documento responsabile per ogni worker, al fine di controllare lo stato secondo le norme delle autorizzazioni.

Partecipa e condividi feedback

Le API Writer e Rewriter sono in fase di discussione attiva e sono soggette a modifiche in futuro. Se provi questa API e hai feedback, non esitare a comunicarcelo.

Scopri tutte le API AI integrate che utilizzano modelli, tra cui Gemini Nano e altri modelli esperti, nel browser.