AI Skill 开发与评测全解析:四个指标 + 六大组成,从微信到 Claude Code
文章目录
前言
这篇文章讲什么:AI Skill 到底怎么开发、怎么评测——以微信小程序 wxa-skill-eval 和 Claude Code 为例,把四个评测指标和六大开发组成一次讲清楚。读完你能拿到一份可以直接照着搭的 Skill 工程清单。
最近一个在腾讯做 Skill 测试的朋友跟我聊起他们的评测体系,我顺势把两边(微信生态 + Claude Code 生态)的 Skill 开发模式都翻了一遍,发现底层逻辑惊人地一致——Skill 本质上是一个带契约的小型服务包,评测维度也高度收敛。
一、四个评测指标
微信官方开源的 wxa-skill-eval 定义了四个评测维度,每个 Skill 上线前至少跑 30 个用例:
| 维度 | 测什么 | 得分低说明 |
|---|---|---|
| 意图理解 | AI 能不能正确理解用户想干嘛 | SKILL.md 的 description 写得太模糊 |
| 轨迹生成 | 操作步骤的合理性和完整性 | 接口调用顺序或条件判断有问题 |
| 最终答案质量 | 输出结果的正确性和格式 | 提示词或数据处理逻辑需要优化 |
| 接口覆盖率 | 原子接口和组件的测试覆盖 | 用例不够多,边界情况没覆盖 |
注意:"任务完成情况"没有单独列成一个维度,而是被拆进了上面三个指标里——意图是起点、轨迹是过程、答案是结果,三者合在一起就是"任务完成得好不好"的完整评估。
Claude Code 这边也有类似的四维评测(来自 wshobson/agents 的 eval-judge):
| 维度 | 权重 |
|---|---|
| Triggering Accuracy(触发准确度) | 25% |
| Orchestration Fitness(编排适配度) | 20% |
| Output Quality(输出质量) | 15% |
| Scope Calibration(范围校准) | 12% |
两套体系一对比就很有意思:微信侧重端到端行为验证(用户说了什么 → AI 做了什么 → 结果对不对),Claude Code 更侧重Skill 本身的结构质量(触发精准不精准、编排合不合理、范围大不大)。结合起来看,评测 Skill 其实是两个层面:运行时表现 + 静态结构质量。
二、Skill 开发的六大组成部分
Skill 不是一个文件,是一整个小型服务包。拿微信小程序 Skill 举例:
weather-skill/
├── SKILL.md ← 说明书:什么时候触发、干什么
├── mcp.json ← 接口契约:声明入参/出参/组件
├── index.js ← 接线员:注册接口 + 中间件
├── apis/ ← 干活的:业务脚本逻辑
│ └── getWeather.js
├── components/ ← 门面:UI 卡片渲染
│ └── weather-card/
└── data/ ← 备查档案:Mock 数据 / 常量
└── seed.js
2.1 SKILL.md —— 触发说明书
这是 AI 最先看的文件,决定这个 Skill 会不会被调用:
---
name: weather-skill
description: 天气查询业务。当用户想查天气时触发。
---
## 触发场景
- "今天北京天气怎么样?"
- "明天会下雨吗?"
## 不适用范围
- 询问日期、时间等非天气信息
description 是给 AI 看的,不是给人看的。写模糊了 → 该触发时不触发 → 意图理解得分低。
2.2 mcp.json —— 接口契约
向 AI 声明所有原子接口的入参/出参/组件映射:
{
"apis": [{
"name": "getWeather",
"description": "查询指定地点的天气",
"inputSchema": {
"type": "object",
"properties": {
"location": { "type": "string", "description": "城市名" },
"days": { "type": "number", "description": "预报天数 1-7" }
},
"required": ["location"]
}
}]
}
AI 会根据 inputSchema 自动从用户对话里抽取参数填进去——你不需要写任何调用代码。
2.3 index.js —— 入口 + 中间件
注册所有接口,绑定鉴权、日志、错误处理等横切逻辑:
const skill = wx.modelContext.createSkill('/path/to/weather-skill')
skill.use(async (ctx, next) => {
// 统一鉴权、打日志、捕获异常
await next()
})
skill.registerAPI('getWeather', require('./apis/getWeather'))
2.4 apis/ —— 业务脚本
真正干活的代码,返回 content(给 AI 看)+ structuredContent(给组件渲染):
async function getWeather({ location, days = 1 }) {
const res = await wx.request({
url: 'https://api.example.com/weather',
data: { city: location, days }
})
return {
isError: false,
content: [{ type: 'text', text: `${location} 未来 ${days} 天天气已查到` }],
structuredContent: { location, forecasts: res.data.forecasts }
}
}
2.5 components/ —— UI 组件
把结构化数据渲染成对话流里的卡片(宽高 4:1 ~ 1:1),不是普通页面:
Component({
lifetimes: {
created() {
const modelCtx = wx.modelContext.getContext(this)
modelCtx.on(wx.modelContext.NotificationType.Result, (data) => {
const sc = data?.result?.structuredContent || {}
this.setData({ location: sc.location, forecasts: sc.forecasts })
})
}
}
})
2.6 data/ & utils/ —— 关键信息存储
data/:Mock 数据、静态配置、种子数据utils/:公共工具函数(日期格式化、请求签名、加密)- 接口返回的
structuredContent是运行时关键信息,同时给 AI 理解和组件消费
Claude Code 这边还有
scripts/放辅助脚本、.mcp.json声明 MCP 服务——本质上和微信的apis/+mcp.json是同一套思想。
三、开发与评测闭环
把开发和评测串起来,形成闭环:
写 SKILL.md → 意图理解评测
写 mcp.json → 接口覆盖率评测
写 apis/ 脚本 → 轨迹生成评测 + 最终答案质量评测
跑 wxa-skill-eval → 生成 eval_report.html → 根据低分项回头改
每个环节都对应明确的评测指标,开发时就知道会被怎么打分。
四、一句话总结
| 组件 | 一句话 |
|---|---|
| SKILL.md | 告诉 AI 什么时候出发 |
| mcp.json | 告诉 AI 能调什么、传什么参 |
| index.js | 把接口注册起来 |
| apis/ | 真正干活的业务脚本 |
| components/ | 把结果画出来 |
| data/ | 备查的关键信息 |
评测四个字:理解 → 轨迹 → 结果 → 覆盖。四个维度合在一起,就是一个 Skill 的完整质量画像。
更多推荐



所有评论(0)