kc-beta 0.1.0

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.
Files changed (141) hide show
  1. package/bin/kc-beta.js +16 -0
  2. package/package.json +32 -0
  3. package/src/agent/confidence-scorer.js +120 -0
  4. package/src/agent/context.js +124 -0
  5. package/src/agent/corner-case-registry.js +119 -0
  6. package/src/agent/engine.js +224 -0
  7. package/src/agent/events.js +27 -0
  8. package/src/agent/history.js +101 -0
  9. package/src/agent/llm-client.js +131 -0
  10. package/src/agent/pipelines/base.js +14 -0
  11. package/src/agent/pipelines/distillation.js +113 -0
  12. package/src/agent/pipelines/extraction.js +92 -0
  13. package/src/agent/pipelines/index.js +23 -0
  14. package/src/agent/pipelines/initializer.js +163 -0
  15. package/src/agent/pipelines/production-qc.js +99 -0
  16. package/src/agent/pipelines/skill-authoring.js +83 -0
  17. package/src/agent/pipelines/skill-testing.js +111 -0
  18. package/src/agent/tools/agent-tool.js +100 -0
  19. package/src/agent/tools/base.js +35 -0
  20. package/src/agent/tools/dashboard-render.js +146 -0
  21. package/src/agent/tools/document-parse.js +184 -0
  22. package/src/agent/tools/document-search.js +111 -0
  23. package/src/agent/tools/evolution-cycle.js +150 -0
  24. package/src/agent/tools/qc-sample.js +94 -0
  25. package/src/agent/tools/registry.js +55 -0
  26. package/src/agent/tools/rule-catalog.js +113 -0
  27. package/src/agent/tools/sandbox-exec.js +106 -0
  28. package/src/agent/tools/tier-downgrade.js +114 -0
  29. package/src/agent/tools/worker-llm-call.js +109 -0
  30. package/src/agent/tools/workflow-run.js +138 -0
  31. package/src/agent/tools/workspace-file.js +122 -0
  32. package/src/agent/version-manager.js +130 -0
  33. package/src/agent/workspace.js +82 -0
  34. package/src/cli/components.js +164 -0
  35. package/src/cli/index.js +329 -0
  36. package/src/cli/init.js +80 -0
  37. package/src/cli/onboard.js +182 -0
  38. package/src/cli/terminal.js +143 -0
  39. package/src/config.js +93 -0
  40. package/template/.env.template +31 -0
  41. package/template/CLAUDE.md +137 -0
  42. package/template/Input/.gitkeep +0 -0
  43. package/template/Output/.gitkeep +0 -0
  44. package/template/Rules/.gitkeep +0 -0
  45. package/template/Samples/.gitkeep +0 -0
  46. package/template/skills/en/meta/compliance-judgment/SKILL.md +114 -0
  47. package/template/skills/en/meta/compliance-judgment/references/output-format.md +151 -0
  48. package/template/skills/en/meta/confidence-system/SKILL.md +117 -0
  49. package/template/skills/en/meta/corner-case-management/SKILL.md +111 -0
  50. package/template/skills/en/meta/cross-document-verification/SKILL.md +131 -0
  51. package/template/skills/en/meta/cross-document-verification/references/contradiction-taxonomy.md +73 -0
  52. package/template/skills/en/meta/data-sensibility/SKILL.md +115 -0
  53. package/template/skills/en/meta/document-parsing/SKILL.md +108 -0
  54. package/template/skills/en/meta/document-parsing/references/parser-catalog.md +40 -0
  55. package/template/skills/en/meta/entity-extraction/SKILL.md +129 -0
  56. package/template/skills/en/meta/tree-processing/SKILL.md +103 -0
  57. package/template/skills/en/meta-meta/bootstrap-workspace/SKILL.md +70 -0
  58. package/template/skills/en/meta-meta/dashboard-reporting/SKILL.md +106 -0
  59. package/template/skills/en/meta-meta/dashboard-reporting/scripts/generate_dashboard.py +178 -0
  60. package/template/skills/en/meta-meta/evolution-loop/SKILL.md +210 -0
  61. package/template/skills/en/meta-meta/evolution-loop/references/convergence-guide.md +62 -0
  62. package/template/skills/en/meta-meta/quality-control/SKILL.md +138 -0
  63. package/template/skills/en/meta-meta/quality-control/references/qa-layers.md +92 -0
  64. package/template/skills/en/meta-meta/quality-control/references/sampling-strategies.md +76 -0
  65. package/template/skills/en/meta-meta/rule-extraction/SKILL.md +100 -0
  66. package/template/skills/en/meta-meta/rule-extraction/references/chunking-strategies.md +80 -0
  67. package/template/skills/en/meta-meta/rule-graph/SKILL.md +118 -0
  68. package/template/skills/en/meta-meta/skill-authoring/SKILL.md +108 -0
  69. package/template/skills/en/meta-meta/skill-authoring/references/skill-format-spec.md +78 -0
  70. package/template/skills/en/meta-meta/skill-to-workflow/SKILL.md +150 -0
  71. package/template/skills/en/meta-meta/skill-to-workflow/references/worker-llm-catalog.md +50 -0
  72. package/template/skills/en/meta-meta/task-decomposition/SKILL.md +129 -0
  73. package/template/skills/en/meta-meta/task-decomposition/references/decision-matrix.md +81 -0
  74. package/template/skills/en/meta-meta/version-control/SKILL.md +152 -0
  75. package/template/skills/en/meta-meta/version-control/references/trace-id-spec.md +79 -0
  76. package/template/skills/en/skill-creator/LICENSE.txt +202 -0
  77. package/template/skills/en/skill-creator/SKILL.md +479 -0
  78. package/template/skills/en/skill-creator/agents/analyzer.md +274 -0
  79. package/template/skills/en/skill-creator/agents/comparator.md +202 -0
  80. package/template/skills/en/skill-creator/agents/grader.md +223 -0
  81. package/template/skills/en/skill-creator/assets/eval_review.html +146 -0
  82. package/template/skills/en/skill-creator/eval-viewer/generate_review.py +471 -0
  83. package/template/skills/en/skill-creator/eval-viewer/viewer.html +1325 -0
  84. package/template/skills/en/skill-creator/references/schemas.md +430 -0
  85. package/template/skills/en/skill-creator/scripts/__init__.py +0 -0
  86. package/template/skills/en/skill-creator/scripts/aggregate_benchmark.py +401 -0
  87. package/template/skills/en/skill-creator/scripts/generate_report.py +326 -0
  88. package/template/skills/en/skill-creator/scripts/improve_description.py +248 -0
  89. package/template/skills/en/skill-creator/scripts/package_skill.py +136 -0
  90. package/template/skills/en/skill-creator/scripts/quick_validate.py +103 -0
  91. package/template/skills/en/skill-creator/scripts/run_eval.py +310 -0
  92. package/template/skills/en/skill-creator/scripts/run_loop.py +332 -0
  93. package/template/skills/en/skill-creator/scripts/utils.py +47 -0
  94. package/template/skills/zh/meta/compliance-judgment/SKILL.md +303 -0
  95. package/template/skills/zh/meta/compliance-judgment/references/output-format.md +151 -0
  96. package/template/skills/zh/meta/confidence-system/SKILL.md +228 -0
  97. package/template/skills/zh/meta/corner-case-management/SKILL.md +235 -0
  98. package/template/skills/zh/meta/cross-document-verification/SKILL.md +241 -0
  99. package/template/skills/zh/meta/cross-document-verification/references/contradiction-taxonomy.md +73 -0
  100. package/template/skills/zh/meta/data-sensibility/SKILL.md +235 -0
  101. package/template/skills/zh/meta/document-parsing/SKILL.md +168 -0
  102. package/template/skills/zh/meta/document-parsing/references/parser-catalog.md +40 -0
  103. package/template/skills/zh/meta/entity-extraction/SKILL.md +276 -0
  104. package/template/skills/zh/meta/tree-processing/SKILL.md +233 -0
  105. package/template/skills/zh/meta-meta/bootstrap-workspace/SKILL.md +147 -0
  106. package/template/skills/zh/meta-meta/dashboard-reporting/SKILL.md +281 -0
  107. package/template/skills/zh/meta-meta/dashboard-reporting/scripts/generate_dashboard.py +178 -0
  108. package/template/skills/zh/meta-meta/evolution-loop/SKILL.md +302 -0
  109. package/template/skills/zh/meta-meta/evolution-loop/references/convergence-guide.md +62 -0
  110. package/template/skills/zh/meta-meta/quality-control/SKILL.md +269 -0
  111. package/template/skills/zh/meta-meta/quality-control/references/qa-layers.md +92 -0
  112. package/template/skills/zh/meta-meta/quality-control/references/sampling-strategies.md +76 -0
  113. package/template/skills/zh/meta-meta/rule-extraction/SKILL.md +208 -0
  114. package/template/skills/zh/meta-meta/rule-extraction/references/chunking-strategies.md +80 -0
  115. package/template/skills/zh/meta-meta/rule-graph/SKILL.md +203 -0
  116. package/template/skills/zh/meta-meta/skill-authoring/SKILL.md +235 -0
  117. package/template/skills/zh/meta-meta/skill-authoring/references/skill-format-spec.md +78 -0
  118. package/template/skills/zh/meta-meta/skill-to-workflow/SKILL.md +275 -0
  119. package/template/skills/zh/meta-meta/skill-to-workflow/references/worker-llm-catalog.md +50 -0
  120. package/template/skills/zh/meta-meta/task-decomposition/SKILL.md +224 -0
  121. package/template/skills/zh/meta-meta/task-decomposition/references/decision-matrix.md +81 -0
  122. package/template/skills/zh/meta-meta/version-control/SKILL.md +284 -0
  123. package/template/skills/zh/meta-meta/version-control/references/trace-id-spec.md +79 -0
  124. package/template/skills/zh/skill-creator/LICENSE.txt +202 -0
  125. package/template/skills/zh/skill-creator/SKILL.md +479 -0
  126. package/template/skills/zh/skill-creator/agents/analyzer.md +274 -0
  127. package/template/skills/zh/skill-creator/agents/comparator.md +202 -0
  128. package/template/skills/zh/skill-creator/agents/grader.md +223 -0
  129. package/template/skills/zh/skill-creator/assets/eval_review.html +146 -0
  130. package/template/skills/zh/skill-creator/eval-viewer/generate_review.py +471 -0
  131. package/template/skills/zh/skill-creator/eval-viewer/viewer.html +1325 -0
  132. package/template/skills/zh/skill-creator/references/schemas.md +430 -0
  133. package/template/skills/zh/skill-creator/scripts/__init__.py +0 -0
  134. package/template/skills/zh/skill-creator/scripts/aggregate_benchmark.py +401 -0
  135. package/template/skills/zh/skill-creator/scripts/generate_report.py +326 -0
  136. package/template/skills/zh/skill-creator/scripts/improve_description.py +248 -0
  137. package/template/skills/zh/skill-creator/scripts/package_skill.py +136 -0
  138. package/template/skills/zh/skill-creator/scripts/quick_validate.py +103 -0
  139. package/template/skills/zh/skill-creator/scripts/run_eval.py +310 -0
  140. package/template/skills/zh/skill-creator/scripts/run_loop.py +332 -0
  141. package/template/skills/zh/skill-creator/scripts/utils.py +47 -0
