Files
dingtalk-workspace-cli/docs/drafts/im-chat-skill-refinement-plan.md

13 KiB
Raw Permalink Blame History

IM Chat Skill 精简与渐进加载优化方案

1. 背景

当前 im-chat-skill-hint-align 分支已经增强了 Chat Skill 的 Shortcut 路由、执行骨架、身份边界、查询与资源处理、低频原子回退和错误导航。与 Lark IM Skill 对比后,DWS 在 Agent 路由和执行约束上更直接,但根 Skill 仍存在以下问题:

  • 高频执行骨架与核心意图表重复。
  • Runtime Shortcut Catalog、leaf Schema 和 leaf Help 的读取规则在多处重复。
  • Shortcut 错误处理与 Workflow 错误导航重复。
  • 身份、ID 和三种置顶对象的边界分散在不同章节。
  • 缺少简短、集中且可复用的核心对象与查询结果语义。
  • Frontmatter 能力召回仍可扩展,但不能削弱 DING、邮件和班级群等产品边界。

本方案只调整根文件 skills/multi/dingtalk-chat/SKILL.md 的组织和必要语义,不把 API 手册、完整 Shortcut 清单或权限表重新放回根 Skill。

2. 修改目标

  1. 提高高频 Chat 意图的直接命中率,减少不必要的 Catalog、Schema 和 --help 调用。
  2. 提前建立渐进加载顺序,避免模型在高频任务中优先进入原子命令树。
  3. 补齐身份、核心对象、ID 和查询结果的必要语义,降低错误重试和 ID 混用。
  4. 合并重复 SOP,确保新增内容不会增加根 Skill 的总体 token。
  5. 保持参数、安全和完整 API 事实由 leaf Schema、Help 和 references 按需提供。

3. 设计原则

3.1 根 Skill 只保留决策必需信息

根 Skill 应负责:

  • Skill 触发范围和跨产品排除边界。
  • 渐进加载与能力选择顺序。
  • 高频意图到精确 Shortcut 的映射。
  • 身份、ID、幂等、分页、部分失败等跨命令不变量。
  • 低频能力的导航入口。
  • 错误恢复和停止条件。

以下内容继续留在 Schema 或 references:

  • 完整 Shortcut Catalog。
  • API Resources 全量列表。
  • 权限 scope 表。
  • 叶级参数全集和接口字段格式。
  • 只服务单个命令的实现细节。

3.2 渐进加载规则必须早于命令骨架

模型应在看到具体命令前,先知道何时直接执行、何时才加载额外上下文。但完整一级命令树不应提前,以免低频原子命令干扰高频 Shortcut 选择。

3.3 同一事实只保留一个权威位置

  • 高频 Shortcut 只出现在一张核心意图表中。
  • Catalog、Schema 和 Help 的读取顺序只定义一次。
  • 错误恢复与 reference 导航只定义一次。
  • 身份、对象和 ID 的公共边界集中定义,后续章节只引用,不重复解释。

4. 目标章节结构

1. Frontmatter
2. Preconditions
3. 加载与路由顺序
4. 核心对象与 ID
5. 核心意图与执行骨架
6. 统一发送
7. 查询、资源与卡片
8. 低频原子路由
   ├── 一级命令树
   ├── branch references
   └── 低频操作回退表
9. 错误恢复与按需 Reference
10. 跨产品协作

5. 具体修改

5.1 扩展 Frontmatter 产品能力

扩展 description 的正向能力召回,覆盖:

  • 单聊、群聊、建群、群搜索和群成员管理。
  • 消息发送、回复、转发、撤回、查询和聊天记录搜索。
  • 图片、文件和消息资源下载。
  • 表情回应、收藏、Pin、消息置顶和会话置顶。
  • 应用机器人、Webhook 和互动卡片。
  • 未读、红点、消息已读状态和会话分类。

同时保留明确排除:

  • DING、短信和电话转到 dingtalk-ding。
  • 邮件转到 dingtalk-mail。
  • 班级群转到对应的低频产品 Skill。
  • 找人本身由 dingtalk-contact 或 dingtalk-aisearch 负责,Chat 只消费真实人员 ID。

Frontmatter 只描述真实能力和路由边界,不加入参数、SOP 或 token 实现细节。

5.2 前移并合并渐进加载规则

将现有“Shortcut 发现”“Shortcut 执行契约”和“渐进加载与一级路由”的加载决策部分合并为紧随 Preconditions 的唯一章节:

## 加载与路由顺序

