乐于分享
好东西不私藏

SKill管理太痛苦?一键安装 + AI自动生成教程,效率飙升10倍!

SKill管理太痛苦?一键安装 + AI自动生成教程,效率飙升10倍!

SKill管理太痛苦?一键安装 + AI自动生成教程,效率飙升10倍!

在 AI 智能体系统中,Skill(技能) 是赋予大模型专业能力的核心手段。但随着技能越来越多,一个老生常谈的问题浮出水面:

本地安装零散、依赖配置复杂、管理靠肉眼翻目录、依赖靠运气装、装完了不会用还得翻文档 。

本文将带你拆解 Aix-DB 全新上线的 技能中心(Skill Center) 模块,一套完整的技能生命周期管理方案:从 GitHub 一键安装 → 依赖自动配置 → 可视化管理 → AI 生成使用教程,让智能体技能管理从"刀耕火种"进入"工业化"时代。

💡 核心思想 将技能从散落的 Markdown 文件,升级为拥有标准格式、安装源、依赖管理、教程生成的可管理资产,通过统一的 Web 界面完成全生命周期操作。

Text-to-SQL进化·Skill模式:融合标准能力的智能SQL生成方案

Text-to-SQL进化:从单轮问答到Skill驱动的智能数据分析

一句话查数据出报告,AI让人人都是分析师


🎬 运行效果预览

已关注
关注
重播 分享

📌 如果您这个项目感兴趣,欢迎「付费点赞」支持一下!

👉 下方点击「喜欢作者」,金额随意心意无价。  让我们在技术路上彼此赋能,少走弯路,高效落地!

付费后,请务必添加我的微信(微信号:weber812)并发送支付凭证,我将第一时间拉您进入专属「技术支持群」。

进群后您能获得哪些福利👉 完整代码具体请见下方说明!

🧭 本文流程一览

✅ 痛点分析 —— 技能管理的四大难题 ✅ 整体架构 —— 前后端分层设计与技术选型 ✅ GitHub 一键安装 —— 输入仓库地址,预览并选择性安装 ✅ 依赖自动安装 —— 自动检测依赖,创建独立虚拟环境 ✅ 技能管理面板 —— 搜索、启用/禁用、批量卸载、分 scope 管理 ✅ AI 使用教程 —— 基于 LLM 流式生成技能使用指南 ✅ Slash 命令集成 —— 在聊天框中直接选择技能调用


一、痛点分析:技能管理的四大难题

在 Aix-DB 之前的版本中,技能以 SKILL.md 文件的形式存放在代码目录下。虽然简单直观,但随着项目规模扩大,问题逐渐暴露:

痛点
具体表现
影响
安装不方便
手动 clone 仓库、拷贝目录、改路径,一个技能装10分钟
技能共享成本极高
管理太零散
技能散落在两个目录(common/deep),没有统一视图
不知道装了什么、哪些启用
依赖不能自动安装
技能依赖的 Python 包需要手动 pip install
环境冲突、遗漏依赖导致运行失败
没有使用教程
装完了不知道怎么用,得翻 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 技术栈

技术
作用
前端
Vue 3 + TypeScript + Naive UI
交互界面、SSE 流式渲染
API 层
Sanic Blueprint + OpenAPI
RESTful 接口、JWT 鉴权
服务层
SkillService (纯 Python)
技能解析、安装、环境管理
AI 层
LangChain LLM (astream)
技能教程流式生成

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
用户输入仓库地址 → 预览技能列表 → 勾选要安装的 → 一键安装  
Pasted image 20260412183924
 这是技能中心最核心的能力。用户只需输入 GitHub 仓库地址(支持 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
展示所有已安装技能
关键词搜索
前端 computed 过滤
按名称或描述实时搜索
查看详情GET /system/skill/content?name=xxx
抽屉展示 SKILL.md 内容(Markdown 渲染)
启用/禁用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 使用教程:装完就会用

Pasted image 20260412184434
 这是技能中心最具创新性的功能。当用户点击"使用教程"按钮时,系统会:
  1. 读取技能的 SKILL.md 完整内容
  2. 注入到预设的 Prompt 模板中
  3. 调用 LLM 流式生成中文使用教程
  4. 通过 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 后端,适合快速部署与二次开发 ✅ 项目已被蚂蚁官方推荐收录

运行效果:

Pasted image 20260412184635

在群里,您将获得以下专属支持:

✅ 定期技术答疑会议:固定时间开展群内答疑,集中解决大家在部署、配置中遇到的共性问题 ✅ 典型问题远程演示:针对高频难点,我会通过屏幕共享等方式进行实操讲解,看得懂、学得会 ✅ 二次开发思路分享:在会议中开放讨论,提供实现路径、代码结构建议与关键点提醒 ✅ 项目更新与优化同步:第一时间在群内发布文章内容的迭代、Bug修复与新功能进展

📌 我们不搞"私聊轰炸",而是用更高效的方式——通过集中答疑 + 资料共享 + 社群互助,让每一位成员都能参与、收获、成长。

入群发你项目资料:

📌 关注公众号【大模型应用开发实战】 👉 获取更多 MCP、Text2SQL、RAG、Skill、文档解析/报告生成 实战教程!

   如果有Openclaw部署多智能体搭建具体场景落地也欢迎联系我

👉 更多阅读

🦞龙虾数字人孵化平台

Text-to-SQL进化·Skill模式:融合标准能力的智能SQL生成方案

三种方案构建Text2SQL表关系图谱