Prompt API

Data publikacji: 11 listopada 2024 r.

Objaśnienie Sieć Rozszerzenia Stan Chrome Podobne zamiary
GitHub Eksperymentalna W EPP Oznaczenia Testowanie wersji Origin Nie dotyczy Nie dotyczy

Dzięki interfejsowi Prompt API możesz wysyłać żądania w języku naturalnym do Gemini Nano w przeglądarce.

Interfejs Prompt API jest dostępny w testowaniu origin rozszerzeń Chrome. Deweloperzy internetowi mogą korzystać z interfejsu eksploracyjnego API, który służy do tworzenia prototypów i odkrywania dodatkowych zastosowań. Aby to zrobić, muszą dołączyć do programu wczesnej wersji zapoznawczej.

Prompt API można używać w rozszerzeniach do Chrome na wiele sposobów. Na przykład:

  • Natychmiastość wydarzeń w kalendarzu. Utwórz rozszerzenie Chrome, które automatycznie wyodrębnia szczegóły wydarzeń ze stron internetowych, aby użytkownicy mogli tworzyć wpisy w kalendarzu w zaledwie kilku krokach.
  • Bezproblemowe wyodrębnianie kontaktów. Utwórz rozszerzenie, które wyodrębnia dane kontaktowe z witryn, ułatwiając użytkownikom kontakt z firmą lub dodanie szczegółów do listy kontaktów.
  • Filtrowanie dynamiczne treści. Utwórz rozszerzenie do Chrome, które analizuje artykuły informacyjne i automatycznie zaciera lub ukrywa treści na podstawie zdefiniowanych przez użytkownika tematów.

To tylko kilka możliwości, ale z niecierpliwością czekamy na Twoje kreacje.

Rozpocznij

Aby używać interfejsu Prompt API w rozszerzeniach do Chrome, dodaj uprawnienia "aiLanguageModelOriginTrial" do manifest.json rozszerzenia wraz z innymi uprawnieniami, których może potrzebować.

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

Przyznasz tymczasowe uprawnienia, które będą obowiązywać tylko przez okres próbnego korzystania z Origin. Jeśli interfejs API zostanie uruchomiony, musisz zaktualizować i ponownie przesłać rozszerzenie, usuwając wygasłe uprawnienia i zastępując je ostatecznymi uprawnieniami.

Zalecamy też utrzymanie spójnego identyfikatora rozszerzenia przez dodanie do pliku manifestu właściwości key.

Dołącz do wersji próbnej origin

Aby dodać interfejs Prompt API do rozszerzenia do Chrome:

  1. Dołącz do trybu Prompt API origin, który działa w Chrome 131–136.
  2. Jako źródło internetowe użyj adresu URL rozszerzenia (chrome-extension://YOUR_EXTENSION_ID). Na przykład: chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk.

  3. Zaktualizuj plik manifestu, aby dodać token okresu próbnego jako tablicę.

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

Korzystanie z interfejsu Prompt API w rozszerzeniach

Gdy poprosisz o uprawnienia do korzystania z Prompt API, możesz utworzyć rozszerzenie. W przestrzeni nazw chrome.aiOriginTrial.languageModel dostępne są 2 funkcje rozszerzenia:

  • capabilities(), aby sprawdzić, czego model jest w stanie dokonać i czy jest dostępny.
  • create(), aby rozpocząć sesję modelu językowego.

Pobieranie modelu

Interfejs Prompt API korzysta w Chrome z modelu Gemini Nano. Interfejs API jest wbudowany w Chrome, ale model jest pobierany osobno przy pierwszym użyciu interfejsu API przez rozszerzenie.

Aby sprawdzić, czy model jest gotowy do użycia, wywołaj asynchroniczną funkcję chrome.aiOriginTrial.languageModel.capabilities(). Zwraca obiekt AILanguageModelCapabilities z polem available, które może przyjmować 3 możliwe wartości:

  • 'no': bieżąca przeglądarka obsługuje interfejs Prompt API, ale nie można go obecnie używać. Może to wynikać z różnych przyczyn, np. z niewystarczającej ilości miejsca na dysku do pobrania modelu.
  • 'readily': obecna przeglądarka obsługuje interfejs Prompt API i można z niego korzystać od razu.
  • 'after-download': przeglądarka, której używasz, obsługuje interfejs Prompt API, ale musi najpierw pobrać model.

Aby wywołać pobieranie modelu i utworzyć sesję modelu językowego, wywołaj asynchroniczną funkcję chrome.aiOriginTrial.languageModel.create(). Jeśli odpowiedź na capabilities() to 'after-download', zalecamy sprawdzenie postępu pobierania. Dzięki temu możesz poinformować użytkownika, jeśli pobieranie trwa.

const session = await chrome.aiOriginTrial.languageModel.create({
  monitor(m) {
    m.addEventListener("downloadprogress", (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  },
});

Możliwości modelu

Funkcja capabilities() informuje też o możliwościach modelu językowego. Oprócz available obiekt AILanguageModelCapabilities zawiera też te pola:

  • defaultTopK: domyślna wartość top-K (domyślnie 3).
  • maxTopK: maksymalna wartość top-K (8).
  • defaultTemperature: domyślna temperatura (1.0). Wartość temperatury musi mieścić się w zakresie od 0.0 do 2.0.
await chrome.aiOriginTrial.languageModel.capabilities();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}

Tworzenie sesji

Po upewnieniu się, że interfejs Prompt API może działać, utwórz sesję za pomocą funkcji create(), która umożliwia wywołanie modelu za pomocą funkcji prompt() lub promptStreaming().

Dostosowywanie sesji

Każdą sesję można dostosować za pomocą opcjonalnego obiektu topK i temperature. Wartości domyślne tych parametrów są zwracane z 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,
});

