Interfejs Writer API

Opublikowano: 22 października 2025 r.

Wyjaśnienie Sieć Rozszerzenia Stan Chrome Intencja
GitHub Wersja próbna dla deweloperów Testowanie przez dewelopera Wersja próbna dla deweloperów Testowanie przez dewelopera Wyświetl Intencja przeprowadzenia eksperymentu

Interfejs Writer API pomaga tworzyć nowe treści zgodne z określonym zadaniem. Interfejsy Writer API i Rewriter API są częścią propozycji interfejsów Writing Assistance APIs.

Te interfejsy API partnerów mogą pomóc Ci ulepszyć treści tworzone przez użytkowników.

Przypadki użycia

Twórz nowe treści na podstawie wstępnego pomysłu i opcjonalnego kontekstu. Możesz to wykorzystać do:

  • pomagania użytkownikom w pisaniu dowolnych treści, takich jak opinie, posty na blogu czy e-maile;
  • pomagania użytkownikom w pisaniu lepszych zgłoszeń do pomocy;
  • przygotowywania wstępu do serii próbek pracy, aby lepiej przedstawić określone umiejętności.

Czy brakuje Twojego przypadku użycia? Dołącz do programu wcześniejszego dostępu , aby podzielić się swoją opinią.

Rozpocznij

Dołącz do testowania origin interfejsu Writer API w Chrome w wersjach od 137 do 148.

Sprawdź wymagania sprzętowe

Deweloperzy i użytkownicy, którzy korzystają z funkcji używających tych interfejsów API w Chrome, muszą spełniać te wymagania. Inne przeglądarki mogą mieć inne wymagania dotyczące działania.

Interfejsy Language Detector API i Translator API działają w Chrome na komputerze. Te interfejsy API nie działają na urządzeniach mobilnych.

Interfejsy Prompt API, Summarizer API, Writer API, Rewriter API i Proofreader API działają w Chrome, gdy są spełnione te warunki:

  • System operacyjny: Windows 10 lub 11; macOS 13 lub nowszy (Ventura i nowsze); Linux; ChromeOS (od platformy 16389.0.0) na Chromebookach Plus. Chrome na Androida, iOS i ChromeOS na urządzeniach innych niż Chromebook Plus nie są jeszcze obsługiwane przez interfejsy API, które korzystają z Gemini Nano.
  • Miejsce na dane: co najmniej 22 GB wolnego miejsca na dysku, na którym znajduje się profil Chrome.
  • Procesor graficzny lub procesor: modele wbudowane mogą działać z procesorem graficznym lub procesorem.
    • Procesor graficzny: co najmniej 4 GB pamięci VRAM.
    • Procesor: co najmniej 16 GB pamięci RAM i co najmniej 4 rdzenie procesora.
    • Uwaga: interfejs Prompt API z wejściem audio wymaga procesora graficznego.
  • Sieć: nieograniczona transmisja danych lub połączenie bez limitu danych.

Dokładny rozmiar Gemini Nano może się różnić w zależności od aktualizacji modelu przez przeglądarkę. Aby sprawdzić aktualny rozmiar, otwórz stronę chrome://on-device-internals.

Zarejestruj się, aby skorzystać z testowania origin

Interfejs Writer API jest dostępny w ramach wspólnego testowania origin z interfejsem Rewriter API. Aby zacząć korzystać z tych interfejsów API:

  1. Otwórz stronę testowania origin interfejsu Writer API.
  2. Kliknij Zarejestruj i wypełnij formularz. W polu Web origin (Origin internetowy) podaj swój origin lub identyfikator rozszerzenia , chrome-extension://YOUR_EXTENSION_ID.
  3. Aby przesłać formularz, kliknij Zarejestruj.
  4. Skopiuj podany token i dodaj go do każdej strony internetowej w swoim origin lub umieść go w pliku manifestu rozszerzenia.
  5. Zacznij korzystać z interfejsów Writer API i Rewriter API.

Dowiedz się więcej o pierwszych krokach z testowaniem origin.

Dodaj obsługę localhost

Aby uzyskać dostęp do interfejsu Writer API na localhost, użyj flag Chrome:

  1. Ustaw flagę chrome://flags/#optimization-guide-on-device-model na Enabled (Włączone).
  2. Ustaw te flagi na Enabled (Włączone) lub Enabled Multilingual (Włączone wielojęzyczne):
    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
    • chrome://flags/#writer-api-for-gemini-nano
  3. Kliknij Uruchom ponownie lub uruchom ponownie Chrome.

Korzystanie z interfejsu Writer API

Najpierw uruchom wykrywanie funkcji, aby sprawdzić, czy przeglądarka obsługuje te interfejsy API.

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

