从个人用到团队共享
Skill 数量少时不需要治理。3 个 Skill 靠记忆就够了。当企业里有 30-50 个 Skill 时,三个问题会同时出现:
- 发现问题:给定用户输入,调哪个 Skill?
- 成本问题:哪些 Skill 最贵,钱花在哪里?
- 质量漂移:某个 Skill 改了 Prompt,怎么保证没有退化?
本文用真实测量回答这三个问题。
Demo 设计
6 个 Skill 的注册表:
| Skill ID | 用途 | 领域 |
|---|---|---|
| rnd-technical-writer | 技术博客写作 | content |
| competitor-analyzer | 竞品分析 | strategy |
| bug-root-cause | Bug 诊断与根因分析 | engineering |
| meeting-summarizer | 会议纪要 + 行动项 | productivity |
| sql-query-builder | 自然语言转 SQL | engineering |
| marketing-copywriter | 营销文案 | marketing |
三个实验:
- Embedding 路由:用描述向量做 cosine 相似度,测 8 条查询的路由准确率
- Prompt 压缩:冗长版(418 tokens)vs 精简版(99 tokens),LLM-as-Judge 打分
- 成本报告:4 个 Skill 真实调用,计算 cost/call 和月度投影
运行结果
Part 1:Embedding 路由
sql
Query Routed to Score OK?
───────────────────────────────────────── ───────────────────── ───── ───
Write a deep-dive article about Kubern.. rnd-technical-writer 0.448 ✓
我们的主要竞争对手 Notion 最近有什么动态 competitor-analyzer 0.311 ✓
Traceback: AttributeError: 'NoneType'.. sql-query-builder 0.473 ✗
帮我整理一下今天产品评审会的要点和后续任务 meeting-summarizer 0.463 ✓
Get all orders placed in the last 7 d.. meeting-summarizer 0.586 ✗
Write a product description for our .. rnd-technical-writer 0.610 ✗
分析一下 Python 3.12 的性能改进 sql-query-builder 0.401 ✗
List all users who haven't logged in .. bug-root-cause 0.493 ✗
Routing accuracy: 3/8 = 38%
Part 2:Prompt 压缩
yaml
Verbose: ~418 tokens | Compressed: ~99 tokens | Reduction: 76%
Task: Python context managers...
Verbose → 4.00/5 | Compressed → 4.00/5 | Delta: +0.00
Task: Redis pub/sub messaging...
Verbose → 4.00/5 | Compressed → 3.00/5 | Delta: -1.00
Avg quality delta: -0.50
Part 3:成本报告
bash
Skill avg_in avg_out $/100calls p50
──────────────────────── ──────── ──────── ──────────── ─────
rnd-technical-writer 116t 1248t $0.1365 48.8s
competitor-analyzer 37t 586t $0.0623 27.9s
sql-query-builder 46t 589t $0.0635 32.6s
meeting-summarizer 53t 99t $0.0152 5.1s
Monthly projection (rnd×200 + analyzer×50 + meeting×300 + sql×500):
rnd-technical-writer 200 calls → $0.27
competitor-analyzer 50 calls → $0.03
meeting-summarizer 300 calls → $0.05
sql-query-builder 500 calls → $0.32
─────────────────────────────────────────
Total → $0.67/mo
三个发现
发现 1:Embedding 路由准确率 38%,Skill 描述太相似
5 条路由出错,其中最典型的两个:
错误 1 :"Get all orders placed in the last 7 days" → meeting-summarizer(应该是 sql-query-builder)
meeting-summarizer 的描述是"Summarize meeting transcripts and extract action items",sql-query-builder 的描述是"Generate SQL queries from natural language descriptions"。这两段描述在 embedding 空间里碰巧离"订单查询"的距离相近------meeting-summarizer 的置信度 0.586,比 sql-query-builder 更高。
错误 2 :"Write a product description" → rnd-technical-writer(应该是 marketing-copywriter)
两者都是"写作" Skill,描述里都有"write",embedding 相似度差距极小。
相同领域的 Skill 在描述层面语义接近,embedding 区分不了。修复方向:
-
描述里加负面示例 (已在设计范式篇提过):
arduinomarketing-copywriter 描述: "Write marketing copy and product descriptions. NOT: technical tutorials or factual explainers." -
分层路由:先按 domain 粗分(content/strategy/engineering),再在 domain 内精选
-
LLM 路由器:embedding 过滤候选,LLM 在候选里精选,多付一次 LLM 调用换准确率
发现 2:Prompt 压缩 76%,但 Redis 文章质量掉了 1 分
Python context managers 任务:4.0 → 4.0,压缩没有影响。
Redis pub/sub 任务:4.0 → 3.0,质量下降 1 分。
两个任务用完全相同的两个版本 Prompt,为什么结果不同?Redis pub/sub 的主题相对小众,复杂度更高。冗长版 Prompt 里有大量关于深度、实用性的引导("explain not just HOW but also WHY"),精简版只保留了结构要求,没有这些质量引导。
对于复杂主题,冗长版里的描述性指导("不只讲 HOW,还要讲 WHY")比格式要求更重要。精简版删掉了这些,而恰恰是这类引导让 Redis 文章有深度。压缩前用评测集 A/B 测试:
python
# 压缩前:A/B 测试,用评测集对比质量
# 只有当 quality_delta > -0.1 时才推广压缩版本
if abs(quality_delta) < 0.1:
use_compressed() # 安全
else:
keep_verbose() # 等待更好的压缩策略
发现 3:输出 Token 主导成本,不是 Prompt
成本最高的是 rnd-technical-writer( 0.1365/100calls),最低的是meeting−summarizer(0.0152/100 calls),相差 9 倍。
两者的 Prompt 长度相近(116t vs 53t),差距来自输出:1248t vs 99t。
Prompt 从 418t 压到 99t,每次调用节省约 0.0011。加一行'Maximumlength:400words'把输出从1248t压到600t,节省约0.06,差距 54 倍。优化输出长度比优化 Prompt 有效得多:
- 在 Prompt 里明确最大输出字数(
Maximum length: 400 words) - 按需求分级:详细版 / 简要版,用户选择
Skill Registry 设计
路由准确率低的根因是描述设计不够区分。好的 Registry 条目应该包含:
yaml
skills:
- id: sql-query-builder
description: |
Generate SQL queries from natural language data retrieval descriptions.
Trigger keywords: "query", "SQL", "database", "select", "filter", "join".
NOT for: code debugging, bug analysis, general programming questions.
domain: engineering
subdomain: data
version: "1.0.0"
status: active
owner: "@team-data"
metrics:
monthly_calls: 500
avg_quality_score: 4.1
cost_per_call_usd: 0.000635
关键字段:
description里包含正面触发词 + 负面排除说明domain/subdomain支持分层路由metrics持续更新,用于发现 cost 最高、质量最低的 Skill
三级治理路线图
css
Level 1 --- 个人阶段(立即可做):
□ 建 Skill 台账(YAML 文件 or Notion 表格)
□ 每个 Skill 有版本号
□ 有基本的评测记录(第 01 篇的评测体系)
Level 2 --- 团队共享阶段:
□ 建 Skill Registry,包含 domain + 负面示例
□ 访问控制:公共 / 部门 / 个人
□ 修改 Skill 需走 Review 流程(跑评测集,对比 Delta)
□ 质量监控看板(第 04 篇的 L2/L3 指标)
Level 3 --- 企业治理阶段:
□ 分层路由(domain 粗分 + embedding 精选)
□ Prompt 压缩前跑 A/B 质量测试
□ 按 Skill 分摊成本(月度报告)
□ 审计日志 + 合规 Checklist
设计 Checklist
Skill Registry
- 描述里包含触发关键词
- 描述里有 NOT 排除声明(防止 embedding 混淆)
- 有 domain 字段支持分层路由
Prompt 压缩
- 压缩前用评测集 A/B 对比(不是直接替换)
- 质量 delta < 0.1 才推广压缩版本
成本监控
- 分别记录输入/输出 Token(不要合并)
- 先优化输出长度,再优化 Prompt 长度
- 高输出量 Skill 设置最大输出字数限制
总结
- Embedding 路由准确率 38%,相同领域的 Skill 在 embedding 空间里区分不了;修复是描述里加负面排除示例 + 分层路由,不是换更好的 embedding 模型
- Prompt 压缩不是无损的:76% 的 Token 节省让简单主题质量不变,但复杂主题质量下降 1 分;压缩前必须跑 A/B 测试
- 输出 Token 主导成本:rnd-technical-writer 比 meeting-summarizer 贵 9 倍,原因是输出长度(1248t vs 99t),缩短 Prompt 对成本的影响微乎其微
参考资料
- 本系列完整 Demo 代码:skill-06-governance
- 第 01 篇:Skill 评测体系
- 第 04 篇:Skill 指标体系
欢迎访问 PrimeSkills ------ 一个精心策划的 AI Agent 与技能市场,所有内容均经过真实企业级工作流验证。没有噱头,只有真正有效的东西。
更多实用知识和有趣产品,欢迎访问我的个人主页