1. 總覽
上次更新時間:2023 年 10 月 10 日
建構項目
在本程式碼研究室中,您將使用 Vertex AI Conversation 和 Dialogflow CX,建構、部署及設定虛擬服務專員,協助想捐血的民眾確認自己是否符合資格規定。Dialogflow CX 執行要求時,代理會使用真實的公開資料和 Google 的生成式大型語言模型 (LLM)。
您會使用的功能
如要完成本程式碼研究室,您將設定及使用三項不同的功能:
資料儲存庫代理
Vertex AI Conversation 功能會建立特殊的 Dialogflow 代理程式,稱為資料儲存庫代理程式。
只要提供網站網址、結構化或非結構化資料 (資料儲存庫),Google 就會剖析內容,並使用儲存庫的資料和大型語言模型來建立虛擬服務專員。顧客和使用者就能與代理對話,並詢問內容相關問題。如要瞭解這類代理程式,請參閱 Vertex AI Conversation 簡介。
生成器
透過 Dialogflow CX 的生成器功能,開發人員可以在執行階段使用 Google 最新的生成式大型語言模型 (LLM) 和自訂提示詞,來生成代理回覆。生成器能根據訓練時使用的大型文字資料集或對話脈絡中取得的一般知識,生成一般回覆。
生成式備用答覆
生成式備用答覆功能會使用 Google 最新的生成式大型語言模型 (LLM),在使用者輸入內容與意圖或表單填寫參數不符時,生成虛擬代理程式回覆。這項功能可透過文字提示進行設定,指示 LLM 的回覆方式。你可以使用預先定義的文字提示,也可以新增自己的提示。您可以在流程、頁面或參數填寫期間使用的無相符事件處理常式中,啟用生成式備用答覆。如果為不相符事件啟用生成式備用功能,每當該事件觸發時,Dialogflow 就會嘗試生成回應,並回覆給使用者。如果無法生成回覆,系統會改為發出一般規定的代理程式回覆。如要進一步瞭解生成式備用內容,請試試這個程式碼研究室!
課程內容
- 如何從非結構化資料建立資料儲存庫代理程式
- 如何使用知識處理常式,讓使用者與虛擬服務專員根據資料儲存庫中的內容進行對話。
- 瞭解如何設定生成器文字提示詞,並使用內建的生成器提示詞預留位置,提供情境脈絡。
- 如何將字詞標示為生成器提示詞預留位置,稍後在執行要求中將這些字詞與工作階段參數建立關聯,以便在執行期間使用這些字詞的值。
- 如何設定生成器,使生成器根據大型文字資料集中的知識及目前對話的脈絡生成回覆。
- 如何使用生成器生成正式電子郵件
- 如何測試代理並模擬顧客問題,觸發系統生成回覆
軟硬體需求
- Google Cloud 專案
- 瀏覽器,例如 Chrome
2. 啟用 API
如要在 Vertex AI Conversation 中建立資料儲存庫代理程式,必須先啟用 Dialogflow 和 Vertex AI Search and Conversation API。
如要啟用 Dialogflow API,請按照下列步驟操作:
- 在瀏覽器中前往 Dialogflow API 服務詳細資料頁面。
- 點選「啟用」按鈕,在 Google Cloud 專案中啟用 Dialogflow API。
如要啟用 Vertex AI Search and Conversation API,請按照下列步驟操作:
- 在 Google Cloud 控制台中,前往 Vertex AI Search and Conversation 控制台。
- 閱讀並同意《服務條款》,然後按一下「Continue and activate the API」(繼續並啟用 API)。
3. 為應用程式建立新的即時通訊應用程式和資料儲存庫
現在,您要為虛擬代理建立新的聊天應用程式,並設定資料來源。建構此代理是為了回答顧客有關捐血資格的問題。您將以澳洲紅十字會 Lifeblood 機構為可靠資料來源,並根據捐血資格網站的非結構化資料建立資料儲存庫。
- 如要在 Vertex AI Conversation 中建立新的聊天應用程式,您可以採取下列任一做法:
- 前往 Vertex AI Conversation 控制台,然後點選控制台頂端的「+ 新增應用程式」。
- 前往 Dialogflow CX 控制台,依序點選「+ 建立新代理程式」和「自動產生」選項,然後系統會將您重新導向至 Vertex AI Conversation 控制台的下一個步驟。
- 在 Vertex AI Conversation 控制台中,選取要建立的應用程式類型「Chat」。
- 輸入公司名稱 (
Save a Life)。這項參數用於定義代理人代表的公司和代理人的範圍。 - 指定
Blood Donation Agent的「Agent name」(代理名稱)。 - 按一下「繼續」。
- 點選「建立新的資料儲存庫」。
- 選取「Cloud Storage」做為資料儲存庫的資料來源。
- 指定下列 Google Cloud Storage 資料夾,其中包含本程式碼研究室的範例資料,並注意不需加上
gs://前置字元:cloud-samples-data/dialogflow-cx/arc-lifeblood - 選取「非結構化文件」做為要匯入的資料類型。
- 按一下「繼續」。
- 將「資料儲存庫名稱」指定為
Australian Red Cross Lifeblood Unstructured。 - 按一下「建立」即可建立資料儲存庫。
- 在資料儲存庫清單中,選取新建立的
Australian Red Cross Lifeblood Unstructured。 - 按一下「建立」即可建立即時通訊應用程式。
恭喜!您已完成建構知識型聊天應用程式,準備好協助潛在捐血者,值得慶祝一下!
不過,您還有更多工作要完成,使用者才能存取代理。在下一節中,您將使用知識處理常式,讓代理與使用者可以進行關於資格規定的對話。
4. 設定代理回答捐血資格常見問題
提供資料儲存庫提示詞
文件收集程序會在背景執行,我們來編輯資料儲存庫提示詞,為代理加上品牌。
- 在 Vertex AI Conversation 控制台中,點選聊天應用程式的名稱,系統會將您重新導向至 Dialogflow CX 控制台,以便進一步測試及自訂。
- 在 Dialogflow CX 控制台和代理中,按一下「代理設定」 (頁面右上角),然後前往「ML」分頁,最後開啟「生成式 AI」分頁。

