dsh-data-domain-knowledge 0.1.0-alpha.1
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/LICENSE +21 -0
- package/README.md +360 -0
- package/cordis.patch.yml +410 -0
- package/eval/README.md +76 -0
- package/eval/evaluate-retrieval.mjs +121 -0
- package/eval/queries.example.jsonl +2 -0
- package/lib/client.js +111415 -0
- package/lib/types/config-schema.d.ts +35 -0
- package/lib/types/config-schema.d.ts.map +1 -0
- package/lib/types/config-schema.js +34 -0
- package/lib/types/config-schema.js.map +1 -0
- package/lib/types/convert/core-loader.d.ts +32 -0
- package/lib/types/convert/core-loader.d.ts.map +1 -0
- package/lib/types/convert/core-loader.js +60 -0
- package/lib/types/convert/core-loader.js.map +1 -0
- package/lib/types/convert/host.d.ts +88 -0
- package/lib/types/convert/host.d.ts.map +1 -0
- package/lib/types/convert/host.js +479 -0
- package/lib/types/convert/host.js.map +1 -0
- package/lib/types/convert/ingest.d.ts +125 -0
- package/lib/types/convert/ingest.d.ts.map +1 -0
- package/lib/types/convert/ingest.js +228 -0
- package/lib/types/convert/ingest.js.map +1 -0
- package/lib/types/convert/settings-schema.d.ts +18 -0
- package/lib/types/convert/settings-schema.d.ts.map +1 -0
- package/lib/types/convert/settings-schema.js +26 -0
- package/lib/types/convert/settings-schema.js.map +1 -0
- package/lib/types/convert/types.d.ts +46 -0
- package/lib/types/convert/types.d.ts.map +1 -0
- package/lib/types/convert/types.js +41 -0
- package/lib/types/convert/types.js.map +1 -0
- package/lib/types/diagnosis/cards.d.ts +71 -0
- package/lib/types/diagnosis/cards.d.ts.map +1 -0
- package/lib/types/diagnosis/cards.js +482 -0
- package/lib/types/diagnosis/cards.js.map +1 -0
- package/lib/types/diagnosis/problem-classes.d.ts +51 -0
- package/lib/types/diagnosis/problem-classes.d.ts.map +1 -0
- package/lib/types/diagnosis/problem-classes.js +66 -0
- package/lib/types/diagnosis/problem-classes.js.map +1 -0
- package/lib/types/diagnosis/schema.d.ts +65 -0
- package/lib/types/diagnosis/schema.d.ts.map +1 -0
- package/lib/types/diagnosis/schema.js +208 -0
- package/lib/types/diagnosis/schema.js.map +1 -0
- package/lib/types/diagnosis/seed-source.d.ts +20 -0
- package/lib/types/diagnosis/seed-source.d.ts.map +1 -0
- package/lib/types/diagnosis/seed-source.js +96 -0
- package/lib/types/diagnosis/seed-source.js.map +1 -0
- package/lib/types/diagnosis/seed.d.ts +50 -0
- package/lib/types/diagnosis/seed.d.ts.map +1 -0
- package/lib/types/diagnosis/seed.js +242 -0
- package/lib/types/diagnosis/seed.js.map +1 -0
- package/lib/types/diagnosis/store.d.ts +81 -0
- package/lib/types/diagnosis/store.d.ts.map +1 -0
- package/lib/types/diagnosis/store.js +409 -0
- package/lib/types/diagnosis/store.js.map +1 -0
- package/lib/types/diagnosis/types.d.ts +124 -0
- package/lib/types/diagnosis/types.d.ts.map +1 -0
- package/lib/types/diagnosis/types.js +13 -0
- package/lib/types/diagnosis/types.js.map +1 -0
- package/lib/types/directory-picker.d.ts +94 -0
- package/lib/types/directory-picker.d.ts.map +1 -0
- package/lib/types/directory-picker.js +110 -0
- package/lib/types/directory-picker.js.map +1 -0
- package/lib/types/extract-model.d.ts +76 -0
- package/lib/types/extract-model.d.ts.map +1 -0
- package/lib/types/extract-model.js +193 -0
- package/lib/types/extract-model.js.map +1 -0
- package/lib/types/extract.d.ts +121 -0
- package/lib/types/extract.d.ts.map +1 -0
- package/lib/types/extract.js +549 -0
- package/lib/types/extract.js.map +1 -0
- package/lib/types/fts.d.ts +96 -0
- package/lib/types/fts.d.ts.map +1 -0
- package/lib/types/fts.js +184 -0
- package/lib/types/fts.js.map +1 -0
- package/lib/types/index.d.ts +39 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +1112 -0
- package/lib/types/index.js.map +1 -0
- package/lib/types/intent/engine.d.ts +108 -0
- package/lib/types/intent/engine.d.ts.map +1 -0
- package/lib/types/intent/engine.js +501 -0
- package/lib/types/intent/engine.js.map +1 -0
- package/lib/types/intent/host.d.ts +88 -0
- package/lib/types/intent/host.d.ts.map +1 -0
- package/lib/types/intent/host.js +389 -0
- package/lib/types/intent/host.js.map +1 -0
- package/lib/types/intent/preset-tools.d.ts +37 -0
- package/lib/types/intent/preset-tools.d.ts.map +1 -0
- package/lib/types/intent/preset-tools.js +45 -0
- package/lib/types/intent/preset-tools.js.map +1 -0
- package/lib/types/intent/settings-schema.d.ts +59 -0
- package/lib/types/intent/settings-schema.d.ts.map +1 -0
- package/lib/types/intent/settings-schema.js +57 -0
- package/lib/types/intent/settings-schema.js.map +1 -0
- package/lib/types/intent/store.d.ts +75 -0
- package/lib/types/intent/store.d.ts.map +1 -0
- package/lib/types/intent/store.js +139 -0
- package/lib/types/intent/store.js.map +1 -0
- package/lib/types/intent/tools.d.ts +63 -0
- package/lib/types/intent/tools.d.ts.map +1 -0
- package/lib/types/intent/tools.js +108 -0
- package/lib/types/intent/tools.js.map +1 -0
- package/lib/types/intent/types.d.ts +189 -0
- package/lib/types/intent/types.d.ts.map +1 -0
- package/lib/types/intent/types.js +62 -0
- package/lib/types/intent/types.js.map +1 -0
- package/lib/types/knowledge-bases.d.ts +266 -0
- package/lib/types/knowledge-bases.d.ts.map +1 -0
- package/lib/types/knowledge-bases.js +1107 -0
- package/lib/types/knowledge-bases.js.map +1 -0
- package/lib/types/layout.d.ts +262 -0
- package/lib/types/layout.d.ts.map +1 -0
- package/lib/types/layout.js +312 -0
- package/lib/types/layout.js.map +1 -0
- package/lib/types/migrate.d.ts +110 -0
- package/lib/types/migrate.d.ts.map +1 -0
- package/lib/types/migrate.js +280 -0
- package/lib/types/migrate.js.map +1 -0
- package/lib/types/recall-rank.d.ts +158 -0
- package/lib/types/recall-rank.d.ts.map +1 -0
- package/lib/types/recall-rank.js +261 -0
- package/lib/types/recall-rank.js.map +1 -0
- package/lib/types/runtime.d.ts +568 -0
- package/lib/types/runtime.d.ts.map +1 -0
- package/lib/types/runtime.js +3045 -0
- package/lib/types/runtime.js.map +1 -0
- package/lib/types/settings-schema.d.ts +117 -0
- package/lib/types/settings-schema.d.ts.map +1 -0
- package/lib/types/settings-schema.js +92 -0
- package/lib/types/settings-schema.js.map +1 -0
- package/lib/types/settings-volatile.d.ts +102 -0
- package/lib/types/settings-volatile.d.ts.map +1 -0
- package/lib/types/settings-volatile.js +114 -0
- package/lib/types/settings-volatile.js.map +1 -0
- package/lib/types/types.d.ts +799 -0
- package/lib/types/types.d.ts.map +1 -0
- package/lib/types/types.js +387 -0
- package/lib/types/types.js.map +1 -0
- package/lib/types/wiki-types.d.ts +68 -0
- package/lib/types/wiki-types.d.ts.map +1 -0
- package/lib/types/wiki-types.js +322 -0
- package/lib/types/wiki-types.js.map +1 -0
- package/package.json +101 -0
- package/preset/tita-data-agent/agent.cordis.yml +376 -0
- package/preset/tita-data-agent/preset.yml +3 -0
- package/python/requirements.txt +8 -0
- package/scripts/doctor.mjs +70 -0
- package/scripts/e2e-pipeline.mjs +355 -0
- package/scripts/install-agent-preset.mjs +92 -0
- package/scripts/setup-embedding.sh +34 -0
- package/scripts/sync-agent-preset.mjs +188 -0
- package/src/client/AgentPresetCard.tsx +247 -0
- package/src/client/DirectoryPicker.tsx +357 -0
- package/src/client/InfoHint.tsx +65 -0
- package/src/client/IntentLogicTab.tsx +185 -0
- package/src/client/IntentTab.tsx +715 -0
- package/src/client/KnowledgeBaseTab.tsx +1454 -0
- package/src/client/KnowledgeGraphView.tsx +306 -0
- package/src/client/KnowledgePanel.tsx +381 -0
- package/src/client/KnowledgeStepRail.tsx +60 -0
- package/src/client/NodeSettings.tsx +392 -0
- package/src/client/PreviewSections.tsx +116 -0
- package/src/client/RecallPanel.tsx +399 -0
- package/src/client/TypeDefinitionDrawer.tsx +215 -0
- package/src/client/WikiFlowCard.tsx +226 -0
- package/src/client/WikiTypeEditor.tsx +332 -0
- package/src/client/agent-preset.ts +121 -0
- package/src/client/arch/AgentArchitectureGraph.tsx +219 -0
- package/src/client/arch/NodeLogicPanel.tsx +133 -0
- package/src/client/arch/ProblemDetailPanel.tsx +88 -0
- package/src/client/arch/model.ts +691 -0
- package/src/client/architecture.css +191 -0
- package/src/client/architecture.tsx +530 -0
- package/src/client/attribution/AttributionGraph.tsx +104 -0
- package/src/client/attribution/AttributionTab.tsx +332 -0
- package/src/client/attribution/CaseView.tsx +102 -0
- package/src/client/attribution/GraphStage.tsx +87 -0
- package/src/client/attribution/RunView.tsx +184 -0
- package/src/client/attribution/StageChrome.tsx +403 -0
- package/src/client/attribution/ViewSwitch.tsx +107 -0
- package/src/client/attribution/graph-options.ts +381 -0
- package/src/client/attribution/model.ts +462 -0
- package/src/client/config-scope.ts +119 -0
- package/src/client/convert/ConvertPanel.tsx +594 -0
- package/src/client/convert/styles.css +138 -0
- package/src/client/convert/styles.ts +49 -0
- package/src/client/format.ts +39 -0
- package/src/client/graph/layout.ts +181 -0
- package/src/client/graph.css +113 -0
- package/src/client/index.ts +98 -0
- package/src/client/problem-domains.ts +114 -0
- package/src/client/styles.css +940 -0
- package/src/client/styles.ts +11 -0
- package/src/client/useFitScale.ts +68 -0
- package/src/config-schema.ts +45 -0
- package/src/convert/core-loader.ts +68 -0
- package/src/convert/host.ts +579 -0
- package/src/convert/ingest.ts +367 -0
- package/src/convert/settings-schema.ts +27 -0
- package/src/convert/types.ts +65 -0
- package/src/diagnosis/cards.ts +498 -0
- package/src/diagnosis/problem-classes.ts +117 -0
- package/src/diagnosis/schema.ts +260 -0
- package/src/diagnosis/seed-source.ts +107 -0
- package/src/diagnosis/seed.ts +291 -0
- package/src/diagnosis/store.ts +432 -0
- package/src/diagnosis/types.ts +152 -0
- package/src/directory-picker.ts +164 -0
- package/src/extract-model.ts +227 -0
- package/src/extract.ts +632 -0
- package/src/fts.ts +203 -0
- package/src/index.ts +1091 -0
- package/src/intent/README.md +63 -0
- package/src/intent/engine.ts +527 -0
- package/src/intent/host.ts +462 -0
- package/src/intent/preset-tools.ts +48 -0
- package/src/intent/settings-schema.ts +63 -0
- package/src/intent/store.ts +143 -0
- package/src/intent/tools.ts +139 -0
- package/src/intent/types.ts +245 -0
- package/src/knowledge-bases.ts +1160 -0
- package/src/layout.ts +350 -0
- package/src/migrate.ts +262 -0
- package/src/python/embedding_worker.py +471 -0
- package/src/recall-rank.ts +299 -0
- package/src/runtime.ts +3069 -0
- package/src/settings-schema.ts +94 -0
- package/src/settings-volatile.ts +122 -0
- package/src/types.ts +1140 -0
- package/src/wiki-types.ts +357 -0
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
/** 抽取关系候选时使用的默认关系 id;图里也只认这个 id(见 `rebuild()` 的边装配)。 */
|
|
2
|
+
export const RELATES_TO = 'relates_to';
|
|
3
|
+
/**
|
|
4
|
+
* 每份来源最多抽多少张卡片候选。
|
|
5
|
+
*
|
|
6
|
+
* 这是**有意为之的上限**,不是省略号:一份长文档的小节可以有几十个,放开就会把
|
|
7
|
+
* 一个知识库灌成「一篇文档 = 几十张未审核卡片」,人再也不会去看它们。宁可少抽,
|
|
8
|
+
* 剩下的由 Agent 用声明式候选主动补。
|
|
9
|
+
*/
|
|
10
|
+
export const MAX_CANDIDATES_PER_SOURCE = 12;
|
|
11
|
+
/** `##`/`###` 小节正文短于此长度就不成候选:那更像标签而不是一个可定义的对象。 */
|
|
12
|
+
const SECTION_MIN_CHARS = 120;
|
|
13
|
+
/** 这些小节名是结构性噪音,抽成卡片只会污染 wiki。 */
|
|
14
|
+
const GENERIC_HEADINGS = new Set([
|
|
15
|
+
'参考', '参考资料', '参考文献', '参考链接', '附录', '目录', '变更记录', '更新记录',
|
|
16
|
+
'版本历史', '修订记录', '相关文档', '相关链接', '致谢', '脚注', '备注', '索引', '术语表',
|
|
17
|
+
]);
|
|
18
|
+
/** 兜底类型:所有已知类型都不命中时落它(见 `pickType`)。 */
|
|
19
|
+
const FALLBACK_TYPE = 'concept';
|
|
20
|
+
/** 与 `runtime.ts` 的 `SAFE_ID` 同形:卡片 id 只允许 ASCII 安全字符。 */
|
|
21
|
+
const SAFE_ENTITY_ID = /^[a-zA-Z0-9._:-]{1,160}$/;
|
|
22
|
+
/**
|
|
23
|
+
* 名字归一:小写 + 把非字母数字的连续段折成 `-`。
|
|
24
|
+
*
|
|
25
|
+
* **必须与 `candidateKey` / `buildAliasIndex` 用同一套归一**,否则「GMV 口径」和
|
|
26
|
+
* 「gmv-口径」在索引里是两个键,判重就会漏。这里刻意用小写化而不是运行时 slug 的
|
|
27
|
+
* 原样保留,因为判重是「同一个指称」的问题,大小写不构成区别。
|
|
28
|
+
*/
|
|
29
|
+
export function normalizeCandidateName(value) {
|
|
30
|
+
return value.trim().toLowerCase().replace(/[^\p{L}\p{N}._-]+/gu, '-').replace(/^-+|-+$/g, '').slice(0, 120);
|
|
31
|
+
}
|
|
32
|
+
export function candidateKey(candidate) {
|
|
33
|
+
return `${candidate.type}:${normalizeCandidateName(candidate.name)}`;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 候选落到磁盘时用的 `entity_id`。
|
|
37
|
+
*
|
|
38
|
+
* 卡片 id 必须过 `SAFE_ID`(ASCII),而候选名常常是中文,所以中文名不能直接当 id:
|
|
39
|
+
* 这里退化成 `candidate-<fnv1a>` 的稳定哈希。名字本身仍然完整地写进卡片 title,
|
|
40
|
+
* 并作为 alias 进索引,所以下一次判重照样能按名字找到它 —— 判重认的是名字,不是 id。
|
|
41
|
+
*/
|
|
42
|
+
export function candidateEntityId(name) {
|
|
43
|
+
const normalized = normalizeCandidateName(name);
|
|
44
|
+
if (SAFE_ENTITY_ID.test(normalized))
|
|
45
|
+
return normalized;
|
|
46
|
+
return `candidate-${fnv1a(normalized)}`;
|
|
47
|
+
}
|
|
48
|
+
/** FNV-1a(32 位):只用来生成稳定短 id,不用于任何安全目的。 */
|
|
49
|
+
function fnv1a(value) {
|
|
50
|
+
let hash = 0x811c9dc5;
|
|
51
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
52
|
+
hash ^= value.charCodeAt(index);
|
|
53
|
+
hash = Math.imul(hash, 0x01000193);
|
|
54
|
+
}
|
|
55
|
+
return (hash >>> 0).toString(36);
|
|
56
|
+
}
|
|
57
|
+
function stringList(value) {
|
|
58
|
+
if (typeof value === 'string')
|
|
59
|
+
return value.trim() ? [value.trim()] : [];
|
|
60
|
+
if (!Array.isArray(value))
|
|
61
|
+
return [];
|
|
62
|
+
return value.map(item => (typeof item === 'string' ? item.trim() : '')).filter(Boolean);
|
|
63
|
+
}
|
|
64
|
+
function plainRecord(value) {
|
|
65
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
66
|
+
}
|
|
67
|
+
// ------------------------------------------------------------ 类型判定
|
|
68
|
+
/**
|
|
69
|
+
* 用类型注册表的 `examples` / `description` 做**关键词重合**判型。
|
|
70
|
+
*
|
|
71
|
+
* 刻意不用模型:这一步只要「像指标就落指标,什么都不像就落概念」,判错了人还能改
|
|
72
|
+
* (卡片是 unreviewed)。要的是**确定性** —— 同一份文档两次抽取必须得到同一个类型,
|
|
73
|
+
* 否则增量指纹会永远在变。
|
|
74
|
+
*/
|
|
75
|
+
function typeCorpus(def) {
|
|
76
|
+
return [def.id, def.label, def.description, ...def.examples].join('\n').toLowerCase();
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 名称的匹配片段。
|
|
80
|
+
*
|
|
81
|
+
* 中文没有词边界,只按空格切词的话「销售口径」永远匹配不上任何例子,所以额外补
|
|
82
|
+
* 2-gram(`销售` / `售口` / `口径`)。片段只用于打分,不用于生成任何 id。
|
|
83
|
+
*/
|
|
84
|
+
function nameFragments(name) {
|
|
85
|
+
const lower = name.trim().toLowerCase();
|
|
86
|
+
const fragments = new Set();
|
|
87
|
+
if (lower.length >= 2)
|
|
88
|
+
fragments.add(lower);
|
|
89
|
+
for (const token of lower.split(/[^\p{L}\p{N}]+/u))
|
|
90
|
+
if (token.length >= 2)
|
|
91
|
+
fragments.add(token);
|
|
92
|
+
const compact = [...lower.replace(/[^\p{L}\p{N}]+/gu, '')];
|
|
93
|
+
for (let index = 0; index + 1 < compact.length; index += 1)
|
|
94
|
+
fragments.add(`${compact[index]}${compact[index + 1]}`);
|
|
95
|
+
return [...fragments];
|
|
96
|
+
}
|
|
97
|
+
function scoreType(def, name) {
|
|
98
|
+
const corpus = typeCorpus(def);
|
|
99
|
+
const full = name.trim().toLowerCase();
|
|
100
|
+
let score = full.length >= 2 && corpus.includes(full) ? 3 : 0;
|
|
101
|
+
for (const fragment of nameFragments(name))
|
|
102
|
+
if (corpus.includes(fragment))
|
|
103
|
+
score += 1;
|
|
104
|
+
return score;
|
|
105
|
+
}
|
|
106
|
+
/** 在**启用的**类型里挑一个;全不命中时落 `concept`(不在注册表里就落第一个启用的)。 */
|
|
107
|
+
function pickType(name, enabled) {
|
|
108
|
+
let best;
|
|
109
|
+
let bestScore = 0;
|
|
110
|
+
for (const def of enabled) {
|
|
111
|
+
const score = scoreType(def, name);
|
|
112
|
+
// 只有严格更高才替换:同分保持注册表顺序,抽取结果因此是确定的。
|
|
113
|
+
if (score > bestScore) {
|
|
114
|
+
best = def;
|
|
115
|
+
bestScore = score;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (best)
|
|
119
|
+
return best.id;
|
|
120
|
+
if (enabled.some(def => def.id === FALLBACK_TYPE))
|
|
121
|
+
return FALLBACK_TYPE;
|
|
122
|
+
return (enabled[0]?.id ?? FALLBACK_TYPE);
|
|
123
|
+
}
|
|
124
|
+
/** 按 `##`/`###` 切小节;`#` 与 `####` 不参与(前者是文档标题,后者太细)。 */
|
|
125
|
+
function sectionsOf(content) {
|
|
126
|
+
const sections = [];
|
|
127
|
+
let current;
|
|
128
|
+
const flush = () => {
|
|
129
|
+
if (!current)
|
|
130
|
+
return;
|
|
131
|
+
const markdown = current.lines.join('\n').trim();
|
|
132
|
+
const body = current.lines.slice(1).join('\n').trim();
|
|
133
|
+
sections.push({ heading: current.heading, content: body, markdown });
|
|
134
|
+
current = undefined;
|
|
135
|
+
};
|
|
136
|
+
for (const line of content.split(/\r?\n/)) {
|
|
137
|
+
const match = /^(#{1,4})\s+(.+?)\s*$/.exec(line);
|
|
138
|
+
if (match) {
|
|
139
|
+
flush();
|
|
140
|
+
if (match[1] === '##' || match[1] === '###')
|
|
141
|
+
current = { heading: match[2].replace(/[::]\s*$/, '').trim(), lines: [line] };
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (current)
|
|
145
|
+
current.lines.push(line);
|
|
146
|
+
}
|
|
147
|
+
flush();
|
|
148
|
+
return sections;
|
|
149
|
+
}
|
|
150
|
+
function isGenericHeading(heading) {
|
|
151
|
+
const normalized = heading.replace(/[\s::。.、]+$/g, '').trim();
|
|
152
|
+
if (GENERIC_HEADINGS.has(normalized))
|
|
153
|
+
return true;
|
|
154
|
+
// 纯序号 / 纯数字小节(`1.`、`(二)`、`3`)不构成一个可定义的对象。
|
|
155
|
+
return /^[((]?[0-9一二三四五六七八九十]+[)).、]?$/.test(normalized);
|
|
156
|
+
}
|
|
157
|
+
function sectionForName(sections, name) {
|
|
158
|
+
const normalized = normalizeCandidateName(name);
|
|
159
|
+
if (!normalized)
|
|
160
|
+
return undefined;
|
|
161
|
+
return sections.find(section => {
|
|
162
|
+
const heading = normalizeCandidateName(section.heading);
|
|
163
|
+
return heading === normalized || (heading.length >= 2 && normalized.includes(heading)) || (normalized.length >= 2 && heading.includes(normalized));
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
function declaredEntries(metadata) {
|
|
167
|
+
const result = [];
|
|
168
|
+
const pushList = (kind, value) => {
|
|
169
|
+
if (!Array.isArray(value))
|
|
170
|
+
return;
|
|
171
|
+
for (const entry of value)
|
|
172
|
+
result.push({ kind, entry });
|
|
173
|
+
};
|
|
174
|
+
const bag = metadata.candidates;
|
|
175
|
+
if (Array.isArray(bag)) {
|
|
176
|
+
for (const entry of bag) {
|
|
177
|
+
const record = typeof entry === 'string' ? undefined : plainRecord(entry);
|
|
178
|
+
const declared = record && typeof record.kind === 'string' ? record.kind.trim().toLowerCase() : '';
|
|
179
|
+
const kind = declared === 'relation' ? 'relation' : declared === 'entity' ? 'entity' : 'concept';
|
|
180
|
+
result.push({ kind, entry });
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
else if (bag !== null && typeof bag === 'object') {
|
|
184
|
+
const bucket = plainRecord(bag);
|
|
185
|
+
pushList('entity', bucket.entities);
|
|
186
|
+
pushList('concept', bucket.concepts);
|
|
187
|
+
pushList('relation', bucket.relations);
|
|
188
|
+
}
|
|
189
|
+
pushList('entity', metadata.entities);
|
|
190
|
+
pushList('concept', metadata.concepts);
|
|
191
|
+
pushList('relation', metadata.relations);
|
|
192
|
+
return result;
|
|
193
|
+
}
|
|
194
|
+
function entryName(entry) {
|
|
195
|
+
if (typeof entry === 'string')
|
|
196
|
+
return entry.trim();
|
|
197
|
+
const record = plainRecord(entry);
|
|
198
|
+
for (const key of ['name', 'title', 'from']) {
|
|
199
|
+
const value = record[key];
|
|
200
|
+
if (typeof value === 'string' && value.trim())
|
|
201
|
+
return value.trim();
|
|
202
|
+
}
|
|
203
|
+
return '';
|
|
204
|
+
}
|
|
205
|
+
/** 显式声明的类型 id:原样带出去,交给 `writeCard` 的类型闸门裁决(不在这里改判)。 */
|
|
206
|
+
function entryTypeId(entry) {
|
|
207
|
+
const record = plainRecord(entry);
|
|
208
|
+
for (const key of ['type', 'entity_type']) {
|
|
209
|
+
const value = record[key];
|
|
210
|
+
if (typeof value === 'string' && value.trim())
|
|
211
|
+
return value.trim();
|
|
212
|
+
}
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
function entryTargetName(entry) {
|
|
216
|
+
const record = plainRecord(entry);
|
|
217
|
+
const target = record.target;
|
|
218
|
+
if (typeof record.to === 'string' && record.to.trim())
|
|
219
|
+
return record.to.trim();
|
|
220
|
+
if (typeof target === 'string' && target.trim())
|
|
221
|
+
return target.trim();
|
|
222
|
+
const nested = plainRecord(target);
|
|
223
|
+
return typeof nested.name === 'string' ? nested.name.trim() : '';
|
|
224
|
+
}
|
|
225
|
+
function entryTargetTypeId(entry) {
|
|
226
|
+
const record = plainRecord(entry);
|
|
227
|
+
const direct = record.to_type;
|
|
228
|
+
if (typeof direct === 'string' && direct.trim())
|
|
229
|
+
return direct.trim();
|
|
230
|
+
const nested = plainRecord(record.target);
|
|
231
|
+
return typeof nested.type === 'string' && nested.type.trim() ? nested.type.trim() : undefined;
|
|
232
|
+
}
|
|
233
|
+
function entryRelation(entry) {
|
|
234
|
+
const value = plainRecord(entry).relation;
|
|
235
|
+
return typeof value === 'string' && value.trim() ? value.trim() : RELATES_TO;
|
|
236
|
+
}
|
|
237
|
+
function entryConfidence(entry, fallback) {
|
|
238
|
+
const value = Number(plainRecord(entry).confidence);
|
|
239
|
+
return Number.isFinite(value) && value > 0 && value <= 1 ? value : fallback;
|
|
240
|
+
}
|
|
241
|
+
function entryBody(entry) {
|
|
242
|
+
const value = plainRecord(entry).body;
|
|
243
|
+
return typeof value === 'string' && value.trim() ? value.trim() : undefined;
|
|
244
|
+
}
|
|
245
|
+
function entryHeading(entry) {
|
|
246
|
+
const value = plainRecord(entry).heading;
|
|
247
|
+
return typeof value === 'string' && value.trim() ? value.trim() : undefined;
|
|
248
|
+
}
|
|
249
|
+
function entryQuote(entry) {
|
|
250
|
+
const text = typeof entry === 'string' ? entry : JSON.stringify(entry);
|
|
251
|
+
return text.replace(/\s+/g, ' ').trim().slice(0, 240);
|
|
252
|
+
}
|
|
253
|
+
// ------------------------------------------------------------ 抽取入口
|
|
254
|
+
/** 文档自己的主候选:声明式优先,其次第一个像样的小节(`[[链接]]` 关系的起点)。 */
|
|
255
|
+
function kindFor(type) {
|
|
256
|
+
return type === FALLBACK_TYPE ? 'concept' : 'entity';
|
|
257
|
+
}
|
|
258
|
+
export function extractCandidates(source, wikiTypes) {
|
|
259
|
+
const metadata = plainRecord(source.metadata);
|
|
260
|
+
const enabled = wikiTypes.filter(def => def.enabled);
|
|
261
|
+
const sections = sectionsOf(source.content);
|
|
262
|
+
const evidence = (heading, quote) => ({
|
|
263
|
+
sourceId: source.sourceId,
|
|
264
|
+
...(heading ? { heading } : {}),
|
|
265
|
+
...(quote ? { quote } : {}),
|
|
266
|
+
});
|
|
267
|
+
// 显式声明的类型原样采信:抽取器不替 Agent 改判类型。写不进去(id 未登记 / 已停用)
|
|
268
|
+
// 是 `writeCard` 的闸门该说的话,那时它会被计入 candidatesRejected 而不是被静默换型。
|
|
269
|
+
const declaredType = (raw, name) => (raw ?? pickType(name, enabled));
|
|
270
|
+
// ---- ① / ② 声明式候选(最高置信)
|
|
271
|
+
const declaredEntities = [];
|
|
272
|
+
const declaredRelations = [];
|
|
273
|
+
for (const { kind, entry } of declaredEntries(metadata)) {
|
|
274
|
+
const name = entryName(entry);
|
|
275
|
+
if (!name)
|
|
276
|
+
continue;
|
|
277
|
+
const type = declaredType(entryTypeId(entry), name);
|
|
278
|
+
if (kind === 'relation') {
|
|
279
|
+
const to = entryTargetName(entry);
|
|
280
|
+
if (!to)
|
|
281
|
+
continue;
|
|
282
|
+
declaredRelations.push({
|
|
283
|
+
kind: 'relation', name, type,
|
|
284
|
+
evidence: evidence(entryHeading(entry), entryQuote(entry)),
|
|
285
|
+
target: { name: to, ...(entryTargetTypeId(entry) ? { type: declaredType(entryTargetTypeId(entry), to) } : {}) },
|
|
286
|
+
relation: entryRelation(entry),
|
|
287
|
+
confidence: entryConfidence(entry, 0.95),
|
|
288
|
+
});
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
const aliases = stringList(plainRecord(entry).aliases);
|
|
292
|
+
const heading = entryHeading(entry) ?? sectionForName(sections, name)?.heading;
|
|
293
|
+
const body = entryBody(entry) ?? sectionForName(sections, name)?.markdown;
|
|
294
|
+
declaredEntities.push({
|
|
295
|
+
kind: kind === 'entity' ? 'entity' : kindFor(type), name, type,
|
|
296
|
+
evidence: evidence(heading, entryQuote(entry)),
|
|
297
|
+
...(aliases.length > 0 ? { aliases } : {}),
|
|
298
|
+
...(body ? { body } : {}),
|
|
299
|
+
confidence: entryConfidence(entry, 0.95),
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
// ---- ④ 小节候选(先算:`[[链接]]` 的关系起点可能就是第一个小节)
|
|
303
|
+
const headingCandidates = [];
|
|
304
|
+
for (const section of sections) {
|
|
305
|
+
if (isGenericHeading(section.heading))
|
|
306
|
+
continue;
|
|
307
|
+
if (section.content.length < SECTION_MIN_CHARS)
|
|
308
|
+
continue;
|
|
309
|
+
const type = pickType(section.heading, enabled);
|
|
310
|
+
headingCandidates.push({
|
|
311
|
+
kind: kindFor(type), name: section.heading, type,
|
|
312
|
+
evidence: evidence(section.heading, section.content.slice(0, 240)),
|
|
313
|
+
body: section.markdown,
|
|
314
|
+
confidence: 0.5,
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
// ---- ③ wikilink 候选 + 从主候选指向它的 relates_to
|
|
318
|
+
const linkCandidates = [];
|
|
319
|
+
const linkSeen = new Set();
|
|
320
|
+
/**
|
|
321
|
+
* 每个 `[[链接]]` 落在哪个小节里。
|
|
322
|
+
*
|
|
323
|
+
* 0029 实跑发现的召回污染就是这里造成的:链接候选原来只带 `evidence(undefined, …)`,
|
|
324
|
+
* 于是它**没有正文**,落卡时只能拿 wiki 类型的模板顶上 —— 模型召回到的是
|
|
325
|
+
* 「(必填:写什么)」。而链接所在的那一小节就是关于它的现成说明,本来就在手边。
|
|
326
|
+
*/
|
|
327
|
+
const sectionByHeading = new Map(sections.map(section => [section.heading, section]));
|
|
328
|
+
const linkSection = new Map();
|
|
329
|
+
{
|
|
330
|
+
let current;
|
|
331
|
+
for (const line of source.content.split(/\r?\n/)) {
|
|
332
|
+
const heading = /^#{2,6}\s+(.+?)\s*$/.exec(line);
|
|
333
|
+
if (heading) {
|
|
334
|
+
current = sectionByHeading.get(heading[1].trim());
|
|
335
|
+
continue;
|
|
336
|
+
}
|
|
337
|
+
if (!current)
|
|
338
|
+
continue;
|
|
339
|
+
for (const match of line.matchAll(/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g)) {
|
|
340
|
+
const name = (match[1] ?? '').trim();
|
|
341
|
+
if (name && !linkSection.has(name))
|
|
342
|
+
linkSection.set(name, current);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
for (const match of source.content.matchAll(/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g)) {
|
|
347
|
+
const name = (match[1] ?? '').trim();
|
|
348
|
+
if (!name)
|
|
349
|
+
continue;
|
|
350
|
+
const alias = (match[2] ?? '').trim();
|
|
351
|
+
const type = pickType(name, enabled);
|
|
352
|
+
const key = candidateKey({ type, name });
|
|
353
|
+
if (linkSeen.has(key))
|
|
354
|
+
continue;
|
|
355
|
+
linkSeen.add(key);
|
|
356
|
+
const section = linkSection.get(name);
|
|
357
|
+
linkCandidates.push({
|
|
358
|
+
kind: kindFor(type), name, type,
|
|
359
|
+
evidence: evidence(section?.heading, match[0].slice(0, 240)),
|
|
360
|
+
...(alias ? { aliases: [alias] } : {}),
|
|
361
|
+
...(section ? { body: section.markdown } : {}),
|
|
362
|
+
confidence: 0.6,
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
const primary = declaredEntities[0] ?? headingCandidates[0];
|
|
366
|
+
const linkRelations = [];
|
|
367
|
+
if (primary) {
|
|
368
|
+
for (const link of linkCandidates) {
|
|
369
|
+
// 主候选指向自己不算关系。
|
|
370
|
+
if (candidateKey(primary) === candidateKey(link))
|
|
371
|
+
continue;
|
|
372
|
+
linkRelations.push({
|
|
373
|
+
kind: 'relation', name: primary.name, type: primary.type,
|
|
374
|
+
evidence: link.evidence,
|
|
375
|
+
target: { name: link.name, type: link.type },
|
|
376
|
+
relation: RELATES_TO,
|
|
377
|
+
confidence: 0.55,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
// ---- ⑤ 什么都没抽到时,文档标题本身就是一个候选(有标题就有据)
|
|
382
|
+
const titleCandidates = [];
|
|
383
|
+
const title = (source.title ?? '').trim();
|
|
384
|
+
if (declaredEntities.length + linkCandidates.length + headingCandidates.length === 0 && title) {
|
|
385
|
+
const type = pickType(title, enabled);
|
|
386
|
+
titleCandidates.push({
|
|
387
|
+
kind: kindFor(type), name: title, type,
|
|
388
|
+
// 整篇正文就是「这篇文档在讲什么」的正文 —— 没有小节可切时,它就是唯一的内容。
|
|
389
|
+
evidence: evidence(undefined, title),
|
|
390
|
+
...(source.content.trim() ? { body: source.content.trim() } : {}),
|
|
391
|
+
confidence: 0.35,
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
// 顺序 = 优先级(声明式 → 链接 → 小节 → 标题),同类内保持文档出现顺序;
|
|
395
|
+
// 上限只砍尾部的低置信候选,不会把声明式候选挤掉。
|
|
396
|
+
const entities = [];
|
|
397
|
+
const entitySeen = new Set();
|
|
398
|
+
for (const candidate of [...declaredEntities, ...linkCandidates, ...headingCandidates, ...titleCandidates]) {
|
|
399
|
+
if (!candidate.name.trim())
|
|
400
|
+
continue;
|
|
401
|
+
const key = candidateKey(candidate);
|
|
402
|
+
if (entitySeen.has(key))
|
|
403
|
+
continue;
|
|
404
|
+
entitySeen.add(key);
|
|
405
|
+
entities.push(candidate);
|
|
406
|
+
if (entities.length >= MAX_CANDIDATES_PER_SOURCE)
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
409
|
+
const relations = [];
|
|
410
|
+
const relationSeen = new Set();
|
|
411
|
+
for (const candidate of [...declaredRelations, ...linkRelations]) {
|
|
412
|
+
const to = candidate.target?.name?.trim();
|
|
413
|
+
if (!candidate.name.trim() || !to)
|
|
414
|
+
continue;
|
|
415
|
+
const key = `${normalizeCandidateName(candidate.name)}->${normalizeCandidateName(to)}:${candidate.relation ?? RELATES_TO}`;
|
|
416
|
+
if (relationSeen.has(key))
|
|
417
|
+
continue;
|
|
418
|
+
relationSeen.add(key);
|
|
419
|
+
relations.push(candidate);
|
|
420
|
+
if (relations.length >= MAX_CANDIDATES_PER_SOURCE)
|
|
421
|
+
break;
|
|
422
|
+
}
|
|
423
|
+
return [...entities, ...relations];
|
|
424
|
+
}
|
|
425
|
+
// ------------------------------------------------------------ 归一 · 与库内判重
|
|
426
|
+
/**
|
|
427
|
+
* 现有卡片的判重索引。
|
|
428
|
+
*
|
|
429
|
+
* 三处都登记:`entityType + entityId`(技术 id)、`entityType + title`(人写的中文名)、
|
|
430
|
+
* `metadata.aliases` 里的每个写法。**别名是关键字**:Agent 写卡片时把「GMV 口径」登记
|
|
431
|
+
* 成 `gmv-kpi` 的别名,抽取器下一次就认得这两者是同一个指称,不会再造第二张卡。
|
|
432
|
+
*/
|
|
433
|
+
export function buildAliasIndex(cards) {
|
|
434
|
+
const index = new Map();
|
|
435
|
+
const put = (type, name, card) => {
|
|
436
|
+
if (typeof name !== 'string' || !name.trim())
|
|
437
|
+
return;
|
|
438
|
+
const key = candidateKey({ type, name });
|
|
439
|
+
// 先到先得:同一 slug 撞车时保持确定性,不让文件系统顺序决定谁赢。
|
|
440
|
+
if (!index.has(key))
|
|
441
|
+
index.set(key, card);
|
|
442
|
+
};
|
|
443
|
+
for (const card of cards) {
|
|
444
|
+
put(card.entityType, card.entityId, card);
|
|
445
|
+
put(card.entityType, card.title, card);
|
|
446
|
+
for (const alias of stringList(plainRecord(card.metadata).aliases))
|
|
447
|
+
put(card.entityType, alias, card);
|
|
448
|
+
}
|
|
449
|
+
return index;
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* 归一:把候选分成「新建」「并入已有卡片」「关系」三类。
|
|
453
|
+
*
|
|
454
|
+
* 关系两端也走同一套判重,所以边只可能连到**真实存在的 wiki 节点**上;解析不出来的
|
|
455
|
+
* 端点会带着一个稳定 key 出去,由 `rebuild()` 在装配图时丢弃并计数,而不是在这里
|
|
456
|
+
* 凭空造一个节点。
|
|
457
|
+
*/
|
|
458
|
+
export function normalizeCandidates(candidates, index) {
|
|
459
|
+
const resolved = new Map(index);
|
|
460
|
+
const byName = new Map();
|
|
461
|
+
const remember = (key) => {
|
|
462
|
+
const separator = key.indexOf(':');
|
|
463
|
+
const name = separator >= 0 ? key.slice(separator + 1) : key;
|
|
464
|
+
const bucket = byName.get(name);
|
|
465
|
+
if (bucket) {
|
|
466
|
+
if (!bucket.includes(key))
|
|
467
|
+
bucket.push(key);
|
|
468
|
+
}
|
|
469
|
+
else
|
|
470
|
+
byName.set(name, [key]);
|
|
471
|
+
};
|
|
472
|
+
for (const key of resolved.keys())
|
|
473
|
+
remember(key);
|
|
474
|
+
const lookup = (name, type) => {
|
|
475
|
+
const normalized = normalizeCandidateName(name);
|
|
476
|
+
if (!normalized)
|
|
477
|
+
return undefined;
|
|
478
|
+
if (type) {
|
|
479
|
+
const exact = `${type}:${normalized}`;
|
|
480
|
+
if (resolved.has(exact))
|
|
481
|
+
return exact;
|
|
482
|
+
}
|
|
483
|
+
// 没给类型(或给的类型对不上)时按名字找:判重认的是指称,不是类型。
|
|
484
|
+
return byName.get(normalized)?.[0];
|
|
485
|
+
};
|
|
486
|
+
/** 候选键 → 图上的节点键。找不到对应卡片时返回 undefined,由调用方决定怎么兜底。 */
|
|
487
|
+
const nodeKey = (name, type) => {
|
|
488
|
+
const key = lookup(name, type);
|
|
489
|
+
if (!key)
|
|
490
|
+
return undefined;
|
|
491
|
+
const card = resolved.get(key);
|
|
492
|
+
return card ? `${card.entityType}:${card.entityId}` : key;
|
|
493
|
+
};
|
|
494
|
+
const fresh = [];
|
|
495
|
+
const merges = [];
|
|
496
|
+
const relations = [];
|
|
497
|
+
/** 本次已判为「新建」的 key(含别名):同一份文档里的重复写法不再各建一张。 */
|
|
498
|
+
const freshKeys = new Set();
|
|
499
|
+
const register = (key, card) => {
|
|
500
|
+
if (!resolved.has(key))
|
|
501
|
+
resolved.set(key, card);
|
|
502
|
+
remember(key);
|
|
503
|
+
};
|
|
504
|
+
for (const candidate of candidates) {
|
|
505
|
+
if (candidate.kind === 'relation') {
|
|
506
|
+
const targetName = candidate.target?.name ?? '';
|
|
507
|
+
if (!candidate.name.trim() || !targetName.trim())
|
|
508
|
+
continue;
|
|
509
|
+
const targetType = candidate.target?.type;
|
|
510
|
+
relations.push({
|
|
511
|
+
// 解析不出来时退回候选键:它一定不在 nodeMap 里,装配阶段会把它计入
|
|
512
|
+
// relationsDropped —— 这比在这里凭空造一个节点诚实。
|
|
513
|
+
fromKey: nodeKey(candidate.name, candidate.type) ?? candidateKey({ type: candidate.type, name: candidate.name }),
|
|
514
|
+
toKey: nodeKey(targetName, targetType) ?? candidateKey({ type: targetType ?? candidate.type, name: targetName }),
|
|
515
|
+
relation: candidate.relation ?? RELATES_TO,
|
|
516
|
+
sourceId: candidate.evidence.sourceId,
|
|
517
|
+
});
|
|
518
|
+
continue;
|
|
519
|
+
}
|
|
520
|
+
const key = candidateKey(candidate);
|
|
521
|
+
if (freshKeys.has(key))
|
|
522
|
+
continue;
|
|
523
|
+
const existing = resolved.get(key);
|
|
524
|
+
if (existing) {
|
|
525
|
+
merges.push({ key, entityId: existing.entityId, entityType: existing.entityType, sourceId: candidate.evidence.sourceId, body: candidate.body ?? '' });
|
|
526
|
+
continue;
|
|
527
|
+
}
|
|
528
|
+
fresh.push(candidate);
|
|
529
|
+
const projected = {
|
|
530
|
+
entityId: candidateEntityId(candidate.name),
|
|
531
|
+
entityType: candidate.type,
|
|
532
|
+
title: candidate.name,
|
|
533
|
+
status: 'unreviewed',
|
|
534
|
+
content: candidate.body ?? '',
|
|
535
|
+
sourceRefs: [candidate.evidence.sourceId],
|
|
536
|
+
metadata: {},
|
|
537
|
+
updatedAt: '',
|
|
538
|
+
};
|
|
539
|
+
freshKeys.add(key);
|
|
540
|
+
register(key, projected);
|
|
541
|
+
for (const alias of candidate.aliases ?? []) {
|
|
542
|
+
const aliasKey = candidateKey({ type: candidate.type, name: alias });
|
|
543
|
+
freshKeys.add(aliasKey);
|
|
544
|
+
register(aliasKey, projected);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
return { fresh, merges, relations };
|
|
548
|
+
}
|
|
549
|
+
//# sourceMappingURL=extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/extract.ts"],"names":[],"mappings":"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"}
|