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. 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 uchwycić określone umiejętności.
Nie widzisz swojego przypadku użycia? Dołącz do programu wczesnego testowania aby podzielić się opinią.
Pierwsze kroki
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 spełnione są 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. Interfejsy API, które używają modeli podstawowych, nie są jeszcze obsługiwane w Chrome na Androida, iOS i ChromeOS na urządzeniach innych niż Chromebooki Plus.
- 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: 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. Połączenia Wi-Fi i Ethernet są domyślnie bez limitu danych, a połączenia komórkowe są często taryfowe.
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:
- Otwórz stronę testowania origin interfejsu Writer API.
- Kliknij Zarejestruj się i wypełnij formularz. W polu Web origin (Źródło internetowe) podaj swoje
źródło lub identyfikator rozszerzenia
,
chrome-extension://YOUR_EXTENSION_ID. - Aby przesłać formularz, kliknij Zarejestruj się.
- Skopiuj podany token i dodaj go do każdej strony internetowej w Twoim źródle lub uwzględnij go w manifeście rozszerzenia.
- Zacznij korzystać z interfejsów Writer 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:
- Ustaw
chrome://flags/#optimization-guide-on-device-modelna Włączone. - Ustaw te flagi na Włączone lub Włączone (wielojęzyczne):
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 API są zintegrowane z przeglądarką. Model jest pobierany osobno, gdy po raz pierwszy dowolna witryna używa wbudowanego interfejsu AI API. 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ąć pisanie, 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 pisania. 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 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}%`);
});
}
});
}
Przypisz oczekiwane języki
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 tekstu 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łego wejścia, 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, które mogą 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ć strumieniowe dane wyjściowe, wywołaj funkcję writeStreaming() i iteruj po dostępnych segmentach tekstu w strumieniu. Możesz dodać opcjonalny context, aby przekazać modelowi informacje o tle, które mogą 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ępnij kontekst 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życie pisarza
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)
),
);
Zatrzymaj pisarza
Aby zakończyć proces pisania, przerwij kontroler i zniszcz pisarza.
// 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 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 ustanowienia odpowiedzialnego dokumentu dla każdego pracownika w celu sprawdzenia stanu zasad dotyczących uprawnień.
Zaangażuj się i prześlij opinię
Interfejsy Writer 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.
- Przeczytaj wyjaśnienie, zadawaj pytania i bierz udział w dyskusji.
- Sprawdź stan Chrome , aby uzyskać informacje o implementacji interfejsu API w Chrome.
- Jeśli masz uwagi dotyczące implementacji Chrome, zgłoś błąd w Chromium.
- Dołącz do programu wczesnego testowania, aby wcześniej zapoznać się z nowymi interfejsami API i uzyskać dostęp do naszej listy mailingowej.
Poznaj wszystkie wbudowane interfejsy AI API, które używają modeli podstawowych i eksperckich w przeglądarce.