ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

科大讯飞开源 SkillHub 私有化部署:用 Docker 3 分钟搭好你的 AI 技能商店

科大讯飞开源 SkillHub 私有化部署:用 Docker 3 分钟搭好你的 AI 技能商店 1. 为什么要在内网搭一个 AI 技能商店SkillHub 是科大讯飞开源的企业级 AI Agent 技能商店简单说就是把你团队里散落各处的 Skill 包集中管起来让 Claude Code、OpenClaw 这类 Agent 平台能通过统一入口搜索、安装、调用。它适合谁适合那些 Skill 文件已经多到用文件夹管不过来、又不想把内部业务逻辑放到公网的中小团队。我见过太多团队的做法是每个人本地一个skills目录靠微信传压缩包版本号写不写全看心情。等到某个技能要修 bug没人知道线上跑的是哪一版。SkillHub 解决的正是这个——私有化部署、命名空间隔离、发布审核、全文搜索一套下来把技能当软件制品来管。这篇不聊概念直接给可复制的 Docker 部署路径目录结构、环境变量、启动命令骨架最后演示一次技能上架和调用的完整验证。目标是把开源仓库变成你内网能访问的私有技能市场。2. 部署前把 TaoToken 这条链路准备好SkillHub 本身是技能仓库但技能最终要跑在 Agent 上Agent 要调模型。如果你在内网做私有化模型调用这一环同样需要可控的入口。我自己的做法是SkillHub 管技能TaoToken 管模型接入两者分开互不耦合。TaoToken 在这里的角色是统一的模型 API 入口支持 Claude Code、Coding Plan 等场景。你可以在官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 了解整体能力API 地址是 https://taotoken.net/api这个不加 UTM直接配到环境变量里。具体到操作先去控制台生成一个 API Key控制台入口https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewriteAPI Keys 管理https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite生成后先别急着写进 SkillHub先单独验证 Key 能用。模型对话页面可以快速试一次https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite如果你后面要长期跑编码类 Agent建议直接看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewriteClaude Code 的接入文档在这里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite这一步的意义是等 SkillHub 部署完你上架的第一个技能就可以是一个「调用模型做代码审查」的 Skill链路是通的不会卡在鉴权上。3. Docker 部署 SkillHub 的目录与环境变量先把仓库拉下来。SkillHub 的 GitHub 地址是https://github.com/iflytek/SkillHub克隆命令git clone https://github.com/iflytek/SkillHub.git cd SkillHub官方给的极速部署是make dev-all一条命令拉起。但生产或内网环境我建议不要直接用 dev 模式而是拆开看它到底起了什么。下面是我整理的一份可复制的目录结构放在宿主机上/opt/skillhub/ ├── docker-compose.yml ├── .env ├── data/ │ ├── postgres/ │ ├── redis/ │ └── uploads/ └── logs/ └── app/data/uploads用来存技能包文件data/postgres和data/redis是持久化卷logs/app挂应用日志。这样做的目的是容器删了重建数据还在。环境变量写在.env里核心几项如下# 数据库 POSTGRES_USERskillhub POSTGRES_PASSWORD换成你自己的强密码 POSTGRES_DBskillhub # Redis REDIS_PASSWORD换成你自己的强密码 # 应用 APP_PORT3000 APP_BASE_URLhttp://你的内网IP:3000 UPLOAD_DIR/app/data/uploads # 模型接入可选用于技能内调用 TAOTOKEN_API_BASEhttps://taotoken.net/api TAOTOKEN_API_KEY你在控制台生成的Key注意APP_BASE_URL一定要写成内网可访问的地址不然后面技能详情页里的下载链接会指向 localhost别的同事点开就是 404。docker-compose.yml的骨架大致是这样我按官方结构做了精简保留关键部分version: 3.8 services: postgres: image: postgres:15-alpine restart: always environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} volumes: - ./data/postgres:/var/lib/postgresql/data redis: image: redis:7-alpine restart: always command: redis-server --requirepass ${REDIS_PASSWORD} volumes: - ./data/redis:/data skillhub: image: skillhub:latest restart: always depends_on: - postgres - redis ports: - ${APP_PORT}:3000 environment: DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}postgres:5432/${POSTGRES_DB} REDIS_URL: redis://:${REDIS_PASSWORD}redis:6379/0 APP_BASE_URL: ${APP_BASE_URL} UPLOAD_DIR: ${UPLOAD_DIR} TAOTOKEN_API_BASE: ${TAOTOKEN_API_BASE} TAOTOKEN_API_KEY: ${TAOTOKEN_API_KEY} volumes: - ./data/uploads:/app/data/uploads - ./logs/app:/app/logs启动命令docker compose up -d首次拉镜像会慢一点取决于你的网络。起来之后用docker compose ps看三个容器是不是都 healthy。4. 验证部署上架一个技能并调用它容器起来后浏览器打开http://你的内网IP:3000应该能看到 SkillHub 的界面。第一次进去先注册管理员账号然后创建一个命名空间比如dev-team。接下来准备一个最小技能包。SkillHub 读取的是Skill.md里的标准化协议和语义化版本号所以目录结构要规范hello-skill/ ├── Skill.md └── index.jsSkill.md内容示例# Hello Skill ## 描述 一个用于验证 SkillHub 链路的示例技能。 ## 版本 1.0.0 ## 入口 index.js ## 权限 无index.js就写个最简单的导出module.exports async function handler(input) { return { ok: true, message: 收到输入: ${JSON.stringify(input)} }; };把这个目录打成 zip在 Web 界面点「上传技能」选dev-team命名空间。系统会自动读取版本号并触发安全扫描。扫描通过后管理员在审核列表里点通过技能就正式上架了。验证调用有两种方式。第一种是在 Web 界面点技能详情看版本历史和 README 是否正常渲染。第二种是用命令行SkillHub 支持通过注册中心地址让 Agent 平台搜索安装# 假设 SkillHub 暴露了 CLI 接口 skillhub search hello-skill --registry http://你的内网IP:3000 skillhub install hello-skill --registry http://你的内网IP:3000如果 CLI 还没配好最直接的验证是调 API。SkillHub 支持生成作用域 Token在后台「API Token」页面创建一个然后curl -H Authorization: Bearer 你的Token \ http://你的内网IP:3000/api/skills?namespacedev-team返回 JSON 里能看到hello-skill和它的版本号说明上架和检索链路都通了。这一步过了你的私有技能市场就算真正跑起来了。5. 部署与调用中的常见报错排查容器起来了但页面打不开先docker compose logs skillhub看应用日志。八成是数据库连不上检查.env里的密码有没有特殊字符没转义或者depends_on虽然写了但 postgres 还没初始化完。加个healthcheck或者等 30 秒再访问。上传技能报 413这是 Nginx 或应用层的 body 大小限制。如果你前面挂了反向代理改client_max_body_size 50m;。如果没挂代理检查应用自身的上传限制配置。技能详情页下载链接指向 localhost就是前面说的APP_BASE_URL没配对。改成内网 IP 后重启容器即可。安全扫描一直 pending扫描是异步任务依赖 Redis 队列。docker compose logs redis看有没有报错确认REDIS_URL里的密码和redis-server --requirepass一致。API 调用返回 401Token 作用域不对。SkillHub 的 Token 分命名空间级别和全局级别创建时看清楚权限范围。另外 Token 有有效期过期了重新生成。Agent 平台搜不到私有技能注册中心地址填的是公网地址或者 localhost。Agent 和 SkillHub 如果在不同机器必须填 SkillHub 所在机器的内网 IP 或域名。6. 把技能管起来之后模型入口也别散着SkillHub 解决的是技能制品的集中管理但技能跑起来最终还是要调模型。如果你的团队同时用 Claude Code、OpenClaw 和其他 Agent 平台模型入口散在各人本地配置里排查问题会很痛苦。我的建议是SkillHub 管技能TaoToken 管模型接入两边都收敛到内网可控的入口。API Key 统一在控制台生成接入文档看这里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite如果你主要跑编码类 AgentCoding Plan 的配置方式可以直接参考https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewriteClaude Code 的接入细节在https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite先把 SkillHub 跑通再把你最常用的那个技能改成调用统一模型入口整条链路就闭环了。
返回列表