技能创建系统 (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.md 的 description 字段进行静态检查:
- 长度 < 50 字符 → 建议补充更多触发场景
- 缺少
use when/trigger关键词 → 建议添加触发语句 - 长度 > 200 字符 → 建议精简
bash
skill run skill-creator "optimize code-review"optimize-description(LLM 驱动优化循环)
v1.2.0 新增。使用 LLM 对描述进行迭代优化,步骤如下:
- 生成 eval 查询集:LLM 生成 20 条真实用户请求(10 个应触发、10 个不应触发)
- 60/40 分割:随机打散后前 60% 为训练集,后 40% 为测试集(防止过拟合)
- 计算基线测试分:在测试集上评估当前描述的触发准确率
- 迭代优化循环(最多 N 次,默认 5 次):
- 在训练集评估失败项(触发结果与预期不符)
- 若无失败 → 提前终止
- LLM 根据失败案例改写描述
- 在测试集评估新描述分数
- 若测试分更高 → 记录为最优描述
- 写回 SKILL.md:将最优描述替换
description字段(仅在有改进时) - 保存结果:输出至
<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- 包含
name、description、handler字段 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-integration | REST API 调用模板,含 _deps 注入和认证 |
file-processor | Markdown 文件分析,含 _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.js | 50 个测试 |
| 集成测试 | cli/__tests__/integration/skill-creator-handler.test.js | 12 个测试 |
| E2E 测试 | cli/__tests__/e2e/skill-creator-commands.test.js | 14 个测试 |
全部通过(76 个测试)。