1. 已知高频意图:直接使用“核心意图与执行骨架”,不查 Help。
2. 已有匹配 Shortcut:直接执行;参数、约束或安全不确定时才查 leaf Schema。
3. 仅 Cobra flags 不确定时查 leaf `--help`。
4. 现有路由无法定位低频能力时,才查 Runtime Shortcut Catalog。
5. 没有 Shortcut 时,按需读取对应 branch reference,进入原子命令。

同一章节保留以下公共规则:

  • 路由优先级为 exact recipe/runnable script > public Shortcut > atomic command。
  • 不猜测 cli_path 或参数名称。
  • confirmation=user_required 时先确认,再添加 --yes。
  • 来源冲突时采用更安全的解释并报告契约漂移。
  • 命令已确定且参数清楚时直接执行,不为验证已知路径重复发现。

删除其他章节重复出现的 Catalog、Schema、Help 选择说明。

5.3 新增“核心对象与 ID”小表

增加不超过 8 行的表格,集中表达:

对象 核心标识与边界
人员 姓名必须先解析成唯一真实的 userId 或 openDingTalkId,名称不能作为 ID 传递
会话 使用真实 openConversationId / cid;群名只能用于 Shortcut 的目标解析
消息 使用真实 openMessageId / msgId,并保持与身份及会话一致
发送任务 openTaskId 只用于查询发送状态,不能替代消息 ID
Thread thread/topic ID 必须绑定真实会话,不跨会话复用
身份 current-user、app-bot 和 Webhook 是不同操作者,不能自动互换
状态 收藏、消息置顶、消息 Pin 和会话置顶作用于不同对象

新增后删除后文对这些边界的重复说明。

5.4 合并高频骨架与核心意图表

删除独立的“高频直接执行骨架”,将其全部合入唯一的“核心意图与执行骨架”表。表格固定为三列:

用户意图 精确 Shortcut 骨架 必须保留的执行边界

至少覆盖以下高频场景:

  • 姓名发单聊、群名发群消息。
  • user、bot、webhook 三种身份发送。
  • 建群、改群名、拉人和成员查询。
  • 拉取会话消息、查询详情、撤回和发送状态。
  • 关键词搜索、组合搜索和查询 @ 我的消息。
  • 群邀请链接和群机器人。
  • 会话置顶和收藏列表。
  • 查和某人的聊天记录。
  • 群消息翻页导出。
  • 机器人多群广播。

表中直接给出正确参数骨架;命中后照抄参数名,不先调用 --help。同一个 Shortcut 不再在其他表中重复列出。

5.5 补充统一身份规则

在“统一发送”开头加入统一规则:

身份决定真实操作者、可见范围和可用能力;同一目标使用 user、bot 或 webhook 时,结果和权限可能不同,禁止自动切换身份重试。

继续保留:

  • 发送前检查身份、目标、正文、标题、@、消息类型和附件路径。
  • 重试复用相同 --idempotency-key。
  • user、bot、webhook 的精确发送模板。
  • @ 占位符、新行和文件能力边界。

不加入 Lark 的 access token 类型说明。

5.6 补充查询结果与增强失败语义

在“查询、资源与卡片”中增加:

  • 发送者名称缺失时保留真实 ID,不猜姓名,也不自动扩大通讯录查询。
  • 可选增强字段缺失不代表主查询失败;增强请求失败时保留主结果并写入 per-item ledger。

继续保留:

  • --page-all 只在确需完整分页时使用。
  • 部分失败保留已有结果,禁止把不完整结果声明为完整。
  • 资源下载默认关闭,显式请求后才增加请求和本地输出。
  • 子消息资源优先使用子 messageId。
  • 输出路径、覆盖、HTTPS 和重定向安全限制。

5.7 拆分“渐进加载”与“一级命令树”

前移的只有加载决策。完整一级命令树及 branch references 改名为“低频原子路由”,保留在高频意图、统一发送和查询规则之后。

这样可以:

  • 防止高频任务优先进入 atomic branch。
  • 降低不必要的 Schema 和 Help 查询。
  • 继续为没有 Shortcut 的能力提供确定导航。

低频原子回退表继续保留收藏、编辑、外部群升级、群昵称、分类、共同群、群公告、群身份、置顶、未读、已读、授权、退群和解散群等差异化入口。

5.8 合并错误恢复与 Workflow 导航

将现有“Shortcut 错误处理”和“Workflow 与错误导航”合并为:

## 错误恢复与按需 Reference

