1. Wprowadzenie
Nowoczesne tworzenie stron internetowych zapewnia alternatywę dla podróży w obie strony do chmury w przypadku korzystania z AI. Chrome zaczął udostępniać wbudowane interfejsy API AI, które umożliwiają korzystanie z różnych modeli, od małych modeli eksperckich do tłumaczenia po zaawansowane skondensowane pełne modele językowe. Wszystko to bez kosztów tokenów dla Ciebie i Twoich użytkowników, z zachowaniem prywatności na ich urządzeniach.
Jednocześnie agenty AI oferują użytkownikom nowy sposób interakcji z aplikacjami internetowymi, a przygotowanie witryny do obsługi agentów za pomocą WebMCP może pomóc w zmniejszeniu zużycia tokenów przy jednoczesnym zapewnieniu dokładniejszych wyników niż tradycyjne działanie, które wymaga zrzutów ekranu i wyodrębniania danych z DOM.
W tym ćwiczeniu będziesz pracować nad Mont-Royal Plein Air, czyli witryną e-commerce z wyposażeniem outdoorowym. Dowiesz się, jak tworzyć i integrować wbudowane interfejsy AI API i WebMCP, aby:
- Wywnioskuj intencje klienta na podstawie historii przeglądania i dynamicznie twórz dla niego rekomendacje za pomocą modeli na urządzeniu.
- Udostępnia narzędzia, których agenci i asystenci przeglądarki mogą używać do poruszania się po witrynie, sprawdzania produktów i rekomendacji oraz zarządzania koszykiem na zakupy użytkownika.
- (Opcjonalnie) Tłumacz witrynę na bieżąco za pomocą małych modeli eksperckich na urządzeniu.
- (Opcjonalnie) Przekształć podstawowe wyszukiwanie w witrynie w agenta w witrynie, który korzysta z tych samych narzędzi co agenci zewnętrzni.
Czego się nauczysz
- Jak korzystać z interfejsu Prompt API i wymuszać z niego strukturalne dane wyjściowe w formacie JSON.
- Jak rejestrować narzędzia WebMCP i jakie strategie stosować w przypadku kompozycji i szczegółowości narzędzi.
- (Opcjonalnie) Jak używać interfejsu Translator API do szybkiego tłumaczenia treści za pomocą modelu eksperckiego na urządzeniu.
- (Opcjonalnie) Jak samodzielnie wywoływać narzędzia WebMCP.
Wymagania wstępne
- osobiste konto Google i Google Cloud;
- Google Chrome w wersji 150 lub nowszej albo w wersji Canary, deweloperskiej lub beta z włączonymi flagami
#enable-webmcp-testingi#devtools-webmcp-support. - znajomość języków HTML, CSS, JavaScript i TypeScript;
- Znajomość schematu JSON.
2. Konfigurowanie projektu
Konto Google
Jeśli nie masz jeszcze osobistego konta Google, musisz je utworzyć.
Zaloguj się w konsoli Google Cloud
Zaloguj się w konsoli Google Cloud, korzystając z osobistego konta Google.
Włącz płatności
Aby skonfigurować osobiste konto rozliczeniowe, włącz płatności w Cloud Console.
Tworzenie projektu (opcjonalnie)
Jeśli nie masz bieżącego projektu, którego chcesz użyć w tym ćwiczeniu, utwórz nowy projekt.
Otwieranie edytora Cloud Shell
- Kliknij ten link, aby przejść bezpośrednio do edytora Cloud Shell.
- Jeśli w dowolnym momencie pojawi się prośba o autoryzację, kliknij Autoryzuj, aby kontynuować.

- Jeśli terminal nie pojawia się u dołu ekranu, otwórz go:
- Kliknij Wyświetl.
- Kliknij Terminal.

