dsh-data-domain-knowledge 0.1.0-alpha.2 → 0.1.0-alpha.4

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 (180) hide show
  1. package/README.md +147 -19
  2. package/cordis.patch.yml +25 -10
  3. package/lib/client.js +6400 -3326
  4. package/lib/doc-page.js +7761 -0
  5. package/lib/types/convert/host.d.ts.map +1 -1
  6. package/lib/types/convert/host.js +63 -11
  7. package/lib/types/convert/host.js.map +1 -1
  8. package/lib/types/convert/ingest.d.ts +7 -4
  9. package/lib/types/convert/ingest.d.ts.map +1 -1
  10. package/lib/types/convert/ingest.js +52 -14
  11. package/lib/types/convert/ingest.js.map +1 -1
  12. package/lib/types/convert/types.d.ts +2 -2
  13. package/lib/types/convert/types.d.ts.map +1 -1
  14. package/lib/types/convert/types.js +2 -2
  15. package/lib/types/convert/types.js.map +1 -1
  16. package/lib/types/diagnosis/cards.d.ts +8 -7
  17. package/lib/types/diagnosis/cards.d.ts.map +1 -1
  18. package/lib/types/diagnosis/cards.js +119 -49
  19. package/lib/types/diagnosis/cards.js.map +1 -1
  20. package/lib/types/diagnosis/run.d.ts +57 -0
  21. package/lib/types/diagnosis/run.d.ts.map +1 -0
  22. package/lib/types/diagnosis/run.js +245 -0
  23. package/lib/types/diagnosis/run.js.map +1 -0
  24. package/lib/types/diagnosis/schema.d.ts +25 -2
  25. package/lib/types/diagnosis/schema.d.ts.map +1 -1
  26. package/lib/types/diagnosis/schema.js +64 -25
  27. package/lib/types/diagnosis/schema.js.map +1 -1
  28. package/lib/types/diagnosis/seed-source.d.ts +17 -2
  29. package/lib/types/diagnosis/seed-source.d.ts.map +1 -1
  30. package/lib/types/diagnosis/seed-source.js +19 -2
  31. package/lib/types/diagnosis/seed-source.js.map +1 -1
  32. package/lib/types/diagnosis/seed.d.ts +32 -42
  33. package/lib/types/diagnosis/seed.d.ts.map +1 -1
  34. package/lib/types/diagnosis/seed.js +187 -51
  35. package/lib/types/diagnosis/seed.js.map +1 -1
  36. package/lib/types/diagnosis/store.d.ts +95 -25
  37. package/lib/types/diagnosis/store.d.ts.map +1 -1
  38. package/lib/types/diagnosis/store.js +297 -166
  39. package/lib/types/diagnosis/store.js.map +1 -1
  40. package/lib/types/diagnosis/types.d.ts +168 -16
  41. package/lib/types/diagnosis/types.d.ts.map +1 -1
  42. package/lib/types/diagnosis/types.js +1 -1
  43. package/lib/types/diagnosis/types.js.map +1 -1
  44. package/lib/types/document-page.d.ts +39 -0
  45. package/lib/types/document-page.d.ts.map +1 -0
  46. package/lib/types/document-page.js +43 -0
  47. package/lib/types/document-page.js.map +1 -0
  48. package/lib/types/extract-model.d.ts +67 -27
  49. package/lib/types/extract-model.d.ts.map +1 -1
  50. package/lib/types/extract-model.js +225 -97
  51. package/lib/types/extract-model.js.map +1 -1
  52. package/lib/types/extract.d.ts +16 -0
  53. package/lib/types/extract.d.ts.map +1 -1
  54. package/lib/types/extract.js +19 -2
  55. package/lib/types/extract.js.map +1 -1
  56. package/lib/types/fs-atomic.d.ts +11 -0
  57. package/lib/types/fs-atomic.d.ts.map +1 -0
  58. package/lib/types/fs-atomic.js +41 -0
  59. package/lib/types/fs-atomic.js.map +1 -0
  60. package/lib/types/index.d.ts.map +1 -1
  61. package/lib/types/index.js +466 -63
  62. package/lib/types/index.js.map +1 -1
  63. package/lib/types/intent/types.js +1 -1
  64. package/lib/types/intent/types.js.map +1 -1
  65. package/lib/types/knowledge-bases.d.ts +23 -12
  66. package/lib/types/knowledge-bases.d.ts.map +1 -1
  67. package/lib/types/knowledge-bases.js +37 -44
  68. package/lib/types/knowledge-bases.js.map +1 -1
  69. package/lib/types/layout.d.ts +3 -3
  70. package/lib/types/layout.d.ts.map +1 -1
  71. package/lib/types/layout.js +4 -4
  72. package/lib/types/layout.js.map +1 -1
  73. package/lib/types/migrate.d.ts +1 -1
  74. package/lib/types/migrate.js +2 -2
  75. package/lib/types/migrate.js.map +1 -1
  76. package/lib/types/model-text.d.ts +99 -0
  77. package/lib/types/model-text.d.ts.map +1 -0
  78. package/lib/types/model-text.js +103 -0
  79. package/lib/types/model-text.js.map +1 -0
  80. package/lib/types/present.d.ts +239 -0
  81. package/lib/types/present.d.ts.map +1 -0
  82. package/lib/types/present.js +255 -0
  83. package/lib/types/present.js.map +1 -0
  84. package/lib/types/recall-rank.d.ts +37 -0
  85. package/lib/types/recall-rank.d.ts.map +1 -1
  86. package/lib/types/recall-rank.js +41 -1
  87. package/lib/types/recall-rank.js.map +1 -1
  88. package/lib/types/runtime.d.ts +564 -31
  89. package/lib/types/runtime.d.ts.map +1 -1
  90. package/lib/types/runtime.js +2645 -292
  91. package/lib/types/runtime.js.map +1 -1
  92. package/lib/types/settings-schema.d.ts +4 -2
  93. package/lib/types/settings-schema.d.ts.map +1 -1
  94. package/lib/types/settings-schema.js +2 -0
  95. package/lib/types/settings-schema.js.map +1 -1
  96. package/lib/types/source-images.d.ts +118 -0
  97. package/lib/types/source-images.d.ts.map +1 -0
  98. package/lib/types/source-images.js +288 -0
  99. package/lib/types/source-images.js.map +1 -0
  100. package/lib/types/types.d.ts +356 -28
  101. package/lib/types/types.d.ts.map +1 -1
  102. package/lib/types/types.js +112 -18
  103. package/lib/types/types.js.map +1 -1
  104. package/lib/types/wiki-finalize.d.ts +140 -0
  105. package/lib/types/wiki-finalize.d.ts.map +1 -0
  106. package/lib/types/wiki-finalize.js +269 -0
  107. package/lib/types/wiki-finalize.js.map +1 -0
  108. package/lib/types/wiki-types.d.ts +10 -2
  109. package/lib/types/wiki-types.d.ts.map +1 -1
  110. package/lib/types/wiki-types.js +27 -30
  111. package/lib/types/wiki-types.js.map +1 -1
  112. package/package.json +4 -3
  113. package/preset/tita-data-agent/agent.cordis.yml +25 -10
  114. package/src/client/DirectoryPicker.tsx +12 -12
  115. package/src/client/DrawerSection.tsx +18 -0
  116. package/src/client/InfoHint.tsx +21 -8
  117. package/src/client/IntentTab.tsx +20 -26
  118. package/src/client/KnowledgeBaseTab.tsx +458 -158
  119. package/src/client/KnowledgePanel.tsx +44 -10
  120. package/src/client/KnowledgeStepRail.tsx +3 -0
  121. package/src/client/KnowledgeToolRow.tsx +331 -0
  122. package/src/client/NodeSettings.tsx +20 -22
  123. package/src/client/PreviewSections.tsx +178 -43
  124. package/src/client/RecallPanel.tsx +418 -127
  125. package/src/client/TypeDefinitionDrawer.tsx +154 -54
  126. package/src/client/WikiCardReview.tsx +266 -0
  127. package/src/client/WikiFlowCard.tsx +57 -95
  128. package/src/client/WikiTypeEditor.tsx +197 -95
  129. package/src/client/arch/AgentArchitectureGraph.tsx +30 -14
  130. package/src/client/arch/NodeLogicPanel.tsx +6 -3
  131. package/src/client/arch/model.ts +164 -26
  132. package/src/client/architecture.css +25 -10
  133. package/src/client/architecture.tsx +66 -41
  134. package/src/client/asset-images.ts +125 -0
  135. package/src/client/attribution/AttributionGraph.tsx +481 -34
  136. package/src/client/attribution/AttributionTab.tsx +501 -106
  137. package/src/client/attribution/CaseView.tsx +9 -14
  138. package/src/client/attribution/GraphStage.tsx +25 -18
  139. package/src/client/attribution/RunView.tsx +27 -9
  140. package/src/client/attribution/StageChrome.tsx +280 -140
  141. package/src/client/attribution/graph-options.ts +611 -47
  142. package/src/client/attribution/model.ts +559 -30
  143. package/src/client/convert/ConvertPanel.tsx +36 -4
  144. package/src/client/doc-page.css +134 -0
  145. package/src/client/doc-page.tsx +242 -0
  146. package/src/client/index.ts +18 -0
  147. package/src/client/panel-state.ts +105 -0
  148. package/src/client/problem-domains.ts +1 -1
  149. package/src/client/request.ts +36 -0
  150. package/src/client/styles.css +397 -54
  151. package/src/client/useFitScale.ts +15 -2
  152. package/src/client/wiki-type-groups.ts +86 -0
  153. package/src/convert/host.ts +68 -9
  154. package/src/convert/ingest.ts +61 -18
  155. package/src/convert/types.ts +2 -2
  156. package/src/diagnosis/cards.ts +120 -50
  157. package/src/diagnosis/run.ts +251 -0
  158. package/src/diagnosis/schema.ts +67 -26
  159. package/src/diagnosis/seed-source.ts +29 -4
  160. package/src/diagnosis/seed.ts +187 -85
  161. package/src/diagnosis/store.ts +310 -173
  162. package/src/diagnosis/types.ts +181 -16
  163. package/src/document-page.ts +51 -0
  164. package/src/extract-model.ts +254 -99
  165. package/src/extract.ts +35 -3
  166. package/src/fs-atomic.ts +41 -0
  167. package/src/index.ts +499 -62
  168. package/src/intent/types.ts +1 -1
  169. package/src/knowledge-bases.ts +50 -49
  170. package/src/layout.ts +4 -4
  171. package/src/migrate.ts +2 -2
  172. package/src/model-text.ts +126 -0
  173. package/src/present.ts +367 -0
  174. package/src/recall-rank.ts +57 -2
  175. package/src/runtime.ts +2802 -293
  176. package/src/settings-schema.ts +2 -0
  177. package/src/source-images.ts +326 -0
  178. package/src/types.ts +446 -45
  179. package/src/wiki-finalize.ts +310 -0
  180. package/src/wiki-types.ts +28 -32
