# 对象目录

object 用于辅助 function 填参，通常不单独作为最终 target。只有目标 function 的参数需要 object 时才抽取。

## Location

返回类型：`object`

功能范围：获取用户所在或 query 指定的位置信息，包括国家、省份、城市、县/区、乡镇、景点或 POI，用于辅助地点相关查询。

参数：

| 参数 | 说明 |
| --- | --- |
| country | Optional[str] 国家名称 |
| province | Optional[str] 省份名称 |
| city | Optional[str] 城市名称 |
| district | Optional[str] 县/区名称 |
| town | Optional[str] 乡镇名称 |
| poi | Optional[str] 景点或 POI 信息 |

示例：

```text
x0=Location(country="美国",province="华盛顿",city="西雅图")
CalendarQA(type="TIME",target_time="现在",location=x0)
```

## PersonalDate

返回类型：`object`

功能范围：获取用户个人相关的特定时间点，如生日、结婚纪念日，或者亲人、朋友的时间纪念日，用于辅助个人相关时间查询。

参数：

| 参数 | 说明 |
| --- | --- |
| type | 枚举：BIRTHDAY（生日），ANNIVERSARY（结婚纪念日） |
| relation | List[str] 关系人，可以是本人、父母、配偶、子女、朋友姓名等 |

示例：

```text
x0=PersonalDate(type="BIRTHDAY",relation=["本人"])
TimeDistance(type="DAY",start_time="现在",end_time=x0)
```

## Resource

返回类型：`object`

功能范围：资源类信息，包括文档、图片、视频、音频、网页等，用于辅助总结、问答或资源处理。

参数：

| 参数 | 说明 |
| --- | --- |
| type | 枚举：DOC、URL、IMAGE、VIDEO、AUDIO |

示例：

```text
x0=Resource(type="DOC")
Summarize(object=x0)
```

## VisionQA 辅助对象

以下对象常作为 `VisionQA` 的 `object` 参数，用于给视觉问答增加业务类型约束：

| 对象 | 说明 |
| --- | --- |
| Vehicle | 车辆信息，可包含 color、brand、type |
| Food | 食物场景 |
| Icon | 图标、按钮、界面元素 |
| Person | 人物场景 |
| Animal | 动物场景 |
| Plant | 植物场景 |
| Text | 文字、题目、阅读场景 |

示例：

```text
x0=Vehicle(brand="奔驰")
VisionQA(imageSource="PHOTO",direction="前",object=x0)
```

## 生成类辅助对象

`Generate` 可使用如下对象：

| 对象 | 说明 |
| --- | --- |
| Video | 视频 |
| Image | 图片 |
| Text | 文本 |

示例：

```text
x0=Image()
Generate(object=x0)
```

## Device

返回类型：`object`

功能范围：当 query 中出现"主控设备 / 房间 / 空间 / 车内位置 / 设备模式"任一类信息时，作为 function 的 `device=` 参数补充设备约束。

### 任务定义（什么时候抽 Device）

- **抽**：query 显式表达"指定某个主控设备执行某个动作"，例如"电视播放小猪佩奇"。
- **不抽**：query 中的设备是**被控设备**而非主控设备，例如"空调调到二十六度"——空调是被控对象，不抽 `device`。

判断要点：query 是不是在告诉系统「请用 X 这个设备执行 Y 动作」？是 → 抽 X 进 device。X 仅作为动作目标 → 不抽。

### 抽取槽位

| 槽位 | 类型 | 描述 |
| --- | --- | --- |
| `category` | `List[str]` | 主控设备类型，**按词表归一化**（见下） |
| `room` | `List[str]` | 房间名，不归一化，直接抽 query 中出现的房间 |
| `space` | `List[str]` | 空间类型，可选值：`家`、`车` |
| `location` | `List[str]` | 车上设备位置，不归一化，直接抽 query 中出现的位置 |
| `mode` | `str` | 模式类型，可选值：`AllDevice`（指定全部设备）、`WholeHousePlay`（全屋播放） |

### 主控设备归一化词表（`category` 槽用）

