您可以將多個 Dialogflow 代理 (稱為「子代理」) 合併為單一代理 (稱為「超級代理」)。對超級代理執行偵測意圖要求時,系統會考量所有子代理,並傳回子代理的最佳回應。
使用超級代理的原因有很多:
- 更完善的管理:如果有多個團隊建構代理,每個團隊可以負責一個子代理,簡化團隊之間的變更衝突。
- 更多意圖:如果代理程式有大量意圖,可能會接近意圖數量限制。在這種情況下,您可以建立多個子代理和一個超級代理。
限制
超級代理有以下限制:
- 超級代理和子代理必須在同一個區域建立。
- 在一個區域內,超級代理及其子代理都與不同的 Google Cloud 專案相關聯。
- 一個超級代理最多可有 10 個子代理。
- 閒聊不適用於超級代理。
- 向超級代理傳送要求時,子代理意圖優先順序不會影響意圖比對。
- Google 助理整合無法與超級代理搭配使用。
- 不支援合作夥伴內建電話整合功能 (AudioCodes、Avaya、SignalWire、Voximplant)。
- 超級代理不支援將備用意圖做為後續意圖。
建立子代理
建立子代理的方式與其他代理相同。視需要新增意圖、情境、實體等,建構代理。
建立或更新超級代理
您可以使用 Dialogflow 控制台建立超級代理,並連結至子代理。
Dialogflow 會考量超級代理的大部分代理設定,並將資料記錄到超級代理。例如:
- Dialogflow 會從超級代理取得代理層級的記錄、情緒、語音轉文字和文字轉語音設定。
- Dialogflow 會將數據分析、對話記錄和訓練工具資料儲存在超級代理中。
網路使用者介面
1. 建立超級代理
- 前往 Dialogflow ES 控制台。
- 按一下左側欄選單中的「Create Agent」。如果您已有其他代理程式,請按一下代理程式名稱並捲動至底部,然後按一下 [Create new agent] (建立新代理程式)。
- 輸入代理名稱、預設語言、預設時區和Google Cloud 專案。
- 將「Agent Type」(代理類型) 設為「Mega Agent」(超級代理)。
- 按一下 [建立] 按鈕。
2. 新增及管理子代理
- 按一下左側欄選單中的「子代理」。
- 選取要新增至超級代理的子代理。
- 子代理的「Environment」(環境) 預設為「Draft」(草稿),但您可以視需要更新。
- 如要使用與子代理相關聯的知識庫,請將欄位從「Excluded」(已排除) 變更為「Included」(已納入)。
- 按一下 [儲存]。
設定角色
視您打算如何使用超級代理而定,您必須在子代理專案中授予特定角色,超級代理才有權呼叫子代理。如要設定這些角色,請按照下列步驟操作:
- 按照一般方式建立超級代理和子代理 Google Cloud 專案,並確認已為每個專案啟用「Dialogflow API」。
- 如果您打算使用 API 與超級代理互動,則必須將每個子代理專案的角色,授予用於超級代理 API 呼叫的服務帳戶,且該角色應具備發出偵測意圖呼叫的權限。下列角色可提供這項存取權:專案擁有者、專案編輯者、Dialogflow API 管理員或 Dialogflow API 用戶端。如要取得這個服務帳戶的電子郵件地址,請按照下列步驟操作:
- 前往 IAM 服務帳戶頁面。
- 選取超級代理的專案。
- 請選取已建立的服務帳戶來發出 API 呼叫,或新增具備所需角色的服務帳戶。請按照設定操作說明建立新的服務帳戶,並下載私密金鑰。
- 記下所選服務帳戶的電子郵件地址。稍後會用到。
如果您打算為超級代理使用任何整合,則超級代理專案自動建立的 service-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com 服務帳戶,必須在該專案中具備包含偵測意圖呼叫權限的角色。下列角色可提供這項存取權:專案擁有者、專案編輯者、Dialogflow API 管理員或 Dialogflow API 用戶端。如要取得這個服務帳戶的電子郵件地址,請按照下列步驟操作:
- 前往 IAM 主頁面。
- 選取超級代理的專案。
- 啟用右側的「包含 Google 提供的角色授予項目」選項。
- 找出符合下列模式的服務帳戶:
service-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com。 - 記下所選服務帳戶的電子郵件地址。稍後會用到。
針對每個子代理專案,將角色授予您在上方收集的超級代理服務帳戶:
偵測意圖
如要偵測意圖,請像其他偵測意圖要求一樣呼叫要求,並使用超級代理的專案 ID。Dialogflow 會考量所有子代理,並傳回子代理的最佳回覆。
例如,假設有下列子代理:
| 子代理 | Intent | 訓練詞組 |
|---|---|---|
| 訂單 | 圖書 | 「我想買書」 「將書加入購物車」 |
| 帽子 | 「我想買帽子」 「我想要帽子」 |
|
| 帳戶 | 餘額 | 「我的餘額是多少?」 「我的帳戶還剩多少錢?」 |
| 地址 | 「我想變更地址」 「我有新地址」 |
如果使用者說「我想買一頂帽子」,傳送至超級代理的偵測意圖要求會與 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 的有效情境執行階段壽命。
版本和環境
超級代理層級的版本和環境可讓您建立超級代理備用意圖的不同快照,並為不同的超級代理環境設定不同的 Webhook 和 Text-to-Speech 設定。
超級代理的「Sub Agents」(子代理) 控制台頁面上的設定,不包含在超級代理的版本和環境中。超級代理要求一律會觸發子代理的環境,指定該頁面在該時刻的狀態。