Data publikacji: 20 maja 2025 r.
Objaśnienie | Sieć | Rozszerzenia | Stan Chrome | Intencja |
---|---|---|---|---|
GitHub | Wyświetl | Intencja przeprowadzenia eksperymentu |
Dzięki interfejsowi Prompt API możesz wysyłać żądania w języku naturalnym do Gemini Nano w przeglądarce.
Z Prompt API można korzystać na wiele sposobów. W aplikacji internetowej lub witrynie możesz utworzyć:
- Wyszukiwanie z wykorzystaniem AI: udzielanie odpowiedzi na pytania na podstawie treści strony internetowej.
- Personalizowane kanały wiadomości: twórz pliki danych, które dynamicznie klasyfikują artykuły według kategorii, i pozwalają użytkownikom na filtrowanie treści.
To tylko kilka możliwości. Jesteśmy ciekawi, co jeszcze stworzysz.
Wymagania sprzętowe
Interfejsy Language Detector i Translator API działają na komputerach tylko w Chrome.
Interfejsy Prompt API, Summarizer API, Writer API i Rewriter API działają w Chrome, gdy są spełnione te warunki:
- System operacyjny: Windows 10 lub 11, macOS 13 lub nowszy (Ventura lub nowszy) lub Linux. Chrome na Androida, iOS i ChromeOS nie są jeszcze obsługiwane przez nasze interfejsy API obsługiwane przez Gemini Nano.
- Pamięć: co najmniej 22 GB na woluminie zawierającym profil Chrome.
- GPU: więcej niż 4 GB pamięci VRAM.
- Sieć: nieograniczona transmisja danych lub nielimitowane połączenie.
Te wymagania obowiązują Cię w trakcie procesu tworzenia aplikacji oraz Twoich użytkowników, którzy korzystają z funkcji, które tworzysz.
Korzystanie z Prompt API
Przed użyciem tego interfejsu API musisz zaakceptować zasady Google dotyczące niedozwolonych zastosowań generatywnej AI.
W przestrzeni nazw LanguageModel
dostępne są 2 funkcje:
availability()
, aby sprawdzić, co potrafi model 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 źródło.
Aby sprawdzić, czy model jest gotowy do użycia, wywołaj asynchroniczną funkcję LanguageModel.availability()
. Powinien on zwrócić jedną z tych odpowiedzi:
"unavailable"
oznacza, że implementacja nie obsługuje żądanych opcji lub nie obsługuje w ogóle modelu językowego."downloadable"
oznacza, że implementacja obsługuje żądane opcje, ale zanim będzie można utworzyć sesję z wykorzystaniem tych opcji, trzeba będzie pobrać coś (np. sam model językowy lub dostosowanie szczegółowe)."downloading"
oznacza, że implementacja obsługuje żądane opcje, ale przed utworzeniem sesji za pomocą tych opcji musi ukończyć bieżącą operację pobierania."available"
oznacza, że implementacja obsługuje żądane opcje bez konieczności pobierania nowych plików.
Aby wywołać pobieranie modelu i utworzyć sesję modelu językowego, wywołaj asynchroniczną funkcję LanguageModel.create()
. Jeśli odpowiedź na availability()
to 'downloadable'
, zalecamy sprawdzenie postępu pobierania. Dzięki temu możesz poinformować użytkownika, jeśli pobieranie trwa.
const session = await LanguageModel.create({ monitor(m) { m.addEventListener("downloadprogress", (e) => { console.log(`Downloaded ${e.loaded * 100}%`); }); }, });
Możliwości modelu
Funkcja params()
informuje o parametrach modelu językowego. Obiekt zawiera te pola:
defaultTopK
: domyślna wartość top-K (domyślnie3
).maxTopK
: maksymalna wartość top-K (8
).defaultTemperature
: domyślna temperatura (1.0
). Wartość temperatury musi mieścić się w zakresie od0.0
do2.0
.maxTemperature
: maksymalna temperatura.
await LanguageModel.params(); // {defaultTopK: 3, maxTopK: 8, defaultTemperature: 1, maxTemperature: 2}
Tworzenie sesji
Gdy interfejs Prompt API będzie gotowy do użycia, utwórz sesję za pomocą funkcji create()
. Model możesz wywołać 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 poziomu 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, });
Opcjonalny obiekt opcji funkcji create()
przyjmuje też pole signal
, które umożliwia przekazanie wartości AbortSignal
, aby zakończyć sesję.
const controller = new AbortController(); stopButton.onclick = () => controller.abort(); const session = await LanguageModel.create({ signal: controller.signal, })
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 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.inputUsage}/${session.inputQuota}`);
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 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);
Klonowanie sesji
Aby zachować zasoby, możesz sklonować istniejącą sesję za pomocą funkcji clone()
. Kontekst rozmowy jest resetowany, ale początkowe prompt pozostaje nienaruszony. 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, });
Prośba o model
Model możesz wywołać za pomocą funkcji prompt()
lub promptStreaming()
.
Dane wyjściowe nieprzesyłane strumieniowo
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 {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); }
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 generowania przez model. Funkcja promptStreaming()
zwraca wartość 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); } }
Zatrzymywanie promptu
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 zostanie przerwane. Jeśli często chcesz korzystać z modelu, możesz zachować sesję, ponieważ tworzenie sesji 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." );
Możliwości multimodalne
Prompt API obsługuje dane wejściowe dźwięku i obrazu z Chrome 138 Canary na potrzeby eksperymentów lokalnych. Interfejs API zwraca dane wyjściowe w postaci tekstu.
Dzięki tym funkcjom możesz:
- Zezwalanie użytkownikom na transkrypcję wiadomości audio wysyłanych w aplikacji do czatu.
- Opisać obraz przesłany do witryny na potrzeby wykorzystania w podpisie lub tekście alternatywnym.
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 } ] }]);
Demonstracje wielomodalne
Zapoznaj się z demo interfejsu Mediarecorder Audio Prompt, aby dowiedzieć się, jak używać interfejsu Prompt API do obsługi wejścia audio, oraz z demo interfejsu Canvas Image Prompt, aby dowiedzieć się, jak używać interfejsu Prompt API do obsługi wejścia obrazowego.
Strategia dotycząca skuteczności
Interfejs Prompt API na potrzeby internetu jest nadal opracowywany. Podczas tworzenia tego interfejsu API zapoznaj się ze sprawdzonymi metodami dotyczącymi zarządzania sesjami, aby uzyskać optymalną wydajność.
Prześlij opinię
Twoja opinia pomoże nam określić przyszłość tego interfejsu API i poprawić Gemini Nano. Może to nawet skutkować stworzeniem interfejsów API do określonych zadań (np. do transkrypcji dźwięku lub opisu obrazu), aby spełniać Twoje potrzeby i potrzeby Twoich użytkowników.
Udział w badaniu i przesyłanie opinii
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.
- Dołącz do programu wczesnego testowania.
- Aby przekazać opinię na temat implementacji Chrome, prześlij zgłoszenie błędu lub prośbę o dodanie funkcji.
- Przekaż opinię na temat kształtu interfejsu API, komentując istniejące zgłoszenie lub otwierając nowe w repozytorium Prompt API na GitHubie.
- Aby wziąć udział w tworzeniu standardów, dołącz do grupy społecznościowej Web Incubator Community Group.