168 lines
4.1 KiB
Markdown
168 lines
4.1 KiB
Markdown
# 输出组合规范
|
||
|
||
本文件说明如何把业务标签、输出能力和独立判断维度组合为最终 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 是否作为独立字段输出。
|