<!-- locale: zh-CN -->

# discover-agent 技能

## L0：一句话摘要

根据用户需求描述，在已注册的智能体中匹配并推荐最合适的 Agent。

## L1：概述与使用场景

### 能力描述

discover-agent 是一个**流程型技能（Procedural Skill）**，赋予 DesireCore 为用户发现和推荐合适智能体的能力。它通过理解用户需求描述，在已注册的 Agent 列表中进行多维度匹配，展示候选列表供用户选择。

### 使用场景

- 用户描述了一个需求，但不知道该找哪个智能体帮忙
- 用户想浏览当前可用的智能体及其能力
- 用户需要为特定任务找到最合适的专业助手
- 新用户初次使用系统，需要了解有哪些智能体可用
- 用户对当前智能体的表现不满意，想寻找更合适的替代者

### 核心价值

- **降低门槛**：用户无需记住每个智能体的名称和能力
- **精准匹配**：基于需求语义进行智能推荐，而非简单关键词搜索
- **流畅衔接**：无匹配时自动建议创建新 Agent（衔接 create-agent 技能）

## L2：详细规范

### 执行流程

```
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│   需求理解    │ ──→ │   Agent 检索  │ ──→ │   匹配评分    │
└──────────────┘     └──────────────┘     └──────────────┘
                                                  │
                                                  ↓
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│   引导选择    │ ←── │   结果展示    │ ←── │   候选排序    │
└──────────────┘     └──────────────┘     └──────────────┘
```

### 阶段 1：需求理解

**触发条件**（任一满足）：

- 用户说"帮我找一个..."、"有没有..."、"谁能帮我..."
- 用户描述了一个任务但未指定具体智能体
- 用户说"有哪些智能体"、"看看都有谁"
- 系统检测到用户需求与当前 Agent 能力不匹配

**需求解析**：

从用户描述中提取以下维度：

| 维度        | 说明     | 示例                   |
| ----------- | -------- | ---------------------- |
| `domain`    | 专业领域 | 法律、财务、技术、教育 |
| `task_type` | 任务类型 | 咨询、审查、分析、创作 |
| `keywords`  | 关键词   | 合同、报表、代码、论文 |
| `urgency`   | 紧急程度 | 日常 / 紧急            |

### 阶段 2：Agent 检索

**数据源**：调用 `ManageAgent(action='list')` 获取所有已注册的智能体列表。

**工具调用**：

```
ManageAgent(action='list')
```

**返回内容**：一份紧凑列表，每行包含以下关键字段：

- `name` — 智能体名称
- `id` — 智能体唯一标识
- `status` — 当前状态（online/busy/idle/offline）
- `description` — 智能体描述

> `list` 为只读查询，无需用户确认、免审批。

**过滤规则**：

- 默认展示除 offline 之外的智能体，offline 智能体仅在无更优候选时作为补充展示
- 排除系统内部智能体（如 DesireCore 自身，除非用户显式要求）

### 阶段 3：匹配评估

根据以下维度综合判断匹配度（使用 LLM 语义理解，非公式计算）：

| 维度       | 说明                                                |
| ---------- | --------------------------------------------------- |
| 描述相关性 | 智能体 description / persona 与用户需求的语义相关度 |
| 技能匹配度 | 智能体拥有的 skills 与任务类型的关联度              |
| 领域契合度 | 智能体专业领域与用户需求领域的契合程度              |
| 状态可用性 | 智能体当前状态（online 优先于 offline）             |

**展示规则**：

- 高度匹配（明确适合该任务）→ 标为"推荐"
- 部分匹配（可能有帮助）→ 标为"可能相关"
- 无明显关联 → 不展示

### 阶段 4：候选排序

**排序规则**：

1. 按综合得分降序排列
2. 同分时 online 状态优先
3. 最多展示 5 个候选

### 阶段 5：结果展示

**有匹配结果时**：

