文件预览

skill_interaction_guide.md

查看 1688 Item Select 技能包中的文件内容。

文件内容

references/skill_interaction_guide.md

# Skill 交互接入快速指南 (Quick Start)

本指南旨在帮助 Skill 开发者**快速接入** Newton Agent 的客户端交互能力。只需两步:**声明 Metadata** 和 **正文引导**。

---

## 1. 第一步:在 Metadata 中声明交互 (必选)

在 `SKILL.md` 的 YAML Frontmatter 中添加 `interactions` 列表。这是框架识别和大模型发现交互能力的**唯一入口**。

### 核心字段速查

| 字段 | 说明 | 示例值 |
| :--- | :--- | :--- |
| `name` | **交互唯一 ID**,大模型调用时使用 | `select_products` |
| `type` | **组件类型**:`table` (表格), `card` (卡片), `input` (问答) | `table` |
| `selectionType` | **数据类型标识**,决定云端存哪里 | `product`, `merchant` |
| `description` | **业务语义**,告诉大模型何时用 | "从结果中选择商品" |
| `required_data` | **数据槽位**,简要描述需要的数据 | `{ products: "商品列表" }` |

### 快速复制模板

```yaml
---
metadata:
  interactions:
    - name: select_products_for_inquiry
      type: table
      selectionType: product
      description: "从搜索结果中选择要询盘的商品"
      required_data:
        products: "商品列表数组,每项包含 id, title, price"
---
```

---

## 2. 第二步:在正文中引导大模型 (可选但推荐)

在 `SKILL.md` 正文中,用自然语言告诉大模型**何时触发**、**如何填数**,以及**去哪里查规范**。

### 引导话术示例

> **触发时机**:
> “在执行 `text_search` 获得商品列表后,若用户表现出挑选意向,请调用 `show_interaction` 并设置 `name='select_products_for_inquiry'`。”
>
> **数据填充**:
> “将 `text_search` 返回的 `items` 数组赋值给 `products` 槽位。**具体的字段映射规则与组件渲染数据结构请查阅 [`references/interaction-specs.md`](./references/interaction-specs.md) 中对应交互的章节。**”

### ⚠️ 关键约定

正文中**必须明确告诉大模型**:组件的渲染数据结构、Props 字段、映射规则等技术细节,统一存放在 `references/interaction-specs.md`,调用前需查阅该文档。这样可以避免在 SKILL.md 主体中堆砌大段 JSON Schema,节省 Token 并提升可维护性。

---

## 3. 三种组件的快速参考

根据你的业务场景,选择对应的 `type`:

### A. Table (表格选择) - 适合结构化数据多选
*   **场景**:商品列表、订单筛选。
*   **Metadata 示例**:
    ```yaml
    - name: select_items
      type: table
      selectionType: product
      required_data:
        title: "表格标题"
        columns: "列定义数组"
        rows: "数据行数组"
    ```

### B. Card (选项卡片) - 适合快速偏好选择
*   **场景**:风格选择、平台确认。端侧会自动追加“输入其他”。
*   **Metadata 示例**:
    ```yaml
    - name: choose_style
      type: card
      selectionType: style
      required_data:
        questions: "问题列表,如 [{ question: '喜欢什么风格?', options: ['休闲', '商务'] }]"
    ```

### C. Input (澄清问答) - 适合细节确认与自由输入
*   **场景**:预算确认、备注填写。
*   **Metadata 示例**:
    ```yaml
    - name: clarify_budget
      type: input
      selectionType: requirement
      required_data:
        questions: "问题列表,如 [{ question: '预算多少?', options: ['1万内', '1-5万'] }]"
    ```

---

## 4. 关键注意事项 (避坑指南)

1.  **`selectionType` 必须准**:填 `product` 还是 `merchant` 直接决定数据存入哪张表,请勿随意填写。
2.  **Table 不能为空**:调用 `table` 类型交互前,务必确保 `rows` 有真实数据,否则前端会报错。
3.  **细节下沉**:Metadata 中只写**槽位名**和**简要描述**。复杂的 JSON 结构、Props 定义和数据映射规则应写入 `references/interaction-specs.md`,实现声明与实现的解耦。

   **推荐目录结构**:
   ```text
   my-skill/
   ├── SKILL.md                      # 轻量级声明与业务逻辑
   └── references/
       └── interaction-specs.md      # 详细的组件 Props 与数据格式定义
   ```

---

## 5. `references/interaction-specs.md` 编写规范

该文档是 Skill 内部的**交互详细说明书**,供大模型在调用 `show_interaction` 前查阅,确保数据结构正确。

### 编写原则

1.  **一个交互一节**:每个在 Metadata 中声明的 `interactions` 条目,对应文档中的一个章节,标题与 `name` 一致。
2.  **聚焦数据结构**:只写**渲染数据结构**和**字段映射规则**,不要重复 Metadata 中已有的业务描述。
3.  **给出真实示例**:提供一段可直接拷贝的 JSON 示例,便于大模型对照填充。

### 标准模板

```markdown
# 交互组件详细规范

本文档定义了本 Skill 中所有交互组件的具体数据结构与映射规则。

## 1. <交互 name> (<组件类型> 组件)

### 组件类型
`type: table` | `card` | `input`

### 数据槽位定义
- **`<槽位名>`**:
  - 类型: `Array<Object>` / `String` / ...
  - 映射规则: 描述该槽位的数据从哪个 Tool 的哪个字段转换而来。
  - 必须字段: 列出对象内必须包含的 key。

### 框架自动填充的字段(如有)
说明框架会根据 `selectionType` 自动注入哪些默认值(如 Table 的 `columns`),Skill 无需手动指定。

```json
[
  { "key": "imageUrl", "label": "图片", "width": 80 },
  { "key": "title", "label": "商品标题" },
  { "key": "price", "label": "价格" }
]
```

### 完整数据示例
```json
{
  "products": [
    { "id": "p1", "title": "示例商品", "price": 99, "imageUrl": "https://..." }
  ]
}
```
```

### 编写要点速查

| 章节 | 必须包含 | 说明 |
| :--- | :--- | :--- |
| 组件类型 | ✅ | 与 Metadata 的 `type` 保持一致 |
| 数据槽位定义 | ✅ | 每个 `required_data` 槽位都要展开 |
| 映射规则 | ✅ | 明确指出数据来源的 Tool 与字段路径 |
| 框架自动填充 | ⭕ | 仅 `selectionType` 有内置模板时需要写 |
| 完整数据示例 | ✅ | 一段可直接拷贝的 JSON |

---

*更多详细技术实现请参考:[SIMPLE_INTERACTION_PROTOCOL.md](./SIMPLE_INTERACTION_PROTOCOL.md)*