1. Einführung
Die moderne Webentwicklung bietet eine Alternative zu cloudbasierten Roundtrips für die KI-Nutzung. Chrome hat mit der Auslieferung von integrierten KI-APIs begonnen, mit denen Sie alles von kleinen Expertenmodellen für die Übersetzung bis hin zu leistungsstarken destillierten vollständigen Sprachmodellen nutzen können. Die Ausführung erfolgt privat auf dem Gerät des Nutzers und es fallen keine Token-Kosten für Sie oder Ihre Nutzer an.
Gleichzeitig bieten KI-Agents Nutzern eine neue Möglichkeit, mit Webanwendungen zu interagieren. Wenn Sie Ihre Weboberfläche mit WebMCP für Agents optimieren, können Sie die Tokennutzung reduzieren und gleichzeitig genauere Ergebnisse erzielen als bei der herkömmlichen Ausführung, für die Screenshots und DOM-Scraping erforderlich sind.
In diesem Codelab arbeiten Sie an Mont-Royal Plein Air, einer E-Commerce-Website für Outdoor-Ausrüstung. Sie erfahren, wie Sie integrierte KI‑APIs und WebMCP erstellen und einbinden, um:
- Die Kundenabsicht aus dem Browserverlauf ableiten und dynamisch Empfehlungen für sie mit On-Device-Modellen erstellen.
- Stellen Sie Tools bereit, mit denen Agents und Browser-Assistenten auf der Website navigieren, Produkte und Empfehlungen prüfen und den Einkaufswagen eines Nutzers verwalten können.
- (Optional) Ihre Website mit kleinen, geräteinternen Expertenmodellen spontan übersetzen lassen
- Optional: Wandeln Sie die einfache Website-Suche in einen Onsite-Agent um, der dieselben Tools wie externe Agents verwendet.
Lerninhalte
- Wie Sie die Prompt API verwenden und strukturierte JSON-Ausgaben erzwingen.
- Hier erfahren Sie, wie Sie WebMCP-Tools registrieren und wie Sie über die Zusammensetzung und Granularität von Tools nachdenken können.
- (Optional) So verwenden Sie die Translator API, um Inhalte schnell mit einem On-Device-Expertenmodell zu übersetzen.
- (Optional) So rufen Sie WebMCP-Tools selbst auf.
Vorbereitung
- Ein privates Google-Konto und Google Cloud
- Google Chrome-Version 150 oder höher oder Canary-, Entwickler- oder Beta-Versionen mit den aktivierten Flags
#enable-webmcp-testingund#devtools-webmcp-support. - Kenntnisse in HTML, CSS, JavaScript und TypeScript
- Vertrautheit mit dem JSON-Schema.
2. Projekt einrichten
Google-Konto
Wenn Sie noch kein privates Google-Konto haben, müssen Sie ein Google-Konto erstellen.
Melden Sie sich in der Google Cloud Console an.
Melden Sie sich mit einem privaten Google-Konto in der Google Cloud Console an.
Abrechnung aktivieren
Wenn Sie ein privates Rechnungskonto einrichten möchten, aktivieren Sie die Abrechnung in der Cloud Console.
Projekt erstellen (optional)
Wenn Sie kein aktuelles Projekt haben, das Sie für dieses Lab verwenden möchten, erstellen Sie hier ein neues Projekt.
Cloud Shell-Editor öffnen
- Klicken Sie auf diesen Link, um direkt zum Cloud Shell-Editor zu gelangen.
- Wenn Sie heute an irgendeinem Punkt aufgefordert werden, die Autorisierung zu bestätigen, klicken Sie auf Autorisieren, um fortzufahren.

- Wenn das Terminal nicht unten auf dem Bildschirm angezeigt wird, öffnen Sie es:
- Klicken Sie auf Ansehen.
- Klicken Sie auf Terminal.