@@ -0,0 +1,233 @@
1
+ ---
2
+ name: tree-processing
3
+ description: Build hierarchical document trees and navigate to specific chapters or sections required by verification rules. Use when a rule targets a specific part of a document, when documents are too long for a single LLM context window, or when you need to find where a specific entity lives within a large document. Implements the "onion peeler" approach for chunking. Also use for documents over 100 pages where full-document processing is impractical.
4
+ ---
5
+
6
+ # 文档树处理
7
+
8
+ 绝大多数核查规则不需要整份文档。它们需要的是一个特定的章节、一张特定的表格、一段特定的披露。文档树就是你在大型文档中精准定位的地图。
9
+
10
+ ## 为什么需要文档树
11
+
12
+ 两个原因:
13
+
14
+ 1. **规则有作用域。** "第五章风险披露中应包含……"——你需要找到第五章,而不是通读 800 页年报。规则指向文档的特定位置,你的提取和判定也必须在这个位置上进行。
15
+
16
+ 2. **Worker LLM(执行模型)有上下文限制。** 一个 16K-32K 上下文窗口放不下一份完整的银行年报。你必须把内容缩窄到相关章节,才能喂给 Worker LLM。
17
+
18
+ 文档树同时解决这两个问题:它告诉你内容在哪里,让你只提取需要的部分。
19
+
20
+ ## 构建文档树
21
+
22
+ ### 第一步:发现文档结构
23
+
24
+ 在构建解析器之前,先浏览若干样本文档,找出结构规律。关注以下模式:
25
+
26
+ - **标题格式**:
27
+ - 中文监管文档常见:`第一章`、`第二章`……`第一节`、`第二节`……
28
+ - 中文金融报告常见:`一、`、`二、`……`(一)`、`(二)`……`1.`、`2.`……
29
+ - 英文文档:`Chapter X`、`Part X`、`Section X.X`
30
+ - 编号体系:`1.1.2`、`Article 3`、`(a)(i)`
31
+ - **视觉标记**:加粗文本、字号变大、分页符、横线分隔。这些在解析后的文本中可能表现为空行或特殊格式。
32
+ - **目录(TOC)**:大多数正式金融文档都有目录。目录就是文档自己提供的树结构,包含标题和页码。
33
+
34
+ 在这一步多花时间。你发现的模式决定了后续的解析器是一个简单的正则表达式还是一个复杂的解析流程。
35
+
36
+ ### 第二步:选择解析器
37
+
38
+ **如果模式一致**(监管文档通常如此):
39
+
40
+ 用正则表达式构建分割器。金融文档中常见的中文标题模式:
41
+
42
+ ```python
43
+ # 章标题:第一章、第二章……
44
+ r'^第[一二三四五六七八九十百千]+章\s'
45
+
46
+ # 节标题:第一节、第二节……
47
+ r'^第[一二三四五六七八九十百千]+节\s'
48
+
49
+ # 编号标题:一、二、三……
50
+ r'^[一二三四五六七八九十]+、'
51
+
52
+ # 子编号:(一)(二)(三)……
53
+ r'^([一二三四五六七八九十]+)'
54
+
55
+ # 数字编号:1.1、1.2.3……
56
+ r'^\d+\.\d+(\.\d+)*\s'
57
+ ```
58
+
59
+ 正则分割器速度快、结果确定、可靠性高。能用正则就用正则。
60
+
61
+ **如果模式不一致或缺失**:
62
+
63
+ 使用 LLM 辅助的楔入式分割(参见 `rule-extraction/references/chunking-strategies.md`,其中详述了滚动上下文窗口、K-token 引用、Levenshtein 模糊匹配等完整算法)。这种方法速度慢、消耗 API 调用,但能处理结构不清晰的文档。滚动窗口机制意味着即使非常大的无结构叶节点也可以增量分块。
64
+
65
+ **如果文档有目录**:
66
+
67
+ 优先解析目录。目录直接给出了树结构和页码,省去了你自己构建的工作:
68
+ - 从目录中提取标题文本、层级关系、页码。
69
+ - 用目录得到的结构去分割文档正文。
70
+ - 验证目录与正文是否一致(偶尔会有目录与实际内容不符的情况)。
71
+
72
+ ### 第三步:构建树
73
+
74
+ 文档树是一个简单的嵌套结构:
75
+
76
+ ```
77
+ 年度报告
78
+ ├── 第一章 公司概况(第1-20页)
79
+ │ ├── 第一节 基本信息
80
+ │ └── 第二节 主要业务
81
+ ├── 第二章 财务数据(第21-80页)
82
+ │ ├── 第一节 主要财务指标
83
+ │ │ ├── 一、资本充足率
84
+ │ │ └── 二、资产质量指标
85
+ │ ├── 第二节 资产负债表
86
+ │ └── 第三节 利润表
87
+ ├── 第三章 风险管理(第81-150页)
88
+ │ ├── 第一节 信用风险
89
+ │ ├── 第二节 市场风险
90
+ │ └── 第三节 操作风险
91
+ └── 附录
92
+ ├── 附录一 关联交易明细
93
+ └── 附录二 监管指标计算说明
94
+ ```
95
+
96
+ 每个节点存储:
97
+ - **标题文本**:节点的标题。
98
+ - **层级**:在树中的深度(章=1,节=2,条目=3……)。
99
+ - **位置**:在解析文本中的起止位置(字符偏移或行号)。
100
+ - **内容大小**:该节点内容的 token 数或字符数。这决定了能否直接喂给 Worker LLM。
101
+
102
+ ### 第四步:使用树
103
+
104
+ 当规则说"检查风险披露章节":
105
+
106
+ 1. **搜索树节点**:将规则的作用域描述与节点标题匹配。
107
+ - 精确匹配:"第三章"→ 找到标题为"第三章 风险管理"的节点。
108
+ - 语义匹配:"风险披露相关内容"→ 需要模糊匹配或 LLM 分类,找到内容与风险披露相关的节点。
109
+ - 关键词匹配:对标题做关键词搜索,如"风险"+"披露"。
110
+
111
+ 2. **提取内容**:获取该节点(及其子节点)的完整内容。
112
+
113
+ 3. **检查大小**:内容是否能放进 Worker LLM 的上下文窗口?
114
+ - 能放下 → 直接使用。
115
+ - 放不下 → 下探到子节点,找到规则所需的具体小节。
116
+
117
+ ## 洋葱剥皮法
118
+
119
+ 这是处理大型文档的核心策略:像剥洋葱一样,一层一层缩小范围,仅在超出大小限制时才进行下一层分割。
120
+
121
+ ### 具体操作
122
+
123
+ 1. **最外层**:整份文档。如果文档在上下文窗口内(罕见),直接使用。
124
+ 2. **第一层剥离**:按最高级标题(章)分割。大多数章节在 16K-32K 范围内。
125
+ 3. **第二层剥离**:如果某章仍然过大,按次级标题(节)分割。
126
+ 4. **继续剥离**:必要时继续,但通常两到三层就够了。
127
+
128
+ 关键原则:**不要预先把文档切碎**。只在某个节点太大时才继续分割。过度分割会丢失上下文——一个段落脱离了它所在的章节,可能会被误解。
129
+
130
+ ### 保留上下文链
131
+
132
+ 无论下探到多深,始终在提取的内容前附加父节点链:
133
+
134
+ ```
135
+ [文档标题] > 第二章 财务数据 > 第一节 主要财务指标 > 一、资本充足率
136
+
137
+ (以下是该节内容)
138
+ ```
139
+
140
+ 这让 Worker LLM 知道当前内容在文档中的位置,避免脱离上下文的误判。
141
+
142
+ ## 中文文档结构模式
143
+
144
+ 不同类型的金融文档有不同的结构习惯:
145
+
146
+ ### 监管文件(银保监会、证监会发文)
147
+ ```
148
+ 第一章 总则
149
+ 第一条、第二条、第三条……
150
+ 第二章 ……
151
+ 第X条……
152
+ 附则
153
+ ```
154
+ 特点:条文编号连续,跨章不重置。
155
+
156
+ ### 上市公司年度报告
157
+ ```
158
+ 第一节 重要提示、目录和释义
159
+ 第二节 公司简介和主要财务指标
160
+ 第三节 管理层讨论与分析
161
+ ……
162
+ 第十二节 备查文件目录
163
+ ```
164
+ 特点:以"节"为最高级别,内部用"一、二、三"编号。
165
+
166
+ ### 银行资本充足率报告
167
+ ```
168
+ 一、核心概况
169
+ 二、资本充足率
170
+ (一)资本构成
171
+ (二)风险加权资产
172
+ 三、杠杆率
173
+ ……
174
+ ```
175
+ 特点:用中文数字编号,层级较浅。
176
+
177
+ ### 贷款合同
178
+ ```
179
+ 第一条 借款金额
180
+ 第二条 借款期限
181
+ 第三条 借款利率
182
+ ……
183
+ 第X条 违约责任
184
+ ```
185
+ 特点:扁平结构,每条独立。
186
+
187
+ 根据文档类型选择对应的正则模式。
188
+
189
+ ## 全文→章节→实体 的渐窄管道
190
+
191
+ 这是从文档到可核查数据的标准漏斗:
192
+
193
+ 1. **全文层**:用文档树了解整体结构。知道什么在哪里。
194
+ 2. **章节层**:导航到规则指向的具体章节。提取其内容。
195
+ 3. **实体层**:在章节内容中,使用 `entity-extraction` 技能的方法提取具体实体(数字、日期、条款文本等)。
196
+
197
+ 对于 16K-32K 上下文窗口的 Worker LLM:
198
+ - 章节内容 + 提取提示词 + 输出格式说明 = 必须在上下文窗口内。
199
+ - 留出足够空间给模型的回复(通常 1K-2K token)。
200
+ - 如果章节仍然过大,继续在树中下探。
201
+
202
+ ## 上下文窗口管理
203
+
204
+ 为 Worker LLM 设计树导航时,做好 token 预算:
205
+
206
+ ```
207
+ 总上下文窗口:32,768 tokens
208
+ - 系统提示词: ~2,000 tokens
209
+ - 提取指令: ~500 tokens
210
+ - 输出格式说明: ~300 tokens
211
+ - 示例(可选): ~500 tokens
212
+ - 回复预留: ~2,000 tokens
213
+ ---
214
+ 可用于文档内容:~27,468 tokens(约 18,000-20,000 中文字符)
215
+ ```
216
+
217
+ 中文 token 密度约 1.5 字符/token(取决于分词器)。根据实际使用的模型调整估算。
218
+
219
+ ## 缓存和复用
220
+
221
+ 文档树构建一次,所有规则共享使用:
222
+
223
+ - 将树结构保存为 JSON 文件,存放在解析后文档旁边(如 `report.tree.json`)。
224
+ - 多条规则可能需要同一文档的不同章节。每条规则通过树直接导航到其所需章节,无需重新解析。
225
+ - 树结构文件应包含:节点标题、层级、起止位置、内容大小。不需要包含实际内容——内容从解析后的 markdown 文件中按位置提取。
226
+
227
+ ## 边缘情况
228
+
229
+ - **扁平文档**:有些文档没有层级结构(如短篇通知、单页证明)。把整份文档视为一个节点。如超出上下文窗口,使用 LLM 辅助分块。
230
+ - **深层嵌套**:部分法律文件嵌套达 6 层以上。构建所有层级,但对任一规则通常只需导航 2-3 层深。
231
+ - **跨章节引用**:"如第 1.2 节所定义"——提取时可能需要从多个树节点收集内容,合并后喂给 LLM。
232
+ - **附录和附件**:经常包含关键表格和数据(关联交易明细、监管指标计算等)。将其作为顶层节点纳入树中,不要遗漏。
233
+ - **目录与正文不一致**:偶尔目录列出的章节在正文中不存在(或反过来)。以正文为准,但记录差异。
@@ -0,0 +1,147 @@
1
+ ---
2
+ name: bootstrap-workspace
3
+ description: Initialize and configure a document verification workspace. Use when a developer user first opens this workspace, when .env needs configuration, or when the business scenario needs to be understood. Guides the coding agent through reading regulation documents, understanding the developer user's business context, configuring model tiers and thresholds, and establishing the working relationship. Covers initial conversation with developer user to scope the verification task, set expectations, and agree on checkpoints.
4
+ ---
5
+
6
+ # 工作空间初始化与业务场景配置
7
+
8
+ ## 你的角色定位
9
+
10
+ 你现在承担的不是单一岗位的职责。在传统的单据核查项目中,通常需要业务分析师(BA)梳理法规条文、提炼核查逻辑,需要提示词工程师将业务逻辑转化为模型可执行的指令,需要QA工程师设计测试用例、回归验证。你一个人要把这三个角色的事都做了。
11
+
12
+ 因此,初始化阶段不要急于写代码。先像BA一样搞清楚业务,像提示词工程师一样评估技术可行性,像QA一样思考怎么验证。
13
+
14
+ ## 首次进入工作空间的动作序列
15
+
16
+ ### 第一步:阅读法规文件
17
+
18
+ 扫描 `Rules/` 目录下的所有文件。这些是业务法规、监管文件、内部制度等原始材料。阅读时关注以下要素:
19
+
20
+ - 法规的适用范围(哪类单据、哪些业务场景)
21
+ - 核查要求的粒度(字段级别、逻辑级别、交叉验证级别)
22
+ - 是否存在条件分支(如:金额超过某阈值时需要额外核查)
23
+ - 法规之间是否存在交叉引用或冲突
24
+ - 时效性(是否有生效日期、过渡期条款)
25
+
26
+ ### 第二步:扫描样本文件
27
+
28
+ 检查 `Samples/` 目录。这些是开发者用户提供的单据样本,用于理解实际业务场景。注意:
29
+
30
+ - 单据类型和格式(PDF、图片、结构化数据)
31
+ - 字段分布和命名规律
32
+ - 样本覆盖的业务场景是否充分
33
+ - 是否包含正例(合规)和反例(违规)
34
+
35
+ ### 第三步:检查环境配置
36
+
37
+ 读取 `.env` 文件。如果不存在,后续需要引导开发者用户创建。如果已存在,检查各参数是否合理。
38
+
39
+ ## 与开发者用户的初始对话
40
+
41
+ 在动手之前,必须与开发者用户确认以下事项:
42
+
43
+ ### 核查范围界定
44
+
45
+ - 本次核查覆盖哪些法规?是全量还是部分条款?
46
+ - 针对哪些类型的单据?(发票、合同、报关单、银行回单等)
47
+ - 核查目标是合规审查、风险排查,还是数据提取?
48
+
49
+ ### 规则粒度协商
50
+
51
+ - 开发者用户期望的规则拆分粒度是什么?
52
+ - 举例:「发票金额核查」是一条规则,还是要拆成「发票金额与合同金额一致性」「发票金额与付款金额一致性」两条规则?
53
+ - 粒度越细,准确率越高,但开发和维护成本也越高
54
+
55
+ ### 期望值与检查点
56
+
57
+ - 开发者用户对准确率的期望是多少?(建议初始目标 85%+,逐步优化到 95%+)
58
+ - 哪些规则是高优先级的?(先做核心规则,再扩展边缘规则)
59
+ - 约定检查点:每完成 N 条规则的技能编写后,暂停汇报进展
60
+
61
+ ## .env 参数配置指南
62
+
63
+ 以下是工作空间的核心配置参数:
64
+
65
+ ### 模型层级配置
66
+
67
+ ```
68
+ TIER1_MODEL= # 最强模型,用于复杂判断(如 claude-sonnet-4-20250514)
69
+ TIER2_MODEL= # 中等模型,用于结构化提取
70
+ TIER3_MODEL= # 轻量模型,用于格式校验和简单分类
71
+ TIER4_MODEL= # 最廉价模型,用于文本预处理
72
+ ```
73
+
74
+ 模型选择原则:从最便宜的开始尝试,只有当准确率不达标时才升级到更高层级。
75
+
76
+ ### 准确率阈值
77
+
78
+ ```
79
+ SKILL_ACCURACY=0.90 # 技能(Skill)达到此准确率后方可蒸馏为工作流
80
+ WORKFLOW_ACCURACY=0.85 # 工作流(Workflow)的最低可接受准确率
81
+ ```
82
+
83
+ `SKILL_ACCURACY` 必须高于 `WORKFLOW_ACCURACY`,因为蒸馏过程必然有损耗。
84
+
85
+ ### 监控与迭代参数
86
+
87
+ ```
88
+ MONITOR_FREQUENCY=mid # 质量监控频率:high(全量)/ mid(抽样50%)/ low(抽样10%)
89
+ MAX_ITERATIONS=10 # 单条规则的最大迭代轮次,防止无限循环
90
+ ```
91
+
92
+ ### API 配置
93
+
94
+ ```
95
+ API_BASE_URL= # LLM API 的基础地址(如 SiliconFlow)
96
+ API_KEY= # API 密钥
97
+ ```
98
+
99
+ ## 工作空间目录结构搭建
100
+
101
+ 初始化时需要创建以下目录(如尚不存在):
102
+
103
+ ```
104
+ logs/ # 所有测试、迭代、质控的日志
105
+ evolution/ # 演化循环日志
106
+ qc/ # 质量监控日志
107
+ workflows/ # 蒸馏后的生产工作流
108
+ prompts/ # 工作流使用的提示词模板
109
+ rule-skills/ # 每条规则对应的技能文件夹
110
+ versions.json # 版本清单(工作空间根目录)
111
+ ```
112
+
113
+ 创建 `versions.json` 的初始内容:
114
+
115
+ ```json
116
+ {
117
+ "workspace_version": "1.0.0",
118
+ "initialized_at": "<当前时间戳>",
119
+ "skills": {},
120
+ "workflows": {},
121
+ "last_updated": "<当前时间戳>"
122
+ }
123
+ ```
124
+
125
+ ## 何时需要重新初始化
126
+
127
+ 以下情况需要重新运行本技能:
128
+
129
+ - 法规文件发生重大更新(不是小修小补,而是新增法规或废止旧法规)
130
+ - 业务场景发生根本变化(如从发票核查转为合同核查)
131
+ - `.env` 中的模型配置发生变更(更换了 API 供应商或模型版本)
132
+ - 开发者用户明确要求重置工作空间
133
+ - 工作空间长时间未使用后重新启动(需要重新理解上下文)
134
+
135
+ 重新初始化时,不要删除已有的 `rule-skills/` 和 `workflows/`,而是先评估哪些可以保留、哪些需要更新。
136
+
137
+ ## 初始化完成的标志
138
+
139
+ 当以下条件全部满足时,初始化完成:
140
+
141
+ 1. `Rules/` 目录已阅读,规则范围已明确
142
+ 2. `Samples/` 目录已扫描,业务场景已理解
143
+ 3. `.env` 已配置完毕,参数合理
144
+ 4. 与开发者用户就范围、粒度、期望值达成一致
145
+ 5. 工作空间目录结构已创建
146
+ 6. `versions.json` 已初始化
147
+ 7. 可以开始进入规则提取阶段
@@ -0,0 +1,281 @@
1
+ ---
2
+ name: dashboard-reporting
3
+ description: Generate HTML dashboards for developer users to visualize verification results, system progress, and quality metrics. Use when a testing round completes, when production batches finish processing, when the developer user wants to see the system's status, or at any point where visual reporting would help communicate progress. Dashboards should be self-contained HTML files that can be opened by double-clicking. Also use when the developer user asks about results, accuracy, or system health.
4
+ ---
5
+
6
+ # 可视化仪表盘生成
7
+
8
+ ## 仪表盘的定位
9
+
10
+ 仪表盘是开发者用户了解系统运行状态的唯一窗口。开发者用户不应该需要打开 JSON 文件、翻阅日志目录、或者向你询问「现在准确率多少了」。一切关键信息,打开仪表盘就能看到。
11
+
12
+ 仪表盘生成是一个服务性技能——在其他技能完成工作后,由你主动生成或由开发者用户按需要求生成。
13
+
14
+ ## 三类仪表盘
15
+
16
+ ### 一、核查结果仪表盘(Results Dashboard)
17
+
18
+ 展示某一批次或某一时间段的单据核查结果。
19
+
20
+ #### 必须包含的内容
21
+
22
+ **总览区域**:
23
+ - 本批次处理的单据总数
24
+ - 各规则的通过率、不通过率、无法核查率
25
+ - 高置信度/中置信度/低置信度的分布
26
+
27
+ **按规则明细**:
28
+ - 每条规则的独立准确率
29
+ - 每条规则最常见的不通过原因(Top 3)
30
+ - 每条规则的平均置信度
31
+
32
+ **失败案例清单**:
33
+ - 判定为「不通过」的案例列表
34
+ - 每个案例的关键字段摘要、不通过原因、置信度
35
+ - 可按规则、按置信度、按不通过原因筛选
36
+
37
+ **置信度分析**:
38
+ - 置信度分布直方图
39
+ - 低置信度案例的高亮标注
40
+ - 置信度与实际准确率的校准分析(如有质控数据)
41
+
42
+ ### 二、系统进展仪表盘(Progress Dashboard)
43
+
44
+ 展示整个核查系统的建设进度,覆盖从规则提取到生产部署的全生命周期。
45
+
46
+ #### 必须包含的内容
47
+
48
+ **生命周期总览**:
49
+ - 规则总数及各阶段分布(已提取、技能已编写、技能已测试、工作流已蒸馏、工作流已测试、已投产)
50
+ - 用进度条或甘特图形式展示
51
+
52
+ **演化循环时间线**:
53
+ - 每条规则的迭代轮次和当前准确率
54
+ - 从第一轮到最新一轮的准确率变化趋势
55
+ - 标注关键事件(如「达到阈值」「触发回退」「开发者用户确认」)
56
+
57
+ **阻塞事项**:
58
+ - 达到 `MAX_ITERATIONS` 仍未达标的规则
59
+ - 等待开发者用户确认的模糊事项
60
+ - 缺少测试样本的规则
61
+
62
+ ### 三、质量监控仪表盘(Quality Dashboard)
63
+
64
+ 展示生产环境中的质量指标趋势。
65
+
66
+ #### 必须包含的内容
67
+
68
+ **准确率趋势**:
69
+ - 每条规则的准确率随时间的变化曲线
70
+ - 阈值线的标注(`WORKFLOW_ACCURACY`)
71
+ - 低于阈值的时间段高亮
72
+
73
+ **抽样率变化**:
74
+ - 各规则当前的质控抽样比例
75
+ - 抽样比例的变化历史(体现从全量到抽样的信心积累过程)
76
+
77
+ **成本追踪**:
78
+ - 每条规则的平均核查成本
79
+ - 按模型层级的成本分布
80
+ - 总成本趋势
81
+
82
+ **异常警报**:
83
+ - 准确率下降的规则(红色标注)
84
+ - 置信度漂移的规则(黄色标注)
85
+ - 成本异常的规则
86
+
87
+ ## 用户反馈收集
88
+
89
+ 每个仪表盘必须内置用户反馈机制,让用户可以直接在核查结果上报告错误和添加评论。用户反馈是系统中最有价值的数据来源,不是可选功能。
90
+
91
+ ### 开发者用户反馈
92
+
93
+ 开发者用户能看到完整的结果明细。他们的反馈界面应支持:
94
+ - **字段级修正**:点击某个提取值,输入正确的值。
95
+ - **结果覆盖**:将通过改为不通过(或反之),并附理由。
96
+ - **规则重评估请求**:标记某条结果,要求用不同方式重新处理。
97
+ - **自由评论**:对任何结果添加文本注释。
98
+
99
+ ### 终端用户反馈
100
+
101
+ 核查应用的终端用户看到的是简化结果。他们的反馈界面应支持:
102
+ - **一键标记错误**:一次点击即可报告他们认为不正确的结果。
103
+ - **添加评论**:简要文字说明他们认为哪里有误。
104
+ - **严重程度**:这个错误的影响有多大?(严重 / 重要 / 轻微)
105
+
106
+ ### 反馈即基准真值
107
+
108
+ 用户报告的错误即基准真值。它们的优先级高于编程智能体的判断和 Worker LLM 的输出。反馈数据流转如下:
109
+
110
+ 1. 用户在仪表盘上提交反馈 → 存储为结构化记录。
111
+ 2. 记录格式:`{result_id, trace_id, reporter_role, feedback_type, original_result, corrected_value, comment, timestamp}`。
112
+ 3. 反馈记录作为已确认的失败案例,输入 `evolution-loop` 演化循环。
113
+ 4. 仪表盘展示反馈趋势:修正率随时间变化、最常被报告的问题、用户修正率最高的规则。
114
+
115
+ 例如:信贷审批场景中,业务人员发现某笔贷款的担保物估值被提取错误,一键标记后,该修正自动进入下一轮演化循环的失败案例池,驱动规则改进。
116
+
117
+ 反馈收集机制与仪表盘生成是一体的,不是独立功能。每个生成的 HTML 仪表盘都应包含反馈 UI,即使最初只是将反馈写入本地 JSON 文件,由编程智能体在下次迭代时读取。
118
+
119
+ ## 技术规范
120
+
121
+ ### 自包含 HTML
122
+
123
+ 仪表盘必须是单个 HTML 文件,不依赖任何外部资源:
124
+
125
+ - CSS 内联(`<style>` 标签)
126
+ - JavaScript 内联(`<script>` 标签)
127
+ - 不引用任何 CDN 资源
128
+ - 不需要启动任何服务器
129
+ - 双击文件即可在浏览器中打开
130
+
131
+ ### 不依赖第三方库
132
+
133
+ 所有图表和可视化使用原生 HTML/CSS/JavaScript 实现:
134
+
135
+ - 进度条:CSS `width` 百分比
136
+ - 柱状图/条形图:CSS Flexbox 或 Grid + `div` 高度百分比
137
+ - 折线图:SVG `<polyline>` 或 `<path>`
138
+ - 饼图:SVG `<circle>` 的 `stroke-dasharray`
139
+ - 表格:原生 `<table>` + CSS 样式
140
+
141
+ 不要引入 Chart.js、D3.js、ECharts 等库。保持零依赖。
142
+
143
+ ### 响应式布局
144
+
145
+ 仪表盘应在不同屏幕尺寸下可用:
146
+
147
+ - 桌面端(1200px+):多列布局
148
+ - 平板端(768px - 1200px):两列布局
149
+ - 手机端(< 768px):单列布局
150
+
151
+ 使用 CSS Media Query 实现响应式。
152
+
153
+ ### 深色/浅色模式
154
+
155
+ 支持系统级的深色/浅色模式切换:
156
+
157
+ ```css
158
+ @media (prefers-color-scheme: dark) {
159
+ :root {
160
+ --bg-primary: #1a1a2e;
161
+ --bg-secondary: #16213e;
162
+ --text-primary: #e8e8e8;
163
+ --text-secondary: #a0a0a0;
164
+ --accent-green: #4ade80;
165
+ --accent-red: #f87171;
166
+ --accent-yellow: #fbbf24;
167
+ }
168
+ }
169
+
170
+ @media (prefers-color-scheme: light) {
171
+ :root {
172
+ --bg-primary: #ffffff;
173
+ --bg-secondary: #f3f4f6;
174
+ --text-primary: #1f2937;
175
+ --text-secondary: #6b7280;
176
+ --accent-green: #16a34a;
177
+ --accent-red: #dc2626;
178
+ --accent-yellow: #d97706;
179
+ }
180
+ }
181
+ ```
182
+
183
+ ## 数据来源
184
+
185
+ 仪表盘的数据从以下位置读取(由生成脚本在生成时内嵌到 HTML 中):
186
+
187
+ | 数据类型 | 来源路径 |
188
+ |---------|---------|
189
+ | 核查结果 | `Output/*/results.json` |
190
+ | 质控评审 | `logs/qc/reviews/*.json` |
191
+ | 演化日志 | `logs/evolution/*/iteration_*.json` |
192
+ | 版本信息 | `versions.json` |
193
+ | 准确率趋势 | `logs/qc/trends.json` |
194
+ | 规则目录 | `rule-catalog.json` |
195
+ | 成本数据 | 从工作流日志中汇总 |
196
+
197
+ 数据以 JavaScript 变量的形式嵌入到 HTML 文件头部:
198
+
199
+ ```html
200
+ <script>
201
+ const DASHBOARD_DATA = {
202
+ generated_at: "2025-04-01T20:00:00Z",
203
+ batch_id: "BATCH-2025-04-01",
204
+ results: [...],
205
+ qc_reviews: [...],
206
+ trends: {...}
207
+ };
208
+ </script>
209
+ ```
210
+
211
+ ## 生成触发时机
212
+
213
+ ### 自动触发
214
+
215
+ - 每轮测试完成后(演化循环中)→ 生成进展仪表盘
216
+ - 每批次处理完成后 → 生成结果仪表盘
217
+ - 每次质控评审完成后 → 更新质量监控仪表盘
218
+
219
+ ### 手动触发
220
+
221
+ 开发者用户随时可以要求生成仪表盘。常见的请求方式:
222
+ - 「给我看一下现在的进展」
223
+ - 「生成一下结果报告」
224
+ - 「准确率怎么样了」
225
+
226
+ 无论请求如何措辞,都应生成对应类型的仪表盘。
227
+
228
+ ## 仪表盘文件命名与存放
229
+
230
+ ```
231
+ dashboards/
232
+ ├── results_2025-04-01_batch01.html
233
+ ├── progress_2025-04-01.html
234
+ ├── quality_2025-04-01.html
235
+ └── latest/
236
+ ├── results.html # 最新结果仪表盘的软链接/副本
237
+ ├── progress.html # 最新进展仪表盘的软链接/副本
238
+ └── quality.html # 最新质量仪表盘的软链接/副本
239
+ ```
240
+
241
+ `latest/` 目录下始终保留最新版本,方便开发者用户快速访问。
242
+
243
+ ## 设计原则
244
+
245
+ ### 先总后分
246
+
247
+ 仪表盘打开后,开发者用户首先看到的是一句话总结:
248
+
249
+ ```
250
+ 本批次共处理 50 份单据,综合准确率 92.3%,全部规则均达标。
251
+ ```
252
+
253
+ 或者:
254
+
255
+ ```
256
+ ⚠ 本批次 R003 规则准确率 (78%) 低于阈值 (85%),已触发演化循环。
257
+ ```
258
+
259
+ 总结之后再展开细节。
260
+
261
+ ### 色彩编码
262
+
263
+ - 绿色:达标、通过、正常
264
+ - 黄色:接近阈值、需关注、中等置信度
265
+ - 红色:低于阈值、不通过、异常
266
+
267
+ ### 可操作性
268
+
269
+ 仪表盘不只是展示数据,还应提供操作建议:
270
+
271
+ - 「R003 建议重新运行演化循环」
272
+ - 「R001 已连续 5 个批次达标,建议将抽样比例从 50% 降至 20%」
273
+ - 「3 条模糊规则待确认,请查看详情」
274
+
275
+ ### 生成时间戳
276
+
277
+ 每个仪表盘底部显示生成时间,避免开发者用户看到过时的数据而不自知:
278
+
279
+ ```
280
+ 仪表盘生成时间:2025-04-01 20:00:00 | 数据范围:2025-04-01 批次 #01
281
+ ```