Dialogflow Intent 與 Context 完整教學:打造聰明的多輪對話

Dialogflow Intent 與 Context 完整教學:打造聰明的多輪對話
為什麼有些聊天機器人感覺很笨,有些卻能像真人一樣對話?
關鍵在於「多輪對話」的設計。一個笨機器人每次都像第一次見面,聽完就忘。一個聰明的機器人會記住對話脈絡,理解你真正想要什麼。
Dialogflow 透過 Intent、Entity、Context 三大元素,讓你設計出能「記住」對話的機器人。這篇文章深入講解這些概念,教你打造真正聰明的 AI 對話。
如果你還不熟悉 Dialogflow 基礎,建議先閱讀 Dialogflow 完整指南。
Intent(意圖)詳解
Intent 是 Dialogflow 最核心的概念:使用者想要做什麼。
什麼是 Intent
當使用者說「我想訂位」,Dialogflow 需要理解這是「訂位」的意圖,而不是「查詢訂單」或「問營業時間」。
Intent 的工作流程:
使用者輸入 → NLU 分析 → 匹配 Intent → 執行回應
│ │ │ │
「我要訂位」 意圖理解 make_booking 「好的,請問...」
Training Phrases 設計技巧
Training Phrases 是教機器人認識 Intent 的例句。寫得好,機器人辨識就準確。
技巧 1:提供多樣化的說法
不要只寫一種說法:
❌ 不好的例子(只有一種說法):
- 我要訂位
✓ 好的例子(多樣化):
- 我要訂位
- 想訂個位子
- 預約座位
- 可以幫我訂位嗎
- 我想預約
- 訂桌
技巧 2:覆蓋不同長度
- 訂位(極短)
- 我要訂位(短)
- 幫我訂明天晚上的位子(中)
- 你好,我想預約這週六晚上 7 點,4 個人用餐(長)
技巧 3:包含常見錯字
台灣用戶常見的錯字或口語:
- 定位(「訂」寫成「定」)
- 預月(「約」寫成「月」,注音誤觸)
- 我想book位子(中英混用)
技巧 4:使用 Entity 標註
在 Training Phrases 中標註 Entity,讓 Dialogflow 學會擷取資訊:
訂 @sys.date:date 的位子
→ 「訂明天的位子」會擷取 date = 明天
建議數量:
- 每個 Intent 至少 10-15 個 Training Phrases
- 重要的 Intent 可以到 30-50 個
Response 設定方式
Response 是機器人的回覆。有幾種設定方式:
1. 純文字回覆
最簡單的方式,直接輸入文字。可以輸入多個變體,Dialogflow 會隨機選擇。
- 好的,請問用餐日期是哪一天?
- 沒問題!請告訴我您想訂哪一天?
- 好的,我來幫您訂位。請問是哪一天用餐?
2. 包含參數的回覆
使用 $parameter_name 引用參數值:
好的,您想訂 $date $time,$party_size 位用餐,對嗎?
3. 平台專屬回覆
不同平台可以設定不同格式:
- LINE:Flex Message
- Messenger:Quick Reply
- 網頁:純文字
預設 Intent 說明
Dialogflow 自動建立的兩個 Intent:
| Intent | 觸發時機 | 建議設定 |
|---|---|---|
| Default Welcome Intent | 對話開始時 | 親切的問候 + 功能引導 |
| Default Fallback Intent | 聽不懂時 | 提供選項或轉人工 |
Fallback Intent 設計建議:
❌ 不好的回覆:
「抱歉,我聽不懂。」
✓ 好的回覆:
「不好意思,我沒有理解您的意思。您可以試試:
• 輸入「訂位」預約座位
• 輸入「菜單」查看餐點
• 輸入「客服」聯繫真人」
插圖:Intent 結構示意圖
場景描述: 一張示意圖展示 Intent 的結構。中央是 Intent 名稱「make_booking」,周圍連接四個元素:Training Phrases(多個例句)、Parameters(date、time、party_size)、Response(回覆文字)、Context(輸入/輸出上下文)。
視覺重點:
- 主要內容清晰呈現
必須出現的元素:
- 依據描述中的關鍵元素
需要顯示的中文字: 無
顏色調性: 專業、清晰
避免元素: 抽象圖形、齒輪、發光特效
Slug:
dialogflow-intent-structure-diagram
Entity(實體)進階
Entity 讓 Dialogflow 從使用者輸入中擷取有意義的資訊。
系統實體 vs 自訂實體
系統實體(System Entity)
Dialogflow 內建的實體,直接可用:
| 實體 | 用途 | 範例 |
|---|---|---|
@sys.date | 日期 | 明天、1/15、下週一 |
@sys.time | 時間 | 7 點、晚上 8 點半 |
@sys.number | 數字 | 4、十、一百 |
@sys.phone-number | 電話 | 0912345678 |
@sys.email | [email protected] | |
@sys.url | 網址 | https://... |
@sys.geo-city | 城市 | 台北、高雄 |
自訂實體(Custom Entity)
針對你的業務需求建立:
Entity: @menu_item
Values:
- 炒飯
- 炒麵
- 牛排
- 義大利麵
同義詞設定
讓 Entity 認識同一個東西的不同說法:
Entity: @menu_item
Value: 炒飯
Synonyms: 蛋炒飯, 炒飯飯, 炒飯便當, fried rice
Value: 牛排
Synonyms: 牛排餐, 菲力牛排, steak, 排骨, 排餐
複合實體設計
當需要擷取複雜資訊時,可以組合多個實體:
Entity: @booking_info
Value: @sys.date @sys.time @sys.number 位
Example: 明天晚上 7 點 4 位
對話:
User: 我要訂明天晚上 7 點 4 位
→ 擷取:date=明天, time=19:00, party_size=4
建議:複合實體容易出錯,建議改用多輪對話分開詢問。
Context(上下文)深度解析
Context 是讓機器人「記住」對話的關鍵。沒有 Context,每次對話都像第一次。
Input Context / Output Context
Output Context:這個 Intent 觸發後,「設定」的 Context Input Context:這個 Intent 需要「存在」才能觸發的 Context
範例:訂位流程
Intent: start_booking
Input Context: (無)
Output Context: booking(lifespan: 5)
Response: 「好的,請問用餐日期是?」
Intent: provide_date
Input Context: booking
Output Context: booking_date(lifespan: 5)
Response: 「$date 收到,請問幾點用餐?」
Intent: provide_time
Input Context: booking_date
Output Context: booking_complete(lifespan: 2)
Response: 「$date $time,請問幾位用餐?」
效果:使用者必須先觸發 start_booking,才能觸發 provide_date。這樣可以防止使用者亂講話導致流程混亂。
Lifespan 生命週期設定
Lifespan 決定 Context 存活多少輪對話。
| Lifespan | 效果 |
|---|---|
| 0 | 立即移除這個 Context |
| 1 | 只存活這一輪 |
| 5 | 存活 5 輪(預設) |
| 10+ | 長時間記憶 |
設定建議:
- 短流程(2-3 步):Lifespan 設 3-5
- 長流程(5+ 步):Lifespan 設 10+
- 需要清除時:在結束 Intent 設定 Output Context lifespan = 0
多輪對話設計模式
模式 1:線性流程
開始 → 問日期 → 問時間 → 問人數 → 確認
│ │ │ │ │
└─ C1 ──┴── C2 ───┴── C3 ───┴─ C4 ───┘
每一步設定不同的 Context,確保順序執行。
模式 2:分支流程
┌─→ 內用流程 ─→ 問人數 → 問時間
開始 ──┤
└─→ 外帶流程 ─→ 問品項 → 問取餐時間
根據使用者選擇,進入不同的 Context 分支。
模式 3:隨時跳出
在任何步驟都可以說「取消」跳出流程:
Intent: cancel_booking
Input Context: booking
Output Context: booking(lifespan: 0) // 清除 Context
Response: 「已取消訂位,有其他需要嗎?」
Context 參數傳遞
Context 可以攜帶參數,讓後續 Intent 使用前面收集的資訊。
設定方式:
Intent: provide_date
Parameters:
- date: @sys.date
Output Context: booking
- 參數會自動帶入 Context
下一個 Intent 中使用:
Response: 您選的日期是 #booking.date
存取方式:
- 同名 Context:
$parameter_name - 指定 Context:
#context_name.parameter_name
插圖:Context 流程圖
場景描述: 一張流程圖展示 Context 在多輪對話中的運作。三個 Intent 方塊垂直排列,每個方塊顯示 Input/Output Context 設定。旁邊用時間軸表示 Context 的生命週期,標示 lifespan 數字遞減的過程。
視覺重點:
- 主要內容清晰呈現
必須出現的元素:
- 依據描述中的關鍵元素
需要顯示的中文字: 無
顏色調性: 專業、清晰
避免元素: 抽象圖形、齒輪、發光特效
Slug:
dialogflow-context-flow-diagram
Agent 架構設計
當專案變大,Intent 和 Context 的管理變得很重要。
意圖分類策略
用命名規則分類:
訂位相關:
- booking.start
- booking.provide_date
- booking.provide_time
- booking.confirm
- booking.cancel
查詢相關:
- query.order_status
- query.menu
- query.hours
通用:
- common.greeting
- common.thanks
- common.help
好處:
- 在 Console 中排列整齊
- 一眼看出 Intent 屬於哪個功能
- 團隊協作更清楚
對話流程規劃
在開始建 Intent 之前,先畫出對話流程圖:
┌───────────────────────────────────────────────┐
│ 對話開始 │
│ 「你好,我是 XX 客服」 │
└───────────────┬───────────────────────────────┘
│
┌───────────┼───────────┬───────────┐
▼ ▼ ▼ ▼
┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐
│ 訂位 │ │ 查詢 │ │ 客訴 │ │ 其他 │
└───┬───┘ └───┬───┘ └───┬───┘ └───┬───┘
│ │ │ │
▼ ▼ ▼ ▼
[流程] [流程] [轉人工] [FAQ]
設計原則:
- 主要功能不超過 5 個入口
- 每個流程控制在 3-5 步
- 永遠提供「返回」或「取消」選項
大型專案組織方式
方法 1:用 Context 前綴分組
booking_*:訂位相關 Context
order_*:訂單相關 Context
support_*:客服相關 Context
方法 2:考慮升級到 CX
如果 Intent 超過 50 個,建議改用 Dialogflow CX。CX 的 Flow 架構更適合大型專案。
詳細的 CX 教學請參考 Dialogflow CX 教學:從入門到進階。
插圖:Agent 架構規劃圖
場景描述: 一張心智圖風格的圖表,中央是 Agent 名稱,分支出四個主要功能區(訂位、查詢、客服、FAQ)。每個功能區下方列出相關的 Intent 名稱,用顏色區分不同分類。
視覺重點:
- 主要內容清晰呈現
必須出現的元素:
- 依據描述中的關鍵元素
需要顯示的中文字: 無
顏色調性: 專業、清晰
避免元素: 抽象圖形、齒輪、發光特效
Slug:
dialogflow-agent-architecture-planning
對話架構越做越亂?Intent 和 Context 的規劃需要經驗,架構不好會讓專案難以維護。預約架構諮詢,讓有經驗的人幫你設計可擴展的架構。
Conditional Response 條件式回應
讓機器人根據不同情況給出不同回應,更像真人對話。
根據參數動態回應
場景:根據人數給不同回應
方法 1:在 Response 中使用條件(ES 不直接支援)
方法 2:使用 Fulfillment
function handler(agent) {
const partySize = agent.parameters.party_size;
if (partySize > 10) {
agent.add('10 位以上需要預付訂金,請問可以嗎?');
} else if (partySize > 6) {
agent.add('好的,6 位以上幫您安排包廂,請問時間是?');
} else {
agent.add('好的,請問用餐時間是?');
}
}
根據 Context 切換回應
場景:已經問過日期,不要重複問
function handler(agent) {
const context = agent.context.get('booking_date');
if (context) {
const date = context.parameters.date;
agent.add(`您之前選的是 ${date},要改日期嗎?還是繼續?`);
} else {
agent.add('請問用餐日期是哪一天?');
}
}
實作範例
完整的條件式訂位流程:
exports.dialogflowWebhook = (request, response) => {
const agent = new WebhookClient({ request, response });
function handleBooking(agent) {
const { date, time, party_size } = agent.parameters;
// 檢查是否是週末
const bookingDate = new Date(date);
const isWeekend = bookingDate.getDay() === 0 || bookingDate.getDay() === 6;
// 檢查是否是熱門時段
const hour = parseInt(time.split(':')[0]);
const isPeakHour = hour >= 18 && hour <= 20;
if (isWeekend && isPeakHour && party_size > 4) {
agent.add('週末熱門時段大桌位置有限,建議提前 3 天預約。您確定要訂這個時段嗎?');
} else if (isWeekend) {
agent.add('週末用餐人較多,建議提早 10 分鐘到場。確認訂位嗎?');
} else {
agent.add(`好的,${date} ${time},${party_size} 位,確認訂位嗎?`);
}
}
const intentMap = new Map();
intentMap.set('booking.confirm', handleBooking);
agent.handleRequest(intentMap);
};
更多 Fulfillment 開發細節,請參考 Dialogflow Fulfillment 與 API 整合教學。
常見錯誤與除錯
錯誤 1:Intent 互相衝突
症狀:說 A 卻觸發 B
原因:Training Phrases 太相似
解法:
- 檢查兩個 Intent 的 Training Phrases
- 讓差異更明顯
- 使用 Input Context 區隔
錯誤 2:Context 過期
症狀:多輪對話中途斷掉
原因:Lifespan 太短
解法:增加 Lifespan,或在每個步驟都重新設定 Output Context
錯誤 3:參數擷取失敗
症狀:應該擷取到的參數是 null
原因:
- Entity 沒有覆蓋使用者的說法
- Training Phrases 沒有標註 Entity
解法:
- 增加 Entity 的同義詞
- 確認 Training Phrases 有正確標註
除錯技巧
使用測試面板:
- 在 Dialogflow Console 右側測試
- 點擊「Diagnostic Info」查看詳細資訊
- 檢查觸發的 Intent、參數值、Context 狀態
查看歷史記錄:
- 點擊左側「History」
- 查看過去的對話記錄
- 找出辨識失敗的案例,加入 Training Phrases
下一步
掌握 Intent 和 Context 後,你可以:
- 整合後端系統:Dialogflow Fulfillment 與 API 整合教學
- 串接 LINE Bot:Dialogflow LINE Bot 串接教學
- 學習 CX 版本:Dialogflow CX 教學:從入門到進階
插圖:Intent/Context 學習完成路線圖
場景描述: 一張路線圖,起點是「Intent/Context 基礎」,分成三條路徑:「後端整合」連接到 Fulfillment 文章、「平台整合」連接到 LINE Bot 文章、「進階架構」連接到 CX 教學文章。每條路徑用不同顏色標示。
視覺重點:
- 主要內容清晰呈現
必須出現的元素:
- 依據描述中的關鍵元素
需要顯示的中文字: 無
顏色調性: 專業、清晰
避免元素: 抽象圖形、齒輪、發光特效
Slug:
dialogflow-intent-context-next-steps
對話設計需要專業建議?
好的對話設計讓使用者覺得在跟真人聊天,不好的設計讓人想直接打電話找客服。
如果你需要:
- 規劃複雜的多輪對話流程
- 優化現有機器人的辨識率
- 設計自然流暢的對話體驗
- 處理大量 Intent 的架構規劃
預約 AI 導入諮詢,讓有經驗的對話設計師幫你打造真正好用的 AI 客服。
諮詢完全免費,我們會在 24 小時內回覆。
相關文章
Dialogflow CX vs ES 完整比較:2026 版本選擇指南
Dialogflow CX 和 ES 到底差在哪?本文詳細比較功能、費用、適用場景,附決策流程圖,幫你選對版本不踩雷、不花冤枉錢。
DialogflowDialogflow Fulfillment 與 API 整合完整教學
Dialogflow Webhook 開發完整教學:Cloud Functions 部署、DetectIntent API 呼叫、第三方 API 整合。含 Node.js、Python 範例程式碼與 GitHub 專案連結。
DialogflowDialogflow 完整指南 2026:從入門到實戰的 AI 對話機器人開發
完整解析 Google Dialogflow CX 與 ES 版本差異、Generative AI Agents、Vertex AI 整合、費用計算、LINE Bot 整合教學。從零開始打造企業級 AI 客服機器人,含 2026 最新生成式 AI 功能與實戰範例。