Skip to content

技能创建系统 (Skill Creator) v1.2.0

概述

Skill Creator 是 ChainlessChain 的内置系统技能,用于创建、测试、优化和验证其他技能。v1.2.0 新增了 LLM 驱动的描述优化循环(optimize-description),可自动评估并改写技能描述,使其触发精度最大化。

版本历史

版本变更
v1.0.0基础功能:create、test、optimize(静态)、validate、list-templates
v1.2.0新增 optimize-description LLM 驱动描述优化循环;_deps 注入 spawnSync;支持 --advanced--iterations 标志

核心动作

create

从名称和描述生成 SKILL.md + handler.js 骨架文件。

bash
skill run skill-creator "create my-skill \"做某件事的技能\""
  • 自动推断 category(knowledge/automation/development/system/media/productivity)
  • 若技能目录已存在,返回 alreadyExists: true 并附上模板内容(不覆盖)

test

调用指定技能的 handler.js 并展示结果。

bash
skill run skill-creator "test smart-search 搜索示例"

optimize(快速启发式)

SKILL.mddescription 字段进行静态检查:

  • 长度 < 50 字符 → 建议补充更多触发场景
  • 缺少 use when / trigger 关键词 → 建议添加触发语句
  • 长度 > 200 字符 → 建议精简
bash
skill run skill-creator "optimize code-review"

optimize-description(LLM 驱动优化循环)

v1.2.0 新增。使用 LLM 对描述进行迭代优化,步骤如下:

  1. 生成 eval 查询集:LLM 生成 20 条真实用户请求(10 个应触发、10 个不应触发)
  2. 60/40 分割:随机打散后前 60% 为训练集,后 40% 为测试集(防止过拟合)
  3. 计算基线测试分:在测试集上评估当前描述的触发准确率
  4. 迭代优化循环(最多 N 次,默认 5 次):
    • 在训练集评估失败项(触发结果与预期不符)
    • 若无失败 → 提前终止
    • LLM 根据失败案例改写描述
    • 在测试集评估新描述分数
    • 若测试分更高 → 记录为最优描述
  5. 写回 SKILL.md:将最优描述替换 description 字段(仅在有改进时)
  6. 保存结果:输出至 <skillDir>/.opt-workspace/results.json
bash
# 基础用法(默认 5 次迭代)
skill run skill-creator "optimize-description code-review"

# 指定迭代次数
skill run skill-creator "optimize-description code-review --iterations 3"

# 通过 --advanced 标志触发(等价于 optimize-description)
skill run skill-creator "optimize code-review --advanced"
skill run skill-creator "optimize code-review --advanced --iterations 3"

validate

检查技能目录的完整性和 SKILL.md 格式:

bash
skill run skill-creator "validate ultrathink"

检查项:

  • SKILL.md 存在且有 YAML frontmatter
  • 包含 namedescriptionhandler 字段
  • handler.js 存在且可 require()
  • handler.js 导出 execute()init() 函数

list-templates / get-template

列出或获取内置模板:

bash
skill run skill-creator "list-templates"
skill run skill-creator "get-template basic"
skill run skill-creator "get-template api-integration"

内置模板:

模板名说明
basic最简单的问候技能,单动作结构
multi-action多动作任务追踪器(create/list/complete/stats)
api-integrationREST API 调用模板,含 _deps 注入和认证
file-processorMarkdown 文件分析,含 _deps.fs 注入
code-analyzer纯正则表达式代码复杂度分析

技术设计

_deps 注入模式

所有 I/O 操作通过 _deps 对象访问,支持单元测试时注入 mock:

javascript
const _deps = { fs, path, spawnSync };
module.exports = { _deps, async execute() {...} };

// 测试中:
handler._deps.fs = createMockFs({ ... });
handler._deps.spawnSync = vi.fn().mockReturnValue({ status: 0, stdout: "YES" });

LLM 调用(CLI 模式)

callLLM(prompt) 函数通过 spawnSync 调用 chainlesschain ask 命令:

javascript
function callLLM(prompt) {
  const result = _deps.spawnSync(
    process.execPath,
    [process.argv[1], "ask", prompt],
    { encoding: "utf-8", timeout: 60000, windowsHide: true,
      env: { ...process.env, CHAINLESSCHAIN_QUIET: "1" } }
  );
  if (result.error || result.status !== 0) return null;
  return (result.stdout || "").trim() || null;
}
  • 仅在 chainlesschain skill run 上下文中可用
  • LLM 不可用时(非 CLI 环境、超时等)返回 null,所有依赖 LLM 的操作优雅降级

评估逻辑

generateEvalQueries:要求 LLM 生成严格的 JSON 数组格式:

json
[{"query":"...", "should_trigger": true}, ...]

evaluateDescriptionDetailed:每条查询单独问 LLM:

Would you invoke this skill to help? Answer with exactly YES or NO.

improveDescription:提供失败案例和改写指南,让 LLM 返回新描述(≤200字符,略微"激进"以提升触发率)。

降级处理

失败场景行为
LLM 不可用(status≠0)返回 { success: false, action: "optimize-description", hint: "Run via: chainlesschain skill run ..." }
eval queries 生成失败(<4条)同上
中途 LLM 失败停止迭代,写回当前最优描述
无改进不更新 SKILL.md,报告"description is already optimal"

文件结构

desktop-app-vue/src/main/ai-engine/cowork/skills/builtin/skill-creator/
├── SKILL.md               # 技能声明(v1.2.0)
└── handler.js             # 主逻辑(_deps 注入 + LLM 优化循环)

测试覆盖

层次文件数量
单元测试skills/__tests__/v1.2.0-skill-creator.test.js50 个测试
集成测试cli/__tests__/integration/skill-creator-handler.test.js12 个测试
E2E 测试cli/__tests__/e2e/skill-creator-commands.test.js14 个测试

全部通过(76 个测试)。

基于 MIT 许可发布