Opcjonalny obiekt options funkcji create() przyjmuje też pole signal, które umożliwia przekazanie wartości AbortSignal, aby zniszczyć sesję.

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

const session = await chrome.aiOriginTrial.languageModel.create({
  signal: controller.signal,
})
Prompty systemowe

Za pomocą promptów systemowych możesz podać modelowi językowemu pewien kontekst.

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.'

Początkowe prompty

Za pomocą początkowych promptów możesz przekazać modelowi językowemu kontekst poprzednich interakcji, aby umożliwić użytkownikowi wznowienie zapisanej sesji po ponownym uruchomieniu przeglądarki.

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

Ograniczenia sesji

Dana sesja modelu językowego ma maksymalną liczbę tokenów, które może przetworzyć. Aby sprawdzić zużycie i postępy w kierunku osiągnięcia limitu, użyj tych właściwości obiektu sesji:

console.log(`${session.tokensSoFar}/${session.maxTokens}
(${session.tokensLeft} left)`);

Trwałość sesji

Każda sesja śledzi kontekst rozmowy. Wpływ na przyszłe interakcje mają poprzednie interakcje, dopóki okno kontekstu sesji nie zostanie wypełnione.

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);

Klonowanie sesji

Aby zachować zasoby, możesz sklonować bieżącą sesję za pomocą funkcji clone(). Kontekst rozmowy zostanie zresetowany, ale początkowy prompt lub prompty systemowe pozostaną nienaruszone. Funkcja clone() przyjmuje opcjonalny obiekt opcji z polem signal, co umożliwia przekazanie wartości AbortSignal, aby zniszczyć sklonowaną sesję.

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

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

Przetestuj model

Model możesz wywołać za pomocą funkcji prompt() lub promptStreaming().

Dane wyjściowe niebędące strumieniem

Jeśli oczekujesz krótkiego wyniku, możesz użyć funkcji prompt(), która zwraca odpowiedź, gdy tylko będzie dostępna.

// 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);
}

Wyjście strumieniowe

Jeśli oczekujesz dłuższej odpowiedzi, użyj funkcji promptStreaming(), która pozwala wyświetlać częściowe wyniki w miarę ich generowania przez model.

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);
  }
}

Funkcja promptStreaming() zwraca element ReadableStream, którego elementy są nakładane na siebie. Przykłady: "Hello,", "Hello world,", "Hello world I am,", "Hello world I am an AI.". Nie jest to zamierzone działanie. Chcemy dostosować się do innych interfejsów API strumieniowania na platformie, w których przypadku fragmenty to kolejne części jednego długiego strumienia. Oznacza to, że dane wyjściowe będą miały postać sekwencji "Hello", " world", " I am", " an AI".

Aby osiągnąć pożądane działanie, możesz wdrożyć te rozwiązania. Ta funkcja działa zarówno w przypadku standardowego, jak i niestandardowego zachowania.

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);

Zatrzymywanie prompta

Zarówno prompt(), jak i promptStreaming() akceptują opcjonalny drugi parametr z polem signal, który umożliwia zatrzymanie wyświetlania promptów.

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

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

Zakończ sesję

Jeśli nie potrzebujesz już sesji, zadzwoń pod numer destroy(), aby zwolnić zasoby. Gdy sesja zostanie zniszczona, nie można jej już używać, a każde trwające wykonywanie zostanie przerwane. Jeśli zamierzasz często korzystać z modela, możesz zachować sesję, ponieważ jej utworzenie może zająć trochę czasu.

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.'
);

Prezentacja

Aby przetestować interfejs Prompt API w rozszerzeniach do Chrome, zainstaluj rozszerzenie demonstracyjne. Kod źródłowy rozszerzenia jest dostępny na GitHubie.

Interfejs demonstracyjny interfejsu Prompt API

Udział w badaniu i przesyłanie opinii

Zacznij testować interfejs Prompt API w rozszerzeniach Chrome, dołączając do testowania origin i przesyłając opinię. Twoje opinie mogą mieć bezpośredni wpływ na sposób tworzenia i wdrażania przyszłych wersji tego interfejsu API oraz wszystkich wbudowanych interfejsów API AI.