← 全部文档

操作助手「快捷一句」动态排序机制

操作助手面板底部的三个快捷一句按钮(点击后会切换到对应模块并发送一条预设提问)不应长期固定不变,而应随用户当前所在模块、是否已选工作区以及近期在助手里的对话内容变化,优先展示更可能下一步会点的入口。

来源 docs/core-mechanisms/工作区帮助快捷一句.md

目标

操作助手面板底部的三个快捷一句按钮(点击后会切换到对应模块并发送一条预设提问)不应长期固定不变,而应随用户当前所在模块、是否已选工作区以及近期在助手里的对话内容变化,优先展示更可能下一步会点的入口。

用户侧感受:同一产品里,助手「猜你想接着做什么」会跟着场景变;实现上仍是本地、可解释的排序,而非黑盒模型。

信号与打分(可解释)

实现集中在 client/web/src/workspaceHelpQuickActions.ts,函数 pickWorkspaceHelpQuickActions(ctx, limit)。

输入上下文 WorkspaceHelpQuickContext:

字段含义
activeModule当前主界面模块(与左侧控制台一致)
hasWorkspace是否已选择工作区
messages操作助手内近期对话(取末尾若干条参与关键词匹配)

对候选池中每条候选累加分数后排序,取前 limit 条(默认 3),且同一 nav 只出现一次。

当前使用的特征大类:

  1. 模块互补

根据 activeModule 查表 MODULE_COMPLEMENT,对「更可能作为下一步」的其它模块加分;对当前模块对应候选略减分(用户已在该屏,优先推相邻任务)。

  1. 无工作区可达性

与 canWorkspaceHelpNavigate 一致:未选工作区时仅允许 chat / workspace / im / me。候选在打分前会先过滤,避免出现无法导航的芯片。

  1. 关键词命中

将近期消息拼成一段文本(小写),用多组正则匹配「工作区 / 技能 / 账号 / 助手 / 对话」等意图词,对对应 nav 加权。

  1. 会话深度

用户发言轮次较多时,略提高「接着对话」类候选权重,便于连续追问。

  1. 业务先验

例如:无工作区时略抬高与工作区创建相关的候选;有工作区时略抬高与技能相关的候选(具体数值见源码常量)。

同分情况下按固定 TIE_ORDER 稳定排序,避免界面抖动。

候选池与文案

候选在源码数组 CANDIDATES 中维护,每条包含 id、nav、以及 label / prompt(可为函数,按 hasWorkspace 等切换,例如无工作区时「先建工作区」类文案)。

当前 nav 覆盖:workspace、me、skills、agents、workflows、apps、im、chat(另有模块类型 scheduled / cs 参与互补打分,候选池本身不含这两项)。未选工作区时仅允许 chat / workspace / im / me。实际展示条数由过滤与排序决定。

前端接入点

  • 排序与过滤:pickWorkspaceHelpQuickActions()
  • 消费组件:client/web/src/WorkspaceHelpWidget.tsx

使用 useMemo 依赖 activeModule、hasWorkspace、messages,在面板内对话变化时重算三个按钮。

  • 传入当前模块:client/web/src/App.tsx 将 activeModule 作为 props 传入 WorkspaceHelpWidget。

扩展与替换(预测服务化)

若后续要接入服务端排序或小模型:

  1. 保持 WorkspaceHelpWidget 只依赖「得到最多 3 条 { nav, label, prompt }」的契约。
  2. 将 pickWorkspaceHelpQuickActions 替换为异步数据源(例如 fetchQuickActions(ctx)),在加载完成前可继续沿用本地排序作为占位或骨架屏。
  3. 埋点建议:记录芯片 id/nav 的展示与点击,用于反馈调权或训练;可与现有 trackHelpActionEvent 体系对齐(见 帮助动作链接.md 中的扩展说明)。

相关文档