Co to jest Prompt API?

Prompt API to eksperymentalna propozycja platformy internetowej od W3C Web Machine Learning Community Group, która udostępnia model języka dużego rozmiaru dostarczany przez przeglądarkę do JavaScript poprzez interfejs window.LanguageModel. Strony tworzą sesję za pomocą LanguageModel.create(), opcjonalnie konfigurują ją za pomocą system prompt, a następnie wywołują prompt() lub promptStreaming(), aby uzyskać odpowiedź.

W przeciwieństwie do wywoływania hostowanego API LLM, model działa na urządzeniu użytkownika. Oznacza to, że dane wejściowe nigdy nie opuszczają maszyny, strona działa offline po buforowaniu modelu i nie ma kosztów za żądanie. W Chrome podstawowym modelem jest Gemini Nano, ale API jest celowo niezależne od modelu, dzięki czemu inne przeglądarki mogą podłączyć różne implementacje.

Sesja jest stanowa: śledzi historię konwersacji w oknie kontekstu mierzonego w tokenach. Gdy okno się zapełni, najstarsze wiadomości spoza systemu są automatycznie usuwane (wywoływane jest zdarzenie contextoverflow), a w dowolnym momencie możesz sprawdzić session.contextUsage i session.contextWindow, aby zobaczyć, ile miejsca pozostało.

Opis narzędzia

Ten plac zabaw to interaktywna powierzchnia czatu podłączona do window.LanguageModel. Pozwala ustawić system prompt, wysyłać wiadomości i obserwować, jak model przesyła tokeny w czasie rzeczywistym. Pasek postępu pokazuje dostępność modelu i postęp pobierania, a pasek użycia tokenów raportuje, ile okna kontekstu sesji jest zużywane.

Sesja jest tworzona leniwie przy pierwszym wysłaniu i ponownie używana w wiadomościach, dopóki nie zmienisz system prompt, w którym to momencie jest niszczona i tworzona nowa z nowymi instrukcjami.

Funkcje

  • Odpowiedzi strumieniowe — używa promptStreaming(), dzięki czemu tokeny pojawiają się w czacie w miarę ich generowania.
  • Edytor system prompt — zdefiniuj trwałą rolę lub zachowanie, które warunkuje każdą odpowiedź.
  • Przycisk Stop — przerwij prompt w locie za pomocą AbortController bez rozmontowywania sesji.
  • Użycie kontekstu na żywo — wizualizuje contextUsage względem contextWindow, dzięki czemu możesz zobaczyć, kiedy konwersacja ma się przepełnić.
  • Dostępność i postęp pobierania — wyświetla stan availability() i zdarzenia downloadprogress podczas pobierania modelu.

Przypadki użycia

  • Testowanie promptów lokalnie — iteruj system prompts i wzorce few-shot bez płacenia za API w chmurze.
  • Testowanie wykonalności AI na urządzeniu — sprawdź, czy Prompt API jest dostępny, zobacz, jak duże jest okno kontekstu, i porównaj szybkość odpowiedzi na Twoim sprzęcie.
  • Redagowanie wrażliwe na prywatność — burza mózgów lub przeformułowanie tekstu, który nie powinien być wysyłany na serwer strony trzeciej.

Wymagania

  • Przeglądarka, która implementuje Prompt API. Chrome 138+ udostępnia go eksperymentalnie; w starszych wersjach może być konieczne włączenie go za pośrednictwem chrome://flags/#prompt-api-for-gemini-nano i pobranie modelu na urządzeniu.
  • Bezpieczny kontekst (HTTPS lub localhost).
  • Urządzenie spełniające wymagania sprzętowe modelu (wystarczająca przestrzeń dyskowa, RAM i obsługiwany GPU/CPU). Na nieobsługiwanych urządzeniach availability() zwraca unavailable.
  • Początkowa przepustowość do pobrania modelu. Kolejne sesje ponownie używają buforowanego modelu.

