万象-技能市场搜索与安装
何时用
- 用户要装技能:「装个 XX 技能」「有没有做 X 的」。
- 任务卡在缺外部能力上:需要某个外部服务、授权或第三方数据,现有工具够不着 → 荐连接器。
- 任务需要专业判断:单一角色的回答明显不够(尽调、合规、投研、诊断)→ 荐专家。
- 用户要看清市场结构(不是找一个技能):「排行榜里都有什么」「哪些方向饱和了」「我该往哪做」→ §2.6 规模采样。
不适用:技能包已到手之后的进库审查、命名、位次(→ 万象-技能打包与库治理);纯事实检索(→ 直接检索)。
§0 三条铁律
- 只用平台工具,不自己造网络请求。 三条线各自的入口工具是唯一通道;禁止构造 HTTP、拼接 URL、处理 token/cookie/Authorization。鉴权全部由宿主完成 —— 你去处理鉴权,就等于把用户凭证放进了对话与日志。
- 推荐一律用卡片,不用文本列表。 卡片是用户可点的授权入口;文本列表看起来像推荐,实际什么也装不了。
- 不许猜 id,也不许猜版本。 技能 id、插件 id 只能来自本轮检索结果;版本新旧只读工具给的字段,不自己做字符串比较。
§1 三线路由(先判走哪条)
| 用户要什么 | 通道 | 入口 | 权威源 |
|---|---|---|---|
| 装技能(能力以 SKILL 形态交付) | 技能市场(§2) | 技能市场工具 | 市场检索结果 |
| 看清市场结构(不是找单个技能) | 规模采样(§2.6) | scripts/skh_rank_*.py |
平台公开 JSON 接口 |
| 接外部服务/数据(能力以连接形态交付) | 连接器推荐(§3) | 插件检索 + 荐装卡 | 插件检索结果 |
| 要专家/专家团(能力以角色形态交付) | 专家推荐(§4) | 插件检索 + 荐装卡 | 插件检索结果 |
判定口诀:用户说「装/安装」→ 技能市场;说「接进来/连上/同步」→ 连接器;说「谁来帮我做/找个人」→ 专家。
第四形态 · 插件(容器)。 上面三条都是「能力」,插件是装能力的容器(可同时带技能 / hook / agent / MCP / PATH 工具 / 默认设置)。判据:
| 用户要什么 | 走向 |
|---|---|
| 「装个技能」 | §2 技能市场 |
| 「接进来 / 连上 / 同步」 | §3 连接器 |
| 「找个人 / 谁来帮我」 | §4 专家 |
| 「装个插件」「把某插件关掉」「这插件是干嘛的」 | 不在本技能:清单字段、启用开关、hook 规格、CLI 命令 → 万象-技能打包与库治理(A 篇 §A4.3、B 篇 §B10 / §B13.2) |
> ⚠️ 插件与技能不是一回事:技能是 SKILL.md,插件是带 .codebuddy-plugin/plugin.json 的目录。
> 用户说「装」时先判它是哪一个 —— 判错的代价是「装完了但没生效」。
> ⚠️ 同一条回复里只出一张卡。 连接器与专家共用荐装卡入口,且每条回复最多一次调用;这张卡一旦发出,其余推荐留到下一轮,不要并行发两张。
§2 技能市场:检索与安装
2.1 关键词怎么取
| 用户说法 | 用什么检索 |
|---|---|
| 说了显示名(「飞书套件」) | 用显示名 |
说了技术名(lark-unified) |
用技术名 |
| 只说「装个技能」 | 先追问「想安装哪个技能?告诉我名字或关键字」—— 不要盲搜 |
2.2 结果分支(判定顺序不能调)
| 结果 | 动作 |
|---|---|
success: false |
把 error 原样透传,停下 |
| 结果为空数组 | 告知「未在推荐市场找到匹配的技能」,停下 |
| 恰好 1 条 | 进 2.3 |
| ≥2 条 | 列表让用户挑(只展示 名称/版本/描述前 60 字/是否已装;不透露机器 id) |
2.3 命中后的三分支
- 未安装 → 直接安装。
- 已装且无新版 → 「已是最新版本 v\<版本\>,无需重复安装」,停下。
- 已装且有新版 → 问「已装 v\<旧\>,最新 v\<新\>,是否更新?」,同意后再装。
> ⚠️ 不要自己用字符串相等判断版本新旧 —— 工具已用语义化版本算好,读字段即可;自己比较会把 1.10.0 判成比 1.9.0 旧。
2.4 安装后的动作
- 成功 → 直接把工具返回的
message转给用户(不要自己拼路径),可附一句「在【技能管理】面板里能看到它」。 - 不要替用户启用该技能,也不要接着调用它的工具 —— 启用是用户的动作。
- 失败 → 按错误前缀处置:
| 错误前缀 | 含义 | 给用户的建议 |
|---|---|---|
[CONFIG_ERROR] |
主进程未配置 endpoint | 推荐市场暂未启用,可能需更新客户端 |
[BUILTIN_MARKET_ERROR] |
后端业务错误 | 直接展示错误内容 |
[UNKNOWN_SKILL_ID] |
该 id 在市场已不存在 | 不要重试同一个 id;重新检索拿新 id |
[DOWNLOAD_ERROR] |
下载签名地址或包失败 | 网络或权限问题 |
[EXTRACT_ERROR] |
解压失败 | 建议清理技能目录后重试 |
[INSTALL_ERROR] |
其他 | 直接展示错误内容 |
2.5 库外寻源:GitHub / 全网(2026-09-21 立)
> 来源:视频号博主「林旬的AI笔记」《Codex 必装 6 个 Skills》(2026-09-19)|台账 §128。
> 吸纳的是他检索与筛选的维度;他点名的 6 个 skill(Skill Creator / Fine Skills / Super Powers /
> GS Tech Skills / UIUS Pro Max / 保育 Skills)未逐一验证,仅作名称登记,不得当依赖、不得当背书。
三步:① 把需求拆成关键词 → ② 按「分类 + 星数 + 更新时间」三维筛 → ③ 命中后先看分发形态再决定能拿什么。
| 维度 | 怎么用 | 为什么 |
|---|---|---|
| 分类 | 先按功能域收窄 | 避免关键词命中的"同名不同事" |
| 星数 | 只作热度初筛,不作质量结论 | 星数可被营销推高 |
| 更新时间 | 优先近 6 个月有提交的 | 这类生态迭代快,停更 ≈ 失效 |
🔴 分发形态决定能拿什么(本库硬判据,先于一切):
| 形态 | 能做什么 |
|---|---|
单文件 SKILL.md |
✅ 可直接取用(仍须过 omni-skill-forge §B13 两道审查) |
npx install / marketplace 安装 |
⚠️ 只能取方法论,不引入其实现(无法审计、不可控) |
边界:找到 ≠ 收编。外部寻源的产物进库,唯一通道是 omni-skill-forge 的
§B11 净室转生 / §B13 两道审查。本节只负责找到,不负责收编。
2.6 市场规模采样与功能台账(2026-10-07 立)
> 判据全文:references/市场规模采样与功能台账.md|脚本:scripts/skh_rank_*.py
什么时候走这一路:用户要的不是「一个技能」,而是看清市场结构 ——
「按评分排的榜单里都有什么」「哪些方向饱和了」「我该往哪做」。这是整体观测,不是单件取用。
一条命令链(零依赖,全部标准库):
python scripts/skh_rank_fetch.py --pages 50 --page-size 100 --cat-counts --out <数据目录>
python scripts/skh_rank_analyze.py --raw <数据目录>
python scripts/skh_rank_ledger.py --raw <数据目录> # 11 功能族 + 逐条归类
python scripts/skh_rank_report.py --raw <数据目录> --out <报告.html>
🔴 四条最贵判据(踩过才知道,勿凭直觉改):
| # | 判据 | 代价 |
|---|---|---|
| 1 | 数据在 api.skillhub.cn/api/skills,不在页面 HTML |
直取 /skills?sortBy=score 只有 7 KB 空壳(SPA) |
| 2 | pageSize 上限 100,超出返回 code=400 并写明范围 |
试参数不如直接读错误正文 |
| 3 | 去重键是 namespace.canonicalName,不是 slug |
同一 slug 允许被不同发布者各发一份;按 slug 去重会静默少算真实条目 |
| 4 | 类目接口返回 {count, items},没有 data 包裹 |
与列表接口形态不同,按列表形状解析会拿到空表 |
🔴 两条会得出相反结论的口径坑(10-07 追加):
score是按响应批次归一化的,不是全局分 —— 同一技能两次查询可得 50,114 / 40,024,每页批次最大值恒为 100,000。
⇒ 只能用于同批内排序;跨批比较一律改用downloads/installs/stars。- 头部样本的中位数不能当基线 —— 该样本本身是精选集合。全站下载中位 ≈160,头部样本中位 ≈1,792,差一个数量级。两个数都要给。
收费技能判定:用 labels.pricing_type(paid=微信支付|alipay=支付宝 AI 付),不是 category=pay-skill
(后者是跨类目筛选面,命中项的 category 仍是其功能类目)。
查自家技能:keyword=<品牌词> → 按 namespace.canonicalName 里的 handle 过滤;必取 created_at 做年龄说明。
可发现性检验(10-07 追加 · 本路最高价值的一步):给每部自家技能配 3 个「用户会输入的功能词」(不用品牌词),
跑 scripts/skh_discoverability.py 实测能否检出、排第几。
🔴 必须同时测 limit=20 与 limit=50 —— 真正的失败模式常常是「刚好被截断在 20 名之外」,
只测一档会把「边缘」误判成「不存在」,结论方向就反了。三种模式处置不同:
A 黑话命名(0 命中)→ 改名;B 边缘截断(12–24 位)→ 改名+描述抢前排+外部导流三件一起做;C 真无供给 → 机会位。
配套产出 scripts/skh_optimize_{report,md}.py(优化参考依据 HTML/行动清单 MD)。
付费定价(10-07 追加):价格两条通道位置不同 —— 支付宝通道在列表接口 channelPricing.price,微信通道在详情接口 pricing.pricePerCall(该字段响应不稳定,不可作统计依据)。实测中位 1.00 元/次、均值 2.79、区间 0.01–100;定价与传播量基本无关;🔴 企业认证主体做付费但几乎不公开标价(头部付费 96 条中 72 条有认证,公开标价的 445 条中认证者为 0)。详见参考档 §10。
竞品价格对标(10-07 追加):以自家技能的二级类目为匹配键,取该子类下载量前列的收费技能做同域对标;同时给「该子类价格中位」与「收费供给量(稀缺度)」,按四象限给策略。🔴 两个统计陷阱:① 区间占比会掩盖精确价格点(真相是 1.00 元整占 38%,不是「1–2 元占 43%」);② 分箱边界 p < 1 会把 p == 1.0 吃进「1–2 元」箱 ⇒ 必须单独给众数价。详见参考档 §10.8。
口径纪律:downloads=曝光代理、installs=采纳代理、stars=认可度。
报告必须写明覆盖率与上架时长;上架过短的只能说「尚未起量」,不能判「已失败」。
改版效果以同一脚本复跑的命中率验收,不以感觉验收。
不做:拿榜单名次当质量背书推荐给用户;用 slug 去重;高频轮询;把本路当成 §2 的替代。
2.7 平台官方回评通道与全站九面(2026-10-07 立)
> 判据全文:references/平台官方反馈通道与全站结构.md|脚本:scripts/skh_sitemap_*.py
什么时候走这一路:① 要说清自己技能在平台眼里好在哪、差在哪;② 审核被驳且理由指向安全;③ 要看榜单之外的曝光位与资产形态。
三条官方命令(一条一份):
skillhub skill reports <slug> --namespace <handle> --json # 双实验室安全报告
skillhub skill evaluation <slug> --namespace <handle> --json # 5 维 11 子项质量评测
skillhub skill rankings --type all # 六个展示位一次取全
🔴 三条最贵判据
| # | 判据 | 代价 |
|---|---|---|
| 1 | 检索参数是 q,不是 keyword —— 传 keyword 被静默忽略且不报错,恒返回默认榜首 |
对照实验:q=图标→iconify-search;keyword=图标→dev-expert |
| 2 | q= 无匹配时回落默认榜首,不返回空 |
永远不能用「条数=0」判断无命中,必须看内容 |
| 3 | 「基础安全不通过」的真源是科恩 keen-xti + 云鼎 tencent-sanbu 双实验室扫描 |
先取 skill reports 看真因,不要凭猜改包;报告带日期,历史驳回可能对应旧版本。🔴 安全分账必须逐部取,禁用样本代表全量(实测全量 22 benign+3 云鼎 suspicious) |
全站共九个面(此前只掌握榜单面):榜单/展示位(6 个)/检索/详情/类目/套装(meta-skill)/人设(soul)/组织 registry/开放平台。
其中 newest 展示位是「零互动也有位」的口子(下载中位仅 16),paid 展示位当前为空。
口径纪律:平台评测分数是质量判据,不是榜单名次,不得当排名向用户推销。
domestic / scan 满分只说明「国内友好 + 安全」,不等于「内容专业」。
不做:拿评测分数当排名;用 keyword= 调 /api/v1/search 并相信结果;凭猜改包规避安全驳回。
§3 连接器推荐
只在「任务确实需要外部服务且现有工具无法完成」时触发 —— 不是每轮都推。
- 检索时把用户原话(或轻度改写)放进意图字段;关键词只在确有用时才加。
- 只保留能直接推进当前任务、且当前未连接的候选。
- 最多选 3 个,id 必须逐字来自本轮检索结果。
- 出一次卡片,多个候选放进同一次调用。
§4 专家推荐
- 先确认当前会话未选专家:已选则立即停止,不检索、不推荐、不替换。
- 检索后从候选里对齐当前任务,个体专家与专家团合计最多 3 个。
- 出一次卡片;卡片类型与 id 逐字取自检索结果。
- 检索结果若提示已选专家,立即回到原任务,不再推荐。
> 会话内只能启用一个专家或专家团 —— 这是产品约束,不是建议。
§5 推荐的取舍判据(避免噪声)
| 判据 | 说明 |
|---|---|
| 相关性 | 只推与当前任务直接相关的;「可能有用」不构成推荐理由 |
| 未连接 | 已连接的不推 —— 推了等于让用户重复授权 |
| 不复推 | 用户跳过/超时/取消后,同一条回复内不再推同批候选 |
| 渠道单一 | 不得用网络检索找插件/技能;平台工具是唯一来源 |
| 静默失败 | 检索无相关结果时,不描述检索过程,直接继续原任务 |
| 不扰动 | 推荐是支线:卡片发出后,原任务该继续就继续,不要停下来等 |
§6 本机实测坑
- 卡片与文本列表的差别是硬差别:文本列表不会被渲染成可操作入口,等于没有推荐。
- 重复调用荐装卡会被拦(同一回复只允许一次),并行发两张同样算两次。
- 安装成功 ≠ 可用:技能需要用户启用后才生效;已装但未启用的技能,用起来照样报找不到。
- 不要替用户做授权决定:任何安装/连接/授权都必须由用户从卡片发起。
- 推荐不该变成打断:判定「本次任务是否真的缺外部能力」,缺才推;否则就是纯打扰。
- 查平台规格的第一手来源,是本机自带的官方文档 —— 不是网搜、也不是模型记忆:
<安装目录>里已解包那一层的cli/dist/web-ui/docs/cn/cli/(368 篇,含plugins.md/hooks.md/skills.md/settings.md/plugin-marketplaces.md)。拿不准字段名就先来这里查。 - 官方文档写
~/.codebuddy/...,本机实盘是~/.workbuddy/...—— 照抄文档里的路径会静默找不到文件。字段名信文档,路径信实盘。 - 🔴
/api/v1/search的参数名是q—— 传keyword被静默忽略且不报错,恒返回默认榜首 10 条;且无匹配时回落而非返回空,所以「条数」永远 ≥1,不能用来判有无命中。(CLI 源码skills_store_cli.py:1585) - 🔴
/api/v1/categories的subCategories恒为空 —— 二级类目只能从技能条目聚合,不是类目接口给的。 - 🔴 详情接口是查询串式:
/api/v1/skills/<slug>?namespace=<handle>;路径式/api/v1/skills/<handle>/<slug>返回 405 而非 404 ⇒ 405 表示「路径形态不对」,不是「不存在」。 - 🔴 同一份安全报告两个键名:详情接口
securityReports.sanbu= CLIreports.yunding(同一云鼎实验室),解析器两种都要兼容。
§7 能力边界与反例
能做:三线路由判定、关键词取法、检索结果分支处理、版本新旧判读、错误前缀处置、候选筛选与卡片出法、市场规模采样与功能台账(§2.6)、平台官方回评通道与全站九面(§2.7)。
不做:
| 反例 | 正确去处 |
|---|---|
| 技能包到手后的进库审查、命名合规、位次评定 | 万象-技能打包与库治理 |
| 自己写 HTTP 请求去装包 / 自己拼下载地址 | 禁止 —— 只能走平台工具 |
| 用网络检索找插件候选 | 禁止 —— 平台检索是唯一来源 |
| 直接把推荐的候选列表写成文本清单 | 用卡片,不用文本 |
| 任务里并没有缺口,仍强行推荐 | 不推 —— 推荐要有触发条件 |
| 把榜单名次当质量背书 | 禁止 —— score 只作相对序,不作品质结论 |
| 拿 §2.6 的采样结论替代 §2 的单件检索安装 | 两条路分工不同,不互相替代 |
用 keyword= 调 /api/v1/search 并相信结果 |
用 q=(§2.7) |
| 把平台评测分数当排名向用户推销 | 它是质量判据,不是榜单名次 |
| 凭猜改包去规避「基础安全不通过」 | 先取 skill reports 看真因(§2.7) |
常见误用与常见问题(FAQ)
常见误用(反模式)
| 误用 | 后果 | 正解 |
|---|---|---|
| 自己造网络请求 | 等于把用户凭证放进了对话与日志 | 只用平台工具 —— 三条线各自的入口工具是唯一通道;禁止构造 HTTP、拼接 URL、处理 token/cookie/Authorization,鉴权全部由宿主完成 |
| 替用户启用技能,或接着调用它的工具 | 越界 | 不要替用户启用,也不要接着调用它的工具 —— 启用是用户的动作 |
| 替用户做授权决定 | 越界 | 任何安装/连接/授权必须由用户从卡片发起 |
| 自己拼路径转给用户 | 路径可能错 | 直接把工具返回的 message 转给用户(不要自己拼路径) |
| 把平台评测分数当榜单名次推销 | 口径错误 | 口径纪律:平台评测分数是质量判据,不是榜单名次,不得当排名向用户推销 |
只测 limit=20 |
真正的失败模式常常是「刚好被截断在 20 名之外」 | 必须同时测 limit=20 与 limit=50 |
| 凭猜改包去解「基础安全不通过」 | 方向错 | 真源是科恩 keen-xti + 云鼎 tencent-sanbu 双实验室扫描;先取 skill reports 看真因;报告带日期,历史驳回可能对应旧版本;安全分账必须逐部取,禁用样本代表全量 |
| 用区间占比代替精确价格点 | 掩盖真相 | 真相是「1.00 元整占 38%」,不是「1–2 元占 43%」;另注意分箱边界 p < 1 会把 p == 1.0 吃掉 |
常见问题
- Q:走哪条线? A:见「§1 三线路由(先判走哪条)」—— 技能市场/连接器推荐/专家推荐。
- Q:关键词怎么取? A:见「§2.1」;结果分支的判定顺序不能调(§2.2)。
- Q:怎么减少推荐噪声? A:见「§5 推荐的取舍判据(避免噪声)」。
- Q:库外怎么找? A:见「§2.5 库外寻源:GitHub/全网」。
- Q:能做市场规模采样吗? A:能,见「§2.6 市场规模采样与功能台账」与「§2.7 平台官方回评通道与全站九面」。
- Q:本技能不覆盖什么? A:见「§7 能力边界与反例」。
附 · 来源交代
| 项 | 说明 |
|---|---|
| 版本 | 1.7.0 |
| 建立日期 | 2026-09-19|最近变更 2026-10-07(新增 §2.6 市场规模采样与功能台账、§2.7 平台官方回评通道与全站九面;脚本 9 个;判据 references/市场规模采样与功能台账.md、references/平台官方反馈通道与全站结构.md;同日追加 收费技能普查与竞争对标口径) |
| 来源 | 自研(origin: own)。建立动机:平台内置的 skill-creator 之外的四个系统件 —— 技能市场安装器、find-skills、连接器推荐、专家推荐 —— 覆盖了本域的操作面,但①为版本目录结构、随平台升级整体替换,本机经验无处沉淀;②四者分居四处,而「缺能力时该找哪一种」这一层判断无人承担。故按功能域合并自研一部,只吸收能力类别与工具事实边界,不复制其文本;§5 取舍判据、§6 本机实测坑为自有增量。 |
| 与系统件的关系 | 并存,不替换。系统件仍负责实际的检索与安装调用;本技能负责三线路由判定与推荐纪律。 |
| 著作权 | 署名 zzzzzzzp,All Rights Reserved |