# Skill 功能 > 负责范围:技能包管理服务 - 核心实现 > 最后更新:2025-02-11 ## 当前状态 Skill 系统支持两种来源:官方 skills (`./skills/`) 和用户 skills (`projects/uploads/{bot_id}/skills/`)。支持 Hook 系统和 MCP 服务器配置,通过 SKILL.md 或 plugin.json 定义元数据。 ## 核心文件 - `routes/skill_manager.py` - Skill 上传/删除/列表 API - `agent/plugin_hook_loader.py` - Hook 系统实现 - `agent/deep_assistant.py` - `CustomSkillsMiddleware` - `agent/prompt_loader.py` - PrePrompt hooks + MCP 配置合并 - `skills/` - 官方 skills 目录 - `skills_developing/` - 开发中 skills ## 最近重要事项 - 2025-02-11: 初始化 skill 功能 memory ## Gotchas(开发必读) - ⚠️ 执行脚本必须使用绝对路径 - ⚠️ MCP 配置优先级:Skill MCP > 默认 MCP > 用户参数 - ⚠️ 上传大小限制:50MB(ZIP),解压后最大 500MB - ⚠️ 压缩比例检查:最大 100:1(防止 zip 炸弹) - ⚠️ 符号链接检查:禁止解压包含符号链接的文件 ## Skill 目录结构 ``` skill-name/ ├── SKILL.md # 核心指令文档(必需) ├── skill.yaml # 元数据配置(可选) ├── .claude-plugin/ │ └── plugin.json # Hook 和 MCP 配置(可选) └── scripts/ # 可执行脚本(可选) └── script.py ``` ## Hook 系统 | Hook 类型 | 执行时机 | 用途 | |-----------|---------|------| | `PrePrompt` | system_prompt 加载时 | 动态注入用户上下文 | | `PostAgent` | agent 执行后 | 处理响应结果 | | `PreSave` | 保存消息前 | 内容过滤/修改 | ## API 接口 | 端点 | 方法 | 功能 | |------|------|------| | `GET /api/v1/skill/list` | - | 返回官方 + 用户 skills | | `POST /api/v1/skill/upload` | - | ZIP 上传,解压到用户目录 | | `DELETE /api/v1/skill/remove` | - | 删除用户 skill | ## 内置 Skills | Skill 名称 | 功能描述 | |-----------|---------| | `excel-analysis` | Excel 数据分析、透视表、图表 | | `managing-scripts` | 管理可复用脚本库 | | `rag-retrieve` | RAG 知识库检索 | | `jina-ai` | Jina AI Reader/Search | | `user-context-loader` | Hook 机制示例 | ## plugin.json 格式 ```json { "name": "skill-name", "description": "描述", "hooks": { "PrePrompt": [{"type": "command", "command": "python hooks/pre_prompt.py"}], "PostAgent": [...], "PreSave": [...] }, "mcpServers": { "server-name": { "command": "...", "args": [...] } } } ``` ## Skill 加载优先级 1. Skill MCP 配置(最高) 2. 默认 MCP 配置 (`mcp/mcp_settings.json`) 3. 用户传入参数(覆盖所有) ## 安全措施 - ZipSlip 防护:检查解压路径 - 路径遍历防护:验证 `bot_id` 和 `skill_name` 格式 - 大小限制:上传 50MB,解压后 500MB - 压缩比限制:最大 100:1 ## 设计原则 - **渐进式加载**:按需加载,避免一次性读取所有 - **绝对路径优先**:执行脚本必须使用绝对路径 - **通用化设计**:脚本应参数化,解决一类问题 - **安全优先**:完整的上传验证链 ## 配置项 ```bash SKILLS_DIR=./skills # 官方 skills 目录 BACKEND_HOST=xxx # RAG API 主机 MASTERKEY=xxx # 认证密钥 ``` ## 索引 - 设计决策:`decisions/` - 变更历史:`changelog/` - 相关文档:`docs/`