Writer API

Dipublikasikan: 22 Oktober 2025

Penjelasan Web Ekstensi Status Chrome Intent
GitHub Uji coba developer Uji coba developer Uji coba developer Uji coba developer View Intent to Experiment

Writer API membantu Anda membuat konten baru yang sesuai dengan tugas penulisan yang ditentukan. Writer API dan Rewriter API adalah bagian dari proposal Writing Assistance APIs.

API partner ini dapat membantu Anda meningkatkan kualitas konten yang dibuat oleh pengguna.

Kasus penggunaan

Tulis konten baru, berdasarkan ide awal dan konteks opsional Anda. Hal ini dapat digunakan untuk:

  • Mendukung pengguna menulis semua jenis konten, seperti ulasan, postingan blog, atau email.
  • Membantu pengguna menulis permintaan dukungan yang lebih baik.
  • Menyusun draf pengantar untuk serangkaian contoh pekerjaan, guna menangkap keterampilan tertentu dengan lebih baik.

Apakah kasus penggunaan Anda tidak ada? Bergabunglah ke program pratinjau awal untuk memberikan masukan.

Mulai

Bergabunglah ke uji coba origin Writer API yang berjalan di Chrome 137 hingga 148.

Meninjau persyaratan hardware

Persyaratan berikut berlaku untuk developer dan pengguna yang mengoperasikan fitur menggunakan API ini di Chrome. Browser lain mungkin memiliki persyaratan pengoperasian yang berbeda.

Language Detector dan Translator APIs berfungsi di Chrome di desktop. API ini tidak berfungsi di perangkat seluler.

The Prompt API, Summarizer API, Writer API, Rewriter API, dan Proofreader API berfungsi di Chrome jika kondisi berikut terpenuhi:

  • Sistem operasi: Windows 10 atau 11; macOS 13+ (Ventura dan yang lebih baru); Linux; atau ChromeOS (dari Platform 16389.0.0 dan yang lebih baru) di Chromebook Plus perangkat. Chrome untuk Android, iOS, dan ChromeOS di perangkat non-Chromebook Plus belum didukung oleh API yang menggunakan Gemini Nano.
  • Penyimpanan: Minimal 22 GB ruang kosong di volume yang berisi profil Chrome Anda.
  • GPU atau CPU: Model bawaan dapat berjalan dengan GPU atau CPU.
    • GPU: Lebih dari 4 GB VRAM.
    • CPU: RAM 16 GB atau lebih dan 4 core CPU atau lebih.
    • Catatan: Prompt API dengan input audio memerlukan GPU.
  • Jaringan: Data tidak terbatas atau koneksi tidak berkuota.

Ukuran pasti Gemini Nano dapat bervariasi saat browser mengupdate model. Untuk menentukan ukuran saat ini, buka chrome://on-device-internals.

Mendaftar ke uji coba origin

Writer API tersedia dalam uji coba origin bersama dengan Rewriter API. Untuk mulai menggunakan API ini:

  1. Buka uji coba origin Writer API.
  2. Klik Register dan isi formulir. Di kolom origin web, berikan origin atau ID ekstensi Anda, chrome-extension://YOUR_EXTENSION_ID.
  3. Untuk mengirim, klik Register.
  4. Salin token yang diberikan, dan tambahkan ke setiap halaman web yang berpartisipasi di origin Anda atau sertakan dalam manifes Ekstensi Anda.
  5. Mulai gunakan Writer dan Rewriter API.

Pelajari lebih lanjut cara memulai uji coba origin.

Menambahkan dukungan ke localhost

Untuk mengakses Writer API di localhost, gunakan flag Chrome:

  1. Tetapkan chrome://flags/#optimization-guide-on-device-model ke Enabled.
  2. Tetapkan flag berikut ke Enabled atau Enabled Multilingual:
    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
    • chrome://flags/#writer-api-for-gemini-nano
  3. Klik Relaunch atau mulai ulang Chrome.

Menggunakan Writer API

Pertama, jalankan deteksi fitur untuk melihat apakah browser mendukung API ini.

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

Writer API, dan semua API AI bawaan lainnya, terintegrasi di browser. Gemini Nano didownload secara terpisah saat pertama kali situs menggunakan API AI bawaan. Dalam praktiknya, jika pengguna telah berinteraksi dengan API bawaan, mereka telah mendownload model ke browser.

