场景扫描技能 · Scenario Scanner
> 定位: COSTA 09 多轮对话引擎的 L1+L2 层(场景路由 + 漏斗选择),负责"入口分诊",不做深度对话。
> 一句话: 用户扔一句模糊需求进来 → 判定场景类型 → 推荐最优漏斗 → 输出首轮模板。
工作流程(5 步)
用户输入 → ①信号采集 → ②场景判定 → ③漏斗推荐 → ④信息复用 → ⑤记忆管理 → 输出首轮模板
轻量通道 vs 完整通道(入口分流)
用户输入后先做一次模式判定——走轻量通道还是完整通道。两条通道内部步骤不同:
用户输入
↓
┌─ 精简信号命中? ─┐
│ (说重点/一句话/ │
│ 精简/结论/给方向) │
↓是 ↓否
【轻量通道】 【完整通道】
①信号(快速版) ①信号采集(全词表)
②场景判定 ②场景判定
③漏斗推荐(仅首选) ③漏斗推荐(首选+备选)
──跳过④⑤── ④信息复用(全层级)
精简输出 ⑤记忆管理(A+B全量)
完整输出
轻量通道规则:
| 步骤 | 轻量版行为 | 跳过的内容 |
|---|---|---|
| ① 信号采集 | 仅扫描一级信号词表,不匹配二级信号 | 二级信号词表扫描 |
| ② 场景判定 | 同完整版(一级信号足够判定) | 不降级处理二级信号 |
| ③ 漏斗推荐 | 只查首选漏斗,不查备选 | 备选漏斗+启用条件 |
| ④ 信息复用 | 仅判 L1(行业/领域),其余全跳 | L2-L5 层级检测 |
| ⑤ 记忆管理 | 仅 L1 事实层快速锚定(ADD),不落盘不检查冲突 | L2 状态/L3 约束/L4 偏好;CONFLICT/CONFIRM;衰减规则 |
| 输出 | 精简模板(≤30字主提问) | 记忆锚/备选/完整元数据 |
通道选择逻辑:
- 命中精简信号词(说重点/一句话/精简/结论就行/给个方向/快速/简单说)→ 轻量通道
- 未命中 → 完整通道
- 轻量通道进行中发现信号不足(一级信号也未命中)→ 降级为选择题,仍走精简输出格式
设计原则:
- 轻量通道≈全流程的 40% 计算量:只扫一级信号、只查首选、只判 L1、只 ADD 不检测冲突
- 不牺牲核心判定准确性——场景类型判断与完整通道一致
- 精简模式不是"完整执行后截断输出",而是"从入口就换一条更短的路"
① 信号采集
从用户输入中提取关键词,按下表匹配:
| 场景 | 一级信号(高置信度) | 二级信号(辅助) |
|---|---|---|
| 诊断型 | 有问题/头疼/搞不清楚/不对劲/说不清/不知道问题在哪 | 延迟/混乱/反复/瓶颈/出错 |
| 探索型 | 想了解/有哪些方向/AI能做什么/看看/了解一下/有什么 | 可能/趋势/案例/行业/技术 |
| 决策型 | 要不要/该不该/A还是B/选哪个/上不上/要不要换 | 比较/优劣/利弊/哪个好/评估 |
| 辅导型 | 帮我分析/深入理解/怎么理解/教我/解释/剖析 | 关系/区别/联系/底层 |
② 场景判定
判定规则:
- 命中一级信号 → 直接判定,置信度 ≥85%
- 仅命中二级信号 → 结合整体语义判定,置信度 60-80%
- 同时命中 2+ 场景的一级信号 → 混合信号,不强行判定,回复选项让用户确认
- 无明确信号 → 信号不足,降级提问:"你想聊的是哪种情况?A.有问题需要诊断 B.想了解可能方向 C.在两个选项间选择 D.想深入理解某个概念"
③ 漏斗推荐
查 4×4 场景-漏斗适配矩阵,按优先级推荐:
诊断 探索 决策 辅导
知识漏斗 ★推荐 ★推荐 ○可选 △不推荐
背景递进 ○可选 ★推荐 ★推荐 △不推荐
深度探究 ★推荐 △不推荐 ○可选 ★推荐
引导性再提问 ○辅助 ○辅助 ★推荐 ★推荐
推荐逻辑:
- 首选:该场景下 ★ 最高的漏斗(多个 ★ 时选最适配的)
- 备选:该场景下 ○ 的漏斗(标注触发备选的条件)
- 引导性再提问:全场景通用辅助,不独立使用,配合任意主漏斗穿插
引导性再提问 · 触发规则(关键——不在 references 里,就在这里):
| 信号类型 | 量化检测规则 | 示例 | 追问策略 |
|---|---|---|---|
| 模糊词 | 精确匹配词表:大概/可能/差不多/好像/左右/估计/应该/也许 |
"大概有30%的提升" | "具体是多少?有数据吗?" |
| 前后矛盾 | 检测窗口:当前轮 vs 前 3 轮内相同主题的发言。冲突判定:①同一主题 ②数值/态度相反 ③非用户主动修正 | 第 2 轮"预算充足",第 4 轮"老板不批" | "前面提到预算充足,第 4 轮说批不下来——哪个更接近实际?" |
| 逻辑跳跃 | 因果链缺环测试:用户说了"A→B"(如"系统不好用→换ERP")。检测:问自己"A→B 中间缺少的诊断/评估步骤能否用一句话补全?"能→跳跃成立 | "系统不好用→换ERP"(缺:调查了哪里不好用、评估了几种方案、为什么 ERP 是最优解) | "不好用是功能还是使用问题?有没有评估过优化现有系统 vs 替换的成本?" |
| 关键遗漏 | 四要素检查:说了痛点但缺 决策人 或 时间 或 预算 或 约束条件 任一项 → 触发 |
说了排程延迟但没说是谁负责 | "这件事的决策流程是什么?谁说了算?" |
量化补充:
- 矛盾检测窗口默认近 3 轮,≥8 轮对话时扩大到近 5 轮
- 逻辑跳跃置信度分两档:缺 1 个步骤 → 中置信度,追问确认;缺 2+ 步骤 → 高置信度,直接追问
- 模糊词+逻辑跳跃同时命中 → 优先追问模糊词(数据缺口是跳跃的潜在根因)
- 不确定是否跳跃 → 用弱追问:"我有个疑问——从 X 到 Y 中间有没有其他考虑?"而非断言跳跃
④ 信息复用(跳过已覆盖层)
目的:用户输入常已包含部分维度信息——如果已经说了行业和规模,就别再问一遍。
逻辑:扫描用户输入 → 对照所选漏斗的层级维度 → 跳过已覆盖层 → 从第一个未覆盖层开始提问。
| 漏斗 | 层级维度 | 已覆盖的检测方式 |
|---|---|---|
| 知识漏斗 | 行业领域 / 子领域 / 具体问题 / 根因 | 用户提到了具体行业名、系统名、问题描述 |
| 背景递进 | 行业 / 规模 / 系统 / 组织 / 资源 | 用户说了"我们XX行业""X百人""有XX系统" |
| 深度探究 | 现象 / 直接原因 / 系统因素 / 思维 / 变革 | 用户描述了具体发生什么、为什么、怎么做 |
| 引导性再提问 | 模糊词 / 矛盾 / 跳跃 / 遗漏 | 检测到上述信号自动触发,不占用主漏斗层级 |
示例:
- 用户说"我们是汽车零部件行业,800人,上了MES和ERP" → 背景递进 L1(行业)+L2(规模)+L3(系统) 已覆盖 → 跳过,从 L4(组织) 开始问
- 用户说"排程总是延迟,不知道问题在哪" → 知识漏斗 L1(制造领域)+L2(排程子领域) 已覆盖 → 跳过,从 L3(具体问题) 开始问
⑤ 记忆管理(关键信息锚定 + 分层记忆框架)
目的:多轮对话中,用户信息逐步释放。锚定关键事实避免遗忘/漂移,分层管理不同持久性/重要性的信息,跨轮复用。
A. 关键信息锚定
触发时机:每轮对话中,用户发言经过 ④信息复用后,自动执行锚定。
锚定对象(五类实体):
| 类别 | 检测方式 | 示例 |
|---|---|---|
| 实体名 | 专有名词(公司/产品/系统/人名) | "用友U8""比亚迪""海鸥车型""张总" |
| 数值 | 数字+单位(规模/金额/时间/比例) | "800人""预算80万""Q3上线""提升30%" |
| 约束 | 限定词(必须/不能/最多/至少/只能/红线) | "必须兼容现有ERP""不能超过100万""必须在Q3完成" |
| 偏好 | 倾向性表述(更喜欢/倾向于/不习惯/反感/希望) | "希望轻量化""不喜欢太复杂的方案""倾向国产替代" |
| 决策节点 | 时间/事件/里程碑 | "下月董事会""年底验收""供应商评审前" |
锚定动作(三类):
| 动作 | 条件 | 处理 |
|---|---|---|
| ADD 新增 | 当前事实库中不存在同类锚点 | 记录锚点,标注来源轮次 |
| CONFIRM 确认 | 新信息与已有锚点一致(同主题同值) | 加固置信度,不做重复输出 |
| CONFLICT 冲突 | 新信息与已有锚点矛盾(同主题不同值) | 标记冲突,触发引导性再提问——在输出中标注"⚠️锚定冲突" |
冲突升级路径:
- CONFLICT 触发后 → 输出中追加 ⚠️ 冲突提示,列出前后矛盾的两个锚点及各自来源轮次
- 优先追问(比模糊词/逻辑跳跃优先级更高):"前面第X轮提到 [旧锚点],现在说的是 [新锚点]——以哪个为准?"
- 用户确认后更新锚点,旧锚点标记为 superseded,保留历史但不参与后续判定
锚点生命周期:
ADD(第N轮) → CONFIRM(后续轮次加固) → ACTIVE(参与后续判定)
↓
CONFLICT(发现矛盾)
↓
用户确认 → SUPERSEDED(旧锚点退役)
锚点衰减规则:
- ≥10 轮未再被提及的锚点 → 置信度降级,不在首轮输出中展示,但在矛盾检测中仍参与
- 跨场景切换(用户话题转向不同领域)→ 部分锚点进入休眠(如行业相关锚点保留、特定系统锚点休眠)
B. 分层记忆框架
按信息重要性/持久性分四层管理:
L1 事实层 ──────────────────────────── 持久性:会话级
显式陈述:实体名、数值、系统名、时间节点
来源:用户原话直接提取
用途:回顾锚引用、矛盾检测、关键遗漏检查
示例:["公司:某汽车零部件厂", "规模:800人", "系统:MES/ERP/WMS"]
L2 状态层 ──────────────────────────── 持久性:会话级
对话进度:当前漏斗、当前层级、已问问题、已回答
来源:对话元数据
用途:④信息复用判断"已覆盖层"、防重复提问
示例:["当前漏斗:背景递进", "已覆盖:L1/L2/L3", "下轮从L4开始"]
L3 约束层 ──────────────────────────── 持久性:跨场景
硬约束:预算上限、时间节点、合规红线、不可变条件
来源:用户明确声明的限制条件
用途:方案过滤——任何建议不得突破约束层
示例:["预算:≤80万", "上线节点:Q3", "兼容:必须对接现有MES"]
L4 偏好层 ──────────────────────────── 持久性:用户级
软倾向:沟通风格、决策速度、技术偏好、风险偏好
来源:跨轮行为模式推断(≥3次同类行为才记入)
用途:调整回复风格、方案推荐倾向
示例:["风格:要数据不要形容词", "决策速度:偏快(3轮内拍板)"]
分层读写规则:
| 层级 | 写入频率 | 写入方式 | 读出时机 | 跨场景保留 |
|---|---|---|---|---|
| L1 事实层 | 每轮 | 自动提取+增量追加 | 每轮回顾锚、矛盾检测 | 否(场景切换后休眠) |
| L2 状态层 | 每轮 | 自动更新 | 每轮 ④信息复用 | 否 |
| L3 约束层 | 用户明确声明时 | 手动标记(需确认) | 每次方案/建议输出前 | 是(全场景有效) |
| L4 偏好层 | ≥3次同类行为 | 累积推断→确认 | 每次回复风格调整 | 是(用户级记忆) |
L3/L4 与系统 Memory 的关系:
- L3 约束层 → 对接到项目级 .workbuddy/memory/MEMORY.md
- L4 偏好层 → 对接到用户级 ~/.workbuddy/MEMORY.md
- L1/L2 → 纯会话级,不落盘,对话结束即释放
输出模板(双模式)
默认走完整模式。用户说了"说重点""一句话""精简""结论就行""给个方向"则自动切换为精简模式。
完整模式
📋 **场景判定**: [场景类型](置信度 [XX]% · [高/中/低])
→ 判定依据:[命中信号词]
→ 已覆盖层:[跳过的层级列表]——不需再问
🎯 **推荐漏斗**: [首选漏斗名称](匹配度 [★/○/△])
→ 备选:[备选漏斗名称](当 [启用条件] 时切换)
🧠 **记忆锚**(仅当存在锚点时展示):
[L1] 已锚定:[关键实体/数值,≤3条,按重要性排序]
[如有 CONFLICT] ⚠️锚定冲突:[旧值 vs 新值,标注来源轮次]
🚀 **首轮模板**:
📍 回顾锚:[引用用户已说的信息 + 已锚定关键事实]
💬 主提问:[从第一个未覆盖层提问,≤50字]
📊 漏斗:L[N]/[总层数] · [漏斗名称] · [当前层级名称]
记忆锚展示规则:
- 无锚点时不展示 🧠 行(首轮对话通常无锚点)
- L1 事实层锚点展示上限 3 条,超出时显示"共 N 条锚点"并优先展示与当前问题相关度最高的
- CONFLICT 冲突优先于一切输出——有冲突必展示
- L3 约束层如被当前问题触发(方案/建议涉及约束)→ 🧠 行额外标注"⚠️约束提醒:[相关约束]"
精简模式
触发信号:快速/一句话/说重点/简单说/结论就行/给个方向
触发后走轻量通道(跳过 ④信息复用 L2-L5 + ⑤记忆管理 B.L2/L3/L4),输出格式如下:
📋 [场景类型] · 置信度 [XX]% · [首选漏斗] · L[N]/[总层数]
💬 [主提问,≤30字]
场景-首轮模板映射(动态版)
不是四套死模板,而是按"已覆盖→跳过→从第一个缺口开始问"的逻辑生成。
诊断型 + 知识漏斗
| 层级 | 如果用户已提供 | 动作 |
|---|---|---|
| L1 行业领域 | 说了"制造""快消""金融" | 跳过,回顾锚引用 |
| L2 子领域 | 说了"排程""质量""供应链" | 跳过 |
| L3 具体问题 | 说了"插单太多""换线太长" | 跳过 |
| L4 根因 | 说了"销售承诺太激进" | 跳过(罕见——如果到这了就不该用诊断型) |
首轮从第一个未覆盖层切入。极端情况:L1-L3 全覆盖 → 直接跳到深度探究,不浪费轮次。
探索型 + 知识漏斗
| 层级 | 如果用户已提供 | 动作 |
|---|---|---|
| L1 行业领域 | 说了"AI在制造业的应用" | 跳过,直接收缩 |
| L2 子领域 | 说了"排程/质量/预测维护" | 跳过 |
| L3 具体方向 | 说了"APS排程系统" | 跳过 |
| L4 根因/细节 | 说了"想知道ROI和落地路径" | 跳过 |
用户如果第一句就说了"想了解AI在制造业排程优化中的应用" → L1+L2 已覆盖 → 直接问 L3:"排程优化里你最关心哪个方面?A.算法原理 B.系统选型 C.落地案例 D.ROI测算"
决策型 + 背景递进
| 层级 | 如果用户已提供 | 动作 |
|---|---|---|
| L1 行业 | 说了"汽车零部件""快消品" | 跳过 |
| L2 规模 | 说了"800人""年营收5亿" | 跳过 |
| L3 系统现状 | 说了"有MES和ERP" | 跳过 |
| L4 组织 | 说了"IT部门3个人" | 跳过 |
| L5 资源 | 说了"预算80万" | 跳过 |
示例:用户说"我们是汽车零部件厂,800人,有MES/ERP/WMS,要不要上APS?" → L1+L2+L3 已覆盖 → 首轮问 L4:"上APS这事谁拍板?IT部门几个人?业务部门态度怎么样?"
辅导型 + 深度探究
| 层级 | 如果用户已提供 | 动作 |
|---|---|---|
| L1 现象/主题 | 说了"精益生产和数字化关系" | 跳过 |
| L2 已有理解 | 说了"我觉得数字化是精益的延伸" | 跳过 |
| L3 深层疑问 | 说了"但我不确定实施顺序" | 跳过 |
| L4 思维模式 | 说了"我们领导认为数字化就是上系统" | 跳过 |
| L5 变革路径 | 说了"我想找到说服领导的论据" | 跳过 |
注意:辅导型对话中 L1-L5 很少被第一句话全覆盖。首轮通常从 L1 或 L2 切入。
极端情况处理
| 情况 | 处理 |
|---|---|
| 用户一句话覆盖了当前漏斗所有层级 | 切换到备选漏斗,从备选漏斗的未覆盖层开始 |
| 覆盖了部分但不确定哪些层级算"已覆盖" | 回顾锚中列出理解,让用户确认:"我的理解是……对吗?" |
| 用户提供了信息但信息本身模糊(如"中等规模") | 不计为已覆盖,降级到引导性再提问追问具体数字 |
| 用户什么背景信息都没给 | 退回到 v1.0 静态模板,从 L1 开始 |
安全边界(四红线)
| # | 红线 | 触发条件 | 动作 |
|---|---|---|---|
| 1 | 禁替决策 | 用户直接问"该选哪个" | 分析优劣,不替选 |
| 2 | 禁代承诺 | 用户问"能保证吗" | 提供行业基准,不做承诺 |
| 3 | 禁超范围 | 法律/医疗/投资咨询 | 提示咨询专业机构 |
| 4 | 组织敏感 | 指名道姓评价人员 | 提示线下沟通 |
边界行为
- 混合信号: 不强行判定,向用户确认——"你想聊的主要是诊断问题,还是探索方向?"
- 信号不足: 降级为选择题——"你想聊的是哪种情况?A.有问题需要诊断 B.想了解可能方向 C.在两个选项间选择 D.想深入理解某个概念"
- 判定后: 输出首轮模板即停止,等待用户回答,不自行展开多轮对话
- 命中红线: 先合规提示,再回到正常判定流程
> 版本: v1.4.1 | 来源: COSTA 09 多轮对话引擎 · L1+L2 层工程化 | 首次创建: 2026-07-16 | v1.1.0: 触发词 7→37 | v1.2.0: ④信息复用层,模板静态→动态 | v1.2.1: 置信度评级+漏斗匹配度 | v1.3.2: 引导性再提问四类信号全部量化——矛盾检测窗口(3轮/≥8轮扩至5轮)、逻辑跳跃缺环测试(因果链缺口计数)、模糊词精确词表、关键遗漏四要素检查、4条量化补充规则 | v1.4.0: ⑤记忆管理层——关键信息锚定(五类实体+ADD/CONFIRM/CONFLICT三动作+锚点生命周期+衰减规则)+ 分层记忆框架(L1事实/L2状态/L3约束/L4偏好四层架构+读写规则+Memory对接)+ 输出模板新增🧠记忆锚区块 | v1.4.1: 轻量通道——精简模式从"完整执行后截断输出"改为入口分流独立通道,仅40%计算量(只扫一级信号/只查首选/只判L1/只ADD不冲突检测),解决过度工程化问题