API Writer

Data di pubblicazione: 22 ottobre 2025

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

L'API Writer ti aiuta a creare nuovi contenuti conformi a un'attività di scrittura specifica. L'API Writer e l'API Rewriter fanno parte della proposta delle API di assistenza alla scrittura.

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

Casi d'uso

Scrivi nuovi contenuti in base alla tua idea iniziale e al contesto facoltativo. Questo potrebbe essere utilizzato per:

  • Aiutare gli utenti a scrivere qualsiasi tipo di contenuto, come recensioni, post di blog o email.
  • Aiutare gli utenti a scrivere richieste di assistenza migliori.
  • Scrivere una bozza di introduzione per una serie di esempi di lavoro, per acquisire meglio determinate competenze.

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 Writer 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 sono 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 è ancora supportato 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 Writer è disponibile in una prova dell'origine congiunta con l'API Rewriter. Per iniziare a utilizzare queste API:

  1. Accetta le Norme relative all'uso vietato dell'AI generativa di Google.
  2. Vai alla prova dell'origine dell'API Writer.
  3. Fai clic su Registrati e compila il modulo. Nel campo Origine web, fornisci la tua origine o l'ID dell'estensione, chrome-extension://YOUR_EXTENSION_ID.
  4. Per inviare, fai clic su Registrati.
  5. Copia il token fornito e aggiungilo a ogni pagina web partecipante nella tua origine o includilo in your Extension manifest.
  6. Inizia a utilizzare le API Writer e Rewriter.

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

Aggiungi il supporto a localhost

Per accedere all'API Writer 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 Writer

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

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

L'API Writer 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 Writer.availability(). Se la risposta a availability() è downloadable, ascolta l'avanzamento del download e informa l'utente, poiché il download potrebbe richiedere del tempo.

const availability = await Writer.availability();

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

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

Funzioni API

La funzione create() consente di configurare un nuovo oggetto writer. 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 formal, neutral (valore predefinito) o casual.
  • format: la formattazione dell'output, con i valori consentiti markdown (valore predefinito) e plain-text.
  • length: la lunghezza dell'output, con i valori consentiti short (valore predefinito), medium e long.
  • sharedContext: quando si scrivono più output, un contesto condiviso può aiutare il modello a creare contenuti più in linea con le tue aspettative.

L'esempio seguente mostra come inizializzare un oggetto writer:

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

const available = await Writer.availability();
let writer;
if (available === 'unavailable') {
  // The Writer API isn't usable.
  return;
}
if (available === 'available') {
  // The Writer API can be used immediately .
  writer = await Writer.create(options);
} else {
  // The Writer can be used after the model is downloaded.
  const writer = await Writer.create({
    ...options,
    monitor(m) {
      m.addEventListener("downloadprogress", e => {
        console.log(`Downloaded ${e.loaded * 100}%`);
      });
    }
  });
}

Assegna le lingue previste

L'API Writer supporta più lingue. Imposta le lingue di input e di contesto previste, nonché la lingua di output prevista, 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 writer = await Writer.create({
  tone: "formal",
  expectedInputLanguages: ["en", "ja", "es"],
  expectedContextLanguages: ["en", "ja", "es"],
  outputLanguage: "es",
  sharedContext: "These are requests to write 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 scrivere

Esistono due modi per generare l'output di scrittura 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 write(). Devi includere un prompt per i contenuti che vuoi scrivere. 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 writer = await Writer.create();
const result = await writer.write(
  "An inquiry to my bank about how to enable wire transfers on my account.",
  {
    context: "I'm a longstanding customer",
  },
);

Genera l'output di scrittura in streaming

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

Per ottenere un writer in streaming, chiama la funzione writeStreaming() 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.

// Streaming
const writer = await Writer.create(
  expectedInputLanguages: ["en"],
  expectedContextLanguages: ["en"],
  outputLanguage: "en",
);
const stream = writer.writeStreaming(
  "An inquiry to my bank about how to enable wire transfers on my account.", {
    context: "I'm a longstanding customer",
  },
);
for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

Condividi il contesto per più attività

Potresti voler utilizzare un writer 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 writer = await Writer.create({
    expectedInputLanguages: ["en"],
    expectedContextLanguages: ["en"],
    outputLanguage: "en",
    sharedContext:
      "This is for publishing on [popular website name], a business" +
      "and employment-focused social media platform."
});

const stream = writer.writeStreaming(
  "Write a blog post about how I love all this work on gen AI at Google!" +
  "Mention that there's 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."}
);

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

Riutilizza un writer

Puoi utilizzare lo stesso writer per creare più contenuti.

// Reuse a writer
const writer = await Writer.create({ tone: "formal" });

const reviews = await Promise.all(
  Array.from(
    document.querySelectorAll("#reviews > .review"),
    (reviewEl) => writer.write(reviewEl.textContent)
  ),
);

Interrompi il writer

Per terminare il processo di scrittura, interrompi il controller ed elimina il writer.

// Aborting a writer
const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const writer = await Writer.create({ signal: controller.signal });
await writer.write(reviewEl.textContent, { signal: controller.signal });

// Destroying a writer
writer.destroy();

Demo

Norme relative alle autorizzazioni, iframe e worker web

Per impostazione predefinita, l'API Writer è 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 Writer API by
  setting the `allow="writer"` attribute.
-->
<iframe src="https://cross-origin.example.com/" allow="writer"></iframe>

L'API Writer 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 Norme relative alle autorizzazioni.

Partecipa e condividi feedback

L'API Writer e l'API Rewriter sono in fase di discussione attiva e potrebbero essere modificate in futuro. Se provi questa API e hai feedback, saremo felici di riceverli.

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