Ustawianie projektu
- W terminalu ustaw projekt za pomocą tego polecenia:
Przykład:gcloud config set project [PROJECT_ID]gcloud config set project lab-project-id-example
- Wyświetli się ten komunikat:
Updated property [core/project].
Konfiguracja lokalna i obszaru roboczego
- W terminalu (lub terminalu Cloud Shell) sklonuj repozytorium projektu i przejdź do katalogu projektu:
git clone https://github.com/GoogleChromeLabs/codelabs mont-royal cd mont-royal - Przejdź do folderu
ecommerce-ai-enhancements/starter:cd ecommerce-ai-enhancements/starter - Zainstaluj zależności za pomocą narzędzia
pnpm:pnpm install - Uruchom lokalny serwer programistyczny:
Otwórz przeglądarkę i przejdź na stronępnpm devhttp://localhost:5173, aby wyświetlić sklep Mont-Royal Plein Air.
(Opcjonalnie) Instalowanie rozszerzenia WebMCP Inspector
Aby ułatwić sobie pracę z WebMCP, możesz zainstalować inspektora narzędzia kontekstu modelu WebMCP. Po zainstalowaniu musisz uzyskać klucz interfejsu Gemini API, aby z niej korzystać:
- Otwórz AI Studio.
- Kliknij przycisk Utwórz klucz interfejsu API, aby wygenerować nowy klucz interfejsu Gemini API powiązany z projektem skonfigurowanym wcześniej w tym kroku.
- Otwórz inspektora narzędzia kontekstowego modelu WebMCP (otwiera się w panelu bocznym) i kliknij przycisk Update Gemini API Key (Zaktualizuj klucz interfejsu Gemini API).
- Wklej klucz interfejsu API w wyskakującym okienku i zapisz go.
To rozszerzenie ma podstawowego agenta, który może korzystać z WebMCP. Dzięki temu możesz wypróbować swoją witrynę za jego pomocą zamiast wywoływać narzędzia WebMCP bezpośrednio w Narzędziach deweloperskich.
3. Wbudowane modele AI w internecie
Czym jest interfejs Prompt API?
Interfejs Prompt API zapewnia aplikacjom internetowym bezpośredni dostęp do małego, multimodalnego modelu językowego działającego w całości na urządzeniu użytkownika. Ponieważ wnioskowanie jest wykonywane lokalnie:
- Zerowe opóźnienie w chmurze: brak podróży w obie strony w sieci i kolejkowania na serwerze zaplecza.
- Prywatne domyślnie: prompty i wszystkie przekazywane do nich konteksty nigdy nie opuszczają urządzenia.
- Brak kosztów: wnioskowanie odbywa się na sprzęcie klienta bez naliczania opłat za tokeny i kosztów hostingu w chmurze.
- Działa w trybie offline: działa niezawodnie nawet bez aktywnego połączenia z internetem.
W Chrome dostęp do interfejsu Prompt API uzyskuje się za pomocą interfejsu globalnego LanguageModel.
// 1. Set your expected inputs and outputs. This is multimodal, so you can
// include other types here, too
const languages = {
expectedInputs: [{type: "text", languages: ["en"]}],
expectedOutputs: [{type: "text", languages: ["en"]}],
}
// 2. Check availability. Always pass in your expected inputs and outputs,
// as some models may only support some inputs and outputs
const availability = await LanguageModel.availability(languages);
// 'available', 'downloading', or 'unavailable'
// 3. Create an isolated session with system prompt and language constraints
const session = await LanguageModel.create({
...languages,
// Optional: add initial context to your session, like a system prompt
initialPrompts: [
{
role: 'system',
content: 'You are an expert outdoors sales assistant...'
}
]
});
// 4. Define your expected output as JSON Schema
const schema = {
//...
}
// 5. Prompt the model (supports plain text or structured models)
const result = await session.prompt('Recommend a 3-season tent footprint.', {
responseConstraint: schema,
});
Ćwiczenie 1. Rekomendacje oparte na ścieżce
Witryny e-commerce zwykle zawierają karuzele lub oferty dodatkowe z produktami „często kupowanymi razem”. W przypadku witryny o tematyce outdoorowej bardziej przydatne może być tworzenie rekomendacji na podstawie historii przeglądania.
Aby to osiągnąć, utworzysz 3-etapowy potok rekomendacji:
- Profilowanie ścieżki: za pomocą interfejsu Prompt API przeanalizujesz chronologiczną oś czasu przeglądania klienta, aby spróbować wywnioskować prawdziwe zamiary użytkownika.
- Zapytanie o produkt: na podstawie tej intencji wyślesz żądanie do interfejsu API do fałszywego backendu produktu, aby uzyskać powiązane produkty.
- Rekomendacja produktu: przekaż te produkty z powrotem do interfejsu Product API, aby je uszeregować i zwrócić 5 najbardziej pasujących produktów do tego, co ogląda użytkownik.
Zadanie 1.1. Inicjowanie interfejsu Prompt API
Zamiast inicjować interfejs Prompt API za każdym razem, gdy chcesz go użyć, możesz scentralizować wywołania w jednym pliku, zapamiętując tworzenie za pomocą promptu systemowego, aby skrócić czas uruchamiania wielu wywołań tego samego agenta.
Otwórz plik src/ai/prompt-api.ts i sprawdź getPromptSession() w wierszach 27–58:
export async function getPromptSession(
systemPrompt: string = '',
options: { signal?: AbortSignal } = {}
): Promise<LanguageModel>
- Ponowne użycie sesji podstawowej w pamięci podręcznej W wierszu 21 znajduje się już mapa pamięci podręcznej,
baseSessions, z kluczem w postaci promptu systemowego. Ponowne używanie modeli podstawowych zamiastclone()nowych skraca czas uruchamiania i umożliwia dziedziczenie konfiguracji podstawowej bez wzajemnego zakłócania sesji. Wróć do klona – dzwoniący mogą z nim wchodzić w interakcje, w tymdestroy(), bez odrzucania Twojej zapisanej bazy. - Wykryj funkcje interfejsu API. Sprawdź, czy interfejs API istnieje, a jeśli nie, zgłoś błąd.
- Zadeklaruj swoje tryby i języki. Wbudowane modele mogą obsługiwać dane wejściowe multimodalne. Musisz zadeklarować, jakich trybów potrzebujesz i jakie języki chcesz obsługiwać. Wszystkie treści przekazywane do LLM są w języku angielskim.
- Zanim coś utworzysz, sprawdź dostępność. Nawet jeśli interfejs API istnieje, model, który spełnia Twoje wymagania, może nie być dostępny. Sprawdź, czy jest dostępna. Jeśli nie, zgłoś błąd. Jeśli raport nie został jeszcze pobrany, zgłoś postęp pobierania.
- Utwórz sesję. Skonfiguruj opcje tworzenia nowej sesji interfejsu Prompt API i w razie potrzeby podaj prompt systemowy.
Zadanie 1.2. Wdrażanie profilera ścieżki
Otwórz plik src/ai/journey-profiler.ts i sprawdź funkcję docelową w wierszach 42–100:
export async function inferJourneyProfile(
context: ProfilerInputContext,
catalogMap: ReadonlyMap<string, Product>
): Promise<JourneyProfile>
- Użyj funkcji z zadania 1, aby wygenerować nową sesję promptu.
- Poproś model o odpowiedź na podany tekst promptu, używając
journeyProfileSchemajako schematu JSON dla uporządkowanej odpowiedzi. - Przeanalizuj dane wyjściowe promptu i usuń zduplikowane kategorie docelowe.
- Zastąp zakodowane na stałe ciągi znaków rzeczywistymi wynikami z promptu.
- Po zakończeniu sesji usuń ją, aby zwolnić pamięć.
Zadanie 1.3. Zaimplementuj funkcję ponownego rankingu opartą na synergii
Otwórz plik src/ai/synergy-reranker.ts i sprawdź funkcję docelową w wierszach 30–71:
export async function rankComplementaryGear(
profile: JourneyProfile,
candidates: readonly Product[],
currentProduct?: Product | null,
cartProducts?: readonly Product[],
limit: number = 5
): Promise<readonly RecommendedItem[]>
- Użyj funkcji z zadania 1, aby wygenerować nową sesję promptu.
- Wprowadź do modelu podany tekst prompta i wygenerowany schemat.
- Przeanalizuj dane wyjściowe prompta.
- Zwróć utworzoną listę rekomendacji za pomocą
assembleRecommendations. - Po zakończeniu sesji usuń ją, aby zwolnić pamięć.
Weryfikowanie potoku rekomendacji
- Otwórz Chrome, aby
http://localhost:5173/catalog/tent-mont-tremblant-3p. - Przewiń w dół do sekcji Dla Ciebie.
- Zwróć uwagę, jak 5 kart dodatkowych aktualizuje się, aby odzwierciedlać inteligentne zestawy (np. ślady stóp, maty do spania i lekkie śledzie), a nie losowe produkty.
- Otwórz konsolę Narzędzi deweloperskich w Chrome, aby sprawdzić czas wykonania obu kroków wnioskowania w czasie rzeczywistym.
(Opcjonalnie) Zadanie 1.4. Zapoznanie się z większą liczbą wbudowanych modeli AI
Dostępnych jest kilka innych wbudowanych modeli AI, w tym model ekspercki interfejsu Translator API. Komponenty w tej bazie kodu są już połączone z usługą, która nasłuchuje zmian w bieżącym języku i prosi o tłumaczenie. Twoim zadaniem jest połączenie tego wszystkiego.
Przejdź do pliku: src/ai/translator.ts
Sprawdź funkcję docelową createTranslator w wierszach 29–45:
export async function createTranslator(
targetLang: SupportedLanguage
): Promise<Translator | null>
- Sprawdź, czy interfejs Translator API jest obsługiwany, i upewnij się, że język docelowy nie jest angielski (domyślnie treść jest w języku angielskim).
- Utwórz parę językową, np. angielski–język docelowy, i sprawdź, czy jest dostępna.
- Utwórz opcje dla tłumacza i dołącz monitor pokazujący postęp pobierania modelu.
- Zwraca zainicjowany obiekt tłumacza.
Następnie sprawdź funkcję docelową translate w wierszach 50–58:
export async function translate(
text: string,
targetLang: SupportedLanguage
): Promise<string>
- Sprawdź, czy jest dostępny tłumacz, który może przekazać
getCachedTranslatorwtargetLang. Jeśli nie, zwróć oczyszczony tekst. - Jeśli tak, użyj tłumacza, aby przetłumaczyć oczyszczony tekst.
Przejdź do pliku: src/ai/translator.ts
Sprawdź funkcję docelową render w wierszach 204:
export async function translate(
text: string,
targetLang: SupportedLanguage
): Promise<string>
- Włącz komponent selektora języka
4. Używanie WebMCP do poprawy komfortu pracy agenta
Czym jest WebMCP?
W miarę jak użytkownicy zaczynają korzystać z autonomicznych agentów i agentów współprzeglądających, dostosowanie się do tego trendu staje się dla witryn coraz ważniejsze. Agenci tradycyjnie polegają na aktywacji – robieniu zrzutów ekranu oraz analizowaniu DOM i drzewa dostępności – aby określić, jak wchodzić w interakcje z witryną. Jest to powolne, niestabilne i podatne na błędy, a także marnuje tokeny użytkownika.
WebMCP pomaga rozwiązać ten problem, umożliwiając deweloperom udostępnianie agentom narzędzi do bezpośredniej interakcji ze stroną, na której się znajdują. Agenci, którzy je obsługują, mogą używać tych narzędzi tak samo jak narzędzi w Twoim zestawie do kodowania, z jasnymi, uporządkowanymi danymi wejściowymi i wartościami zwracanymi określonymi przez Ciebie.
// Register a tool directly on document.modelContext
document.modelContext.registerTool({
name: 'get_product_specs',
title: 'Get Product Specs',
description: 'Retrieve technical specifications for the active product.',
inputSchema: {
type: 'object',
properties: {
// ...
},
},
annotations: {
readOnlyHint: true, // Informs the agent this tool causes no side-effects
},
execute: async (input) => {
return {
weight: '1.8 kg',
capacity: '3 persons',
seasons: '3-season',
};
},
});
Gdy agent połączy się ze stroną, wyśle zapytanie do document.modelContext.getTools(). Każde zarejestrowane narzędzie udostępnia:
name: identyfikator narzędzia automatyzacji reklamy używany przez agentów podczas wykonywania narzędzi (np.'get_product_specs').title: czytelna dla człowieka etykieta wyświetlana używana przez kontrolerów i interfejsy agentów (np.'Get Product Specs').description: opis w formie zwykłego tekstu informujący model o tym, do czego służy narzędzie i kiedy należy go użyć. W ten sposób agent określa, czy powinien wywołać narzędzie, więc podaj opis.inputSchema: schemat JSON określający akceptowane argumenty.annotations: wskazówki dotyczące działania, np.{ readOnlyHint: true }w przypadku narzędzi tylko do odczytu, które nie powodują efektów ubocznych.execute: funkcja asynchroniczna wykonywana po wywołaniu narzędzia.
Zadanie 2.1. Rekomendacje i narzędzia do usług
Zacznij od zarejestrowania narzędzia, aby umożliwić agentom pobieranie rekomendacji utworzonych w poprzednim ćwiczeniu.
Przejdź do pliku: src/components/product/ForYouSection.ts
Sprawdź registerWebMCPTools() w wierszach 71–94:
private registerWebMCPTools(): void
- Sprawdź, czy WebMCP jest obsługiwany.
- Jeśli tak, zarejestruj narzędzie.
- Wybierz tytuł i opis, które zachęcą agenta do wybrania narzędzia – pomyśl o inżynierii promptów.
- Nie ma danych wejściowych, więc wystarczy dodać pusty obiekt JSON Schema.
- To narzędzie jest tylko do odczytu.
- W funkcji execute użyj
recommendationStore, aby uzyskać bieżący zestaw rekomendacji, a następnie zwróć bieżący identyfikator produktu i zestaw rekomendacji dotyczących produktów. - Dodaj sygnał przerwania i go przechwyć, aby nie powodował błędu. Dzięki temu narzędzie zostanie prawidłowo usunięte po odmontowaniu komponentu.
Przejdź do pliku: src/views/ProductView.ts
- Powtórz ten sam proces, aby zarejestrować narzędzie
get_current_product. Tym razem zwróć pełny produkt oraz rekomendacje.
Zadanie 2.2. Narzędzia panelu koszyka
Przejdź do pliku: src/components/cart/CartDrawer.ts
Sprawdź registerWebMCPTools() w wierszach 83–114:
private registerWebMCPTools(): void
- Zarejestruj
view_cart:
- Jego pole
inputSchemapowinno być obiektem z jedną opcją logiczną,openDrawer. - Powinien być tylko do odczytu.
- Odczytuje dane wejściowe w ramach funkcji
execute, decyduje, czy wyświetlić lub ukryć koszyk, odświeżarecommendationStore, a następnie zwraca podsumowanie koszyka.
- Zarejestruj
manage_cart:
- Jego
inputSchemapowinien być obiektem zitems, czyli tablicą obiektów z wyliczeniemproductID,add,removeiupdateactionoraz liczbą całkowitąquantity. - Funkcja
executepowinna przekazywać elementy dothis.updateCart
Zadanie 2.3. Narzędzie do zmiany języka
Rozszerz możliwości WebMCP, udostępniając narzędzie językowe zewnętrznym agentom.
Przejdź do pliku: src/components/navigation/LanguagePicker.ts
Sprawdź registerWebMCPTools() w wierszach 61–63:
private registerWebMCPTools(): void
- Zarejestruj narzędzie
switch_language:inputSchemapowinna mieć właściwośćlanguage, która jest wyliczeniemSUPPORTED_LANGUAGE_CODES.- Jej funkcja
executepowinna wywoływać funkcjęthis.switchLanguagez podanym językiem.
Zadanie 2.4. Narzędzia do nawigacji po sklepie
Umożliwia autonomicznym agentom poruszanie się po sklepie, przechodzenie do stron produktów, przeglądanie kategorii i rozpoczynanie wyszukiwania.
Przejdź do pliku: src/components/navigation/SiteHeader.ts
Sprawdź registerWebMCPTools() w wierszach 155–171:
private registerWebMCPTools(): void
- Sprawdź, czy WebMCP jest obsługiwany.
- Zarejestruj narzędzie
search:- Schemat wejściowy przyjmuje ciąg znaków
query. - W funkcji
executewywołaj funkcjęthis.search(input?.query).
- Schemat wejściowy przyjmuje ciąg znaków
- Zarejestruj narzędzie
go_to_catalog:- Schemat wejściowy akceptuje opcjonalne parametry
activity(wyliczenieACTIVITIES) icategory(wyliczeniePRODUCT_CATEGORIES). - W funkcji
executewywołaj funkcjęthis.goToCatalog(input?.activity, input?.category).
- Schemat wejściowy akceptuje opcjonalne parametry
- Zarejestruj narzędzie
get_categories_and_activities:- Narzędzie tylko do odczytu bez parametrów wejściowych.
- W funkcji
executewywołaj funkcjęthis.getCategoriesAndActivities().
- Zarejestruj narzędzie
go_to_product:- Schemat wejściowy wymaga
productIdciągu tekstowego. - W funkcji
executewywołaj funkcjęthis.goToProduct(input?.productId).
- Schemat wejściowy wymaga
Weryfikacja za pomocą inspektora WebMCP
- Odśwież
http://localhost:5173/catalog/tent-mont-tremblant-3pChrome i otwórz stronę produktu. - Otwórz Narzędzia deweloperskie w Chrome > Aplikacja > WebMCP.
- Powinny być widoczne narzędzia WebMCP:
get_recommendations,get_current_product,view_cart,manage_cart,switch_language,search,go_to_catalog,get_categories_and_activitiesigo_to_product. - Kliknij jeden z nich, aby wyświetlić szczegóły i parametry.
- Wybierz narzędzie z parametrami, wybierz niektóre z nich i kliknij Uruchom narzędzie, aby zobaczyć, jak działa.
- (Opcjonalnie) Jeśli masz zainstalowane i skonfigurowane narzędzie WebMCP Model Context Tool Inspector, otwórz je – pojawi się w panelu bocznym Chrome. Użyj interfejsu czatu, aby poprosić agenta o wykonanie działania, które Twoim zdaniem powinno wywołać jedno z Twoich narzędzi. Sprawdź, jak ono zareaguje.
5. (Opcjonalnie) Tworzenie agenta w witrynie
Wywoływanie narzędzi WebMCP na stronie
Narzędzia WebMCP nie są przeznaczone tylko dla zewnętrznych rozszerzeń przeglądarki lub botów innych firm – może je wywoływać bezpośrednio Twoja aplikacja. Wysyłając zapytania do document.modelContext.getTools(), kod po stronie klienta może dynamicznie wykrywać i uruchamiać narzędzia.
Możesz użyć tego narzędzia do stworzenia wirtualnego asystenta zakupów opartego na AI, który przekształci pasek wyszukiwania w narzędzie do odkrywania produktów na podstawie danych wejściowych w języku naturalnym. Zamiast pisać niestandardowy kod imperatywny do koordynowania wielu filtrów aspektów, pasek wyszukiwania może przekazywać zapytania w języku naturalnym do interfejsu Prompt API, który decyduje, które narzędzia WebMCP na stronie mają zostać wywołane.
Aby wykryć i wywołać narzędzie WebMCP z JavaScriptu:
// getTools() returns a Promise — it must be awaited.
const tools = await document.modelContext.getTools();
const tool = tools.find(t => t.name === 'list_items');
const json = await document.modelContext.executeTool(tool, args);
const result = JSON.parse(json); // executeTool resolves with a DOMString
Zadanie 3.1. Narzędzia do zawężania na pasku bocznym
Udostępnij każdy aspekt paska bocznego katalogu w WebMCP, aby agenty (i asystent wyszukiwania na stronie) mogły programowo przełączać filtry.
Każdy komponent aspektu w src/components/facets/ ma już metodę pomocniczą w swojej klasie i wyeksportowany schemat wejściowy w src/utils/filter-schemas.ts:
- W
src/components/facets/ActivityFacet.ts:- Zarejestruj
activity_filterza pomocą narzędziaactivityFilterSchema. - W funkcji
executewywołaj funkcjęthis.filterActivity(input?.activity, input?.selected).
- Zarejestruj
- W
src/components/facets/CategoryFacet.ts:- Zarejestruj
category_filterza pomocą narzędziacategoryFilterSchema. - W funkcji
executewywołaj funkcjęthis.filterCategory(input?.category, input?.selected).
- Zarejestruj
- W
src/components/facets/ConditionFacet.ts:- Zarejestruj
condition_filterza pomocą narzędziaconditionFilterSchema. - W funkcji
executewywołaj funkcjęthis.filterCondition(input?.condition, input?.selected).
- Zarejestruj
- W
src/components/facets/PriceFacet.ts:- Zarejestruj
price_filterza pomocą narzędziapriceFilterSchema. - W funkcji
executewywołaj funkcjęthis.filterPrice(input?.priceRange || input?.bracket, input?.selected).
- Zarejestruj
- W
src/components/facets/WeightFacet.ts:- Zarejestruj
weight_filterza pomocą narzędziaweightFilterSchema. - W funkcji
executewywołaj funkcjęthis.filterWeight(input?.weightRange || input?.bracket, input?.selected).
- Zarejestruj
- W
src/components/facets/RatingFacet.ts:- Zarejestruj
rating_filterza pomocą narzędziaratingFilterSchema. - W funkcji
executewywołaj funkcjęthis.filterRating(input?.minRating || input?.rating, input?.selected).
- Zarejestruj
- W
src/components/facets/SearchFacet.ts:- Zarejestruj
keyword_filterza pomocą narzędziakeywordFilterSchema. - W funkcji
executewywołaj funkcjęthis.updateKeyword(input?.keyword).
- Zarejestruj
Pamiętaj, aby sprawdzić obsługę WebMCP i przekazać { signal: this.signal } z .catch(() => {}), jak opisano w kroku 2.
Zadanie 3.2. Narzędzia widoku katalogu
Zarejestruj teraz informacje o produktach na poziomie katalogu, resetowanie filtrów i narzędzia wyszukiwania semantycznego na stronie document.modelContext.
Przejdź do pliku: src/views/CatalogView.ts
Sprawdź registerWebMCPTools() w wierszach 125–140:
private registerWebMCPTools(): void
- Sprawdź, czy WebMCP jest obsługiwany.
- Zarejestruj narzędzie
list_items:- Nie przyjmuje parametrów wejściowych i jest tylko do odczytu.
- Jego funkcja
executepowinna wywoływać funkcjęthis.getItemsSummary().
- Zarejestruj narzędzie
reset_filters:- Nie przyjmuje parametrów wejściowych.
- Jego funkcja
executepowinna wywoływać funkcjęthis.resetFilters().
- Zarejestruj narzędzie
semantic_catalog_filter:- Użyj konta
semanticCatalogFilterSchema. - Jego funkcja
executepowinna wywoływać funkcjęinterpretAndApplySemanticFilter(input.query).
- Użyj konta
Zadanie 3.3. Koordynowanie działania agenta filtra semantycznego
Teraz czas to wszystko połączyć. To zadanie przekształca wyszukiwanie w potok semantyczny, który obsługuje narzędzie semantic_catalog_filter:
Przejdź do pliku: src/ai/catalog-semantic-filter.ts
Sprawdź prewarmSemanticFilterSession() w wierszach 84–88:
export async function prewarmSemanticFilterSession(): Promise<void>
- Sprawdź, czy
warmSessionjuż istnieje. Jeśli tak, zakończ działanie funkcji. - Wstępnie rozgrzej sesję Prompt API za pomocą
SEMANTIC_FILTER_SYSTEM_PROMPT, używającgetPromptSession(), i zapisz ją wwarmSession. Umieść go w blokutry/catch, aby w przypadku niepowodzenia wstępnego rozgrzewania można było nadal tworzyć wyszukiwanie.
Sprawdź inferSearchFacets() w wierszach 93–134:
async function inferSearchFacets(
searchTerm: string,
cachedJourney: JourneyProfile | null
): Promise<{ parsed: SemanticFilterResponse; cacheHit: boolean }>
- Przejmij wstępnie rozgrzaną sesję z
warmSession, jeśli jest dostępna (i zresetujwarmSessiondonull), lub utwórz nową sesję za pomocągetPromptSession(SEMANTIC_FILTER_SYSTEM_PROMPT). - Wyślij prompt do modelu
promptText, używającsemanticFilterSchemajakoresponseConstraint. - Przeanalizuj zwrócony kod JSON, zapisz przeanalizowany wynik w stałej pamięci podręcznej za pomocą
cacheKeyi zakończ sesję w blokufinally.
Sprawdź applyFacetsViaWebMCP() w wierszach 139–270:
async function applyFacetsViaWebMCP(
searchTerm: string,
parsed: SemanticFilterResponse
): Promise<{ appliedFilters: SemanticFilterResult['appliedFilters']; toolsExecuted: string[] }>
- Odkrywaj zarejestrowane narzędzia na stronie
document.modelContextza pomocąawait document.modelContext.getTools(). - Zresetuj filtry, aby zacząć od nowa, wywołując funkcję
await executeFacet('reset_filters', {}). - Jednoczesne stosowanie aktywnych aspektów za pomocą
await Promise.all(facetTasks).
Sprawdź interpretAndApplySemanticFilter() w wierszach 272–316:
export async function interpretAndApplySemanticFilter(
searchTerm: string
): Promise<SemanticFilterResult>
- Wywnioskuj aspekty wyszukiwania, wywołując
inferSearchFacets(searchTerm, cachedJourney). - Zastosuj wywnioskowane aspekty do katalogu za pomocą
applyFacetsViaWebMCP(searchTerm, parsed).
Weryfikowanie agenta na stronie
- Wejdź na
http://localhost:5173/catalog. - Na pasku wyszukiwania u góry wpisz:
"lightweight 3 season tent for wet hikes" - Zobacz, jak interfejs Prompt API analizuje żądanie i wywołuje ikony
activity_filter(wędrówki),category_filter(namioty) icondition_filter(mokre), natychmiast zawężając katalog do pasującego sprzętu bez konieczności ręcznego klikania pól wyboru.
6. Czego się dowiedziałeś(-aś)
Gratulacje. Przekształcono aplikację e-commerce w inteligentne rozwiązanie oparte na agentach, które w całości wykorzystuje sztuczną inteligencję na urządzeniu i standardowe interfejsy API platformy internetowej.
Utworzone przez Ciebie treści:
- Interfejs Prompt API na urządzeniu: syntetyzowane osie czasu przeglądania użytkownika z
LanguageModelw celu generowania kontekstu w czasie rzeczywistymJourneyProfilei utworzeniarankComplementaryGearsilnika synergii przy użyciu uporządkowanych schematów JSON (responseConstraint). - Narzędzia komponentu WebMCP: zarejestrowane modułowe, zamknięte narzędzia w komponentach interfejsu (
get_recommendations,get_current_product,view_cart,manage_cart) za pomocądocument.modelContext. - Architektura z przekazywaniem do agenta: przetestowane i zweryfikowane wykonywanie narzędzi za pomocą rozszerzenia Chrome WebMCP Inspector.
- Agent na stronie: narzędzia po stronie klienta zintegrowane bezpośrednio w przeglądarce, które umożliwiają wieloaspektowe wyszukiwanie w katalogu w języku naturalnym z paska wyszukiwania w nagłówku witryny.
- Specjalistyczne modele AI na urządzeniu: zbadaliśmy dynamiczne tłumaczenie na urządzeniu za pomocą
Translator.
Kluczowe wnioski:
- Brak opóźnień i wysoki poziom prywatności: modele na urządzeniu, takie jak Gemini Nano, eliminują klucze API w chmurze, opóźnienia sieciowe i obawy związane z wydobywaniem danych.
- Ustrukturyzowane dane wyjściowe są niezbędne: używanie schematów JSON z parametrem
responseConstraintprzekształca generowanie tekstu kreatywnego w niezawodną logikę aplikacji bezpieczną pod względem typów. - WebMCP przygotowuje internet dla agentów AI: rejestrowanie narzędzi bezpośrednio w DOM umożliwia zarówno wewnętrzne funkcje pomocnicze, jak i zewnętrzne autonomiczne agenty przeglądarki z zweryfikowanymi, deterministycznymi działaniami.
- Pozwól modelowi proponować, a nie wykonywać działań: ograniczenie modelu do
enumzarejestrowanych narzędzi i samodzielne wysyłanie wyników sprawia, że zachowanie agenta jest możliwe do sprawdzenia i zapobiega wymyślaniu przez niego działań.