Publicado el 20 de mayo de 2025
Explicación | Web | Extensiones | Estado de Chrome | Intent |
---|---|---|---|---|
GitHub | Ver | Intención de experimentar |
Con la API de Prompt, puedes enviar solicitudes en lenguaje natural a Gemini Nano en el navegador.
Existen muchas formas de usar la API de Prompt. En un sitio web o una aplicación web, puedes crear lo siguiente:
- Búsqueda potenciada por IA: Responde preguntas basadas en el contenido de una página web.
- Feeds de noticias personalizados: Crea un feed que clasifique dinámicamente los artículos con categorías y permite que los usuarios filtren ese contenido.
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
Antes de usar esta API, acepta la Política de Uso Prohibido de IA Generativas de Google.
Tienes dos funciones disponibles 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 un origen usa la API.
Para determinar si el modelo está listo para usarse, llama a la función asíncrona LanguageModel.availability()
. Debería devolver una de las siguientes respuestas:
"unavailable"
significa que la implementación no admite las opciones solicitadas o que no admite la solicitud a un modelo de lenguaje."downloadable"
significa que la implementación admite las opciones solicitadas, pero deberá 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 descargas nuevas.
Para activar la descarga del modelo y crear la sesión del modelo de lenguaje, llama a la función asíncrona LanguageModel.create()
. 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 del K máximo (8
).defaultTemperature
: 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 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. [...]',
},
],
});
Cómo restringir las respuestas proporcionando un prefijo
Puedes agregar un nuevo rol "assistant"
, además de los roles anteriores, para explicar las respuestas anteriores del modelo. Por ejemplo:
const followup = await session.prompt([
{
role: "user",
content: "I'm nervous about my presentation tomorrow"
},
{
role: "assistant"
content: "Presentations are tough!"
}
]);
En algunos casos, en lugar de solicitar una respuesta nueva, es posible que desees completar previamente parte del mensaje de respuesta del rol de "assistant"
. Esto puede ser útil para guiar al modelo de lenguaje a usar un formato de respuesta específico. Para ello, agrega prefix: true
al mensaje final del rol "assistant"
. Por ejemplo:
const characterSheet = await session.prompt([
{
role: 'user',
content: 'Create a TOML character sheet for a gnome barbarian',
},
{
role: 'assistant',
content: '```toml\n',
prefix: true,
},
]);
Agregar mensajes sin solicitarlo
La inferencia puede tardar un tiempo, especialmente cuando se usan entradas multimodales. Puede ser útil enviar instrucciones predeterminadas con anticipación para completar la sesión, de modo que el modelo pueda comenzar a procesar la información.
Si bien los initialPrompts
son útiles en la creación de sesiones, el método append()
se puede usar además de los métodos prompt()
o promptStreaming()
para proporcionar instrucciones contextuales adicionales después de que se crea la sesión.
Por ejemplo:
const session = await LanguageModel.create({
initialPrompts: [
{
role: 'system',
content:
'You are a skilled analyst who correlates patterns across multiple images.',
},
],
expectedInputs: [{ type: 'image' }],
});
fileUpload.onchange = async () => {
await session.append([
{
role: 'user',
content: [
{
type: 'text',
value: `Here's one image. Notes: ${fileNotesInput.value}`,
},
{ type: 'image', value: fileUpload.files[0] },
],
},
]);
};
analyzeButton.onclick = async (e) => {
analysisResult.textContent = await session.prompt(userQuestionInput.value);
};
La promesa que devuelve append()
se cumple una vez que se valida, procesa y agrega la instrucción a la sesión. La promesa se rechaza si no se puede agregar el mensaje.
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."
);
Capacidades multimodales
La API de Prompt admite entradas de audio y de imagen desde Chrome 138 Canary para la experimentación local. La API devuelve un resultado de texto.
Con estas capacidades, puedes hacer lo siguiente:
- Permite a los usuarios transcribir mensajes de audio enviados en una aplicación de chat.
- Describe una imagen subida 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 demostración de Mediarecorder Audio Prompt para usar la API de Prompt con entrada de audio y la demostración 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 desarrollamos esta API, consulta nuestras prácticas recomendadas sobre la administración de sesiones para obtener un rendimiento óptimo.
Comentarios
Tus comentarios nos ayudan a definir el futuro de esta API y las mejoras de Gemini Nano. Incluso podría haber APIs de tareas específicas (como 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 tus comentarios
Tus comentarios pueden influir directamente en la forma en que creamos e implementamos versiones futuras de esta API y de todas las APIs de IA integradas.
- Únete al programa de versión preliminar anticipada.
- Para enviar comentarios sobre la implementación de Chrome, informa un error o envía una solicitud de función.
- Comparte tus comentarios sobre la forma de la API comentando un problema existente o abriendo uno nuevo en el repositorio de GitHub de la API de Prompt.
- Participa en el esfuerzo de estándares uniéndote al Web Incubator Community Group.