La API de Prompt

Fecha de publicación: 11 de noviembre de 2024; última actualización: 20 de mayo de 2025

Explicación Web Extensiones Estado de Chrome Intent
GitHub Prueba de origen En Prueba de origen Chrome 138 Ver Intención de experimentar

Con la API de Prompt, puedes enviar solicitudes en lenguaje natural a Gemini Nano en el navegador.

Hay muchas formas de usar la API de Prompt en las extensiones de Chrome. Por ejemplo:

  • Eventos de calendario instantáneos Desarrolla una extensión de Chrome que extraiga automáticamente los detalles de los eventos de las páginas web para que los usuarios puedan crear entradas de calendario en pocos pasos.
  • Extracción de contactos sin interrupciones. Crea una extensión que extraiga información de contacto de sitios web, lo que facilitará que los usuarios se comuniquen con una empresa o agreguen detalles a su lista de contactos.
  • Filtrado de contenido dinámico Crea una extensión de Chrome que analice artículos de noticias y desenfoque u oculte automáticamente el contenido según los temas definidos por el usuario.

Estas son solo algunas posibilidades, y nos emociona ver lo que crearás.

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 de funcionamiento 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 y Rewriter funcionan en Chrome cuando se cumplen las siguientes condiciones:

  • Sistema operativo: Windows 10 o 11; macOS 13 o versiones posteriores (Ventura y versiones posteriores); o Linux Las APIs que usan Gemini Nano aún no son compatibles con Chrome para Android, iOS y ChromeOS.
  • Almacenamiento: Al menos 22 GB en el volumen que contiene tu perfil de Chrome
  • GPU: Estrictamente más de 4 GB de VRAM
  • Red: Datos ilimitados o una conexión de uso no medido

El tamaño exacto de Gemini Nano puede variar ligeramente. Para conocer el tamaño actual, visita chrome://on-device-internals y ve a Estado del modelo. Abre la Ruta de acceso al archivo que se indica para determinar el tamaño del modelo.

Usa la API de Prompt en Extensiones

Antes de usar esta API, acepta la Política de Uso Prohibido de IA Generativas de Google.

Tienes disponibles dos funciones de extensión en el espacio de nombres LanguageModel:

  • availability() para verificar las capacidades del modelo y si está disponible.
  • create() para iniciar una sesión de modelo de lenguaje

Descarga del modelo

La API de Prompt usa el modelo Gemini Nano en Chrome. Si bien la API está integrada en Chrome, el modelo se descarga por separado la primera vez que una extensión usa la API.

Para determinar si el modelo está listo para usarse, llama a la función asíncrona LanguageModel.availability(). Debería mostrar una de las siguientes respuestas:

  • "unavailable" significa que la implementación no admite las opciones solicitadas o que no admite la generación de instrucciones para un modelo de lenguaje.
  • "downloadable" significa que la implementación admite las opciones solicitadas, pero tendrá que descargar algo (por ejemplo, el modelo de lenguaje en sí o un ajuste) antes de poder crear una sesión con esas opciones.
  • "downloading" significa que la implementación admite las opciones solicitadas, pero deberá finalizar una operación de descarga en curso antes de poder crear una sesión con esas opciones.
  • "available" significa que la implementación admite las opciones solicitadas sin necesidad de nuevas descargas.

Para activar la descarga del modelo y crear la sesión del modelo de lenguaje, llama a la función asíncrona LanguageModel.availability(). Si la respuesta a availability() fue 'downloadable', se recomienda escuchar el progreso de la descarga. De esta manera, puedes informar al usuario en caso de que la descarga tarde.

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

Capacidades de los modelos

La función params() te informa sobre los parámetros del modelo de lenguaje. El objeto tiene los siguientes campos:

  • defaultTopK: Es el valor predeterminado de top-K (predeterminado: 3).
  • maxTopK: Es el valor máximo de top-K (8).
  • defaultTemperature: La temperatura predeterminada (1.0). El valor de la temperatura debe estar entre 0.0 y 2.0.
  • maxTemperature: Es la temperatura máxima.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 8, defaultTemperature: 1, maxTemperature: 2}

Crea una sesión

Una vez que la API de Prompt pueda ejecutarse, crearás una sesión con la función create(). Puedes solicitarle al modelo que use las funciones prompt() o promptStreaming().

Personaliza tu sesión

Cada sesión se puede personalizar con topK y temperature usando un objeto de opciones opcional. Los valores predeterminados de estos parámetros se devuelven desde LanguageModel.params().

const params = await LanguageModel.params();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
  temperature: Math.max(params.defaultTemperature * 1.2, 2.0),
  topK: params.defaultTopK,
});