@@ -1,120 +1,93 @@
1
1
  /**
2
- * 「Wiki 抽取流程」卡片(issue 0024 的流程说明)。
2
+ * 「Wiki 抽取流程」卡片(issue 0024;0049 重写文案)。
3
3
  *
4
- * 它把"原文件 → Wiki 卡片"这段**单文档抽取**画成四个阶段,并明确标出每一段的
5
- * 实现状态——**没有实现的不画成已实现**:这张图是给人看的契约,不是宣传。
4
+ * 它把「原文件 → Wiki 卡片」画成四段。**这张图是给人看的契约**,所以 0049 做了三件
5
+ * 与内容有关的事:
6
6
  *
7
- * 与腾讯 WeKnora 四阶段 Map-Reduce 的对应关系写在每一段的"对应 WeKnora"一行里:
8
- * 我们是**单文档**抽取,所以它的「批内 Taxonomy 规划」退化成「按库复用已有类型」,
9
- * 「Pass 1..N 分块引文」在文档不长时与候选抽取合并成一次调用。
7
+ * 1. **段名改成动作**(抽取实体 / 合并实体 / 写入 wiki / 编译结果)。原来的
8
+ * `Pass 0` / `归一` / `落卡` / `Finalize` 是实现的内部词,人得先学一遍才知道在说什么。
9
+ * 2. **撤掉状态徽标**(已实现 / 部分实现 / 待实现)。四段都实现了,徽标只剩下噪音;
10
+ * 哪一格真的没做完,由「架构」那一页统一说,不在这一张卡上重复一遍。
11
+ * 3. **删掉实现细节**(指纹、slug 命名空间、图上的边叫什么、WeKnora 的四段对应),
12
+ * 只留「这一段吃什么、吐什么、做哪几件事」。要看细节有 README 与架构页。
10
13
  */