```
根据你的需求，我推荐以下智能体：

┌─────────────────────────────────────────────────────┐
│ 1. 法律顾问助手                          匹配度: 92% │
│    专注合同审查和法律风险评估                          │
│    技能：合同审查、风险评估、法律研究                   │
│    状态：在线                                        │
├─────────────────────────────────────────────────────┤
│ 2. AI 文书助手                           匹配度: 71% │
│    专业文书撰写和格式优化                              │
│    技能：文书撰写、格式排版、合规检查                   │
│    状态：在线                                        │
├─────────────────────────────────────────────────────┤
│ 3. 数据分析师                            匹配度: 45% │
│    数据分析和可视化报告                                │
│    技能：数据分析、报表生成、趋势预测                   │
│    状态：离线                                        │
└─────────────────────────────────────────────────────┘

请选择一个智能体，或告诉我更具体的需求。
```

**无匹配结果时**：

```
目前没有找到完全匹配你需求的智能体。

你可以：
1. 用更具体的描述再试一次
2. 创建一个新的专业智能体（我可以帮你）
3. 浏览所有可用的智能体

你想怎么做？
```

**浏览模式**（用户要求查看所有）：

```
当前可用的智能体：

在线：
  - 法律顾问助手 — 合同审查和法律风险评估
  - AI 文书助手 — 专业文书撰写和格式优化

离线：
  - 数据分析师 — 数据分析和可视化报告
  - 翻译助手 — 多语言翻译和本地化

共 4 个智能体。需要了解某个智能体的详细信息吗？
```

### 阶段 6：引导选择

**用户选择后的操作**：

| 用户选择         | 后续操作                                                          |
| ---------------- | ----------------------------------------------------------------- |
| 选择了某个智能体 | 切换到该智能体的对话，传递用户需求上下文                          |
| 要求了解更多     | 调用 `ManageAgent(action='get', id='<agent-id>')` 获取详情，展示结构化信息（见下方） |
| 不满意候选       | 引导用户细化需求或建议创建新 Agent                                |
| 选择"创建新的"   | 调用 create-agent 技能，传递已收集的需求信息                      |

**"了解更多"的实现**：

调用 `ManageAgent(action='get', id='<agent-id>')` 获取指定智能体的详情：

```
ManageAgent(action='get', id='legal-assistant')
```

**返回内容中的关键字段**：

- 名称、描述、状态
- 版本
- 技能数 / 工具数
- Git 仓库状态

> `get` 为只读查询，无需用户确认、免审批。目标不存在时返回错误「智能体不存在: <id>」。

向用户展示时，以自然语言/表格形式呈现关键信息：

```
「法律顾问助手」详细信息

| 字段 | 内容 |
|------|------|
| 描述 | 专注合同审查和法律风险评估 |
| 当前状态 | 在线 |
| 版本 | 1.2.0 |
| 技能 / 工具 | 3 个技能，5 个工具 |
| Git 仓库 | 干净（无未提交变更） |

需要与这个智能体对话吗？
```

**切换上下文传递**：

```yaml
context_handoff:
  source_agent: desirecore
  target_agent: legal-assistant
  user_intent: '帮我审查这份合同的风险点'
```

### 与其他技能的协作

| 协作技能        | 协作方式                                           |
| --------------- | -------------------------------------------------- |
| create-agent    | 无匹配时建议创建新 Agent，传递用户需求作为初始信息 |
| task-management | 匹配成功后可自动创建任务并分配给目标 Agent         |

### 错误处理

| 错误场景              | 处理方式                         |
| --------------------- | -------------------------------- |
| 工具调用失败          | 提示错误信息，建议稍后重试       |
| Agent 列表为空        | 引导用户创建第一个智能体         |
| 用户描述过于模糊      | 追问具体需求，提供领域选项引导   |
| 目标智能体不存在      | `get` 返回「智能体不存在: <id>」时，回退到 `list` 重新确认可用智能体 |
| 推荐的 Agent 状态异常 | 标注状态，建议选择其他在线 Agent |

### 权限要求

- 通过内置工具 `ManageAgent` 完成智能体检索与详情查询
- `list` / `get` 均为只读查询，无需用户确认、免审批，无风险

### 依赖

- 内置工具 `ManageAgent`（`action='list'` 检索列表、`action='get'` 查询详情）
