API de Rewriter

Fecha de publicación: 22 de octubre de 2025

Explicativa Web Extensiones Estado de Chrome Intención
GitHub Prueba para desarrolladoresPrueba para desarrolladores Prueba para desarrolladoresPrueba para desarrolladores Ver Intención de experimentar

La API de Rewriter te ayuda a revisar y reestructurar texto. Esta API y la API de Writer forman parte de la propuesta de las APIs de Writing Assistance.

Estas APIs pueden ayudarte a mejorar el contenido creado por los usuarios.

Casos de uso

Perfecciona el texto existente haciéndolo más largo o más corto, o cambiando el tono. Por ejemplo, puedes hacer lo siguiente:

  • Reescribir un correo electrónico corto para que suene más cortés y formal
  • Sugerir ediciones a las opiniones de los clientes para ayudar a otros clientes a comprender los comentarios o quitar el contenido tóxico
  • Dar formato al contenido para satisfacer las expectativas de ciertos públicos

¿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 Rewriter, 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 pueden ejecutarse 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 no medida

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 Rewriter está disponible en una prueba de origen conjunta con la API de Writer. Para comenzar a usar estas APIs, haz lo siguiente:

  1. Ve a la prueba de origen de la API de Rewriter.
  2. 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.
  3. Para enviarla, haz clic en Registrarse.
  4. 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.
  5. Comienza a usar la API de 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 Rewriter en localhost, usa las marcas de Chrome:

  1. Configura chrome://flags/#optimization-guide-on-device-model como Habilitado.
  2. Configura las siguientes marcas como Habilitado o Habilitado (multilingüe):
    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
    • chrome://flags/#writer-api-for-gemini-nano
  3. Haz clic en Volver a iniciar o reinicia Chrome.

Usa la API de Rewriter

Primero, ejecuta la detección de funciones para ver si el navegador admite estas APIs.

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

La API de Rewriter 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 Rewriter.availability(). Si la respuesta a availability() fue downloadable, escucha el progreso de la descarga y avísale al usuario, ya que la descarga puede demorar.

const availability = await Rewriter.availability();

Para activar la descarga del modelo y comenzar el reescritor, verifica la activación del usuario y llama a la función Rewriter.create().

const rewriter = await Rewriter.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 nuevo objeto rewriter. 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 en more-formal, as-is (predeterminado) o more-casual.
  • format: El formato de salida, con los valores permitidos as-is (predeterminado), markdown y plain-text.
  • length: La longitud de la salida, con los valores permitidos shorter, as-is (predeterminado) y longer.
  • sharedContext: Cuando se reescriben varios contenidos, 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 rewriter:

const options = {
  sharedContext: 'This is an email to acquaintances about an upcoming event.',
  tone: 'more-casual',
  format: 'plain-text',
  length: 'shorter',
};

const available = await Rewriter.availability();
let rewriter;
if (available === 'unavailable') {
  // The Rewriter API isn't usable.
  return;
}
if (available === 'available') {
  // The Rewriter API can be used immediately .
  rewriter = await Rewriter.create(options);
} else {
  // The Rewriter can be used after the model is downloaded.
  rewriter = await Rewriter.create(options);
  rewriter.addEventListener('downloadprogress', (e) => {
    console.log(e.loaded, e.total);
  });
}

Asigna los idiomas esperados

La API de Rewriter admite varios idiomas. Establece los idiomas de entrada, salida y contexto esperados 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 rewriter = await Rewriter.create({
  tone: "more-formal",
  expectedInputLanguages: ["en", "ja", "es"],
  expectedContextLanguages: ["en", "ja", "es"],
  outputLanguage: "es",
  sharedContext: "These are requests to rewrite 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."
});

Comienza a reescribir

Hay dos maneras de generar contenido a partir del modelo: salida basada en solicitudes y 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 rewrite(). Debes incluir el texto inicial que deseas reescribir. 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 rewriter = await Rewriter.create({
  sharedContext: "A review for the Flux Capacitor 3000 from TimeMachines Inc."
});
const result = await rewriter.rewrite(reviewEl.textContent, {
  context: "Avoid any toxic language and be as constructive as possible."
});

Transmite el resultado de la reescritura

La transmisión ofrece resultados en tiempo real. La salida se actualiza de forma continua a medida que se agrega y ajusta la entrada.

Para obtener un reescritor de transmisión, llama a la función rewriteStreaming() y itera 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 el resultado.

const rewriter = await Rewriter.create({
  sharedContext: "A review for the Flux Capacitor 3000 from TimeMachines Inc."
});

const stream = rewriter.rewriteStreaming(reviewEl.textContent, {
  context: "Avoid any toxic language and be as constructive as possible.",
  tone: "more-casual",
});

for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

Comparte contexto para varias tareas

Es posible que desees usar un rewriter 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 rewriter = await Rewriter.create({
  sharedContext: "This is for publishing on [popular website name], a business and employment-focused social media platform."
});

const stream = rewriter.rewriteStreaming(
  "Love all this work on generative AI at Google! 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.",
    tone: "more-casual",
  }
);

for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

Reutiliza un reescritor

Puedes usar el mismo reescritor para editar varios contenidos. Esto puede ser particularmente útil si agregas el reescritor a una herramienta de comentarios o comentarios para ayudar a los escritores a ofrecer comentarios productivos y útiles.

// Reusing a rewriter
const rewriter = await Rewriter.create({
  sharedContext: "A review for the Flux Capacitor 3000 from TimeMachines Inc."
});

const rewrittenReviews = await Promise.all(
  Array.from(
    document.querySelectorAll("#reviews > .review"),
    (reviewEl) => rewriter.rewrite(reviewEl.textContent, {
      context: "Avoid any toxic language and be as constructive as possible.",
      tone: "more-casual",
    })
  ),
);

Detén el reescritor

Para finalizar el proceso de reescritura, anula el controlador y destruye el rewriter.

// Stop a rewriter
const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const rewriter = await Rewriter.create({ signal: controller.signal });
await rewriter.rewrite(reviewEl.textContent, { signal: controller.signal });

// Destroy a rewriter
rewriter.destroy();

Demostración

Política de permisos, iframes y Web Workers

De forma predeterminada, la API de Rewriter 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 Rewriter API by
  setting the `allow="rewriter"` attribute.
-->
<iframe src="https://cross-origin.example.com/" allow="rewriter"></iframe>

La API de Rewriter no está disponible en Web Workers. Esto se debe a la complejidad de establecer un documento responsable para cada trabajador, para verificar el estado con respecto a las políticas 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.

Descubre todas las APIs de IA integradas que usan modelos, incluidos Gemini Nano y otros modelos expertos, en el navegador.