11
14
 
12
15
  import type { ReactNode } from 'react'
13
16
  import {
14
17
  ArrowDown, Box, Check, FileText, GitBranch, Layers3, RefreshCw, ShieldCheck, Sparkles, Wrench,
15
18
  } from '@tita-data-agent/ui/icons'
16
- import { Badge, Card, cn } from '@tita-data-agent/ui/components'
19
+ import { Card, cn } from '@tita-data-agent/ui/components'
17
20
  import { styles } from './styles.ts'
18
21
 
19
- type StageStatus = 'done' | 'partial' | 'todo'
20
-
21
22
  interface Stage {
22
23
  id: string
23
24
  icon: typeof FileText
24
25
  tone: 'blue' | 'violet' | 'green' | 'amber'
25
- pass: string
26
- title: string
26
+ /** 段名:**动词**,不是实现里的 pass 名。 */
27
+ name: string
27
28
  /** 这一段的输入 → 输出。 */
28
29
  io: string
29
- /** 这一段做什么(要点,`**…**` 会被渲染成粗体)。 */
30
+ /** 这一段做哪几件事(`**…**` 会被渲染成粗体)。 */
30
31
  body: string[]
31
- /** 是否调用模型。 */
32
- llm: boolean
33
- /** 与 WeKnora 四阶段的对应关系。 */
34
- weknora: string
35
- status: StageStatus
36
- statusNote: string
32
+ /** 这一段的模型参与情况,一句话。 */
33
+ model: string
37
34
  }
