进阶 📋 6 个步骤 第 518 / 520 篇

用讯飞开源 SkillHub 自托管企业技能注册中心:Docker 部署、CLI 发布与团队命名空间实操

讯飞开源 SkillHub 把技能包管理搬进自己机房:一条 Docker 命令部署、语义化版本发布、异步安全扫描加管理员审核、团队命名空间权限隔离与审计日志,ClawHub 风格客户端改个注册中心地址即可接入。

2026.10.10· 24 分钟阅读· 约 2752 字· 🏢 SkillHub / 🧩 技能注册中心

Agent Skills 这一年成了智能体生态的通用货币:一个装着 SKILL.md 和配套脚本的文件夹,就能教会智能体一套可复用的业务本领。可技能一多,团队马上撞上管理难题——技能散落在每个人的私人目录里,谁改过哪一版没人说得清;涉及客户数据的技能想共享,又怕直接进了外部平台;新人入职,没人告诉他该装哪几个。科大讯飞在 10 月初开源了 SkillHub,把「技能包管理」做成了一个可以跑在自己服务器上的注册中心:发布带语义化版本、全文搜索、团队命名空间隔离、管理员审核、审计日志,一条 Docker 命令就能起整套服务,上线几天 GitHub 星数已经过五千,Apache-2.0 协议。本篇按官方 README 路径,从部署到发布、安装一个技能包完整走一遍。

🎯 适合人群:想在组织内部给 Claude Code、OpenClaw 等智能体搭一个私有「技能商店」的团队负责人与平台工程师。前置要求:一台能装 Docker 与 Docker Compose 的机器(本地体验或内网服务器均可);CLI 安装需要 Node.js 环境。

先理解:SkillHub 在技能链路里的位置

SkillHub 不生产技能,它管技能的流通。心智模型就是公司内部的 npm 仓库:技能作者在 Web 界面上传技能包(核心是一份带名称、描述与语义化版本的 SKILL.md),系统后台异步跑安全扫描,团队管理员审核通过后技能才正式上架;其他成员通过全文搜索找到它,用 CLI 一条命令装进自己的智能体。权限模型分三层——每个团队有自己的命名空间,命名空间内按 Owner / Admin / Member 三种角色控制发布与审核,跨团队共享要走「推广到全局范围」的审批,所有治理动作都会记入审计日志。存储层可插拔:开发环境用本地文件系统,生产环境切到 S3 或 MinIO,数据全程不出你的机房。

注意与同名项目区分。站内此前的 SkillHub 报道与教程(技能市场、按调用计费那类)主体并非本项目;科大讯飞这个 SkillHub 是自托管注册中心,不提供公有云计费市场。检索资料时认准 GitHub 仓库 iflytek/skillhub。

Step 1:一条 Docker 命令起整套服务

1 用官方 runtime.sh 拉起完整运行时
# 前置:机器上已装 Docker 与 Docker Compose
# 方式一:官方 GHCR 镜像
rm -rf /tmp/skillhub-runtime
curl -fsSL https://raw.githubusercontent.com/iflytek/skillhub/main/scripts/runtime.sh | sh -s -- up

# 方式二:国内推荐走阿里云镜像
rm -rf /tmp/skillhub-aliyun
curl -fsSL https://imageless.oss-cn-beijing.aliyuncs.com/runtime.sh | sh -s -- up --aliyun --version latest

# 停止服务
/tmp/skillhub-runtime/runtime.sh down

这条脚本会拉起 SkillHub 的全部容器:Java 21 / Spring Boot 后端、React 前端、PostgreSQL 16 数据库、Redis 7 缓存和一个安全扫描服务。默认拉取 latest 稳定版镜像,想跟 main 分支的最新构建就显式传 --version edge,想锁版本用 --version v0.2.0 这样的具体 tag。部署遇到问题,官方的排障建议很直接:清掉运行时目录重来一遍。

两个部署前必读。① 这是「curl 远程脚本直接执行」的部署方式,执行前建议先把 runtime.sh 下载下来读一遍再跑,企业内网环境尤其如此;② 零配置快开模式下,脚本会启用默认管理员(admin / ChangeMe!2026),这是给本地体验用的——正式启用前务必改掉强密码,官方的 validate-release-config.sh 校验脚本会直接拒绝默认密码的发布配置。

Step 2:进控制台,建团队命名空间

2 命名空间是权限与治理的基本单位

