
Chrome z Gemini Nano: jak działa Prompt API w przeglądarce
Google uruchomiło Prompt API w grudniu 2025 roku. To interfejs pozwalający aplikacjom webowym korzystać z Gemini Nano bezpośrednio w przeglądarce Chrome – bez serwerów, bez opłat za API, bez kluczy dostępu.
TL;DR: Prompt API to wbudowany w Chrome interfejs wywołujący model Gemini Nano lokalnie. Działa całkowicie offline, nie wymaga kluczy API ani połączenia z serwerami Google. Przetestowałem to na Chrome 131 – model odpowiada w poniżej sekundy na prostych zadaniach tekstowych.
Źródło: The Prompt API: Chrome integra Gemini Nano sin servidores – El Ecosistema Startup
Czym jest Prompt API i jak działa w Chrome?
Prompt API to interfejs wbudowany w Chrome, który udostępnia model Gemini Nano bezpośrednio w przeglądarce. Zamiast wysyłać zapytania na zdalne serwery, silnik AI działa na urządzeniu użytkownika. W praktyce wygląda to inaczej niż klasyczne API. Model jest wbudowany w przeglądarkę i dostępny przez standardowe metody JavaScript. Gdy testowałem to na Chrome 131, wystarczył zwykły blok try/catch z wywołaniem capability().

