Data publikacji: 11 listopada 2024 r.
Interfejs Prompt API dla rozszerzeń jest teraz dostępny w ramach testowania origin, dzięki czemu możesz tworzyć rozszerzenia do Chrome, które korzystają z Gemini Nano, naszego najbardziej wydajnego modelu językowego w przeglądarce.
Prompt API może być używany z rozszerzeniami Chrome w wielu przypadkach. Oto przykłady:
- Natychmiastowe wydarzenia w kalendarzu. Utwórz rozszerzenie Chrome, które automatycznie wyodrębnia szczegóły wydarzeń z witryn 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 informacje kontaktowe z witryn, ułatwiając użytkownikom kontakt z firmą lub dodanie szczegółów do listy kontaktów.
- Dynamiczne filtrowanie treści Utwórz rozszerzenie do Chrome, które analizuje artykuły z wiadomości 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 projekty.
Dostępność
- Dołącz do wersji próbnej interfejsu Prompt API origin, która działa w wersjach Chrome 131–136, aby tworzyć rozszerzenia z użyciem tego interfejsu API. Jeśli nie wiesz, czym są testy wersji źródłowej, wyjaśnijmy, że są to programy dostępne dla wszystkich deweloperów przez ograniczony czas, które zapewniają wcześniejszy dostęp do eksperymentalnych funkcji platformy. Deweloperzy mogą testować aplikacje, zbierać opinie użytkowników i poprawiać je przed oficjalną premierą.
- Chociaż mogą występować limity korzystania, możesz zintegrować te funkcje, aby przetestować je w produkcji i zebrać opinie użytkowników. Celem jest poinformowanie o przyszłych wersjach tego interfejsu API, ponieważ pracujemy nad zwiększeniem jego dostępności.
- Dołącz do programu wczesnej wersji zapoznawczej, aby wcześniej zapoznać się z nowymi wbudowanymi interfejsami API AI i uzyskać dostęp do dyskusji na naszej liście mailingowej.
Udział w okresie próbnym usługi pochodzenia
Aby używać interfejsu Prompt API w rozszerzeniach do Chrome, dodaj uprawnienia "aiLanguageModelOriginTrial"
do pliku manifest.json
zgodnie z podanym poniżej fragmentem kodu, a także wszelkie inne uprawnienia, których może wymagać Twoje rozszerzenie.
Aby zarejestrować rozszerzenie w celu przetestowania pochodzenia, użyj adresu URL chrome-extension://YOUR_EXTENSION_ID
jako pochodzenia internetowego. Na przykład:
chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk
.
Identyfikator rozszerzenia jest tworzony dynamicznie, ale po jego przypisaniu możesz wymusić, aby był stabilny. Aby to zrobić, dodaj do pliku manifestu właściwość key
.
Po zarejestrowaniu się w pierwszym okresie próbnym otrzymasz wygenerowany token, który musisz przekazać w tablicy jako wartość pola trial_tokens
w pliku manifestu. Przykładowy fragment kodu
{
"permissions": ["aiLanguageModelOriginTrial"],
"trial_tokens": ["GENERATED_TOKEN"],
}
Dodawanie obsługi localhost
Aby uzyskać dostęp do interfejsu Prompt API w localhost
podczas testowania origin, musisz zaktualizować Chrome do najnowszej wersji. Następnie wykonaj poniższe czynności:
- Otwórz Chrome na jednej z tych platform: Windows, Mac lub Linux.
- Jedź do:
chrome://flags/#optimization-guide-on-device-model
. - Kliknij Włączono BypassPerfRequirement.
- Spowoduje to pominięcie testów wydajności, które mogą uniemożliwić pobranie Gemini Nano na urządzenie.
- Kliknij Uruchom ponownie lub uruchom ponownie Chrome.
Korzystanie z interfejsu Prompt API
Gdy poprosisz o uprawnienia do korzystania z Prompt API, możesz utworzyć rozszerzenie. W przestrzeni nazw chrome.aiOriginTrial.languageModel
dostępne są 2 nowe funkcje rozszerzenia:
capabilities()
, aby sprawdzić, jakie możliwości ma model i czy jest dostępny.create()
, aby rozpocząć sesję modelu językowego.
Pobieranie modelu
Interfejs Prompt API korzysta z modelu Gemini Nano w Chrome. Interfejs API jest wbudowany w Chrome, ale model jest pobierany osobno przy pierwszym użyciu interfejsu 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 być spowodowane wieloma czynnikami, np. niewystarczającą ilością wolnego miejsca na dysku do pobrania modelu.'readily'
: obecna wersja przeglądarki obsługuje interfejs Prompt API i można z niego korzystać od razu.'after-download'
: przeglądarka 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 zajmie trochę czasu.
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ślnie3
).maxTopK
: maksymalna wartość top-K (8
).defaultTemperature
: domyślna temperatura (1.0
). Temperatura musi się mieścić w zakresie od0.0
do2.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()
.
Opcje sesji
Każdą sesję można dostosować za pomocą opcjonalnego obiektu topK
i temperature
. Wartości domyślne tych parametrów są zwracane z poziomu 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 opcji funkcji create()
przyjmuje też pole signal
,
co pozwala przekazać obiekt 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.'
Wstępne 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. [...]' }
]
});
Informacje o 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 and 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 options 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
Możesz wywołać model 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 ona 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);
}
Dane wyjściowe strumieniowe
Jeśli oczekujesz dłuższej odpowiedzi, użyj funkcji promptStreaming()
, która umożliwia wyświetlanie częściowych wyników w miarę ich uzyskiwania 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 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 są kolejnymi częściami jednego długiego strumienia. Oznacza to, że wynikiem będzie sekwencja, np. "Hello"
, " world"
, " I am"
, " an AI"
.
Aby osiągnąć pożądane działanie, możesz wdrożyć te rozwiązania. Działa to zarówno w przypadku standardowego, jak i niestandardowego sposobu działania.
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. Po zniszczeniu sesji nie można jej już używać, a każde trwające wykonywanie jest anulowane. 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.
Udział w testach 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 to, jak tworzymy i wdrażamy przyszłe wersje tego interfejsu API oraz wszystkie wbudowane interfejsy API do sztucznej inteligencji.
- Aby przekazać opinię na temat implementacji Chrome, prześlij raport o błędzie lub prośbę o dodanie funkcji.
- Przekaż opinię na temat interfejsu Prompt API, komentując istniejący problem lub otwierając nowy w repertuarze Prompt API na GitHubie.
- Sprawdź przykładowe rozszerzenie Prompt API na GitHubie.
- Aby wziąć udział w pracach nad standardami, dołącz do grupy społecznościowej Web Incubator.