操作助手「快捷一句」动态排序机制
操作助手面板底部的三个快捷一句按钮(点击后会切换到对应模块并发送一条预设提问)不应长期固定不变,而应随用户当前所在模块、是否已选工作区以及近期在助手里的对话内容变化,优先展示更可能下一步会点的入口。
来源 docs/core-mechanisms/工作区帮助快捷一句.md
目标
操作助手面板底部的三个快捷一句按钮(点击后会切换到对应模块并发送一条预设提问)不应长期固定不变,而应随用户当前所在模块、是否已选工作区以及近期在助手里的对话内容变化,优先展示更可能下一步会点的入口。
用户侧感受:同一产品里,助手「猜你想接着做什么」会跟着场景变;实现上仍是本地、可解释的排序,而非黑盒模型。
信号与打分(可解释)
实现集中在 client/web/src/workspaceHelpQuickActions.ts,函数 pickWorkspaceHelpQuickActions(ctx, limit)。
输入上下文 WorkspaceHelpQuickContext:
| 字段 | 含义 |
|---|---|
activeModule | 当前主界面模块(与左侧控制台一致) |
hasWorkspace | 是否已选择工作区 |
messages | 操作助手内近期对话(取末尾若干条参与关键词匹配) |
对候选池中每条候选累加分数后排序,取前 limit 条(默认 3),且同一 nav 只出现一次。
当前使用的特征大类:
- 模块互补
根据 activeModule 查表 MODULE_COMPLEMENT,对「更可能作为下一步」的其它模块加分;对当前模块对应候选略减分(用户已在该屏,优先推相邻任务)。
- 无工作区可达性
与 canWorkspaceHelpNavigate 一致:未选工作区时仅允许 chat / workspace / im / me。候选在打分前会先过滤,避免出现无法导航的芯片。
- 关键词命中
将近期消息拼成一段文本(小写),用多组正则匹配「工作区 / 技能 / 账号 / 助手 / 对话」等意图词,对对应 nav 加权。
- 会话深度
用户发言轮次较多时,略提高「接着对话」类候选权重,便于连续追问。
- 业务先验
例如:无工作区时略抬高与工作区创建相关的候选;有工作区时略抬高与技能相关的候选(具体数值见源码常量)。
同分情况下按固定 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。
扩展与替换(预测服务化)
若后续要接入服务端排序或小模型:
- 保持
WorkspaceHelpWidget只依赖「得到最多 3 条{ nav, label, prompt }」的契约。 - 将
pickWorkspaceHelpQuickActions替换为异步数据源(例如fetchQuickActions(ctx)),在加载完成前可继续沿用本地排序作为占位或骨架屏。 - 埋点建议:记录芯片
id/nav的展示与点击,用于反馈调权或训练;可与现有trackHelpActionEvent体系对齐(见帮助动作链接.md中的扩展说明)。
相关文档
- 帮助动作链接.md:帮助回答内的可执行链接与动作分发
- ../产品规格.md §4.1.5:产品侧用户表述真值