您可以将多个 Dialogflow 代理(称为“分代理”)合并为一个代理,称为“超级代理”。当您针对超级代理执行检测意图请求时,系统会考虑所有分代理,并返回分代理的最佳响应。
由于以下各种原因,您可能需要使用超级代理:
- 治理更好:如果您有多个小组来构建代理,则每个小组可以负责一个分代理,从而简化跨小组的更改冲突。
- 意图较多:如果您的代理具有的意图数量较多,那您可能已接近意图数量数限制。在这种情况下,您可以创建多个分代理,并将其合并为一个超级代理。
限制
超级代理存在以下局限性:
- 超级代理及其分代理必须在同一区域中创建。
- 在一个区域内,超级代理及其分代理都与不同的 Google Cloud 项目相关联。
- 一个大型代理最多可包含 10 个分代理。
- 小型对话不适用于超级代理。
- 在向超级代理发送请求时,子代理意图优先级不会影响意图匹配。
- Google 助理集成服务不能与超级代理搭配使用。
- 不支持合作伙伴内置的电话集成(AudioCodes、Avaya、SignalWire、Voximplant)。
- 超级代理不支持将后备意图用作跟进 intent。
创建分代理
您可以像创建其他代理一样创建分代理。 根据需要添加任何意图,上下文,实体等,用于构建您的代理。
创建或更新超级代理
您可以使用 Dialogflow 控制台创建超级代理并将其关联到分代理。
Dialogflow 会将超级代理的大多数代理设置纳入考虑范围,并将数据记录到超级代理中。例如:
- Dialogflow 采用超级代理提供的代理范围日志记录、情感、语音转文字和文字转语音设置。
- Dialogflow 在超级代理中存储分析、对话历史记录和训练工具的数据。
网页界面
1.创建超级代理
- 前往 Dialogflow ES 控制台。
- 点击左侧边栏菜单中的创建代理 (Create Agent)。如果您已有其他代理,请点击代理名称,滚动到底部,然后点击创建新代理 (Create new agent)。
- 输入代理的名称、默认语言、默认时区和 Google Cloud 项目。
- 将代理类型设置为超级代理。
- 点击创建按钮。
2.添加和管理分代理
- 在左侧边栏菜单中点击分代理。
- 选择您要添加到超级代理的分代理。
- 分代理环境默认为草稿,但您可以根据需要进行更新。
- 如果您想使用与分代理关联的知识库,将字段从已排除更改为包含。
- 点击保存。
设置角色
根据您计划使用超级代理的方式,您需要在分代理项目中授予特定的角色,使超级代理有权调用分代理。如要设置这些角色,请执行以下操作:
- 像往常一样创建超级代理和分代理 Google Cloud 项目,并确保为每个项目启用“Dialogflow API”。
- 如果您计划使用 API 与超级代理进行交互,则必须向用于超级代理 API 调用的服务账号授予每个分代理项目的角色,并且该角色应具有发出检测意图调用的权限。以下角色将提供此访问权限:Project Owner、Project Editor、Dialogflow API Admin 或 Dialogflow API Client。如要获取此服务账号的电子邮件地址,请执行以下操作:
- 访问 IAM 服务账号页面。
- 为您的超级代理选择项目。
- 选择您已为 API 调用创建的服务账号,或者添加具有所需角色的新服务账号。按照设置说明创建新的服务账号并下载私钥。
- 记录所选服务账号的电子邮件地址。 您下面会需要此内容。
如果您计划为超级代理使用任何集成,则为超级代理的项目自动创建的 service-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com 服务账号必须具有该项目的角色,该角色应包含发出检测意图调用的权限。以下角色将提供此访问权限:Project Owner、Project Editor、Dialogflow API Admin 或 Dialogflow API Client。如要获取此服务账号的电子邮件地址,请执行以下操作:
- 访问 IAM 主页。
- 为您的超级代理选择项目。
- 启用右侧的包括 Google 提供的角色授予选项。
- 找到符合该格式的服务账号:
service-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com。 - 记录所选服务账号的电子邮件地址。 您下面会需要此内容。
对于每个分代理项目,请向您之前收集的超级代理服务账号授予角色:
检测意图
如需检测意图,请像调用其他检测意图请求一样调用该请求,并使用超级代理项目 ID。Dialogflow 将考虑所有分代理,并返回分代理的最佳响应。
例如,请考虑以下分代理:
分代理 | 意图 | 训练短语 |
---|---|---|
订单 | 图书 | “我想买一本书” “将书添加到我的购物车” |
帽子 | “我想买一顶帽子” “我想要一顶帽子” |
|
账号 | 余额 | “我的余额是多少?” “我的账号里还剩多少钱?” |
地址 | “我想更改我的地址” “我有了新地址” |
如果最终用户说“我想买一顶帽子”,发送给超级代理的检测意图请求将匹配 Orders
代理的 Hats
意图。
如要为检测意图请求指定一个或多个分代理,请设置 QueryParameters
的 subAgents
字段。例如,此请求的 REST JSON 如下所示:
{ "queryInput": { "text": { "text": "reserve a meeting room for six people", "languageCode": "en-US" } }, "queryParams": { "subAgents": [ {"project": "projects/sub-agent-1-project-id"}, {"project": "projects/sub-agent-2-project-id"} ] } }
调用事件
如要从 webhook 服务调用事件,您可以为要触发的意图指定分代理。事件名称使用以下格式:
sub-agent-project-id.event-name
例如,如果分代理项目 ID 为 123
且事件名称为所需意图的 alarm
,请使用 123.alarm
作为事件名称。
如果您没有为事件指定分代理,则会将事件发送回包含先前匹配意图的分代理。
设置输出上下文
如需从 webhook 服务设置输出上下文,您可以指定该上下文所属的分代理。请使用以下格式:
projects/mega_agent_project_id/agent/sessions/session_id/contexts/sub_agent_project_id.context_name
例如,如果会话为 projects/mega_agent_project_id/agent/sessions/session_id
,并且您要为项目 ID 为 sub_project_1
的分代理设置名为 music_context
的上下文,则可以使用以下名称设置输出上下文:
projects/mega_agent_project_id/agent/sessions/session_id/contexts/sub_project_1.music_context
如果没有为上下文名称指定分代理前缀,那系统会将其视为超级代理的上下文。
上下文生命周期
上下文变为活跃状态后,上下文生命周期通常会决定在上下文变为非活跃状态之前会发生多少对话回合。从本质上讲,活跃上下文的运行时生命周期会在其变为活跃状态后,每轮对话减少一次。
超级代理的行为可能会有所不同。 在对话期间,系统可能会针对每轮对话匹配来自不同子代理的意图。当子代理中的某个意图匹配时,如果该意图具有输出上下文,则只有在同一子代理中进一步匹配意图时,此上下文的有效期才会递减。
例如,在子代理 A 中发生意图匹配,并且该意图具有会激活上下文的输出上下文。子代理 B 中的任何意图匹配都不会递减在子代理 A 中发起的活跃上下文的运行时生命周期。
版本和环境
通过超级代理级别版本和环境,您可以创建超级代理的后备意图的不同快照,并为不同的超级代理环境设置不同的网络钩子和文字转语音设置。
超级代理的分代理控制台页面上的设置不会包含在超级代理的版本和环境中。超级代理请求始终会触发当时在该页面上指定的分代理环境。