部署完成后浏览器打开 Web 控制台(本地开发模式是 http://localhost:3000,后端 API 在 8080 端口;用 runtime.sh 部署的,访问地址以脚本输出为准),用管理员账号登录,然后建团队命名空间:

# 本地开发调试:源码方式起一套带模拟用户的环境
git clone https://github.com/iflytek/skillhub.git
cd skillhub
make dev-all
# Web UI: http://localhost:3000   Backend API: http://localhost:8080
# local profile 自动带两个模拟用户(配合 X-Mock-User-Id 请求头切换):
#   local-user  —— 普通用户,用于发布与命名空间操作
#   local-admin —— 超级管理员,用于审核与管理流程

命名空间对应团队或全局两种范围。在团队命名空间里,管理员可以添加成员并分配 Owner、Admin、Member 角色,各自决定谁能发布、谁能审核;发布策略也是按命名空间配置的。想让某个团队的技能被全公司看到,走「推广到全局范围」的审批流,由平台管理员把关。

💡 生产部署建议加 --public-url https://skillhub.your-company.com:配置后 CLI 安装命令、Agent 设置指引和 OAuth 回调链接都会显示正确地址,否则内网 IP 会硬编码进这些生成内容里。

Step 3:装 CLI,生成作用域 Token 登录

3 CLI 是发布与安装的主力入口
# 安装 CLI(Node.js 环境)
npm install -g @astron-team/skillhub
# 或者不装全局,直接用 npx
npx @astron-team/skillhub@latest version

# 在 Web 后台生成 API Token(带作用域、前缀哈希存储)后登录
skillhub login --token sk_xxx --registry https://skillhub.your-company.com

# 验证登录状态
skillhub list

CLI 走的是 SkillHub 的原生 REST API;官方还留了一个兼容层,让现有的 ClawHub 风格注册中心客户端也能直接对接——也就是说你手上已经接入 ClawHub 生态的工具,改一下注册中心地址就能切到自己的私有仓库。Token 在 Web 后台生成,作用域可以收紧到只读或发布权限,别拿管理员 Token 到处贴。

💡 OpenClaw 的官方接入示例就是改环境变量:export CLAWHUB_REGISTRY=https://skillhub.your-company.com,之后 OpenClaw 的技能安装指令会从你的私有注册中心拉取。其他智能体平台的接入方式见仓库文档的「与智能体平台集成」章节。

Step 4:打包并发布你的团队技能

4 上传、自动扫描、管理员审核三步上架
# 一个最小可发布的技能包结构
# my-skill/
# ├── SKILL.md      # 必须:YAML frontmatter(name/description)+ 正文指令
# ├── scripts/      # 可选:技能配套脚本
# └── references/   # 可选:参考文档

# 上传白名单默认受扩展名约束,需要整体替换时配置环境变量:
# SKILLHUB_PUBLISH_ALLOWED_FILE_EXTENSIONS=.md,.json,.xsd,.xsl,.dtd,.docx,.xlsx,.pptx
# 注意:该变量是「整体替换」默认白名单,不是追加

发布走 Web 界面:在控制台上传技能包,系统自动解析 SKILL.md 里的标准化协议与语义化版本号,然后异步触发安全扫描(检查代码质量与安全漏洞),扫完进入审核队列。团队管理员审过,技能就在这个命名空间上架了;支持 beta、stable 之类的自定义标签和一个自动维护的 latest 标签。对技术团队,官方还给了 API 驱动的自动化发布路线:生成作用域 Token,让 Claude Code 写技能,再把发布流程本身做成一个技能自动上传——可以无缝挂进现有 CI/CD。

涉及隐私数据的技能要人工把关。扫描是异步跑的,报告需要管理员在审核界面主动查看——比如简历脱敏提取器这类会碰个人信息包的技能,发布前务必核对扫描报告再批准,别看到「扫描完成」就放行。

Step 5:搜索与安装,把技能装进智能体

5 三条命令完成发现到落盘
# 全文搜索,支持按命名空间、下载量、评分、时间筛选
skillhub search pdf

# 安装到指定智能体(--agent 后面跟目标智能体标识)
skillhub install pdf-parser --agent codex

# 查看本机已装技能
skillhub list

搜索结果遵循可见性规则:你只能看到自己有权限访问的技能,跨命名空间的不可见。安装后技能落到对应智能体的技能目录,下次会话即可被发现。技能详情页有版本历史、依赖关系与 README,还能收藏、评分、看下载量——这些社交数据在组织内是很好的信号:哪个技能真的有人在用,一眼就能看出来。

💡 团队冷启动阶段,建议管理员先把高频通用技能(文档处理、检索、格式转换)审核上架一批,再放开成员自主发布。有基准库存的注册中心,比人人可传的空仓库更容易养成规范。

Step 6:生产加固清单

6 内网可用到生产可用之间差这几项
# 生产基线(官方 README「Recommended production baseline」):
# 1) 配置 --public-url 为最终 HTTPS 入口
# 2) PostgreSQL / Redis 绑定 127.0.0.1,不暴露公网
# 3) 存储切外部 S3 / OSS(SKILLHUB_STORAGE_S3_* 系列变量)
# 4) 修改 BOOTSTRAP_ADMIN_PASSWORD,禁用默认密码
#    (validate-release-config.sh 会拒绝默认值 ChangeMe!2026)
# 5) 初始化完成后轮换或停用 bootstrap 管理员
# 6) 启动前跑 make validate-release-config 校验发布配置

# Kubernetes 部署
kubectl apply -f deploy/k8s/

资源紧张的机器可以用 --no-scanner 关掉安全扫描服务省一份开销,但对应地,上架前的人工审核责任就更重了。监控栈(Prometheus + Grafana)在仓库的 monitoring 目录里有现成配置,接上就能看到服务健康度。

bootstrap 管理员是部署后门,用完要关。runtime.sh 部署默认开启零配置管理员方便快开,生产环境验证完就轮换密码或直接设 BOOTSTRAP_ADMIN_ENABLED=false 停用;同时确认数据库与缓存没有意外暴露在公网。

常见问题 FAQ

Q:SkillHub 和直接用公共技能仓库比,图什么?数据主权与治理:技能里有业务话术、内部系统操作步骤甚至敏感数据处理逻辑,这些不适合放公共平台;命名空间、审核流与审计日志也是公共仓库给不了的。

Q:已经有一批技能散在同事机器上,怎么收编?按技能包结构整理成标准目录(SKILL.md + 脚本),管理员逐个上传审核即可;量大就走 API 驱动的自动化发布,把上传动作写进脚本。

Q:非 Java 团队维护这套 Spring Boot 服务费劲吗?日常运维只用 Docker Compose 与 runtime.sh 参数,不需要碰 Java 代码;只有二次开发才需要 Java 21 与 Node 20 的本地开发环境。

Q:和 Claude Code 官方的插件市场冲突吗?不冲突,定位不同:官方市场面向公共生态,SkillHub 管组织内部资产,兼容层让 ClawHub 风格客户端可以两头接,内部技能走私有库、公共技能照常走官方渠道。

← 返回教程中心