建立 Dialogflow ES 服務專員

本指南說明如何使用 Dialogflow 主控台建構及測試簡單的代理程式。

事前準備

閱讀本指南之前,請先完成下列工作:

  1. 詳閱 Dialogflow 基本概念
  2. 執行設定步驟

建立虛擬服務專員

如果您尚未建立服務帳戶,請立即建立:

  1. 前往 Dialogflow ES 主控台
  2. 按照系統要求登入 Dialogflow 主控台。詳情請參閱 Dialogflow 主控台總覽
  3. 按一下左側欄選單中的 [Create Agent] (建立代理程式)。(如果您已有其他代理程式,請按一下代理程式名稱然後捲動至底部,再按一下 [Create new agent] (建立新代理程式)。)
  4. 輸入代理程式的名稱、預設語言和預設時區。
  5. 如果您已建立專案,請輸入該項專案的資料。如要允許 Dialogflow 主控台建立專案,請選取 [Create a new Google project] (建立新 Google 專案)
  6. 按一下 [Create] (建立) 按鈕。

將範例檔案匯入代理程式

本指南中的步驟會假設您的代理程式符合某些條件,因此您需要匯入為本指南準備的代理程式。匯入時,這些步驟會使用「還原」選項,覆寫所有介面設定、意圖和實體。

這份指南所用的服務專員是新服務專員,沒有使用者定義的意圖或實體。

如要匯入檔案,請按照下列步驟操作:

  1. 下載 new-agent.zip 檔案。
  2. 前往 Dialogflow ES 主控台
  3. 選取所需的代理程式。
  4. 按一下代理程式名稱旁邊的「設定」 按鈕。
  5. 選取「Export and Import」分頁標籤。
  6. 選取「Restore From Zip」,然後按照操作說明還原下載的 ZIP 檔案。

意圖

「意圖會針對一回合的對話來分類使用者的意圖。 您可為各個代理程式定義許多意圖,好讓這些意圖能夠合併起來處理完整的對話。

預設意圖

建立代理程式時,系統會為您建立兩個預設意圖

  • 預設歡迎意圖:當使用者開始與代理程式進行對話時,便符合此意圖。 而此意圖會傳回回應,讓使用者知道您的代理程式執行了哪些作業,或是可以說些什麼來展開對話。
  • 預設備用意圖:當代理程式無法將使用者表達內容比對到任何其他意圖時,便符合此意圖。

如要查看這些意圖,請前往代理程式的意圖清單:

  1. 前往 Dialogflow ES 主控台
  2. 選取您剛剛建立的代理程式。
  3. 按一下左側欄選單中的 [Intents] (意圖)

主控台中間會列出代理程式的意圖。

意圖清單螢幕截圖

測試預設備用意圖

模擬工具螢幕截圖

Dialogflow 模擬工具位於主控台的右側,使用此模擬工具,您可透過語音或輸入訊息的方式來測試代理程式。

現在就來試用代理程式:

  • 按一下「Try it now」欄位。
  • 輸入 What is your name?
  • 按下 Enter 鍵。

代理程式的回應會顯示在「Default Response」(預設回應) 區段。由於您的輸入與任何其他意圖都不相符,所以與預設備用意圖相符,因此會收到其中一個預設回覆。

建立新意圖

本節的步驟會建立可回答「what is your name?」(你的名字是什麼?) 這類問題的意圖。對於每一個意圖,您都要定義許多訓練詞組。訓練詞組是指使用者可能對代理程式輸入或說出的內容範例,也稱為「使用者表達內容」。 您應定義許多訓練詞組,為 Dialogflow 提供各種應與意圖相符的語句。

建立意圖:

  1. 按一下左側欄選單中位於 [Intents] (意圖) 旁的新增意圖 按鈕。
  2. 在「Intent name」(意圖名稱) 欄位中輸入 get-agent-name
  3. 在「Training Phrases」區段中,按一下「Add training phrases」
  4. 輸入下列訓練詞組,每輸入一項後都要按 Enter 鍵:

    • What is your name?
    • Do you have a name?
    • Tell me your name

    訓練詞組的螢幕截圖

  5. 在「Responses」(回應) 區段的「Text Response」(文字回應) 部分中,輸入以下內容:

    • My name is Dialogflow!

    訓練詞組的螢幕截圖

  6. 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。

