dsh-data-domain-knowledge 0.1.0-alpha.6 → 0.1.0-alpha.9
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/README.md +180 -58
- package/cordis.patch.yml +27 -25
- package/eval/README.md +2 -2
- package/eval/datasets/diagnosis-cases/cases.md +899 -0
- package/eval/evaluate-retrieval.mjs +1 -1
- package/lib/client.js +6849 -5966
- package/lib/doc-page.js +20 -14
- package/lib/pages.js +21351 -0
- package/lib/types/axis-contract.d.ts +9 -0
- package/lib/types/axis-contract.d.ts.map +1 -0
- package/lib/types/axis-contract.js +35 -0
- package/lib/types/axis-contract.js.map +1 -0
- package/lib/types/axis-registry.d.ts +304 -0
- package/lib/types/axis-registry.d.ts.map +1 -0
- package/lib/types/axis-registry.js +744 -0
- package/lib/types/axis-registry.js.map +1 -0
- package/lib/types/card-organize.d.ts +315 -0
- package/lib/types/card-organize.d.ts.map +1 -0
- package/lib/types/card-organize.js +668 -0
- package/lib/types/card-organize.js.map +1 -0
- package/lib/types/config-schema.d.ts +6 -8
- package/lib/types/config-schema.d.ts.map +1 -1
- package/lib/types/config-schema.js +5 -7
- package/lib/types/config-schema.js.map +1 -1
- package/lib/types/convert/host.d.ts.map +1 -1
- package/lib/types/convert/host.js +6 -43
- package/lib/types/convert/host.js.map +1 -1
- package/lib/types/convert/ingest.d.ts +14 -19
- package/lib/types/convert/ingest.d.ts.map +1 -1
- package/lib/types/convert/ingest.js +114 -40
- package/lib/types/convert/ingest.js.map +1 -1
- package/lib/types/convert/settings-schema.d.ts +2 -2
- package/lib/types/convert/settings-schema.d.ts.map +1 -1
- package/lib/types/convert/settings-schema.js +2 -2
- package/lib/types/convert/settings-schema.js.map +1 -1
- package/lib/types/diagnosis/cards.d.ts +26 -8
- package/lib/types/diagnosis/cards.d.ts.map +1 -1
- package/lib/types/diagnosis/cards.js +29 -10
- package/lib/types/diagnosis/cards.js.map +1 -1
- package/lib/types/diagnosis/schema.d.ts +1 -1
- package/lib/types/diagnosis/seed-source.d.ts +0 -9
- package/lib/types/diagnosis/seed-source.d.ts.map +1 -1
- package/lib/types/diagnosis/seed-source.js +2 -4
- package/lib/types/diagnosis/seed-source.js.map +1 -1
- package/lib/types/diagnosis/seed.d.ts +2 -2
- package/lib/types/diagnosis/seed.js +2 -2
- package/lib/types/diagnosis/store.d.ts +10 -5
- package/lib/types/diagnosis/store.d.ts.map +1 -1
- package/lib/types/diagnosis/store.js +18 -18
- package/lib/types/diagnosis/store.js.map +1 -1
- package/lib/types/extract-model.d.ts +7 -7
- package/lib/types/extract-model.d.ts.map +1 -1
- package/lib/types/extract-model.js +14 -10
- package/lib/types/extract-model.js.map +1 -1
- package/lib/types/extract.d.ts +2 -2
- package/lib/types/extract.js +2 -2
- package/lib/types/extraction-runs.d.ts +97 -0
- package/lib/types/extraction-runs.d.ts.map +1 -0
- package/lib/types/extraction-runs.js +169 -0
- package/lib/types/extraction-runs.js.map +1 -0
- package/lib/types/fs-atomic.d.ts.map +1 -1
- package/lib/types/fs-atomic.js +1 -2
- package/lib/types/fs-atomic.js.map +1 -1
- package/lib/types/fts.d.ts +2 -3
- package/lib/types/fts.d.ts.map +1 -1
- package/lib/types/index.d.ts +6 -10
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +761 -178
- package/lib/types/index.js.map +1 -1
- package/lib/types/intent/engine.d.ts +11 -5
- package/lib/types/intent/engine.d.ts.map +1 -1
- package/lib/types/intent/engine.js +29 -80
- package/lib/types/intent/engine.js.map +1 -1
- package/lib/types/intent/host.d.ts +8 -25
- package/lib/types/intent/host.d.ts.map +1 -1
- package/lib/types/intent/host.js +26 -211
- package/lib/types/intent/host.js.map +1 -1
- package/lib/types/intent/preset-tools.d.ts +2 -2
- package/lib/types/intent/preset-tools.js +3 -3
- package/lib/types/intent/store.d.ts +16 -58
- package/lib/types/intent/store.d.ts.map +1 -1
- package/lib/types/intent/store.js +202 -102
- package/lib/types/intent/store.js.map +1 -1
- package/lib/types/intent/tools.d.ts +6 -11
- package/lib/types/intent/tools.d.ts.map +1 -1
- package/lib/types/intent/tools.js +8 -28
- package/lib/types/intent/tools.js.map +1 -1
- package/lib/types/intent/types.d.ts +9 -35
- package/lib/types/intent/types.d.ts.map +1 -1
- package/lib/types/intent/types.js +2 -8
- package/lib/types/intent/types.js.map +1 -1
- package/lib/types/knowledge-bases.d.ts +8 -117
- package/lib/types/knowledge-bases.d.ts.map +1 -1
- package/lib/types/knowledge-bases.js +21 -674
- package/lib/types/knowledge-bases.js.map +1 -1
- package/lib/types/knowledge.d.ts +550 -0
- package/lib/types/knowledge.d.ts.map +1 -0
- package/lib/types/knowledge.js +1213 -0
- package/lib/types/knowledge.js.map +1 -0
- package/lib/types/layout.d.ts +102 -28
- package/lib/types/layout.d.ts.map +1 -1
- package/lib/types/layout.js +104 -28
- package/lib/types/layout.js.map +1 -1
- package/lib/types/migrate.d.ts.map +1 -1
- package/lib/types/migrate.js +47 -4
- package/lib/types/migrate.js.map +1 -1
- package/lib/types/model-text.d.ts +1 -1
- package/lib/types/model-text.js +1 -1
- package/lib/types/oplog.d.ts +98 -0
- package/lib/types/oplog.d.ts.map +1 -0
- package/lib/types/oplog.js +178 -0
- package/lib/types/oplog.js.map +1 -0
- package/lib/types/present.d.ts +0 -3
- package/lib/types/present.d.ts.map +1 -1
- package/lib/types/present.js +6 -7
- package/lib/types/present.js.map +1 -1
- package/lib/types/query-analysis.d.ts +37 -0
- package/lib/types/query-analysis.d.ts.map +1 -0
- package/lib/types/query-analysis.js +103 -0
- package/lib/types/query-analysis.js.map +1 -0
- package/lib/types/recall-rank.d.ts +2 -2
- package/lib/types/recall-rank.d.ts.map +1 -1
- package/lib/types/recall-rank.js +3 -3
- package/lib/types/recall-rank.js.map +1 -1
- package/lib/types/runtime.d.ts +1057 -203
- package/lib/types/runtime.d.ts.map +1 -1
- package/lib/types/runtime.js +4518 -1316
- package/lib/types/runtime.js.map +1 -1
- package/lib/types/settings-schema.d.ts +6 -14
- package/lib/types/settings-schema.d.ts.map +1 -1
- package/lib/types/settings-schema.js +5 -7
- package/lib/types/settings-schema.js.map +1 -1
- package/lib/types/source-images.d.ts +33 -0
- package/lib/types/source-images.d.ts.map +1 -1
- package/lib/types/source-images.js +56 -0
- package/lib/types/source-images.js.map +1 -1
- package/lib/types/store/derived.d.ts +145 -0
- package/lib/types/store/derived.d.ts.map +1 -0
- package/lib/types/store/derived.js +295 -0
- package/lib/types/store/derived.js.map +1 -0
- package/lib/types/store/knowledge-db.d.ts +404 -0
- package/lib/types/store/knowledge-db.d.ts.map +1 -0
- package/lib/types/store/knowledge-db.js +1198 -0
- package/lib/types/store/knowledge-db.js.map +1 -0
- package/lib/types/store/migrate.d.ts +172 -0
- package/lib/types/store/migrate.d.ts.map +1 -0
- package/lib/types/store/migrate.js +498 -0
- package/lib/types/store/migrate.js.map +1 -0
- package/lib/types/store/views.d.ts +118 -0
- package/lib/types/store/views.d.ts.map +1 -0
- package/lib/types/store/views.js +237 -0
- package/lib/types/store/views.js.map +1 -0
- package/lib/types/types.d.ts +331 -253
- package/lib/types/types.d.ts.map +1 -1
- package/lib/types/types.js +26 -350
- package/lib/types/types.js.map +1 -1
- package/lib/types/wiki-finalize.d.ts +48 -31
- package/lib/types/wiki-finalize.d.ts.map +1 -1
- package/lib/types/wiki-finalize.js +65 -39
- package/lib/types/wiki-finalize.js.map +1 -1
- package/lib/types/wiki-materialize.d.ts +84 -0
- package/lib/types/wiki-materialize.d.ts.map +1 -0
- package/lib/types/wiki-materialize.js +171 -0
- package/lib/types/wiki-materialize.js.map +1 -0
- package/lib/types/wiki-trial-types.d.ts +298 -0
- package/lib/types/wiki-trial-types.d.ts.map +1 -0
- package/lib/types/wiki-trial-types.js +18 -0
- package/lib/types/wiki-trial-types.js.map +1 -0
- package/lib/types/wiki-trial.d.ts +255 -0
- package/lib/types/wiki-trial.d.ts.map +1 -0
- package/lib/types/wiki-trial.js +1191 -0
- package/lib/types/wiki-trial.js.map +1 -0
- package/lib/types/wiki-types.d.ts +15 -17
- package/lib/types/wiki-types.d.ts.map +1 -1
- package/lib/types/wiki-types.js +46 -70
- package/lib/types/wiki-types.js.map +1 -1
- package/package.json +8 -5
- package/preset/tita-data-agent/agent.cordis.yml +23 -20
- package/scripts/doctor.mjs +5 -9
- package/scripts/e2e-pipeline.mjs +0 -3
- package/src/axis-contract.ts +35 -0
- package/src/axis-registry.ts +880 -0
- package/src/card-organize.ts +836 -0
- package/src/client/AgentPresetCard.tsx +3 -3
- package/src/client/AttributionEventGuide.tsx +175 -0
- package/src/client/AxisMatrix.tsx +389 -0
- package/src/client/AxisRegistrySection.tsx +394 -0
- package/src/client/CompileDialogs.tsx +265 -0
- package/src/client/DeleteDocumentDialog.tsx +198 -0
- package/src/client/DirectoryPicker.tsx +12 -78
- package/src/client/ExpansionGraph.tsx +251 -0
- package/src/client/ImportFilesDialog.tsx +331 -0
- package/src/client/InfoHint.tsx +40 -5
- package/src/client/{IntentLogicTab.tsx → IntentLogic.tsx} +33 -26
- package/src/client/IntentTab.tsx +152 -589
- package/src/client/KnowledgeBaseTab.tsx +1774 -754
- package/src/client/KnowledgeLayerSection.tsx +629 -0
- package/src/client/KnowledgePanel.tsx +78 -22
- package/src/client/KnowledgeStepRail.tsx +17 -12
- package/src/client/KnowledgeToolRow.tsx +299 -126
- package/src/client/ListPager.tsx +81 -0
- package/src/client/NodeSettings.tsx +28 -48
- package/src/client/OperationLogTab.tsx +295 -0
- package/src/client/PreviewSections.tsx +431 -62
- package/src/client/RecallPanel.tsx +376 -105
- package/src/client/RelatedGraph.tsx +221 -0
- package/src/client/TabGuide.tsx +439 -0
- package/src/client/TrialReportView.tsx +449 -0
- package/src/client/TypeDefinitionDrawer.tsx +38 -285
- package/src/client/WikiCardPreview.tsx +277 -0
- package/src/client/WikiCardReview.tsx +93 -104
- package/src/client/WikiCardRow.tsx +121 -0
- package/src/client/WikiFlowPanel.tsx +577 -0
- package/src/client/WikiTrialRun.tsx +216 -0
- package/src/client/agent-preset.ts +3 -3
- package/src/client/arch/AgentArchitectureGraph.tsx +2 -2
- package/src/client/arch/NodeLogicPanel.tsx +2 -2
- package/src/client/arch/ProblemDetailPanel.tsx +2 -2
- package/src/client/arch/model.ts +147 -16
- package/src/client/architecture.tsx +79 -75
- package/src/client/asset-images.ts +30 -3
- package/src/client/attribution/AttributionGraph.tsx +2 -2
- package/src/client/attribution/AttributionTab.tsx +41 -11
- package/src/client/attribution/CaseView.tsx +2 -2
- package/src/client/attribution/GraphStage.tsx +1 -1
- package/src/client/attribution/RunView.tsx +2 -2
- package/src/client/attribution/StageChrome.tsx +2 -2
- package/src/client/attribution/ViewSwitch.tsx +2 -2
- package/src/client/axis-lookup.ts +74 -0
- package/src/client/config-scope.ts +2 -2
- package/src/client/convert/ConvertPanel.tsx +11 -54
- package/src/client/doc-page.css +2 -2
- package/src/client/doc-page.tsx +8 -11
- package/src/client/graph/edges.ts +42 -0
- package/src/client/graph/expansion.ts +71 -0
- package/src/client/graph/layout.ts +112 -99
- package/src/client/graph/related.ts +235 -0
- package/src/client/index.ts +12 -6
- package/src/client/ledger.tsx +436 -0
- package/src/client/pages.css +461 -0
- package/src/client/pages.tsx +255 -0
- package/src/client/preview-citations.ts +145 -0
- package/src/client/problem-domains.ts +5 -5
- package/src/client/styles.css +1692 -189
- package/src/client/useFitScale.ts +10 -10
- package/src/client/wiki-trial.ts +414 -0
- package/src/config-schema.ts +6 -10
- package/src/convert/host.ts +6 -44
- package/src/convert/ingest.ts +128 -55
- package/src/convert/settings-schema.ts +2 -2
- package/src/diagnosis/cards.ts +42 -11
- package/src/diagnosis/schema.ts +1 -1
- package/src/diagnosis/seed-source.ts +2 -13
- package/src/diagnosis/seed.ts +2 -2
- package/src/diagnosis/store.ts +18 -18
- package/src/extract-model.ts +15 -11
- package/src/extract.ts +4 -4
- package/src/extraction-runs.ts +216 -0
- package/src/fs-atomic.ts +1 -2
- package/src/fts.ts +2 -2
- package/src/index.ts +717 -173
- package/src/intent/README.md +27 -50
- package/src/intent/engine.ts +28 -78
- package/src/intent/host.ts +30 -218
- package/src/intent/preset-tools.ts +3 -3
- package/src/intent/store.ts +180 -105
- package/src/intent/tools.ts +8 -35
- package/src/intent/types.ts +9 -32
- package/src/knowledge-bases.ts +29 -672
- package/src/knowledge.ts +1524 -0
- package/src/layout.ts +106 -29
- package/src/migrate.ts +45 -4
- package/src/model-text.ts +1 -1
- package/src/oplog.ts +214 -0
- package/src/present.ts +9 -10
- package/src/python/embedding_worker.py +17 -2
- package/src/query-analysis.ts +135 -0
- package/src/recall-rank.ts +4 -4
- package/src/runtime.ts +4662 -1267
- package/src/settings-schema.ts +5 -7
- package/src/source-images.ts +55 -0
- package/src/store/derived.ts +316 -0
- package/src/store/knowledge-db.ts +1375 -0
- package/src/store/migrate.ts +590 -0
- package/src/store/views.ts +313 -0
- package/src/types.ts +338 -554
- package/src/wiki-finalize.ts +72 -43
- package/src/wiki-materialize.ts +213 -0
- package/src/wiki-trial-types.ts +293 -0
- package/src/wiki-trial.ts +1319 -0
- package/src/wiki-types.ts +47 -78
- package/lib/types/intent/settings-schema.d.ts +0 -59
- package/lib/types/intent/settings-schema.d.ts.map +0 -1
- package/lib/types/intent/settings-schema.js +0 -57
- package/lib/types/intent/settings-schema.js.map +0 -1
- package/src/client/KnowledgeGraphView.tsx +0 -306
- package/src/client/WikiFlowCard.tsx +0 -188
- package/src/client/WikiTypeEditor.tsx +0 -434
- package/src/client/graph.css +0 -113
- package/src/client/wiki-type-groups.ts +0 -86
- package/src/intent/settings-schema.ts +0 -63
package/README.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# dsh-data-domain-knowledge
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
本地知识库插件:一个知识库是一个目录,里面四样东西。`knowledge.db` 保存 **SourceRaw**
|
|
4
|
+
(原始可追溯文档)、按主题聚合可双向链接的 wiki 卡片,以及**两者的每一个版本**;
|
|
5
|
+
`derived.db` 输出可检索的 **wikiNotes**、wiki
|
|
5
6
|
知识图谱和向量索引,`<agentRoot>/memory/<库 id>` 保存版本快照、访问审计与反馈。默认使用本地 WeMM Python backend:从 WeMM
|
|
6
7
|
原生 2048 维向量按 MRL 截取 1024 维,先做 binary/Hamming 粗筛,再用 int8 点积精算余弦
|
|
7
8
|
(这是**向量路内部的粗排 → 精算**,与 stage 4 的 cross-encoder **重排**不是一回事);
|
|
@@ -15,24 +16,24 @@
|
|
|
15
16
|
| 视图 | 面板标签 | 冻结契约 |
|
|
16
17
|
| --- | --- | --- |
|
|
17
18
|
| `overview` | Agent 概览 | 各设置的挂载节点 |
|
|
18
|
-
| `intent` | 意图 | `
|
|
19
|
+
| `intent` | 意图 | `intent_record` / `intent_store_view`、`/intent/*` 路由、`titaDataAgentIntent` 服务;会话审计留痕落 `<agentRoot>/intent/` |
|
|
19
20
|
| `knowledge` | 知识库 | `recall_knowledge` 等工具名、`/knowledge/*` 与 `/convert` 路由、`tita-data-agent-knowledge` / `-convert` 设置 |
|
|
20
|
-
| `memory` | 记忆 |
|
|
21
|
+
| `memory` | 记忆 | 抽取轨迹、轴 / Knowledge 真源、处理日志、`feedback.ndjson`、`access-audit.ndjson`,根在 `<agentRoot>/memory/<库 id>`;磁盘目录布局 |
|
|
21
22
|
| `eval` | 评测 | 问题集格式(开发期能力,不注册运行时入口) |
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
意图的**会话审计留痕**落在 `<agentRoot>/intent/`:`intent.db` 保存当前记录与追加历史
|
|
25
|
+
(按 `sessionKey#turn` 读取时取当前版本,所以内存里「一轮一条」的语义不变)。旧的
|
|
26
|
+
`records.ndjson` 只做一次性迁移,不再继续写入。
|
|
27
|
+
分类与 act 是代码内置的固定契约,不提供编辑入口。读接口 `/intent/store` 与 `/intent/overview` 读的是**留痕**:
|
|
27
28
|
引擎内存里那份有 600 秒 TTL,重启或隔一段时间回来不该让面板上的历史凭空消失。
|
|
28
29
|
|
|
29
30
|
## 五段链路
|
|
30
31
|
|
|
31
32
|
| 段 | 名称 | 产物 | 关键配置 |
|
|
32
33
|
| --- | --- | --- | --- |
|
|
33
|
-
| 1 | SourceRaw | 原始可追溯文档:`
|
|
34
|
-
| 2 | 编译 Compile | wiki:`
|
|
35
|
-
| 3 | 构建 Build | wikiNotes → 向量索引;wiki → `
|
|
34
|
+
| 1 | SourceRaw | 原始可追溯文档:`knowledge.db` 的 `source` + `blob` | `allowSourceTruth` / `rootDir` |
|
|
35
|
+
| 2 | 编译 Compile | wiki:`knowledge.db` 的 `card`(**按 wiki 类型 schema 抽实体,直接入库**);wikiNotes:`derived.db` 的 `wiki_notes.json` | `extractCandidates` / `extractWithModel` / `wikiTypes` |
|
|
36
|
+
| 3 | 构建 Build | wikiNotes → 向量索引;wiki → `derived.db` 的 `knowledge_graph.json` | `embeddingProvider` / `embeddingModel` / `python` |
|
|
36
37
|
| 4 | 召回 Recall | 多路(关键词 + 向量 + 知识图谱)召回 wikiNotes,取 `recallTopK`(默认 10),再解析父级 wiki 与该 wiki 的 1 跳知识图谱 | `recallTopK` / `recallMode` |
|
|
37
38
|
| 5 | 重排 Rerank | BERT cross-encoder 对候选 wikiNotes 精排,取 `contextTopN`(默认 5)组成 `context` | `contextTopN` / `rerankProvider` / `rerankModel` |
|
|
38
39
|
|
|
@@ -40,6 +41,61 @@
|
|
|
40
41
|
> 但「跑一次真实召回长什么样」是一个问题,分两栏会让用户先跑召回、再切到重排才能
|
|
41
42
|
> 看到同一次运行的全貌。
|
|
42
43
|
|
|
44
|
+
## Knowledge / Wiki Card 的存储约束
|
|
45
|
+
|
|
46
|
+
这套存储的边界固定如下,不因检索策略变化而把所有内容塞进同一张表:
|
|
47
|
+
|
|
48
|
+
| 层 | 真源 | 说明 |
|
|
49
|
+
| --- | --- | --- |
|
|
50
|
+
| Knowledge | `knowledge` + `knowledge_sources` | 原子事实、坐标、来源、状态;不保存 Card 的排版 |
|
|
51
|
+
| Wiki Card | `card` + `blob` + `revision` | 面向阅读和召回组装的正文;正文中的 Markdown 标题是 Section 真源 |
|
|
52
|
+
| Knowledge 落位 | `card_knowledge` | 记录 Knowledge 在某张 Card 中的 Section 和顺序;这是关联索引,不是 Knowledge 属性 |
|
|
53
|
+
| Wiki Note / FTS / Vector / Graph | 派生文件 | 可以从 Card 和 Knowledge 重新构建,不是真实知识来源 |
|
|
54
|
+
|
|
55
|
+
### 状态语义
|
|
56
|
+
|
|
57
|
+
Knowledge 的状态回答“这条事实现在能否被当作事实使用”,Card 的 status/review 回答“这张卡的内容是否被审核、是否适合展示”。两者不互相替代:
|
|
58
|
+
|
|
59
|
+
- `candidate`:已进入真源但还没有人工或规则确认;可以召回,但必须标注“待确认”。
|
|
60
|
+
- `active`:当前可作为正常事实使用。
|
|
61
|
+
- `disputed`:存在相反来源;两条知识都保留,召回时必须显式提示。
|
|
62
|
+
- `deprecated`:历史上成立或曾被采用,但当前不应作为首选事实;仍保留用于追溯。
|
|
63
|
+
|
|
64
|
+
### 身份与 Scope
|
|
65
|
+
|
|
66
|
+
Knowledge ID 只在一个 `knowledge.db` 内有意义。相同文本在同一个知识库内,即使来自不同来源或不同 Coordinate,也沿用同一个 ID;Coordinate 是归类和落位信息,不是当前的判重键。不同知识库是不同 Scope,不会因为 ID 算法相同而自动合并。
|
|
67
|
+
|
|
68
|
+
这意味着当前实现适用于“一个知识库对应一个业务范围”的模型。未来如果一个库需要混合多个租户、环境或有效期,再把 Scope 纳入判重策略。
|
|
69
|
+
|
|
70
|
+
### Knowledge 类型
|
|
71
|
+
|
|
72
|
+
当前不把 `Fact` / `Rule` / `Procedure` / `Constraint` 加成 Knowledge 的正式列。类型暂作为抽取或 Card metadata 的扩展信息,只有当不同类型需要不同的召回、验证或执行策略时,才升级为结构化字段。
|
|
73
|
+
|
|
74
|
+
## Knowledge、Wiki Card、Wiki Note 的生命周期
|
|
75
|
+
|
|
76
|
+
三者不是三个并列的知识真源,而是同一条知识链上的三个层次:
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
SourceRaw → Knowledge → Wiki Card → Wiki Note → FTS / Vector / Rerank
|
|
80
|
+
事实真源 阅读组织视图 检索派生片段
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
- Knowledge 是不可由 Card 反向重建的事实记录。抽取、来源追加、合并、冲突裁决和状态变化都发生在这里。
|
|
84
|
+
- Wiki Card 是 Knowledge 的组织视图。Card 正文、摘要、Section 和阅读顺序可以重新编排;重新编排不应修改 Knowledge。
|
|
85
|
+
- Wiki Note 是 Card 的检索切片。它没有独立的业务生命周期,`status` 只是父 Card 状态的快照;Card 变化后重新编译 Wiki Note,索引随之重建。
|
|
86
|
+
|
|
87
|
+
状态也按层分开:Knowledge 使用 `candidate / active / disputed / deprecated`,Card 使用 `unreviewed / draft / reviewed / active / deprecated / problem`。同名状态不表示同一件事:Knowledge 的 `active` 是事实可采用,Card 的 `active` 是页面可展示。
|
|
88
|
+
|
|
89
|
+
因此,删除来源、合并 Knowledge、修改 Card 或重建检索索引时,都必须沿着这条依赖方向处理,不能直接把 Wiki Note 当成可编辑知识,也不能用 Card review 代替 Knowledge 验证。
|
|
90
|
+
|
|
91
|
+
> **0062 v2(2026-10-05)**:正文、版本与 Knowledge 搬进 `<库根>/knowledge.db`,编译产物
|
|
92
|
+
> 搬进 `<库根>/derived.db`,图片搬进 `<库根>/assets/`。
|
|
93
|
+
> **0067(2026-10-06)**:转换的**原始输入**(那份 PDF / Word / HTML)搬进 `<库根>/source_raw/`,
|
|
94
|
+
> 位置记在 `source` 表的 `original_rel` / `original_sha256` / `original_bytes` 三列上。
|
|
95
|
+
> **知识库内不再有段目录**(原先的
|
|
96
|
+
> `01_source_raw` / `02_wiki` / `03_compiled` / `05_diagnosis` 由迁移导入后删除)。
|
|
97
|
+
> 「知识树能被用户直接读」由导出通道接住:`POST /knowledge/export`。
|
|
98
|
+
>
|
|
43
99
|
> 术语迁移:SourceRaw 曾叫 SourceRow / SourceTruth。磁盘目录 `01_source_raw`、工具名
|
|
44
100
|
> `add_source` / `query_source_truth`、HTTP `/knowledge/sources`、设置键 `allowSourceTruth`
|
|
45
101
|
> 与错误码 `SOURCE_TRUTH_DISABLED` 作为兼容名保留,语义等同 SourceRaw。
|
|
@@ -87,22 +143,16 @@
|
|
|
87
143
|
(规范形,知识库根相对)、`_assets/…`(转换内核早期写进 SourceRaw 的形式)、
|
|
88
144
|
`../../01_source_raw/_assets/…`(`cardHints` 给手工建卡的形式)。文档的资产清单与卡片的
|
|
89
145
|
`imagePaths` 走同一个 `assetRefCandidates`(根目录 → `01_source_raw/` → 文件自己的目录),
|
|
90
|
-
|
|
146
|
+
否则同一张图在文档里找得到、在卡片里找不到。派生字段(图片路径、溯源链)变了也算
|
|
91
147
|
「语料变了」,否则增量编译的空操作会把刷新结果丢掉。
|
|
92
|
-
- **SourceRaw 的 front matter 是 OKF v0.2 形状**(0048):`
|
|
93
|
-
|
|
148
|
+
- **SourceRaw 的 front matter 是 OKF v0.2 形状**(0048):`title`、`description`、
|
|
149
|
+
`resource`(底层资产地址)、`tags`、
|
|
94
150
|
`generated: {by, at}`(`by` = 谁解析的,`at` = **采集时间** —— OKF 里没有「抓取时间」
|
|
95
151
|
这个概念)、`sources: [{id, resource, title, author, last_modified}]`(对网页就是那个页面
|
|
96
152
|
本身:地址、标题、作者、发布时间)。`source_id` / `external_id` / `created_at` /
|
|
97
153
|
`updated_at` / `metadata` / `lineage` 是我们的扩展键(OKF 明确允许,且要求消费者容忍
|
|
98
|
-
|
|
99
|
-
(只搬已有的值,不编作者与发布时间 —— 0048 之前适配器把它们抽出来就扔了)。
|
|
154
|
+
未知键)。旧 schema 的知识库不做兼容迁移,需要重新建立。
|
|
100
155
|
规范:<https://github.com/GoogleCloudPlatform/open-knowledge-format>(v0.2)。
|
|
101
|
-
- **来源分类可以声明元数据字段**(0048):`SourceTypeDef.metadataFields` 是
|
|
102
|
-
`{key, label, description, required}` 的清单,`key` 用 front matter 顶层键或
|
|
103
|
-
`sources[0].author` 这种路径。面板「类型定义 → 来源分类」里可编辑;缺必填字段时
|
|
104
|
-
`add_source` 回一条 warning(`status: partial`)而**不拒收** —— 元数据缺失是信息不全,
|
|
105
|
-
不是「这份知识不存在」,拒收的代价是知识直接丢了。
|
|
106
156
|
- **召回组装按「卡片」而不是按「片段」**(0050):R1–R3 不变(多路召回 + RRF + 对候选池重排,
|
|
107
157
|
召回与重排的对象都是 wikiNotes),R4 改成四步 —— ① 取 notes 对应的 wiki 去重,一张卡片的等级
|
|
108
158
|
取它名下 note 的**最高重排分**,命中的小节挂在同一条上;② **在这之后**做 wiki → wiki 的
|
|
@@ -118,9 +168,9 @@
|
|
|
118
168
|
含被预算挡住的),末尾写「最终 N 个 wiki 进上下文」。旋钮跟着步骤走:路线与召回 topK 在第一步,
|
|
119
169
|
上下文 topN 在第三步。这份「面板账本」只在 HTTP 的 `detail=true` 上返回,工具调用不带它。
|
|
120
170
|
- **编译的收尾段产出三样东西**(0049),都不调模型:
|
|
121
|
-
①**索引页** `
|
|
171
|
+
①**索引页** `derived.db` 的 `wiki-index.md` —— 按类型分组列出库里现有的卡片(链接 + 状态 +
|
|
122
172
|
待补数),末尾单列断链。它刻意不写生成时间与版本号:写了它每次重建都变一个字节,而增量
|
|
123
|
-
|
|
173
|
+
编译要靠「索引页变了没有」判断这一轮要不要真的落盘。落在派生库而不是卡片那一层,
|
|
124
174
|
因为后者每一份 `.md` 都会被当成一张卡片读进卡片清单。
|
|
125
175
|
②**相关卡片** —— 写进卡片正文末尾一块(块首带 `<!-- compiled:related -->`,整块替换而不是
|
|
126
176
|
追加)。关系来源有两个:来源文档里写明的关系(双向都记),以及「同一份来源」(补前面没覆盖
|
|
@@ -194,14 +244,15 @@ BERT 重排默认使用 `BAAI/bge-reranker-base`;如需完全离线,可把
|
|
|
194
244
|
运行),底层是 `@firecrawl/anydoc`(MIT / Rust / 预编译绑定),支持 doc、docx、ppt、
|
|
195
245
|
pptx、xls、xlsx、odt、ods、odp、rtf、epub、csv 与文本层 PDF;另有本地音视频/图片
|
|
196
246
|
(`iddoc`)、扫描件轻量 OCR(`scanned`:`.pdf` 报 `needsOcr` 时**自动兜底**)与
|
|
197
|
-
网页 / 微信公众号文章(`web
|
|
247
|
+
网页 / 微信公众号文章(`web`:收另存到本机的 `.html/.htm` 页面,从 `og:url` / `canonical`
|
|
248
|
+
把原始地址找回来;内核不联网,`kind=url` 已从契约删除)。
|
|
198
249
|
|
|
199
250
|
| 项 | 值 |
|
|
200
251
|
| --- | --- |
|
|
201
252
|
| 工具 | `convert_capabilities` / `convert_source` / `convert_task` / `convert_ingest`(后两个写操作需本轮审批) |
|
|
202
253
|
| 路由 | `/convert/**`(含内核 Vue3 控制台) |
|
|
203
254
|
| 设置命名空间 | `tita-data-agent-convert`(冻结契约,由本插件安装) |
|
|
204
|
-
| 交付目录 |
|
|
255
|
+
| 交付目录 | `<工作区>/output/<YYYY-MM-DD>/<中文名>/`(`index.md` / `assets/` / `manifest.json`);叶子名取文档标题,同名让路 `-2` |
|
|
205
256
|
|
|
206
257
|
**依赖是可选的。** `dsh-convert-core` 声明在 `optionalDependencies`,首次调用时才加载。
|
|
207
258
|
平台没有 anydoc 预编译绑定、或用户显式不装时,
|
|
@@ -219,10 +270,10 @@ pptx、xls、xlsx、odt、ods、odp、rtf、epub、csv 与文本层 PDF;另有
|
|
|
219
270
|
**不传 `kb` 的旧接口与旧工具一律作用于默认库,行为不变**。
|
|
220
271
|
|
|
221
272
|
```ts
|
|
222
|
-
interface KnowledgeBase { id; name; description; rootDir; isDefault;
|
|
273
|
+
interface KnowledgeBase { id; name; description; rootDir; isDefault; wikiTypes; createdAt; updatedAt; sourceCount; cardCount; noteCount; buildVersion }
|
|
223
274
|
```
|
|
224
275
|
|
|
225
|
-
`sourceCount` / `cardCount` / `noteCount` / `buildVersion`
|
|
276
|
+
`sourceCount` / `cardCount` / `noteCount` / `buildVersion` 都是
|
|
226
277
|
**计算字段**,由真实 runtime 重新统计并缓存进同一个 JSON,
|
|
227
278
|
HTTP `GET /knowledge/bases` 在返回前先刷新。
|
|
228
279
|
|
|
@@ -231,14 +282,14 @@ HTTP `GET /knowledge/bases` 在返回前先刷新。
|
|
|
231
282
|
| 段 | 装什么 | 删掉的后果 |
|
|
232
283
|
| --- | --- | --- |
|
|
233
284
|
| `domain_knowledge/` | 知识树,按知识库 id 分叉 | 丢数据 |
|
|
234
|
-
| `memory/<知识库 id>/` |
|
|
235
|
-
| `intent/` | `
|
|
285
|
+
| `memory/<知识库 id>/` | 抽取轨迹、轴 / Knowledge 真源、处理日志、反馈与访问审计(append-only) | 丢历史,不可重建 |
|
|
286
|
+
| `intent/` | `intent.db`(当前记录 + 审计历史) | 丢审计流 |
|
|
236
287
|
| `output/` | 交付物,二级按日期分桶 | 什么都不损失 |
|
|
237
288
|
| `tmp/` | 运行期临时文件,二级按日期分桶 | 只影响未完成的任务 |
|
|
238
289
|
| `resource/` | 模型、Python 环境、`knowledge-bases.json` | 失去语义检索(嵌入/重排不可用) |
|
|
239
290
|
|
|
240
|
-
|
|
241
|
-
|
|
291
|
+
**记忆与意图为什么与知识树平级**:记忆装的是**关于这个 Agent 的动作留痕**(抽取轨迹、
|
|
292
|
+
轴与 Knowledge 真源、处理日志、审计流水),不是关于知识的断言;留在知识树里会让「备份知识树」
|
|
242
293
|
被迫连审计一起备份,也让「知识树有哪几段」这个问题混进一个横切层。意图则是**会话级**的
|
|
243
294
|
(同一句话在哪个知识库下说,理解方式不该变),所以它不分库。这样知识、记忆、意图三段
|
|
244
295
|
都是可以直接备份、直接 diff 的用户文件。
|
|
@@ -248,12 +299,12 @@ HTTP `GET /knowledge/bases` 在返回前先刷新。
|
|
|
248
299
|
|
|
249
300
|
| 段 | 装什么 | 删掉的后果 |
|
|
250
301
|
| --- | --- | --- |
|
|
251
|
-
| `01_source_raw
|
|
302
|
+
| `01_source_raw/` | SourceRaw,文件名 = 标题(0051) | 丢数据 |
|
|
252
303
|
| `02_wiki/<entity_type>/` | Wiki 卡片,一级是卡片类型 | 丢结论 |
|
|
253
304
|
| `03_compiled/` | wikiNotes / 向量 / 知识图谱 / 归因图谱 | 可重建 |
|
|
254
305
|
|
|
255
|
-
**归因图谱也在这三段里**(v1.1
|
|
256
|
-
|
|
306
|
+
**归因图谱也在这三段里**(v1.1):一次排查的产物是一份带溯源信息的 SourceRaw(落
|
|
307
|
+
`01_source_raw/`),模板卡由类型定义派生、不落盘,字段级的归因图
|
|
257
308
|
落 `03_compiled/diagnosis_graph.json`。旧的 `05_diagnosis/` 撤销了;它里面的 `*.jsonl`
|
|
258
309
|
如果还在,角色是**只读的迁移输入与历史快照** —— 不再被写,但仍然读得出来(证据与根因
|
|
259
310
|
就从那里来),所以旧知识根不会因为这次改动而读不出内容。
|
|
@@ -263,7 +314,7 @@ schema 段已撤掉:它从建出来那天起就是一个**空目录**,分类
|
|
|
263
314
|
启动时会把空的那个目录删掉 —— **非空则保留**:那就不属于「没用的空文件夹」了,
|
|
264
315
|
删掉别人的文件比留一个空目录危险得多。
|
|
265
316
|
|
|
266
|
-
**文件名用标题(0051)。** `01_source_raw
|
|
317
|
+
**文件名用标题(0051)。** `01_source_raw/阿里集团大数据建设OneData体系.md` —— `ls`
|
|
267
318
|
认得出、`grep` 文件名有用、`git diff` 看得出改的是哪份材料;`source_id`(`article:bc82…`)仍是
|
|
268
319
|
稳定身份,住在 front matter 里。三条配套规则:①标题里的路径不安全字符换成 `-`、截断到 120 字符、
|
|
269
320
|
只剩替换字符时退回 `source_id`;②**重名默认拒收**(`SOURCE_TITLE_DUPLICATED`,报错指出被谁占着,
|
|
@@ -272,13 +323,8 @@ schema 段已撤掉:它从建出来那天起就是一个**空目录**,分类
|
|
|
272
323
|
并回一条 warning。改名与迁移(老段名 `01_source_truth` → `01_source_raw`、文件名换成标题)在
|
|
273
324
|
`ensureLayout` 里一次性完成,**可重入**;存量正文里带老段名的图片引用不改写,解析器认两个段名。
|
|
274
325
|
|
|
275
|
-
`01_source_raw`
|
|
276
|
-
|
|
277
|
-
层面直接成立,不依赖界面。平铺在真实使用里会先变成垃圾场 —— 几十份来源混在一层,`ls`
|
|
278
|
-
读不出「我的指标口径在哪」。启动时一次性把平铺的文档搬进分类目录;读路径不依赖这个层级
|
|
279
|
-
(启动时会递归扫全段建 slug → path 索引),所以旧布局、新布局与两者并存的中间态
|
|
280
|
-
都能读。**改分类 = 换目录**:`add_source` 用同一 `sourceId` 配新 `sourceType` 时,旧目录
|
|
281
|
-
里那份会被删掉,不会留下孤儿。
|
|
326
|
+
`01_source_raw` 直接平铺来源文档:文件名就是标题,`source_id` 保留稳定身份,格式、作者、
|
|
327
|
+
外部链接等通用信息写在 front matter。目录结构不承担业务分类职责。
|
|
282
328
|
|
|
283
329
|
`resource/` 装模型、虚拟环境与 `knowledge-bases.json` —— 「这个 Agent 的全部磁盘足迹」
|
|
284
330
|
因此是一个目录,备份 / 迁移 / 整个删掉都只需要认一个路径。模型与虚拟环境原先住在
|
|
@@ -316,17 +362,21 @@ GB);旧的 `TITA_DATA_AGENT_HOME` 留在解析链上作为兜底,所以搬
|
|
|
316
362
|
```text
|
|
317
363
|
GET /knowledge/bases → { bases, defaultBaseId }
|
|
318
364
|
POST /knowledge/bases { name, description?, rootDir? } → { base }
|
|
319
|
-
PATCH /knowledge/bases/:id { name?, description?,
|
|
365
|
+
PATCH /knowledge/bases/:id { name?, description?, wikiTypes? } → { base }
|
|
320
366
|
DELETE /knowledge/bases/:id → { deleted: true }
|
|
321
|
-
GET /knowledge/documents?kb=&query=&
|
|
367
|
+
GET /knowledge/documents?kb=&query=&limit=&offset= → { documents, total }
|
|
322
368
|
GET /knowledge/documents/:docId?kb= → { document }(正文截前 4000 字符)
|
|
323
369
|
GET /knowledge/documents/:docId/content?kb=&offset=&limit= → { text, offset, nextOffset, totalChars, eof }
|
|
324
370
|
GET /knowledge/documents/:docId/view?kb= → 独立整页(HTML,读全文)
|
|
325
371
|
GET /knowledge/documents/:docId/versions?kb= → { versions }
|
|
372
|
+
GET /knowledge/documents/:docId/delete-impact?kb= → { knowledge, cards, extractionRuns }(只读,删除前查账)
|
|
326
373
|
POST /knowledge/documents/:docId/revert?kb= { versionId } → { document }
|
|
327
|
-
DELETE /knowledge/documents/:docId?kb= → { deleted: true }
|
|
374
|
+
DELETE /knowledge/documents/:docId?kb= → { deleted: true }(级联:知识、卡片、抽取轨迹)
|
|
328
375
|
GET /knowledge/assets/:kb/* → 知识库根目录下的文件流
|
|
329
376
|
GET /knowledge/doc-page.js → 独立整页的脚本(构建产物)
|
|
377
|
+
GET /knowledge/pages/trial?kb= → 抽取试跑(HTML 整页)
|
|
378
|
+
GET /knowledge/pages/help/:topic → 说明整页(compile / intent)
|
|
379
|
+
GET /knowledge/pages.js → 通用整页的脚本(构建产物)
|
|
330
380
|
POST /knowledge/import { kb, sources[], compile? } → { written[], failed[], attempted, compile|null }
|
|
331
381
|
POST /knowledge/card-annotate { kb, entity_id, kind?, note?, remove_id? } → { entityId, annotations, reviewScore }
|
|
332
382
|
POST /knowledge/card-review { kb, entity_id, action } → { entityId, review, reviewScore, status }
|
|
@@ -353,8 +403,8 @@ POST /diagnosis/run { kb, record } → { sourceI
|
|
|
353
403
|
成因。要读全文走 `.../view` 那个独立整页:它按 `offset`/`limit` **一页一段**地取
|
|
354
404
|
(默认 20000 字符一页,切点对齐空行),所以任何一次响应都不与文档大小成正比。
|
|
355
405
|
|
|
356
|
-
`/knowledge/stats`、`/knowledge/search`、`/knowledge/rebuild`、`/knowledge/
|
|
357
|
-
`/knowledge/sources`、`/knowledge/graph`、`/knowledge/embedding/health` 与全部
|
|
406
|
+
`/knowledge/stats`、`/knowledge/search`、`/knowledge/rebuild`、`/knowledge/export`、
|
|
407
|
+
`/knowledge/cards`、`/knowledge/sources`、`/knowledge/graph`、`/knowledge/embedding/health` 与全部
|
|
358
408
|
`*_knowledge*` 工具都接受**可选** `kb`(query 或 body 字段)。`docId` 含 `:`
|
|
359
409
|
(如 `document:ab12…`),必须 URL 编码。
|
|
360
410
|
|
|
@@ -362,9 +412,6 @@ POST /diagnosis/run { kb, record } → { sourceI
|
|
|
362
412
|
|
|
363
413
|
| 操作 | 条件 | 错误码 | HTTP |
|
|
364
414
|
| --- | --- | --- | --- |
|
|
365
|
-
| `DELETE /knowledge/bases/:id/source-types/:typeId` | 内置分类 | `SOURCE_TYPE_BUILTIN_LOCKED` | 409 |
|
|
366
|
-
| `DELETE /knowledge/bases/:id/source-types/:typeId` | 该分类下还有来源 | `SOURCE_TYPE_IN_USE` | 409 |
|
|
367
|
-
| `PATCH /knowledge/bases/:id`(`sourceTypes` 丢掉在用分类) | 该分类下还有来源 | `SOURCE_TYPE_IN_USE` | 409 |
|
|
368
415
|
| `DELETE /knowledge/bases/:id` | 目标库是默认库 | `BASE_IS_DEFAULT` | 409 |
|
|
369
416
|
| `DELETE /knowledge/bases/:id` | 库里还有文档 | `BASE_IN_USE` | 409 |
|
|
370
417
|
|
|
@@ -372,17 +419,92 @@ POST /diagnosis/run { kb, record } → { sourceI
|
|
|
372
419
|
同时给出 envelope 的 `error.code` 与顶层 `code`/`message`。删除知识库只删注册表条目,
|
|
373
420
|
**不删磁盘内容**(删文档用 `DELETE /knowledge/documents/:docId`)。
|
|
374
421
|
|
|
422
|
+
### 抽取的参考:已有坐标进提示词(0068)
|
|
423
|
+
|
|
424
|
+
抽取提示词里**带上了库里已有的坐标**(名字 + 别名 + 定义 + 人写的指导),模型据此**指认**
|
|
425
|
+
「原文讲的这个东西就是已有的某一个」,而不是每份文档都造一套新名字:
|
|
426
|
+
|
|
427
|
+
```jsonc
|
|
428
|
+
// 模型输出的 objects / actions / scenes 每一项
|
|
429
|
+
{ "name": "坑位点击", "definition": "一句话说清它指什么", "existing": "通天塔坑位click" }
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
三条要点:
|
|
433
|
+
|
|
434
|
+
- **模型的话是提案**。`existing` 要换成实体 id 才交给注册表,而换不到(查不到 / 不同轴 /
|
|
435
|
+
已被并)就退回机械解析 + 新建 —— 与卡片层 `existing_id` 同一条纪律。
|
|
436
|
+
- **定义有主**。模型只在新建时写、或给一个还没有定义的实体补一次;人改过之后
|
|
437
|
+
(`description_source = human`)模型一个字都改不了。
|
|
438
|
+
- **截断不静默**。每类最多下发 200 条,超了在提示词里明说「还有 N 个没列出来」,报告里
|
|
439
|
+
写「下发 40 / 共 312」。模型看不到某条坐标时会把「清单里没有」读成「库里没有」。
|
|
440
|
+
|
|
441
|
+
坐标清单进的是**用户提示词**(system 是缓存前缀,不许带库内数据)。每库还有一条
|
|
442
|
+
**坐标提取备注**(`knowledge-bases.json` 的 `extractionNote`),逐字进提示词 ——
|
|
443
|
+
它是用户唯一能「指挥模型怎么认坐标」的地方,抽取规则本身不可编辑。
|
|
444
|
+
|
|
445
|
+
### 坐标即卡片身份(0069)
|
|
446
|
+
|
|
447
|
+
```text
|
|
448
|
+
Document ──▶ Knowledge × N ──▶ 坐标 (对象 × 动作 × 场景) ──▶ Wiki Card(唯一)──▶ 章节是检索单元
|
|
449
|
+
索引 组织与交付视图 知识是证据层
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
> **一个坐标最多一张卡**,这件事由 `knowledge.db` 的 `card.coordinate_key` **主键**兜着,
|
|
453
|
+
> 不是靠约定。`entity_id` 仍保留为旧接口、版本历史和关联表使用的稳定别名。
|
|
454
|
+
|
|
455
|
+
四条要点:
|
|
456
|
+
|
|
457
|
+
- **卡片上记着它的坐标**(`card.object_id / action_id / scene_id` + front matter 的
|
|
458
|
+
`coordinate`)。坐标在这一层是**轴实体 id**,卡名只是显示 —— 0069 之前坐标算出来、
|
|
459
|
+
推出卡名、然后被丢掉,「这张卡是哪个坐标」只能从卡名字面反推。
|
|
460
|
+
- **判重的顺序是「先坐标,再认领,最后新建」**。第 2 级「认领」同时是存量数据的迁移
|
|
461
|
+
路径:0069 之前的卡片三列全空、**补不回来也不许猜**,由第一份带来该坐标的文档把它绑上。
|
|
462
|
+
- **不同坐标推同一个卡名 = 两张卡**(0069 之前它们会被按名字静默并成一张)。
|
|
463
|
+
撞名仍然报 warning,但它的后果从「身份错」退化成「标题重」。
|
|
464
|
+
- **落位落库**(`card_knowledge`,0063 §4.5):`section` / `ordinal` 是**关联**的属性。
|
|
465
|
+
召回命中**章节**之后,按这一节取它落位的知识(含四档状态与出处引文)——
|
|
466
|
+
0069 之前 `disputed`(「有相反的说法」)渲染进正文后与确定的事实长得一样。
|
|
467
|
+
|
|
468
|
+
**坐标不替代图。** 图是**从 Knowledge 派生的可选关系索引**,回答的是「通天塔依赖哪些表」
|
|
469
|
+
这类任意关系与反向关系;坐标回答的是「这条知识关于什么」。见
|
|
470
|
+
[docs/current/14](../../docs/current/14-智能归因.md) §7.3。
|
|
471
|
+
|
|
375
472
|
### 版本存储与回滚语义
|
|
376
473
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
`
|
|
382
|
-
|
|
474
|
+
**版本住在 `knowledge.db` 的 `revision` 表里**(0062 v2)。一次写入 = 一行 `revision`
|
|
475
|
+
(身份是 `(entity_kind, entity_id, version)`)+ 一行 `blob`(正文按 sha256 内容寻址)。
|
|
476
|
+
正文完全相同的重复写入**不产生新版本**,只更新 front matter 那类记账字段。
|
|
477
|
+
`listVersions` / `cardVersions` 返回新→旧,并把当前 head 标成 `isCurrent: true`;
|
|
478
|
+
`versionId` 就是**整数版本号的字符串形式**(卡片那些旧 `'head'` 哨兵会被 `VERSION_IS_HEAD`
|
|
479
|
+
拒掉)。
|
|
480
|
+
|
|
481
|
+
**回滚 = 用历史版本的正文重新写一次**:回滚前会把当时的 head 再记一版,所以历史只增不减,
|
|
482
|
+
**回滚本身也可回滚**。回滚到当前版本是 no-op。
|
|
483
|
+
|
|
484
|
+
`memory/<库 id>/source-versions/` 与 `card-versions/` 是**旧的文件式快照**:仍然被读
|
|
485
|
+
(迁移把它们当历史导入),但**不再被写**。
|
|
486
|
+
|
|
487
|
+
### 起编译的语义(0066)
|
|
488
|
+
|
|
489
|
+
`POST /knowledge/rebuild` **立即返回** `202 { runId, queued }` —— 它只回答「这一趟的编号
|
|
490
|
+
是什么」与「前面还有没有人在跑」。编译在后台跑完,结论写进
|
|
491
|
+
`GET /knowledge/compile-progress` 的记录里:
|
|
492
|
+
|
|
493
|
+
```jsonc
|
|
494
|
+
{ "progress": { "runId": "rebuild_…", "startedAt": "…", "finishedAt": "…",
|
|
495
|
+
"steps": [ /* 四段 */ ], "outcome": "索引 v21:…",
|
|
496
|
+
"report": { /* 与旧版 rebuild 响应同一份 RebuildReport */ } } }
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
`?runId=<编号>` 指名要哪一趟;不给编号时给**正在跑**的那一趟(没有在跑就给最近结束的那一趟)。
|
|
500
|
+
已结束的记录按编号留 8 条,所以后面那一趟开始跑**不会**抹掉上一趟的结论。
|
|
501
|
+
|
|
502
|
+
**为什么结论不走那条 POST 的响应**:编译是分钟量级的,而一条 HTTP 请求活不了那么久。实机上
|
|
503
|
+
312 秒的编译在 300 秒被切断,面板于是把「请求死了」读成「没有编译」—— 而编译 11 秒后就成功了。
|
|
504
|
+
结论因此落在**与任何一条请求都无关**的记录里。
|
|
383
505
|
|
|
384
|
-
|
|
385
|
-
|
|
506
|
+
`rebuild_knowledge` 工具**仍然是同步的**(`runtime.rebuild()`):工具调用不是浏览器请求,
|
|
507
|
+
等得起,要的就是「跑完了,结论是什么」。同一时刻只有一次编译在跑,后来的排队。
|
|
386
508
|
|
|
387
509
|
### 召回链路(两路 + 图谱 boost)
|
|
388
510
|
|
package/cordis.patch.yml
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
# data-domain-knowledge bundle patch: mount the knowledge / intent / convert host.
|
|
1
|
+
# data-domain-knowledge bundle patch: mount the knowledge / intent audit / convert host.
|
|
2
2
|
#
|
|
3
3
|
# 0.1.7 起这条 entry **自己就是设置文档**:插件导出的 `Config`(见
|
|
4
|
-
# `src/config-schema.ts
|
|
5
|
-
#
|
|
6
|
-
# `-intent` / `-convert`)。设置页里的改动由 `configEditor` 写回**本 entry 的
|
|
4
|
+
# `src/config-schema.ts`)把两块设置合成一个 schema —— `knowledge` / `convert`。
|
|
5
|
+
# 会话意图使用固定审计契约,不属于 entry config。设置页里的改动由 `configEditor` 写回**本 entry 的
|
|
7
6
|
# `config:`**,客户端按路径读写(`{op:'set', path:['knowledge','recallTopK']}`)。
|
|
8
7
|
#
|
|
9
|
-
# 所以这里**故意不写 `config
|
|
8
|
+
# 所以这里**故意不写 `config:`**:两组字段全都有 schema `.default()`,而
|
|
10
9
|
# `knowledge.agentRoot` 的默认值就是 `~/Desktop/titaagent`(`defaultAgentRoot()`,
|
|
11
10
|
# 可被 `DSH_AGENT_ROOT` 覆盖)。往这里写死一个 `agentRoot` 会把「Agent 的家在哪」
|
|
12
11
|
# 这件事从代码挪进某台机器的配置文件里 —— 那正是 0029 想收拢的那一个答案。
|
|
@@ -43,8 +42,8 @@
|
|
|
43
42
|
# 提示词。这一行是**这个 preset 存在的理由** —— 它 shadow 掉部署级的 persona,
|
|
44
43
|
# 所以只有加入这个 preset 的会话会以数据 Agent 的身份说话。提示词正文就在下面,
|
|
45
44
|
# 直接改它即可;改完**新建一个会话**才生效(preset 在会话创建时固定)。
|
|
46
|
-
# 2. **意图工具**(`intent-tools` 行):`intent_record` / `intent_store_view`
|
|
47
|
-
#
|
|
45
|
+
# 2. **意图工具**(`intent-tools` 行):`intent_record` / `intent_store_view` 两个工具
|
|
46
|
+
# 搬到 agent 平面,只有这个 preset 的会话能看到。
|
|
48
47
|
# DSH 里「只有某个 preset 能用」唯一支持的形态就是注册作用域,所以它们必须在这里
|
|
49
48
|
# 挂载,而不是在宿主平面全局注册(那会让每个 agent 都看到 intent_record)。
|
|
50
49
|
# 3. **子代理不许继承意图工具**:子代理会加入父会话的组合,所以要在 delegation 的每一
|
|
@@ -76,14 +75,17 @@
|
|
|
76
75
|
|
|
77
76
|
## What you work with
|
|
78
77
|
|
|
79
|
-
- **The knowledge store.** Each knowledge base
|
|
80
|
-
`
|
|
81
|
-
rewritten, kept so
|
|
82
|
-
|
|
83
|
-
`source_refs`, each following a type (`concept`, `metric`, `table`,
|
|
84
|
-
`playbook`, `case`)
|
|
85
|
-
|
|
86
|
-
|
|
78
|
+
- **The knowledge store.** Each knowledge base is one directory holding three
|
|
79
|
+
things. `knowledge.db` is the knowledge itself: SourceRaw (the original
|
|
80
|
+
business documents, never rewritten, kept so a conclusion can point back at
|
|
81
|
+
where it came from), the cards people read — one per entity, each with
|
|
82
|
+
mandatory `source_refs`, each following a type (`concept`, `metric`, `table`,
|
|
83
|
+
`event`, `playbook`, `case`) — and every version of both, plus who changed
|
|
84
|
+
what and when. `derived.db` is what `recall_knowledge` actually searches:
|
|
85
|
+
wikiNotes, a vector index, a knowledge graph and a keyword index; it is
|
|
86
|
+
recomputed, never backed up. `assets/` holds images. There are no
|
|
87
|
+
per-segment folders inside a base; use the knowledge tools, not the
|
|
88
|
+
filesystem, to read or write documents. There can be several bases.
|
|
87
89
|
|
|
88
90
|
- **The data surfaces, which are a different thing.** `workbook_*` reads and
|
|
89
91
|
writes the workbooks the user has open; `notebook_*` runs SQL in the user's
|
|
@@ -92,8 +94,9 @@
|
|
|
92
94
|
a `table` card says what one row means. Computing without the definition gets
|
|
93
95
|
you a number nobody agreed to.
|
|
94
96
|
|
|
95
|
-
- **Conversion.** `convert_source` turns a file
|
|
96
|
-
|
|
97
|
+
- **Conversion.** `convert_source` turns a local file (including a web page
|
|
98
|
+
saved to disk as `.html`) or a video into knowledge-ready Markdown and says
|
|
99
|
+
where it landed. It never fetches a URL itself. It is not knowledge until
|
|
97
100
|
`convert_ingest` has run, so keep saying which of the two steps you are on.
|
|
98
101
|
|
|
99
102
|
## Working rules
|
|
@@ -147,10 +150,13 @@
|
|
|
147
150
|
9. **Deliverables belong to the project, not to your home.** Write every file
|
|
148
151
|
you produce for the user under `output/<YYYY-MM-DD>/` in your working
|
|
149
152
|
directory, never into the Agent root: the Agent root accumulates across
|
|
150
|
-
projects, a deliverable belongs to one. Name
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
153
|
+
projects, a deliverable belongs to one. Name the file `<中文名>.<ext>` — at
|
|
154
|
+
most 25 characters, keeping 汉字, letters, digits, `-`, `_` and `.`, and
|
|
155
|
+
turning spaces and punctuation into `-` (so `销售汇总` stays `销售汇总`, and
|
|
156
|
+
you write `月度销售汇总.xlsx`, not `output1.xlsx`). **Do not repeat the date
|
|
157
|
+
in the file name**: the directory already carries it, and the name alone has
|
|
158
|
+
to say what the file is a year later. Append `-2`, `-3` rather than
|
|
159
|
+
overwriting, and say the path in your answer.
|
|
154
160
|
|
|
155
161
|
## How to write
|
|
156
162
|
|
|
@@ -332,7 +338,6 @@
|
|
|
332
338
|
deny:
|
|
333
339
|
- intent_record
|
|
334
340
|
- intent_store_view
|
|
335
|
-
- intent_registry_list
|
|
336
341
|
|
|
337
342
|
# Fork omits model selection so provider/model stay equal to the parent and
|
|
338
343
|
# the inherited history remains eligible for KV Cache reuse. This preset
|
|
@@ -348,7 +353,6 @@
|
|
|
348
353
|
deny:
|
|
349
354
|
- intent_record
|
|
350
355
|
- intent_store_view
|
|
351
|
-
- intent_registry_list
|
|
352
356
|
|
|
353
357
|
# Production dsh does not install these optional providers. Install the
|
|
354
358
|
# matching Bundle in this Profile and restart the Host, then copy this
|
|
@@ -366,7 +370,6 @@
|
|
|
366
370
|
deny:
|
|
367
371
|
- intent_record
|
|
368
372
|
- intent_store_view
|
|
369
|
-
- intent_registry_list
|
|
370
373
|
|
|
371
374
|
- id: tool-subagent-claude-code
|
|
372
375
|
name: '@deepseek-ai/dsh-tool-subagent'
|
|
@@ -380,7 +383,6 @@
|
|
|
380
383
|
deny:
|
|
381
384
|
- intent_record
|
|
382
385
|
- intent_store_view
|
|
383
|
-
- intent_registry_list
|
|
384
386
|
|
|
385
387
|
# 0.1.7 把这行换掉了:旧包名 `@deepseek-ai/dsh-workflow-worker-thread` 在
|
|
386
388
|
# 0.1.7 的安装里已经不存在,对应物是 `@deepseek-ai/dsh-workflow-ptc`
|
package/eval/README.md
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
## qrels 格式
|
|
8
8
|
|
|
9
9
|
每行一个 JSON 对象,`relevant_unit_ids` 使用编译后的稳定 `unitId`,例如
|
|
10
|
-
`metric:sales_amount`。可以附加 `
|
|
11
|
-
|
|
10
|
+
`metric:sales_amount`。可以附加 `include_problems` 和 `subset`,用于分组评测文本、
|
|
11
|
+
图片 Markdown、表格截图等场景。
|
|
12
12
|
|
|
13
13
|
```json
|
|
14
14
|
{"id":"q1","query":"销售额如何计算","relevant_unit_ids":["metric:sales_amount"],"subset":"text"}
|