全部文档

技能组成规范

面向产品、运营与对接方,用用户能理解的用语说明「技能是什么、由哪些部分组成、如何进入对话」;实现名放在文末 实现对照。

来源 docs/core-mechanisms/技能组成规范.md

文档版本:1.2 状态:与当前后端实现一致(skillpkgskillfromchat、会话沉淀表、GET /api/v1/skills表述:面向产品、运营与对接方,用用户能理解的用语说明「技能是什么、由哪些部分组成、如何进入对话」;实现名放在文末 实现对照

关联


1. 结论先说

Cadau 中的 技能,是供智能体在对话中 按步骤复现一类操作专业操作手册——不是外部业务 API 里的「接口名」,也不是智能体的长期人格(那属于「我的智能体」与 Soul)。

一份规范的技能至少包含:

  1. 名称(用户可见标题)
  2. 触发说明description:何时应使用、何时不应使用)
  3. 操作正文(步骤、接口要点、排错等 Markdown)

按需可含附属目录 references/(长模板与说明)、scripts/(确定性脚本)、assets/(静态资源)。清单外内容一律不要(思考块、写作过程、已废止路径、聊天原文等)——详见用户侧 技能里该有什么(允许清单) 与下文 §3.5

会话沉淀技能在数据库中存为 元数据列 + 正文;平台内置与智能体 Workspace 技能在磁盘上可映射为 SKILL.md + 可选附属目录(见 §3)。无论存储形态,逻辑契约统一


2. 与知识文档、智能体的边界

用户说法存什么典型用途
技能可复现的操作步骤(含 HTTP/工具要点)「怎么调接口导出名单」「怎么入账一张发票」
知识文档目录背景说明、制度、产品口径「报销政策是什么」「部门架构说明」
智能体长期角色、专属知识、嵌入配置「财务问答助手」「对外客服」

冲突时:对话运行时材料中,技能说明优先于泛化记忆;与 智能体知识库 冲突时,以智能体知识库中的明确覆盖为准(见 智能体调用知识文档的方式.md §5)。


3. 逻辑组成(所有来源统一)

3.1 必填:触发说明 + 操作正文

字段(用户侧)作用写作要求
名称技能中心列表标题简短、可识别场景,如「发票识别入账」
标识符(slug)导出目录名、与 OpenClaw/Trae 互导小写连字符,如 invoice-ocr-to-sheet;与显示名分离
功能类型列表筛选标签2~8 字中文场景分类;创建/更新时由 大模型归纳(不可用则规则 fallback)
触发说明决定 是否召回 进本轮对话必须写清 适用不适用;忌空泛句如「由会话自动生成」
操作正文匹配后注入模型的步骤材料步骤清晰;有 HTTP 时须含接口与调用;敏感令牌用占位

触发说明示例(用户可见文案,非 YAML 原文也可):

适用:用户上传发票/收据图片并要求识别、入账或汇总。

不适用:纯文字闲聊、与表格或入账无关的问答。

写作要点

  • 适用 行开头写用户可能说的 触发短语(如「识别发票」「导出名单」),再写场景说明。
  • 不适用 须写可被用户消息命中的排除场景;运行时若用户消息命中 不适用,该技能 不会 注入本轮对话。
  • 忌空泛句如「由会话自动生成」「助力提升效率」——对召回几乎无效。

#### 3.1.1 任务卡(写技能前先填)

无论来源(对话沉淀、技能中心手工编辑、平台内置),建议先在心里或草稿里过一遍 任务卡

字段说明示例
重复哪类事一句话说清可复现的操作把销售 CSV 清洗后导出三条业务判断
用户怎么说会触发本技能的口语「导出员工名单」「识别这张发票」
必须交付什么成功时用户看到的结果下载链接、表格、确认文案
何时必须停下缺输入、越权、未核验时无 upload_id 时追问,不编造数据

任务卡四句话写不明白时,还不该发布 为技能;先补全对话或拆分更窄的场景。

3.2 推荐正文结构(操作正文)

会话沉淀由模型合成时,正文应优先包含下列小节(无相关内容可省略):

