# 案例四：安装技能

## 场景说明

EvoFlow 提供了丰富的预置技能，你也可以从技能市场或社区安装别人创建的技能，快速扩展智能体的能力。

## 前置准备

- 已完成 [安装](../getting-started/installation.md)
- 已启动 EvoPanel 并登录

## 操作步骤

### 步骤 1：进入技能管理

在 EvoPanel 左侧导航栏中，点击 **「技能」** 图标，进入技能管理页面。

<!-- 截图占位：install-skill-step1.png — 进入技能管理 -->

> **截图说明**：展示左侧导航栏，标注"技能"图标位置。

### 步骤 2：浏览可用技能

在技能管理页面，你会看到两类技能：

- **内置技能**：系统预装的公共技能，已默认启用
- **自定义技能**：你自己创建的技能

点击 **「技能市场」** 或 **「浏览更多」** 查看可安装的额外技能。

<!-- 截图占位：install-skill-step2.png — 浏览技能列表 -->

> **截图说明**：展示技能列表页面，标注内置技能和自定义技能区域。

### 步骤 3：选择并安装技能

找到你需要的技能后，点击 **「安装」** 按钮。

常用预置技能推荐：

| 技能名称 | 用途 |
|----------|------|
| `deep-research` | 多维度深度研究，支持学术、市场、技术等场景 |
| `technology-news-search` | 定期搜集技术新闻并生成 HTML 摘要 |
| `data-analysis` | Excel/CSV 数据分析，支持 SQL 查询 |
| `summarize` | 快速总结 URL、PDF、YouTube 等内容 |
| `docx` | 创建和编辑 Word 文档 |
| `pptx` | 创建和编辑 PowerPoint 演示文稿 |
| `pdf` | PDF 文件处理 |

<!-- 截图占位：install-skill-step3.png — 选择技能 -->

> **截图说明**：展示技能市场或安装界面，标注安装按钮。

### 步骤 4：确认安装

安装过程中，系统会将技能文件解压到 `skills/custom/` 目录下。安装完成后，技能会出现在你的技能列表中。

<!-- 截图占位：install-skill-step4.png — 安装完成 -->

> **截图说明**：展示安装成功提示和技能列表中新增的技能。

### 步骤 5：启用或禁用技能

在技能列表中，你可以通过开关控制每个技能的启用/禁用状态。禁用的技能不会被智能体加载。

<!-- 截图占位：install-skill-step5.png — 管理技能开关 -->

> **截图说明**：展示技能列表中的启用/禁用开关。

### 步骤 6：测试已安装的技能

在对话中向主智能体输入与技能描述匹配的指令，测试技能是否正常工作。

**示例测试提示词（安装 deep-research 后）：**

```
请帮我做一份关于 AI Agent 框架的市场调研，
对比主流方案的技术特点和适用场景。
```

<!-- 截图占位：install-skill-step6.png — 测试安装的技能 -->

> **截图说明**：展示对话中调用已安装技能的过程和输出结果。

## 小结

安装技能是扩展智能体能力最快捷的方式。EvoFlow 的技能生态会持续丰富，你也可以将自己创建的技能分享给社区。

<!-- ACCEPTANCE_RECORD_BEGIN -->

# 《案例四：安装技能》流式验收报告

| 元数据项 | 填写 |
|----------|------|
| **报告 ID** | `20260512-084559-case4-v1` |
| **关联案例 / 场景** | [案例四：安装技能](install-skill.md) |
| **关联仓库文档** | 本页正文上方「案例」章节 |
| **执行人** | 自动化 `case_doc_acceptance_append.py` |
| **执行时间（本地）** | `2026-05-12T08:46:36.579055+00:00` |
| **代码版本** | `a877c3b3` |
| **Gateway 基址** | `http://127.0.0.1:8070` |
| **LangGraph 端口（若已知）** | 2070（由 Gateway 代理） |
| **session_key** | `agent:main:case-doc-20260512-084559` |
| **默认 assistant_id** | `lead_agent` |

---

## 1. 测试范围与通过准则

**本报告覆盖：**与本案例文档对应的流式/API 验收（共 **1** 次用户发起）。

**功能通过准则：**以本案例文档操作步骤中「可经流式接口验证」的子目标为准；无未处理 SSE error；主答复可读。

**性能与可观测性准则：**记录 `request_total_ms`、TTFT（`first_ai_visible_ms`）及侧载耗时，供与历史 JSON 对比。

---

## 2. 环境与前置条件

| 检查项 | 状态（是/否/不适用） | 说明 |
|--------|----------------------|------|
| 模型与 API Key | 是 | 以本机已配置为准 |
| 技能 / MCP / 渠道 | 未逐项核对 | 见案例前置说明 |
| 沙箱与写盘范围 | 未逐项核对 | 见网关配置 |
| 与本场景相关的配置项 | 未逐项核对 |  |

**原始机器产物：** `docs/cases/reports/raw/case-doc-4-20260512-084559.json`

---

## 3. 交互总览

| 指标 | 值 |
|------|-----|
| **用户发起流式交互总次数** | 1 |
| **涉及 thread_id 数量** | 1 |
| **是否出现 SSE error / HTTP 非 2xx** | 否 |
| **工具调用总次数（含重复 tool_call_id 刷新）** | 4 |

**thread 与时间线：**

