MCPSkill
Mcp和Skill市场MCP 与 Skill
Skill

评估 Skill

测试 Skill 是否在正确的请求上激活,并且真的提高了结果质量。

评估两件事

Skill 评估有两个层面:Agent 有没有加载 Skill,以及加载之后有没有让执行效果变好。

触发质量

描述是否会在该处理的任务上激活?

不触发质量

是否能在无关任务上保持不激活?

输出质量

激活后,Agent 的结果是否更好、更稳定?

构建触发查询

准备两组真实用户请求:应该触发的例子和不应该触发的例子。最好单独保留一组验证集,别让描述修改只针对一个小列表过拟合。

应触发:
- 清洗这个 CSV,并报告无效行。
- 规范这些表格列以便导入。
- 按我们的 schema 校验这个客户导出文件。

不应触发:
- 解释 CSV 是什么意思。
- 写一封产品发布邮件。
- 总结这段会议纪要。

隔离运行测试

每次评估都应该从干净上下文开始。如果之前的尝试或隐藏指令还留着,就没法判断是 Skill 本身导致的结果。

  • 使用真实文件和真实提示词,不要只测玩具案例。
  • 记录 SKILL.md 是否被加载。
  • 保存最终输出、错误、耗时和工具行为。
  • 当任务不是确定性的时候,跨多次运行比较结果。

写断言

断言能让评估可重复。尽量用确定性检查,判断性强的输出再交给人工复核。

存在性必须的章节、字段、文件或引用存在。
正确性计算值、分类或转换结果符合预期。
格式输出符合规定的表格、JSON、markdown 或报告模板。
安全性避免禁用动作、错误假设或缺失提示。

可复制的评估脚本思路

对于结构化输出,一个小脚本就能在人工检查前先挡掉明显失败。

// scripts/check-release-notes.js
import fs from "node:fs"

const file = process.argv[2]
const text = fs.readFileSync(file, "utf8")
const required = ["### Highlights", "### Fixes", "### Docs", "### Open questions"]
const missing = required.filter((heading) => !text.includes(heading))

const forbidden = ["JIRA-", "internal refactor", "billing worker"]
const leaked = forbidden.filter((term) => text.toLowerCase().includes(term.toLowerCase()))

console.log(JSON.stringify({
  ok: missing.length === 0 && leaked.length === 0,
  missing,
  leaked
}, null, 2))

process.exit(missing.length === 0 && leaked.length === 0 ? 0 : 1)

简单评分表

用小表格让不同的人对同一个 Skill 的评估保持一致。

区域通过条件常见修法
激活能在发布说明请求上触发。用更贴近用户动词的描述重写。
不激活不会在无关总结上触发。加上“不适用”边界。
流程遵守分组和排除规则。把工作步骤写得更具体。
输出包含必需标题且没有内部术语。补模板或校验脚本。

从失败中迭代

当运行失败时,检查问题来自发现、指令、参考资料、脚本还是输出预期。然后只做最小但有用的修改,再用同一批评估集重跑。

有效循环 先评估,再看失败,更新 SKILL.md,重新跑训练集,最后确认验证集仍然正常。