Jak to działa

  1. Po zainstalowaniu narzędzie sprawdza typeof window.LanguageModel. Jeśli jest nieobecny, ostrzeżenie zastępuje wejście czatu.
  2. LanguageModel.availability() raportuje jeden z: available, downloadable, downloading lub unavailable. Wynik jest pokazywany na pasku postępu.
  3. Przy pierwszym naciśnięciu Wyślij, narzędzie wywołuje LanguageModel.create() z monitor, który przesyła zdarzenia downloadprogress do interfejsu użytkownika. Jeśli ustawiony jest system prompt, jest przekazywany za pośrednictwem initialPrompts: [{ role: "system", content: ... }].
  4. Wiadomość użytkownika jest wysyłana przez session.promptStreaming(text, { signal }). Zwrócony ReadableStream<string> jest zużywany fragment po fragmencie i dołączany do wiadomości asystenta.
  5. Po każdej odpowiedzi session.contextUsage i session.contextWindow są odczytywane i odzwierciedlane na pasku użycia tokenów.
  6. Naciśnięcie Stop wywołuje controller.abort(), które odrzuca strumień w locie za pomocą AbortError przy jednoczesnym pozostawieniu sesji aktywnej dla następnego promptu.
  7. Edycja system prompt unieważnia buforowaną sesję: istniejąca jest destroy()-owana, a następne wysłanie tworzy nową sesję ze zaktualizowanymi instrukcjami.

Wyjaśnienie opcji

  • System prompt — instrukcja w dowolnej formie przekazana jako pierwsza wiadomość z rolą system. Warunkuje wszystkie kolejne tury. Pozostawienie jej pustej tworzy sesję bez wiadomości systemowej.
  • Wyślij / StopWyślij przesyła wejście jako wiadomość user. Stop przerywa odpowiedź strumieniową bez usuwania poprzednich wiadomości.
  • Użycie tokenówused / total tokeny dla bieżącej sesji. Gdy used zbliża się do total, starsze pary użytkownik/asystent będą usuwane przy następnym promptu.
  • Status modelu — połączony odczyt availability() i downloadprogress. Podczas pobierania modelu pasek animuje się i pokazuje procent.

Ograniczenia

  • Prompt API jest eksperymentalne. Nazwy metod, opcje (np. inputUsage vs contextUsage) i semantyka zdarzeń mogą się zmieniać między wersjami Chrome.
  • Jakość wyjścia, faktyczność i przestrzeganie instrukcji zależą całkowicie od modelu dostarczonego przez przeglądarkę i nie są gwarantowane.
  • Okno kontekstu jest małe w porównaniu z hostowanymi LLM. Długie konwersacje będą się przepełniać i dyskretnie usuwać najwcześniejsze tury.
  • API nie jest udostępniane pracownikom sieci Web i może wymagać delegacji Permissions Policy (language-model) na iframach między źródłami.
  • To narzędzie celowo nie udostępnia temperature, topK, tool use, wejść multimodalnych, strukturalnych wyjść (responseConstraint) lub klonowania sesji. Są one częścią specyfikacji, ale pozostawione poza placem zabaw, aby skupić się na zwykłym czacie.

FAQ

Dlaczego mówi, że API nie jest obsługiwane? window.LanguageModel jest niezdefiniowany w Twojej przeglądarce. Spróbuj najnowszego Chrome na pulpicie i, jeśli to konieczne, włącz flagę Prompt API i czekaj na pobranie modelu na urządzeniu za pośrednictwem chrome://components.

Dlaczego pierwsza odpowiedź jest powolna? Pierwsze wywołanie może wyzwolić pobieranie modelu (obserwuj pasek postępu) i krok tworzenia sesji. Później prompty ponownie używają tej samej sesji i zaczynają przesyłać strumieniowo prawie natychmiast.

Czy mój prompt opuszcza urządzenie? Nie. Model działa lokalnie. Twój tekst nie jest wysyłany na żaden serwer przez to narzędzie.

Co się dzieje, gdy kontekst się zapełni? Sesja wywoła zdarzenie contextoverflow i usunie najstarsze tury spoza systemu, aby zrobić miejsce. System prompt jest zachowywany.

Dlaczego zmiana system prompt wyczyściła styl odpowiedzi w środku konwersacji? Edycja system prompt niszczy bieżącą sesję i tworzy nową przy następnym wysłaniu. Nowa sesja nie ma pamięci o poprzednich turach.