技能组成规范
面向产品、运营与对接方,用用户能理解的用语说明「技能是什么、由哪些部分组成、如何进入对话」;实现名放在文末 实现对照。
来源 docs/core-mechanisms/技能组成规范.md
文档版本:1.2 状态:与当前后端实现一致(skillpkg、skillfromchat、会话沉淀表、GET /api/v1/skills) 表述:面向产品、运营与对接方,用用户能理解的用语说明「技能是什么、由哪些部分组成、如何进入对话」;实现名放在文末 实现对照。
关联:
- 产品规格.md §3.5(文件优先 Workspace)、§3.6(技能沉淀与治理)
- 智能体调用知识文档的方式.md(技能 vs 知识文档目录)
- 文档驱动意图执行.md(平台内置技能检索与执行)
- help/product-features/skills-and-agents.md(用户侧入口说明)
1. 结论先说
Cadau 中的 技能,是供智能体在对话中 按步骤复现一类操作 的 专业操作手册——不是外部业务 API 里的「接口名」,也不是智能体的长期人格(那属于「我的智能体」与 Soul)。
一份规范的技能至少包含:
- 名称(用户可见标题)
- 触发说明(
description:何时应使用、何时不应使用) - 操作正文(步骤、接口要点、排错等 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. 进入对话的方式
- 用户在工作区 消息 中与 我的智能体 对话。
- 后端用 当前用户消息 对工作区技能做匹配:须名称或「适用」中有连续 3 个汉字(短技能名可用 2 字)与话术重合,避免「检查错误」误召回「检查表 / 数据查询」。再由选择器精选;选择器明确「本轮不用技能」时不再用关键词凑数。
- 命中至多 3 条,将 触发说明 + 正文(可截断) 拼入运行时材料;前端发送后提示「模型本轮参考了以下工作区技能」。
- 用户可在 技能中心 查看全文、版本历史,对会话沉淀技能 回滚 发布版。
创建 / 更新沉淀(在消息里说即可,勿调外部 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 与之相同 |
| 标识符 slug | DB user_conversation_skills.slug;YAML name 在导出时与之对齐 |
| 触发说明 | DB description;YAML description |
| 功能类型 | DB user_conversation_skill_versions.function_type;内置 catalog 字段 |
| 操作正文 | DB body_markdown;SKILL.md body |
| 解析 / 组装 | backend/internal/skillpkg |
| 对话沉淀合成 | backend/internal/skillfromchat/synthesis.go |
| 匹配注入 | backend/internal/api/handlers/chat_workspace_skills.go |
| 不适用排除 | skillpkg.IsExcludedByNotApplicable(命中 不适用 则不注入) |
| 列表 API | GET /api/v1/skills |
| 会话沉淀详情 / 版本 / 回滚 | GET/POST /api/v1/skills/conv/{id}/… |
| 显示名 / slug 更新(不升版本) | PATCH /api/v1/skills/conv/{id} |
| 附属文件 CRUD | GET/PUT/DELETE /api/v1/skills/conv/{id}/files(references / scripts / assets) |
| 功能类型归纳 | skillfromchat.ResolveFunctionType;POST /api/v1/skills/conv/{id}/function-type/infer |
| 技能中心 UI | client/web/src/SkillsCenterPage.tsx、SkillWorkspacePanel.tsx |
| 平台技能目录 | SKILL_DOCS_DIR(默认 docs/agent-skills) |
10. 变更记录
| 版本 | 日期 | 说明 |
|---|---|---|
| 1.0 | 2026-05-25 | 首版:统一逻辑契约、YAML 头、触发说明、技能中心 UI 约定 |
| 1.1 | 2026-06-11 | 增补任务卡、完成标准/失败信号、不适用召回排除、发布后三类验收 SOP |
| 1.2 | 2026-06-12 | 显示名与 slug 分离;PATCH 改名 API;SKILL.md YAML name=slug |