Data di pubblicazione: 11 novembre 2024
L'API Prompt per le estensioni è ora disponibile in una prova dell'origine, quindi puoi creare estensioni di Chrome che utilizzano Gemini Nano, il nostro modello linguistico più efficiente, nel browser.
Esistono molti casi d'uso per l'API Prompt con le estensioni di Chrome. Ecco alcuni esempi:
- Eventi di calendario istantanei. Sviluppare un'estensione di Chrome che estragga automaticamente i dettagli degli eventi dalle pagine web, in modo che gli utenti possano creare voci di calendario in pochi passaggi.
- Estrazione dei contatti senza problemi. Crea un'estensione che estrae i dati di contatto dai siti web, consentendo agli utenti di contattare più facilmente un'attività o aggiungere dettagli al loro elenco di contatti.
- Filtro dei contenuti dinamici. Crea un'estensione per Chrome che analizza gli articoli di notizie e sfoca o nasconde automaticamente i contenuti in base a argomenti definiti dall'utente.
Queste sono solo alcune possibilità, ma non vediamo l'ora di scoprire cosa creerai.
Disponibilità
- Partecipa alla prova dell'origine dell'API Prompt, eseguita in Chrome 131-136, per creare estensioni con questa API. Se non hai mai provato le prove dell'origine, si tratta di programmi a tempo limitato aperti a tutti gli sviluppatori che offrono accesso in anteprima alle funzionalità sperimentali della piattaforma. Gli sviluppatori possono testare, raccogliere feedback degli utenti e eseguire l'iterazione in vista di un lancio futuro.
- Sebbene possano esserci limiti di utilizzo, puoi integrare queste funzionalità per i test in tempo reale e raccogliere il feedback degli utenti. L'obiettivo è fornire informazioni sulle future versioni di questa API, man mano che lavoriamo per una maggiore disponibilità.
- Partecipa al programma di anteprima per dare un'occhiata in anteprima alle nuove API di IA integrate e accedere alla discussione sulla nostra mailing list.
Partecipare alla prova dell'origine
Per utilizzare l'API Prompt nelle estensioni di Chrome, aggiungi l'autorizzazione "aiLanguageModelOriginTrial"
al file manifest.json
come indicato nel seguente estratto, insieme a eventuali altre autorizzazioni necessarie per l'estensione.
Per registrare l'estensione per la prova dell'origine, utilizza l'URLchrome-extension://YOUR_EXTENSION_ID
come Origine web. Ad esempio,
chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk
.
L'ID dell'estensione viene creato in modo dinamico. Una volta assegnato, puoi forzare l'ID a rimanere stabile aggiungendo la proprietà key
al manifest.
Dopo aver effettuato la registrazione per la prova originale, ricevi un token generato,
che devi passare in un array come valore del campo trial_tokens
nel
file manifest.
{
"manifest_version": 3,
"name": "YOUR_EXTENSION_NAME",
"permissions": ["aiLanguageModelOriginTrial"],
"trial_tokens": ["GENERATED_TOKEN"],
}
Aggiungere il supporto a localhost
Per accedere all'API Prompt su localhost
durante la prova dell'origine, devi aggiornare Chrome all'ultima versione. A tale scopo, procedi nel seguente modo:
- Apri Chrome su una di queste piattaforme: Windows, Mac o Linux.
- Vai a
chrome://flags/#optimization-guide-on-device-model
. - Seleziona BypassPerfRequirement abilitato.
- In questo modo vengono ignorati i controlli delle prestazioni che potrebbero impedirti di scaricare Gemini Nano sul tuo dispositivo.
- Fai clic su Riavvia o riavvia Chrome.
Utilizzare l'API Prompt
Dopo aver richiesto l'autorizzazione per utilizzare l'API Prompt, puoi creare l'estensione. Nello spazio dei nomi chrome.aiOriginTrial.languageModel
sono disponibili due nuove funzioni di estensione:
capabilities()
per verificare le funzionalità del modello e se è disponibile.create()
per avviare una sessione del modello linguistico.
Download del modello
L'API Prompt utilizza il modello Gemini Nano in Chrome. Sebbene l'API sia integrata in Chrome, il modello viene scaricato separatamente la prima volta che un'estensione utilizza l'API.
Per determinare se il modello è pronto per l'uso, chiama la funzione asincrona
chrome.aiOriginTrial.languageModel.capabilities()
. Restituisce un
oggetto AILanguageModelCapabilities
con un campo available
che può assumere
tre possibili valori:
'no'
: il browser corrente supporta l'API Prompt, ma al momento non può essere utilizzato. Ciò potrebbe essere dovuto a una serie di motivi, ad esempio a uno spazio su disco insufficiente per scaricare il modello.'readily'
: il browser attuale supporta l'API Prompt e può essere utilizzato subito.'after-download'
: il browser corrente supporta l'API Prompt, ma deve prima scaricare il modello.
Per attivare il download del modello e creare la sessione del modello linguistico, chiama la funzione chrome.aiOriginTrial.languageModel.create()
asincrona. Se la risposta a capabilities()
è 'after-download'
, è buona prassi monitorare l'avanzamento del download. In questo modo, puoi informare l'utente nel caso in cui il download richieda del tempo.
const session = await chrome.aiOriginTrial.languageModel.create({
monitor(m) {
m.addEventListener("downloadprogress", (e) => {
console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
});
},
});
Funzionalità del modello
La funzione capabilities()
ti informa anche sulle funzionalità del modello linguistico. Oltre a available
, l'oggetto
AILanguageModelCapabilities
risultante contiene anche i seguenti campi:
defaultTopK
: il valore predefinito top-K (predefinito:3
).maxTopK
: il valore top-K massimo (8
).defaultTemperature
: la temperatura predefinita (1.0
). La temperatura deve essere compresa tra0.0
e2.0
.
await chrome.aiOriginTrial.languageModel.capabilities();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}
Creare una sessione
Dopo aver verificato che l'API Prompt può essere eseguita, crea una sessione con la funzione create()
, che ti consente di chiedere al modello di rispondere con le funzioni prompt()
o promptStreaming()
.
Opzioni sessione
Ogni sessione può essere personalizzata con topK
e temperature
utilizzando un oggetto opzionale options. I valori predefiniti per questi parametri vengono restituiti da
chrome.aiOriginTrial.languageModel.capabilities()
.
const capabilities = await chrome.aiOriginTrial.languageModel.capabilities();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await chrome.aiOriginTrial.languageModel.create({
temperature: Math.max(capabilities.defaultTemperature * 1.2, 2.0),
topK: capabilities.defaultTopK,
});
L'oggetto opzioni facoltativo della funzione create()
accetta anche un campo signal
,
che ti consente di passare un AbortSignal
per distruggere la sessione.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await chrome.aiOriginTrial.languageModel.create({
signal: controller.signal,
})
Prompt di sistema
Con i prompt di sistema, puoi fornire al modello linguistico un contesto.
const session = await chrome.aiOriginTrial.languageModel.create({
systemPrompt: 'You are a helpful and friendly assistant.',
});
await session.prompt('What is the capital of Italy?');
// 'The capital of Italy is Rome.'
Prompt iniziali
Con i prompt iniziali, puoi fornire al modello linguistico il contesto delle interazioni precedenti, ad esempio per consentire all'utente di riprendere una sessione memorizzata dopo il riavvio del browser.
const session = await chrome.aiOriginTrial.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. [...]' }
]
});
Informazioni sessione
Una determinata sessione del modello linguistico ha un numero massimo di token che può elaborare. Puoi controllare l'utilizzo e i progressi verso questo limite utilizzando le seguenti proprietà nell'oggetto sessione:
console.log(`${session.tokensSoFar}/${session.maxTokens}
(${session.tokensLeft} left)`);
Persistenza della sessione
Ogni sessione tiene traccia del contesto della conversazione. Le interazioni precedenti vengono prese in considerazione per le interazioni future finché la finestra del contesto della sessione non è completa.
const session = await chrome.aiOriginTrial.languageModel.create({
systemPrompt: '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);
Clonare una sessione
Per preservare le risorse, puoi clonare una sessione esistente con la funzione clone()
. Il contesto della conversazione viene reimpostato, ma il prompt iniziale o i prompt di sistema rimarranno invariati. La funzione clone()
accetta un opzionale
oggetto options con un campo signal
, che ti consente di passare un AbortSignal
per distruggere la sessione clonata.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
signal: controller.signal,
});
Chiedi al modello
Puoi richiedere un prompt al modello con le funzioni prompt()
o promptStreaming()
.
Output non in streaming
Se prevedi un risultato breve, puoi utilizzare la funzione prompt()
che restituisce la risposta quando è disponibile.
// 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 {available, defaultTemperature, defaultTopK, maxTopK } =
await chrome.aiOriginTrial.languageModel.capabilities();
if (available !== 'no') {
const session = await chrome.aiOriginTrial.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);
}
Output streaming
Se prevedi una risposta più lunga, devi utilizzare la funzione promptStreaming()
, che ti consente di mostrare i risultati parziali man mano che vengono inviati dal modello.
const {available, defaultTemperature, defaultTopK, maxTopK } =
await chrome.aiOriginTrial.languageModel.capabilities();
if (available !== 'no') {
const session = await chrome.aiOriginTrial.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);
}
}
promptStreaming()
restituisce un ReadableStream
i cui chunk si basano progressivamente uno sull'altro. Ad esempio, "Hello,"
, "Hello world,"
, "Hello world I am,"
,
"Hello world I am an AI."
. Questo non è il comportamento previsto. Abbiamo intenzione di allinearci alle altre API di streaming sulla piattaforma, in cui i chunk sono parti successive di un unico stream lungo. Ciò significa che l'output sarà una sequenza come "Hello"
, " world"
, " I am"
, " an AI"
.
Per il momento, per ottenere il comportamento previsto, puoi implementare quanto segue. Questo approccio funziona sia con il comportamento standard che con quello non standard.
let result = '';
let previousChunk = '';
for await (const chunk of stream) {
const newChunk = chunk.startsWith(previousChunk)
? chunk.slice(previousChunk.length) : chunk;
console.log(newChunk);
result += newChunk;
previousChunk = chunk;
}
console.log(result);
Interrompere l'esecuzione di un prompt
Sia prompt()
che promptStreaming()
accettano un secondo parametro facoltativo con un campo signal
, che ti consente di interrompere l'esecuzione dei prompt.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const result = await session.prompt(
'Write me a poem!',
{ signal: controller.signal }
);
Terminare una sessione
Chiama destroy()
per liberare risorse se non hai più bisogno di una sessione. Quando una sessione viene distrutta, non può più essere utilizzata ed eventuali esecuzioni in corso vengono interrotte. Ti consigliamo di conservare la sessione se intendi chiedere spesso al
modello di eseguire un'azione, poiché la creazione di una sessione può richiedere del tempo.
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.'
);
Demo
Per testare l'API Prompt nelle estensioni di Chrome, installa l'estensione demo. Il codice sorgente dell'estensione è disponibile su GitHub.
Partecipare e condividere feedback
Inizia a testare l'API Prompt nelle tue estensioni di Chrome partecipando alla prova dell'origine e condividi il tuo feedback. Il tuo contributo può influire direttamente sul modo in cui sviluppiamo e implementiamo le versioni future di questa API e di tutte le API di IA integrate.
- Per inviare feedback sull'implementazione di Chrome, invia una segnalazione di bug o una richiesta di funzionalità.
- Condividi il tuo feedback sulla forma dell'API Prompt commentando un problema esistente o aprendone uno nuovo nel repository GitHub dell'API Prompt.
- Dai un'occhiata all'estensione di esempio dell'API Prompt su GitHub.
- Partecipa al progetto relativo agli standard entrando a far parte del gruppo della community Web Incubator.