aps-agent/docs/architecture/dialog.md

2.6 KiB
Raw Blame History

对话智能:多轮澄清 + 引导式排产向导

M-F 落地:听不懂就追问,缺数据就引导,小白也能排产。 代码:server/agent_core/dialog.py;接线在 gateway/app.py 的 chat 流(pre_route / post_route)。

管线位置

用户输入 → dialog.pre_route(session, text)      # 若有挂起澄清/向导态,优先按上下文解析
        → intent.recognize(...)                 # 快路正则 + LLM
        → dialog.post_route(session, result)    # 低置信/unknown → 澄清卡;wizard 意图 → 向导
        → workflow.handle_intent(...)           # 正常执行

会话态存内存 _SESSIONS[session_id]:clarify(挂起澄清)与 wizard(向导状态机)。

多轮澄清(clarify)

  • 触发:意图 unknown 或置信 0.5–0.85,且 guess_domain 能猜出领域(排产/订单/主数据/知识/技能/系统)。
  • 出「clarify」UI 块:top 候选意图按钮 + 文案「你是想…?」;下一句优先按澄清上下文解析—— 序号(「第一个」)、关键词、原文重述均可回填。
  • 若追问后仍无新领域线索,复用上一轮候选再问一次;两轮未解 → 放弃回兜底帮助。
  • 高置信(≥0.85)意图完全不走澄清,零额外延迟。

引导式排产向导(schedule.wizard,P0)

口令:「我要排产 / 帮我排产 / 怎么排产」。状态机每步 = 对话 + 表单卡(UI 块 type=wizard):

  1. readiness 检查(M-B,aps_domain/readiness.py)→ 全绿直接给「试排」按钮;
  2. 缺工艺路线 → 按产品名在 routing_templates + RAG 推荐模板(「看起来是车削类零件,推荐: 粗车→精车→钻孔→去毛刺」)→ 用户选定 → routing.template.apply P2 确认卡写入路线;
  3. 缺工时 → 逐工序追问「X 工序单件几分钟」→ flex.time.update P2;或「跳过用默认」标「推断」;
  4. 缺日历 → 提供默认单班日历一键写入;
  5. 齐备 → 自动试排(flex.schedule P1)+ 结果讲解。全程可「取消/跳过」。

权力边界

向导本身 P0(只读引导),所有写入动作复用既有 P2 通道(确认卡 → /api/actions/confirm), 无绕行——见 harness.md 的 schedule.wizard / routing.template.apply / flex.time.update。

测试

tests/golden/test_dialog_clarify.py(低置信→澄清→序号/关键词回填→两轮放弃)、 test_schedule_wizard.py(全绿直排 / 缺路线推荐模板 / 缺工时追问 / 缺日历默认 / 取消)。