38
35
 
39
36
  const STAGES: Stage[] = [
40
37
  {
41
- id: 'candidates',
38
+ id: 'extract',
42
39
  icon: Sparkles,
43
40
  tone: 'violet',
44
- pass: 'Pass 0',
45
- title: '候选抽取:实体 / 概念 / 关系',
46
- io: '一个 SourceRaw → 候选项列表',
41
+ name: '抽取实体',
42
+ io: '一份原始文档 → 实体清单',
47
43
  body: [
48
- '每个候选项的身份是**三件事一起定**:类型 + 名称(slug)+ 证据分块。类型与名称必须同时决定,因为 slug 的命名空间就是 `<类型>/<名称>`。',
49
- '关系抽两处:卡片之间的 wiki 链接(正文里的 `[[类型/名称|标题]]`),以及实体之间的**图谱边**(`03_compiled/knowledge_graph.json`,目前只有 `supported_by` 溯源边)。',
50
- '**slug 稳定性**:文档里提到的实体如果已有对应页面,复用它的 slug,不要另起一个近义 slug。',
44
+ '模型按卡片类型的**必填小节与字段**写正文,并给一句话摘要。',
45
+ '规则同时跑一遍:抓小节标题、正文里的 `[[链接]]`,以及文档自己声明的关系。',
46
+ '模型不可用时整段退回规则抽取,并在报告里说清原因 —— 不静默降级。',
51
47
  ],
52
- llm: false,
53
- weknora: '对应它的 Pass 0(抽 entities + concepts,强制复用已有 slug)。',
54
- status: 'partial',
55
- statusNote: '已实现**规则抽取**(正文标题、[[链接]]、frontmatter 的 candidates / entities / concepts / relations),编译时自动跑、增量跳过没变的来源;模型驱动的候选工具(propose_wiki_cards)还没有 —— 所以「抽什么」目前由文档结构决定,不是由模型判断。',
48
+ model: '模型 + 规则',
56
49
  },
57
50
  {
58
- id: 'normalize',
51
+ id: 'merge',
59
52
  icon: GitBranch,
60
53
  tone: 'blue',
61
- pass: '归一',
62
- title: '与已有 Wiki 合并:同指一物就复用',
63
- io: '候选项列表 + 库内已有卡片 → 去重后的落点',
54
+ name: '合并实体',
55
+ io: '实体清单 + 库里已有的卡片 → 落点',
64
56
  body: [
65
- '**判重按 slug 与别名,不按标题字符串**:标题可以改,slug 是稳定标识。',
66
- '核心原则是「**相关 ≠ 相同**」——相关的话题不要合并,只有同指一物才合并。',
67
- '命中已有 → 记下"增量合并到该页";没命中 → 记下"新建"。',
68
- 'WeKnora 的「批内 Taxonomy 规划」在单文档场景退化成**库内复用**:优先沿用已有的类型与命名,不为了一个新页面另起一套。',
57
+ '**同指一物就并进已有卡片**,不新建。判据是类型 + 名称 / 标题 / 别名。',
58
+ '模型再判一次语义:同一件东西换个说法,不该落成两张卡。',
59
+ '**相关 ≠ 相同**:只是相关的话题不合并,关系另走图谱。',
69
60
  ],
70
- llm: false,
71
- weknora: '对应它的 Taxonomy 规划 + WikiDeduplicationPrompt(related ≠ same);批内统筹改为库内复用。',
72
- status: 'done',
73
- statusNote: '已实现:按 entityId / title / metadata.aliases 建别名索引判重,同指一物就合并 source_refs(重复的出处不会写第二遍),关系候选不参与合并。',
61
+ model: '模型 + 规则',
74
62
  },
75
63
  {
76
64
  id: 'write',
77
65
  icon: FileText,
78
66
  tone: 'green',
79
- pass: '落卡',
80
- title: '写卡片:命中的增量合并,没命中的按模板新建',
67
+ name: '写入 wiki',
81
68
  io: '落点 + 证据 → 02_wiki/<类型>/<id>.md',
82
69
  body: [
83
- '必须带 `source_refs`,且每个来源都要真实存在(写了不存在的来源会被直接拒绝)。',
84
- '必填小节与必填字段按**类型 schema** 填;缺了要么被拒(严格模式)要么标成待补(report 模式)。',
85
- '新建的卡片是 `unreviewed`,不自动当成已审核的知识。',
86
- '正文必须**严格接地**:只写证据里有的东西,去重,不写自链接。',
70
+ '**直接入库**,状态是未审核 —— 入库在前、审核在后,不需要谁先确认。',
71
+ '缺必填小节或字段也照写,只在卡片上标成「待补」。',
72
+ '每个来源都必须真实存在;**正文只读**,编译追加,人只能加备注。',
87
73
  ],
88
- llm: true,
89
- weknora: '对应它的 Reduce:按 slug 增量合并页面,提示词硬约束接地 / 禁幻觉 / 去重 / 禁自链接。',
90
- status: 'done',
91
- statusNote: '已实现:write_knowledge_card + 类型 schema 与三层校验(0024)',
74
+ model: '编译落盘',
92
75
  },
93
76
  {
94
- id: 'finalize',
77
+ id: 'compile',
95
78
  icon: Wrench,
96
79
  tone: 'amber',
97
- pass: 'Finalize',
98
- title: '收尾:索引、死链、交叉链接、质检',
99
- io: '02_wiki → wikiNotes / 图谱 / 待补清单',
80
+ name: '编译结果',
81
+ io: '卡片 → 召回单元 / 图谱 / 索引页',
100
82
  body: [
101
- '重建索引页、清理死链、补交叉链接——这几步**不调用模型**,纯靠规则与图算法。',
102
- '跑三层校验(format / reference / semantic),产出"待补 N 张"清单,人可以按清单补。',
103
- '之后才轮到编译:卡片 → wikiNotes → 向量 + 图谱。',
83
+ '切召回单元:长卡片按小节切开,图片跟着讲它的那一段走。',
84
+ '装配图谱:卡片到来源的溯源边,以及卡片之间的关系边。',
85
+ '给每张卡片补一块「相关」,把断链写成引用问题,并写一份索引页。',
104
86
  ],
105
- llm: false,
106
- weknora: '对应它的 Finalize(重建索引 / 清死链 / 补交叉链接,纯 SQL + 图算法)。',
107
- status: 'partial',
108
- statusNote: '部分实现:三层质检已实现;索引页 / 死链 / 交叉链接待实现',
87
+ model: '不调模型',
109
88
  },
110
89
  ]