測試您的意圖

模擬工具螢幕截圖

在模擬工具中輸入 What's your name?,然後按 Enter 鍵。

即使該表達內容與您提供的訓練詞組稍有不同,您的代理程式還是能夠正確回應。

Dialogflow 使用訓練詞組做為範例,讓機器學習模型比對使用者表達內容與意圖。模型會將表達內容與代理程式中的每個意圖進行比對,並為每個意圖打分數,然後將分數最高的意圖判定為相符。如果得分最高的意圖分數很低,就是符合備用意圖。

參數與實體

當 Dialogflow 在執行階段比對出相符的意圖時,就會提供從使用者表達內容中擷取到的值做為參數。每個參數都有一個類型,稱為實體類型,此類型會明確指定資料的擷取方式。與原始使用者輸入內容不同,參數是結構化的資料,可輕鬆用於執行某些邏輯或產生回應。

建構代理程式時,您可以為部分訓練詞組加註並設定相關參數,藉此控制資料的擷取方式。

建立參數

使用參數建立新的意圖:

  1. 在左側欄選單中,按一下「Intents」(意圖) 旁的加號 按鈕。
  2. 在意圖表單頂端,將意圖命名為 set-language
  3. 請新增以下訓練詞組:
    • I know English
    • I speak French
    • I know how to write in German
  4. 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。

    有註解的訓練詞組螢幕截圖

Dialogflow 會自動偵測訓練詞組中屬於系統實體的參數。 這些實體由 Dialogflow 提供,適用於許多常見的資料類型,如地點、顏色和日期。

在「Training phrases」(訓練詞組) 區段下,Dialogflow 會在「Action & parameters」(動作和參數) 表格中建立資料列:

有註解的訓練詞組螢幕截圖

  • Required (必要):核取方塊未勾選,因此這項參數不是必要的。
  • Parameter Name (參數名稱):系統將參數判定為一種語言,因此自動將其命名為 language
  • Entity (實體):這是實體類型。系統將之判定為 @sys.language 系統實體。
  • Value (值):這是參照此參數值時所使用的識別碼。
  • Is List (是清單):核取方塊未勾選,因此參數不是清單。

在回應中使用參數資料

參數的值可在回應中使用。 例如,建構代理程式時,您可在回應中使用 $language 參數參照。 在執行階段,系統會將其替換為使用者表達內容中指定的語言。

新增使用參數的回應:

  1. 向下捲動至「Responses」(回應) 部分。
  2. 新增以下文字回應: Wow! I didn't know you knew $language.
  3. 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。

測試您的參數

模擬工具螢幕截圖

在模擬工具中輸入 I know Russian

您可以看到 Dialogflow 正確擷取值為 Russianlanguage 參數,然後在回應中使用參數參照處正確插入了 Russian

建立您自己的實體

在大部分情況下,您必須向使用者收集系統實體未提供的特定資料。 您可以建立自訂實體來因應這種情況。

建立自訂實體:

  1. 在左側欄選單中,按一下「Entities」(實體) 旁的新增實體 按鈕。
  2. 輸入 language-programming 做為實體名稱。
  3. 新增以下實體項目 (資料列):

    參照值 同義詞
    JavaScript JavaScript、js、ECMAScript
    Java Java
    Python Python、py
  4. 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。

實體運用的螢幕截圖

Dialogflow 可處理單複數和大小寫等簡單的差異,但請為項目新增所有可能的同義詞。 新增的同義詞越多,代理程式就越能正確判定實體。

使用新實體

請將訓練詞組新增到 set-language 意圖,以便利用新實體:

  1. 按一下左側欄選單中的 [Intents] (意圖)
  2. 按一下 set-language 意圖。
  3. 請新增以下訓練詞組:
    • I know javascript
    • I know how to code in Java
  4. 請注意,系統會為這些訓練詞組中的程式設計語言自動加註,然後將其新增至「Action and Parameters」區段中的參數。
  5. 在「Responses」(回應) 區段中,新增以下第二個文字回應:$language-programming is an excellent programming language.
  6. 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。

