# 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)**,让不同设计方式的优缺点一眼就能看清?