Fecha de publicación: 20 de mayo de 2025
Explicación | Web | Extensiones | Estado de Chrome | Intent |
---|---|---|---|---|
GitHub | Ver | Intent to Experiment |
Con la API de Prompt, puedes enviar solicitudes de lenguaje natural a Gemini Nano en el navegador.
Existen muchas formas de usar la API de Prompt. En una aplicación web o un sitio web, puedes crear lo siguiente:
- Búsqueda potenciada por IA: Responde preguntas según el contenido de una página web.
- Feeds de noticias personalizados: Compila un feed que clasifique de forma dinámica los artículos con categorías y permita a los usuarios filtrar ese contenido.
Estas son solo algunas posibilidades, y nos entusiasma ver lo que crearás.
Revisa los requisitos de hardware
Las APIs de Language Detector y Translator solo funcionan en computadoras de escritorio en Chrome.
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 Chrome para Android, iOS y ChromeOS aún no son compatibles con nuestras APIs respaldadas por Gemini Nano.
- Almacenamiento: Al menos 22 GB en el volumen que contiene tu perfil de Chrome
- GPU: Más de 4 GB de VRAM
- Red: Datos ilimitados o una conexión de uso no medido
Estos requisitos existen para ti en tu proceso de desarrollo y para los usuarios que trabajan con las funciones que compilas.
Usa la API de Prompt
Antes de usar esta API, acepta la Política de Usos Prohibidos de IA Generativas de Google.
Hay dos funciones disponibles en el espacio de nombres LanguageModel
:
availability()
para verificar qué puede hacer el 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 un origen usa la API.
Para determinar si el modelo está listo para usarse, llama a la función LanguageModel.availability()
asíncrona. Se debería mostrar una de las siguientes respuestas:
"unavailable"
significa que la implementación no admite las opciones solicitadas o que no admite solicitar 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 fino) 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 requerir descargas nuevas.
Para activar la descarga del modelo y crear la sesión del modelo de lenguaje, llama a la función LanguageModel.create()
asíncrona. Si la respuesta a availability()
fue 'downloadable'
, se recomienda detectar el progreso de la descarga. De esta manera, puedes informar al usuario en caso de que la descarga demore.
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
: El valor predeterminado de top-K (predeterminado:3
).maxTopK
: Es el valor máximo de Top-K (8
).defaultTemperature
: Es la temperatura predeterminada (1.0
). El valor de la temperatura debe estar entre0.0
y2.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 se pueda ejecutar la API de Prompt, crea una sesión con la función create()
.
Puedes solicitarle al modelo con las funciones prompt()
o promptStreaming()
.
Personaliza tu sesión
Cada sesión se puede personalizar con topK
y temperature
mediante un objeto de opciones opcional. Los valores predeterminados de estos parámetros se muestran 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 opcionales 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 indicaciones iniciales, puedes proporcionarle 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 un 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 las sesiones
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 en el 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 la ventana de contexto de la sesión esté completa.
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 preservar 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,
});
Cómo solicitarle al modelo
Puedes solicitarle al modelo con las funciones prompt()
o promptStreaming()
.
Salida sin transmisión
Si esperas un resultado breve, puedes usar la función prompt()
que muestra 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 llegan del modelo. La función promptStreaming()
muestra 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 las instrucciones en ejecución.
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 aborta cualquier ejecución en curso. Te recomendamos que conserves la sesión si tienes la intención de solicitarle al modelo con frecuencia, ya que crear una sesión puede llevar un 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."
);
Capacidades multimodales
La API de Prompt admite entradas de audio e imagen desde Chrome 138 Canary para la experimentación local. La API devuelve un resultado de texto.
Con estas funciones, puedes hacer lo siguiente:
- Permite que los usuarios transcriban mensajes de audio enviados en una aplicación de chat.
- Describe una imagen que se subió a tu sitio web para usarla en un subtítulo o texto alternativo.
const session = await LanguageModel.create({
// { type: "text" } is not necessary to include explicitly, unless
// you also want to include expected input languages for text.
expectedInputs: [
{ type: "audio" },
{ type: "image" }
]
});
const referenceImage = await (await fetch("/reference-image.jpeg")).blob();
const userDrawnImage = document.querySelector("canvas");
const response1 = await session.prompt([{
role: "user",
content: [
{ type: "text", value: "Give a helpful artistic critique of how well the second image matches the first:" },
{ type: "image", value: referenceImage },
{ type: "image", value: userDrawnImage }
]
}]);
console.log(response1);
const audioBlob = await captureMicrophoneInput({ seconds: 10 });
const response2 = await session.prompt([{
role: "user",
content: [
{ type: "text", value: "My response to your critique:" },
{ type: "audio", value: audioBlob }
]
}]);
Demostraciones multimodales
Consulta la demo de Mediarecorder Audio Prompt para usar la API de Prompt con entrada de audio y la demo de Canvas Image Prompt para usar la API de Prompt con entrada de imagen.
Estrategia de rendimiento
La API de Prompt para la Web aún está en desarrollo. Mientras compilamos esta API, consulta nuestras prácticas recomendadas sobre la administración de sesiones para obtener un rendimiento óptimo.
Comentarios
Tus comentarios nos ayudan a planificar el futuro de esta API y las mejoras de Gemini Nano. Incluso puede generar APIs de tareas específicas (como las APIs para la transcripción de audio o la descripción de imágenes), de modo que podamos satisfacer tus necesidades y las de tus usuarios.
Participa y comparte comentarios
Tus comentarios pueden afectar directamente la forma en que compilamos e implementamos versiones futuras de esta API y de todas las APIs de IA integradas.
- Únete al programa de versión preliminar anticipada.
- Si quieres enviar comentarios sobre la implementación de Chrome, envía un informe de errores o una solicitud de función.
- Comparte tus comentarios sobre la forma de la API. Para ello, haz un comentario en un problema existente o abre uno nuevo en el repositorio de GitHub de la API de Prompt.
- Únete al grupo de la comunidad de Web Incubator para participar en el esfuerzo por establecer estándares.