測試您的新實體

模擬工具螢幕截圖

在模擬工具中輸入 I know how to code in py

您可以看到 Dialogflow 正確擷取出 language-programming 參數的 py,將其識別為 Python 實體,並在回應中插入該值。

背景資訊

如要控制對話的流程,您可以使用背景資訊

新增後續追蹤意圖

「後續追蹤意圖可讓您輕鬆控制對話,而不用手動建立和管理背景資訊。

當您建立後續追蹤意圖時,系統會將輸出背景資訊加到父項意圖,並將同名的輸入背景資訊加到子項意圖。 這代表只有在前一回合對話符合父項意圖時,後續追蹤意圖才會比對成功。

set-language 意圖新增自訂的後續追蹤意圖:

  1. 選取您在先前步驟中建立的 set-language 意圖。
  2. 在「Response」(回應) 區段,更新文字回應:
    • Wow! I didn't know you knew $language. How long have you known $language?
  3. 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。
  4. 按一下左側欄選單中的 [Intents] (意圖)
  5. 將滑鼠游標移至 set-language 意圖上,然後按一下 [Add follow-up intent] (新增後續追蹤意圖)
  6. 在顯示的清單中,按一下 [custom] (自訂)
  7. 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。

Dialogflow 會自動將後續追蹤意圖命名為 set-language - custom

後續追蹤螢幕截圖

後續追蹤意圖的比對作業

只有在已有相符父項意圖時,系統才會比對後續追蹤意圖。 由於只有在 set-language 意圖之後才會比對 set-language - custom 意圖,因此您可以假設代理程式剛剛向使用者詢問的是 How long have you known $language? 問題。現在,您可以新增訓練詞組來表示使用者可能會針對該問題回答的內容。

  1. 按一下左側欄選單中的 [Intents] (意圖)
  2. 按一下 set-language - custom 意圖。
  3. 請新增以下訓練詞組:
    • 3 years
    • about 4 days
    • for 5 years
  4. 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。

測試您的後續追蹤意圖

在模擬工具中輸入 I know French,然後以 about 2 weeks 回答 How long have you known French 這個問題。

雖然第二個表達式 (about 2 weeks) 沒有任何回應,但您可以看到系統將表達式配對至正確的意圖 (set-language - custom),並正確剖析出時間長度參數 (2 weeks)。

意圖和背景資訊

檢查 set-language 意圖可看到 set-language-followup 被列為輸出背景資訊,且前面有數字 2。這個數字稱做效期

輸出背景資訊的螢幕截圖

比對出 set-language 意圖後,set-language-followup 背景資訊就會啟用,並附加至對話的下「兩」個回合 (效期為 2)。因此,當使用者回應「How long have you known $language?」這個問題時,set-language-followup 背景資訊就會啟用。

如果您檢查 set-language - custom 意圖,會發現系統將 set-language-followup 列為輸入背景資訊,與 set-language 意圖的輸出背景資訊相同。

如果意圖的輸入背景資訊與啟用的背景資訊相符,Dialogflow 在比對意圖時就會優先選擇此意圖。

背景資訊和參數

背景資訊會儲存參數值,當 set-language 意圖的輸出背景資訊啟用時,您便可存取該意圖所定義的參數值。

set-language - custom 意圖中,您只問了使用者學習該語言多久時間,而未要求使用者提及所參照的語言。

如何在回應中參照語言:

  1. set-language - custom 意圖文字回應更新為 I can't believe you've known #set-language-followup.language for $duration!
  2. 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。

#set-language-followup.language 參照稱為已啟用背景資訊的參數參照

測試背景資訊參數

在模擬工具中輸入 I know French,然後以 1 week 回應問題。 請注意,language 參數值是擷取自背景資訊。

正式化

在實際工作環境中執行服務前,請務必實作實際工作環境最佳做法

後續步驟

請試用fulfillment 快速入門導覽課程