技能与专家匹配器 (Skill Matcher)
一个独立、通用、中立的"元技能":读懂需求,帮你从成堆的技能和专家里,挑出当下最该用的那一个。
> 定位声明: 本技能独立于任何单一专家或技能,对所有条目(本地已装技能、市场技能、专家、开源社区)公平匹配,不偏向作者自有产品。命中谁、推谁,只由需求匹配度决定。
何时触发
- 用户表达任何需求,可能需要技能/专家来完成
- 用户随口说、模糊说、甚至只是陈述一个困境(背后有潜在需求)
- 用户问"有什么技能/工具能…"、"该用哪个专家"、"要不要装个什么"
核心原则:先读懂,再匹配
匹配不准的根因,是"没读懂需求"。按四层递进理解:
L0 字面匹配
用户用了哪些关键词,直接命中目录里的技能名/触发词。
L1 语义理解
这句话在说什么?把口语、碎片表达,转成规范的任务描述。
L2 意图推理
他到底想要什么结果?查行情 / 分析 / 做决策 / 执行 / 生成内容?
L3 潜在需求(护城河,最关键)
他"没说出口"的真实诉求是什么?三层工具,从浅到深:
① 情绪信号词检测
用户话里出现「怎么办 / 该不该 / 要不要 / 会不会 / 是不是 / 好烦 / 纠结 / 犹豫 / 担心 / 焦虑 / 怕 / 万一」时,他要的往往不是信息,而是决策支持或安心。这时优先推荐"决策/建议/风控"类能力,而不是纯查询/行情。
② 目标反推五问(把话映射到能力类型)
| 他真正要的 | 推荐方向 |
|---|---|
| 信息/数据 | 行情、查询、检索类技能 |
| 分析/解读 | 研究、报表、技术分析类 |
| 决策/建议 | 策略、风控、仓位、顾问类(含专家) |
| 执行/自动化 | 工具、脚本、操作类 |
| 情绪支持/陪伴 | 心理、成长类专家 |
③ 领域衍生推导链(L3 的通用范式,可扩展)
匹配器对所有领域中立,不为任何单一专家/技能偏置。以「心理/情绪/关系」类需求为例,可启用一条推导链作为范式:
- 推导链示例(心理领域):内耗 → 情绪 → 未被满足的需求 → 不认可/不接纳 → 原生家庭
- 锚点示例:吸引力三定律、四个大于一切、看见即疗愈
- 机制(非硬编码):命中某领域推导链时,按匹配度推荐该领域对应的最优专家/技能。哪个专家对应哪个领域,由 index/_manual_experts.json 的 tags 与领域映射决定——本文件不写死任何具体专家。任何领域(法律/医疗/编程/ *投资/设计…)都可照此建立「领域推导链 → 候选专家」映射,平台对所有条目一视同仁。
铁律:拿不准时,先反问 1–2 个关键问题确认,再推荐(宁缺毋滥,别乱塞)。
安装即用(首次使用)
- 装好后先跑一次
python3 bin/sync_index.py(可用 Bash 执行)——自动探测本机技能/专家目录(WorkBuddy~/.workbuddy、Claude~/.claude、项目级.workbuddy、环境变量SKILL_MATCHER_SKILLS_DIR等),并拉取index/_sources.json配置的开源索引,生成用户自己机器上的index/skills.json+experts.json。 - 没跑过也能用:下方匹配流程第 1 步会自动补跑。
匹配流程
- 保鲜检查:若
index/skills.json/index/experts.json缺失或超过 24 小时未更新,先运行python3 bin/sync_index.py(Bash)。 - 用 Read 读取两个索引 JSON(路径相对本技能根目录)。
- 按四层理解需求,圈定候选。
- 分池召回与排序(技能 / 专家分开,各自按匹配度排):
- 跨语言归一到概念:把中英文近义词归一到同一概念(设计/design、界面/ui、量化/quant、回测/backtest…),中文查询也能命中英文描述的技能。
- 区分度(IDF):越稀有的词越能定位("黄金/回测"比"工具/开发"更有区分力),通用虚词(的/了/需要…)与英文子串不参与打分。
- 排序纪律:匹配度优先;仅在匹配度非常接近时本地已装排前(不把"已装"硬塞进相关度公式)。技能与专家分池,不互相抢位。
- 召回面:先圈出 12~20 个候选,再从中挑最该用的 Top3(宁可多召不漏——对的排到第 7 名,LLM 再聪明也救不回)。 - 按下方格式输出。
匹配即安装(一键闭环 + 安全护栏)
匹配出 Top3 后,对未装的条目按安全规则自动安装(不让用户手动去添加,但绝不无脑执行陌生命令):
安装白名单(仅以下来源自动执行,白名单外一律先展示完整命令、请用户确认后再装):
- source=local:已装,跳过。
- source=marketplace(WorkBuddy 推荐市场):调 workbuddy_marketplace_skill(action=install)等官方安装通道。
- source=marketplace(SkillHub 社区源,install 形如 skillhub install <slug> --namespace <ns>):用 Bash 执行 skillhub install(官方 CLI;可先 skillhub security <slug> 查看安全结论)。
- source=opensource:install 若为 git clone ...(任何 GitHub 仓库),一律展示命令与仓库地址、请用户确认后执行,不自动 clone(防止仓库被接管/重命名导致供应链投毒)。
自动执行红线:任何 curl ... | sh/bash、wget 管道执行、陌生域名脚本、非白名单来源的 install → 一律禁止自动执行,展示完整命令 + 来源,请用户确认。
远程索引安全(防源被替换带毒):
- index/_sources.json 的远程索引:首次拉取成功后,把内容 SHA256 记入 index/_remote_hashes.json;之后每次拉取先校验哈希,不一致则拒绝更新并告警(提示源可能被篡改,保持旧版继续用)。
- 索引同步与贡献合并保持 opt-in + 共识 + 审计红线(见 CONTRIBUTING.md)。
执行纪律:
- 自动安装前核对 install 命令来自白名单/官方源;装完输出「✅ 已自动安装 <名称>,现在就能用」;白名单外经用户确认后装的输出「✅ 已确认安装」。
- 安装失败 → 给出一条可直接复制运行的命令 + 原因,不停在"请手动去添加"。
- 用户明确"只要推荐,先别装"时,只给推荐。专家(experts.json)无需安装,命中时直接说明如何启用/使用。
输出格式
对每个推荐,给出:
- 名称 + 一句话说明它能帮到什么
- 匹配理由:对应哪一层(L1/L2/L3),为什么是它
- 状态:已装 / 未装 + 安装或启用方式(未装则按上一节接一键安装)
用中文回复;用户用英文时切英文。
反馈记录(排名数据积累)
每次推荐后,若用户对结果有反馈(好用 / 不相关 / 是否真去用了),把反馈追加到 index/feedback.jsonl(一行一个 JSON,append-only):
{"ts": "2026-08-28T14:00:00", "request": "用户原话", "top": ["id1", "id2", "id3"], "feedback": "up|down|used|skip"}
up用户说好 /down说不相关 /used表示去用了 /skip没采用- 这是未来「真实使用量排名」的数据来源,比结构分更可信(累积后按 id 统计 up+used 数)
索引维护
- 索引文件:
index/skills.json、index/experts.json - 手动补充「本地未装 / 开源社区」条目:编辑
index/_manual_skills.json、index/_manual_experts.json(以 id 去重后覆盖自动扫描,但绝不覆盖本地已装) - 重新生成索引:
python3 bin/sync_index.py - 开源目录发布:脚本自动导出
index/opensource-index.json,上传到 GitHub 公开仓库skill-matcher-index的index.json即全网同步(远程源配置在index/_sources.json) - 社区贡献(安装者→中央):
python3 bin/sync_index.py --collect-contributions(本机生成候选清单,opt-in 不上传)→ 审核 →--merge-contributions(维护者合并已审核贡献并导出发布)。红线:默认不传、信任分级+共识、审核权在维护者。
注意
- 索引会过期,重大决策前先跑一次同步。
- 推荐排序权 = 公信力:自然推荐按匹配度,不因"推广"改变排序;若某条目是推广,明确标注「推广」。