Opublikowano: 22 października 2025 r.
| Wyjaśnienie | Sieć | Rozszerzenia | Stan Chrome | Intencja |
|---|---|---|---|---|
| GitHub | Wyświetl | Intencja eksperymentu |
Interfejs Writer API pomaga tworzyć nowe treści zgodne z określonym zadaniem pisania. 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.
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 wersji 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: wbudowane modele mogą działać z procesorem graficznym lub procesorem.
- Procesor graficzny: ponad 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. Połączenia Wi-Fi i Ethernet są domyślnie bez pomiaru, a połączenia komórkowe często są z pomiarem użycia danych.
Dokładny rozmiar Gemini Nano może się różnić w zależności od aktualizacji modelu w przeglądarce. Aby sprawdzić bieżący rozmiar, otwórz stronę chrome://on-device-internals.
Zarejestruj się, aby wziąć udział w testowaniu 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:
- Zaakceptuj zasady Google dotyczące niedozwolonych zastosowań generatywnej AI.
- Otwórz stronę testowania origin interfejsu Writer API.
- Kliknij Zarejestruj i wypełnij formularz. W polu Web origin (Origin internetowy) podaj swój
origin lub identyfikator rozszerzenia
,
chrome-extension://YOUR_EXTENSION_ID. - Aby przesłać formularz, kliknij Zarejestruj.
- Skopiuj podany token i dodaj go do każdej strony internetowej w Twoim origin lub umieść go w manifeście rozszerzenia.
- Zacznij korzystać z interfejsów Writer i Rewriter API.
Więcej informacji o pierwszych krokach z testowaniem origin.
Dodaj obsługę localhost
Aby uzyskać dostęp do interfejsu Writer API na localhost, użyj flag Chrome:
- Ustaw
chrome://flags/#optimization-guide-on-device-modelna Enabled (Włączone). - Ustaw te flagi na Enabled (Włączone) lub Enabled Multilingual (Włączone w wielu językach):
chrome://flags/#prompt-api-for-gemini-nano-multimodal-inputchrome://flags/#writer-api-for-gemini-nano
- 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 postawy treści. Wartość może być ustawiona naformal,neutral(domyślnie) lubcasual.format: formatowanie danych wyjściowych z dozwolonymi wartościamimarkdown(domyślnie) iplain-text.length: długość danych wyjściowych z dozwolonymi wartościamishort(domyślnie),mediumilong.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: dane wyjściowe oparte na żądaniach i strumieniowanie.
Dane wyjściowe oparte na żądaniach
W przypadku danych wyjściowych opartych na żądaniach (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 oparte na żądaniach, 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 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
Tego samego pisarza możesz użyć 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 w elementach iframe z tej samej domeny. Dostęp do interfejsu API można przekazać elementom iframe z innych domen
za pomocą atrybutu zasad dotyczących uprawnień 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>
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 i Rewriter API są aktywnie omawiane i w przyszłości mogą ulec zmianie. Jeśli wypróbujesz ten interfejs API i masz jakieś uwagi, chętnie je poznamy.
- Przeczytaj wyjaśnienie, zadaj pytania i weź udział w dyskusji.
- Sprawdź stan Chrome , aby uzyskać informacje o implementacji interfejsu API w Chrome.
- Jeśli masz uwagi na temat implementacji w Chrome, zgłoś błąd w Chromium.
- Dołącz do programu wcześniejszego dostępu, aby wcześniej poznać nowe interfejsy API i uzyskać dostęp do naszej listy mailingowej.
Poznaj wszystkie wbudowane interfejsy AI, które korzystają z modeli, w tym Gemini Nano i innych modeli eksperckich, w przeglądarce.