超级代理

您可以将多个 Dialogflow 代理(称为“分代理”)合并为一个代理,称为“超级代理”。当您针对超级代理执行检测意图请求时,系统会考虑所有分代理,并返回分代理的最佳响应。

由于以下各种原因,您可能需要使用超级代理:

  • 治理更好:如果您有多个小组来构建代理,则每个小组可以负责一个分代理,从而简化跨小组的更改冲突。
  • 意图较多:如果您的代理具有的意图数量较多,那您可能已接近意图数量数限制。在这种情况下,您可以创建多个分代理,并将其合并为一个超级代理。

限制

超级代理存在以下局限性:

  • 与所有代理一样,您只能为每个 GCP 项目创建一个代理,因此每个分代理和超级代理都将与自己的 GCP 项目相关联。
  • 一个大型代理最多可包含 10 个分代理。
  • 小型对话不适用于超级代理。
  • 在向超级代理发送请求时,子代理意图优先级不会影响意图匹配。
  • 不支持合作伙伴内置的电话集成(AudioCodesAvayaGenesysSignalWireVoximplant)。

创建分代理

您可以像创建其他代理一样创建分代理。 根据需要添加任何意图,上下文,实体等,用于构建您的代理。

创建或更新超级代理

您可以使用 Dialogflow 控制台创建超级代理并将其关联到分代理。

Dialogflow 会将超级代理的大多数代理设置纳入考虑范围,并将数据记录到超级代理中。例如:

网页界面

1.创建超级代理

  1. 转到 Dialogflow ES 控制台
  2. 点击左侧边栏菜单中的创建代理 (Create Agent)。如果您已有其他代理,请点击代理名称,滚动到底部,然后点击创建新代理 (Create new agent)。
  3. 输入代理的名称、默认语言、默认时区和 GCP 项目。
  4. 代理类型设置为超级代理
  5. 点击创建按钮。

2.添加和管理分代理

  1. 在左侧边栏菜单中点击分代理
  2. 选择您要添加到超级代理的分代理。
  3. 分代理环境默认为草稿,但您可以根据需要进行更新。
  4. 如果您想使用与分代理关联的知识库,将字段从已排除更改为包含
  5. 点击保存

设置角色

根据您计划使用超级代理的方式,您需要在子代理项目中设置具有特定角色的成员,使超级代理有权调用子代理。 如要设置这些角色,请执行以下操作:

  1. 像往常一样创建超级代理和分代理 GCP 项目,并确保为每个项目启用“Dialogflow API”。
  2. 如果您计划使用 API与超级代理进行交互,则必须将用于超级代理 API 调用的服务帐号添加为每个子代理项目的成员,并且应用的角色应具有发出检测意图调用的权限。 以下角色将提供此访问权限:Project Owner、Project Editor、Dialogflow API Admin 或 Dialogflow API Client。如要获取此服务帐号的电子邮件地址,请执行以下操作:
    1. 访问 IAM 服务帐号页面
    2. 为您的超级代理选择项目。
    3. 选择您已为 API 调用创建的服务帐号,或者添加具有所需角色的新服务帐号。按照设置说明创建新的服务帐号并下载私钥。
    4. 记录所选服务帐号的电子邮件地址。 您下面会需要此内容。
  3. 如果您计划在 Dialogflow 模拟器中与超级代理进行交互,则自动创建的超级代理项目的 dialogflow-alphanum@project-id.iam.gserviceaccount.com 服务帐号需要是所有子代理项目的成员,并且所应用的角色应该具有检测意图调用的权限。以下角色将提供此访问权限:Project Owner、Project Editor、Dialogflow API Admin 或 Dialogflow API Client。如要获取此服务帐号的电子邮件地址,请执行以下操作:
    1. 访问 Dialogflow ES 控制台
    2. 选择您的超级代理。
    3. 点击代理名称旁边的设置 按钮。
    4. 请参阅常规标签页上的服务帐号。 记录服务帐号的电子邮件地址。 您下面会需要此内容。
  4. 如果您计划为超级代理使用任何集成服务,请自动创建的超级代理的项目的 service-project-num@gcp-sa-dialogflow.iam.gserviceaccount.com 服务帐号需要成为所有子代理项目的成员,并且应用的角色应具有检测意图调用的权限。以下角色将提供此访问权限:Project Owner、Project Editor、Dialogflow API Admin 或 Dialogflow API Client。如要获取此服务帐号的电子邮件地址,请执行以下操作:

    1. 访问 IAM 服务帐号页面
    2. 为您的超级代理选择项目。
    3. 找到符合该格式的服务帐号:
      service-project-num@gcp-sa-dialogflow.iam.gserviceaccount.com
    4. 记录所选服务帐号的电子邮件地址。 您下面会需要此内容。
  5. 对于每个子代理项目,请将您在上述步骤中收集的超级代理服务帐号添加为子代理项目的成员:

    1. 访问 IAM 主页
    2. 为您的分代理选择项目。
    3. 将超级代理的服务帐号电子邮件地址添加为项目成员,并授予他们所需的角色

检测意图

如需检测意图,请像调用其他检测意图请求一样调用该请求,并使用超级代理项目 ID。Dialogflow 将考虑所有分代理,并返回分代理的最佳响应。

例如,请考虑以下分代理:

分代理 意图 训练短语
订单 图书 “我想买一本书”
“将书添加到我的购物车”
帽子 “我想买一顶帽子”
“我想要一顶帽子”
帐号 余额 “我的余额是多少?”
“我的帐号里还剩多少钱?”
地址 “我想更改我的地址”
“我有了新地址”

如果最终用户说“我想买一顶帽子”,发送给超级代理的检测意图请求将匹配 Orders 代理的 Hats 意图。

如要为检测意图请求指定一个或多个分代理,请设置 QueryParameterssubAgents 字段。例如,此请求的 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

如果没有为上下文名称指定分代理前缀,那系统会将其视为超级代理的上下文。