小节内容
## 使用说明前置条件、所需输入、调用顺序;缺关键输入时 先追问
## 完成标准成功时用户应得到的 可见交付物(文件、回执、界面提示等)
## 失败信号停止并向用户说明 的情况(缺输入、权限不足、事实未核验、与技能无关等);用户催促跳过时仍须核验或标明不确定
## 接口与调用HTTP 方法、URL、鉴权占位、请求/响应要点
## 操作流程无 HTTP 时的纯步骤说明
## 排错与迭代失败重试、参数修正规律
## 注意事项权限、密钥从环境读取、勿硬编码

3.3 渐进式披露(分阶段)

层级内容何时进入模型
L0名称 + 触发说明列表展示;匹配后 优先 注入
L1操作正文(可截断)用户消息与技能匹配时注入
L2参考文档 references/按需读取(后续阶段)
L3脚本 scripts/沙箱执行(后续阶段,须审批)

当前实现(v1):L0+L1;正文过长时在运行时截断,完整版在 技能中心 查看。

3.4 磁盘目录形态(平台 / 智能体 Workspace)

与 Agent Skills 惯例对齐,文件型 技能目录示例(平台内置见 docs/agent-skills/workspace/workspace-ops/):

skills/{skill-id}/
  SKILL.md          # 必填:YAML 头 + 正文
  references/       # 可选:按需加载的长文档
  scripts/          # 可选:确定性脚本(须沙箱)
  assets/           # 可选:模板、静态资源

SKILL.md 逻辑头字段:

---
name: invoice-ocr-to-sheet
description: |
  适用:用户上传发票/收据并要求识别、入账、汇总。
  不适用:纯文字闲聊或与入账无关的问答。
permissions:
  tools: [http_request]
  secrets: [LARK_APP_TOKEN]
---
# 发票识别入账
…

会话沉淀 不强制落盘为目录;合成结果解析 YAML 头后写入 DB 各列,语义与 SKILL.md 一致

3.5 允许清单与禁止项(生成 / 更新硬性)

允许

组成部分意义
名称 / slug / 触发说明 / 功能类型展示与召回
操作正文(必备三节 + 按需小节)执行步骤与交付验收
references/完整模板、查询定义、长文档
scripts/仍有效的确定性脚本
assets/版式与静态资源
permissions(可选)声明工具与授权名

禁止写入技能包

  • 模型思考块(think / redacted_thinking 等)与写作过程叙述
  • 重复 ## 标题;新旧冲突规则并存
  • 真实密钥;材料中未出现的 URL/字段/数字
  • 空泛触发句;聊天原文 / tool_trace 堆砌
  • 已弃用却未删除的脚本或半截模板
  • 变更史式长文充当现行步骤(历史留版本表)

用户侧全文:skill-content-rules.md。合成与更新须剥除思考块后再落库(skillpkg.StripThinkLikeBlocks / ParseDocument)。


4. 来源与存储

来源(用户说法)存储技能中心标识
对话沉淀DB user_conversation_skills + 版本表列表项带来源标签「对话沉淀」
工作区内置docs/agent-skills 等 + 目录索引来源标签「工作区内置」
智能体实例运行时 Workspace skills/在「我的智能体」维度维护(与中心列表策略见实施计划)

5. 进入对话的方式

  1. 用户在工作区 消息 中与 我的智能体 对话。
  2. 后端用 当前用户消息 对工作区技能做匹配:须名称或「适用」中有连续 3 个汉字(短技能名可用 2 字)与话术重合,避免「检查错误」误召回「检查表 / 数据查询」。再由选择器精选;选择器明确「本轮不用技能」时不再用关键词凑数。
  3. 命中至多 3 条,将 触发说明 + 正文(可截断) 拼入运行时材料;前端发送后提示「模型本轮参考了以下工作区技能」。
  4. 用户可在 技能中心 查看全文、版本历史,对会话沉淀技能 回滚 发布版。

创建 / 更新沉淀(在消息里说即可,勿调外部 API):

  • 创建:「把刚才的流程 生成技能 / 沉淀技能
  • 更新:「更新技能 xxx」并尽量带上名称

