1. Introduzione
Lo sviluppo web moderno offre un'alternativa ai round trip basati sul cloud per l'utilizzo dell'AI. Chrome ha iniziato a distribuire API AI integrate che ti consentono di utilizzare qualsiasi cosa, dai piccoli modelli esperti per la traduzione a modelli di linguaggio completi distillati, il tutto senza costi per i token per te o per i tuoi utenti, eseguiti in privato sul loro dispositivo.
Allo stesso tempo, gli agenti AI offrono agli utenti un nuovo modo di interagire con le applicazioni web e rendere la tua esperienza web pronta per gli agenti con WebMCP può contribuire a ridurre l'utilizzo dei token, fornendo risultati più accurati rispetto all'attivazione tradizionale che richiede screenshot e scraping del DOM.
In questo codelab lavorerai su Mont-Royal Plein Air, un sito di e-commerce di attrezzature per attività all'aperto. Imparerai a creare e integrare le API AI integrate e WebMCP per:
- Deduci l'intento del cliente dalla cronologia di navigazione e crea dinamicamente consigli per lui utilizzando modelli on-device.
- Espone gli strumenti che gli agenti e gli assistenti del browser possono utilizzare per navigare nel sito, esaminare i prodotti e i consigli e gestire il carrello degli acquisti di un utente.
- (Facoltativo) Traduci il tuo sito al volo utilizzando modelli specializzati di piccole dimensioni sul dispositivo.
- (Facoltativo) Trasforma la ricerca di base sul sito in un agente sul sito utilizzando gli stessi strumenti utilizzati dagli agenti esterni.
Obiettivi didattici
- Come utilizzare l'API Prompt e applicare l'output JSON strutturato.
- Come registrare gli strumenti WebMCP e strategie per pensare alla composizione e alla granularità degli strumenti.
- (Facoltativo) Come utilizzare l'API Translator per tradurre rapidamente i contenuti utilizzando un modello esperto sul dispositivo.
- (Facoltativo) Come chiamare autonomamente gli strumenti WebMCP.
Prerequisiti
- Un Account Google personale e Google Cloud.
- Google Chrome versione 150 o successive oppure canali Canary, Dev o beta, con i flag
#enable-webmcp-testinge#devtools-webmcp-supportattivati. - Familiarità con HTML, CSS, JavaScript e TypeScript.
- Familiarità con JSON Schema.
2. Configurazione del progetto
Account Google
Se non hai ancora un Account Google personale, devi crearne uno.
accedi alla console Google Cloud
Accedi alla console Google Cloud utilizzando un Account Google personale.
Abilita fatturazione
Per configurare un account di fatturazione personale, attiva la fatturazione nella console Cloud.
Creare un progetto (facoltativo)
Se non hai un progetto attuale che vuoi utilizzare per questo lab, creane uno nuovo qui.
Apri l'editor di Cloud Shell
- Fai clic su questo link per passare direttamente all'editor di Cloud Shell.
- Se ti viene chiesto di autorizzare in qualsiasi momento della giornata, fai clic su Autorizza per continuare.

- Se il terminale non viene visualizzato nella parte inferiore dello schermo, aprilo:
- Fai clic su Visualizza.
- Fai clic su Terminale.

