Implémenter des informations de conversation
Pour produire des données de conversation sous la forme d’événements d’expérience XDM et vous assurer que ces événements d’expérience de conversation aboutissent dans Adobe Experience Platform sous la forme de jeux de données, instrumentez votre application d’agent ou service pour utiliser des informations de conversation.
Cet article décrit les étapes de mise en œuvre requises.
- Vous devez disposer d’un environnement Experience Platform (organisation et sandbox) pour collecter les données.
- Votre organisation Adobe doit être activée pour les groupes de champs agent et conversation.
Schéma et jeux de données
Configurez des jeux de données pour les principaux événements de conversation : invite, réponse, retour d’informations. Les jeux de données d’invite, de réponse et de commentaires doivent étendre le schéma de base d’événement d’expérience XDM avec le groupe de champs Événement de conversation et peuvent éventuellement inclure le groupe de champs Informations agences et d’autres groupes de champs supplémentaires.
Vous pouvez définir des jeux de données distincts pour les invites, les réponses et les commentaires ou combiner les données dans des jeux de données. Par exemple, utilisez un jeu de données pour les invites et les réponses et un autre pour les commentaires. Vous pouvez également utiliser un jeu de données distinct pour chaque type d’événement de conversation, comme illustré dans la section Fonctionnement.
À titre d’illustration, utilisez :
-
Implémentation de jeux de données distincts. Jeux de données distincts pour les événements d’invite, de réponse et de commentaires. Suivez cette approche de mise en œuvre si vous :
- Vous souhaitez conserver un statut inférieur sur votre implémentation client.
- Envoyez des données d’invite indépendamment d’une réponse différée ou inexistante.
-
Implémentation combinée de jeux de données. Par exemple, un jeu de données d’événements d’invite et de réponse combiné et un jeu de données d’événements de commentaires distinct. Suivez cette approche de mise en œuvre si vous :
- Vous souhaitez réduire les appels car votre implémentation prend en charge les tours complets.
- Ne vous souciez pas de la latence lorsque vous attendez que les réponses arrivent.
La disposition des jeux de données et la diffusion des événements de conversation dans ces jeux de données sont des préoccupations distinctes. Envoyez chaque événement de conversation dès que les données sont disponibles afin de garantir la stabilité des identifiants de conversation et de tournage. Des identifiants stables facilitent une corrélation appropriée par le service Conversation Blender entre les jeux de données.
Groupe de champs Événement de conversation
Le groupe de champs Événement de conversation est un groupe de champs obligatoire qui utilise l’objet conversation.
L’objet de conversation capture les données pour :
Conversation
Un conversationID unique identifie une conversation. Par exemple : conversationID = "conv-001". Le conversationID permet de regrouper tous les événements de rotation associés dans la même expérience de conversation.
Le schéma prend également en charge conversationName. Nom lisible par l’utilisateur qui décrit le contexte global de la conversation, tel que : France Geography Q&A. Le nom de la conversation est généré automatiquement, mais vous pouvez le mettre à jour. Le nom de la conversation est également renseigné pour signals[].name. Adobe renseigne le conversationName avec la même valeur que le signal signals[].name = « title ». Vous pouvez définir la conversation.conversationName sur n’importe quel jeu de données que vous renseignez et remplacer la valeur fournie par Adobe.
Tourner
Un virage est un cycle d’interaction au sein d’une conversation.
turnID Un turnID unique identifie un virage. Par exemple :
conversationID = "conv-001"turnID = "turn-001"
Les mêmes conversationID et turnID sont utilisés pour corréler l’invite, la réponse et le retour d’informations associés à ce virage. Cette corrélation fonctionne entre les enregistrements diffusés séparément ou qui se retrouvent dans différents jeux de données. Un turnId ne doit être unique que dans la même conversation, mais peut être réutilisé dans plusieurs conversations. Par exemple, vous pouvez avoir les deux turn-001 comme turnID dans les conversations avec conversationID conv-001 et conv-002.
Invite
Une invite correspond à l’entrée envoyée à l’agent. Dans la plupart des scénarios client, cette entrée correspond à la question, à la requête, à l’instruction ou au message de l’utilisateur ou de l’utilisatrice.
L’invite utilise la représentation suivante : conversation.prompt
Les champs d’invite importants sont les suivants :
prompt.sourceprompt.raw[]prompt.raw[].textprompt.raw[].purposeUne invite peut contenir plusieurs segments bruts. Par exemple, un utilisateur ou une utilisatrice saisit du texte et inclut une URL.
-
Prompt"What is the capital of France""https://example.com/france"
Réponse
Une réponse correspond au contenu renvoyé par l’agent ou une autre partie répondant.
conversation.response Un responseID unique représente la réponse.
Les champs de réponse importants sont les suivants :
response.sourceresponse.raw[]response.raw[].textresponse.raw[].purposeLes types de sources documentés sont les suivants :
botcannedconciergeend-userCommentaires
Le retour d’informations est l’évaluation ou la réaction explicite de l’utilisateur ou de l’utilisatrice à l’interaction.
La structure de rétroaction comprend : conversation.feedback.
Exemples :
feedback.raw[].text: "Great help"feedback.rating.score:1feedback.rating.classification:"Thumbs Up"feedback.rating.reasons[]: ["Accurate", "Quick response"]
La plage de notes documentée va de -1.0 à 1.0.
Un événement de retour peut être représenté en tant qu’événement de retour uniquement à l’aide de : eventType = "conversation.feedback".
Lorsque la rétroaction s’applique à un virage particulier, conservez les conversationID et turnID appropriés afin que le mélangeur de conversation puisse associer la rétroaction à l’interaction pertinente.
Signal
Un signal est une observation analytique structurée du contenu de la conversation. Le service d’extraction de signal fournit des signaux prêts à l’emploi. Aucune action n’est requise pour fournir des signaux, mais vous pouvez ajouter des signaux dans le cadre de l’intégration.
Un signal possède les champs suivants.
scopenametypevalues[]stringValuenumberValuebooleanValueconfidencequalifiers[]metadata[]Le service d’extraction de signaux renseigne l’objet signals pour le jeu de données de signaux.
Le conteneur de signals[].attributes.{subjects,intents,tones,sentiment} précédent est obsolète.
Type de source
Vous devez définir une valeur pour source pour chaque objet prompt, response ou feedback dans un événement. Toute valeur est acceptable. Utilisez des valeurs qui vous aident à comprendre l’origine des données. Par exemple :
end-useragentbotcanned-promptconciergeType d’objectif (texte brut)
Vous devez définir une valeur pour l’attribut purpose sur tout élément de l’objet raw dans un objet prompt, response ou feedback. Toute valeur de chaîne est acceptable. Ce champ permet de différencier ce qui est stocké dans le texte brut. Les valeurs utiles sont les suivantes, d’autres valeurs sont également valides :
free-form-textscreenshotattachmentlinkurlimage-linkcitationmediaConversation
Consultez ci-dessous les détails complets d’un objet de conversation.
| table 0-row-4 1-row-4 2-row-4 3-row-4 4-row-4 5-row-4 6-row-4 7-row-4 8-row-4 9-row-4 10-row-4 11-row-4 12-row-4 13-row-4 14-row-4 15-row-4 16-row-4 17-row-4 18-row-4 19-row-4 20-row-4 21-row-4 22-row-4 23-row-4 24-row-4 25-row-4 26-row-4 27-row-4 28-row-4 29-row-4 30-row-4 31-row-4 32-row-4 33-row-4 34-row-4 35-row-4 36-row-4 37-row-4 38-row-4 39-row-4 40-row-4 | |||
|---|---|---|---|
| Chemin Du Champ (Notation Par Points) | Type | Exemple de valeur | Notes |
conversationID |
string | "conv-001" |
Regroupe plusieurs tours ensemble. |
conversationName |
string | "France Geography Q&A" |
Nouveau. Nom donné à une conversation représentant son contexte global. |
turnID |
string | "turn-001" |
ID unique pour ce tour. |
prompt.source |
string | "end-user" |
Source de l’invite, d’autres options peuvent inclure une valeur mise en cache, une valeur en conserve, etc. |
prompt.raw[] |
tableau | Voir objet brut ci-dessous | Données d’invite brutes. |
prompt.raw[].text |
string | "What is the capital of France?" |
Contenu textuel réel. |
prompt.raw[].purpose |
string | "User Input" |
Objectif de ce segment de texte. |
response.source |
string | "bot" |
Source de la réponse. |
response.raw[] |
tableau | Voir objet brut ci-dessous | Données brutes de réponse. |
response.raw[].text |
string | "The capital of France is Paris." |
Contenu du texte de réponse. |
response.raw[].purpose |
string | "main" |
Objectif du segment de réponse. Les autres options peuvent inclure des liens, des images, etc. |
feedback.source |
string | "end-user" |
Source de commentaires. |
feedback.raw[] |
tableau | Voir objet brut ci-dessous | Données brutes des commentaires . |
feedback.raw[].text |
string | "Great help" |
Texte du retour d’informations. |
feedback.raw[].purpose |
string | "free-form text" |
Objectif du segment de commentaires. Les autres options peuvent inclure des captures d’écran, des médias, etc. |
feedback.rating.score |
number | 1 |
Score numérique de -1.0 à 1.0. |
feedback.rating.classification |
string | "Thumbs Up" |
Classification de l’évaluation. |
feedback.rating.reasons[] |
tableau | ["Accurate", "Quick response"] |
Tableau des raisons de l’évaluation. |
signals[] |
tableau | Voir l’objet de signal ci-dessous | Signaux dérivés basés sur cet événement et la conversation à ce jour. Chaque entrée est un signal nommé unique avec sa propre portée. |
signals[].scope |
string | "turn" |
Portée des entrées à partir desquelles cet ensemble de signaux est dérivé (tour, conversation à ce jour, n derniers tours, retour). |
signals[].attributes |
objet | Voir les attributs ci-dessous | Obsolète. Conteneur pour les attributs de signal. Chaque attribut est un objet contenant une ou plusieurs valeurs. Cela permet de répondre au besoin anticipé de prendre en charge la population d’informations ML/agent utilisées pour générer le signal. |
signals[].attributes.subjects |
objet | Voir les sujets ci-dessous | Obsolète. Conteneur d’objets. |
signals[].attributes.subjects.values[] |
tableau | Voir les valeurs de l’objet ci-dessous | Obsolète. Tableau de valeurs d’objet. |
signals[].attributes.subjects.values[].phrase |
string | "product pricing" |
Obsolète. Expression ou mot-clé extrait de l’entrée étendue. |
signals[].attributes.subjects.values[].qualifiers[] |
tableau | ["important", "urgent"] |
Obsolète. Liste des qualificateurs de l’expression |
signals[].attributes.intents |
objet | Voir les intentions ci-dessous | Obsolète. Conteneur d’intentions. |
signals[].attributes.intents.values[] |
tableau | ["make a purchase", "learn more"] |
Obsolète. Intentions dérivées de l’entrée étendue. |
signals[].attributes.tones |
objet | Voir les tons ci-dessous | Obsolète. Conteneur de tons. |
signals[].attributes.tones.values[] |
tableau | ["thrilled", "contemplative"] |
Obsolète. Tons dérivés de l’entrée étendue. |
signals[].attributes.sentiment |
objet | Voir le sentiment ci-dessous | Obsolète. Conteneur de sentiment. |
signals[].attributes.sentiment.value |
number | 0.71 |
Obsolète. Score de -1 (négatif) à 1 (positif) indiquant un sentiment. |
signals[].name |
string | "sentiment" |
Nouveau (remplace le conteneur attributes obsolète). Identifiant de ce signal, par exemple « sujets », « intentions », « tons », « sentiment » ou tout nom défini par le producteur. Les producteurs peuvent ajouter de nouveaux types de signaux sans modifier le schéma. |
signals[].type |
string | "number" |
Nouveau. Type de données des valeurs de ce signal (string, number ou boolean). Indique aux consommateurs quel champ de valeur saisi est renseigné sur chaque entrée de values[]. |
signals[].values[] |
tableau | Voir l’objet de valeurs ci-dessous | Une ou plusieurs valeurs pour ce signal. |
signals[].values[].stringValue |
string | "curious" |
Renseigné lorsque la type est une chaîne. Valeur catégorielle telle qu’une intention, un ton ou une expression/expression extraite(e) |
signals[].values[].numberValue |
number | 0.71 |
Renseigné lorsque le type est un nombre. Par exemple, un score de sentiment de -1 à 1, ou une intensité/ |
signals[].values[].booleanValue |
booléen | true |
Renseigné lorsque la type est booléenne. Un indicateur true/false |
signals[].values[].confidence |
number | 0.9 |
Nouveau. Confiance que le producteur attribue à cette valeur, de 0 à 1. |
signals[].values[].qualifiers[] |
tableau | ["important", "urgent"] |
Descripteurs supplémentaires pour cette valeur, similaires aux mots-clés, mais plus significatifs/ |
signals[].values[].metadata[] |
tableau | Voir les paramètres ci-dessous | Nouveau. Métadonnées définies par le producteur pour cette valeur sous la forme de paires clé/valeur, par exemple contexte à propos du ML/agent qui a généré le signal/ |
Groupe de champs Informations sur l’agence
Le groupe de champs Informations agentiques est un groupe de champs facultatif qui utilise l’objet agenticExperience. Utilisez ce groupe de champs si vous souhaitez effectuer le suivi des informations sur les agences.
| table 0-row-4 1-row-4 2-row-4 3-row-4 4-row-4 5-row-4 6-row-4 7-row-4 8-row-4 9-row-4 10-row-4 11-row-4 12-row-4 13-row-4 14-row-4 15-row-4 16-row-4 17-row-4 18-row-4 19-row-4 20-row-4 21-row-4 22-row-4 23-row-4 24-row-4 25-row-4 26-row-4 27-row-4 28-row-4 29-row-4 30-row-4 31-row-4 32-row-4 33-row-4 34-row-4 35-row-4 | |||
|---|---|---|---|
| Chemin Du Champ (Notation Par Points) | Type | Exemple de valeur | Notes |
conciergeID |
string | "concierge-abc123" |
Nouveau. Identifiant unique de concierge |
name |
string | "Brand Concierge" |
Nom de concierge combinant un ensemble d’agentes et d’agents |
version |
string | "1.0.0" |
Version de concierge combinant un ensemble d’agentes et d’agents |
environment |
string | "prod" |
Environnement d’origine de cet événement (développement, évaluation, production) |
mode |
string | "release" |
Mode dans lequel se trouve l’agent (test, aperçu, version finale) |
agents[] |
tableau | Voir l’objet agent ci-dessous | Tableau des agents utilisés |
agents[].agentID |
string | "agent-001" |
Nouveau. Identifiant unique de l’agent, référencé par le skills[].agentID ci-dessous |
agents[].name |
string | "Chatbot Assistant" |
Nom de l’agent |
agents[].version |
string | "2.1.3" |
Version de l’agent |
agents[].score |
number | 0.92 |
Score de confiance de l’agent dans ses valeurs renvoyées |
agents[].skills[] |
tableau | Voir objet de compétence ci-dessous | Obsolète. Utilisez plutôt le tableau de skills[] de niveau supérieur ci-dessous, qui possède la liste complète ordonnée des appels de compétences et lie chacun à son agent via agentID |
agents[].skills[].name |
string | "Intent Recognition" |
Nom de la compétence (tableau obsolète) |
agents[].skills[].version |
string | "1.0.0" |
Version de la compétence (tableau obsolète) |
agents[].skills[].score |
number | 0.95 |
Score de confiance des compétences (0-1) (tableau obsolète) |
agents[].skills[].parameters[] |
tableau | Voir les paramètres ci-dessous | Paramètres envoyés à la compétence (paires clé-valeur) (tableau obsolète) |
agents[].skills[].parameters[].key |
string | "language" |
Clé paramètre |
agents[].skills[].parameters[].value |
string | "en-US" |
Valeur du paramètre |
skills[] |
tableau | Voir l’objet d’appel de compétence ci-dessous | Nouveau, expérimental. Liste complète et ordonnée des appels de compétences pour cette expérience, pour tous les agents. Remplace le tableau de agents[].skills[] par agent obsolète |
skills[].skillID |
string | "skill-intent-recognition" |
Identifiant de la définition de compétence appelée |
skills[].skillInvocationID |
string | "inv-9f2a-001" |
Identifiant unique de cet appel de compétence individuel, cohérent même avec les rediffusions. Clé de déduplication lors de la fusion de tableaux de compétences en aval |
skills[].name |
string | "Intent Recognition" |
Nom de la compétence appelée |
skills[].version |
string | "1.0.0" |
Version de la compétence appelée |
skills[].agentID |
string | "agent-001" |
Identifiant de l’agent qui a invoqué cette compétence, en corrélation avec agents[].agentID. Regroupement des consommateurs clés utilisés pour classer les compétences au sein d’un agent, puisque les sous-agents s’exécutent en parallèle |
skills[].invocationSource |
string | "main" |
Appelée par la boucle agentic principale (main) ou par un sous-agent (subagent) |
skills[].score |
number | 0.95 |
Score résultant de la mise en correspondance de la compétence |
skills[].failed |
booléen | false |
Indicateur signalant l’échec de l’exécution de la compétence |
skills[].errorReason |
string | "timeout" |
Motif de l’échec de la compétence, lorsque failed est vrai |
skills[].sequenceNumber |
entier | 1 |
Augmentation monotone de l’index de cet appel de compétence dans une seule exécution d’agent. Cet index n’est pas global car les sous-agents s’exécutent en parallèle. Les consommateurs commandent par agentID, puis par sequenceNumber, puis timestamp comme brise-égalité. Facultatif |
skills[].timestamp |
chaîne (date-heure) | "2026-09-11T00:03:15Z" |
Heure à laquelle la compétence a été invoquée, ISO 8601 UTC. Clé de classement utilisée après sequenceNumber. Les producteurs doivent toujours remplir ce champ |
skills[].skillSource |
string | "inline" |
Comment la définition de compétence a été diffusée au moment de l’exécution : inline (chargée en ligne dans le contexte) ou deferred (chargée à la demande) |
skills[].executionContext |
string | "inline" |
Où la compétence s’exécute par rapport à l’agent appelant : inline ou forked (s’exécute dans un contexte de sous-agent dupliqué) |
skills[].reasoning.narration |
string | "Recognized an intent to verify a geography fact" |
Explication en langage naturel du nom de cette compétence |
skills[].parameters[] |
tableau | Voir les paramètres ci-dessous | Paramètres transmis à la compétence |
skills[].parameters[].key |
string | "language" |
Clé paramètre |
skills[].parameters[].value |
string | "en-US" |
Valeur du paramètre |
Pour implémenter des événements qui propagent le groupe de champs Informations sur l’agence avec des données, vous devez vérifier les points suivants :
-
Configuration de l’agent
- Chaque agent possède une combinaison unique d’agentID, de nom et de version.
- Les scores des agents sont normalisés entre
0.0et1.0. - Utilisez l’
agentIDpour référencer les agents par appel de compétence.
-
Appels de compétences
- Émettez une seule entrée par appel de compétence, sur tous les agents, au lieu d’imbriquer les compétences sous chaque agent.
- Renseignez skillInvocationID afin que la fusion en aval puisse supprimer les événements rediffusés en double.
- Commander correctement les consommateurs. Regroupez par
agentID, puis triez parsequenceNumber, en revenant àtimestamp. Un ordre est nécessaire, car les sous-agents peuvent s’exécuter en parallèle - Utilisez
invocationSourceetexecutionContextpour distinguer les compétences principales des compétences de sous-agent et l’exécution en ligne des exécutions dupliquées. - Évitez d’utiliser le tableau de
agents[].skills[]obsolète. Si vous avez utilisé le tableau dans le passé, traitez-le comme un objet en lecture seule.
-
Paramètres de compétence
- Les paramètres utilisent le type de données clé-valeur XDM d’Adobe ainsi que des types de paramètres courants pour les paramètres de langue, les seuils et les configurations de modèle. Par exemple :
"key":"language", "value":"en-US".
- Les paramètres utilisent le type de données clé-valeur XDM d’Adobe ainsi que des types de paramètres courants pour les paramètres de langue, les seuils et les configurations de modèle. Par exemple :
| code language-json |
|---|
|
Groupes de champs supplémentaires
Vous pouvez ajouter des groupes de champs facultatifs au schéma que vous utilisez pour les jeux de données d’invite, de réponse et de commentaires. Par exemple :
- Groupe de champs Détails web. Pour capturer les détails de la page web dans laquelle la conversation a été incorporée.
- Groupe de champs Détails du Commerce . Pour capturer les détails du produit recommandé mentionné dans le cadre de la conversation.
Le client est chargé de produire les événements de conversation source. Adobe effectue l’extraction du signal et le mélange des données. Le client n’a pas besoin de mettre en œuvre les services d’extraction ou de mélange de signaux.
Type d’événement
Vous devez définir l’une des valeurs suivantes pour eventType (chaîne) pour chaque événement de conversation :
conversation.turnconversation.recommendationconversation.feedbackExemple
Vous trouverez ci-dessous un exemple d’utilisation du groupe de champs Événement de conversation dans divers scénarios.
| tabs | |||
|---|---|---|---|
| Exemple d’événement de transformation |
|
||
| Exemple d’événement de réponse |
|
||
| Exemple d’événement de retour |
|
||
| Exemple d’événement de recommandations de produits |
|
Collecte de données
Utilisez la stratégie de collecte de données suivante pour Conversation Insights.
Types d’événements
Votre application ou service d’agent envoie un événement dès que possible. Assurez-vous que l’application ou le service n’attend pas de réponse avant d’envoyer l’invite avec les informations disponibles au moment de l’événement.
Cette recommandation implique que :
- Les objets d’invite, de réponse et de commentaires sont renseignés indépendamment et ne doivent pas être forcés à faire partie d’un seul événement.
- Plusieurs événements avec les mêmes
conversationIDetturnIDsont attendus dans les jeux de données.
Corrélation des événements
L’application ou le service de l’agent doit conserver des identifiants stables pour tous les événements associés.
conversation.conversationIDconversation.turnID_idtimestampeventType-
Le même
conversationIDdoit être utilisé pour tous les événements appartenant à la même conversation. -
Le même
turnIDdoit être utilisé pour l’invite, la réponse et tout retour associé au même tour. Plusieurs événements avec le mêmeturnIDpeuvent exister dans les jeux de données d’invite, de réponse et de commentaires.
L’application ou le service de l’agent génère des identifiants qui restent stables lors des reprises ou de la rediffusion. Cela permet au traitement en aval d’associer correctement les événements et d’éviter les événements en double involontaires.
Extraction de signal
L’extraction du signal a lieu après la collecte des données. Votre application ou service d’agent peut renseigner des signaux supplémentaires.
Nom du signal
Vous devez définir une valeur pour signals[].name. Toute valeur de chaîne est acceptable. Cependant, Adobe renseigne les noms suivants pendant le processus d’extraction du signal. Évitez d’utiliser ces valeurs pour name les signaux que vous envoyez, car elles risquent d’être remplacées.
intentssentimenttonestopicskeywordstitle
Portée du signal
Toute valeur de chaîne est acceptable. Cependant, Adobe remplit les portées suivantes pendant le processus d’extraction du signal. Évitez d’utiliser ces valeurs pour scope les signaux que vous envoyez, car elles risquent d’être remplacées.
turnfeedback
| code language-json |
|---|
|
Fusion de données
Le service de mélangeur de conversation fusionne les événements des jeux de données d’événements d’invite, de réponse, de retour et de signal en un jeu de données d’événements de conversation mixte dédié. Ce jeu de données est utilisé dans Customer Journey Analytics dans le cadre d’une connexion. Les composants de ce jeu de données sont ajoutés aux vues de données que vous avez spécifiées pour une configuration Insights de conversation.