Publicado el 22 de octubre de 2025
| Explicativa | Web | Extensiones | Estado de Chrome | Intención |
|---|---|---|---|---|
| GitHub | Ver | Intención de experimentar |
La API de Writer te ayuda a crear contenido nuevo que se ajuste a una tarea de escritura especificada. La API de Writer y la API de Rewriter forman parte de la propuesta de las APIs de Writing Assistance.
Estas APIs de socios pueden ayudarte a mejorar el contenido creado por los usuarios.
Casos de uso
Escribe contenido nuevo según tu idea inicial y el contexto opcional. Esto se podría usar para lo siguiente:
- Ayudar a los usuarios a escribir cualquier tipo de contenido, como reseñas, entradas de blog o correos electrónicos
- Ayudar a los usuarios a escribir mejores solicitudes de asistencia
- Redactar una introducción para una serie de muestras de trabajo para captar mejor ciertas habilidades
¿Falta tu caso de uso? Únete al programa de versión preliminar anticipada para compartir tus comentarios.
Comenzar
Únete a la prueba de origen de la API de Writer que se ejecuta en Chrome 137 a 148.
Revisa los requisitos de hardware
Existen los siguientes requisitos para los desarrolladores y los usuarios que operan funciones con estas APIs en Chrome. Es posible que otros navegadores tengan requisitos operativos diferentes.
Las APIs de Language Detector y Translator funcionan en Chrome en computadoras de escritorio. Estas APIs no funcionan en dispositivos móviles.
Las APIs de Prompt, Summarizer, Writer, Rewriter y Proofreader funcionan en Chrome cuando se cumplen las siguientes condiciones:
- Sistema operativo: Windows 10 o 11; macOS 13 o versiones posteriores (Ventura y versiones posteriores); Linux; o ChromeOS (desde la plataforma 16389.0.0 y versiones posteriores) en Chromebook Plus dispositivos. Las APIs que usan Gemini Nano aún no admiten Chrome para Android, iOS y ChromeOS en dispositivos que no sean Chromebook Plus.
- Almacenamiento: Al menos 22 GB de espacio libre en el volumen que contiene tu perfil de Chrome
- GPU o CPU: Los modelos integrados se pueden ejecutar con GPU o CPU.
- GPU: Estrictamente más de 4 GB de VRAM
- CPU: 16 GB de RAM o más y 4 núcleos de CPU o más.
- Nota: La API de Prompt con entrada de audio requiere una GPU.
- Red: Datos ilimitados o una conexión sin uso medido
El tamaño exacto de Gemini Nano puede variar a medida que el navegador actualiza el modelo. Para determinar el tamaño actual, visita chrome://on-device-internals.
Regístrate en la prueba de origen
La API de Writer está disponible en una prueba de origen conjunta con la API de Rewriter. Para comenzar a usar estas APIs, haz lo siguiente:
- Acepta la Política de Uso Prohibido de IA Generativas de Google.
- Ve a la prueba de origen de la API de Writer.
- Haz clic en Registrarse y completa el formulario. En el campo Origen web, proporciona tu
origen o ID de extensión,
chrome-extension://YOUR_EXTENSION_ID. - Para enviarla, haz clic en Registrarse.
- Copia el token proporcionado y agrégalo a todas las páginas web participantes de tu origen o inclúyelo en el manifiesto de la extensión.
- Comienza a usar las APIs de Writer y Rewriter.
Obtén más información para comenzar a usar las pruebas de origen.
Agrega compatibilidad con localhost
Para acceder a la API de Writer en localhost, usa las marcas de Chrome:
- Configura
chrome://flags/#optimization-guide-on-device-modelcomo Habilitado. - Configura las siguientes marcas como Habilitado o Habilitado en varios idiomas:
chrome://flags/#prompt-api-for-gemini-nano-multimodal-inputchrome://flags/#writer-api-for-gemini-nano
- Haz clic en Volver a iniciar o reinicia Chrome.
Usa la API de Writer
Primero, ejecuta la detección de funciones para ver si el navegador admite estas APIs.
if ('Writer' in self) {
// The Writer API is supported.
}
La API de Writer y todas las demás APIs de IA integradas están integradas en el navegador. Gemini Nano se descarga por separado la primera vez que un sitio web usa una API de IA integrada. En la práctica, si un usuario ya interactuó con una API integrada, descargó el modelo en su navegador.
Para determinar si el modelo está listo para usarse, llama a la función asíncrona
Writer.availability(). Si la respuesta a availability() es downloadable, escucha el progreso de la descarga y avísale al usuario, ya que la descarga puede demorar.
const availability = await Writer.availability();
Para activar la descarga del modelo y comenzar a escribir, verifica la
activación del usuario
y llama a la función Writer.create().
const writer = await Writer.create({
monitor(m) {
m.addEventListener("downloadprogress", e => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
}
});
Funciones de la API
La función create() te permite configurar un objeto de escritura nuevo. Toma un objeto options opcional con los siguientes parámetros:
tone: El tono de escritura puede hacer referencia al estilo, el carácter o la actitud del contenido. El valor se puede establecer enformal,neutral(predeterminado) ocasual.format: El formato de salida, con los valores permitidosmarkdown(predeterminado) yplain-text.length: La longitud de la salida, con los valores permitidosshort(predeterminado),mediumylong.sharedContext: Cuando se escriben varias salidas, un contexto compartido puede ayudar al modelo a crear contenido mejor alineado con tus expectativas.
En el siguiente ejemplo, se muestra cómo iniciar un objeto 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}%`);
});
}
});
}
Asigna los idiomas esperados
La API de Writer admite varios idiomas. Configura los idiomas de entrada y contexto esperados, así como el idioma de salida esperado cuando crees tu sesión. Esto permite que el navegador rechace la solicitud si no puede admitir una combinación de idiomas específica.
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."
});
Comenzar a escribir
Existen dos maneras de generar texto del modelo: la salida basada en solicitudes y la transmisión.
Salida basada en solicitudes
Para la salida basada en solicitudes (o "sin transmisión"), el modelo espera a que se genere toda la entrada, procesa esa entrada en su totalidad y, luego, produce la salida.
Para obtener una salida basada en solicitudes, llama a la función asíncrona write(). Debes incluir un mensaje para el contenido que deseas escribir. Puedes agregar un context opcional para proporcionar información de contexto del modelo, lo que puede ayudar al modelo a satisfacer mejor tus expectativas para la salida.
// 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",
},
);
Transmite la salida de escritura
La transmisión ofrece resultados continuos en tiempo real. La salida se actualiza de forma incremental a medida que se agrega y ajusta la entrada.
Para obtener un escritor de transmisión, llama a la función writeStreaming() y realiza iteraciones sobre los segmentos de texto disponibles en la transmisión. Puedes agregar un context opcional para proporcionar información de contexto del modelo, lo que puede ayudar al modelo a satisfacer mejor tus expectativas para la salida.
// 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);
}
Comparte contexto para varias tareas
Es posible que desees usar un writer para generar varios contenidos. En este caso, es útil agregar sharedContext. Por ejemplo, es posible que desees ayudar a los revisores a brindar mejores comentarios en los comentarios.
// 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);
}
Reutiliza un escritor
Puedes usar el mismo escritor para crear varios contenidos.
// 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)
),
);
Detén el escritor
Para finalizar el proceso de escritura, anula el controlador y destruye el escritor.
// 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();
Demostración
Política de permisos, iframes y Web Workers
De forma predeterminada, la API de Writer solo está disponible para las ventanas de nivel superior y sus iframes del mismo origen. Se puede delegar el acceso a la API a iframes de origen cruzado
con el atributo allow="" de la Política de permisos:
<!--
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>
La API de Writer no está disponible en Web Workers. Esto se debe a la complejidad de establecer un documento responsable para cada trabajador para verificar el estado de la Política de permisos.
Participa y comparte comentarios
Las APIs de Writer y Rewriter están en debate activo y están sujetas a cambios en el futuro. Si pruebas esta API y tienes comentarios, nos encantaría conocerlos.
- Lee la explicación, haz preguntas y participa en el debate.
- Revisa el estado de Chrome para obtener actualizaciones sobre la implementación de la API en Chrome.
- Si tienes comentarios sobre la implementación de Chrome, informa un error de Chromium.
- Únete al programa de versión preliminar anticipada para obtener una vista previa de las nuevas APIs y acceder a nuestra lista de distribución.
Descubre todas las APIs de IA integradas que usan modelos, incluidos Gemini Nano y otros modelos expertos, en el navegador.