Untuk menentukan apakah model siap digunakan, panggil fungsi asinkron Writer.availability(). Jika respons terhadap availability() adalah downloadable, dengarkan progres download dan beri tahu pengguna, karena download mungkin memerlukan waktu.

const availability = await Writer.availability();

Untuk memicu download model dan memulai penulis, periksa aktivasi pengguna dan panggil fungsi Writer.create().

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

Fungsi API

Fungsi create() memungkinkan Anda mengonfigurasi objek penulis baru. Fungsi ini menggunakan objek options opsional dengan parameter berikut:

  • tone: Nada penulisan dapat merujuk ke gaya, karakter, atau sikap konten. Nilai dapat ditetapkan ke formal, neutral (default), atau casual.
  • format: Pemformatan output, dengan nilai yang diizinkan markdown (default) dan plain-text.
  • length: Panjang output, dengan nilai yang diizinkan short (default), medium, dan long.
  • sharedContext: Saat menulis beberapa output, konteks bersama dapat membantu model membuat konten yang lebih selaras dengan ekspektasi Anda.

Contoh berikut menunjukkan cara memulai objek 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}%`);
      });
    }
  });
}

Menetapkan bahasa yang diharapkan

Writer API mendukung beberapa bahasa. Tetapkan bahasa input dan konteks yang diharapkan serta bahasa output yang diharapkan saat membuat sesi. Hal ini memungkinkan browser menolak permintaan jika browser tidak dapat mendukung kombinasi bahasa tertentu.

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."
});

Mulai menulis

Ada dua cara untuk menghasilkan output penulisan dari model: output berbasis permintaan dan streaming.

Output berbasis permintaan

Untuk output berbasis permintaan (atau "non-streaming"), model akan menunggu seluruh input dibuat, memproses input tersebut secara keseluruhan, lalu menghasilkan output.

Untuk mendapatkan output berbasis permintaan, panggil fungsi write() asinkron. Anda harus menyertakan perintah untuk konten yang ingin Anda tulis. Anda dapat menambahkan context opsional untuk memberikan informasi latar belakang model, yang dapat membantu model memenuhi ekspektasi Anda untuk output dengan lebih baik.

// 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",
  },
);

Men-streaming output penulisan

Streaming menawarkan hasil berkelanjutan, secara real-time. Output diperbarui secara bertahap, saat input ditambahkan dan disesuaikan.

Untuk mendapatkan penulis streaming, panggil fungsi writeStreaming() dan ulangi segmen teks yang tersedia dalam streaming. Anda dapat menambahkan context opsional untuk memberikan informasi latar belakang model, yang dapat membantu model memenuhi ekspektasi Anda untuk output dengan lebih baik.

// 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);
}

Membagikan konteks untuk beberapa tugas

Anda mungkin ingin menggunakan writer untuk membuat beberapa konten. Dalam hal ini, sebaiknya tambahkan sharedContext. Misalnya, Anda mungkin ingin membantu peninjau memberikan masukan yang lebih baik dalam komentar.

// 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);
}

Menggunakan kembali penulis

Anda dapat menggunakan penulis yang sama untuk membuat beberapa konten.

// 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)
  ),
);

Menghentikan penulis

Untuk mengakhiri proses penulisan, batalkan pengendali dan hapus penulis.

// 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

Kebijakan Izin, iframe, dan Web Worker

Secara default, Writer API hanya tersedia untuk jendela tingkat atas dan iframe asal yang sama. Akses ke API dapat didelegasikan ke iframe lintas origin menggunakan atribut Kebijakan Izin allow="":

<!--
  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>

Writer API tidak tersedia di Web Worker. Hal ini disebabkan oleh kompleksitas dalam menetapkan dokumen yang bertanggung jawab untuk setiap pekerja guna memeriksa status Kebijakan Izin.

Berinteraksi dan memberikan masukan

Writer dan Rewriter API sedang dalam tahap pembahasan aktif dan dapat berubah di masa mendatang. Jika Anda mencoba API ini dan memiliki masukan, beri tahu kami.

Temukan semua API AI bawaan yang menggunakan model, termasuk Gemini Nano dan model ahli lainnya, di browser.