只保留以下规则:

  • 路径或参数错误时,按 Catalog、Schema、Help 的既定顺序校正一次。
  • 始终从实际输出重新提取下游 ID。
  • 复杂消息任务按需读取 01-messaging.md。
  • Onboarding 按需读取对应 workflow。
  • 命令错误按需读取 chat-error-recovery.md。
  • 权限不足、歧义未消除、无结果或契约冲突时停止并报告。

删除其他位置重复的 01-messaging.md 和错误恢复入口。

5.9 保留跨产品协作边界

继续保留根 Skill 中不可由 Chat 自己完成的路由:

  • 人名解析到 Contact / AISearch。
  • DING、短信和电话到 Ding Skill。
  • 邮件到 Mail Skill。
  • 本地文件与已有 mediaId 的发送差异。

如果某项边界已经在 Frontmatter 或核心对象表中完整表达,正文只保留执行阶段真正需要的补充,不重复整段说明。

6. 删除与合并清单

当前内容 处理方式
“Shortcut 发现(按需)” 合入前置“加载与路由顺序”
“Shortcut 执行契约” 公共规则合入前置章节
“高频直接执行骨架” 删除,内容合入核心意图表
“渐进加载与一级路由”中的加载说明 前移并去重
完整一级命令树 保留,改放“低频原子路由”
“Shortcut 错误处理” 合入统一错误章节
“Workflow 与错误导航” 合入统一错误章节
分散的身份、ID、置顶说明 合入核心对象表或统一身份规则
重复的 01-messaging.md 入口 只保留一处

7. 不纳入本次修改

  • 不展开 97 个公开 Shortcut。
  • 不复制 Lark 的完整 API Resources 和权限 scope 表。
  • 不在根 Skill 中维护 leaf 参数全集。
  • 不引入与当前 CLI 不一致的新命令或参数。
  • 不改变 Schema、Help、Runtime Catalog 和 reference 的事实优先级。
  • 不通过增加默认查询、自动通讯录查询或默认资源增强来换取结果丰富度。

8. 实施顺序

  1. 更新 Frontmatter description,确认能力召回和排除边界。
  2. 合并并前移“加载与路由顺序”。
  3. 新增“核心对象与 ID”表,删除相应重复边界。
  4. 合并高频骨架和核心意图表。
  5. 补充统一身份规则。
  6. 补充查询结果和增强失败语义。
  7. 将一级命令树调整为后置的“低频原子路由”。
  8. 合并错误恢复与 reference 导航。
  9. 全文检查重复命令、重复 reference 和冲突参数。
  10. 运行 Skill 格式及相关策略测试,并用高频场景做静态路由验证。

9. 验收标准

9.1 内容与结构

  • 根 Skill 中只有一份 Catalog、Schema、Help 读取顺序。
  • 根 Skill 中只有一张高频意图与 Shortcut 骨架表。
  • 根 Skill 中只有一个错误恢复章节。
  • 01-messaging.md 的同类导航不重复。
  • 核心对象与 ID 表不超过 8 行数据。
  • 一级原子命令树位于高频路由之后。
  • Frontmatter 同时覆盖主要产品能力和明确排除边界。

9.2 执行行为

  • “发给某人”“发到某群”“查 @ 我”“改群名”等高频意图可直接选中已评审 Shortcut,不先查 Help。
  • 低频未知意图才触发 Runtime Shortcut Catalog。
  • 参数或安全不确定时读取 leaf Schema;只有 Cobra flags 不确定时读取 leaf Help。
  • user、bot、webhook 不被自动互换。
  • openTaskId、消息 ID、会话 ID 不混用。
  • 发送者名称或 reaction 等增强缺失时,不把主查询误判为失败。
  • 部分失败保留已有结果并明确报告 ledger/completeness。

9.3 Token 与维护成本

  • 修改后的根 Skill 不超过当前 211 行,并以不丢失必要路由和边界为前提尽量低于 195 行。
  • 文件单词数和字符数不高于修改前基线。
  • 新增内容通过删除重复 SOP 抵消。
  • 不新增完整 Shortcut、API 或权限清单。

10. 预期收益

  • 减少高频任务中的 --help 和重复 Schema 查询。
  • 降低因身份切换、ID 混用和发送者名称缺失导致的错误重试。
  • 让 Shortcut、Schema、Help、Catalog 和 references 各自保持单一职责。
  • 在不增加默认 token 和耗时的前提下,提高 Chat Skill 的选择准确率和执行成功率。
  • 降低后续新增 Shortcut 时同时维护多张表和多处规则的漂移风险。