实施对话分析
要将对话数据生成为XDM体验事件并确保这些对话体验事件最终在Adobe Experience Platform中作为数据集,请检测您的代理应用程序或服务以使用对话分析。
本文记录了所需的实施步骤。
- 您必须具有可用于收集数据的Experience Platform环境(组织和沙盒)。
- 必须为代理和对话字段组启用您的Adobe组织。
架构和数据集
为主要对话事件配置数据集:提示、响应、反馈。 提示、响应和反馈数据集必须使用对话事件字段组扩展XDM体验事件基本架构,并且可以选择包含代理信息字段组和其他其他字段组。
您可以为提示、响应和反馈定义单独的数据集,也可以将数据合并到数据集中。 例如,使用一个数据集进行提示和响应,使用另一个数据集进行反馈。 或者,为每种类型的对话事件使用单独的数据集,如工作方式中所述。
举例说明,请使用:
-
离散数据集实现。 为提示、响应和反馈事件分隔数据集。 如果符合以下条件,请遵循此实施方法:
- 希望减少客户端实施中的状态。
- 无论响应延迟或不存在,都发送提示数据。
-
合并的数据集实施。 例如,一个合并的提示和响应事件数据集和一个单独的反馈事件数据集。 如果符合以下条件,请遵循此实施方法:
- 希望减少调用,因为您的实施支持完成轮换。
- 在等待响应到达时,无需关注延迟。
数据集布局和将对话事件传递到这些数据集是两个不同的问题。 一旦数据可用,就发送每个会话事件,以确保会话标识符稳定并转换标识符。 稳定标识符使Conversation Blender服务能够跨数据集正确关联。
“对话事件”字段组
对话事件字段组是必填字段组,并使用conversation对象。
对话对象捕获以下项的数据:
对话
唯一的conversationID标识对话。 例如:conversationID = "conv-001"。 conversationID允许将所有相关的转化事件分组到相同的对话体验中。
架构还支持conversationName。 描述对话整体上下文的可读名称,如: France Geography Q&A。 对话名称是自动生成的,但您可以更新生成的名称。 对话名称也已填充到signals[].name。 Adobe使用与signals[].name = "title"信号相同的值填充conversationName。 您可以在填充的任何数据集中设置conversation.conversationName并覆盖Adobe提供的值。
翻转
轮次是对话中的一个交互周期。
turnID唯一的turnID标识转弯。 例如:
conversationID = "conv-001"turnID = "turn-001"
同一conversationID和turnID用于关联与该转向关联的提示、响应和反馈。 这种关联适用于单独交付或最终位于不同数据集的记录。 turnId在同一对话中只需是唯一的,但可在对话中重复使用。 例如,在与conversationID conv-001和conv-002的对话中,您可以同时将turn-001作为turnID。
提示
提示是提交给代理的输入。 在大多数客户情景中,此输入是用户的问题、请求、说明或消息。
提示使用以下表示形式: conversation.prompt
重要的提示字段包括:
prompt.sourceprompt.raw[]prompt.raw[].textprompt.raw[].purpose一个提示可以包含多个原始区段。 例如,用户输入文本并包含一个URL。
-
Prompt"What is the capital of France""https://example.com/france"
响应
响应是指代理或其他响应方返回的内容。
conversation.response唯一的responseID表示响应。
重要的响应字段包括:
response.sourceresponse.raw[]response.raw[].textresponse.raw[].purpose记录的源类型包括:
botcannedconciergeend-user反馈
反馈是用户对交互的明确评估或反应。
反馈结构包括: conversation.feedback。
示例:
feedback.raw[].text: "Great help"feedback.rating.score:1feedback.rating.classification:"Thumbs Up"feedback.rating.reasons[]: ["Accurate", "Quick response"]
记录的评分范围是-1.0到1.0。
可以使用以下项将反馈事件表示为仅反馈事件: eventType = "conversation.feedback"。
当反馈应用于特定回合时,请保留相应的conversationID和turnID,以便对话搅拌器能够将反馈与相关交互相关联。
信号
信号是对会话内容的结构化分析观察。 信号提取服务提供开箱即用的信号。 提供信号无需任何操作,但您可以将信号添加为集成的一部分。
信号包含以下字段。
scopenametypevalues[]stringValuenumberValuebooleanValueconfidencequalifiers[]metadata[]信号提取服务填充信号数据集的signals对象。
已弃用以前的signals[].attributes.{subjects,intents,tones,sentiment}容器。
Source类型
您需要为事件中的每个prompt、response或feedback对象设置source的值。 可接受任何值。 使用有助于您了解数据源自何处的值。 例如:
end-useragentbotcanned-promptconcierge用途类型(原始文本)
您需要在prompt、response或feedback对象中raw对象的任何元素上设置purpose属性的值。 可接受任何字符串值。 此字段用于区分原始文本中存储的内容。 有用的值如下所示,其他值同样有效:
free-form-textscreenshotattachmentlinkurlimage-linkcitationmedia对话
有关对话对象的完整详细信息,请参阅下文。
| 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 | |||
|---|---|---|---|
| 字段路径(点表示法) | 类型 | 示例值 | 注释 |
conversationID |
字符串 | "conv-001" |
将多个组组合在一起。 |
conversationName |
字符串 | "France Geography Q&A" |
新建。 为对话提供的名称,该名称表示对话的整体上下文。 |
turnID |
字符串 | "turn-001" |
此回合的唯一ID。 |
prompt.source |
字符串 | "end-user" |
Source提示,其他选项可能包括缓存值、固定值等。 |
prompt.raw[] |
数组 | 请参阅下面的原始对象 | 原始提示数据。 |
prompt.raw[].text |
字符串 | "What is the capital of France?" |
实际文本内容。 |
prompt.raw[].purpose |
字符串 | "User Input" |
此文本段的用途。 |
response.source |
字符串 | "bot" |
Source回应。 |
response.raw[] |
数组 | 请参阅下面的原始对象 | 原始响应数据。 |
response.raw[].text |
字符串 | "The capital of France is Paris." |
响应文本内容。 |
response.raw[].purpose |
字符串 | "main" |
响应区段的用途,其他选项可能包括链接、图片等。 |
feedback.source |
字符串 | "end-user" |
Source提供反馈。 |
feedback.raw[] |
数组 | 请参阅下面的原始对象 | 原始反馈数据。 |
feedback.raw[].text |
字符串 | "Great help" |
反馈文本。 |
feedback.raw[].purpose |
字符串 | "free-form text" |
对于反馈区段,其他选项可能包括屏幕截图、媒体等。 |
feedback.rating.score |
数字 | 1 |
数字评分从-1.0到1.0。 |
feedback.rating.classification |
字符串 | "Thumbs Up" |
评级分类。 |
feedback.rating.reasons[] |
数组 | ["Accurate", "Quick response"] |
评级原因数组。 |
signals[] |
数组 | 请参阅下面的信号对象 | 基于此事件和迄今为止的对话派生的信号。 每个条目都是一个具有自己作用域的命名信号。 |
signals[].scope |
字符串 | "turn" |
从中派生这组信号的输入范围(轮换、会话至今、最后N个轮换、反馈)。 |
signals[].attributes |
对象 | 请参阅以下属性 | 已弃用。 信号属性的容器。 每个属性都是一个对象,其中包含一个或多个值。 这是为了满足支持用于生成信号的ML/代理信息量的预期需要。 |
signals[].attributes.subjects |
对象 | 请参阅以下主题 | 已弃用。 主题容器。 |
signals[].attributes.subjects.values[] |
数组 | 请参阅下面的主题值 | 已弃用。 主题值数组。 |
signals[].attributes.subjects.values[].phrase |
字符串 | "product pricing" |
已弃用。 从范围输入中提取的短语或关键字。 |
signals[].attributes.subjects.values[].qualifiers[] |
数组 | ["important", "urgent"] |
已弃用。 短语的限定符列表 |
signals[].attributes.intents |
对象 | 查看以下意图 | 已弃用。 意图容器。 |
signals[].attributes.intents.values[] |
数组 | ["make a purchase", "learn more"] |
已弃用。 从范围输入派生的意图。 |
signals[].attributes.tones |
对象 | 查看下面的色调 | 已弃用。 色调容器。 |
signals[].attributes.tones.values[] |
数组 | ["thrilled", "contemplative"] |
已弃用。 从范围输入派生的色调。 |
signals[].attributes.sentiment |
对象 | 请参阅下面的情绪 | 已弃用。 情绪的容器。 |
signals[].attributes.sentiment.value |
数字 | 0.71 |
已弃用。 得分从-1(负)到1(正)表示情绪。 |
signals[].name |
字符串 | "sentiment" |
新(替换已弃用的attributes容器)。 此信号的标识符,例如“主体”、“意图”、“色调”、“情绪”或任何生产商定义的名称。 制作者无需更改架构即可添加新信号类型。 |
signals[].type |
字符串 | "number" |
新建。 此信号值(string、number或boolean)的数据类型。 告知使用者在values[]的每个条目上填充了哪个类型的值字段。 |
signals[].values[] |
数组 | 请参阅下面的值对象 | 此信号的一个或多个值。 |
signals[].values[].stringValue |
字符串 | "curious" |
当type为字符串时填充。 类别值,例如意图、音调或提取的短语/ |
signals[].values[].numberValue |
数字 | 0.71 |
当type为数字时填充。 例如,从-1到1的情绪分数,或强度/ |
signals[].values[].booleanValue |
布尔值 | true |
当type为布尔值时填充。 true / false标志 |
signals[].values[].confidence |
数字 | 0.9 |
新建。 生产者分配给此值的置信度,从0到1。 |
signals[].values[].qualifiers[] |
数组 | ["important", "urgent"] |
此值的其他描述符,与关键字类似,但更有意义/ |
signals[].values[].metadata[] |
数组 | 请参阅下面的参数 | 新建。 Producer为此值定义的元数据作为键/值对,例如有关生成信号/的ML/代理的上下文 |
代理信息字段组
代理信息字段组是可选字段组,它使用agenticExperience对象。 如果要跟踪代理信息,请考虑使用此字段组。
| 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 | |||
|---|---|---|---|
| 字段路径(点表示法) | 类型 | 示例值 | 注释 |
conciergeID |
字符串 | "concierge-abc123" |
新建。 调度器的唯一标识符 |
name |
字符串 | "Brand Concierge" |
将一组代理组合起来的调度器的名称 |
version |
字符串 | "1.0.0" |
将一组代理组合起来的调度器的版本 |
environment |
字符串 | "prod" |
环境此事件源自(开发、暂存、生产) |
mode |
字符串 | "release" |
代理所处的模式(测试、预览、发布) |
agents[] |
数组 | 请参阅下面的代理对象 | 使用的代理数组 |
agents[].agentID |
字符串 | "agent-001" |
新建。 下面的skills[].agentID所引用的代理的唯一标识符 |
agents[].name |
字符串 | "Chatbot Assistant" |
代理名称 |
agents[].version |
字符串 | "2.1.3" |
代理版本 |
agents[].score |
数字 | 0.92 |
在其返回值中的代理置信度分数 |
agents[].skills[] |
数组 | 查看下面的技能对象 | 已弃用。 请改用下面的顶级skills[]数组,该数组拥有技能调用的完整排序列表,并通过agentID将每个调用链接到其代理 |
agents[].skills[].name |
字符串 | "Intent Recognition" |
技能名称(已弃用的数组) |
agents[].skills[].version |
字符串 | "1.0.0" |
技能版本(已弃用的数组) |
agents[].skills[].score |
数字 | 0.95 |
技能置信度分数(0-1)(已弃用的数组) |
agents[].skills[].parameters[] |
数组 | 请参阅下面的参数 | 发送到技能的参数(键值对)(已弃用的数组) |
agents[].skills[].parameters[].key |
字符串 | "language" |
参数键 |
agents[].skills[].parameters[].value |
字符串 | "en-US" |
参数值 |
skills[] |
数组 | 请参阅下面的技能调用对象 | 新,实验性。 所有座席对此体验进行完整、有序的技能调用的列表。 替换已弃用的每个代理agents[].skills[]数组 |
skills[].skillID |
字符串 | "skill-intent-recognition" |
调用的技能定义的标识符 |
skills[].skillInvocationID |
字符串 | "inv-9f2a-001" |
此技能调用的唯一标识符,即使与重新投放一致。 在合并下游技能阵列时,重复数据消除是关键 |
skills[].name |
字符串 | "Intent Recognition" |
调用的技能的名称 |
skills[].version |
字符串 | "1.0.0" |
所调用技能的版本 |
skills[].agentID |
字符串 | "agent-001" |
调用此技能的代理的标识符,与agents[].agentID相关。 由于子代理并行运行,分组关键使用者用于在代理内排序技能 |
skills[].invocationSource |
字符串 | "main" |
由主代理循环(main)或子代理(subagent)调用 |
skills[].score |
数字 | 0.95 |
匹配技能所得的分数 |
skills[].failed |
布尔值 | false |
表示技能执行失败的标记 |
skills[].errorReason |
字符串 | "timeout" |
在failed为true时技能失败的原因 |
skills[].sequenceNumber |
整数 | 1 |
在单个代理执行中单调增加此技能调用的索引。 此索引不是全局索引,因为子代理并行运行。 使用者按agentID、sequenceNumber、timestamp进行分页排序。 可选 |
skills[].timestamp |
字符串(日期时间) | "2026-09-11T00:03:15Z" |
启用该技能的时间,ISO 8601 UTC。 在sequenceNumber之后使用的排序键。 生成者应始终填充此内容 |
skills[].skillSource |
字符串 | "inline" |
如何将技能定义传递到运行时: inline (内联加载到上下文中)或deferred (按需加载) |
skills[].executionContext |
字符串 | "inline" |
执行与呼叫代理相关的技能的位置: inline或forked(在分支的子代理上下文中运行) |
skills[].reasoning.narration |
字符串 | "Recognized an intent to verify a geography fact" |
为什么调用此技能的自然语言解释 |
skills[].parameters[] |
数组 | 请参阅下面的参数 | 传递到技能的参数 |
skills[].parameters[].key |
字符串 | "language" |
参数键 |
skills[].parameters[].value |
字符串 | "en-US" |
参数值 |
要实施使用数据传播代理信息字段组的事件,您应确保:
-
代理配置
- 每个代理都有一个唯一的agentID、名称和版本组合。
- 代理得分在
0.0和1.0之间标准化。 - 使用
agentID按技能调用引用座席。
-
技能调用
- 在所有座席中,每个技能呼叫仅发出一个条目,而不是在每个座席下嵌套技能。
- 填充skillInvocationID,以便下游混合可以删除重复的重投放事件。
- 正确订购消费者。 按
agentID分组,然后按sequenceNumber排序,回退到timestamp。 需要排序,因为子代理可以并行执行 - 使用
invocationSource和executionContext区分主代理和子代理技能,以及内联与分支执行。 - 避免使用已弃用的
agents[].skills[]数组。 如果您以前使用过该数组,请将该数组视为只读对象。
-
技能参数
- 参数使用Adobe XDM键值数据类型,并将常用参数类型用于语言设置、阈值、模型配置。 例如:
"key":"language", "value":"en-US"。
- 参数使用Adobe XDM键值数据类型,并将常用参数类型用于语言设置、阈值、模型配置。 例如:
| code language-json |
|---|
|
其他字段组
您可以将可选字段组添加到用于提示、响应和反馈数据集的架构中。 例如:
- Web详细信息字段组。 用于捕获对话嵌入到的网页的详细信息。
- Commerce详细信息字段组。 用于捕获对话中提到的推荐产品的产品详细信息。
客户负责制作源对话事件。 Adobe执行信号提取和数据混合。 客户不需要执行信号提取或混合服务。
事件类型
您需要为每个对话事件设置eventType (字符串)的以下值之一:
conversation.turnconversation.recommendationconversation.feedback示例
请参阅下面的示例,了解在各种场景中Conversation Event字段组的用法。
| tabs | |||
|---|---|---|---|
| 转换事件示例 |
|
||
| 响应事件示例 |
|
||
| 反馈事件示例 |
|
||
| 产品推荐事件示例 |
|
数据收集
为对话分析使用以下数据收集策略。
事件类型
您的代理应用程序或服务会尽快发送事件。 确保应用程序或服务在发送带有事件时可用信息的提示之前不会等待响应。
这项建议意味着:
- 提示、响应和反馈对象是独立填充的,不应强制它们成为单个事件的一部分。
- 数据集间应存在多个具有相同
conversationID和turnID的事件。
事件关联
代理应用程序或服务必须在所有相关事件中保留稳定的标识符。
conversation.conversationIDconversation.turnID_idtimestampeventType-
同一
conversationID必须用于属于同一对话的所有事件。 -
同一
turnID必须用于提示、响应以及与同一转向关联的任何反馈。 提示、响应和反馈数据集中可以存在多个具有相同turnID的事件。
代理应用程序或服务会生成ID,这些ID在重试或重新交付期间保持稳定。 这允许下游处理正确关联事件并避免意外重复事件。
信号提取
信号提取发生在数据收集之后。 您的代理应用程序或服务可以填充其他信号。
信号名称
您需要为signals[].name设置一个值。 任何字符串值都是可接受的;但是,Adobe在信号提取过程中会填充以下名称。 请避免将这些name值用于您发送的任何信号,因为这些值将被覆盖。
intentssentimenttonestopicskeywordstitle
信号范围
任何字符串值都可以接受;但是,Adobe在信号提取过程中会填充以下范围。 请避免将这些scope值用于您发送的任何信号,因为这些值将被覆盖。
turnfeedback
| code language-json |
|---|
|
数据混合
对话混合器服务将来自提示、响应、反馈和信号事件数据集的事件合并到专用的混合对话事件数据集中。 该数据集在Customer Journey Analytics中用作连接的一部分。 该数据集中的组件将添加到您为对话分析配置指定的数据视图。