| `category` 归一化值 | query 泛化词 |
| --- | --- |
| 手机 | 手机、折叠机、全面屏、红米手机、小米手机 |
| 平板 | 平板、pad |
| 音箱 | 音箱、音响、无屏音箱、sound、sound pro、AI 音箱、Sound、有屏音箱、触屏音箱、带屏音箱 |
| 闺蜜机 | 闺蜜机 |
| 电视 | 电视、TV、蓝牙电视、红外电视、65 寸电视、75 寸电视、85 寸电视、100 寸电视、小米电视、红米电视、小米盒子、电视盒子 |
| 中控屏 | 家庭屏、智慧屏、智能家庭屏、智慧面板、中控屏、车机、车载屏幕、中控 |
| 手表 | 手表、智能手表、小米手表、儿童手表 |
| 手环 | 手环、智能手环、小米手环 |
| 耳机 | 耳机、蓝牙耳机、小米耳机 |
| 眼镜 | 眼镜、智能眼镜、AI 眼镜、小米眼镜 |
| 投影仪 | 投影仪 |
| 显示器 | 显示器、显示屏 |
| 笔记本电脑 | 电脑、笔记本、笔记本电脑、笔电 |

> 词表外的设备 query 字面（含"屏"/"屏幕"等独立词），按 query 字面量保留写入 `category`，不强行归一。

### 抽取示例

#### 只包含设备信息

```text
电视播放小猪佩奇
→ Agent(tag="视频播放",device=Device(category=["电视"]))

音箱回答我天空为什么这么蓝
→ QA(device=Device(category=["音箱"]))
```

#### 只包含房间信息

```text
卧室播放儿歌
→ Agent(tag="音乐播放",device=Device(room=["卧室"]))

客厅播放海绵宝宝
→ Agent(tag="视频播放",device=Device(room=["客厅"]))
```

#### 只包含空间信息

```text
家里播放音乐
→ Agent(tag="音乐播放",device=Device(space=["家"]))

车上放个电影
→ Agent(tag="视频播放",device=Device(space=["车"]))
```

#### 只包含位置信息

```text
后排播放电台
→ Agent(tag="电台播放",device=Device(location=["后排"]))

前排播放音乐
→ Agent(tag="音乐播放",device=Device(location=["前排"]))
```

#### 包含设备 + 房间

```text
客厅音箱播放青花瓷
→ Agent(tag="音乐播放",device=Device(category=["音箱"],room=["客厅"]))

卧室电视播报一下天气
→ WeatherQA(device=Device(category=["电视"],room=["卧室"]))
```

#### 包含设备 + 位置

```text
后排电视打开抖音
→ Agent(tag="应用控制",device=Device(category=["电视"],location=["后排"]))

二排电视画一个小狗
→ x0=Image()
  Generate(object=x0,device=Device(category=["电视"],location=["二排"]))
```

#### 包含设备 + 位置 + 空间

```text
让我车上后排的电视唱一首歌
→ Agent(tag="音乐播放",device=Device(category=["电视"],space=["车"],location=["后排"]))

车上后排电视报一下天气
→ WeatherQA(device=Device(category=["电视"],space=["车"],location=["后排"]))
```

#### 包含设备 + 房间 + 空间

```text
家里主卧的音箱播放周杰伦的歌
→ Agent(tag="音乐播放",device=Device(category=["音箱"],room=["主卧"],space=["家"]))

让我家客厅的电视播放熊出没
→ Agent(tag="视频播放",device=Device(category=["电视"],room=["客厅"],space=["家"]))
```

#### 全部设备模式（mode="AllDevice"）

```text
全部电视播放小猪佩奇
→ Agent(tag="视频播放",device=Device(category=["电视"],mode="AllDevice"))

全部音箱停止播放音乐
→ Agent(tag="播放器控制",device=Device(category=["音箱"],mode="AllDevice"))
```

#### 全屋播放模式（mode="WholeHousePlay"，线上未实现，仅协议定义）

```text
全屋播放小猪佩奇
→ Agent(tag="视频播放",device=Device(mode="WholeHousePlay"))

全屋播放青花瓷
→ Agent(tag="音乐播放",device=Device(mode="WholeHousePlay"))
```

#### 被动多轮（继承上一轮的 device）

```text
q1: 客厅电视播放电影
q2: 声音大点
→ Agent(tag="系统控制",device=Device(category=["电视"],room=["客厅"]))

q1: 卧室音箱播放音乐
q2: 播放周杰伦的歌
→ Agent(tag="音乐播放",device=Device(category=["音箱"],room=["卧室"]))
```

#### 特殊规则（"屏"/"屏幕"不归一）

```text
前排屏播放音乐
→ Agent(tag="音乐播放",device=Device(category=["屏"],location=["前排"]))

后排屏幕播放动画片
→ Agent(tag="视频播放",device=Device(category=["屏幕"],location=["后排"]))
```