- 如下所示填寫表單,生成下列資料儲存庫提示詞:你的名字是
Donate,是Save a life, a fictitious organization親切有禮的chatbot。你的任務是協助humans with eligibility information。

為「Default Start Flow」的無相符事件啟用生成式備用答覆
- 切換至「Build」(建構) 分頁,然後開啟「Start Page」(起始頁面)。
- 按一下 sys.no-match-default 事件處理常式。除非方塊已勾選,否則請啟用生成式備用答覆功能。

檢查代理程式的資料儲存庫
在「開始頁面」點選「編輯資料儲存庫」,即可查看資料儲存庫設定。

Dialogflow 會自動選取您先前建立的資料儲存庫。

向下捲動至「Fulfillment」下方的「Agent Responses」。執行要求是代理對使用者的回應。Dialogflow 已預先填入「Agent says」,並將參數設為 $request.knowledge.answers[0],這個參數在執行階段會包含使用者問題的最佳答案。

5. 測試代理
請等到文件準備就緒可以使用時,再讓代理查看答覆是否恰當。
按一下「測試代理程式」,再次開啟模擬器。

詢問您預期會在網站常見問題頁面中看到的問題:
What age do I need to be to donate?Can pregnant women donate?I've just come back from a trip to Africa. Can I donate?How can I schedule an appointment?

請注意,答案是從 Australian Red Cross Lifeblood 網站擷取。如本頁面所述,捐血有最低和最高年齡限制。首次捐血者須年滿 18 歲,且未滿 75 歲。代理回覆和原始 JSON 回應中顯示的小星星圖示,進一步證明我們是從資料儲存庫提取資訊。

