SKill管理太痛苦?一键安装 + AI自动生成教程,效率飙升10倍!
在 AI 智能体系统中,Skill(技能) 是赋予大模型专业能力的核心手段。但随着技能越来越多,一个老生常谈的问题浮出水面:
本地安装零散、依赖配置复杂、管理靠肉眼翻目录、依赖靠运气装、装完了不会用还得翻文档 。
本文将带你拆解 Aix-DB 全新上线的 技能中心(Skill Center) 模块,一套完整的技能生命周期管理方案:从 GitHub 一键安装 → 依赖自动配置 → 可视化管理 → AI 生成使用教程,让智能体技能管理从"刀耕火种"进入"工业化"时代。
💡 核心思想: 将技能从散落的 Markdown 文件,升级为拥有标准格式、安装源、依赖管理、教程生成的可管理资产,通过统一的 Web 界面完成全生命周期操作。
Text-to-SQL进化·Skill模式:融合标准能力的智能SQL生成方案
Text-to-SQL进化:从单轮问答到Skill驱动的智能数据分析

🎬 运行效果预览
📌 如果您这个项目感兴趣,欢迎「付费点赞」支持一下!
👉 下方点击「喜欢作者」,金额随意,心意无价。 让我们在技术路上彼此赋能,少走弯路,高效落地!
付费后,请务必添加我的微信(微信号:weber812)并发送支付凭证,我将第一时间拉您进入专属「技术支持群」。
进群后您能获得哪些福利?👉 完整代码具体请见下方说明!
🧭 本文流程一览
✅ 痛点分析 —— 技能管理的四大难题 ✅ 整体架构 —— 前后端分层设计与技术选型 ✅ GitHub 一键安装 —— 输入仓库地址,预览并选择性安装 ✅ 依赖自动安装 —— 自动检测依赖,创建独立虚拟环境 ✅ 技能管理面板 —— 搜索、启用/禁用、批量卸载、分 scope 管理 ✅ AI 使用教程 —— 基于 LLM 流式生成技能使用指南 ✅ Slash 命令集成 —— 在聊天框中直接选择技能调用
一、痛点分析:技能管理的四大难题
在 Aix-DB 之前的版本中,技能以 SKILL.md 文件的形式存放在代码目录下。虽然简单直观,但随着项目规模扩大,问题逐渐暴露:
| 安装不方便 | ||
| 管理太零散 | ||
| 依赖不能自动安装 | ||
| 没有使用教程 |
二、整体架构:前后端分层设计
技能中心采用经典的三层架构:前端页面 → REST API → 核心服务。
1 ┌─────────────────────────────────────────────────────────┐│ 前端 · 技能中心页面 ││ (Vue 3 + Naive UI · skill-center.vue) ││ ││ ┌─────────┐ ┌──────────┐ ┌───────────┐ ┌────────┐ ││ │GitHub │ │Zip上传 │ │技能列表 │ │使用教程 │ ││ │安装面板 │ │安装 │ │管理面板 │ │抽屉 │ ││ └────┬────┘ └────┬─────┘ └─────┬─────┘ └───┬────┘ │└───────┼────────────┼──────────────┼─────────────┼───────┘│ │ │ │▼ ▼ ▼ ▼┌─────────────────────────────────────────────────────────┐│ 后端 · REST API (Sanic Blueprint) ││ (controllers/skill_api.py) ││ ││ POST /install/github POST /install/upload ││ GET /list POST /uninstall ││ POST /toggle GET /content ││ GET /preview POST /tutorial (SSE) │└───────────────────────┬─────────────────────────────────┘│▼┌─────────────────────────────────────────────────────────┐│ 核心服务 · SkillService ││ (services/skill_service.py) ││ ││ - YAML Front Matter 解析 ││ - GitHub zip 下载与解压 ││ - 独立虚拟环境创建 (_setup_skill_venv) ││ - 技能启用/禁用(.disabled 标记文件) ││ - 双 scope 目录管理(common / deep) │└─────────────────────────────────────────────────────────┘
2.1 技术栈
2.2 双 Scope 设计
技能中心将技能分为两个独立的作用域:
- 智能问答(common): 服务于 CommonReactAgent,技能以 Prompt 注入方式增强通用问答能力
- 深度问数(deep): 服务于 DeepAgent,技能驱动多阶段深度研究任务
1 2 3 # 两个技能目录,彼此隔离 COMMON_SKILLS_DIR = Path("agent/common/skills") # docx, pdf, pptx, xlsx, web-access... DEEP_SKILLS_DIR = Path("agent/deepagent/skills") # query-writing, report-generation...
前端通过 Tab 切换 scope,所有操作(安装、卸载、搜索)都在对应 scope 下执行。
三、GitHub 一键安装
3.1 安装流程
1 用户输入仓库地址 → 预览技能列表 → 勾选要安装的 → 一键安装