111
90
 
112
- const STATUS_META: Record<StageStatus, { label: string; tone: 'success' | 'warning' | 'neutral' }> = {
113
- done: { label: '已实现', tone: 'success' },
114
- partial: { label: '部分实现', tone: 'warning' },
115
- todo: { label: '待实现', tone: 'neutral' },
116
- }
117
-
118
91
  const TONE_CLASS: Record<Stage['tone'], string> = {
119
92
  blue: styles.wikiFlowBlue,
120
93
  violet: styles.wikiFlowViolet,
@@ -122,22 +95,22 @@ const TONE_CLASS: Record<Stage['tone'], string> = {
122
95
  amber: styles.wikiFlowAmber,
123
96
  }
124
97
 
125
- /** 三条判定规则 —— 对应"抽取 → 判类型 → 看是否已存在"这三步,但顺序与判据都被钉死。 */
98
+ /** 三条判定规则。它们决定了卡片会不会被拆成两张,所以常驻在这一屏。 */
126
99
  const RULES: Array<{ order: string; title: string; body: string }> = [
127
100
  {
128
101
  order: '1',
129
- title: '类型在抽取时就要定,不能留到最后再判',
130
- body: '候选项的身份是「类型 + 名称 + 证据」。slug 的命名空间是 `<类型>/<名称>`,类型晚定一步,slug 就得重算一次。',
102
+ title: '类型在抽取时就要定',
103
+ body: '卡片的身份是「类型 + 名称」。类型晚定一步,名称就得重算一次。',
131
104
  },
132
105
  {
133
106
  order: '2',
134
- title: '类型只能来自注册表,**不命中不要自创**',
135
- body: '自创一个类型等于这张卡片没有 schema:没有必填小节、没有模板、校验不了。都不命中时落到 `concept`,或先在「Wiki 类型」里把它登记成正式类型再抽。',
107
+ title: '类型只能来自注册表',
108
+ body: '不命中就落 `concept`,不要自创 —— 自创等于这张卡片没有 schema。',
136
109
  },
137
110
  {
138
111
  order: '3',
139
- title: '「是否已存在」按 slug 与别名判,不按标题',
140
- body: '命中的走**增量合并**(旧版本先快照,回滚本身也可回滚),没命中的才新建 `draft`。相关不等于相同:别把相近的话题并成一条。',
112
+ title: '判重按名称与别名,不按标题',
113
+ body: '标题可以改,名称是稳定标识。相关不等于相同:相近的话题不要合并。',
141
114
  },
142
115
  ]
143
116
 
@@ -150,13 +123,11 @@ export function WikiFlowCard(): ReactNode {
150
123
  return <Card className={styles.kbCard}>
151
124
  <div className={styles.kbCardHead}>
152
125
  <div><h3><RefreshCw size={13} />Wiki 抽取流程(原文件 → Wiki)</h3></div>
153
- <span className={styles.kbCount}>4 段 · 目前没有一段由管线自己调模型</span>
126
+ <span className={styles.kbCount}>4 段</span>
154
127
  </div>
155
128
  <p className={styles.kbHint}>
156
- 单文档抽取的完整链路。<b>与已落库的卡片合并是这条链路的中心</b>——它决定这次是"新建一页"还是"补进已有页面",
157
- 也决定 slug 能不能稳定下来。状态徽标按代码现状标注:没实现的不画成已实现。
158
- 前两段现在由编译管线用**规则**完成(编译时自动跑,正文没变的来源按指纹跳过);
159
- 设计里那两次模型调用(候选抽取工具、归一提示词)还没有,所以这两段标的是「部分实现」。
129
+ 一份文档变成卡片要走的四段。<b>合并是这条链路的中心</b>:它决定这次是新建一页还是补进已有页面。
130
+ 四段都在编译时自动跑,正文没变的来源按指纹跳过。
160
131
  </p>
161
132
 
162
133
  <div className={styles.wikiFlow}>
@@ -164,28 +135,23 @@ export function WikiFlowCard(): ReactNode {
164
135
  <FileText size={14} />
165
136
  <span>
166
137
  <strong>SourceRaw</strong>
167
- <small>01_source_truth/*.md — 原始可追溯文档,本身不进召回</small>
138
+ <small>01_source_raw/*.md — 原始文档,本身不进召回</small>
168
139
  </span>
169
140
  </div>
170
141
 
171
- {STAGES.map(stage => {
142
+ {STAGES.map((stage, index) => {
172
143
  const Icon = stage.icon
173
- const status = STATUS_META[stage.status]
174
144
  return <div className={styles.wikiFlowStageWrap} key={stage.id}>
175
145
  <span className={styles.wikiFlowArrow} aria-hidden="true"><ArrowDown size={14} /></span>
176
146
  <div className={cn(styles.wikiFlowStage, TONE_CLASS[stage.tone])}>
177
147
  <div className={styles.wikiFlowStageHead}>
178
- <span className={styles.wikiFlowPass}><Icon size={13} />{stage.pass}</span>
179
- <strong>{stage.title}</strong>
180
- <Badge tone={status.tone}>{status.label}</Badge>
181
- <span className={styles.wikiFlowLlm}>{stage.llm ? '调用模型' : '不调用模型'}</span>
148
+ <span className={styles.wikiFlowPass}><Icon size={13} />{index + 1} · {stage.name}</span>
149
+ <span className={styles.wikiFlowLlm}>{stage.model}</span>
182
150
  </div>
183
151
  <p className={styles.wikiFlowIo}>{stage.io}</p>
184
152
  <ul className={styles.wikiFlowBody}>
185
153
  {stage.body.map(line => <li key={line}>{rich(line)}</li>)}
186
154
  </ul>
187
- <p className={styles.wikiFlowNote}><b>对应 WeKnora:</b>{stage.weknora}</p>
188
- <p className={styles.wikiFlowNote}>{stage.statusNote}</p>
189
155
  </div>
190
156
  </div>
191
157
  })}
@@ -194,7 +160,7 @@ export function WikiFlowCard(): ReactNode {
194
160
  <div className={styles.wikiFlowSink}>
195
161
  <Layers3 size={14} />
196
162
  <span>
197
- <strong>Wiki 卡片 → wikiNotes → 向量 / 图谱</strong>
163
+ <strong>Wiki 卡片 → 召回单元 / 向量 / 图谱</strong>
198
164
  <small>02_wiki/&lt;类型&gt;/&lt;id&gt;.md → 03_compiled/* — 召回单元在编译段才产生</small>
199
165
  </span>
200
166
  </div>
@@ -213,11 +179,7 @@ export function WikiFlowCard(): ReactNode {
213
179
 
214
180
  <div className={styles.wikiFlowDiff}>
215
181
  <Box size={13} />
216
- <span>
217
- WeKnora 是<b>知识库级后台管道</b>(Redis 队列 + 每 KB 并发治理 + Neo4j),本仓库不照抄:
218
- 模型调用一律经 Agent,所以前两段由工具驱动、由人复核。<b>抽取粒度</b>
219
- (focused / standard / exhaustive)这个旋钮值得抄——它把"抽多少"变成用户能理解的东西。
220
- </span>
182
+ <span>四段与腾讯 WeKnora 的 Map-Reduce 四段对应。差别在单文档:它的批内统筹退化成按库复用已有类型,它的后台管道(队列 + 图数据库)不照抄 —— 模型调用一律经 Agent。</span>
221
183
  </div>
222
184
  </Card>
223
185
  }