最後,我們試試問代理與捐血完全無關的問題。
使用者:「墨爾本的天氣如何?」
服務專員:「很抱歉,我無法提供這方面的協助。我可以如何協助您取得資格資訊?
這樣的答覆含有 AI 生成內容,是根據 Dialogflow 從先前提供的知識連接器設定建立的文字提示詞所產生:「你的名字是 Donate,是 Save a Life 親切有禮的聊天機器人。你的任務是協助人類取得資格資訊」。這段文字提示詞包含公司名稱、代理姓名,以及最重要的服務範圍,Dialogflow 會據此生成代理回覆。
非常好!到目前為止,您使用了資料儲存庫來協助回答使用者有關捐血的常見問題。在程式碼研究室的下個部分,我們將瞭解如何將生成器文字提示詞繫結至相同內容,以便做出明智決策。
6. 設定資格測驗的代理
接下來我們要設計代理,判斷使用者是否符合捐血資格。捐贈者必須符合嚴格的條件,例如年齡、體重、現有身體狀況、近期旅遊等。在本程式碼研究室的範圍內,我們只考量年齡和體重。生成器會使用 Google 的大型語言模型 (LLM),根據對話情境和知識庫動態做出明智決策。
設定新路徑和參數
- 開啟「開始頁面」,然後點選「編輯資料儲存庫」。
- 將現有代理程式的回應變更為
$request.knowledge.answers[0] Would you like to take the eligibility quiz to find out if you can donate blood, and start changing lives?。

- 按一下 [儲存] 按鈕
- 現在,我們需要設計代理程式來處理「是」和「否」的回應。首先,請建立 confirmation.yes 意圖和 confirmation.no 意圖。請按照這些指南重複使用意圖。
- 接著在「開始頁面」中,為 confirmation.yes 意圖建立路由,轉換至「資格測驗」新頁面。


- 如前所述,我們會簡化測驗,只根據使用者的年齡和體重,判斷是否符合捐血資格。開啟「Eligibility Quiz」頁面,新增表單參數 age-weight,然後選取
@sys.any做為實體類型。將"What is your age and weight?"做為初始提示完成情況。我們想一次收集年齡和體重。請儲存所有變更。

建立及設定資格生成器
透過 Dialogflow CX 的生成器功能,開發人員可以在 Dialogflow CX 執行要求期間,使用 Google 最新的生成式大型語言模型 (LLM)。生成器會在執行階段生成代理的回覆。生成器能根據訓練時使用的大型文字資料集或對話脈絡中取得的一般知識,生成一般回覆。
我們要建立新的生成器,比較使用者提供的資訊 (例如年齡和體重) 與資格規定,判斷使用者是否符合捐血資格。
- 在 Dialogflow CX 控制台中,前往「管理」分頁,選取「Generators」,然後按一下「建立」。