owner/repo 或完整 URL),即可完成以下自动化流程:Step 1:预览
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 async def preview_github_repo(cls, repo: str) -> list[dict]: """预览 GitHub 仓库中的技能""" branches = ["main", "master"] # 自动尝试两个分支 for branch in branches: try: skills, temp_dir = await cls._download_github_skills(repo, branch) if skills: shutil.rmtree(temp_dir, ignore_errors=True) return skills except Exception: continue return []``` ❝ 🔍 说明: - 自动兼容 `main` 和 `master` 两种分支命名,无需用户手动指定 - 预览阶段只解析 `SKILL.md` 的 YAML Front Matter,不执行安装 - 支持仓库中包含多个技能(每个子目录一个 `SKILL.md`) **Step 2:下载与解析** ```python async def _download_github_skills(cls, repo, branch, skill_names=None): zip_url = f"https://github.com/{repo}/archive/refs/heads/{branch}.zip" async with httpx.AsyncClient(follow_redirects=True, timeout=60) as client: response = await client.get(zip_url) response.raise_for_status() skills, temp_dir = cls._extract_skills_from_zip(response.content, skill_names) return skills, temp_dir``` ❝ 🔍 说明: - 通过 GitHub Archive API 下载 zip 包,无需 git clone,速度更快 - 使用 `httpx.AsyncClient` 异步下载,不阻塞 Sanic 事件循环 - 解压后递归扫描 `SKILL.md` 文件,自动识别技能边界 **Step 3:选择性安装** 前端展示预览结果后,用户可以勾选需要的技能,点击安装: ```typescript // 前端:全选 / 部分选择 const allPreviewSelected = computed({ get: () => previewList.value.length > 0 && selectedForInstall.value.length === previewList.value.length, set: (val: boolean) => { selectedForInstall.value = val ? previewList.value.map(s => s.name) : [] },})
3.2 Zip 包上传安装
除了 GitHub,还支持直接上传 zip 包安装,适用于内网环境或私有技能:
1 2 3 @bp.post("/install/upload") async def install_from_upload(request: Request): file = request.files["file"][0] zip_bytes = file.body installed = SkillService.install_from_zip(zip_bytes, filename, scope=scope)
四、依赖自动安装:独立虚拟环境
这是解决"装了技能跑不起来"的关键设计。每个技能可以携带自己的 requirements.txt,安装时系统自动为其创建独立的 Python 虚拟环境。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 @classmethod def _setup_skill_venv(cls, skill_dir: Path) -> bool: """为 skill 创建独立虚拟环境并安装依赖""" requirements_file = skill_dir / "requirements.txt" if not requirements_file.exists(): return True # 无依赖,跳过 venv_dir = skill_dir / ".venv" # 创建虚拟环境 subprocess.run( [sys.executable, "-m", "venv", str(venv_dir)], check=True, capture_output=True, timeout=300, ) # 确定 pip 路径(跨平台兼容) pip_path = ( venv_dir / "bin" / "pip" if venv_dir.joinpath("bin").exists() else venv_dir / "Scripts" / "pip.exe" ) # 安装依赖 subprocess.run( [str(pip_path), "install", "-r", str(requirements_file), "-q"], check=True, capture_output=True, timeout=600, ) return True``` ❝ 🔍 说明: - **环境隔离**:每个技能拥有独立的 `.venv`,避免不同技能之间的包版本冲突 - **跨平台兼容**:自动适配 Linux/macOS(`bin/pip`)和 Windows(`Scripts/pip.exe`) - **超时保护**:虚拟环境创建 5 分钟超时,依赖安装 10 分钟超时,防止卡死 - **无依赖跳过**:没有 `requirements.txt` 的技能直接安装,不额外消耗时间
1 2 3 4 5 6 7 8 9 10 11 12 技能目录结构(安装后): agent/common/skills/ ├── docx/ │ ├── SKILL.md # 技能定义文档 │ ├── requirements.txt # Python 依赖声明(可选) │ └── .venv/ # 自动创建的虚拟环境(可选) ├── pdf/ │ ├── SKILL.md │ └── .disabled # 禁用标记文件 └── web-access/ └─ SKILL.md
五、技能管理面板
5.1 核心功能
前端技能管理面板提供以下能力:
| 技能列表 | GET /system/skill/list?scope=common | ||
| 关键词搜索 | |||
| 查看详情 | GET /system/skill/content?name=xxx | ||
| 启用/禁用 | POST /system/skill/toggle | .disabled 标记文件控制 | |
| 单个卸载 | POST /system/skill/uninstall | ||
| 批量卸载 |
5.2 启用/禁用机制
技能的启用/禁用采用了极其简洁的标记文件方案:
1 2 3 def toggle_skill(cls, skill_name, enabled, scope="common"): disabled_file = skill_dir / ".disabled" if enabled: disabled_file.unlink() # 删除标记 = 启用 else: disabled_file.touch() # 创建标记 = 禁用
❝ 🔍 说明:
无需数据库、无需配置文件,一个空文件即可标记状态 Agent 加载技能时通过 get_enabled_skill_paths()自动过滤禁用项禁用不删除文件,随时可以重新启用
5.3 SKILL.md 标准格式
每个技能通过 SKILL.md 文件自描述,采用 YAML Front Matter + Markdown 正文的标准格式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 --- name: query-writing description: > SQL 查询编写技能,支持复杂 JOIN、子查询、窗口函数等高级 SQL 生成 --- ## 技能说明 本技能用于辅助大模型生成高质量 SQL 查询... ## 使用场景 - 多表关联查询 - 聚合分析 - ...
SkillService 使用 yaml.safe_load 解析 Front Matter,支持 YAML 的折叠语法(>),对特殊字符也做了容错处理。
六、AI 使用教程:装完就会用