Interfejs Writer API i wszystkie inne wbudowane interfejsy AI są zintegrowane z przeglądarką. Gemini Nano jest pobierany osobno, gdy po raz pierwszy dowolna witryna używa wbudowanego interfejsu AI. W praktyce, jeśli użytkownik korzystał już z wbudowanego interfejsu API, pobrał model do przeglądarki.

Aby sprawdzić, czy model jest gotowy do użycia, wywołaj asynchroniczną Writer.availability() funkcję. Jeśli odpowiedź na availability() to downloadable, nasłuchuj postępu pobierania i informuj o nim użytkownika, ponieważ pobieranie może potrwać.

const availability = await Writer.availability();

Aby uruchomić pobieranie modelu i rozpocząć zapisywanie, sprawdź aktywację użytkownika i wywołaj funkcję Writer.create().

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

Funkcje interfejsu API

Funkcja create() umożliwia skonfigurowanie nowego obiektu zapisującego. Przyjmuje ona opcjonalny obiekt options z tymi parametrami:

  • tone: Ton pisania może odnosić się do stylu, charakteru lub nastawienia treści. Wartość może być ustawiona na formal, neutral (domyślnie) lub casual.
  • format: formatowanie danych wyjściowych z dozwolonymi wartościami markdown (domyślnie) i plain-text.
  • length: długość danych wyjściowych z dozwolonymi wartościami short (domyślnie), medium i long.
  • sharedContext: podczas pisania wielu danych wyjściowych wspólny kontekst może pomóc modelowi w tworzeniu treści lepiej dopasowanych do Twoich oczekiwań.

Ten przykład pokazuje, jak zainicjować obiekt 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}%`);
      });
    }
  });
}

Przypisywanie oczekiwanych języków

Interfejs Writer API obsługuje wiele języków. Podczas tworzenia sesji ustaw oczekiwane języki wejściowe i kontekstowe oraz oczekiwany język wyjściowy. Dzięki temu przeglądarka może odrzucić żądanie, jeśli nie obsługuje określonej kombinacji języków.

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

Zacznij pisać

Istnieją 2 sposoby generowania danych wyjściowych przez model: na podstawie żądania i strumieniowo.

Dane wyjściowe na podstawie żądania

W przypadku danych wyjściowych na podstawie żądania (czyli „niestrumieniowych”) model czeka na wygenerowanie całych danych wejściowych, przetwarza je w całości, a następnie generuje dane wyjściowe.

Aby uzyskać dane wyjściowe na podstawie żądania, wywołaj asynchroniczną funkcję write(). Musisz podać prompt dotyczący treści, które chcesz napisać. Możesz dodać opcjonalny context, aby przekazać modelowi informacje o tle, co może pomóc mu lepiej spełnić Twoje oczekiwania dotyczące danych wyjściowych.

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

Strumieniowe dane wyjściowe

Strumieniowanie zapewnia ciągłe wyniki w czasie rzeczywistym. Dane wyjściowe są aktualizowane przyrostowo w miarę dodawania i dostosowywania danych wejściowych.

Aby uzyskać strumieniowy moduł zapisujący, wywołaj funkcję writeStreaming() i iteruj po dostępnych segmentach tekstu w strumieniu. Możesz dodać opcjonalny context, aby przekazać modelowi informacje o tle, co może pomóc mu lepiej spełnić Twoje oczekiwania dotyczące danych wyjściowych.

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

Udostępnianie kontekstu na potrzeby wielu zadań

Możesz użyć writer, aby wygenerować wiele treści. W takim przypadku warto dodać sharedContext. Możesz na przykład pomóc recenzentom w przekazywaniu lepszych opinii w komentarzach.

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

Ponowne używanie zapisującego

Możesz użyć tego samego pisarza do utworzenia wielu treści.

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

Zatrzymywanie zapisującego

Aby zakończyć proces pisania, przerwij kontroler i zniszcz zapisującego.

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

Prezentacja

Zasady dotyczące uprawnień, elementy iframe i Web Workers

Domyślnie interfejs Writer API jest dostępny tylko w oknach najwyższego poziomu i ich elementach iframe z tej samej domeny. Dostęp do interfejsu API można przekazać elementom iframe z innych domen za pomocą atrybutu allow="" w zasadach dotyczących uprawnień:

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

Interfejs Writer API nie jest dostępny w Web Workers. Wynika to ze złożoności ustanawiania odpowiedzialnego dokumentu dla każdego pracownika w celu sprawdzenia stanu zgodności z zasadami dotyczącymi uprawnień.

Zaangażuj się i prześlij opinię

Interfejsy Writer API i Rewriter API są aktywnie omawiane i mogą ulec zmianie w przyszłości. Jeśli wypróbujesz ten interfejs API i masz jakieś uwagi, chętnie je poznamy.

Poznaj wszystkie wbudowane interfejsy AI, które korzystają z modeli, w tym Gemini Nano i innych modeli eksperckich, w przeglądarce.