# Summary
# Cues
# Notes
这是一个 **“系统模块设计” 的经典问题变体**——你问的是 **Policy (Dialogue Policy,对话策略/决策模块)** 一般怎么设计。这个部分在传统的任务型对话系统里非常关键,负责决定**系统在对话每一步要采取什么动作**。我帮你从历史到现代给个分层说明。
---
## 🌱 1. Rule-based(规则驱动)
最早期、最常见的方式。
- **设计思路**:
- 设定有限状态机(Finite-State Machine, FSM)或对话流程图。
- 每个状态表示对话进展,规则定义“如果缺少某个槽位,就问它;如果齐全,就调用API”。
- **优点**:可控、可解释、实现快。
- **缺点**:灵活性差,覆盖面有限,复杂任务时规则爆炸。
- **例子**:
- 状态机流程:
- 状态 A(没填出发地)→ 动作:询问出发地
- 状态 B(已填出发地,但没填目的地)→ 动作:询问目的地
---
## 🌱 2. Supervised Learning(监督学习)
后来逐渐有人用机器学习来“学”对话策略。
- **设计思路**:
- 收集大量对话数据,每个对话状态 → 标签化(下一步动作)。
- 用分类模型(SVM、决策树、神经网络)学“状态→动作”的映射。
- **优点**:不需要人工写规则,能泛化。
- **缺点**:依赖标注数据,动作空间有限。
- **例子**:
- 状态输入:{意图=订机票, 出发地=?, 目的地=上海}
- 模型预测输出:“AskDepartureCity”
---
## 🌱 3. Reinforcement Learning(强化学习)
在学术界很火,特别是 Deep Reinforcement Learning。
- **设计思路**:
- 把对话看作一个 Markov Decision Process (MDP)。
- 设计奖励函数(比如任务成功=+20,用户满意=+10,超时=-5)。
- 训练智能体探索如何选择动作。
- **优点**:能学到最优策略、可适应复杂场景。
- **缺点**:需要大量交互数据,训练不稳定。
- **例子**:
- 代理尝试问“你从哪里出发?” → 如果用户回答了,就得到正反馈。
- 代理尝试绕弯子瞎聊 → 得到负反馈。
---
## 🌱 4. 现代 LLM 驱动(大模型时代)
今天越来越多任务型对话直接用 LLM 来做 Policy,甚至把 **NLU、DST、Policy、NLG 融合到一个模型里**。
- **设计思路**:
- Prompt 里包含对话历史(DST),让模型直接预测下一步动作或回答。
- 动作可能是 **调用工具 / 填槽 / 输出自然语言**。
- **优点**:灵活,减少人工设计,泛化能力强。
- **缺点**:难以完全可控,可能出现幻觉,需要安全机制。
- **例子**:
- 对话上下文 → LLM 输出 JSON:
```json
{"action": "AskSlot", "slot": "出发地"}
```
- 或直接输出自然语言:“请问您是从哪出发的呢?”
---
## 🎯 通俗比喻
- **规则法**:像写剧本,所有台词提前写好,演员只能按剧本走。
- **监督学习**:像学徒看师傅聊天,记住在不同情况下该说啥。
- **强化学习**:像学徒被丢进客户现场,尝试各种说法,看能不能成交。
- **LLM**:像一个见多识广的销售员,靠经验灵活应对,但有时会胡说。
---
要不要我帮你画一个 **对比表格(规则 vs 监督学习 vs 强化学习 vs LLM)**,让不同设计方式的优缺点一眼就能看清?