| 序号 | thread_id | 用途说明 |
|------|-----------|----------|
| 1 | `9586d385-88f2-4e35-888e-d0eb713f0794` | 见下节分轮 |

---

## 4. 分轮交互记录

### 4.1 轮次 1

#### 4.1.1 请求与用户输入

| 字段 | 内容 |
|------|------|
| **thread_id** | `9586d385-88f2-4e35-888e-d0eb713f0794` |
| **本轮在用户界面的序号** | 1 / 1 |
| **activated_scenarios** | `["execute"]` |
| **collab_phase** | `idle` |
| **is_plan_mode / subagent_enabled / thinking_enabled** | `False` / `False` / `True` |
| **recursion_limit** | `400` |
| **用户输入（原文，完整）** | `我想给主智能体扩展一下能力：如果系统里有「技能市场」或已打包好的技能，我该怎么选、怎么装到当前工作区？请按步骤用中文说明，并说明若市场里没有我想要的该怎么办。` |

#### 4.1.2 流式与模型侧时序（本轮）

| 指标 | 值（ms） | 说明 |
|------|----------|------|
| **request_total_ms** | 37033.951 | 自 POST 起至流读完 |
| **first_sse_payload_ms** | 1332.508 | 至首条有效 data: |
| **first_ai_visible_ms（TTFT）** | 6389.7 | 至首段可见助手正文 |
| **assistant_visible_stream_ms** | 28994.475 | 首末次可见正文时间差 |
| **本轮是否出现 error 事件** | 否 |  |

#### 4.1.3 工具调用明细（本轮，按发生顺序）

| # | tool 名称 | tool_call_id | duration_ms | 结果摘要 | 备注 |
|---|-----------|----------------|-------------|----------|------|
| 1 | scenario | `functions.scenario:0` | 2551.997 | 成功 |  |
| 2 | tool_search | `functions.tool_search:1` | 1750.739 | 成功 |  |
| 3 | list_dir | `functions.list_dir:2` | 903.256 | 成功 |  |
| 4 | read_file | `functions.read_file:3` | 733.937 | 成功 |  |

#### 4.1.4 模型输出（本轮）

- [x] **正文粘贴**（完整或截断说明见上）

```text
## 技能扩展完整指南

EvoFlow 的技能系统采用「本地目录 + 市场检索」双轨制。以下是具体操作步骤：

---

### 一、浏览和选择技能

**方式 1：本地已内置（开箱即用）**
当前系统已预置 **100+** 技能，按场景分类存放：
`​``
skills/
├── custom/      # 用户自定义技能（如 jira_logger、aihot 等）
├── public/      # 公开技能（如 deep-research、article-writer 等）
├── devops/      # DevOps 技能
└── development/ # 开发辅助技能
`​``

**方式 2：技能市场检索**
若本地没有，可通过 Skills CLI 搜索全球技能市场：
`​``bash
# 搜索关键词
npx skills find <关键词>

# 示例：搜索 React 相关技能
npx skills find react

# 搜索部署相关技能
npx skills find deploy
`​``

市场地址：https://skills.sh/

---

### 二、安装技能到当前工作区

**安装命令（通用）：**
`​``bash
bash /path/to/skill/scripts/install-skill.sh <owner/repo@skill-name>
`​``

**示例：**
`​``bash
# 安装 Vercel React 最佳实践技能
bash /path/to/skill/scripts/install-skill.sh vercel-labs/agent-skills@vercel-react-best-practices
`​``

**安装后位置：**
- 新技能会自动放入 `skills/custom/` 目录
- 立即生效，无需重启

---

### 三、如果市场里没有想要的技能

**选项 A：我直接帮你实现**
告诉我具体需求，我可以用通用工具直接完成，无需专门技能。

**选项 B：创建自定义技能（推荐常用场景）**
`​``bash
# 初始化新技能
npx skills init <skill-name>
`​``

这会创建标准技能模板，你可以：
1. 定义触发条件（何时自动激活）
2. 编写执行步骤（工作流程）
3. 添加辅助脚本/模板/资源文件

**选项 C：从 GitHub 导入第三方技能**
如果找到开源技能仓库，可直接克隆到 `skills/custom/` 目录，确保包含 `SKILL.md` 即可识别。

---

### 四、常用管理命令

| 命令 | 作用 |
|------|------|
| `npx skills find <关键词>` | 搜索技能市场 |
| `npx skills check` | 检查技能更新 |
| `npx skills update` | 更新所有已安装技能 |

---

**你现在想扩展哪方面的能力？** 可以告诉我具体需求，我帮你判断是本地已有、市场可搜，还是需要自建。
```

#### 4.1.5 本轮结论（非总评）

| 项 | 内容 |
|----|------|
| **对照准则条目** | 案例四：用户能理解安装路径与备选方案 |
| **子目标是否达成** | 符合 |
| **证据** | `ai_text_seen=True`；侧载种类数 `0` |

---

## 5. 测试意见（文档末尾总评）

### 5.1 结论摘要

- **总体结果：**带条件通过（答复覆盖安装思路即可；是否真装取决于环境与权限）
- **阻塞项：**无


### 5.2 风险与影响

无额外结论；以本案例业务风险为准。

### 5.3 后续建议

若发布前 gate：可对比 `docs/cases/reports/raw` 中历史 JSON 做基线回归。

<!-- ACCEPTANCE_RECORD_END -->
