Ce guide explique comment intégrer l'API Conversational pour offrir à vos clients des expériences de chat dynamiques optimisées par l'IA. En comprenant les différents types de requêtes et en exploitant les réponses de l'API, vous pouvez proposer des recherches de produits pertinentes, répondre aux questions de vos clients et guider vos utilisateurs finaux tout au long de leur parcours d'achat.
Le conversationalFilteringMode
de l'API Conversationnelle permet de distinguer clairement l'agent de commerce conversationnel du filtrage conversationnel des produits.
Configuration
L'API Conversational est compatible avec la fonctionnalité d'agent de commerce conversationnel :
- gRPC :
conversationalSearchService
- REST :
conversationalSearch
L'API Conversational permet une expérience de chat dans laquelle vos utilisateurs envoient des requêtes et le système renvoie une réponse textuelle, des types de requêtes classés et des options de recherche affinées potentielles.
Cette API fonctionne comme un service de streaming, ce qui permet de détecter rapidement l'intention de la requête. Les interactions ultérieures dans la conversation nécessitent l'ajout d'un conversation_id
.
Pour renvoyer des résultats de recherche, l'ancienne API Retail doit être appelée en parallèle de l'API Conversational.
Envoyer une requête de l'utilisateur final
Cette section décrit comment lancer une expérience d'agent Conversational Commerce. Par exemple, votre utilisateur peut saisir Aide-moi à organiser une fête dans le champ de recherche.
Envoyer une requête à Vertex AI Search pour le commerce
Il existe deux points de terminaison d'API différents :
- L'API Conversational doit être utilisée pour récupérer l'expérience conversationnelle.
- L'API Search principale doit être utilisée pour récupérer les résultats de recherche.
Point de terminaison 1 : requête de l'API Conversationnelle
- Vous devez créer une demande d'agent Conversational Commerce en définissant l'entrée de votre utilisateur comme requête.
- La requête doit être envoyée en tant que requête HTTP POST au point de terminaison
projects/*/locations/*/catalogs/*/placements/*:conversationalSearch
.
Méthode HTTP et point de terminaison
POST https://retail.googleapis.com/v2alpha/{placement=projects/*/locations/*/catalogs/*/placements/*}:conversationalSearch
Requête API conversationnelle :
Requête initiale
{ "query": "Help me plan a party", "branch": "projects/{project_id}/locations/{location_id}/catalogs/{catalog_id}/branches/default_branch", "placement": "projects/799252947591/locations/global/catalogs/default_catalog/placements/default_search", "visitorId": "your_visitor_id", "conversationId": "", // Leave empty for the first query "searchParams": { // IMPORTANT: These search parameters should mirror the configuration // of your core Search API calls to ensure consistency between LLM answers and search results. "filter": "categories:(\"Party Supplies\" OR \"Decorations\" OR \"Food & Drink\")" }, "userInfo": { // Optional: User information for enhanced personalization // Example: "userId": "user123", "userAgent": "Chrome/120.0" }, "conversationalFilteringSpec": { // Optional: Controls conversational filtering behavior. Defaults to DISABLED if unset. // "conversational_filtering_mode": "DISABLED" - Otherwise you can also explicitly set to disabled. }
placement
: nom de ressource de l'emplacement (par exemple,projects/your-project-id/locations/global/catalogs/default_catalog/placements/default_branch
). Il s'agit d'un paramètre de chemin d'accès obligatoire.-
query
: requête de recherche brute de votre utilisateur. Ce champ est obligatoire. -
branch
: nom de la ressource de branche, par exempleprojects/P/locations/L/catalogs/C/branches/B
. Si ce paramètre n'est pas défini,default_branch
est utilisé. Ce champ est obligatoire. -
visitorId
: identifiant unique permettant d'effectuer le suivi des visiteurs. Ce champ est obligatoire. -
conversationId
: ID unique permettant de suivre les sessions de conversation. Pour la première demande dans une nouvelle conversation, ce champ doit être vide. Pour les requêtes suivantes dans la même conversation, il doit être défini sur leconversation_id
reçu dans leConversationalSearchResponse
précédent. -
searchParams
: (facultatif) paramètres standards du moteur de recherche principal (par exemple,filter
,canonicalFilter
,sortBy
,boostSpec
). Il est essentiel que ces paramètres reflètent la configuration utilisée dans vos appels principaux à l'API Search pour garantir la cohérence entre les réponses du LLM et les résultats de recherche de produits affichés. -
userInfo
: (facultatif) Informations sur l'utilisateur pour une personnalisation améliorée. Peut inclureuserId
,user_agent
etdirect_user_request
(booléen). -
conversationalFilteringSpec
: (facultatif) spécifie le mode de filtrage conversationnel. Si cette valeur n'est pas définie, la valeur par défaut est "DISABLED" (DÉSACTIVÉ).mode
: intégrez l'API Conversationnelle à l'aide de l'un de ces trois modes pour contrôler le filtrage des produits conversationnels : DISABLED
: dans ce mode, le client n'implémente que la recherche d'agents de commerce conversationnel. Il s'agit du mode préféré pour ce guide d'implémentation sur la recherche d'agents de commerce conversationnel.ENABLED
: dans ce mode, le client implémente toutes les fonctionnalités conversationnelles, y compris la recherche d'agents de commerce conversationnel et le filtrage conversationnel des produits.CONVERSATIONAL_FILTER_ONLY
: si cette option est choisie, le client implémente uniquement le filtrage conversationnel des produits. Lorsque ce mode est sélectionné, l'utilisateur ne bénéficie que du filtrage conversationnel des produits, sans génération de réponse LLM, de classification des requêtes ni de suggestions de requêtes de recherche.
Exemple de requête API
placement: "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search" branch: "projects/118220807021/locations/global/catalogs/default_catalog/branches/default_branch" query: "show me some monster energy drinks" visitor_id: "test" conversational_filtering_spec { conversational_filtering_mode: DISABLED }
Exemple de réponse de l'API
user_query_types: "SIMPLE_PRODUCT_SEARCH" conversation_id: "479fd093-c701-4899-bcc3-9e711233bdf9" refined_search { query: "monster energy drinks" }
Exemple de requête API
placement: "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search" branch: "projects/118220807021/locations/global/catalogs/default_catalog/branches/default_branch" query: "show me some monster energy drinks" visitor_id: "test" conversational_filtering_spec { conversational_filtering_mode: ENABLED }
Exemple de réponse de l'API
user_query_types: "SIMPLE_PRODUCT_SEARCH" conversation_id: "479fd093-c701-4899-bcc3-9e711233bdf9" refined_search { query: "monster energy drinks" } conversational_filtering_result: { followup_question{ followup_question: "What is the size?" suggested_answers { product_attribute_value { name: "size", value: "12oz" } } } }
Pour en savoir plus, consultez le guide du développeur sur les filtres de produits conversationnels. Veuillez consulter le guide supplémentaire sur l'intégration des deux produits conversationnels.
Point de terminaison 2 : requête de l'API Core Search
Il existe deux approches principales pour afficher les résultats de recherche dans votre UI :
Option 1 : Toujours afficher les résultats de recherche
Si votre conception de l'expérience utilisateur exige que les résultats de recherche soient toujours affichés, quelle que soit la sortie conversationnelle (par exemple, dans une zone de résultats de recherche dédiée à côté du chat), envoyez la requête d'origine de l'utilisateur à l'API Product Search principale avec votre appel à l'API Conversational. Cela permet de s'assurer que les fiches produit sont immédiatement disponibles.
Option 2 : Afficher les résultats de recherche en fonction de la réponse conversationnelle
Si la conception de votre expérience utilisateur est plus dynamique et que vous ne souhaitez afficher les résultats de recherche qu'en fonction de la réponse de l'API Conversational, par exemple uniquement pour les requêtes SIMPLE_PRODUCT_SEARCH
ou chaque fois que des suggestions refined_search
sont fournies, attendez la réponse de l'API Conversational avant d'envoyer des requêtes à l'API Product Search principale. S'il y a une réponse, utilisez la requête refined_search
fournie pour récupérer les résultats des produits.
Quelle que soit l'option d'interface utilisateur choisie, vous pouvez appeler l'API Retail lorsque vous avez besoin d'extraire les résultats des produits. Pour en savoir plus, consultez Étape 2c. Comprendre les types de requêtes et les actions des marchands
Méthode HTTP et point de terminaison
POST https://retail.googleapis.com/v2beta/{placement=projects/*/locations/*/catalogs/*/servingConfigs/*}:search
Requête API Recherche de produits principaux :
Requête initiale
{ "placement": "projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/servingConfigs/default_search", // Or if using legacy placements: // "placement": "projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/placements/default_search", "query": "Help me plan a party", // This is the original user query "visitorId": "your_visitor_id", "branch": "projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/branches/default_branch", "pageSize": 20, // Optional: Number of results to return per page "filter": "categories:(\"Party Supplies\" OR \"Decorations\" OR \"Food & Drink\")", // Mirroring the filter from the Conversational Commerce API "orderBy": "relevance DESC", // Optional "userInfo": { // Optional: User information for enhanced personalization, should mirror Conversational Commerce API // "userId": "user123", "userAgent": "Chrome/120.0" }, "searchMode": "PRODUCT_SEARCH" // Typically for product searches }
placement
(obligatoire) : nom de la ressource de la configuration de diffusion Retail Search ou de l'emplacement existant. Exemple :projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/servingConfigs/default_search
.query
: obligatoire. Requête de recherche. Il peut s'agir de la saisie brute de l'utilisateur, comme Aide-moi à organiser une fête, ou d'unerefinedSearch.query
plus optimisée (comme fournitures pour organiser une fête, décorations) obtenue à partir de la réponse de l'API Conversational Commerce.visitorId
: obligatoire. Identifiant unique permettant d'effectuer le suivi des visiteurs. Cette valeur doit être cohérente avec levisitorId
envoyé à l'API Conversational Commerce pour le même utilisateur final.branch
(obligatoire) : nom de la ressource de branche, tel queprojects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/branches/default_branch
.pageSize
(facultatif) : nombre maximal de produits à renvoyer.filter
(facultatif) : utilisé pour filtrer les résultats de recherche. C'est ici que vous appliquerez les filtres qui reflètent ce que vous envoyez dans `searchParams` à l'API Conversational Commerce pour assurer la cohérence.orderBy
(facultatif) : spécifie l'ordre dans lequel les produits sont renvoyés (par pertinence ou par prix, par exemple).userInfo
(facultatif) : informations utilisateur pour la personnalisation. Elles doivent être cohérentes avec l'appel de l'API Conversational Commerce.searchMode
(facultatif) : définit le comportement de recherche.PRODUCT_SEARCH
est courant pour les requêtes générales sur les produits.
Comprendre la réponse
Cet exemple de code montre une réponse de l'API Conversational Commerce.
La réponse de l'API (ConversationalSearchResponse
) inclut query_types
, conversational_text_response
(le cas échéant), les options refined_search
et potentiellement un followup_question
ou un conversational_filtering_result
. Le conversation_id
est essentiel pour poursuivre la session.
Réponse de Vertex AI Search pour le commerce
Cet exemple de code montre une réponse de l'API Conversational :
Réponse initiale
{ "userQueryTypes": ["INTENT_REFINEMENT"], "conversationalTextResponse": "To plan a party, you'll need decorations, snacks, party supplies, drinks, and a cake. You can find a wide variety of decorations, snacks, and drinks. For party supplies, you can find everything from plates and cups to balloons and streamers. And for cake, you can choose from a variety of flavors and sizes.", "followupQuestion": { "followupQuestion": "What kind of party are you planning?" }, "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", "refinedSearch": [ { "query": "Decorations" }, { "query": "Snacks" }, { "query": "Party Supplies" }, { "query": "Drinks" }, { "query": "Cake" } ], "state": "SUCCEEDED" }
Que doivent faire les marchands avec la réponse (général)
Affichez les champs suivants de la réponse :
user_query_types
: ce champ fournit la ou les classifications de l'intention de votre utilisateur. Pour en savoir plus sur les actions détaillées en fonction de ces types, consultez [Comprendre les types de requêtes et les actions des marchands](#step-2c).conversation_id
: vous pouvez stocker cet ID unique dans le stockage de session de votre navigateur ou dans un stockage côté client similaire pour maintenir la session de conversation avec le serveur. Cela est essentiel pour faire la distinction entre plusieurs conversations en cours pour un même client. Votre modèle conserve le contexte pour unconversation_id
donné. L'envoi d'une nouvelleconversation_id
démarre une nouvelle session. Nous vous recommandons de définir la durée de votre session, par exemple 30 minutes d'inactivité.refined_search
: liste des requêtes de recherche affinées proposées pour récupérer les résultats de recherche pertinents. PourSIMPLE_PRODUCT_SEARCH
, il s'agira toujours d'une seule requête. Pour les autres requêtes visant à obtenir une réponse LLM, il y en aura une ou plusieurs. Les requêtesrefined_search
peuvent être utilisées pour les appels à l'API Search principale (SearchService.Search
) ou peuvent également être affichées à l'utilisateur sous forme de suggestions.conversational_text_response
: affichez ce texte à l'utilisateur comme réponse principale générée par l'IA à sa requête.followup_question
: facultatif. L'étatfollowup_question
s'affiche.state
: ce champ indique l'état de la génération de la réponse (STREAMING
ouSUCCEEDED
). Vous pouvez l'utiliser pour les commentaires de l'UI, par exemple pour afficher un indicateur de chargement jusqu'àSUCCEEDED
. Pour en savoir plus, consultez l'étape 2b. Comprendre l'API Streaming
Comprendre l'API Streaming
L'API Conversational Commerce fonctionne comme une API de streaming. Cela signifie que votre utilisateur reçoit des parties de la réponse dans plusieurs blocs plutôt que dans une seule charge utile complète.
Le premier bloc de la réponse inclut les requêtes query_types
et refined_search
, et son state
est indiqué comme STREAMING
. Cette détection précoce de l'intention et la disponibilité immédiate des affinements de recherche permettent à votre modèle de prendre des décisions rapides sur la façon de traiter la requête de votre utilisateur et de gérer son expérience en termes de latence des réponses du LLM :
- Pour les types de requêtes qui n'attendent pas de réponse textuelle conversationnelle (comme
SIMPLE_PRODUCT_SEARCH
,RETAIL_IRRELEVANT
,BLOCKLISTED
,QUERY_TYPE_UNSPECIFIED
,ORDER_SUPPORT
,DEALS_AND_COUPONS
,STORE_RELEVANT
) : commequery_types
se trouve dans le premier bloc, votre système sait immédiatement qu'aucune réponse LLM n'est à venir. Vous pouvez poursuivre le traitement prédéfini pour ces types, par exemple en affichant un message statique ou en redirigeant l'utilisateur vers l'assistance, sans attendre d'autres résultats conversationnels. - Plus précisément pour
SIMPLE_PRODUCT_SEARCH
, votre système peut immédiatement effectuer un appel direct à l'API Search principale à l'aide de la requêterefined_search
reçue dans le premier bloc. Cela permet de s'assurer que les résultats de recherche s'affichent avec un délai minimal, conformément aux SLA habituels de l'expérience de recherche. - Pour les types de requêtes qui s'attendent à une réponse textuelle conversationnelle (comme
INTENT_REFINEMENT
,PRODUCT_DETAILS
,PRODUCT_COMPARISON
,BEST_PRODUCT
) - Vous recevez les requêtes
query_types
etrefined_search
dans le bloc initial. Vous pouvez immédiatement lancer un appel parallèle à l'API Search principale à l'aide de ces requêtesrefined_search
pour commencer à charger les résultats de produits. - Les blocs suivants sont diffusés en streaming et contiennent différentes sections de la réponse textuelle conversationnelle. Pendant ce temps, l'état
state
reste"STREAMING"
. - Enfin, le dernier bloc inclut la réponse textuelle complète de la conversation, et son
state
passe à"COMPLETED"
. - Cette approche de streaming permet une expérience utilisateur fluide, où les résultats de recherche peuvent commencer à se charger pendant que le résumé de l'IA est généré. Vous pouvez choisir d'afficher un indicateur de chargement pour la réponse conversationnelle ou de la présenter une fois qu'elle a été entièrement diffusée.
Comprendre les types de requêtes et les actions des marchands
Le champ query_types
de la réponse est une liste indiquant la ou les classifications de l'intention de votre utilisateur. Votre système doit les gérer comme suit. Notez que conversational_text_response
fait référence à la réponse en langage naturel générée par l'IA à partir de l'API.
L'agent Conversational Commerce utilise des catégories de requêtes de recherche pour déterminer si une réponse basée sur un LLM est générée et comment les requêtes des utilisateurs finaux sont traitées par les API Conversational et Search dans les scénarios suivants :
Catégories | Classifications des requêtes |
---|---|
1. Requêtes non pertinentes qui ne nécessitent pas de réponse du LLM |
|
2. Demandes d'assistance et d'informations |
|
3. Recherches par mots clés ne nécessitant pas de LLM Requête API conversationnelle : Requête initiale { "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "branch": "projects/118220807021/locations/global/catalogs/default_catalog/branches/default_branch", "query": "show me some monster energy drinks", "visitorId": "test" } Réponse de l'API conversationnelle : Réponse initiale { "userQueryTypes": ["SIMPLE_PRODUCT_SEARCH"], "conversationId": "479fd093-c701-4899-bcc3-9e711233bdf9", "refinedSearch": [ { "query": "monster energy drinks" } ] } Requête API Search : Requête complémentaire { "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "query": "monster energy drinks", "visitorId": "test" } |
|
4. Requêtes de recherche de réponses LLM Requête API conversationnelle : Requête initiale { "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "branch": "projects/118220807021/locations/global/catalogs/default_catalog/branches/default_branch", "query": "Compare 1% milk with 2% milk", "visitorId": "test" } Réponse de l'API conversationnelle : Réponse initiale { "userQueryTypes": ["PRODUCT_COMPARISON"], "conversationalTextResponse": "1% milk contains 110 calories, 1.5 g of saturated fat, and 140 mg of sodium per cup. 2% milk is reduced fat with 37% less fat than regular milk and contains vitamins A & D.", "conversationId": "0e1cfdac-802f-422d-906e-9fc9f9d733ba", "refinedSearch": [ { "query": "1% milk" }, { "query": "2% milk" } ] } Requête API Search : Requête complémentaire { "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "query": "1% milk", "visitorId": "test" } |
|
5. Affiner l'intention Requête API conversationnelle : Requête initiale { "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "branch": "projects/118220807021/locations/global/catalogs/default_catalog/branches/default_branch", "query": "Help me plan a party", "visitorId": "test" } Réponse de l'API conversationnelle : Réponse initiale { "userQueryTypes": ["INTENT_REFINEMENT"], "conversationalTextResponse": "To plan a party, you'll need decorations, snacks, party supplies, drinks, and a cake. You can find a wide variety of decorations, snacks, and drinks. For party supplies, you can find everything from plates and cups to balloons and streamers. And for cake, you can choose from a variety of flavors and sizes.", "followupQuestion": { "followupQuestion": "What kind of party are you planning?" }, "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", "refinedSearch": [ { "query": "Decorations" }, { "query": "Snacks" }, { "query": "Party Supplies" }, { "query": "Drinks" }, { "query": "Cake" } ], "state": "SUCCEEDED" } |
|
Catégorie 1. Requêtes non pertinentes qui ne nécessitent pas de réponse de LLM
-
QUERY_TYPE_UNSPECIFIED
: - Aucun
conversational_text_response
n'est fourni. - Action : gérez-le comme un cas par défaut ou d'erreur. Vous pouvez demander à l'utilisateur de fournir des précisions ou l'orienter vers un endroit où il peut obtenir de l'aide générale.
RETAIL_IRRELEVANT
:- Aucun
conversational_text_response
n'est fourni. - Action : gérez cela en affichant un message approprié, tel que Je ne peux pas répondre à cette question. ou Je suis un assistant shopping, comment puis-je vous aider ?, comme défini par la conception de votre application.
BLOCKLISTED
:- Aucun
conversational_text_response
n'est fourni. - Action : gérez la demande conformément à votre règlement sur la liste de blocage, généralement en affichant un message générique Impossible de traiter cette demande.
Catégorie 2. Demandes d'assistance et d'informations
Pour ces types, l'API ne fournit pas de conversational_text_response
direct par défaut, mais vous avez la possibilité de rediriger les utilisateurs vers les liens ou ressources appropriés.
ORDER_SUPPORT
:- Action par défaut : aucune
conversational_text_response
n'est fournie. Votre UI doit afficher un message standard, des liens pertinents ou rediriger la requête vers votre propre API d'assistance ou canal de service client dédié. DEALS_AND_COUPONS
:- Action par défaut : aucune
conversational_text_response
n'est fournie. Votre UI doit afficher un message standard, des liens pertinents ou rediriger la requête vers votre système d'offres ou de promotions. STORE_RELEVANT
:- Action par défaut : aucune
conversational_text_response
n'est fournie. Votre UI doit afficher un message standard, des liens pertinents ou rediriger la requête vers votre propre outil de localisation de magasin ou système d'information. RETAIL_SUPPORT
:- Action par défaut : aucune
conversational_text_response
n'est fournie. Votre UI doit afficher un message standard, des liens pertinents ou rediriger la requête vers votre propre système de questions fréquentes et d'informations.
Catégorie 3. Recherches par mots clés ne nécessitant pas de réponses LLM
SIMPLE_PRODUCT_SEARCH
:- Aucune réponse textuelle conversationnelle n'est générée.
- Action : la réponse de l'API renvoie toujours une seule requête
refined_search
. Cette requête affinée sert de terme de recherche suggéré. Appelez directement l'API Search principale (SearchService.Search
) et récupérez les résultats de produits pertinents à l'aide de la requête d'origine ou de la requêterefined_search
. Larefined_search.query
ne provient pas forcément directement de la saisie de l'utilisateur final actuel, mais peut également être dérivée du contexte de l'historique des discussions. Par exemple, si un utilisateur final a précédemment affiné la requête robe de soirée en robes rouges, la requête affinée peut devenir robe de soirée rouge. - Pour les interfaces conversationnelles (comme les chatbots) : il est fortement recommandé d'utiliser le
refined_search.query
fourni par l'API. Dans un flux conversationnel, les requêtes en langage naturel telles que "peux-tu m'aider à trouver des bananes" sont automatiquement optimisées par l'API en un terme de recherche de produit précis ("bananes"), ce qui permet d'obtenir des résultats de produits plus pertinents. - Pour les expériences de recherche principales (comme la page de résultats de recherche) : vous pouvez utiliser le
refined_search.query
de l'API ou la requête d'origine fournie par l'utilisateur final, car il est plus probable que la requête d'origine soit déjà un terme de recherche de produit précis. Choisissez l'option qui correspond le mieux à votre stratégie d'affichage de l'UI et des résultats de recherche. - Options d'expérience utilisateur : la conversation n'a pas besoin de se terminer pour les requêtes
SIMPLE_PRODUCT_SEARCH
. Votre utilisateur peut poursuivre la conversation en transmettant leconversation_id
dans les requêtes suivantes. - Option A : Mettre fin à l'UI conversationnelle : de nombreux marchands choisissent de rediriger l'utilisateur vers une page de résultats de recherche standard lorsqu'un
SIMPLE_PRODUCT_SEARCH
est détecté, ce qui ferme la fenêtre de chat. Dans ce scénario, si l'utilisateur final saisit une nouvelle requête dans le champ de recherche standard sans leconversation_id
précédent, elle est traitée comme une nouvelle conversation distincte et un nouveauconversation_id
est émis. - Option B : Continuer l'interface utilisateur conversationnelle : les marchands peuvent choisir de laisser la fenêtre de chat ouverte. Cela permet à votre utilisateur de revenir à un mode conversationnel. Le choix entre l'option A et l'option B dépend entièrement de l'expérience utilisateur préférée du marchand.
- Récupérer
conversation_id
: lorsque vous effectuez un appel d'APIconversationalSearch
, leConversationalSearchResponse.conversation_id
est renvoyé. - Taguer les événements utilisateur : lorsque la réponse conversationnelle conduit à une requête de recherche, par exemple si votre système exécute automatiquement une recherche basée sur la requête affinée pour
SIMPLE_PRODUCT_SEARCH
, vous devez taguer cet événement utilisateur de recherche ultérieur (UserEvent
) avec le mêmeconversation_id
reçu dansConversationalSearchResponse
.
Pour attribuer précisément les requêtes de recherche aux interactions conversationnelles et utiliser toutes les fonctionnalités d'analyse dans Vertex AI Search pour le commerce, il est essentiel de taguer correctement les événements :
En taguant correctement UserEvent.conversation_id
, vos données analytiques peuvent attribuer précisément les requêtes de recherche aux interactions conversationnelles précédentes. Vous obtenez ainsi des insights précieux sur le comportement de vos utilisateurs et les chemins de conversion.
Catégorie 4. Requêtes de recherche de réponses LLM
Pour ces types de requêtes, l'API génère une conversational_text_response
(réponse LLM) et peut également fournir une ou plusieurs requêtes refined_search
. La conversation ne se termine pas et l'utilisateur final peut la poursuivre.
PRODUCT_DETAILS
:- Action : l'
conversational_text_response
fournira les informations demandées sur le produit. Votre système doit afficher clairement ces informations à l'utilisateur. - La réponse inclura également
refined_search
(une ou plusieurs requêtes de recherche suggérées, classées et ordonnées) qui doivent être utilisées pour récupérer les résultats de recherche à l'aide de l'API Search principale. PRODUCT_COMPARISON
:- Action :
conversational_text_response
comparera les produits spécifiés. Votre système doit afficher clairement ces informations à l'utilisateur. - La réponse inclura
refined_search
(une ou plusieurs requêtes de recherche suggérées, classées et ordonnées) qui devraient être utilisées pour récupérer les résultats de recherche à l'aide de l'API Search principale. BEST_PRODUCT
:- Action : le
conversational_text_response
fournit des recommandations ou des informations sur les "meilleurs" produits en fonction de la requête. Votre système doit afficher ces informations. - La réponse inclut
refined_search
(une ou plusieurs requêtes de recherche suggérées, classées et ordonnées) qui doivent être utilisées pour récupérer les résultats de recherche à l'aide de l'API Search principale.
Catégorie 5. Affinement des intents
INTENT_REFINEMENT
:- Action : la réponse inclut
conversational_text_response
,followup_question
etrefined_search
(une ou plusieurs requêtes de recherche suggérées). L'ordre d'affichage recommandé est le suivant : conversational_text_response
- Suggestions
refined_search
: elles sont classées et ordonnées. Il est donc important de les afficher dans le même ordre que dans la réponse. Followup_question
- La réponse inclura
refined_search
(une ou plusieurs requêtes de recherche suggérées, classées et ordonnées) qui devraient être utilisées pour récupérer les résultats de recherche à l'aide de l'API Search principale. - Pour les interactions suivantes, envoyez la réponse de l'utilisateur avec le
conversation_id
.
Afficher les requêtes suggérées pour les produits
Voici comment configurer la recherche Google pour afficher des questions et des suggestions de produits dans l'agent de commerce conversationnel.
Lorsque l'API Conversational renvoie des requêtes refinedSearch
, celles-ci représentent d'excellentes opportunités pour orienter l'utilisateur final vers des produits pertinents. Cela est particulièrement utile pour la catégorie 4 (requêtes de recherche de réponses LLM) et la catégorie 5 (INTENT_REFINEMENT
).
Recommandation
- Affichage : présentez à l'utilisateur les
N
requêtes les plus pertinentes (entre 1 et 3, en fonction des tests sur le nombre idéal pour votre UI).refinedSearch
- Mécanisme : ces requêtes suggérées doivent être exécutées en arrière-plan ou lors d'une interaction utilisateur via l'API Search principale (
SearchService.Search
). - Présentation : affichez les résultats sous forme de carrousels interactifs ou de fiches cliquables, permettant à vos utilisateurs de parcourir des catégories de produits associées ou des articles spécifiques. Cela offre une valeur immédiate et permet de combler le fossé entre l'interaction conversationnelle et la découverte de produits.
Requête API Search :
Requête complémentaire
{ "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "query": "Decorations", "visitorId": "test" }
Événements à envoyer à Vertex AI Search pour le commerce
Il est important d'attribuer précisément les requêtes de recherche aux interactions conversationnelles et d'utiliser toutes les fonctionnalités d'analyse dans Vertex AI Search pour le commerce en utilisant le taggage d'événements approprié :
- Récupérer
conversation_id
: lorsque vous effectuez un appel d'APIconversationalSearch
, leConversationalSearchResponse.conversation_id
est renvoyé. - Taguer les événements utilisateur : lorsque la réponse conversationnelle génère une requête de recherche (par exemple, en affichant une suggestion
refined_search
sur laquelle l'utilisateur final clique) ou si votre système exécute automatiquement une recherche en fonction de la requête affinée, vous devez taguer cet événement utilisateur de recherche ultérieur (UserEvent
) avec le mêmeconversation_id
reçu dansConversationalSearchResponse
.
En taguant correctement UserEvent.conversation_id
, vos données analytiques peuvent attribuer précisément les requêtes de recherche aux interactions conversationnelles précédentes. Vous obtenez ainsi des insights précieux sur le comportement des utilisateurs et les chemins de conversion.
Continuez la conversation
Cette section explique comment les sessions d'agent de commerce conversationnel sont gérées par l'API Conversational et se poursuivent dans cette dernière étape.
L'API Conversational utilise un conversation_id
pour gérer les conversations en cours. Pour assurer la cohérence entre les réponses du LLM et les résultats de recherche, les requêtes Conversational API
ultérieures doivent inclure SearchParams
qui reflètent la configuration des appels de l'API Search principale.
Gestion des sessions
- Démarrer une conversation :
- Description : pour démarrer une conversation, le client omet le
conversationId
de la requête API. - Quand démarrer une nouvelle conversation : un client peut vouloir démarrer une nouvelle conversation (et ainsi obtenir un nouvel
conversationId
dans la réponse de l'API) dans plusieurs scénarios d'expérience utilisateur courants :- Nouvel onglet ou nouvelle session : lorsqu'un client ouvre votre site dans un nouvel onglet de navigateur ou démarre une toute nouvelle session.
- Nouvelle requête d'origine : dans certaines conceptions UX, si un client saisit une nouvelle requête sans rapport, vous pouvez choisir de redémarrer le flux de conversation pour garantir le contexte le plus pertinent.
- Bouton "Redémarrer la conversation" : si votre UI fournit un bouton explicite "Démarrer une nouvelle discussion" ou "Réinitialiser la conversation", le fait de cliquer dessus déclenchera une nouvelle session de conversation.
- Intégration de l'API Conversationnel : la réponse de l'API inclura un nouveau
conversationId
qui sera utilisé pour les requêtes suivantes.
- Description : pour démarrer une conversation, le client omet le
- Continuer la conversation :
- Description :
Conversational API
renvoie unconversation_id
dans la réponse de l'API. Cet ID doit être envoyé dans les demandes de suivi pour poursuivre la même conversation. Cela permet de s'assurer que l'agent de commerce conversationnel répond aux requêtes de vos utilisateurs en fonction de l'historique des conversations de cette session, en couvrant l'query
, leconversational_text_response
et lefollowup_question
de l'utilisateur final. - Intégration de l'API conversationnelle : le client transmet le
conversation_id
de la réponse précédente dans leConversationalSearchRequest
.
- Description :
- Assurez-vous de la cohérence des résultats de recherche :
- Description : pour s'assurer que les réponses du LLM sont cohérentes avec les résultats de recherche affichés à l'utilisateur, le client doit utiliser
searchParams
dans la requêteConversational API
. Ces paramètres de recherche doivent avoir la même configuration (filtres, ordre de tri, etc.) que les appelsSearch API
effectués pour récupérer les résultats des produits. - Intégration de l'API conversationnelle : l'objet
searchParams
dansConversationalSearchRequest
doit être renseigné de la même manière queSearchRequest
utilisé pour la recherche de produits principale.
- Description : pour s'assurer que les réponses du LLM sont cohérentes avec les résultats de recherche affichés à l'utilisateur, le client doit utiliser
Envoyer une requête à Vertex AI Search pour le commerce
Vous pouvez récupérer le conversation_id
à partir du stockage de session. La requête doit inclure le nouveau query
du client, qui peut être une réponse à la question de la réponse précédente. La requête doit également inclure le refined_search.query
le plus récent de la réponse précédente si l'utilisateur final agit sur une requête affinée. Sinon, elle doit inclure une requête totalement nouvelle et sans rapport, ainsi que conversationId
. N'oubliez pas d'inclure des searchParams
cohérents.
- Scénario 1 : Barre de recherche unique et conversation persistante : si votre interface de recherche ne comporte qu'une seule barre de recherche principale ou une fenêtre de conversation persistante, vous ne réinitialiserez pas
conversationId
, même si l'utilisateur final saisit une nouvelle requête qui semble sans rapport. Le système utilisera l'historique des conversations existant (associé àconversationId
) pour fournir des réponses adaptées au contexte. - Scénario 2 : Fenêtre de conversation et fenêtre de requête distinctes : si votre interface de recherche comporte une fenêtre de chat conversationnel distincte et une barre de requête de recherche standard distincte (comme une zone de recherche à l'échelle du site), la saisie d'une nouvelle requête dans la barre de recherche standard peut signaler implicitement l'intention de lancer une nouvelle recherche sans rapport, ce qui peut entraîner la réinitialisation de
conversationId
pour cette action de recherche spécifique. Toutefois, dans la fenêtre de conversation dédiée, laconversationId
doit toujours être conservée pour assurer la continuité.
En fin de compte, la décision de réutiliser ou de réinitialiser le conversationId
est un choix de conception visant à optimiser l'expérience conversationnelle pour vos clients.
Méthode HTTP et point de terminaison (identiques à la requête initiale)
POST https://retail.googleapis.com/v2alpha/{placement=projects/*/locations/*/catalogs/*/placements/*}:conversationalSearch
Requête API conversationnelle :
Requête complémentaire
{ "query": "A birthday party", // New query continuing the conversation from the previous turn "placement": "projects/799252947591/locations/global/catalogs/default_catalog/placements/default_search", "branch": "projects/{project_id}/locations/{location_id}/catalogs/{catalog_id}/branches/default_branch", "visitorId": "test", // Or your actual visitor_id "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", // conversation_id from previous response "searchParams": { "filter": "categories:(\"Birthday Party Supplies\")" } }
Réponse de l'API conversationnelle :
Réponse complémentaire
{ "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", "userQueryTypes": ["INTENT_REFINEMENT"], "conversationalTextResponse": "Great! For a birthday party, you might be interested in specific themes or age-group appropriate items.", "followupQuestion": { "followupQuestion": "What's the age group or theme?" }, "refinedSearch": [ { "query": "Birthday party decorations" }, { "query": "Birthday party supplies" } ], "state": "SUCCEEDED" }
Exemples de cas où un utilisateur final continue de recevoir des questions :
- Question de l'utilisateur : Aide-moi à organiser une fête
- Réponse du système : Quel type de fête prévoyez-vous d'organiser ?
- Réponse de l'utilisateur : Une fête d'anniversaire
Que doivent faire les marchands avec la réponse ?
La façon d'afficher les champs est semblable à la réponse initiale, mais notez les modifications qui reflètent la poursuite de la conversation :
refined_search
: ce champ contient les requêtes mises à jour qui intègrent la dernière entrée de l'utilisateur final. Vous devez mettre à jour la console client pour la requête actuelle en conséquence (par exemple, en montrant que la requête visible par l'utilisateur est passée de "décorations" à "décorations pour une fête d'anniversaire" ou "articles pour une fête d'anniversaire"). Les requêtes refined_search peuvent être utilisées pour les appels à l'API Search principale (SearchService.Search
) ou peuvent également être affichées à l'utilisateur final sous forme de suggestions.conversational_text_response
: affiche la nouvelle réponse textuelle générée par l'IA et pertinente pour le dernier tour.followup_question
: si la conversation doit se poursuivre pour affiner davantage la réponse, un nouveaufollowup_question
sera fourni.
Événements à envoyer à Vertex AI Search pour le commerce
Le taggage des événements est important pour attribuer précisément les requêtes de recherche aux interactions conversationnelles et pour utiliser les fonctionnalités d'analyse de Vertex AI Search pour le commerce.
Le processus de taggage d'événements comporte deux étapes :
- Récupérer
conversation_id
: lorsque vous effectuez un appel d'APIconversationalSearch
, leConversationalSearchResponse.conversation_id
est renvoyé. - Taguer les événements utilisateur : dans les cas où la réponse conversationnelle conduit à une requête de recherche, par exemple en affichant une suggestion
refined_search
, ou si votre système exécute automatiquement une recherche en fonction de la requête affinée, vous devez taguer cet événement utilisateur de recherche ultérieur (UserEvent
) avec le mêmeconversation_id
reçu dans leConversationalSearchResponse
.
En taggant correctement UserEvent.conversation_id
, vos données analytiques peuvent attribuer avec précision les requêtes de recherche aux interactions conversationnelles précédentes. Vous obtenez ainsi des insights précieux sur le comportement des utilisateurs finaux et les chemins de conversion.
Autres points à prendre en compte et bonnes pratiques
Vous devez tenir compte d'autres considérations et bonnes pratiques lorsque vous implémentez l'interface de votre agent de commerce conversationnel :
- Cohérence des ID de visiteur : permet de s'assurer qu'un
visitor_id
unique est envoyé de manière cohérente avec chaque requête pour un utilisateur final donné. C'est essentiel pour une personnalisation et un entraînement de modèle précis. Dans l'idéal, cet identifiant doit rester cohérent pour un utilisateur final, quelle que soit la session et qu'il soit connecté ou déconnecté. - Gestion des branches : bien que
default_branch
soit courant, assurez-vous d'utiliser le bon ID de branche si votre catalogue de produits est structuré avec plusieurs branches. - Interaction avec l'API Search : pour
SIMPLE_PRODUCT_SEARCH
et tous les cas oùrefined_search
est fourni, n'oubliez pas d'effectuer un appel distinct à l'API Search principale (SearchService.Search
) en utilisant lequery
du champrefined_search
ou la requête d'origine pour obtenir les fiches produit réelles. L'API Conversationnelle se concentre principalement sur l'expérience conversationnelle et la compréhension de l'intention de l'utilisateur, plutôt que sur le renvoi direct de résultats de produits. - Conception de l'interface utilisateur : concevez votre UI de manière à présenter clairement les options
conversational_text_response
,followup_question
etrefined_search
de manière intuitive pour guider l'utilisateur.
Étapes suivantes
Pour obtenir d'autres ressources d'assistance, consultez les questions fréquentes sur les fonctionnalités conversationnelles.