读取技能的 SKILL.md完整内容注入到预设的 Prompt 模板中 调用 LLM 流式生成中文使用教程 通过 SSE 实时推送到前端渲染
6.1 后端:LLM 流式生成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 TUTORIAL_PROMPT = """你是一个技能使用指南专家。请仔细阅读以下技能文档,然后以中文输出详细的使用教程。 ## 技能文档 {skill_content} ## 输出要求 # {skill_name} 使用教程 ## 技能简介 ## 何时使用 ## 使用步骤 ## 场景示例(2-3个) ## 注意事项 """ async def stream_fn(response): llm = get_llm(temperature=0.7) prompt = TUTORIAL_PROMPT.format(skill_name=name, skill_content=skill_content) async for chunk in llm.astream(prompt): content = chunk.content if hasattr(chunk, "content") else str(chunk) if content: data = json.dumps({"content": content}) await response.write(f"data: {data}\n\n") await response.write(f"data: {json.dumps({'done': True})}\n\n") return ResponseStream(stream_fn, content_type="text/event-stream")
6.2 前端:SSE 流式渲染
前端通过 TransformStream 将 SSE 格式转换为 MarkdownPreview 组件可消费的流:
1 2 3 4 5 const transformStream = new TransformStream({ transform(chunk, controller) { buffer += decoder.decode(chunk, { stream: true }) const lines = buffer.split('\n') buffer = lines.pop() || '' for (const line of lines) { if (line.startsWith('data: ')) { const data = JSON.parse(line.slice(6)) if (data.content) { const formatted = JSON.stringify({ messageType: 'continue', content: data.content }) controller.enqueue(new TextEncoder().encode(formatted + '\n')) } } } }}) const reader = res.body?.pipeThrough(transformStream).getReader()
❝ 🔍 说明:
教程生成是实时流式的,用户不需要等待全部生成完毕就能开始阅读 复用了聊天界面的 MarkdownPreview 组件,支持代码高亮、表格等富文本渲染 教程内容包含场景示例和提示词模板,让用户拿来即用
七、Slash 命令集成:聊天中直接调用技能
技能安装后,还能在聊天输入框中通过 / 斜杠命令快速调用:
1 2 3 // useSlashCommand.ts - 懒加载技能列表 async function ensureSkillsLoaded() { if (skillsLoaded) return const res = await fetch_skill_list('common') const data = await res.json() if (data?.code === 200 && Array.isArray(data?.data)) { allSkills.value = data.data.filter((s: SkillInfo) => s.enabled) } skillsLoaded = true}
用户在聊天框输入 / 时,自动弹出已启用的技能列表,选择后技能 Prompt 会被注入到 Agent 的上下文中。
八、完整的技能生命周期
发现技能 安装技能 管理技能 使用技能│ │ │ │▼ ▼ ▼ ▼GitHub 仓库 ──→ 预览并选择 ──→ 一键安装 ──→ 列表管理Zip 包上传 ──→ 自动解析 ──→ 依赖安装 ──→ 启用/禁用──→ 查看详情──→ AI 使用教程──→ 聊天框 / 调用──→ 批量卸载──→ 技能市场(规划中)──→ 安全检测(规划中)──→ 自动测评(规划中)──→ 版本管理(规划中)──→ 批量卸载
🎁 总结
Aix-DB 技能中心实现了一套完整的智能体技能生命周期管理方案,核心优势:
✅ 一键安装:输入 GitHub 地址即可预览并安装,告别手动拷贝 ✅ 依赖自治:自动检测 requirements.txt,为每个技能创建独立虚拟环境 ✅ 统一管理:双 Scope(智能问答/深度问数)分类管理,搜索、启用/禁用、批量卸载一站搞定 ✅ AI 教程:基于 LLM 流式生成使用教程,装完就会用 ✅ Slash 集成:聊天框 / 命令直接调用技能,零学习成本 ✅ 标准格式:SKILL.md + YAML Front Matter,技能自描述、可共享
❝ 🔜 下一步动作:
技能市场:构建公共技能仓库,一键搜索社区共享的技能 安全检测:安装前自动扫描技能代码,识别潜在安全风险 自动测评:安装后自动运行技能测试用例,验证兼容性 版本管理:支持技能版本追踪与一键升级
📚 完整代码
我的开源项目:https://github.com/apconw/Aix-DB
🌈 项目亮点
✅ 集成 MCP 多智能体架构 ✅ 支持 Dify / LangChain / LlamaIndex / vLLM / Neo4j /Skill/Openclaw ✅ 前端采用 Vue3 + TypeScript + Vite5,现代化交互体验 ✅ 内置 ECharts / AntV 图表问答 + CSV 表格问答 ✅ 支持对接主流 RAG 系统 与 Text2SQL 引擎 ✅ 轻量级 Sanic 后端,适合快速部署与二次开发 ✅ 项目已被蚂蚁官方推荐收录
运行效果:

在群里,您将获得以下专属支持:
✅ 定期技术答疑会议:固定时间开展群内答疑,集中解决大家在部署、配置中遇到的共性问题 ✅ 典型问题远程演示:针对高频难点,我会通过屏幕共享等方式进行实操讲解,看得懂、学得会 ✅ 二次开发思路分享:在会议中开放讨论,提供实现路径、代码结构建议与关键点提醒 ✅ 项目更新与优化同步:第一时间在群内发布文章内容的迭代、Bug修复与新功能进展
📌 我们不搞"私聊轰炸",而是用更高效的方式——通过集中答疑 + 资料共享 + 社群互助,让每一位成员都能参与、收获、成长。

入群发你项目资料:

📌 关注公众号【大模型应用开发实战】 👉 获取更多 MCP、Text2SQL、RAG、Skill、文档解析/报告生成 实战教程!
如果有Openclaw部署多智能体搭建具体场景落地也欢迎联系我
👉 更多阅读
夜雨聆风