kc-beta 0.8.1 → 0.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/agent/context.js +17 -1
- package/src/agent/engine.js +85 -8
- package/src/agent/llm-client.js +24 -1
- package/src/agent/pipelines/_milestone-derive.js +78 -7
- package/src/agent/pipelines/skill-authoring.js +19 -2
- package/src/agent/tools/release.js +94 -1
- package/src/cli/index.js +28 -7
- package/template/.env.template +1 -1
- package/template/AGENT.md +2 -2
- package/template/skills/en/auto-model-selection/SKILL.md +55 -35
- package/template/skills/en/bootstrap-workspace/SKILL.md +13 -0
- package/template/skills/en/compliance-judgment/SKILL.md +14 -0
- package/template/skills/en/confidence-system/SKILL.md +30 -8
- package/template/skills/en/corner-case-management/SKILL.md +53 -33
- package/template/skills/en/cross-document-verification/SKILL.md +88 -83
- package/template/skills/en/dashboard-reporting/SKILL.md +91 -66
- package/template/skills/en/dashboard-reporting/scripts/generate_dashboard.py +1 -1
- package/template/skills/en/data-sensibility/SKILL.md +19 -12
- package/template/skills/en/document-chunking/SKILL.md +99 -15
- package/template/skills/en/entity-extraction/SKILL.md +14 -4
- package/template/skills/en/quality-control/SKILL.md +14 -0
- package/template/skills/en/rule-extraction/SKILL.md +92 -94
- package/template/skills/en/rule-extraction/references/chunking-strategies.md +7 -78
- package/template/skills/en/skill-authoring/SKILL.md +52 -8
- package/template/skills/en/skill-creator/SKILL.md +25 -3
- package/template/skills/en/skill-to-workflow/SKILL.md +23 -4
- package/template/skills/en/task-decomposition/SKILL.md +1 -1
- package/template/skills/en/tree-processing/SKILL.md +1 -1
- package/template/skills/en/version-control/SKILL.md +15 -0
- package/template/skills/en/work-decomposition/SKILL.md +21 -35
- package/template/skills/zh/auto-model-selection/SKILL.md +54 -33
- package/template/skills/zh/bootstrap-workspace/SKILL.md +13 -0
- package/template/skills/zh/compliance-judgment/SKILL.md +14 -0
- package/template/skills/zh/compliance-judgment/references/output-format.md +62 -62
- package/template/skills/zh/confidence-system/SKILL.md +34 -9
- package/template/skills/zh/corner-case-management/SKILL.md +71 -104
- package/template/skills/zh/cross-document-verification/SKILL.md +90 -195
- package/template/skills/zh/cross-document-verification/references/contradiction-taxonomy.md +36 -36
- package/template/skills/zh/dashboard-reporting/SKILL.md +82 -232
- package/template/skills/zh/dashboard-reporting/scripts/generate_dashboard.py +1 -1
- package/template/skills/zh/data-sensibility/SKILL.md +13 -0
- package/template/skills/zh/document-chunking/SKILL.md +96 -20
- package/template/skills/zh/document-parsing/references/parser-catalog.md +26 -26
- package/template/skills/zh/entity-extraction/SKILL.md +14 -4
- package/template/skills/zh/evolution-loop/references/convergence-guide.md +38 -38
- package/template/skills/zh/quality-control/SKILL.md +14 -0
- package/template/skills/zh/quality-control/references/qa-layers.md +65 -65
- package/template/skills/zh/quality-control/references/sampling-strategies.md +49 -49
- package/template/skills/zh/rule-extraction/SKILL.md +199 -188
- package/template/skills/zh/rule-extraction/references/chunking-strategies.md +5 -78
- package/template/skills/zh/skill-authoring/SKILL.md +108 -69
- package/template/skills/zh/skill-authoring/references/skill-format-spec.md +39 -39
- package/template/skills/zh/skill-creator/SKILL.md +71 -61
- package/template/skills/zh/skill-creator/references/schemas.md +60 -60
- package/template/skills/zh/skill-to-workflow/SKILL.md +24 -5
- package/template/skills/zh/skill-to-workflow/references/worker-llm-catalog.md +24 -24
- package/template/skills/zh/task-decomposition/SKILL.md +1 -1
- package/template/skills/zh/task-decomposition/references/decision-matrix.md +54 -54
- package/template/skills/zh/tree-processing/SKILL.md +1 -1
- package/template/skills/zh/version-control/SKILL.md +15 -0
- package/template/skills/zh/version-control/references/trace-id-spec.md +34 -34
- package/template/skills/zh/work-decomposition/SKILL.md +21 -33
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 矛盾分类法
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
跨文档矛盾检测的字段级参考。使用本分类法按字段类型配置比对规则。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 身份字段
|
|
6
6
|
|
|
7
|
-
|
|
|
7
|
+
| 字段 | 匹配类型 | 容忍度 | 严重级别 | 备注 |
|
|
8
8
|
|-------|-----------|-----------|----------|-------|
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
|
|
|
9
|
+
| 姓名 | 模糊 | 缩写、空格、敬称 | Critical | "Zhang Wei" 与 "Zhang W." 属于模糊匹配;"Zhang Wei" 与 "Li Ming" 则为硬不通过 |
|
|
10
|
+
| 身份证号 | 精确 | 无(零容忍) | Critical | 一位数字之差 = 不同的人或誊抄错误——两者都是 critical |
|
|
11
|
+
| 出生日期 | 精确 | 无 | Critical | 在适用情况下与身份证号编码进行交叉核对 |
|
|
12
|
+
| 地址 | 模糊 | 缩写、楼层/单元的格式差异 | Medium | "Rm 1201, Bldg A" 与 "Room 1201, Building A" 可接受 |
|
|
13
|
+
| 电话号码 | 精确 | 国家代码前缀 | Medium | +86 前缀的有无可容忍 |
|
|
14
|
+
| 公司名称 | 模糊 | Ltd/Co/Inc 等后缀、标点 | High | 核心名称必须匹配;后缀差异可容忍 |
|
|
15
15
|
|
|
16
|
-
##
|
|
16
|
+
## 金融字段
|
|
17
17
|
|
|
18
|
-
|
|
|
18
|
+
| 字段 | 比对方法 | 容忍度 | 严重级别 | 备注 |
|
|
19
19
|
|-------|------------------|-----------|----------|-------|
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
24
|
-
|
|
|
25
|
-
|
|
|
26
|
-
|
|
|
20
|
+
| 申报收入 | 跨文档 | 10% 相对值 | High | 申请表 vs 收入证明 vs 征信报告 |
|
|
21
|
+
| 银行平均存款 | 收入可信度 | 申报收入的 50%(下限) | High | 若平均存款 < 申报收入的 50%,则标记 |
|
|
22
|
+
| 贷款金额 | 跨文档精确比对 | 0.1% 相对值 | Critical | 申请表与合同中必须完全一致 |
|
|
23
|
+
| 资产估值 | 评估一致性 | 5% 相对值 | High | 申请表估值 vs 正式评估报告 |
|
|
24
|
+
| 现有负债 | 跨来源 | 20% 相对值 | Medium | 自报 vs 征信报告 |
|
|
25
|
+
| 净资产 | 计算一致性 | 各部分之和 vs 申报总额 | High | 资产 - 负债必须等于申报的净值 |
|
|
26
|
+
| 合同总额 vs 明细项 | 求和核对 | 0.01 绝对值 | Critical | 主合同总额必须等于附件明细项之和 |
|
|
27
27
|
|
|
28
|
-
##
|
|
28
|
+
## 时间字段
|
|
29
29
|
|
|
30
|
-
|
|
|
30
|
+
| 字段 | 一致性核查 | 容忍度 | 严重级别 | 备注 |
|
|
31
31
|
|-------|------------------|-----------|----------|-------|
|
|
32
|
-
|
|
|
33
|
-
|
|
|
34
|
-
|
|
|
35
|
-
|
|
|
36
|
-
|
|
|
32
|
+
| 入职日期 | 跨文档匹配 | 90 天 | Medium | 申请表 vs 收入证明 vs 征信报告 |
|
|
33
|
+
| 合同签订日期 | 序列合理性 | 必须晚于申请日期 | High | 不能在申请前签约 |
|
|
34
|
+
| 文档出具日期 | 时效与序列 | 按业务规则(通常 30-90 天) | Medium | 6 个月前出具的收入证明可能已失效 |
|
|
35
|
+
| 贷款到期日 | 合同一致性 | 跨文档精确匹配 | High | 申请表 vs 合同 vs 还款计划表 |
|
|
36
|
+
| 评估日期 | 序列合理性 | 必须早于贷款审批 | Medium | 放款之后才做评估属于红旗信号 |
|
|
37
37
|
|
|
38
|
-
##
|
|
38
|
+
## 逻辑一致性核查
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
这些不是单字段比对,而是跨字段的逻辑校验:
|
|
41
41
|
|
|
42
|
-
- **LTV
|
|
43
|
-
- **DTI
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
42
|
+
- **LTV 比率一致性**:资产价值 × LTV % 应等于或大于贷款金额。在评估报告、申请表与合同之间交叉核查。
|
|
43
|
+
- **DTI 比率合理性**:月负债(来自征信报告)+ 拟议月供)/ 月收入(来自收入证明)不应超过申报的 DTI 或监管上限。
|
|
44
|
+
- **时间线合理性**:入职日期 < 收入证明出具日期 < 申请日期 < 合同签订日期 < 放款日期。任何违反此序列的情况都是一项发现。
|
|
45
|
+
- **附件完整性**:主合同中引用的每一份附件都必须出现在案件资料中;案件中每一份附件也都必须被主合同引用。
|
|
46
|
+
- **担保人交叉核查**:若列有担保人,其身份字段也必须与担保人专项材料进行跨文档核查通过。
|
|
47
|
+
- **金额分解**:若合同规定本金 + 利息 + 费用,三者之和必须等于其他位置列出的总义务金额。
|
|
48
48
|
|
|
49
|
-
##
|
|
49
|
+
## 比对矩阵模板
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
案件级比对矩阵的输出 schema:
|
|
52
52
|
|
|
53
53
|
```json
|
|
54
54
|
{
|
|
@@ -1,282 +1,132 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dashboard-reporting
|
|
3
3
|
tier: meta-meta
|
|
4
|
-
description:
|
|
4
|
+
description: 生成 HTML 仪表盘,让开发者用户可视化核查结果、系统进度、质量指标。在测试轮次完成、生产批次跑完、开发者用户想看可视化报告,或他们明确要求时使用。仪表盘是自包含的 HTML 文件。**仅在确实有"值得可视化的东西"时使用** —— 不要当成默认交付物。日常状态汇报用 KC 的 TUI 即可。HTML 仪表盘是对直接汇报的补充,不是替代。
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
#
|
|
7
|
+
# Dashboard Reporting
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
仪表盘只是众多渠道之一 —— 而且并不总是最经济的那个 —— 让开发者用户了解情况。KC 在 TUI 里已经能直接汇报状态;HTML 仪表盘存在的理由是**值得可视化看的东西**:分布、时间线、热力图、并列对比、可钻取的表格。
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
不要把生成仪表盘当成"满足这条 skill"的打卡项。把它当成开发者用户真要的交付物,或者一张图确实比读 TUI 输出 / JSON 更省时间的场景。
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
## 最低限 vs 锦上添花
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
开发者用户要仪表盘时,**先做到最低限,能真带来价值再扩展**。
|
|
16
16
|
|
|
17
|
-
###
|
|
17
|
+
### 最低限
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
一份够用的仪表盘的底线:
|
|
20
|
+
- 一个汇总头:总文档数,顶层 通过 / 失败 / 缺失 数。
|
|
21
|
+
- 一张按规则汇总的表:rule_id、准确率、pass / fail / NA 计数,可选的置信度列。
|
|
22
|
+
- 一份失败 case 的列表,用户能点开看详情(规则、抽取值、期望值、 comment)。
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
够发了。开发者用户能在 3 秒内回答"这一批健不健康,哪些规则出了问题",最低限就达成。
|
|
22
25
|
|
|
23
|
-
|
|
24
|
-
- 本批次处理的单据总数
|
|
25
|
-
- 各规则的通过率、不通过率、无法核查率
|
|
26
|
-
- 高置信度/中置信度/低置信度的分布
|
|
26
|
+
### 锦上添花
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
28
|
+
下面这些只在数据或用户需求确实证明合理时才加:
|
|
29
|
+
- 置信度分布直方图(在置信度已经校准、用户在意分布形状时才有用)。
|
|
30
|
+
- 准确率随时间的折线图(只有累积了足够的历史能画出有意义曲线时才有用)。
|
|
31
|
+
- 按产品类型 / 按签发方的分项(语料有明显分群时才用)。
|
|
32
|
+
- 成本指标(成本是当下关切时才用,否则跳过)。
|
|
33
|
+
- 钻取导航(汇总 → 规则 → 文档)。
|
|
34
|
+
- 内嵌反馈控件(点击改值、一键标记错误)。
|
|
32
35
|
|
|
33
|
-
|
|
34
|
-
- 判定为「不通过」的案例列表
|
|
35
|
-
- 每个案例的关键字段摘要、不通过原因、置信度
|
|
36
|
-
- 可按规则、按置信度、按不通过原因筛选
|
|
36
|
+
不要为了显得周到而加一节。一张空的"置信度分布"图(背后根本没有校准过的数据)比没有图更糟。
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
- 置信度分布直方图
|
|
40
|
-
- 低置信度案例的高亮标注
|
|
41
|
-
- 置信度与实际准确率的校准分析(如有质控数据)
|
|
38
|
+
## 仪表盘类型(什么时候用哪种)
|
|
42
39
|
|
|
43
|
-
###
|
|
40
|
+
### 结果仪表盘
|
|
41
|
+
处理完一批文档后。上面的最低限通常就够了。
|
|
44
42
|
|
|
45
|
-
|
|
43
|
+
### 进度仪表盘
|
|
44
|
+
按需生成,展示系统跨阶段演化。每条规则的生命周期状态、规则目录表、演化时间线。多在开发者用户想要"现在到哪了"的中段快照时有用。
|
|
46
45
|
|
|
47
|
-
|
|
46
|
+
### 质量仪表盘
|
|
47
|
+
QC 复核周期结束后。准确率趋势、抽样率走势、待处理标记、成本。在 QC 已经跑了足够多周期、能画出趋势时才有用。
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
- 规则总数及各阶段分布(已提取、技能已编写、技能已测试、工作流已蒸馏、工作流已测试、已投产)
|
|
51
|
-
- 用进度条或甘特图形式展示
|
|
49
|
+
如果当下只有一种对开发者用户真正有帮助,就只做那一种。不要默认三种都生成。
|
|
52
50
|
|
|
53
|
-
|
|
54
|
-
- 每条规则的迭代轮次和当前准确率
|
|
55
|
-
- 从第一轮到最新一轮的准确率变化趋势
|
|
56
|
-
- 标注关键事件(如「达到阈值」「触发回退」「开发者用户确认」)
|
|
51
|
+
## 反馈采集(在适用时是锦上添花)
|
|
57
52
|
|
|
58
|
-
|
|
59
|
-
- 达到 `MAX_ITERATIONS` 仍未达标的规则
|
|
60
|
-
- 等待开发者用户确认的模糊事项
|
|
61
|
-
- 缺少测试样本的规则
|
|
62
|
-
|
|
63
|
-
### 三、质量监控仪表盘(Quality Dashboard)
|
|
64
|
-
|
|
65
|
-
展示生产环境中的质量指标趋势。
|
|
66
|
-
|
|
67
|
-
#### 必须包含的内容
|
|
68
|
-
|
|
69
|
-
**准确率趋势**:
|
|
70
|
-
- 每条规则的准确率随时间的变化曲线
|
|
71
|
-
- 阈值线的标注(`WORKFLOW_ACCURACY`)
|
|
72
|
-
- 低于阈值的时间段高亮
|
|
73
|
-
|
|
74
|
-
**抽样率变化**:
|
|
75
|
-
- 各规则当前的质控抽样比例
|
|
76
|
-
- 抽样比例的变化历史(体现从全量到抽样的信心积累过程)
|
|
77
|
-
|
|
78
|
-
**成本追踪**:
|
|
79
|
-
- 每条规则的平均核查成本
|
|
80
|
-
- 按模型层级的成本分布
|
|
81
|
-
- 总成本趋势
|
|
82
|
-
|
|
83
|
-
**异常警报**:
|
|
84
|
-
- 准确率下降的规则(红色标注)
|
|
85
|
-
- 置信度漂移的规则(黄色标注)
|
|
86
|
-
- 成本异常的规则
|
|
87
|
-
|
|
88
|
-
## 用户反馈收集
|
|
89
|
-
|
|
90
|
-
每个仪表盘必须内置用户反馈机制,让用户可以直接在核查结果上报告错误和添加评论。用户反馈是系统中最有价值的数据来源,不是可选功能。
|
|
53
|
+
当仪表盘要给会真去复核结果的人看时(开发者用户、终端用户、领域专家),加上反馈控件。当仪表盘只是开发者用户构建过程中的自查工具时,反馈控件通常多余 —— 它假装存在一个用户根本不打算走的流程。
|
|
91
54
|
|
|
92
55
|
### 开发者用户反馈
|
|
93
56
|
|
|
94
|
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
98
|
-
- **自由评论**:对任何结果添加文本注释。
|
|
57
|
+
能看到完整结果细节。有用的控件:
|
|
58
|
+
- 字段级修正:点抽取值,给出正确值。
|
|
59
|
+
- 结果覆盖:把 pass 改为 fail(或反过来),带理由。
|
|
60
|
+
- comment:自由文本注释。
|
|
99
61
|
|
|
100
62
|
### 终端用户反馈
|
|
101
63
|
|
|
102
|
-
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
|
|
107
|
-
### 反馈即基准真值
|
|
108
|
-
|
|
109
|
-
用户报告的错误即基准真值。它们的优先级高于编程智能体的判断和 Worker LLM 的输出。反馈数据流转如下:
|
|
110
|
-
|
|
111
|
-
1. 用户在仪表盘上提交反馈 → 存储为结构化记录。
|
|
112
|
-
2. 记录格式:`{result_id, trace_id, reporter_role, feedback_type, original_result, corrected_value, comment, timestamp}`。
|
|
113
|
-
3. 反馈记录作为已确认的失败案例,输入 `evolution-loop` 演化循环。
|
|
114
|
-
4. 仪表盘展示反馈趋势:修正率随时间变化、最常被报告的问题、用户修正率最高的规则。
|
|
115
|
-
|
|
116
|
-
例如:信贷审批场景中,业务人员发现某笔贷款的担保物估值被提取错误,一键标记后,该修正自动进入下一轮演化循环的失败案例池,驱动规则改进。
|
|
117
|
-
|
|
118
|
-
反馈收集机制与仪表盘生成是一体的,不是独立功能。每个生成的 HTML 仪表盘都应包含反馈 UI,即使最初只是将反馈写入本地 JSON 文件,由编程智能体在下次迭代时读取。
|
|
119
|
-
|
|
120
|
-
## 技术规范
|
|
121
|
-
|
|
122
|
-
### 自包含 HTML
|
|
123
|
-
|
|
124
|
-
仪表盘必须是单个 HTML 文件,不依赖任何外部资源:
|
|
125
|
-
|
|
126
|
-
- CSS 内联(`<style>` 标签)
|
|
127
|
-
- JavaScript 内联(`<script>` 标签)
|
|
128
|
-
- 不引用任何 CDN 资源
|
|
129
|
-
- 不需要启动任何服务器
|
|
130
|
-
- 双击文件即可在浏览器中打开
|
|
131
|
-
|
|
132
|
-
### 不依赖第三方库
|
|
133
|
-
|
|
134
|
-
所有图表和可视化使用原生 HTML/CSS/JavaScript 实现:
|
|
64
|
+
只能看到简化结果。有用的控件:
|
|
65
|
+
- 一键标记错误。
|
|
66
|
+
- comment:简要文本说明。
|
|
67
|
+
- 严重性指示:关键 / 重要 / 次要。
|
|
135
68
|
|
|
136
|
-
|
|
137
|
-
- 柱状图/条形图:CSS Flexbox 或 Grid + `div` 高度百分比
|
|
138
|
-
- 折线图:SVG `<polyline>` 或 `<path>`
|
|
139
|
-
- 饼图:SVG `<circle>` 的 `stroke-dasharray`
|
|
140
|
-
- 表格:原生 `<table>` + CSS 样式
|
|
69
|
+
### 反馈即 ground truth
|
|
141
70
|
|
|
142
|
-
|
|
71
|
+
用户报错就是 ground truth,覆盖 agent 判定和 worker LLM 的输出。流转:
|
|
143
72
|
|
|
144
|
-
|
|
73
|
+
1. 通过仪表盘提交 → 存为结构化记录。
|
|
74
|
+
2. Schema:`{result_id, trace_id, reporter_role, feedback_type, original_result, corrected_value, comment, timestamp}`。
|
|
75
|
+
3. 记录喂入 `evolution-loop` 作为已确认的失败。
|
|
76
|
+
4. 后续仪表盘里呈现反馈趋势(纠正率随时间变化、最被报错的问题、纠正率最高的规则)。
|
|
145
77
|
|
|
146
|
-
|
|
78
|
+
## 技术约束
|
|
147
79
|
|
|
148
|
-
|
|
149
|
-
-
|
|
150
|
-
-
|
|
80
|
+
自包含的 HTML,内嵌 CSS / JavaScript。
|
|
81
|
+
- **零外部依赖**。无 CDN、无 npm、无服务器。全部内联。
|
|
82
|
+
- **不依赖服务器**。开发者用户双击 HTML 文件即可打开。
|
|
83
|
+
- **响应式布局**。桌面和移动端都能用。
|
|
84
|
+
- **暗 / 亮模式**:遵循系统偏好或提供切换。
|
|
151
85
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
### 深色/浅色模式
|
|
155
|
-
|
|
156
|
-
支持系统级的深色/浅色模式切换:
|
|
157
|
-
|
|
158
|
-
```css
|
|
159
|
-
@media (prefers-color-scheme: dark) {
|
|
160
|
-
:root {
|
|
161
|
-
--bg-primary: #1a1a2e;
|
|
162
|
-
--bg-secondary: #16213e;
|
|
163
|
-
--text-primary: #e8e8e8;
|
|
164
|
-
--text-secondary: #a0a0a0;
|
|
165
|
-
--accent-green: #4ade80;
|
|
166
|
-
--accent-red: #f87171;
|
|
167
|
-
--accent-yellow: #fbbf24;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
@media (prefers-color-scheme: light) {
|
|
172
|
-
:root {
|
|
173
|
-
--bg-primary: #ffffff;
|
|
174
|
-
--bg-secondary: #f3f4f6;
|
|
175
|
-
--text-primary: #1f2937;
|
|
176
|
-
--text-secondary: #6b7280;
|
|
177
|
-
--accent-green: #16a34a;
|
|
178
|
-
--accent-red: #dc2626;
|
|
179
|
-
--accent-yellow: #d97706;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
```
|
|
86
|
+
图表用内联 SVG,或把轻量图表库以 `<script>` 标签内联。
|
|
183
87
|
|
|
184
88
|
## 数据来源
|
|
185
89
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
| 质控评审 | `logs/qc/reviews/*.json` |
|
|
192
|
-
| 演化日志 | `logs/evolution/*/iteration_*.json` |
|
|
193
|
-
| 版本信息 | `versions.json` |
|
|
194
|
-
| 准确率趋势 | `logs/qc/trends.json` |
|
|
195
|
-
| 规则目录 | `rule-catalog.json` |
|
|
196
|
-
| 成本数据 | 从工作流日志中汇总 |
|
|
197
|
-
|
|
198
|
-
数据以 JavaScript 变量的形式嵌入到 HTML 文件头部:
|
|
199
|
-
|
|
200
|
-
```html
|
|
201
|
-
<script>
|
|
202
|
-
const DASHBOARD_DATA = {
|
|
203
|
-
generated_at: "2025-04-01T20:00:00Z",
|
|
204
|
-
batch_id: "BATCH-2025-04-01",
|
|
205
|
-
results: [...],
|
|
206
|
-
qc_reviews: [...],
|
|
207
|
-
trends: {...}
|
|
208
|
-
};
|
|
209
|
-
</script>
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## 生成触发时机
|
|
213
|
-
|
|
214
|
-
### 自动触发
|
|
215
|
-
|
|
216
|
-
- 每轮测试完成后(演化循环中)→ 生成进展仪表盘
|
|
217
|
-
- 每批次处理完成后 → 生成结果仪表盘
|
|
218
|
-
- 每次质控评审完成后 → 更新质量监控仪表盘
|
|
90
|
+
仪表盘读取:
|
|
91
|
+
- `Output/` 的核查结果。
|
|
92
|
+
- `logs/` 的演化与测试历史。
|
|
93
|
+
- `versions.json`(或 git log)的当前系统状态。
|
|
94
|
+
- QC 复核记录(与 `Output/` 并列存放)。
|
|
219
95
|
|
|
220
|
-
|
|
96
|
+
生成脚本应接收输入路径,输出单个 HTML 文件。
|
|
221
97
|
|
|
222
|
-
|
|
223
|
-
- 「给我看一下现在的进展」
|
|
224
|
-
- 「生成一下结果报告」
|
|
225
|
-
- 「准确率怎么样了」
|
|
98
|
+
## 生成时机
|
|
226
99
|
|
|
227
|
-
|
|
100
|
+
什么时候生成:
|
|
101
|
+
- 测试轮次完成,并且有足够数据值得可视化时。
|
|
102
|
+
- 生产批次结束,并且开发者用户想看可视化时。
|
|
103
|
+
- QC 复核周期完成时。
|
|
104
|
+
- 开发者用户明确要求时。
|
|
228
105
|
|
|
229
|
-
|
|
106
|
+
不要在每个小事件后都自动生成 —— 仪表盘会迅速堆积,用户大部分都不会打开。不确定时,**问一下用户**("要不要我生成一份仪表盘?"),而不是不问就生成。
|
|
230
107
|
|
|
231
|
-
|
|
232
|
-
dashboards/
|
|
233
|
-
├── results_2025-04-01_batch01.html
|
|
234
|
-
├── progress_2025-04-01.html
|
|
235
|
-
├── quality_2025-04-01.html
|
|
236
|
-
└── latest/
|
|
237
|
-
├── results.html # 最新结果仪表盘的软链接/副本
|
|
238
|
-
├── progress.html # 最新进展仪表盘的软链接/副本
|
|
239
|
-
└── quality.html # 最新质量仪表盘的软链接/副本
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
`latest/` 目录下始终保留最新版本,方便开发者用户快速访问。
|
|
108
|
+
生成的仪表盘存到 `Output/dashboards/`,文件名带时间戳留作历史。
|
|
243
109
|
|
|
244
110
|
## 设计原则
|
|
245
111
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
```
|
|
251
|
-
本批次共处理 50 份单据,综合准确率 92.3%,全部规则均达标。
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
或者:
|
|
255
|
-
|
|
256
|
-
```
|
|
257
|
-
⚠ 本批次 R003 规则准确率 (78%) 低于阈值 (85%),已触发演化循环。
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
总结之后再展开细节。
|
|
261
|
-
|
|
262
|
-
### 色彩编码
|
|
263
|
-
|
|
264
|
-
- 绿色:达标、通过、正常
|
|
265
|
-
- 黄色:接近阈值、需关注、中等置信度
|
|
266
|
-
- 红色:低于阈值、不通过、异常
|
|
267
|
-
|
|
268
|
-
### 可操作性
|
|
112
|
+
- **汇总在前**。开发者用户应能在 3 秒内看清健康状况。
|
|
113
|
+
- **按需钻取**。汇总 → 规则级 → 文档级。不要一次性堆细节。
|
|
114
|
+
- **配色**:绿色 = 通过/健康,红色 = 失败/严重,黄色 = 警告/需关注。简单且通用。
|
|
115
|
+
- **可行动**。每条标记的问题都建议下一步该做什么。
|
|
269
116
|
|
|
270
|
-
|
|
117
|
+
`scripts/generate_dashboard.py` 是一个起步脚本。按具体场景改写 —— 当一半 section 都没有内容可放时,删掉那一半。一份能回答用户问题的小仪表盘,胜过一份用户不需要的"全面"仪表盘。
|
|
271
118
|
|
|
272
|
-
|
|
273
|
-
- 「R001 已连续 5 个批次达标,建议将抽样比例从 50% 降至 20%」
|
|
274
|
-
- 「3 条模糊规则待确认,请查看详情」
|
|
119
|
+
## 与 TUI 汇报的分工
|
|
275
120
|
|
|
276
|
-
|
|
121
|
+
KC 的 TUI 本身就支持在运行时做丰富的状态汇报。TUI 用来:
|
|
122
|
+
- 持续的进度叙述。
|
|
123
|
+
- 每个阶段的小结。
|
|
124
|
+
- 快速的"刚才发生了什么"。
|
|
125
|
+
- 一切能用几行文字说清楚的事。
|
|
277
126
|
|
|
278
|
-
|
|
127
|
+
HTML 仪表盘用来:
|
|
128
|
+
- TUI 容纳不了的视觉产物(分布、图表、可筛选表格)。
|
|
129
|
+
- 交付给非 KC 用户(开发者用户事后复核、终端用户群体)。
|
|
130
|
+
- 需要持久保留、回头再看的记录。
|
|
279
131
|
|
|
280
|
-
|
|
281
|
-
仪表盘生成时间:2025-04-01 20:00:00 | 数据范围:2025-04-01 批次 #01
|
|
282
|
-
```
|
|
132
|
+
不确定时优先用 TUI。一条用户已经在读的简短状态消息,胜过一份还要他去打开的仪表盘。
|
|
@@ -107,7 +107,7 @@ def generate_html(summary: dict, per_rule: dict, failed_cases: list[dict]) -> st
|
|
|
107
107
|
<head>
|
|
108
108
|
<meta charset="UTF-8">
|
|
109
109
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
110
|
-
<title>KC
|
|
110
|
+
<title>KC — Verification Dashboard</title>
|
|
111
111
|
<style>
|
|
112
112
|
:root {{ --bg: #1a1a2e; --surface: #16213e; --text: #e0e0e0; --accent: #4caf50; --warn: #ff9800; --err: #f44336; }}
|
|
113
113
|
@media (prefers-color-scheme: light) {{
|
|
@@ -224,6 +224,19 @@ debug/
|
|
|
224
224
|
|
|
225
225
|
当出问题时,你可以独立检查每个阶段:章节切分错了?看 `_02`。提取对了但判定错了?对比 `_03` 和 `_04`。原始文本就是乱码?看 `_01`。没有中间结果,你只能盯着最终输出猜测。保留至少当前迭代的中间结果。
|
|
226
226
|
|
|
227
|
+
## 当语料装不进你的脑子时
|
|
228
|
+
|
|
229
|
+
要预先规划的一个根本约束:你有有限的上下文窗口。连着读几十份样本文档,会在你读完之前就把早期的观察挤出工作记忆,留给你"我看过整套语料"的印象但其实没有归纳能力。
|
|
230
|
+
|
|
231
|
+
把语料当成统计学家眼中的总体来对待:抽样、汇总、不要试图把整个总体塞进脑子里。几种在实践中有效的做法:
|
|
232
|
+
|
|
233
|
+
- **把文件系统当记忆用**。一边扫一边写 `notes/data_observations.md` (或者按规则维度写 `notes/<rule_id>_observations.md`)。记录字段命名变体、格式怪癖、缺失章节的模式、出人意料的取值。下一次会话打开笔记重读,而不是重新扫一遍文档。
|
|
234
|
+
- **每条规则一个 notepad / memory.md**。为每条规则维护一份简短的 `memory.md`,记录"我在样本集里就这条规则看到了什么" —— 哪些文档会触发它、出现了哪些取值、有哪些边缘情形。增量更新,而不是每次看这条规则都从头推导一遍。
|
|
235
|
+
- **派 subagent 去扫样本**。语料规模较大时,让一个 subagent(通过 `agent_tool`)去扫某个目录,回来给你一份汇总统计或一份简短的 markdown 报告。subagent 把完整的文件读取留在自己的上下文里,你只收到摘要。这个工具用得正是时候 —— 否则你会为了一个观察消耗大量上下文去读几十份文件。
|
|
236
|
+
- **统计 / 元视图优先于逐份阅读**。与其去读 20 份收入证明,不如对它们跑一遍正则统计格式变体。与其打开每份年报,不如先列文件名按签发方 / 年份分组。先建好元视图,再深入有代表性的几份。
|
|
237
|
+
|
|
238
|
+
原则:目标是**足够多的样本来刻画分布**,而不是足够多的样本来背诵语料。前者装得进脑子也装得进笔记。后者装不下。
|
|
239
|
+
|
|
227
240
|
## 集成
|
|
228
241
|
|
|
229
242
|
数据体感的观察结果应直接输入下游技能:
|
|
@@ -2,39 +2,115 @@
|
|
|
2
2
|
name: document-chunking
|
|
3
3
|
tier: meta
|
|
4
4
|
description: >
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
把文档切成块供下游处理。在批量观察样本、给抽取工作流喂数据、或把长篇监管文档
|
|
6
|
+
切成 worker LLM 装得下的块时使用。涵盖:用于快速探索的便宜方法(按页 / 定长 /
|
|
7
|
+
按标题),以及用于结构化长文档生产级分块的"洋葱剥离"层次策略 + "楔入法"兜底
|
|
8
|
+
(借鉴 pdf2skills)。也涵盖最核心的平衡问题:块太大 —— 关键信息淹没在一堆草料里;
|
|
9
|
+
块太小 —— 语义连续性被打断。
|
|
9
10
|
---
|
|
10
11
|
|
|
11
12
|
# 文档分块处理
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
把文档切成块供下游处理,分两套:
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
- **便宜分块** —— 探索性、批量处理样本时用的快速方法。
|
|
17
|
+
- **层次分块** —— 长结构化文档用的"洋葱剥离"策略(借鉴 pdf2skills 方法论),加上对无标题段落的"楔入法"兜底。
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
跨两套都最关键的问题:**块应该多大?** 见下文"找到平衡"一节再决定具体尺寸。
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
## 便宜方法
|
|
20
22
|
|
|
21
|
-
|
|
23
|
+
**按页切分** —— 最简单的方式。每页即为一个块。适用于大多数遍历文档的场景,例如初步观察样本、统计页数分布。不依赖文档内部结构,鲁棒性最高。
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
**定长分块** —— 按字符数或 token 数切分,相邻块之间保留少量重叠。适合构建检索索引或做初步观察。重叠的作用是避免边界处的语义被切断导致后续匹配漏检。
|
|
24
26
|
|
|
25
|
-
|
|
27
|
+
**按标题切分** —— 识别章节标题、在标题边界处切分。能保留语义完整的章节单元。前提是文档有一致的标题约定,能用正则表达。
|
|
26
28
|
|
|
27
|
-
|
|
29
|
+
## 洋葱剥离法 —— 层次策略(长结构化文档的首选)
|
|
28
30
|
|
|
29
|
-
|
|
30
|
-
- 构建全文检索索引 → 定长分块加重叠
|
|
31
|
-
- 按章节抽取条款或要点 → 按标题切分
|
|
32
|
-
- 文档自带目录 → 直接解析目录得到结构
|
|
31
|
+
基于标题层级的分级分解。叫"洋葱剥离"是因为你从最外层结构一层层向内剥。
|
|
33
32
|
|
|
34
|
-
|
|
33
|
+
### 工作方式
|
|
35
34
|
|
|
36
|
-
|
|
35
|
+
1. **解析文档的标题层级。** 按级别识别所有标题(H1、H2、H3 —— 或文档自身格式中的等价物:"第一编"、"第一章"、"第 1.1 节"、 "第一条")。
|
|
36
|
+
2. **构建一棵树。** 每个标题是一个节点。标题之间的内容归属于最近一个上级标题所在节点。
|
|
37
|
+
3. **检查大小。** 遍历整棵树。若某个节点的内容(包括其所有子节点)在处理上限以内,就停在这里 —— 这个节点就是一个分块。
|
|
38
|
+
4. **必要时才拆分。** 若某节点超出上限,向下进入其子节点。只有当节点过大且确实有子标题可拆时才拆。
|
|
39
|
+
5. **仍然过大的叶子节点**交给"楔入法"兜底(见下文)。
|
|
40
|
+
|
|
41
|
+
### 为什么有效
|
|
42
|
+
|
|
43
|
+
- 尊重文档自身的语义结构。"第三章:风险揭示"分块严格对应作者本来的章节意图。
|
|
44
|
+
- 将信息损失降到最低。绝不会在一个意思的中间一刀切。
|
|
45
|
+
- 产出的分块大小不一致 —— 而这是好事。一个短章节作为一个完整分块,远胜于被强行劈成两半。
|
|
46
|
+
|
|
47
|
+
### 模式发现的捷径
|
|
48
|
+
|
|
49
|
+
在搭建完整解析器之前,先在几份样本文档上探索结构模式:
|
|
50
|
+
- 所有章节标题是否都以 "Chapter X" 或 "第X章" 开头?
|
|
51
|
+
- 节号是否一致编号(1.1、1.2、1.3)?
|
|
52
|
+
- 是否存在视觉标记(粗体、特定字体、横线分隔)?
|
|
53
|
+
|
|
54
|
+
如果你发现了稳定的模式,基于正则的分块器比基于 LLM 的结构识别更快、更可靠。例如:
|
|
55
|
+
- `^第[一二三四五六七八九十百]+章` 匹配中文章节标题
|
|
56
|
+
- `^Chapter \d+` 匹配英文章节标题
|
|
57
|
+
- `^\d+\.\d+` 匹配编号小节
|
|
58
|
+
|
|
59
|
+
在投入使用前,对多份文档验证正则的正确性。
|
|
60
|
+
|
|
61
|
+
## 楔入法 —— 兜底(无清晰标题结构时)
|
|
62
|
+
|
|
63
|
+
适用于密集的法律文本、连绵的散文,或洋葱剥离后仍然过大、又没有可用子标题可拆的叶子节点。
|
|
64
|
+
|
|
65
|
+
### 工作方式
|
|
66
|
+
|
|
67
|
+
使用**滚动上下文窗口**,让算法对任意长度的文档都能伸缩。
|
|
68
|
+
|
|
69
|
+
1. **窗口化内容。** 将剩余未处理文本中的至多 MAX_TOKENS 载入一个窗口(数值可配置;选你的 LLM 能舒服读完的大小)。
|
|
70
|
+
2. **让 LLM 标出切分点。** 提示 LLM 在窗口里识别 1–3 个主题或议题发生变化的自然断点。对每个切分点,LLM 返回:
|
|
71
|
+
- `tokens_before`:切分点之前约 K 个 token(默认 K=50),逐字摘自原文。
|
|
72
|
+
- `tokens_after`:切分点之后约 K 个 token,逐字摘自原文。
|
|
73
|
+
- `chunk_title`:为切分点之前的分块写一句 5–10 字的标题。
|
|
74
|
+
3. **通过模糊匹配定位切点。** LLM 引用的 tokens 与原文不会完全一致(轻微改写、空白差异、编码痕迹)。用 Levenshtein 距离找最佳匹配位置;如果 `tokens_after` 匹配不上,退回仅依据 `tokens_before` 推出的位置。
|
|
75
|
+
4. **滑动并重复。** 把第一个已确认切点之前的文本切出作为一个分块。向前滑动窗口:新窗口从最后一个切点开始。重复,直到剩余文本可作为单一分块为止。
|
|
37
76
|
|
|
38
|
-
|
|
77
|
+
### 为什么有效
|
|
78
|
+
|
|
79
|
+
- LLM 识别的是语义边界,而不是任意字符位置。
|
|
80
|
+
- LLM 不重新生成文本 —— 它只引用位置。没有幻觉风险。
|
|
81
|
+
- 基于 K-token 引用 + Levenshtein 匹配的方法与语言无关。对中文、英文及多语种混合文档都同样适用。
|
|
82
|
+
- 滚动窗口意味着任意长度的文档都能增量处理 —— 算法不受上下文窗口大小限制。
|
|
83
|
+
- 模糊匹配能处理 LLM 引用文本与真实原文之间不可避免的小差异。
|
|
84
|
+
|
|
85
|
+
### 何时使用
|
|
86
|
+
|
|
87
|
+
- 仅在洋葱剥离法无法继续拆分(没有可用子标题)时使用。
|
|
88
|
+
- 用于完全没有结构化标记的文档。
|
|
89
|
+
- 成本考量:本方法需要调用 LLM。选用能完成主题边界识别的最便宜的模型即可。
|
|
90
|
+
|
|
91
|
+
## 找到平衡 —— 何时停止切分
|
|
92
|
+
|
|
93
|
+
两种失败模式:
|
|
94
|
+
|
|
95
|
+
- **分块过大**:相关信息淹没在 LLM 上下文里的一堆草料中。即便在 LLM 的窗口之内,注意力也会在长输入上稀释 —— 块越长,真正的证据越容易被忽略。
|
|
96
|
+
- **分块过小**:语义连续性断裂。一条需要"公司是银行" + "贷款额超阈值 X"两个事实合在一起才能触发的规则,可能看到它们被切到不同分块里,丢掉了关键合取关系。
|
|
97
|
+
|
|
98
|
+
如何找到平衡:
|
|
99
|
+
|
|
100
|
+
1. **以下游任务为锚,而非以 LLM 上下文窗口为锚。** 分块要足够大,能把下游规则所需证据完整放在一处。一条要比较两个条款的规则,这两个条款必须落在同一分块里。
|
|
101
|
+
2. **优先用语义边界,而不是固定大小。** 在章节边界切的块比硬撞 target token 数中途断句的块更有用。洋葱剥离在文档自然结束的地方停止 —— 利用这一点。
|
|
102
|
+
3. **用真实下游消费方做测试。** 在分块输出上跑一段抽取或判定。如果消费方漏掉了源文档里存在的证据,你的分块形状不对 —— 通常是太大或在错的地方切了。
|
|
103
|
+
4. **关注方差,不止平均尺寸。** 在一堆小块里夹几个巨型块比所有块均匀分布更糟,因为信息丢失就发生在那几个巨型块里。
|
|
104
|
+
5. **别盲目朝 LLM 上下文窗口尺寸去优化。** 一个 128K 上下文的模型技术上能吞 100K 的块;但能不能从这个块里精准取出证据是另一个问题。更小、边界更清晰的分块通常更胜一筹。
|
|
105
|
+
|
|
106
|
+
## 实践要点
|
|
107
|
+
|
|
108
|
+
- **分块大小取决于下游任务。** 给编程智能体做规则抽取时,分块可以很大。给 worker LLM 处理时,分块必须能舒服装进它的上下文,再留出 prompt + 响应的空间。
|
|
109
|
+
- **保留上下文。** 拆分时把父级标题链作为上下文带上。来自"第二编
|
|
110
|
+
> 第三章 > 第 3.2 节"的分块应包含这些标题,让下游处理知道内容所处的位置。
|
|
111
|
+
- **缓存分块树。** 一旦文档结构已被解析,把树保存下来。多条规则可能需要同一文档的内容,重复解析就是浪费。
|
|
112
|
+
- **记录分块决策。** 使用了哪种策略、产出多少分块、各自的大小。有助于排查下游问题。
|
|
113
|
+
|
|
114
|
+
## 与 tree-processing 的关系
|
|
39
115
|
|
|
40
|
-
|
|
116
|
+
本技能讲分块方法。`tree-processing` 讲为生产核查工作流设计精确、可编码的分块脚本 —— 在那里分块必须确定性、可复现、可测试。当上面的便宜方法满足不了生产路径的控制需求时,转用 `tree-processing`。
|