Projekt festlegen
- Legen Sie im Terminal Ihr Projekt mit diesem Befehl fest:
Beispiel:gcloud config set project [PROJECT_ID]gcloud config set project lab-project-id-example
- Die folgende Meldung wird angezeigt:
Updated property [core/project].
Lokale Einrichtung und Einrichtung des Arbeitsbereichs
- Klonen Sie das Projekt-Repository in Ihrem Terminal (oder Cloud Shell-Terminal) und wechseln Sie in das Projektverzeichnis:
git clone https://github.com/GoogleChromeLabs/codelabs mont-royal cd mont-royal - Wechseln Sie zum Ordner
ecommerce-ai-enhancements/starter:cd ecommerce-ai-enhancements/starter - Installieren Sie die Abhängigkeiten mit
pnpm:pnpm install - Starten Sie den lokalen Entwicklungsserver:
Öffnen Sie Ihren Browser und rufen Siepnpm devhttp://localhost:5173auf, um den Store Mont-Royal Plein Air aufzurufen.
(Optional) WebMCP-Inspector-Erweiterung installieren
Um die Arbeit mit WebMCP zu erleichtern, können Sie den WebMCP Model Context Tool Inspector installieren. Nach der Installation benötigen Sie einen Gemini API-Schlüssel, um das Tool zu verwenden:
- Rufen Sie AI Studio auf.
- Klicken Sie auf die Schaltfläche API-Schlüssel erstellen, um einen neuen Gemini API-Schlüssel zu generieren, der mit dem Projekt verknüpft ist, das Sie in diesem Schritt eingerichtet haben.
- Öffnen Sie den WebMCP Model Context Tool Inspector (er wird in der Seitenleiste geöffnet) und klicken Sie auf die Schaltfläche Update Gemini API Key (Gemini-API-Schlüssel aktualisieren).
- Fügen Sie Ihren API-Schlüssel in das Pop-up ein und speichern Sie ihn.
Diese Erweiterung enthält einen einfachen Agenten, der WebMCP verwenden kann. So können Sie Ihre Website über den Agenten testen, anstatt WebMCP-Tools direkt über die Entwicklertools aufzurufen.
3. Integrierte KI-Modelle im Web
Was ist die Prompt API?
Über die Prompt API können Webanwendungen direkt auf ein kleines, multimodales Sprachmodell zugreifen, das vollständig auf dem Gerät des Nutzers ausgeführt wird. Da die Inferenz lokal ausgeführt wird:
- Keine Cloud-Latenz: Keine Netzwerk-Roundtrips oder Warteschlangen auf dem Backend-Server.
- Standardmäßig privat: Prompts und der zugehörige Kontext verlassen das Gerät nie.
- Keine Kosten: Die Inferenz wird auf der Clienthardware ausgeführt, ohne dass Token abgerechnet werden oder Kosten für das Cloud-Hosting anfallen.
- Offlinefähig: Funktioniert auch ohne aktive Internetverbindung zuverlässig.
In Chrome wird über die globale LanguageModel-Schnittstelle auf die Prompt API zugegriffen.
// 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,
});
Übung 1: Empfehlungen basierend auf dem Kaufprozess
Auf E‑Commerce-Websites gibt es in der Regel Karussells oder Upsells mit Artikeln, die häufig zusammen gekauft werden. Bei einer Outdoor-Website ist es möglicherweise sinnvoller, diese Empfehlungen auf dem Browserverlauf zu basieren.
Dazu erstellen Sie eine Empfehlungspipeline mit drei Phasen:
- Journey Profiler: Mit der Prompt API analysieren Sie den chronologischen Browserverlauf des Kunden, um die tatsächliche Absicht des Nutzers zu ermitteln.
- Produktanfrage: Aus dieser Intention heraus senden Sie eine API-Anfrage an ein gefälschtes Produkt-Backend, um ähnliche Artikel zu erhalten.
- Produktempfehlung: Sie geben diese Produkte an die Product API zurück, um sie zu ranken. Die fünf am besten passenden Produkte werden zurückgegeben.
Aufgabe 1.1: Prompt API initialisieren
Anstatt die Prompt API jedes Mal einzeln zu initialisieren, wenn Sie sie verwenden möchten, zentralisieren Sie die Aufrufe in einer einzigen Datei und memoizing die Erstellung durch den Systemprompt, um die Startzeit für mehrere Aufrufe desselben Agents zu verkürzen.
Rufen Sie die Datei src/ai/prompt-api.ts auf und prüfen Sie getPromptSession() in den Zeilen 27–58:
export async function getPromptSession(
systemPrompt: string = '',
options: { signal?: AbortSignal } = {}
): Promise<LanguageModel>
- Eine im Cache gespeicherte Basissitzung wiederverwenden: In Zeile 21 gibt es bereits eine Cache-Map,
baseSessions, die nach Systemaufforderung indexiert wird. Wenn Sie Basismodelle wiederverwenden, anstatt neue zuclone(), wird die Startzeit verkürzt und die Grundeinrichtung wird übernommen, ohne dass sich die einzelnen Sitzungen gegenseitig beeinträchtigen. Geben Sie den Klon zurück. Anrufer können frei mit ihm interagieren, einschließlichdestroy(), ohne dass Ihr zwischengespeicherter Stamm verworfen wird. - API-Funktionen erkennen Erkennen Sie, ob die API vorhanden ist, und geben Sie einen Fehler aus, wenn dies nicht der Fall ist.
- Modalitäten und Sprachen deklarieren Integrierte Modelle können multimodale Eingaben unterstützen. Sie müssen angeben, welche Modi Sie benötigen und welche Sprachen Sie unterstützen möchten. Alle Inhalte, die Sie an das LLM übergeben, sind auf Englisch.
- Prüfen Sie die Verfügbarkeit, bevor Sie etwas erstellen. Auch wenn die API vorhanden ist, gibt es möglicherweise kein Modell, das Ihre Anforderungen erfüllt. Prüfen Sie, ob eine vorhanden ist. Wenn nicht, wird ein Fehler ausgegeben. Wenn der Bericht noch nicht heruntergeladen wurde, wird der Fortschritt des Downloads angezeigt.
- Sitzung erstellen Richten Sie die Optionen zum Erstellen einer neuen Prompt API-Sitzung und den Systemprompt (falls vorhanden) ein.
Aufgabe 1.2: Journey-Profiler implementieren
Rufen Sie die Datei src/ai/journey-profiler.ts auf und sehen Sie sich die Zielfunktion in Zeile 42–100 an:
export async function inferJourneyProfile(
context: ProfilerInputContext,
catalogMap: ReadonlyMap<string, Product>
): Promise<JourneyProfile>
- Verwenden Sie die Funktion aus Aufgabe 1, um eine neue Prompt-Sitzung zu generieren.
- Geben Sie dem Modell den bereitgestellten Prompt-Text und verwenden Sie
journeyProfileSchemaals JSON-Schema für die strukturierte Rückgabe. - Analysieren Sie die Prompt-Ausgabe und entfernen Sie doppelte Zielkategorien.
- Ersetzen Sie die hartcodierten String-Rückgaben durch die tatsächlichen Ergebnisse Ihres Prompts.
- Wenn die Sitzung beendet ist, wird sie zerstört, um Arbeitsspeicher freizugeben.
Aufgabe 1.3: Synergy-Re-Ranker implementieren
Rufen Sie die Datei src/ai/synergy-reranker.ts auf und sehen Sie sich die Zielfunktion in Zeile 30–71 an:
export async function rankComplementaryGear(
profile: JourneyProfile,
candidates: readonly Product[],
currentProduct?: Product | null,
cartProducts?: readonly Product[],
limit: number = 5
): Promise<readonly RecommendedItem[]>
- Verwenden Sie die Funktion aus Aufgabe 1, um eine neue Prompt-Sitzung zu generieren.
- Geben Sie dem Modell den bereitgestellten Prompt-Text und das generierte Schema vor.
- Analysieren Sie die Prompt-Ausgabe.
- Gibt die zusammengestellte Empfehlungsliste mit
assembleRecommendationszurück. - Wenn die Sitzung beendet ist, wird sie zerstört, um Arbeitsspeicher freizugeben.
Empfehlungspipeline überprüfen
- Öffne Chrome, um
http://localhost:5173/catalog/tent-mont-tremblant-3p. - Scrollen Sie nach unten zum Abschnitt Für mich.
- Sehen Sie sich an, wie die fünf Begleitkarten aktualisiert werden, um Smart-Kit-Kombinationen (z. B. Bodenplanen, Isomatten und leichte Heringe) anstelle von zufälligen Produkten widerzuspiegeln.
- Öffnen Sie die Chrome-Entwicklertools-Konsole, um die Ausführungsdauer beider Inferenzschritte in Echtzeit zu prüfen.
(Optional) Aufgabe 1.4: Weitere integrierte KI-Modelle kennenlernen
Es sind mehrere andere integrierte KI-Modelle verfügbar, darunter das Expertenmodell Translator API. Die Komponenten in dieser Codebasis sind bereits mit einem Dienst verbunden, der auf Änderungen in der aktuellen Sprache wartet und die Übersetzung anfordert. Ihre Aufgabe ist es, alles zu verbinden.
Rufen Sie die Datei auf: src/ai/translator.ts
Sehen Sie sich die Zielfunktion createTranslator in Zeile 29–45 an:
export async function createTranslator(
targetLang: SupportedLanguage
): Promise<Translator | null>
- Prüfen Sie, ob die Translator API unterstützt wird, und stellen Sie sicher, dass die Zielsprache nicht Englisch ist (die Inhalte sind standardmäßig auf Englisch).
- Erstellen Sie ein Sprachpaar aus Englisch und der Zielsprache und prüfen Sie, ob dieses Paar verfügbar ist.
- Erstelle Optionen für den Übersetzer und hänge einen Monitor an, um den Fortschritt beim Herunterladen des Modells anzuzeigen.
- Gibt den initialisierten Übersetzer zurück.
Sehen Sie sich als Nächstes die Zielfunktion translate in Zeile 50–58 an:
export async function translate(
text: string,
targetLang: SupportedLanguage
): Promise<string>
- Prüfen Sie, ob ein Übersetzer mit
getCachedTranslator, der intargetLangübergeben wird, verfügbar ist. Wenn nicht, gib den bereinigten Text zurück. - Wenn ja, verwenden Sie den Übersetzer, um den bereinigten Text zu übersetzen.
Rufen Sie die Datei auf: src/ai/translator.ts
Sehen Sie sich die Zielfunktion render in Zeile 204 an:
export async function translate(
text: string,
targetLang: SupportedLanguage
): Promise<string>
- Sprachauswahl aktivieren
4. WebMCP zur Verbesserung der Agent-Erfahrung verwenden
Was ist WebMCP?
Da Nutzer zunehmend autonome und Co-Browsing-Agents verwenden, ist es wichtig, dass Websites sich anpassen. Agenten verlassen sich traditionell auf die Ausführung von Aktionen – Screenshots erstellen und DOM- und Barrierefreiheitsbäume parsen –, um zu bestimmen, wie sie mit einer Website interagieren. Das ist langsam, fehleranfällig und verschwendet Nutzer-Tokens.
WebMCP bietet eine Lösung, indem Entwickler Tools direkt für Agenten bereitstellen können, damit diese mit der Seite interagieren können, auf der sie sich befinden. Agents, die sie unterstützen, können diese Tools wie ein Tool in Ihrem Coding-Harness verwenden. Die Ein- und Rückgabewerte werden von Ihnen vorgegeben.
// 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',
};
},
});
Wenn ein Agent eine Verbindung zur Webseite herstellt, wird document.modelContext.getTools() abgefragt. Jedes registrierte Tool bietet:
name: Programmatische Tool-ID, die von Agents beim Ausführen von Tools verwendet wird (z.B.'get_product_specs').title: Für Menschen lesbares Anzeigelabel, das von Prüfern und Agent-Schnittstellen verwendet wird (z.B.'Get Product Specs').description: Eine Beschreibung in einfachem Text, die das Modell darüber informiert, was das Tool macht und wann es aufgerufen werden soll. So ermittelt ein KI-Agent, ob er das Tool aufrufen soll. Beschreiben Sie es daher so genau wie möglich.inputSchema: JSON-Schema, das die akzeptierten Argumente definiert.annotations: Verhaltenshinweise, z. B.{ readOnlyHint: true }für schreibgeschützte Tools, die keine Statusnebenwirkungen verursachen.execute: Asynchrone Funktion, die beim Aufrufen des Tools ausgeführt wird.
Aufgabe 2.1: Empfehlungen und Produkt-Tools
Zuerst registrieren Sie ein Tool, damit Agents die Empfehlungen abrufen können, die Sie in der vorherigen Übung erstellt haben.
Rufen Sie die Datei auf: src/components/product/ForYouSection.ts
Sehen Sie sich registerWebMCPTools() in Zeile 71–94 an:
private registerWebMCPTools(): void
- Prüfen Sie, ob WebMCP unterstützt wird.
- Falls ja, registrieren Sie das Tool.
- Wählen Sie einen Titel und eine Beschreibung, die einen Agenten dazu anregen, das Tool auszuwählen. Hier ist Prompt-Engineering gefragt.
- Es gibt keine Eingabe. Fügen Sie daher einfach ein leeres JSON-Schema für Objekte ein.
- Dieses Tool ist schreibgeschützt.
- Verwenden Sie in der Funktion „execute“
recommendationStore, um die aktuellen Empfehlungen abzurufen, und geben Sie dann die aktuelle Produkt-ID und die Produktempfehlungen zurück. - Fügen Sie ein Abbruchsignal hinzu und fangen Sie es ab, damit kein Fehler ausgegeben wird. So wird sichergestellt, dass das Tool ordnungsgemäß entfernt wird, wenn die Komponente demontiert wird.
Rufen Sie die Datei auf: src/views/ProductView.ts
- Wiederholen Sie den Vorgang, um ein
get_current_product-Tool zu registrieren. Diesmal wird das vollständige Produkt sowie die Empfehlungen zurückgegeben.
Aufgabe 2.2: Tools in der Warenkorbschublade
Rufen Sie die Datei auf: src/components/cart/CartDrawer.ts
Prüfen Sie registerWebMCPTools() in Zeile 83–114:
private registerWebMCPTools(): void
- Registrieren Sie das
view_cart-Tool:
inputSchemasollte ein Objekt mit einer einzelnen booleschen Option,openDrawer, sein.- Sie sollte Lesezugriff haben.
- Liest die Eingabe als Teil der
execute-Funktion, entscheidet, ob der Warenkorb angezeigt oder ausgeblendet werden soll, aktualisiert dierecommendationStoreund gibt dann die Warenkorbzusammenfassung zurück.
- Registrieren Sie das
manage_cart-Tool:
inputSchemasollte ein Objekt mititemssein, das ein Array von Objekten mit demaction-EnumproductID,add,removeundupdatesowie der Ganzzahlquantityist.- Die
execute-Funktion sollte Elemente anthis.updateCartübergeben.
Aufgabe 2.3: Tool zum Wechseln der Sprache
WebMCP weiterentwickeln, indem Sie ein Sprach-Tool für externe Agents verfügbar machen
Rufen Sie die Datei auf: src/components/navigation/LanguagePicker.ts
Prüfen Sie registerWebMCPTools() in Zeile 61–63:
private registerWebMCPTools(): void
switch_language-Tool registrieren:- Der
inputSchemasollte ein Attributlanguagehaben, das ein Enum vonSUPPORTED_LANGUAGE_CODESist. - Die
execute-Funktion solltethis.switchLanguagemit der angegebenen Sprache aufrufen.
- Der
Aufgabe 2.4: Navigationstools im Store
Autonome Agents können im Shop navigieren, zu Produktseiten springen, Kategorien durchsuchen oder Suchvorgänge starten.
Rufen Sie die Datei auf: src/components/navigation/SiteHeader.ts
Prüfen Sie registerWebMCPTools() in Zeile 155–171:
private registerWebMCPTools(): void
- Prüfen Sie, ob WebMCP unterstützt wird.
search-Tool registrieren:- Das Eingabeschema akzeptiert einen
query-String. - Rufen Sie in
executedie Funktionthis.search(input?.query)auf.
- Das Eingabeschema akzeptiert einen
go_to_catalog-Tool registrieren:- Das Eingabeschema akzeptiert optional
activity(Aufzählung vonACTIVITIES) undcategory(Aufzählung vonPRODUCT_CATEGORIES). - Rufen Sie in
executedie Funktionthis.goToCatalog(input?.activity, input?.category)auf.
- Das Eingabeschema akzeptiert optional
get_categories_and_activities-Tool registrieren:- Schreibgeschütztes Tool ohne Eingabeparameter.
- Rufen Sie in
executedie Funktionthis.getCategoriesAndActivities()auf.
go_to_product-Tool registrieren:- Für das Eingabeschema ist ein
productId-String erforderlich. - Rufen Sie in
executedie Funktionthis.goToProduct(input?.productId)auf.
- Für das Eingabeschema ist ein
Mit dem WebMCP-Inspector prüfen
- Laden Sie
http://localhost:5173/catalog/tent-mont-tremblant-3pin Chrome neu und rufen Sie eine Produktseite auf. - Öffnen Sie die Chrome-Entwicklertools > „Anwendung“ > „WebMCP“.
- Sie sollten Ihre WebMCP-Tools sehen:
get_recommendations,get_current_product,view_cart,manage_cart,switch_language,search,go_to_catalog,get_categories_and_activitiesundgo_to_product. - Klicken Sie auf einen der Einträge, um die zugehörigen Details und Parameter aufzurufen.
- Wählen Sie ein Tool mit Parametern aus, wählen Sie einige Parameter aus und klicken Sie auf Tool ausführen, um das Tool in Aktion zu sehen.
- Optional: Wenn Sie das WebMCP Model Context Tool Inspector installiert und eingerichtet haben, öffnen Sie es. Es wird in der Seitenleiste von Chrome geöffnet. Verwenden Sie die Chatoberfläche, um dem Agenten zu sagen, dass er eine Aktion ausführen soll, die Ihrer Meinung nach eines Ihrer Tools aufrufen sollte, und sehen Sie sich an, wie er reagiert.
5. (Optional) Onsite-Agent erstellen
WebMCP-Tools In-Page aufrufen
WebMCP-Tools sind nicht nur für externe Browsererweiterungen oder Drittanbieterbots gedacht, sondern können auch direkt von Ihrer eigenen Anwendung aufgerufen werden. Durch Abfragen von document.modelContext.getTools() kann Ihr clientseitiger Code Tools dynamisch erkennen und ausführen.
Damit können Sie einen KI-Shopping-Assistenten auf Ihrer Website erstellen und die Suchleiste in ein Tool zur Produktfindung auf Grundlage von Eingaben in natürlicher Sprache umwandeln. Statt benutzerdefinierten imperativen Code zu schreiben, um zahlreiche Facettenfilter zu koordinieren, kann Ihre Suchleiste Anfragen in natürlicher Sprache an die Prompt API übergeben. Diese entscheidet dann, welche In-Page WebMCP-Tools aufgerufen werden.
So ermitteln und rufen Sie ein WebMCP-Tool über JavaScript auf:
// 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
Aufgabe 3.1: Facettentools in der Seitenleiste
Stellen Sie WebMCP für jede Seitenleistenfacette des Katalogs zur Verfügung, damit KI-Agenten (und Ihr In-Page-Suchassistent) Filter programmatisch ein- und ausschalten können.
Jede Facettenkomponente in src/components/facets/ bietet bereits eine Hilfsmethode in ihrer Klasse und ein exportiertes Eingabeschema in src/utils/filter-schemas.ts:
- In
src/components/facets/ActivityFacet.ts:- Registrieren Sie
activity_filtermitactivityFilterSchema. - Rufen Sie in
executedie Funktionthis.filterActivity(input?.activity, input?.selected)auf.
- Registrieren Sie
- In
src/components/facets/CategoryFacet.ts:- Registrieren Sie
category_filtermitcategoryFilterSchema. - Rufen Sie in
executedie Funktionthis.filterCategory(input?.category, input?.selected)auf.
- Registrieren Sie
- In
src/components/facets/ConditionFacet.ts:- Registrieren Sie
condition_filtermitconditionFilterSchema. - Rufen Sie in
executedie Funktionthis.filterCondition(input?.condition, input?.selected)auf.
- Registrieren Sie
- In
src/components/facets/PriceFacet.ts:- Registrieren Sie
price_filtermitpriceFilterSchema. - Rufen Sie in
executedie Funktionthis.filterPrice(input?.priceRange || input?.bracket, input?.selected)auf.
- Registrieren Sie
- In
src/components/facets/WeightFacet.ts:- Registrieren Sie
weight_filtermitweightFilterSchema. - Rufen Sie in
executedie Funktionthis.filterWeight(input?.weightRange || input?.bracket, input?.selected)auf.
- Registrieren Sie
- In
src/components/facets/RatingFacet.ts:- Registrieren Sie
rating_filtermitratingFilterSchema. - Rufen Sie in
executedie Funktionthis.filterRating(input?.minRating || input?.rating, input?.selected)auf.
- Registrieren Sie
- In
src/components/facets/SearchFacet.ts:- Registrieren Sie
keyword_filtermitkeywordFilterSchema. - Rufen Sie in
executedie Funktionthis.updateKeyword(input?.keyword)auf.
- Registrieren Sie
Denken Sie daran, wie in Schritt 2 beschrieben, nach WebMCP-Unterstützung zu suchen und { signal: this.signal } mit .catch(() => {}) zu übergeben.
Aufgabe 3.2: Tools für die Katalogansicht
Registrieren Sie jetzt die Tools für die Auflistung auf Katalogebene, das Zurücksetzen von Filtern und die semantische Suche auf document.modelContext.
Rufen Sie die Datei auf: src/views/CatalogView.ts
Prüfen Sie registerWebMCPTools() in Zeile 125–140:
private registerWebMCPTools(): void
- Prüfen Sie, ob WebMCP unterstützt wird.
list_items-Tool registrieren:- Sie verwendet keine Eingabeparameter und ist schreibgeschützt.
- Die Funktion
executesolltethis.getItemsSummary()aufrufen.
reset_filters-Tool registrieren:- Es werden keine Eingabeparameter benötigt.
- Die Funktion
executesolltethis.resetFilters()aufrufen.
semantic_catalog_filter-Tool registrieren:- Verwenden Sie
semanticCatalogFilterSchema. - Die Funktion
executesollteinterpretAndApplySemanticFilter(input.query)aufrufen.
- Verwenden Sie
Aufgabe 3.3: Semantischen Filter-Agent orchestrieren
Jetzt ist es an der Zeit, alles zu verkabeln. Bei dieser Aufgabe wird die Suche in eine semantische Pipeline umgewandelt, die das Tool semantic_catalog_filter unterstützt:
Rufen Sie die Datei auf: src/ai/catalog-semantic-filter.ts
Sehen Sie sich prewarmSemanticFilterSession() in Zeile 84–88 an:
export async function prewarmSemanticFilterSession(): Promise<void>
- Prüfen Sie, ob
warmSessionbereits vorhanden ist. Wenn ja, geben Sie die Funktion frühzeitig zurück. - Eine Prompt API-Sitzung mit
SEMANTIC_FILTER_SYSTEM_PROMPTmithilfe vongetPromptSession()vorwärmen und inwarmSessionspeichern. Schließen Sie den Code in einentry/catch-Block ein, damit die Suche auch dann noch ordnungsgemäß ausgeführt werden kann, wenn das Prewarming fehlschlägt.
Prüfen Sie inferSearchFacets() in den Zeilen 93–134:
async function inferSearchFacets(
searchTerm: string,
cachedJourney: JourneyProfile | null
): Promise<{ parsed: SemanticFilterResponse; cacheHit: boolean }>
- Fordern Sie die vorab aufgewärmte Sitzung von
warmSessionan, falls verfügbar (und setzen SiewarmSessionaufnullzurück), oder erstellen Sie eine neue Sitzung mitgetPromptSession(SEMANTIC_FILTER_SYSTEM_PROMPT). - Geben Sie
promptTextals Prompt für das Modell ein und verwenden SiesemanticFilterSchemaalsresponseConstraint. - Parsen Sie das zurückgegebene JSON, speichern Sie das geparste Ergebnis mit
cacheKeyim persistenten Cache und beenden Sie die Sitzung in einemfinally-Block.
Prüfen Sie applyFacetsViaWebMCP() in den Zeilen 139–270:
async function applyFacetsViaWebMCP(
searchTerm: string,
parsed: SemanticFilterResponse
): Promise<{ appliedFilters: SemanticFilterResult['appliedFilters']; toolsExecuted: string[] }>
- Mit
await document.modelContext.getTools()können Sie registrierte Tools aufdocument.modelContextfinden. - Setzen Sie Filter zurück, um mit einem sauberen Datensatz zu beginnen, indem Sie
await executeFacet('reset_filters', {})aufrufen. - Wenden Sie aktive Attribute gleichzeitig mit
await Promise.all(facetTasks)an.
Prüfen Sie interpretAndApplySemanticFilter() in den Zeilen 272–316:
export async function interpretAndApplySemanticFilter(
searchTerm: string
): Promise<SemanticFilterResult>
- Rufen Sie
inferSearchFacets(searchTerm, cachedJourney)auf, um Suchfacetten abzuleiten. - Wenden Sie die abgeleiteten Facetten mit
applyFacetsViaWebMCP(searchTerm, parsed)auf den Katalog an.
In-Page-Agent überprüfen
- Rufen Sie
http://localhost:5173/catalogauf. - Geben Sie oben in die Suchleiste Folgendes ein:
"lightweight 3 season tent for wet hikes" - Sehen Sie sich an, wie die Prompt API die Anfrage analysiert und
activity_filter(Wandern),category_filter(Zelte) undcondition_filter(Nass) aufruft. Der Katalog wird sofort auf passende Ausrüstung eingegrenzt, ohne dass manuell Kontrollkästchen angeklickt werden müssen.
6. Das haben Sie gelernt
Glückwunsch! Sie haben eine E-Commerce-Anwendung in eine intelligente, agentenorientierte Anwendung umgewandelt, die vollständig auf On-Device-KI und Standard-Webplattform-APIs basiert.
Das haben Sie erstellt:
- On-Device Prompt API: Synthetisierte Browserverlauf-Zeitachsen mit
LanguageModel, umJourneyProfile-Kontext in Echtzeit zu generieren, und einerankComplementaryGear-Synergie-Engine mit strukturierten JSON-Schemas (responseConstraint) erstellt. - WebMCP-Komponententools: Registrierte modulare, gekapselte Tools für UI-Komponenten (
get_recommendations,get_current_product,view_cart,manage_cart) überdocument.modelContext. - Agent-Forward-Architektur: Die Ausführung von Tools wurde mit der Chrome-Erweiterung WebMCP Inspector getestet und überprüft.
- On-Site-In-Page-Agent: Clientseitige Tools werden direkt im Browser orchestriert, um die mehrdimensionale Suche im Katalog in natürlicher Sprache über die Suchleiste in der Kopfzeile der Website zu ermöglichen.
- Spezialisierte On-Device-KI-Modelle: Dynamische On-Device-Übersetzung mit
Translator.
Wichtige Tipps:
- Keine Latenz und hoher Datenschutz: On-Device-Modelle wie Gemini Nano machen Cloud-API-Schlüssel, Netzwerklatenz und Bedenken hinsichtlich des Datenabflusses überflüssig.
- Strukturierte Ausgaben sind unerlässlich: Durch die Verwendung von JSON-Schemas mit
responseConstraintwird die kreative Textgenerierung in eine zuverlässige, typsichere Anwendungslogik umgewandelt. - WebMCP bereitet das Web für KI-Agenten vor: Durch die direkte Registrierung von Tools im DOM werden sowohl interne unterstützende Funktionen als auch externe autonome Browser-Agents mit verifizierten, deterministischen Aktionen ausgestattet.
- Modell Vorschläge machen lassen, nicht ausführen: Wenn Sie das Modell auf ein
enumIhrer registrierten Tools beschränken und das Ergebnis selbst weiterleiten, bleibt das Verhalten des Agents nachvollziehbar und es wird verhindert, dass Aktionen erfunden werden.