El objeto de opciones opcional de la función create() también toma un campo signal, que te permite pasar un AbortSignal para destruir la sesión.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const session = await LanguageModel.create({
  signal: controller.signal,
})

Instrucciones iniciales

Con las instrucciones iniciales, puedes proporcionar al modelo de lenguaje contexto sobre las interacciones anteriores, por ejemplo, para permitir que el usuario reanude una sesión almacenada después de reiniciar el navegador.

const session = await LanguageModel.create({
  initialPrompts: [
    { role: 'system', content: 'You are a helpful and friendly assistant.' },
    { role: 'user', content: 'What is the capital of Italy?' },
    { role: 'assistant', content: 'The capital of Italy is Rome.'},
    { role: 'user', content: 'What language is spoken there?' },
    { role: 'assistant', content: 'The official language of Italy is Italian. [...]' }
  ]
});

Límites de sesión

Una sesión de modelo de lenguaje determinada tiene una cantidad máxima de tokens que puede procesar. Puedes verificar el uso y el progreso hacia ese límite con las siguientes propiedades del objeto de sesión:

console.log(`${session.inputUsage}/${session.inputQuota}`);

Persistencia de la sesión

Cada sesión realiza un seguimiento del contexto de la conversación. Las interacciones anteriores se tienen en cuenta para las interacciones futuras hasta que se llena la ventana de contexto de la sesión.

const session = await LanguageModel.create({
  initialPrompts: [{
    role: "system",
    content: "You are a friendly, helpful assistant specialized in clothing choices."
  }]
});

const result1 = await session.prompt(
  "What should I wear today? It is sunny. I am unsure between a t-shirt and a polo."
);
console.log(result1);

const result2 = await session.prompt(
  "That sounds great, but oh no, it is actually going to rain! New advice?"
);
console.log(result2);

Cómo clonar una sesión

Para conservar los recursos, puedes clonar una sesión existente con la función clone(). Se restablece el contexto de la conversación, pero la instrucción inicial permanece intacta. La función clone() toma un objeto de opciones opcional con un campo signal, que te permite pasar un AbortSignal para destruir la sesión clonada.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const clonedSession = await session.clone({
  signal: controller.signal,
});

Genera instrucciones para el modelo

Puedes solicitarle al modelo que use las funciones prompt() o promptStreaming().

Salida sin transmisión

Si esperas un resultado breve, puedes usar la función prompt(), que devuelve la respuesta una vez que está disponible.

// Start by checking if it's possible to create a session based on the
// availability of the model, and the characteristics of the device.
const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
  await LanguageModel.params();

const available = await LanguageModel.availability();

if (available !== 'unavailable') {
  const session = await LanguageModel.create();

  // Prompt the model and wait for the whole result to come back.
  const result = await session.prompt("Write me a poem!");
  console.log(result);
}

Salida transmitida

Si esperas una respuesta más larga, debes usar la función promptStreaming(), que te permite mostrar resultados parciales a medida que los proporciona el modelo. La función promptStreaming() devuelve un ReadableStream.

const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
  await LanguageModel.params();

const available = await LanguageModel.availability();
if (available !== 'unavailable') {
  const session = await LanguageModel.create();

  // Prompt the model and stream the result:
  const stream = session.promptStreaming('Write me an extra-long poem!');
  for await (const chunk of stream) {
    console.log(chunk);
  }
}

Cómo detener la ejecución de una instrucción

Tanto prompt() como promptStreaming() aceptan un segundo parámetro opcional con un campo signal, que te permite detener la ejecución de instrucciones.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const result = await session.prompt(
  'Write me a poem!',
  { signal: controller.signal }
);

Cómo finalizar una sesión

Llama a destroy() para liberar recursos si ya no necesitas una sesión. Cuando se destruye una sesión, ya no se puede usar y se anula cualquier ejecución en curso. Es posible que desees mantener la sesión si tienes la intención de solicitarle información al modelo con frecuencia, ya que crear una sesión puede llevar algún tiempo.

await session.prompt(
  "You are a friendly, helpful assistant specialized in clothing choices."
);

session.destroy();

// The promise is rejected with an error explaining that
// the session is destroyed.
await session.prompt(
  "What should I wear today? It is sunny, and I am unsure between a
  t-shirt and a polo."
);

Demostración

Para probar la API de Prompt en las extensiones de Chrome, instala la extensión de demostración. El código fuente de la extensión está disponible en GitHub.

Interfaz de demostración de la API de Prompt

Participa y comparte tus comentarios

Tus comentarios pueden influir directamente en la forma en que compilamos e implementamos las versiones futuras de esta API y de todas las APIs de IA integradas.