# 输出组合规范

本文件说明如何把业务标签、输出能力和独立判断维度组合为最终 target。

## 基本结构

最终输出通常需要综合四类判断：

```text
业务标签：这句话属于哪个能力范围
输出能力：最终 target 写 function program 还是 Agent 包装
结构维度：是否多指令、是否自动任务
复杂度维度：是否输出 `complex=false` 或 `complex=true`
```

当前数据开发默认口径：

- 已 function 化且签名明确的能力，最终 target 写 function program。
- 未 function 化或只是旧 tag / intent 的业务标签，最终 target 写 `Agent(tag="xxx")`。
- intent 名称可以作为业务标签名、拆分子句里的意图字段或兼容中间形态；除非用户明确要求 intent target，否则不作为首选最终 target。
- 多指令和自动任务是结构化外壳，不是和 function / Agent 并列的叶子 target。

## 两层组合方式

先确定外层结构：

- 单意图：直接输出一个叶子 target。
- 多指令：拆成多个子句，每个子句单独输出一条叶子 target，然后按行组合。
- 自动任务：输出 `condition` 和 `querys`，每个子任务有自己的叶子 target。

再确定叶子 target：

- function program：例如 `QA()`、`Summarize()`、`CalendarQA(...)`。
- Agent 包装：例如 `Agent(tag="地图导航")`、`Agent(tag="餐饮服务")`。

## function program

当返回类型是 `function`，输出可以是单行或多行 program。

单行：

```text
QA()
FinanceQA(type="股票",name="喜临门")
Summarize()
```

多行：

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

只有 function 参数需要 object 时才生成 object。

## object 不单独输出

`Location`、`PersonalDate`、`Resource` 等 object 通常不单独作为最终 target。

错误：

```text
Location(city="西雅图")
```

正确：

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

## intent 与 Agent target

当返回类型是 `intent`，在当前数据开发默认口径下优先映射到 Agent 包装。

业务标签 / 中间 intent 名称：

```text
地图导航
餐饮服务
商品购买
```

Agent 包装形式：

```text
Agent(tag="地图导航")
Agent(tag="餐饮服务")
Agent(tag="商品购买")
```

除非用户明确要求输出 intent target，否则不要把 intent 名称作为首选最终 target。

## Agent 字段

`Agent` 字段表示承接方，例如：

```text
Agent: ToolsAgent
Agent: dialogAgent
Agent: lifeAgent
Agent: mapAgent
```

它是知识字段，不等于最终 target 必须写成 `Agent(tag="ToolsAgent")` 或 `Agent(tag="地图导航")`。

## 多指令组合

如果 query 被拆成多个子任务，当前数据开发默认按“多行 target”输出：每个子句单独一条 `Agent(query="...",tag="...")` 或 function target。

complex 是独立维度，如果需要输出，作为单独一行放在最前面，不归属于某个子句。

示例：

```text
complex=true
Agent(query="退出导航",tag="地图导航")
Agent(query="打开后视镜加热",tag="车载控制")
```

再例如：

```text
Agent(query="关闭卧室的灯",tag="设备控制")
Agent(query="定一个明天下午四点的闹钟",tag="闹钟计时器")
```

## 自动任务组合

如果 query 包含条件触发结构，condition 和 querys 组合输出。

示例：

```json
[
  {
    "condition": "上车时",
    "querys": [
      {"subquery": "打开空调", "intent": "设备控制"}
    ]
  }
]
```

如果 action 是 function，可以写 function：

```json
[
  {
    "condition": "明天八点",
    "querys": [
      {"subquery": "提醒我说后天晚上去露营", "intent": "提醒"}
    ]
  }
]
```

## 数据生成前的确认

如果用户要生成训练/评测数据，需要确认：

- target 是否要求 function program；如果没有明确 function 定义，默认使用 `Agent(tag="xxx")`。
- object 是否需要展开进 function target。
- 多指令和自动任务是否需要输出结构化 JSON。
- complex 是否作为独立字段输出。
