Refine label complexity knowledge

This commit is contained in:
wuyang6
2026-05-11 11:08:36 +08:00
parent ca2f6f36fc
commit 1752c81913
10 changed files with 263 additions and 55 deletions
@@ -55,11 +55,12 @@
### complex
complex 是快慢系统判断,独立于业务标签。它可以先粗判,但建议在业务标签和输出形态判断后再最终确认。
complex 是复杂度判断,独立于业务标签。它可以先粗判,但建议在业务标签和输出形态判断后再最终确认。
读取:
- `判断维度/复杂度判断.md`
- `判断维度/复杂度/复杂度判断.md`
- 如果 query 涉及地图导航、POI 搜索、路线偏好、终点附近、沿途、顺路或多轮路线约束,继续读取 `判断维度/复杂度/地图导航.md`。这是 complex 维度下的专项条件表,不是新的结构维度;最终仍只输出 `complex=false/true`
## 3. 业务标签候选
@@ -5,7 +5,8 @@
当前维度:
- `标注输出形态.md`:判断最终监督标签应该使用 Agent 包装、Function 形式,还是需要用户确认。
- `复杂度判断.md`:判断是否是 complex / 慢系统任务
- `复杂度/复杂度判断.md`:判断 complex 维度;地图导航等专项规则也从这里进入
- `复杂度/地图导航.md`:complex 维度下的地图导航专项条件表,不是独立维度。
- `多指令判断.md`:判断 query 是否需要拆成多个子任务,以及如何切分和改写。
- `自动任务判断.md`:判断 query 是否是条件触发任务,以及 condition 和 action 的作用域。
@@ -0,0 +1,195 @@
# 地图导航复杂度判断
本文件是 [复杂度判断](复杂度判断.md) 的专项条件表,父维度是 `complex` / 复杂度判断。
它只回答一个问题:当前地图导航、POI 搜索、路线偏好相关 query 应该是 `complex=false` 还是 `complex=true`
它不引入新的维度字段,不替代业务标签判断;业务标签仍需要结合地图导航、地图问答、餐饮服务、旅游等标签卡片和边界卡。
## 维度归属
- 父维度:`complex` / 复杂度判断。
- 输出字段:仍然只输出 `complex=false``complex=true`
- 使用位置:读取 `复杂度/复杂度判断.md` 后,如果 query 涉及导航、路线规划、POI 搜索、终点附近、沿途、顺路、路线偏好、单 POI 筛选或多轮路线约束,再读取本文件。
- 不要把“地图导航复杂度判断”当成和 complex、多指令、自动任务并列的新维度。
## 总体原则
- `complex=false`:用户目标可以由地图、导航或 POI 检索链路直接处理,虽然可能带有简单定语、路线偏好、上下文修正或单个 POI 约束。
- `complex=true`:用户要求系统做综合规划、主观筛选、避坑判断、跨信息源验证、复杂比较,或需要先理解隐含知识再定位到可导航 POI。
- 单 POI 是强 `complex=false` 信号,但不是绝对信号;如果单 POI 带有复杂筛选、评价推理、外部事实验证或“帮我挑一个最合适”的综合决策,则转为 `complex=true`
- 多轮导航中的次轮路线限制、沿途/顺路找点、目的地附近找点,通常仍是导航链路内的短链路操作,默认 `complex=false`
## complex=false
以下类型默认 `complex=false`
### 1. 导航到终点附近某类地点
用户希望在当前终点、目的地或路线附近找一个明确类型的 POI 并导航过去,属于导航链路内的 POI 搜索。
示例:
- 导航到终点附近最便宜的停车场。
- 导航到目的地附近的充电站。
- 去终点附近的服务区。
判断要点:
- “终点附近 / 目的地附近 / 沿途附近”不自动导致 `complex=true`
- 如果只是明确 POI 类型加简单筛选,仍是 `complex=false`
### 2. 规划路线和路线偏好
用户要求规划路线,或者指定路线偏好、避让条件,属于地图导航的直接能力。
示例:
- 给我规划一条不走高速只走国道的路线。
- 我不想走收费路而且别太绕。
- 我想少走隧道尽量走地面路。
- 优先走快速路别进小路。
- 我赶时间尽量走最快路线。
判断要点:
- “规划路线”本身不等于 `complex=true`
- “不走高速 / 只走国道 / 不走收费路 / 少走隧道 / 走地面路 / 快速路 / 最快路线”等路线偏好默认 `complex=false`
### 3. 找一个某类地方,目标是单 POI
用户要求找一个地点或一个可去的地方,只要目标是单 POI,且没有复杂综合评价,默认 `complex=false`
示例:
- 找一下景区边上能停车又能吃饭的地方。
- 帮我找一个附近能停车的商场。
- 找一个离我最近的洗车店。
判断要点:
- “找一个 xxx 的地方”如果最终目标是一个 POI,默认 `complex=false`
- 能停车、能吃饭、附近、最近、最大、最便宜、有停车场等简单约束,不单独触发 `complex=true`
### 4. 多轮导航中的次轮限制条件
上一轮已经处在导航、路线、目的地或 POI 选择上下文中,当前轮只是补充路线限制或偏好,默认 `complex=false`
示例:
- 我不想走收费路而且别太绕。
- 我想少走隧道尽量走地面路。
- 优先走快速路别进小路。
- 我赶时间尽量走最快路线。
判断要点:
- 这类 query 可能没有显式 POI,但依赖上一轮路线上下文。
- 只是在当前导航任务上加约束,不视为新的复杂规划任务。
### 5. 单 POI + 简单筛选条件
目标是一个 POI,筛选条件是地图或 POI 检索可直接处理的简单属性,默认 `complex=false`
示例:
- 帮我导航去附近最近的星巴克,要有停车场的。
- 帮我找一个现在还开着的洗车店,停车方便的。
- 带我去一个能买到户外运动装备的店,最好品牌多一点的。
- 帮我找一个附近有 ATM 机的商场,选一个最方便的过去。
简单筛选条件包括:
- 距离:附近、最近、顺路、沿途、目的地附近。
- 路线:不走高速、只走国道、少收费、别太绕、最快。
- 设施:有停车场、停车方便、有 ATM、现在开着。
- 基础排序:最大、最近、最便宜、评分高。
判断要点:
- 简单条件可以多个并列;只要不要求复杂综合推理,仍是 `complex=false`
- “选一个最方便的过去”如果只是结合距离、停车、路线等直接地图属性,仍可为 `complex=false`
### 6. 单 POI 改口、纠错、模糊表达、取消
用户在导航中改口、纠错、口语重复或取消导航,不需要复杂规划。
示例:
- 导航去春日樱花不是樱花园牡丹园不也不是牡丹园。
- 导航去解放路夜市哎不对呃那个不是不是不是停停停别导航。
- 导航去翡翠城什么什么楼亚朵。
判断要点:
- 改口和模糊不等于复杂。
- 如果最终仍是单 POI 纠错或取消动作,默认 `complex=false`
### 7. 多轮里的沿途、顺路、中间找点
在已有导航路线、目的地或行程上下文中,用户要求沿途、顺路、中间找某类 POI,默认 `complex=false`
示例:
- 中间找个充电站。
- 帮我找一个最顺路的停车场。
- 跟刚才的道路不重复。
- 我要沿途的顺路的。
判断要点:
- “沿途 / 顺路 / 中间”是导航链路可直接利用的约束。
- “跟刚才道路不重复”属于路线约束,默认 `complex=false`
## complex=true
以下类型默认 `complex=true`
### 1. 单 POI 但筛选条件需要复杂综合判断
用户不是简单找一个 POI,而是要求系统综合营业时间、便利性、评价、风险、拥挤程度、冷门程度、出餐速度、名人打卡事实等信息后做推荐。
示例:
- 附近牙科晚上营业的牙科诊所有哪些,给我推荐一个最方便去的。
- 去上海鹿晗打卡过的邮筒,具体在哪儿,你帮我定位到能导航的地方。
- 导航去一家评分很高但比较冷门的小馆子我不想踩雷。
- 导航去一家很受欢迎的面馆最好出餐快别排太久。
- 我想去看展,但不想踩雷,你帮我在附近挑个停车方便、人别太挤的展馆或商场,直接导航过去。
判断要点:
- “有哪些 + 推荐一个”通常需要先召回候选再综合比较,偏 `complex=true`
- “不想踩雷 / 冷门但评分高 / 很受欢迎但别排太久 / 人别太挤 / 出餐快”等属于主观质量和实时状态综合判断,偏 `complex=true`
- “某人打卡过的地点 / 网络热点地点 / 隐含事实定位”需要外部事实验证后才能导航,偏 `complex=true`
### 2. 多条件跨信息源综合决策
如果 query 同时要求地图属性、评价属性、实时状态、内容理解或外部事实,并要求系统帮用户做最终决策,通常是 `complex=true`
判断要点:
- 是否需要先分析候选集合。
- 是否需要比较多个方案。
- 是否需要解释为什么选这个。
- 是否需要外部知识或线上内容验证。
## 不要误判为 `complex=true` 的情况
以下表达不要单独作为 `complex=true` 触发条件:
- 出现“规划路线”。
- 出现“终点附近 / 目的地附近 / 沿途 / 顺路 / 中间”。
- 出现路线偏好:不走高速、只走国道、不收费、别太绕、少隧道、走地面路、走快速路、最快。
- 单 POI 带简单定语:最近、最大、最便宜、附近、有停车场、停车方便、现在开着。
- 口语改口、重复、否定、取消导航。
## 推荐判断模板
```text
complex 判断:
- 推荐:false/true
- 原因:单 POI + 简单筛选 / 路线偏好 / 多轮沿途找点 / 复杂综合筛选
- 复杂度依据:引用本文件中的具体条目
- 业务标签:另按地图导航、地图问答、餐饮服务等标签判断
```
@@ -0,0 +1,41 @@
# 复杂度判断
complex 维度是独立维度,不属于业务标签本身。业务标签负责判断“是什么能力”,复杂度负责判断“是否需要规划、推理或多步骤处理”。
## 维度定位
- 本维度只输出 `complex=false``complex=true`
- 本维度可以有通用判断条件,也可以有业务场景专项条件。
- 专项条件不是新的维度,只是 complex 维度下更细的判定规则。
- 业务标签、输出形态、多指令、自动任务需要分别判断,不要混成一个结论。
## 当前临时定义
- `complex=false`:原子化、短链路、可直接执行或直接回答的请求。
- `complex=true`:需要规划、分析、推理、组合多个步骤、跨信息源综合,或需要长上下文处理的请求。
## 判断原则
- 不要因为某个标签天然复杂就直接设为 complex,需要看本次 query 的任务形态。
- 明确的一步控制、一步查询、一步导航通常是 `complex=false`
- 需要制定计划、比较多方案、总结长文本、生成复杂内容、连续推理通常是 `complex=true`
- 当复杂度边界和业务标签边界同时存在歧义时,先分别判断,再说明组合结果。
## 判断条件组织
| 条件层级 | 使用场景 | 读取文件 |
| --- | --- | --- |
| 通用条件 | 所有 query 的基础复杂度判断 | 本文件 |
| 地图导航专项条件 | query 涉及导航、路线规划、POI 搜索、终点附近、沿途、顺路、路线偏好、单 POI 筛选或多轮路线约束 | [地图导航复杂度判断](地图导航.md) |
使用方式:
1. 先用本文件做通用判断。
2. 如果命中专项场景,再读取对应专项条件表。
3. 最终仍只输出 `complex=false``complex=true`
## 待维护问题
- 哪些标签默认偏 `complex=false`
- 哪些标签在特定参数或上下文下转为 `complex=true`
- complex 输出格式和最终标签表达如何组合。
@@ -1,21 +0,0 @@
# 复杂度判断
complex / 快慢系统是独立维度,不属于业务标签本身。业务标签负责判断“是什么能力”,复杂度负责判断“是否需要规划、推理或多步骤处理”。
## 当前临时定义
- `complex=false`:原子化、短链路、可直接执行或直接回答的请求。
- `complex=true`:需要规划、分析、推理、组合多个步骤、跨信息源综合,或需要长上下文处理的请求。
## 判断原则
- 不要因为某个标签天然复杂就直接设为 complex,需要看本次 query 的任务形态。
- 明确的一步控制、一步查询、一步导航通常是 `complex=false`
- 需要制定计划、比较多方案、总结长文本、生成复杂内容、连续推理通常是 `complex=true`
- 当复杂度边界和业务标签边界同时存在歧义时,先分别判断,再说明组合结果。
## 待维护问题
- 哪些标签默认偏快系统。
- 哪些标签在特定参数或上下文下转为慢系统。
- complex 输出格式和最终标签表达如何组合。
@@ -1,23 +0,0 @@
# 复杂度判断
> 本文件保留在根目录用于兼容早期入口。后续优先维护 `判断维度/复杂度判断.md`。
complex / 快慢系统是独立维度,不属于业务标签本身。业务标签负责判断“是什么能力”,复杂度负责判断“是否需要规划、推理或多步骤处理”。
## 当前临时定义
- `complex=false`:原子化、短链路、可直接执行或直接回答的请求。
- `complex=true`:需要规划、分析、推理、组合多个步骤、跨信息源综合,或需要长上下文处理的请求。
## 判断原则
- 不要因为某个标签天然复杂就直接设为 complex,需要看本次 query 的任务形态。
- 明确的一步控制、一步查询、一步导航通常是 `complex=false`
- 需要制定计划、比较多方案、总结长文本、生成复杂内容、连续推理通常是 `complex=true`
- 当复杂度边界和业务标签边界同时存在歧义时,先分别判断,再说明组合结果。
## 待维护问题
- 哪些标签默认偏快系统。
- 哪些标签在特定参数或上下文下转为慢系统。
- complex 输出格式和最终标签表达如何组合。
@@ -221,9 +221,15 @@
},
"description": "标签大师的中控标签知识库机器索引;由 scripts/build_label_manifest.py 从 Markdown 生成。",
"dimensions": [
{
"name": "地图导航复杂度判断",
"output_field": "仍然只输出 `complex=false` 或 `complex=true`。",
"parent_dimension": "`complex` / 复杂度判断。",
"path": "knowledge/判断维度/复杂度/地图导航.md"
},
{
"name": "复杂度判断",
"path": "knowledge/判断维度/复杂度判断.md"
"path": "knowledge/判断维度/复杂度/复杂度判断.md"
},
{
"name": "多指令判断",
@@ -5,7 +5,7 @@
| 维度 | 何时读取 | 文件 |
| --- | --- | --- |
| 标注输出形态 | 需要生成训练/评测 target,或卡片中同时存在旧 tag 与 Function 定义时 | [标注输出形态](../判断维度/标注输出形态.md),并继续读取 [输出能力](../输出能力/README.md) |
| 复杂度判断 | 需要判断 complex / 快慢系统,或 query 可能需要规划、推理、多步骤处理时 | [复杂度判断](../判断维度/复杂度判断.md) |
| 复杂度判断 | 需要判断 complex 维度,或 query 可能需要规划、推理、多步骤处理时;如果 query 涉及导航、路线规划、POI 搜索、终点附近、沿途、顺路、路线偏好、单 POI 筛选或多轮路线约束,先读复杂度总规则,再继续读其专项条件表 | [复杂度判断](../判断维度/复杂度/复杂度判断.md)[地图导航复杂度判断](../判断维度/复杂度/地图导航.md) |
| 多指令判断 | query 包含多个动作、并列连接、多个设备/位置/方向,或需要拆分 subquery 时 | [多指令判断](../判断维度/多指令判断.md) |
| 自动任务判断 | query 包含“当/如果/时候/之后/到达/每/一...就”等条件触发结构,或涉及超级任务/提醒/自动化时 | [自动任务判断](../判断维度/自动任务判断.md) |
@@ -13,5 +13,6 @@
1. 先读 `决策流程.md`,判断是否需要结构维度。
2. 如果只是普通标签边界,不一定读取维度文件。
3. 如果 query 结构复杂,按需读取 `复杂度判断.md``多指令判断.md``自动任务判断.md`
4. 如果要写最终 target,必须读取 `标注输出形态.md``输出能力/输出组合规范.md`
3. 如果 query 结构复杂,按需读取 `复杂度/复杂度判断.md``多指令判断.md``自动任务判断.md`
4. 如果读取 `复杂度/复杂度判断.md` 后发现 query 属于某个专项场景,例如地图导航/POI/路线偏好,再读取该维度下的专项条件表;专项条件表不产生新的维度字段
5. 如果要写最终 target,必须读取 `标注输出形态.md``输出能力/输出组合规范.md`
@@ -10,7 +10,7 @@
业务标签:这句话属于哪个能力范围
输出能力:最终 target 写 function、intent 还是 Agent 包装
结构维度:是否多指令、是否自动任务
复杂度维度:是否 complex / 慢系统
复杂度维度:是否输出 `complex=false` 或 `complex=true`
```
## function program
@@ -250,11 +250,18 @@ def parse_dimension_files() -> list[dict[str, str]]:
if not root.exists():
return []
files: list[dict[str, str]] = []
for path in sorted(root.glob("*.md")):
if path.name == "README.md":
for path in sorted(root.rglob("*.md")):
if path == root / "README.md":
continue
text = read_text(path)
files.append({"name": first_heading(text, path.stem), "path": rel(path)})
item = {"name": first_heading(text, path.stem), "path": rel(path)}
parent_dimension = extract_bullet_value(text, "父维度")
output_field = extract_bullet_value(text, "输出字段")
if parent_dimension:
item["parent_dimension"] = parent_dimension
if output_field:
item["output_field"] = output_field
files.append(item)
return files