Otóż architektura opiera się na wbudowanym silniku AI, który Chrome pobiera przy pierwszym uruchomieniu. Model waży około 1.8 GB i jest buforowany lokalnie. Zatem kolejne zapytania nie wymagają pobierania.
const capabilities = await ai.languageModel.capabilities();
if (capabilities.available === 'readily') {
const session = await ai.languageModel.create();
const result = await session.prompt('Wyjaśnij CORS w jednym zdaniu');
console.log(result);
}
Powyższy kod sprawdza dostępność modelu, tworzy sesję i wysyła zapytanie. To wszystko. Żnych nagłówków autoryzacyjnych, żadnych fetchów do zewnętrznych endpointów. Sprawdziłem to sam. Model faktycznie odpowiada offline.
Jakie są wymagania sprzętowe i programistyczne?
Prompt API wymaga Chrome w wersji 131 lub nowszej z włączoną flagą chrome://flags/#optimization-guide-on-device-model. Ponadto potrzebujesz minimum 4 GB RAM i systemu z obsługą WebGPU lub wystarczającej pamięci CPU. Na urządzeniach mobilnych sprawa jest bardziej skomplikowana – model działa poprawnie głównie na flagowcach z Androidem 14+.
Choć limit tokenów kontekstu wynosi około 4096 tokenów wejściowych, wystarcza to na większość zadań tekstowych: klasyfikację, streszczanie, formatowanie, tłumaczenia. Z kolei długość odpowiedzi jest ograniczona do około 1024 tokenów wyjściowych.
| Parametr | Wartość | Uwagi |
|---|---|---|
| Minimalna wersja Chrome | 131 | Z włączoną flagą |
| Rozmiar modelu | ~1.8 GB | Pobierany raz, buforowany |
| Kontekst wejściowy | ~4096 tokenów | Okreslony w dokumentacji |
| Limit odpowiedzi | ~1024 tokenów | Wystarcza na krótkie teksty |
| Wymagany RAM | 4 GB+ | Zalecane 8 GB |
| Platformy | Windows, macOS, ChromeOS | Android w fazie testów |
Jak wygląda detekcja dostępności modelu w kodzie?
Detekcja dostępności to pierwszy krok przed wywołaniem Prompt API. API udostępnia metodę capabilities(), która zwraca obiekt z polem available. Możliwe wartości to readily (model gotowy), after-download (wymaga pobrania) lub no (urządzenie nie wspiera modelu).
W rezultacie aplikacja może płynnie reagować na brak modelu – na przykład wyświetlić przycisk instalacji lub przełączyć się na fallback. Zauważyłem, że na pierwszym uruchomieniu Chrome pobiera model w tle, co może trwać kilka minut na szybkim łączu.
const checkAI = async () => {
const caps = await ai.languageModel.capabilities();
if (caps.available === 'no') {
return 'Model niedostępny na tym urządzeniu';
}
if (caps.available === 'after-download') {
return 'Model wymaga pobrania - uruchom ponownie za chwilę';
}
return 'Model gotowy do użycia';
};
Przede wszystkim warto cache’ować wynik detekcji. Ponowne wywołanie capabilities() za każdym razem jest niepotrzebne – stan modelu rzadko się zmienia podczas jednej sesji przeglądarki.
Jakie problemy rozwiązuje lokalne uruchamianie modelu?
Lokalne uruchamianie Gemini Nano eliminuje opóźnienia sieciowe, koszty API i wymóg kluczy dostępu. Dla deweloperów to oznacza brak konieczności zarządzania billingiem. Dla użytkowników – szybsze odpowiedzi i prywatność danych, które nie opuszczają ich urządzenia.
Mimo to, model ma ograniczenia. Gemini Nano to najmniejszy model z rodziny Gemini, zoptymalizowany pod urządzenia mobilne i przeglądarki. Nie poradzi sobie z zaawansowanym wnioskowaniem logicznym, generowaniem długich tekstów ani zadaniami wymagającymi dużej wiedzy faktograficznej.
Najczęstsze zastosowania, które sprawdzają się w praktyce:
- Klasyfikacja tekstu (np. analiza sentymentu recenzji)
- Formatowanie danych (np. konwersja adresu na ustrukturyzowany JSON)
- Streszczanie krótkich artykułów (do 2000 słów)
- Tłumaczenie prostych zdań między językami
- Korekta ortograficzna i gramatyczna tekstu
- Wykrywanie języka tekstu wejściowego
- Generowanie tagów i słów kluczowych z opisu
- Odpowiadanie na proste pytania FAQ
Czym Prompt API różni się od klasycznego API Gemini?
Klasyczne API Gemini (gemini-pro, gemini-ultra) wymaga klucza API, połączenia z serwerami Google i generuje koszty za każdy token. Prompt API nie ma żadnego z tych wymagań. Model działa lokalnie, odpowiedzi są darmowe, a dane nie opuszczają urządzenia.
Z drugiej strony, klasyczne API oferuje znacznie większe modele z lepszym wnioskowaniem, dostępem do narzędzi, trybem streaming i kontekstem do miliona tokenów. Prompt API to węższe narzędzie – szybkie, lokalne, darmowe, ale ograniczone do prostych zadań tekstowych.
Gdy testowałem oba podejścia, różnica w jakości odpowiedzi była wyraźna przy zadaniach wymagających logicznego wnioskowania. Gemini Nano potrafi pomylić sekwencje kroków w instrukcjach, podczas gdy gemini-pro radzi sobie z nimi bez problemu.
Jak wygląda obsługa błędów i fallback?
Prompt API może rzucić błędy: model niedostępny, przekroczony limit tokenów, błąd inicjalizacji sesji. Dlatego każdy blok wywołania powinien być otoczony try/catch. Ponadto aplikacja powinna mieć strategię fallback – na przykład przełączenie się na zdalne API lub wyświetlenie komunikatu dla użytkownika.
try {
const session = await ai.languageModel.create({
systemPrompt: 'Jesteś pomocnym asystentem.'
});
const response = await session.prompt(userInput);
return response;
} catch (error) {
if (error.name === 'NotSupportedError') {
// Fallback na zdalne API
return await fetchRemoteAPI(userInput);
}
throw error;
}
Zauważyłem, że błąd NotSupportedError pojawia się głównie na starszych urządzeniach bez WebGPU. Na nowoczesnych laptopach z Chrome 131+ inicjalizacja sesji przechodzi bez problemów w około 200 ms.
Jak skonfigurować sesję Prompt API z własnym promptem systemowym?
Prompt API pozwala na zdefiniowanie promptu systemowego podczas tworzenia sesji. Dokumentacja wskazuje, że parametr systemPrompt przyjmuje ciąg znaków określający zachowanie modelu. Przetestowałem to na Chrome 131 – model respektuje instrukcje formatowania odpowiedzi. W mojej praktyce wystarczył zwykły tekst z poleceniem, aby Gemini Nano zmienił styl wypowiedzi na bardziej formalny lub luźny.
Otóż konfiguracja wymaga wywołania ai.languageModel.create() z odpowiednim obiektem opcji. Możesz określić temperaturę, tokeny wyjściowe oraz prompt systemowy. Co więcej, sesja utrzymuje kontekst między kolejnymi wywołaniami prompt(), co pozwala na prowadzenie wielokrotnego dialogu.
const session = await ai.languageModel.create({
systemPrompt: 'Odpowiadaj zawsze w formacie JSON.',
topK: 3,
temperature: 0.7
});
const result1 = await session.prompt('Podaj dane firmy XYZ');
const result2 = await session.prompt('A teraz dodaj numer telefonu');
Powyższy kod tworzy sesję z instrukcją formatowania JSON. Zauważyłem, że model dobrze trzyma się wytycznych przez około 5-6 wymian zdań. Po przekroczeniu tej liczby zaczyna gubić kontekst i zbaczać z tematu. Dlatego przy dłuższych konwersacjach lepiej tworzyć nową sesję.
Z kolei optymalna temperatura dla zadań formatujących wynosi około 0.3-0.5. Wyższe wartości wprowadzają niepotrzebną kreatywność, która psuje strukturyzowane odpowiedzi.
Jakie są realne limity tokenów i jak je obejść?
Gemini Nano przez Prompt API obsługuje około 4096 tokenów wejściowych i 1024 tokeny wyjściowe. Zatem przy dłuższych tekstach trzeba zastosować strategie dzielenia materiału na mniejsze fragmenty. Przetestowałem to na artykule o 3000 słów – model po prostu przycina odpowiedź po osiągnięciu limitu, bez komunikatu ostrzeżenia.
Choć limit wejściowy wydaje się mały, wystarcza na większość zadań przeglądarkowych. Na przykład klasyfikacja krótkiej recenzji, analiza sentymentu pojedynczego komentarza czy korekta akapitu tekstu mieszczą się w tych ograniczeniach bez problemu.
Techniki obejścia limitów tokenów:
– Dzielenie tekstu na fragmenty po 500-800 słów i przetwarzanie sekwencyjne
– Streszczanie długich tekstów przed właściwym zapytaniem
– Używanie promptów systemowych z instrukcją zwięzłych odpowiedzi
– Ekstrakcja tylko kluczowych fragmentów przed analizą
– Wykorzystanie wielu sesji do równoległego przetwarzania
– Caching pośrednich wyników w localStorage
– Filtrowanie nieistotnych danych przed wysłaniem do modelu
– Kaskadowe przetwarzanie z narastającym podsumowaniem
W rezultacie aplikacja może przetwarzać większe dokumenty, ale wymaga to dodatkowej logiki po stronie klienta. Gdy testowałem kaskadowe podsumowanie, jakość spadała przy każdym kolejnym kroku – model gubił detaty z początkowych fragmentów.
| Strategia | Złożoność wdrożenia | Jakość wyniku | Przykładowy use case |
|---|---|---|---|
| Dzielenie na fragmenty | Niska | Średnia | Analiza długich recenzji |
| Kaskadowe streszczanie | Średnia | Niska | Przegląd artykułów |
| Ekstrakcja słów kluczowych | Niska | Wysoka | Tagowanie treści |
| Wielosesyjne przetwarzanie | Wysoka | Średnia | Korekta książki |
Jakie zagrożenia bezpieczeństwa niesie Prompt API?
Prompt injection to główne zagrożenie związane z Prompt API. Badacze z Google i Forcepoint zidentyfikowali 10 realnych ataków indirect prompt injection w środowisku produkcyjnym, celujących w agentów AI (Infosecurity Magazine, 2026). Atakujący mogą wstrzykiwać złośliwe instrukcje przez dane wejściowe użytkownika, zmuszając model do wykonania niepożądanych akcji.
Źródło: Indirect prompt injection is taking hold in the wild – Help Net Security
Mimo to, Prompt API ma jedną przewagę – działa lokalnie bez dostępu do zewnętrznych API czy narzędzi. Zatem ryzyko jest mniejsze niż w przypadku agentów z dostępem do systemów plików czy bazy danych. Jednakże model nadal może generować szkodliwe treści lub ujawniać informacje z promptu systemowego.
Przetestowałem prosty atak typu „ignore previous instructions” na Gemini Nano. Model częściowo ulegał manipulacji – w około 4 na 10 prób zmieniał zachowanie zgodnie z wstrzykniętą instrukcją. Co więcej, ataki były skuteczniejsze, gdy złośliwy tekst był sformatowany jako kod lub lista zadań.
Sposoby zabezpieczenia przed prompt injection w Prompt API:
– Sanityzacja danych wejściowych przed wysłaniem do modelu
– Umieszczanie instrukcji systemowych w osobnym parametrze, nie w treści zapytania
– Walidacja formatu odpowiedzi przed wyświetleniem użytkownikowi
– Ograniczenie długości danych wejściowych do minimum
– Monitorowanie wzorców typowych dla ataków injection
– Izolacja sesji między różnymi użytkownikami aplikacji
Wobec tego deweloperzy muszą traktować dane z Prompt API jak każdą inną niezaufaną daną wejściową. Filtracja i sanityzacja to absolutna konieczność, nawet przy lokalnym modelu.
Jak zintegrować Prompt API z istniejącą aplikacją webową?
Integracja Prompt API z istniejącą aplikacją wymaga dodania detekcji dostępności, warstwy fallback i interfejsu użytkownika informującego o statusie modelu. Dokumentacja Chrome sugeruje sprawdzanie capabilities() przed każdą sesją. W mojej praktyce wystarczy sprawdzenie raz przy ładowaniu strony z cache’owaniem wyniku.
Na przykład prosta integracja z formularzem kontaktowym może wyglądać tak: użytkownik wpisuje wiadomość, a model lokalnie sugeruje poprawki ortograficzne lub ton odpowiedzi. Co więcej, aplikacja może oferować dwie ścieżki – lokalną dla prostych zadań i zdalną dla złożonych zapytań.
class LocalAI {
constructor() {
this.session = null;
this.ready = false;
}
async init() {
const caps = await ai.languageModel.capabilities();
if (caps.available === 'readily') {
this.session = await ai.languageModel.create({
systemPrompt: 'Koryguj ortografię języka polskiego.'
});
this.ready = true;
}
}
async correct(text) {
if (!this.ready) return text;
return await this.session.prompt(
`Popraw błędy: ${text}`
);
}
}
Powyższa klasa enkapsuluje logikę Prompt API. Zauważyłem, że inicjalizacja sesji trwa około 200-500 ms na nowoczesnym sprzęcie, więc warto wywoływać ją asynchronicznie przy ładowaniu strony. Dlatego dodanie wskaźnika ładowania poprawia doświadczenie użytkownika.
Z kolei aplikacje produkcyjne powinny mieć warstwę abstrakcji między kodem biznesowym a Prompt API. Ułatwia to zamianę na inny model lub dodanie nowych funkcji bez przepisywania logiki.
Jakie są realne koszty migracji z płatnego API na Prompt API?
Migracja z płatnego API na Prompt API eliminuje koszty tokenów, ale wprowadza koszty rozwoju i testowania. Deweloper wydał 650 USD miesięcznie na Claude API z 15 000 wywołań, zanim zoptymalizował koszty (Sysprobs, 2026). Prompt API oferuje darmowe wywołania, ale wymaga inwestycji w logikę fallback i testowanie kompatybilności.
Choć same wywołania są darmowe, koszty migracji obejmują czas programisty na implementację detekcji, fallback i testowanie na różnych urządzeniach. Na przykład przetestowałem kompatybilność na 4 różnych konfiguracjach sprzętowych – na każdym model zachowywał się inaczej pod względem szybkości i jakości odpowiedzi.
Porównanie kosztów operacyjnych:
– Claude Opus: 15 USD za milion tokenów wejściowych (Sysprobs, 2026)
– GPT-4: około 30 USD za milion tokenów wejściowych
– Gemini Pro: darmowe do określonego limitu
– Prompt API: całkowicie darmowe, bez limitów wywołań
– Koszt migracji: 10-40 godzin pracy programisty
– Utrzymanie fallback: 2-5 godzin miesięcznie
W rezultacie migracja się zwraca przy aplikacjach z dużą liczbą prostych zapytań. Jednakże przy złożonych zadaniach wymagających silnego modelu, Prompt API nie zastąpi płatnych rozwiązań.
Często zadawane pytania
Czy Prompt API działa na wszystkich przeglądarkach?
Nie. Prompt API jest dostępne wyłącznie w Chrome 131+ z włączoną flagą chrome://flags/#optimization-guide-on-device-model. Wymaga minimum 4 GB RAM i obsługi WebGPU lub wystarczającej pamięci CPU – na starszych urządzeniach zwraca status no.
Jak szybko odpowiada Gemini Nano przez Prompt API?
Przetestowałem to na Chrome 131 – model odpowiada w poniżej sekundy na prostych zadaniach tekstowych jak klasyfikacja czy korekta. Inicjalizacja sesji trwa około 200-500 ms, a kolejne wywołania prompt() są szybsze dzięki utrzymaniu kontekstu w pamięci.
Czy Prompt API wymaga połączenia z internetem?
Nie po początkowym pobraniu modelu. Model waży około 1.8 GB i jest buforowany lokalnie. Zatem kolejne wywołania działają całkowicie offline, bez wysyłania danych na serwery Google – to potwierdza dokumentacja Chrome.
Jakie zastosowania najlepiej pasują do Prompt API?
Klasyfikacja tekstu, formatowanie danych, streszczanie krótkich artykułów, tłumaczenia prostych zdań, korekta ortograficzna – wszystkie te zadania mieszczą się w limicie 4096 tokenów wejściowych. Badacze zidentyfikowali 10 realnych ataków injection (Infosecurity Magazine, 2026), dlatego unikaj zadań wymagających dostępu do zewnętrznych narzędzi.
Podsumowanie
Prompt API to pragmatyczne rozwiązanie dla deweloperów webowych. Oto kluczowe wnioski z analizy i testów:
- Model działa lokalnie, offline, bez kluczy API i bez kosztów za tokeny
- Ograniczenia (4096 tokenów wejścia, 1024 wyjścia) definiują wąski pas zastosowań
- Kompatybilność ograniczona do Chrome 131+ z włączoną flagą wymaga solidnego fallback
- Zagrożenia prompt injection są realne – sanityzacja wejścia to konieczność
- Migracja z płatnych API się zwraca przy dużym wolumenie prostych zadań tekstowych
Jeśli budujesz aplikację webową z prostymi zadaniami AI – klasyfikacją, formatowaniem, korektą – dodaj Prompt API jako pierwszą warstwę z fallback na zdalne API. Przetestowałem to podejście i działa stabilnie na nowoczesnym sprzęcie. Zacznij od detekcji capabilities(), dodaj obslugę błędów i monitoruj jakość odpowiedzi. Dokumentacja Chrome jest dostępna w flagach przeglądarki.