Configurare il progetto
- Nel terminale, imposta il progetto utilizzando questo comando:
Esempio:gcloud config set project [PROJECT_ID]gcloud config set project lab-project-id-example
- Verrà visualizzato il seguente messaggio:
Updated property [core/project].
Configurazione locale e dello spazio di lavoro
- Nel terminale (o nel terminale Cloud Shell), clona il repository del progetto e vai alla directory del progetto:
git clone https://github.com/GoogleChromeLabs/codelabs mont-royal cd mont-royal - Vai alla cartella
ecommerce-ai-enhancements/starter:cd ecommerce-ai-enhancements/starter - Installa le dipendenze utilizzando
pnpm:pnpm install - Avvia il server di sviluppo locale:
Apri il browser all'indirizzopnpm devhttp://localhost:5173per visualizzare il negozio Mont-Royal Plein Air.
(Facoltativo) Installa l'estensione WebMCP Inspector
Per semplificare l'utilizzo di WebMCP, puoi installare lo strumento di controllo del contesto del modello WebMCP. Una volta installato, devi ottenere una chiave API Gemini per utilizzarlo:
- Vai ad AI Studio.
- Fai clic sul pulsante Crea chiave API per generare una nuova chiave API Gemini collegata al progetto che hai configurato in precedenza in questo passaggio.
- Apri lo strumento di ispezione del contesto del modello WebMCP (si apre nel riquadro laterale) e fai clic sul pulsante Aggiorna chiave API Gemini.
- Incolla la chiave API nel popup e salva.
Questa estensione ha un agente di base che può utilizzare WebMCP, consentendoti di provare il tuo sito web tramite l'estensione anziché chiamare direttamente gli strumenti WebMCP tramite DevTools.
3. Modelli di AI integrati sul web
Che cos'è l'API Prompt?
L'API Prompt offre alle applicazioni web l'accesso diretto a un modello linguistico multimodale di piccole dimensioni in esecuzione interamente sul dispositivo dell'utente. Poiché l'inferenza viene eseguita localmente:
- Latenza cloud pari a zero: nessun round trip di rete o accodamento del server di backend.
- Privato per impostazione predefinita: i prompt e qualsiasi contesto passato non vengono mai trasferiti dal dispositivo
- Costo zero: l'inferenza viene eseguita sull'hardware client senza fatturazione dei token o spese di hosting cloud.
- Funziona offline: funziona in modo affidabile anche senza una connessione a internet attiva.
In Chrome, l'API Prompt è accessibile tramite l'interfaccia globale 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,
});
Esercizio 1: consigli basati sul percorso
I siti di e-commerce in genere hanno caroselli o upsell di articoli "acquistati spesso insieme". Per un sito all'aperto, potrebbe essere più utile creare questi consigli in base alla cronologia di navigazione.
Per farlo, creerai una pipeline di suggerimenti in tre fasi:
- Profilatore del percorso: utilizzando l'API Prompt, analizzerai la cronologia di navigazione cronologica del cliente per tentare di dedurre la sua vera intenzione di avventura.
- Query sul prodotto: da questo intent, invierai una richiesta API a un backend di prodotto fittizio per ottenere elementi correlati.
- Consigli sui prodotti: restituirai questi prodotti all'API Product per classificarli, restituendo i cinque complementi più coerenti con ciò che l'utente sta visualizzando.
Attività 1.1: inizializzazione dell'API Prompt
Anziché inizializzare l'API Prompt singolarmente ogni volta che vuoi utilizzarla, centralizzi le chiamate in un unico file, memorizzando la creazione tramite il prompt di sistema per ridurre il tempo di avvio per più chiamate allo stesso agente.
Vai al file src/ai/prompt-api.ts e controlla getPromptSession() nelle righe 27-58:
export async function getPromptSession(
systemPrompt: string = '',
options: { signal?: AbortSignal } = {}
): Promise<LanguageModel>
- Riutilizzare una sessione base memorizzata nella cache. Esiste già una mappa della cache alla riga 21,
baseSessions, con chiave di sistema. Il riutilizzo dei modelli di base anziché laclone()zione di nuovi modelli riduce il tempo di avvio e eredita la configurazione di base senza che le sessioni interferiscano tra loro. Restituisci il clone: i chiamanti possono interagire con lui, ad esempiodestroy(), liberamente senza eliminare la base memorizzata nella cache. - Rileva le funzionalità dell'API. Rileva se l'API esiste e genera un errore in caso contrario.
- Dichiara le tue modalità e lingue. I modelli integrati possono supportare l'input multimodale. Devi dichiarare le modalità di cui hai bisogno e le lingue che vuoi supportare. Tutti i contenuti che invii al LLM sono in inglese.
- Controlla la disponibilità prima di creare qualsiasi cosa. Anche se l'API esiste, un modello che supporti i tuoi requisiti potrebbe non esistere. Controlla se ne esiste uno. In caso contrario, genera un errore. Se non è ancora stato scaricato, visualizza lo stato di avanzamento del download del report.
- Crea la sessione. Configura le opzioni per creare una nuova sessione dell'API Prompt e il prompt di sistema, se incluso
Attività 1.2: implementa Profiler del percorso
Vai al file src/ai/journey-profiler.ts e ispeziona la funzione di destinazione nelle righe 42-100:
export async function inferJourneyProfile(
context: ProfilerInputContext,
catalogMap: ReadonlyMap<string, Product>
): Promise<JourneyProfile>
- Utilizza la funzione dell'attività 1 per generare una nuova sessione di prompt da utilizzare.
- Chiedi al modello di utilizzare il testo del prompt fornito, utilizzando
journeyProfileSchemacome schema JSON per il ritorno strutturato. - Analizza l'output del prompt ed elimina i duplicati delle categorie target.
- Sostituisci i ritorni di stringhe codificate con i risultati effettivi del prompt.
- Distruggi la sessione al termine per liberare memoria.
Attività 1.3: implementa il re-ranker di sinergia
Vai al file src/ai/synergy-reranker.ts e ispeziona la funzione di destinazione nelle righe 30-71:
export async function rankComplementaryGear(
profile: JourneyProfile,
candidates: readonly Product[],
currentProduct?: Product | null,
cartProducts?: readonly Product[],
limit: number = 5
): Promise<readonly RecommendedItem[]>
- Utilizza la funzione dell'attività 1 per generare una nuova sessione di prompt da utilizzare.
- Chiedi al modello di utilizzare il testo del prompt fornito e lo schema generato.
- Analizza l'output del prompt.
- Restituisci l'elenco dei consigli assemblato utilizzando
assembleRecommendations. - Distruggi la sessione al termine per liberare memoria.
Verificare la pipeline dei consigli
- Apri Chrome per
http://localhost:5173/catalog/tent-mont-tremblant-3p. - Scorri verso il basso fino alla sezione Per te.
- Osserva come le 5 schede correlate si aggiornano per riflettere gli accoppiamenti di kit intelligenti (come impronte a terra, materassini e picchetti leggeri) anziché prodotti casuali.
- Apri la console Chrome DevTools per esaminare la durata di esecuzione in tempo reale di entrambi i passaggi di inferenza.
(Facoltativo) Attività 1.4: esplora altri modelli di AI integrati
Sono disponibili diversi altri modelli di AI integrati, tra cui il modello esperto dell'API Translator. I componenti di questo codebase sono già collegati a un servizio che rileva le modifiche nella lingua corrente e chiede la traduzione. Il tuo compito è collegare il tutto.
Vai al file: src/ai/translator.ts
Ispeziona la funzione di destinazione createTranslator nelle righe 29-45:
export async function createTranslator(
targetLang: SupportedLanguage
): Promise<Translator | null>
- Verifica il supporto dell'API Translator e assicurati che la lingua di destinazione non sia l'inglese (i contenuti sono in inglese per impostazione predefinita).
- Crea una coppia linguistica, dall'inglese alla lingua di destinazione, e verifica se è disponibile.
- Crea opzioni per il traduttore e collega un monitor che mostri l'avanzamento del download del modello.
- Restituisce il traduttore inizializzato.
Successivamente, esamina la funzione di destinazione translate nelle righe 50-58:
export async function translate(
text: string,
targetLang: SupportedLanguage
): Promise<string>
- Controlla se è disponibile un traduttore con
getCachedTranslatorche passa intargetLang. In caso contrario, restituisci il testo pulito. - In caso affermativo, utilizza il traduttore per tradurre il testo pulito.
Vai al file: src/ai/translator.ts
Esamina la funzione di destinazione render nelle righe 204:
export async function translate(
text: string,
targetLang: SupportedLanguage
): Promise<string>
- Attivare il componente Selettore lingua
4. Utilizzo di WebMCP per migliorare l'esperienza dell'agente
Che cos'è WebMCP?
Man mano che gli utenti iniziano a utilizzare agenti autonomi e di co-browsing, per i siti web è diventato importante adattarsi. Gli agenti si basano tradizionalmente sull'attivazione, ovvero sull'acquisizione di screenshot e sullo scraping del DOM e degli alberi di accessibilità, per determinare come interagire con un sito. Questo processo è lento, fragile e soggetto a errori e spreca i token utente.
WebMCP aiuta a risolvere questo problema consentendo agli sviluppatori di fornire strumenti direttamente agli agenti per interagire con la pagina in cui si trovano. Gli agenti che li supportano possono utilizzare questi strumenti proprio come uno strumento nel tuo harness di codifica, con input e valori restituiti chiari e strutturati dettati da te.
// 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',
};
},
});
Quando un agente si connette alla pagina web, esegue una query su document.modelContext.getTools(). Ogni strumento registrato espone:
name: identificatore dello strumento programmatico utilizzato dagli agenti durante l'esecuzione degli strumenti (ad es.'get_product_specs').title: etichetta di visualizzazione leggibile utilizzata dagli ispettori e dalle interfacce degli agenti (ad es.'Get Product Specs').description: descrizione in testo normale che informa il modello su cosa fa lo strumento e quando chiamarlo. In questo modo, l'agente determina se deve chiamare lo strumento, quindi sii descrittivo.inputSchema: schema JSON che definisce gli argomenti accettati.annotations: suggerimenti sul comportamento, ad esempio{ readOnlyHint: true }per gli strumenti di sola lettura che non causano effetti collaterali sullo stato.execute: funzione asincrona eseguita quando viene richiamato lo strumento.
Attività 2.1: strumenti per consigli e prodotti
Inizia registrando uno strumento per consentire agli agenti di recuperare i consigli che hai appena creato nell'esercizio precedente.
Vai al file: src/components/product/ForYouSection.ts
Ispeziona registerWebMCPTools() nelle righe 71-94:
private registerWebMCPTools(): void
- Controlla se WebMCP è supportato.
- Se sì, registra lo strumento.
- Scegli un titolo e una descrizione che invoglino un agente a scegliere lo strumento. In questo caso, pensa all'ingegneria dei prompt.
- Non è presente alcun input, quindi includi solo uno schema JSON dell'oggetto vuoto.
- Questo è uno strumento di sola lettura.
- Nella funzione di esecuzione, utilizza
recommendationStoreper ottenere l'insieme corrente di consigli, quindi restituisci l'ID prodotto corrente e l'insieme di consigli sui prodotti. - Aggiungi un segnale di interruzione e intercettalo in modo che non generi un errore. In questo modo, lo strumento viene rimosso correttamente quando il componente viene smontato.
Vai al file: src/views/ProductView.ts
- Ripeti la stessa procedura per registrare uno strumento
get_current_product, questa volta restituendo l'intero prodotto e i consigli
Attività 2.2: strumenti del riquadro a scomparsa del carrello
Vai al file: src/components/cart/CartDrawer.ts
Ispeziona registerWebMCPTools() nelle righe 83-114:
private registerWebMCPTools(): void
- Registra lo strumento
view_cart:
- Il relativo
inputSchemadeve essere un oggetto con una singola opzione booleana,openDrawer. - Deve essere di sola lettura.
- Legge l'input come parte della sua funzione
execute, decide se mostrare o nascondere il carrello, aggiornarecommendationStoree poi restituisce il riepilogo del carrello
- Registra lo strumento
manage_cart:
- Il relativo
inputSchemadeve essere un oggetto conitems, che è un array di oggetti con l'enumerazioneproductID,add,removeeupdateactione l'interoquantity. - La funzione
executedeve passare gli elementi athis.updateCart
Attività 2.3: strumento di cambio lingua
Porta WebMCP a un livello superiore esponendo uno strumento linguistico ad agenti esterni.
Vai al file: src/components/navigation/LanguagePicker.ts
Ispeziona registerWebMCPTools() nelle righe 61-63:
private registerWebMCPTools(): void
- Registra lo strumento
switch_language:inputSchemadeve avere una proprietàlanguageche sia un enum diSUPPORTED_LANGUAGE_CODES.- La funzione
executedeve chiamarethis.switchLanguagecon la lingua fornita.
Attività 2.4: strumenti di navigazione dello store
Consenti agli agenti autonomi di navigare nello store, passare alle pagine di prodotto, sfogliare le categorie o avviare ricerche.
Vai al file: src/components/navigation/SiteHeader.ts
Ispeziona registerWebMCPTools() nelle righe 155-171:
private registerWebMCPTools(): void
- Controlla se WebMCP è supportato.
- Registra lo strumento
search:- Lo schema di input accetta una stringa
query. - In
execute, chiamathis.search(input?.query).
- Lo schema di input accetta una stringa
- Registra lo strumento
go_to_catalog:- Lo schema di input accetta
activity(enum diACTIVITIES) ecategory(enum diPRODUCT_CATEGORIES) facoltativi. - In
execute, chiamathis.goToCatalog(input?.activity, input?.category).
- Lo schema di input accetta
- Registra lo strumento
get_categories_and_activities:- Strumento di sola lettura senza parametri di input.
- In
execute, chiamathis.getCategoriesAndActivities().
- Registra lo strumento
go_to_product:- Lo schema di input richiede una stringa
productId. - In
execute, chiamathis.goToProduct(input?.productId).
- Lo schema di input richiede una stringa
Verifica con lo strumento di controllo WebMCP
- Ricarica
http://localhost:5173/catalog/tent-mont-tremblant-3pin Chrome e vai a una pagina di prodotto. - Apri Chrome DevTools > Application > WebMCP.
- Dovresti visualizzare gli strumenti WebMCP:
get_recommendations,get_current_product,view_cart,manage_cart,switch_language,search,go_to_catalog,get_categories_and_activitiesego_to_product. - Fai clic su uno di questi per visualizzarne i dettagli e i parametri.
- Scegli una con parametri, seleziona alcune opzioni e fai clic su Esegui strumento per vederla in azione.
- (Facoltativo) Se hai installato e configurato WebMCP Model Context Tool Inspector, aprilo: si apre nel riquadro laterale di Chrome. Utilizza l'interfaccia di chat per chiedere all'agente di eseguire un'azione che ritieni debba richiamare uno dei tuoi strumenti per vedere come risponde.
5. (Facoltativo) Creare un agente in loco
Chiamare gli strumenti WebMCP in-page
Gli strumenti WebMCP non sono solo per le estensioni del browser esterni o i bot di terze parti: la tua applicazione può chiamarli direttamente. Eseguendo query su document.modelContext.getTools(), il codice lato client può rilevare ed eseguire gli strumenti in modo dinamico.
Puoi utilizzarlo per creare un assistente allo shopping AI in loco, trasformando la barra di ricerca in uno strumento di rilevamento dei prodotti basato sull'input in linguaggio naturale. Anziché scrivere codice imperativo personalizzato per coordinare numerosi filtri per sfaccettatura, la barra di ricerca può inviare query in linguaggio naturale all'API Prompt, che decide quali strumenti WebMCP in-page richiamare.
Per scoprire e richiamare uno strumento WebMCP da JavaScript:
// 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
Attività 3.1: strumenti delle sfaccettature della barra laterale
Esporre ogni sfaccettatura della barra laterale del catalogo a WebMCP in modo che gli agenti (e l'assistente di ricerca nella pagina) possano attivare/disattivare i filtri in modo programmatico.
Ogni componente sfaccettatura in src/components/facets/ fornisce già un metodo helper nella relativa classe e uno schema di input esportato in src/utils/filter-schemas.ts:
- In
src/components/facets/ActivityFacet.ts:- Registra
activity_filterutilizzandoactivityFilterSchema. - In
execute, chiamathis.filterActivity(input?.activity, input?.selected).
- Registra
- In
src/components/facets/CategoryFacet.ts:- Registra
category_filterutilizzandocategoryFilterSchema. - In
execute, chiamathis.filterCategory(input?.category, input?.selected).
- Registra
- In
src/components/facets/ConditionFacet.ts:- Registra
condition_filterutilizzandoconditionFilterSchema. - In
execute, chiamathis.filterCondition(input?.condition, input?.selected).
- Registra
- In
src/components/facets/PriceFacet.ts:- Registra
price_filterutilizzandopriceFilterSchema. - In
execute, chiamathis.filterPrice(input?.priceRange || input?.bracket, input?.selected).
- Registra
- In
src/components/facets/WeightFacet.ts:- Registra
weight_filterutilizzandoweightFilterSchema. - In
execute, chiamathis.filterWeight(input?.weightRange || input?.bracket, input?.selected).
- Registra
- In
src/components/facets/RatingFacet.ts:- Registra
rating_filterutilizzandoratingFilterSchema. - In
execute, chiamathis.filterRating(input?.minRating || input?.rating, input?.selected).
- Registra
- In
src/components/facets/SearchFacet.ts:- Registra
keyword_filterutilizzandokeywordFilterSchema. - In
execute, chiamathis.updateKeyword(input?.keyword).
- Registra
Ricorda di verificare il supporto di WebMCP e di trasmettere { signal: this.signal } con .catch(() => {}) come hai imparato nel passaggio 2.
Attività 3.2: strumenti di visualizzazione del catalogo
Ora registra gli strumenti di elenco a livello di catalogo, reimpostazione dei filtri e strumenti di ricerca semantica su document.modelContext.
Vai al file: src/views/CatalogView.ts
Ispeziona registerWebMCPTools() nelle righe 125-140:
private registerWebMCPTools(): void
- Controlla se WebMCP è supportato.
- Registra lo strumento
list_items:- Non accetta parametri di input ed è di sola lettura.
- La sua funzione
executedeve chiamarethis.getItemsSummary().
- Registra lo strumento
reset_filters:- Non accetta parametri di input.
- La sua funzione
executedeve chiamarethis.resetFilters().
- Registra lo strumento
semantic_catalog_filter:- Utilizza
semanticCatalogFilterSchema. - La sua funzione
executedeve chiamareinterpretAndApplySemanticFilter(input.query).
- Utilizza
Attività 3.3: orchestra l'agente di filtro semantico
Ora è il momento di collegare tutto. Questa attività trasforma la ricerca in una pipeline semantica che alimenta lo strumento semantic_catalog_filter:
Vai al file: src/ai/catalog-semantic-filter.ts
Ispeziona prewarmSemanticFilterSession() nelle righe 84-88:
export async function prewarmSemanticFilterSession(): Promise<void>
- Controlla se
warmSessionesiste già; in caso affermativo, restituisci il risultato in anticipo. - Prepara una sessione dell'API Prompt con
SEMANTIC_FILTER_SYSTEM_PROMPTutilizzandogetPromptSession()e archiviala inwarmSession. Esegui il wrapping in un bloccotry/catchin modo che la creazione della ricerca possa comunque eseguire il fallback in modo controllato in caso di errore di pre-riscaldamento.
Ispeziona inferSearchFacets() nelle righe 93-134:
async function inferSearchFacets(
searchTerm: string,
cachedJourney: JourneyProfile | null
): Promise<{ parsed: SemanticFilterResponse; cacheHit: boolean }>
- Richiedi la sessione pre-riscaldata da
warmSession, se disponibile (e reimpostawarmSessionsunull), oppure crea una nuova sessione utilizzandogetPromptSession(SEMANTIC_FILTER_SYSTEM_PROMPT). - Richiedi al modello di utilizzare
promptText, usandosemanticFilterSchemacomeresponseConstraint. - Analizza il JSON restituito, memorizza il risultato analizzato nella cache persistente con
cacheKeye distrugge la sessione in un bloccofinally.
Ispeziona applyFacetsViaWebMCP() nelle righe 139-270:
async function applyFacetsViaWebMCP(
searchTerm: string,
parsed: SemanticFilterResponse
): Promise<{ appliedFilters: SemanticFilterResult['appliedFilters']; toolsExecuted: string[] }>
- Scopri gli strumenti registrati su
document.modelContextutilizzandoawait document.modelContext.getTools(). - Reimposta i filtri per iniziare da zero chiamando il numero
await executeFacet('reset_filters', {}). - Applica contemporaneamente le sfaccettature attive utilizzando
await Promise.all(facetTasks).
Ispeziona interpretAndApplySemanticFilter() nelle righe 272-316:
export async function interpretAndApplySemanticFilter(
searchTerm: string
): Promise<SemanticFilterResult>
- Deduci i facet di ricerca chiamando
inferSearchFacets(searchTerm, cachedJourney). - Applica le sfaccettature dedotte al catalogo utilizzando
applyFacetsViaWebMCP(searchTerm, parsed).
Verifica l'agente in-page
- Vai a
http://localhost:5173/catalog. - Nella barra di ricerca in alto, inserisci:
"lightweight 3 season tent for wet hikes" - Guarda l'API Prompt analizzare la richiesta, richiamare
activity_filter(Escursionismo),category_filter(Tende) econdition_filter(Bagnato), restringendo immediatamente il catalogo all'attrezzatura corrispondente senza alcun clic manuale sulle caselle di controllo.
6. Che cosa hai imparato
Complimenti. Hai trasformato un'applicazione e-commerce in un'esperienza intelligente e orientata all'agente, basata interamente sull'AI on-device e sulle API della piattaforma web standard.
Cosa hai creato:
- API Prompt on-device: sintetizza le sequenze temporali di navigazione degli utenti con
LanguageModelper generare contestoJourneyProfilein tempo reale e ha creato un motore di sinergiarankComplementaryGearutilizzando schemi JSON strutturati (responseConstraint). - Strumenti dei componenti WebMCP: strumenti modulari e incapsulati registrati nei componenti UI (
get_recommendations,get_current_product,view_cart,manage_cart) tramitedocument.modelContext. - Architettura di inoltro dell'agente: esecuzione dello strumento testata e verificata utilizzando l'estensione Chrome WebMCP Inspector.
- Agente in pagina on-site: strumenti lato client orchestrati direttamente nel browser per consentire la ricerca nel catalogo in linguaggio naturale con più sfaccettature dalla barra di ricerca dell'intestazione del sito.
- Modelli AI on-device specializzati: è stata esplorata la traduzione dinamica on-device utilizzando
Translator.
Conclusioni importanti:
- Latenza zero e privacy elevata: i modelli on-device come Gemini Nano eliminano le chiavi API cloud, la latenza di rete e i problemi di esfiltrazione dei dati.
- Gli output strutturati sono essenziali: l'utilizzo di schemi JSON con
responseConstrainttrasforma la generazione di testo creativo in una logica applicativa affidabile e sicura. - WebMCP prepara il web per gli agenti AI: la registrazione degli strumenti direttamente nel DOM consente sia alle funzionalità assistive interne sia agli agenti browser autonomi esterni di eseguire azioni verificate e deterministiche.
- Lascia che il modello proponga, non esegua: limitare il modello a un
enumdei tuoi strumenti registrati e inviare il risultato personalmente rende il comportamento dell'agente verificabile e impedisce che inventi azioni.