- 接著,請提供容易識別的顯示名稱,並編寫文字提示詞。保留預設的模型品質控管設定。然後按一下「儲存」即可建立生成器。
- 顯示名稱:
Blood Donation Eligibility - 文字提示:
Check the users eligibility against the following criteria: the minimum age is 18 and the maximum age is 75. Weight should be above 50 Kg. The user age and weight is $last-user-utterance. Be nice and tell the user if they are eligible to donate (also tell them why not in case)
- 顯示名稱:
在執行階段完成要求時,系統會將文字提示詞傳送至生成模型。請務必清楚提問或提出要求,模型才能生成令人滿意的回覆。您可以在文字提示詞中使用內建的特殊生成器提示詞預留位置:
$conversation代理程式和使用者之間的對話,不包括使用者最後一句話。$last-user-utterance使用者最後輸入的內容。
您設定的文字提示詞會要求使用者在一次對話往來 (即 `$last-user-utterance``) 中提供年齡和體重。
在執行要求中使用生成器,並設定所有必要參數
- 在「資格測驗」頁面中,新增所有參數填寫完畢時會發生的新路線。輸入條件需求
$page.params.status = "FINAL",然後按一下「儲存」。

- 前往「Fulfillment」窗格的「Generators」部分並展開。然後,按一下「Add generator」,並選取「Blood Donation Eligibility」生成器。選取生成器後,請定義輸出參數,其中會包含執行後生成器的結果。

- 在代理程式回覆中使用輸出參數,並儲存路徑。現在可以開始測試所有內容。

7. 重新測試代理程式
按一下「測試代理程式」,再次開啟模擬器。

在「模擬器」中,與代理開始新的對話。請先詢問年齡規定,然後進行資格測驗。請先測試「符合資格」路徑,因此請輸入 18 到 75 歲之間的年齡,以及超過 50 公斤的體重。

接著,檢查是否因未滿足一或兩項條件而導致資格檢查失敗。

太棒了,生成器運作正常!真是如此嗎?如果使用者只告知年齡,但未提供體重 (或反過來),會發生什麼情況?

8. 調整生成器提示詞
如果沒有同時提供年齡和體重,系統似乎無法一次收集這兩項資訊。我們應改為建立表單,收集這兩個值做為實體參數。如要讓提示詞內容符合所有資格規定 (例如年齡和體重) 脈絡,可以在字詞前加上 $ 來使用預留位置。我們稍後會將這些生成器提示詞預留位置,與執行要求中的工作階段參數建立關聯,並在執行期間以工作階段參數值取代預留位置。
- 開啟「Eligibility Quiz」頁面,然後新增兩個個別的表單參數:一個用於體重,另一個用於年齡。選擇
@sys.number-integer做為實體類型,並將參數標示為必要資訊。為How old are you?和What is your correct weight?提供初始提示詞填答內容。儲存所有變更。

- 如要變更生成器的文字提示詞,加入兩個新的自訂預留位置,需先從路徑完成作業中移除生成器。按一下 [儲存]。

- 前往「管理」分頁,選取「Generators」,然後更新「Blood Donation Eligibility」生成器的文字提示詞:
Check the users eligibility against the following criteria: the minimum age is 18 and the maximum age is 75. The weight must be at least 50 kg. The user is $age years old and weighs $weight Kg. Craft an email and politely explain to the user if they're eligible to donate and if not why.。按一下「儲存」。
請注意,我們不只是讓文字提示詞與年齡和體重表單參數相關,也變更了最後一句,以便生成包含資格測驗官方認定結果的正式電子郵件,並寄給使用者。

- 在「Eligibility Quiz」頁面中選取路線,然後展開「Fulfillment」窗格的「Generators」部分。然後,按一下「Add generator」,並選取 Blood Donation Eligibility 生成器。選取生成器後,請將新的提示詞預留位置與對應的工作階段參數建立關聯。此外,您需要重新設定輸出參數。按一下「儲存」。

- 再次測試代理。現在資格檢查會同時考量年齡和體重,且用語會從原本的對話語氣變得更有禮貌,回覆可直接傳送,無需人工介入。


9. 恭喜
恭喜完成本程式碼研究室!

今天我們深入研究了資格測驗中的生成器。您已瞭解生成器如何使用 LLM 生成代理回覆,並運用知識庫做出明智決策。當然,還可以利用生成器和資料儲存庫進行許多其他作業,我們很期待瞭解這些用途!
清除
如要避免系統向您的 Google Cloud 帳戶收取本程式碼研究室所用資源的費用,請執行下列清理作業:
- 請前往 Google Cloud 控制台刪除您不需要的專案,以免產生不必要的 Google Cloud 費用。
- 如果您使用的是現有的 Google Cloud 專案,請刪除稍早建立的資源,以免系統向您的帳戶收取費用。詳情請參閱「刪除應用程式」一文中的步驟。
- 如要停用 Vertex AI Conversation 和 Dialogflow 的 API,請前往 Discovery Engine API 服務詳細資料頁面,按一下「停用 API」並確認,然後前往 Dialogflow API 服務詳細資料頁面,按一下「停用 API」並確認。
瞭解詳情
歡迎參考下列指南和資源,進一步瞭解對話式 AI 和生成式 AI:
- Dialogflow CX 說明文件
- Vertex AI Conversation 簡介
- 建立及使用資料儲存庫代理程式
- Vertex AI Conversation 說明文件
- Google Cloud 中的生成式 AI
授權
這項內容採用的授權為 Creative Commons 姓名標示 2.0 通用授權。