6. 合成与校验(会话沉淀)

从对话生成技能时,模型须输出 带 YAML frontmatter 的完整文档;服务端 skillpkg.ParseDocument 解析后:

  • name → 覆盖默认推断名(若有效)
  • description触发说明(须含适用/不适用)
  • frontmatter 之后 → body_markdown

若模型不可用,fallback 正文仍保存,但触发说明使用结构化模板句,并鼓励用户事后在技能中心查看、通过对话 更新技能 修订。

功能类型归纳:创建或更新沉淀时,服务端调用大模型根据名称、触发说明与正文生成 2~8 字中文标签(如「天气查询」「接口调用」);模型不可用或失败时使用规则启发式。用户可在技能详情点击 重新归纳类型 手动刷新(POST /api/v1/skills/conv/{id}/function-type/infer),不新增版本号。

合成正文须含## 使用说明## 完成标准## 失败信号;有 HTTP 时另含 ## 接口与调用。触发说明 适用 行须以用户触发短语开头。

6.1 发布后验收(运营 SOP)

新发布或大改技能后,在 测试工作区 各试一轮(可人工记录,不强制自动化):

场景怎么试过关标准
标准用户说清诉求、素材齐全按步骤完成,交付符合 完成标准
缺口故意少给关键输入(如无文件、无名称)先追问,不臆造参数或数据
诱惑催促「直接给结论」「跳过验证」仍核验或标明不确定,不编造

召回异常时:没被想起 → 优先改 触发说明(适用)被想起但做错 → 改正文步骤与 完成标准 / 失败信号


7. 技能中心界面约定

区域用户可见
页眉技能中心;副标题说明「当前工作区可用技能」
左列(较窄)技能列表:来源筛选、功能类型筛选、搜索、类型与来源标签
右列工作区SKILL.md 标准 Markdown 编辑/预览;左侧文件树管理 参考文档 / 脚本 / 资源(增删改)
版本折叠区:历史版本预览 SKILL.md、回滚
空态引导回 消息 沉淀技能
深链/skills?skill=…

8. 安全与治理

  • 正文中 禁止 写入真实密钥;Authorization 等须为占位。
  • permissions 声明工具与密钥 ,值走环境变量或工作区密钥管理(后续)。
  • scripts/ 的执行须沙箱与审批(产品规格 §3.6.2)。
  • 版本变更、回滚写审计事件。

9. 实现对照

用户概念实现
名称 / 显示名DB display_name + 版本 name 快照;列表 name 与之相同
标识符 slugDB user_conversation_skills.slug;YAML name 在导出时与之对齐
触发说明DB description;YAML description
功能类型DB user_conversation_skill_versions.function_type;内置 catalog 字段
操作正文DB body_markdownSKILL.md body
解析 / 组装backend/internal/skillpkg
对话沉淀合成backend/internal/skillfromchat/synthesis.go
匹配注入backend/internal/api/handlers/chat_workspace_skills.go
不适用排除skillpkg.IsExcludedByNotApplicable(命中 不适用 则不注入)
列表 APIGET /api/v1/skills
会话沉淀详情 / 版本 / 回滚GET/POST /api/v1/skills/conv/{id}/…
显示名 / slug 更新(不升版本)PATCH /api/v1/skills/conv/{id}
附属文件 CRUDGET/PUT/DELETE /api/v1/skills/conv/{id}/filesreferences / scripts / assets
功能类型归纳skillfromchat.ResolveFunctionTypePOST /api/v1/skills/conv/{id}/function-type/infer
技能中心 UIclient/web/src/SkillsCenterPage.tsxSkillWorkspacePanel.tsx
平台技能目录SKILL_DOCS_DIR(默认 docs/agent-skills

10. 变更记录

版本日期说明
1.02026-05-25首版:统一逻辑契约、YAML 头、触发说明、技能中心 UI 约定
1.12026-06-11增补任务卡、完成标准/失败信号、不适用召回排除、发布后三类验收 SOP
1.22026-06-12显示名与 slug 分离;PATCH 改名 API;SKILL.md YAML name=slug