L'API Prompt

Data di pubblicazione: 11 novembre 2024

Spiegazione Web Estensioni Stato di Chrome Intenzione
GitHub Sperimentale In EPP Dietro una bandiera Prova di Origin Non applicabile Non applicabile

Con l'API Prompt, puoi inviare richieste in linguaggio naturale a Gemini Nano nel browser.

L'API Prompt è disponibile in una prova dell'origine per le estensioni di Chrome. Gli sviluppatori web possono utilizzare l'API esplorativa, pensata per la prototipazione e la scoperta di casi d'uso aggiuntivi, partecipando al programma di anteprima.

Esistono molti modi per utilizzare l'API Prompt nelle estensioni di Chrome. Ad esempio:

  • Eventi istantanei nel calendario. Sviluppare un'estensione di Chrome che estrae 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 estragga le informazioni di contatto dai siti web, consentendo agli utenti di contattare più facilmente un'attività o di aggiungere dettagli al proprio 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.

Inizia

Per utilizzare l'API Prompt nelle estensioni di Chrome, aggiungi l'autorizzazione "aiLanguageModelOriginTrial" a manifest.json dell'estensione, insieme a tutte le altre autorizzazioni di cui l'estensione potrebbe aver bisogno.

{
  "manifest_version": 3,
  "name": "YOUR_EXTENSION_NAME",
  "key": "YOUR_EXTENSION_KEY",
  "permissions": ["aiLanguageModelOriginTrial"]
}

Viene concessa un'autorizzazione temporanea, valida solo per la durata della prova dell'origine. Se l'API viene lanciata, devi aggiornare e ricaricare l'estensione, rimuovendo l'autorizzazione scaduta e sostituendola con le autorizzazioni finali.

Inoltre, ti consigliamo di mantenere un ID estensione coerente aggiungendo la proprietà key al manifest.

Partecipare alla prova dell'origine

Per aggiungere l'API Prompt all'estensione di Chrome:

  1. Partecipa alla prova dell'origine dell'API Prompt, eseguita in Chrome 131-136.
  2. Utilizza l'URL chrome-extension://YOUR_EXTENSION_ID dell'estensione come Origine web. Ad esempio, chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk.

  3. Aggiorna il file manifest per aggiungere il token di prova come array.

    {
      "manifest_version": 3,
      "name": "YOUR_EXTENSION_NAME",
      "key": "YOUR_EXTENSION_KEY",
      "permissions": ["aiLanguageModelOriginTrial"],
      "trial_tokens": ["GENERATED_TOKEN"],
    }
    

Utilizzare l'API Prompt nelle estensioni

Dopo aver richiesto l'autorizzazione per utilizzare l'API Prompt, puoi creare la tua estensione. Nello spazio dei nomi chrome.aiOriginTrial.languageModel sono disponibili due 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 (valore predefinito: 3).
  • maxTopK: il valore top-K massimo (8).
  • defaultTemperature: la temperatura predefinita (1.0). Il valore della temperatura deve essere compreso tra 0.0 e 2.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().

Personalizzare la 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. [...]' }
  ]
});

Limiti di sessioni

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 oggetto opzionale 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 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 di prova. Il codice sorgente dell'estensione è disponibile su GitHub.

Interfaccia demo per l'API Prompt

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.