@theseus-whale/dsh-continuity 0.0.0-stage → 4.12.2
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/INSTALL.md +25 -0
- package/PANEL.md +92 -0
- package/README.md +286 -2
- package/RELEASE-NOTES.md +732 -0
- package/bin/bc-acceptance-full.mjs +91 -0
- package/bin/bc-acceptance-tight.mjs +66 -0
- package/bin/bc-acceptance.mjs +22 -0
- package/bin/bc-add-keywords.mjs +21 -0
- package/bin/bc-demo.mjs +47 -0
- package/bin/bc-expand-hint.mjs +179 -0
- package/bin/bc-ingest-index.mjs +35 -0
- package/bin/bc-ingest.mjs +31 -0
- package/bin/bc-label-demo.mjs +18 -0
- package/bin/bc-relabel.mjs +150 -0
- package/bin/bc-sessionize.mjs +59 -0
- package/bin/coref_pipeline.py +47 -0
- package/bin/coref_service.py +57 -0
- package/bin/debug_ckip.py +16 -0
- package/bin/debug_ner_zh.py +18 -0
- package/bin/doctor.mjs +275 -0
- package/bin/en_ner_error_audit.py +33 -0
- package/bin/eval-label-rules.mjs +342 -0
- package/bin/export-turns.py +68 -0
- package/bin/extract-user-paragraph.mjs +14 -0
- package/bin/extraction-composite-smoke.mjs +28 -0
- package/bin/extraction-latency.mjs +58 -0
- package/bin/extraction-user-smoke.mjs +28 -0
- package/bin/extraction_service.py +164 -0
- package/bin/facet-active-experiment.mjs +110 -0
- package/bin/facet-covid.mjs +8 -0
- package/bin/facet-curve.mjs +27 -0
- package/bin/facet-embedding-train.mjs +20 -0
- package/bin/facet-embedding-validate.mjs +83 -0
- package/bin/facet-eval-roleplay.mjs +42 -0
- package/bin/facet-eval.mjs +38 -0
- package/bin/facet-fold.mjs +31 -0
- package/bin/facet-load.mjs +16 -0
- package/bin/facet-mlp-scan.mjs +45 -0
- package/bin/facet-mvp.mjs +34 -0
- package/bin/facet-online-experiments.mjs +78 -0
- package/bin/facet-online-race.mjs +99 -0
- package/bin/facet-online-validate.mjs +51 -0
- package/bin/facet-panel.mjs +22 -0
- package/bin/facet-passage.mjs +41 -0
- package/bin/facet-random-validate.mjs +48 -0
- package/bin/facet-roleplay.mjs +33 -0
- package/bin/facet-scan.mjs +56 -0
- package/bin/facet-segment.mjs +34 -0
- package/bin/facet-train.mjs +19 -0
- package/bin/facet-validate.mjs +103 -0
- package/bin/facet-zeroshot.mjs +14 -0
- package/bin/install-templates.mjs +72 -0
- package/bin/memory-bench.mjs +53 -0
- package/bin/memory-build-summary.mjs +43 -0
- package/bin/memory-build-vector.mjs +31 -0
- package/bin/memory-build.mjs +41 -0
- package/bin/memory-calibration.mjs +70 -0
- package/bin/memory-closed-loop.mjs +119 -0
- package/bin/memory-dry-run.mjs +70 -0
- package/bin/memory-eval.mjs +104 -0
- package/bin/memory-event-alias-test.mjs +89 -0
- package/bin/memory-extraction-bench.mjs +58 -0
- package/bin/memory-load-gate-replay.mjs +137 -0
- package/bin/memory-loop-test.mjs +90 -0
- package/bin/memory-pre-turn-harness.mjs +63 -0
- package/bin/memory-query.mjs +39 -0
- package/bin/memory-replay-hints.mjs +84 -0
- package/bin/memory-scale.mjs +58 -0
- package/bin/memory-scenario-test.mjs +146 -0
- package/bin/memory-user-loop.mjs +95 -0
- package/bin/ner_bench_tiny_zh.py +59 -0
- package/bin/ner_bench_zh.py +60 -0
- package/bin/ner_conll_en.py +139 -0
- package/bin/ner_direct_en.py +123 -0
- package/bin/ner_direct_zh.py +100 -0
- package/bin/ner_pipeline.py +208 -0
- package/bin/noise-selfcheck.mjs +50 -0
- package/bin/pack-integrity.mjs +47 -0
- package/bin/panel-check.mjs +57 -0
- package/bin/plugin-integrity.mjs +74 -0
- package/bin/preview-live.mjs +13 -0
- package/bin/public-install-check.mjs +222 -0
- package/bin/relabel-apply.mjs +272 -0
- package/bin/relabel-dry-run.mjs +381 -0
- package/bin/relik_pipeline.py +39 -0
- package/bin/relik_service.py +52 -0
- package/bin/srl_pipeline.py +55 -0
- package/bin/srl_service.py +68 -0
- package/bin/summary-index.mjs +151 -0
- package/bin/summary-query.mjs +79 -0
- package/bin/vec-check.mjs +27 -0
- package/bin/zh_ner_error_audit.py +36 -0
- package/bin/zh_ner_slot_eval.py +38 -0
- package/client.js +760 -0
- package/cordis.patch.yml +378 -0
- package/docs/API-NOTES.md +1743 -0
- package/docs/ARCHITECTURE.md +355 -0
- package/docs/CACHE.md +253 -0
- package/docs/CONDUCT.md +30 -0
- package/docs/CREATOR-HANDOFF.md +102 -0
- package/docs/EXPERIMENT.md +136 -0
- package/docs/FACET-MVP-REPORT.md +473 -0
- package/docs/GUIDE-0.4.66.md +195 -0
- package/docs/GUIDE.md +127 -0
- package/docs/MECHANISM.md +243 -0
- package/docs/NEW-INSTANCE-HANDOFF.md +219 -0
- package/docs/README.md +37 -0
- package/docs/SESSION-LAYOUT.md +151 -0
- package/docs/history-map.md +249 -0
- package/docs/relabel-migration-wiring.md +366 -0
- package/guides/00-READ-FIRST.md +206 -0
- package/guides/01-INSTALL.md +207 -0
- package/guides/02-TABLES.md +225 -0
- package/guides/03-AUDIT.md +201 -0
- package/guides/04-REBUILD.md +306 -0
- package/guides/05-FIRST-RUN.md +191 -0
- package/guides/06-EMBEDDING.md +146 -0
- package/guides/07-PTC-AND-ASSETS.md +221 -0
- package/icon.svg +7 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/models/README.md +13 -0
- package/models/Xenova/bge-small-zh-v1.5/config.json +31 -0
- package/models/Xenova/bge-small-zh-v1.5/onnx/model_quantized.onnx +0 -0
- package/models/Xenova/bge-small-zh-v1.5/tokenizer.json +21278 -0
- package/models/Xenova/bge-small-zh-v1.5/tokenizer_config.json +15 -0
- package/package.json +139 -4
- package/src/asset-tool.mjs +237 -0
- package/src/assets.mjs +244 -0
- package/src/backfill.mjs +74 -0
- package/src/backup.mjs +80 -0
- package/src/deadend.mjs +95 -0
- package/src/deleted-store.mjs +35 -0
- package/src/engine.mjs +3831 -0
- package/src/facets/classifier.mjs +146 -0
- package/src/facets/embedding-service.mjs +53 -0
- package/src/facets/embedding-worker.mjs +27 -0
- package/src/facets/embedding.mjs +163 -0
- package/src/facets/extract.mjs +80 -0
- package/src/facets/fold-plan.mjs +84 -0
- package/src/facets/hybrid.mjs +29 -0
- package/src/facets/index.mjs +113 -0
- package/src/facets/linear-probe.mjs +43 -0
- package/src/facets/load.mjs +37 -0
- package/src/facets/mlp-probe.mjs +54 -0
- package/src/facets/mlp-service.mjs +53 -0
- package/src/facets/mlp-worker.mjs +26 -0
- package/src/facets/online-knn.mjs +58 -0
- package/src/facets/online-models.mjs +227 -0
- package/src/facets/panel-state.mjs +23 -0
- package/src/facets/panel.mjs +73 -0
- package/src/facets/random.mjs +26 -0
- package/src/facets/scanner.mjs +35 -0
- package/src/facets/schema.mjs +75 -0
- package/src/facets/seed-examples.mjs +58 -0
- package/src/facets/sensitivity.mjs +98 -0
- package/src/facets/service.mjs +53 -0
- package/src/facets/store.mjs +39 -0
- package/src/facets/worker.mjs +23 -0
- package/src/folds-store.mjs +109 -0
- package/src/groups.mjs +167 -0
- package/src/handoff-tool.mjs +51 -0
- package/src/handoff.mjs +127 -0
- package/src/index.mjs +649 -0
- package/src/inject-policy.mjs +17 -0
- package/src/learning.mjs +88 -0
- package/src/memory/alias-proposal.mjs +40 -0
- package/src/memory/bc-audit.mjs +245 -0
- package/src/memory/bc-index-updater.mjs +404 -0
- package/src/memory/bc-index.mjs +48 -0
- package/src/memory/bc-label.mjs +220 -0
- package/src/memory/bc-panel-state.mjs +107 -0
- package/src/memory/bc-pre-step.mjs +463 -0
- package/src/memory/bc-recall.mjs +470 -0
- package/src/memory/bc-shift.mjs +123 -0
- package/src/memory/bc-store.mjs +41 -0
- package/src/memory/bm25.mjs +112 -0
- package/src/memory/calibration.mjs +54 -0
- package/src/memory/chatter.mjs +29 -0
- package/src/memory/cmap-file.mjs +107 -0
- package/src/memory/concepts-file.mjs +41 -0
- package/src/memory/coref-slots.mjs +40 -0
- package/src/memory/event-alias-ledger.mjs +87 -0
- package/src/memory/event-log.mjs +95 -0
- package/src/memory/event-model.mjs +132 -0
- package/src/memory/event-segmenter.mjs +36 -0
- package/src/memory/event-summary-tree.mjs +122 -0
- package/src/memory/extraction-adapter.mjs +76 -0
- package/src/memory/extraction-composite.mjs +75 -0
- package/src/memory/extraction-core.mjs +76 -0
- package/src/memory/extraction-pre-step.mjs +161 -0
- package/src/memory/extraction-provider.mjs +300 -0
- package/src/memory/extraction-score.mjs +36 -0
- package/src/memory/facet-stabilizer.mjs +59 -0
- package/src/memory/history-map.mjs +139 -0
- package/src/memory/language-router.mjs +30 -0
- package/src/memory/load-gate.mjs +161 -0
- package/src/memory/mechanical-note.mjs +104 -0
- package/src/memory/onboarding.mjs +163 -0
- package/src/memory/persona.mjs +78 -0
- package/src/memory/planner.mjs +249 -0
- package/src/memory/pre-turn.mjs +80 -0
- package/src/memory/query-aliases.mjs +39 -0
- package/src/memory/recall-cue.mjs +43 -0
- package/src/memory/recall.mjs +65 -0
- package/src/memory/referent-candidates.mjs +55 -0
- package/src/memory/referent-ledger.mjs +86 -0
- package/src/memory/relabel-migrate.mjs +376 -0
- package/src/memory/relik-adapter.mjs +25 -0
- package/src/memory/special-keywords.mjs +60 -0
- package/src/memory/structured-adapters.mjs +75 -0
- package/src/memory/summary-index.mjs +335 -0
- package/src/memory/summary-tree.mjs +110 -0
- package/src/memory/term-extractor.mjs +44 -0
- package/src/memory/tokenize.mjs +9 -0
- package/src/memory/vector-index.mjs +54 -0
- package/src/memory/window-summary.mjs +133 -0
- package/src/mood.mjs +133 -0
- package/src/peer-tool.mjs +63 -0
- package/src/peer.mjs +144 -0
- package/src/policy.mjs +170 -0
- package/src/preflight.mjs +113 -0
- package/src/provenance.mjs +94 -0
- package/src/range.mjs +75 -0
- package/src/recall-exact-tool.mjs +267 -0
- package/src/recall-tool.mjs +521 -0
- package/src/recheck.mjs +99 -0
- package/src/save-start.mjs +29 -0
- package/src/session-guard.mjs +140 -0
- package/src/session-log-tool.mjs +322 -0
- package/src/session-log.mjs +606 -0
- package/src/skills.mjs +111 -0
- package/src/split-range.mjs +115 -0
- package/src/state.mjs +198 -0
- package/src/t0.mjs +149 -0
- package/src/tag-confirm.mjs +78 -0
- package/src/tag-detect.mjs +42 -0
- package/src/tag-maintenance.mjs +285 -0
- package/src/tag-reject.mjs +73 -0
- package/src/tags-store.mjs +94 -0
- package/src/tags.mjs +692 -0
- package/src/threads-backend.mjs +26 -0
- package/src/threads-core.mjs +1887 -0
- package/src/threads-store.mjs +207 -0
- package/src/threads-tool.mjs +522 -0
- package/src/threads.mjs +929 -0
- package/src/tool-preview.mjs +427 -0
- package/src/topic.mjs +63 -0
- package/src/training.mjs +75 -0
- package/src/turn-tag.mjs +62 -0
- package/src/user-turn.mjs +39 -0
- package/templates/cmap.md +11 -0
- package/templates/concepts.md +12 -0
- package/templates/habits.md +40 -0
- package/templates/keywords.md +6 -0
- package/templates/rebuild.md +134 -0
- package/templates/rules-safe.md +184 -0
- package/templates/rules.md +177 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# 01 — 安装
|
|
2
|
+
|
|
3
|
+
## 1. 先理解“安装”到底装了什么
|
|
4
|
+
|
|
5
|
+
这个包不是装完就自动有一份完整记忆。
|
|
6
|
+
|
|
7
|
+
它装进去的是三层东西:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
宿主行:提供面板、路由、按 session 调度
|
|
11
|
+
preset:提供压缩引擎、recall、session_log
|
|
12
|
+
client:提供左侧“连续性”面板和右侧 A/B/C/K tab
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
三者缺一个,你看到的现象都不一样。
|
|
16
|
+
|
|
17
|
+
**比如这种情况:**
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
如果宿主行装了,但 client 没加载,
|
|
21
|
+
则后台在写索引,你却看不到“连续性”入口。
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
如果 client 在,但 preset 不是 continuity,
|
|
26
|
+
则面板可能有,但没有 band 引擎和原生 recall/session_log。
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
所以先不要用“有没有表”判断安装成功。
|
|
30
|
+
|
|
31
|
+
## 2. 安装
|
|
32
|
+
|
|
33
|
+
把 tgz 装进目标 DSH profile,备份 `~/.dsh/continuity`,然后重启 DSH。
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
dsh-continuity-4.11.36.tgz
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
为什么必须重启?
|
|
40
|
+
|
|
41
|
+
因为插件在 DSH 启动时挂载。
|
|
42
|
+
只把 tgz 放进目录、不重启,等于把书放上书架但没翻开。
|
|
43
|
+
|
|
44
|
+
**比如这种情况:**
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
如果装完没有重启,
|
|
48
|
+
则新代码没进进程,面板可能还是旧版本,或者根本没有。
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
重启后确认版本:
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
dsh-continuity 4.11.36
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## 3. 第一次 pre-step 会做什么
|
|
58
|
+
|
|
59
|
+
某个 session 第一次经过 pre-step 时,它会:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
1. 解析当前 session id
|
|
63
|
+
2. 检查 persona 是否启用
|
|
64
|
+
3. 创建缺失的 session 空壳:
|
|
65
|
+
concepts.md
|
|
66
|
+
cmap.md
|
|
67
|
+
keywords.md
|
|
68
|
+
aliases.md
|
|
69
|
+
rebuild.md
|
|
70
|
+
4. 从 templates/rules.md 种 rules.md
|
|
71
|
+
5. 从 templates/habits.md 种 habits.md
|
|
72
|
+
6. 第一次索引时创建 bc-index.jsonl
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
它只创建缺失文件,不覆盖已有表。
|
|
76
|
+
|
|
77
|
+
**比如这种情况:**
|
|
78
|
+
|
|
79
|
+
```text
|
|
80
|
+
如果 concepts.md 已经存在,
|
|
81
|
+
则它不会用模板覆盖,哪怕模板更新了。
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
这就是为什么“升级插件”不等于“旧 session 的规则会自动变新”。
|
|
85
|
+
|
|
86
|
+
## 4. 新 session 为什么是空表
|
|
87
|
+
|
|
88
|
+
新 session 的:
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
A 空
|
|
92
|
+
C 空
|
|
93
|
+
K 空
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
这是正常的。
|
|
97
|
+
|
|
98
|
+
A 空会进一步导致:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
B 空
|
|
102
|
+
审计跳过
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**比如这种情况:**
|
|
106
|
+
|
|
107
|
+
```text
|
|
108
|
+
如果新 session 刚聊 3 轮,A 表空、B 空,
|
|
109
|
+
则不是插件没工作,而是还没有人给 A 写第一条。
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
如果你希望它一开始就有概念,需要显式:
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
写 concepts.md
|
|
116
|
+
或从历史 rebuild
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
不要从别的 session 复制 A 表。
|
|
120
|
+
|
|
121
|
+
## 5. 有历史、但没有表怎么办
|
|
122
|
+
|
|
123
|
+
如果 session 已经聊了很长,A/B/C/K 还是空:
|
|
124
|
+
|
|
125
|
+
```text
|
|
126
|
+
不要从当前 live turn 开始补
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
先读 `04-REBUILD.md`。
|
|
130
|
+
|
|
131
|
+
**比如这种情况:**
|
|
132
|
+
|
|
133
|
+
```text
|
|
134
|
+
如果 session 已经有 500 轮,A 仍然是空,
|
|
135
|
+
则从第 501 轮开始正常聊,也不会自动补出前 500 轮的 B。
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
历史需要显式重建。
|
|
139
|
+
|
|
140
|
+
## 6. preset 检查
|
|
141
|
+
|
|
142
|
+
```text
|
|
143
|
+
continuity preset:
|
|
144
|
+
band 引擎
|
|
145
|
+
原生 recall
|
|
146
|
+
原生 session_log
|
|
147
|
+
|
|
148
|
+
standard preset:
|
|
149
|
+
原生 compaction-basic 80%
|
|
150
|
+
没有 band 引擎
|
|
151
|
+
没有原生 recall/session_log
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
已启动的 session 不能切 preset。
|
|
155
|
+
`agentPresets.select()` 会返回:
|
|
156
|
+
|
|
157
|
+
```text
|
|
158
|
+
agent-preset/locked
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**比如这种情况:**
|
|
162
|
+
|
|
163
|
+
```text
|
|
164
|
+
如果为了“省事”去改 session header 的 agentPreset,
|
|
165
|
+
则 session 可能从列表里消失,而不是升级成 continuity。
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
不要改 header。要换 preset,新建 session。
|
|
169
|
+
|
|
170
|
+
## 7. 重启后的自检
|
|
171
|
+
|
|
172
|
+
按顺序看:
|
|
173
|
+
|
|
174
|
+
```text
|
|
175
|
+
1. 版本 = 4.11.36
|
|
176
|
+
2. 左侧有“连续性”
|
|
177
|
+
3. 右侧“更多工具”下有 A/B/C/K
|
|
178
|
+
4. sessions/<id>/ 有基础文件
|
|
179
|
+
5. rules.md / habits.md 在 session 目录
|
|
180
|
+
6. 面板能打开
|
|
181
|
+
7. 没有新的 gate-errors
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
如果第 2 条没有,先不要查表,查 client。
|
|
185
|
+
|
|
186
|
+
如果第 2 条有、第 3 条没有,查宿主是否支持 `sidebarRight`。
|
|
187
|
+
|
|
188
|
+
如果第 3 条有、表是空的,回到第 4 节:这是正常的空表。
|
|
189
|
+
|
|
190
|
+
## 8. 一个最小验收
|
|
191
|
+
|
|
192
|
+
对新 session:
|
|
193
|
+
|
|
194
|
+
```text
|
|
195
|
+
发一句话
|
|
196
|
+
等一次 pre-step
|
|
197
|
+
打开 A/B/C/K
|
|
198
|
+
确认 B 覆盖当前 turn
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
如果 B 仍然是空:
|
|
202
|
+
|
|
203
|
+
```text
|
|
204
|
+
检查 A 表有没有内容
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
因为没有 A,就没有 B。
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# 02 — A / B / C / K
|
|
2
|
+
|
|
3
|
+
这四张表不是四个同义词。它们回答的是四个不同问题:
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
A:这个话题叫什么?
|
|
7
|
+
B:这一轮大概属于哪些 A?
|
|
8
|
+
C:用户说这个词时,指的是哪个 A?
|
|
9
|
+
K:这个精确名字是什么,不能被拆?
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
理解这个区别,比记住文件格式重要。
|
|
13
|
+
|
|
14
|
+
## 1. A — 概念表
|
|
15
|
+
|
|
16
|
+
文件:
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
sessions/<sessionId>/concepts.md
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
格式:
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
名字 | 描述词 | 参考覆盖 | kind
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
例子:
|
|
29
|
+
|
|
30
|
+
```text
|
|
31
|
+
示例主题 | 项目、讨论、决定 | 12 | topic
|
|
32
|
+
复盘流程 | 复盘、检查、收尾 | 5 | workflow
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
A 的作用不是“直接回答问题”。
|
|
36
|
+
|
|
37
|
+
它的作用是:
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
给 B 提供候选概念
|
|
41
|
+
给 C 提供映射目标
|
|
42
|
+
给审计提供 topicMax
|
|
43
|
+
给面板提供展示
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**比如这种情况:**
|
|
47
|
+
|
|
48
|
+
```text
|
|
49
|
+
如果 A 为空,
|
|
50
|
+
则 B labeler 没有候选,B 一定为空。
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
这不是 B 坏了,是 B 的上游没有概念。
|
|
54
|
+
|
|
55
|
+
### kind
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
topic 一个话题/领域
|
|
59
|
+
workflow 一个流程/做法
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
不确定时写 `topic`。
|
|
63
|
+
|
|
64
|
+
不要为了凑数把“人名、道具、英文标识”塞进 A;那些通常属于 K。
|
|
65
|
+
|
|
66
|
+
## 2. B — 每轮标签
|
|
67
|
+
|
|
68
|
+
B 不在单独的文件里。它写在:
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
sessions/<sessionId>/bc-index.jsonl
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
每轮记录里可能有:
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
genericTopic
|
|
78
|
+
genericWorkflow
|
|
79
|
+
topicScore
|
|
80
|
+
topicConfidence
|
|
81
|
+
conceptScores
|
|
82
|
+
labelVersion
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
B 是“这一轮大概像哪个 A”,不是“这一轮就是那个话题”。
|
|
86
|
+
|
|
87
|
+
**比如这种情况:**
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
如果一轮同时在聊 A 和 B 两个话题,
|
|
91
|
+
则 B 可能只取分数最高的那个,另一个留在 conceptScores 里。
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
所以 B 不是事实,只是标签。
|
|
95
|
+
|
|
96
|
+
`weak` 也不等于“这轮没内容”,只表示标签置信度低。
|
|
97
|
+
|
|
98
|
+
## 3. C — 用户词
|
|
99
|
+
|
|
100
|
+
文件:
|
|
101
|
+
|
|
102
|
+
```text
|
|
103
|
+
sessions/<sessionId>/cmap.md
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
格式:
|
|
107
|
+
|
|
108
|
+
```text
|
|
109
|
+
用户词 => B:概念 | K:关键词 | minB:1 | limit:20 | 摘要
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
C 解决的是:
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
用户说“那个事”,到底指哪个 A?
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
例子:
|
|
119
|
+
|
|
120
|
+
```text
|
|
121
|
+
换箍 => B:示例主题 | minB:1 | limit:20
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**比如这种情况:**
|
|
125
|
+
|
|
126
|
+
```text
|
|
127
|
+
如果用户一直说“换箍”,但 C 里没有这个映射,
|
|
128
|
+
则 recall("换箍") 只能靠字面碰运气,不能稳定找到 A。
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
C 是桥,不是概念本身。
|
|
132
|
+
|
|
133
|
+
## 4. K — 精确名
|
|
134
|
+
|
|
135
|
+
文件:
|
|
136
|
+
|
|
137
|
+
```text
|
|
138
|
+
sessions/<sessionId>/keywords.md
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
一行一个名字。
|
|
142
|
+
|
|
143
|
+
适合:
|
|
144
|
+
|
|
145
|
+
```text
|
|
146
|
+
项目名
|
|
147
|
+
产品名
|
|
148
|
+
人名
|
|
149
|
+
代码标识符
|
|
150
|
+
游戏名
|
|
151
|
+
不能拆的专名
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
不适合:
|
|
155
|
+
|
|
156
|
+
```text
|
|
157
|
+
普通动词
|
|
158
|
+
泛词
|
|
159
|
+
“那个”“之前”
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**比如这种情况:**
|
|
163
|
+
|
|
164
|
+
```text
|
|
165
|
+
如果把“昨天”写进 K,
|
|
166
|
+
则每次出现“昨天”都可能被当成一个精确锚,反而噪声很大。
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## 5. 别名
|
|
170
|
+
|
|
171
|
+
文件:
|
|
172
|
+
|
|
173
|
+
```text
|
|
174
|
+
sessions/<sessionId>/aliases.md
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
只放跨语言/跨写法标识符:
|
|
178
|
+
|
|
179
|
+
```text
|
|
180
|
+
短信息 => sms
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
不要放同义词。同义词属于 C。
|
|
184
|
+
|
|
185
|
+
## 6. 空表是合法的
|
|
186
|
+
|
|
187
|
+
新 session:
|
|
188
|
+
|
|
189
|
+
```text
|
|
190
|
+
A 空
|
|
191
|
+
C 空
|
|
192
|
+
K 空
|
|
193
|
+
B 空
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
这不是错误。
|
|
197
|
+
|
|
198
|
+
**比如这种情况:**
|
|
199
|
+
|
|
200
|
+
```text
|
|
201
|
+
如果新 session 刚建立,A 空、B 空,
|
|
202
|
+
则先聊,等有稳定话题再写 A;
|
|
203
|
+
不要为了“看起来有东西”复制别人的表。
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## 7. 加表之前先问三个问题
|
|
207
|
+
|
|
208
|
+
```text
|
|
209
|
+
1. 这个词是话题(A)、用户词(C)、还是精确名(K)?
|
|
210
|
+
2. 它真的稳定出现吗,还是一次性说法?
|
|
211
|
+
3. 加错之后能不能删掉/改回?
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
如果三个问题答不清,先不要加。
|
|
215
|
+
|
|
216
|
+
## 8. 最小维护顺序
|
|
217
|
+
|
|
218
|
+
```text
|
|
219
|
+
先有稳定话题 -> 写 A
|
|
220
|
+
再为常用说法 -> 写 C
|
|
221
|
+
精确专名 -> 写 K
|
|
222
|
+
最后才让 B 去用这些表打分
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
反过来做,通常会得到一堆看起来有表、但查不回来的数据。
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# 03 — 自动审计
|
|
2
|
+
|
|
3
|
+
## 1. 审计不是“自动整理记忆”
|
|
4
|
+
|
|
5
|
+
它不是每隔 200 轮就把对话总结成一张新 A 表。
|
|
6
|
+
|
|
7
|
+
它做的是:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
在当前 index 里找一些可能值得看的话题簇
|
|
11
|
+
把它们作为候选提示交给你
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
写不写 A,仍然由这个 session 自己决定。
|
|
15
|
+
|
|
16
|
+
**比如这种情况:**
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
如果审计提示了一个候选,但实例直接忽略,
|
|
20
|
+
则什么都不会改变,A 表不会自己长。
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 2. 为什么是 200 轮
|
|
24
|
+
|
|
25
|
+
200 轮是一个折中:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
太短:话题还没稳定,候选全是噪声
|
|
29
|
+
太长:发现得太晚,前面已经散掉
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
所以默认:
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
每 200 轮最多触发一次
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
不是每轮都检查,也不是永不检查。
|
|
39
|
+
|
|
40
|
+
**比如这种情况:**
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
如果 session 只有 50 轮,
|
|
44
|
+
则还没到第一次审计的阈值,不应该期待 [continuity:audit]。
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 3. 审计读什么
|
|
48
|
+
|
|
49
|
+
它读的是已经存在的索引:
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
bc-index.jsonl 的 vec
|
|
53
|
+
bc-index.jsonl 的 chatter
|
|
54
|
+
bc-index.jsonl 的 keywords
|
|
55
|
+
bc-index.jsonl 的 conceptScores
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
它不重读全部原文。
|
|
59
|
+
|
|
60
|
+
所以:
|
|
61
|
+
|
|
62
|
+
```text
|
|
63
|
+
如果旧记录没有 vec
|
|
64
|
+
则审计可能无法正常做聚类
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
这也是为什么重建流程里有“补 vec”这一步。
|
|
68
|
+
|
|
69
|
+
## 4. 候选怎么来的
|
|
70
|
+
|
|
71
|
+
大致是:
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
把带 vec 的记录做聚类
|
|
75
|
+
簇大小至少 10
|
|
76
|
+
算簇内最高概念分的平均值 topicMax
|
|
77
|
+
topicMax < 0.5 才算候选
|
|
78
|
+
按 topicMax 升序,最多 5 条
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
直觉:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
一个簇如果和已有 A 都不太像,
|
|
85
|
+
它可能是“还没被命名的新话题”
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**比如这种情况:**
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
如果 A 表本身是空的,
|
|
92
|
+
则没有概念可以算 topicMax,
|
|
93
|
+
审计会直接跳过。
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
这就是 500 轮没有审计提示的常见原因。
|
|
97
|
+
|
|
98
|
+
## 5. 审计结果放在哪
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
sessions/<id>/expand-hint.jsonl 候选记录
|
|
102
|
+
sessions/<id>/expand-hint.pending.json 下一轮要注入的文本
|
|
103
|
+
sessions/<id>/audit-state.json 上次审计轮次/运行状态
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
下一轮 pre-step 会把 pending 注入成:
|
|
107
|
+
|
|
108
|
+
```text
|
|
109
|
+
[continuity:audit]
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
只有真的以 `role=user` 出现,才算送达。
|
|
113
|
+
|
|
114
|
+
**比如这种情况:**
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
如果 pending 写入了,但承载消息被折叠掉,
|
|
118
|
+
则实例可能根本没看到这次审计。
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## 6. 审计和 A 的关系
|
|
122
|
+
|
|
123
|
+
顺序是:
|
|
124
|
+
|
|
125
|
+
```text
|
|
126
|
+
A 非空 -> 审计有东西可算 -> 可能产生候选
|
|
127
|
+
A 空 -> 审计跳过
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**比如这种情况:**
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
如果 A 空,B 也空,审计也不来,
|
|
134
|
+
则不是三个功能同时坏了;
|
|
135
|
+
根因只有一个:A 没有建立。
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## 7. 你看到审计时应该做什么
|
|
139
|
+
|
|
140
|
+
先看:
|
|
141
|
+
|
|
142
|
+
```text
|
|
143
|
+
turn 范围
|
|
144
|
+
size
|
|
145
|
+
topicMax
|
|
146
|
+
chatter
|
|
147
|
+
kw
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
然后:
|
|
151
|
+
|
|
152
|
+
```text
|
|
153
|
+
多数叙事簇是噪声 -> 跳过
|
|
154
|
+
确实是稳定话题 -> 才写一条 A
|
|
155
|
+
不确定 -> 不写
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
不要因为“审计来了”就必须加表。
|
|
159
|
+
|
|
160
|
+
## 8. 审计不替代 rebuild
|
|
161
|
+
|
|
162
|
+
审计是增量提示。
|
|
163
|
+
|
|
164
|
+
如果历史已经有 500 轮,A 还是空:
|
|
165
|
+
|
|
166
|
+
```text
|
|
167
|
+
审计不会替你补前 500 轮
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
这种情况应该走 `04-REBUILD.md`。
|
|
171
|
+
|
|
172
|
+
**比如这种情况:**
|
|
173
|
+
|
|
174
|
+
```text
|
|
175
|
+
如果 500 轮都空着,只等下一次审计,
|
|
176
|
+
则即使下一次审计来了,也只能看到最近的簇,
|
|
177
|
+
前面的历史仍然没有 A/B。
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## 9. vec 为空
|
|
181
|
+
|
|
182
|
+
如果 A/B/C/K 有,但 vec 为空,审计同样跑不起来。
|
|
183
|
+
见 `06-EMBEDDING.md`。
|
|
184
|
+
|
|
185
|
+
## 10. fold 验收(K-04)
|
|
186
|
+
|
|
187
|
+
折后瞬时值只是 provisional,不能用来验收。判据只用下一次正常 pre-step 的稳定值:
|
|
188
|
+
|
|
189
|
+
```text
|
|
190
|
+
稳定 est ≈ low×W (±3%) → 达成
|
|
191
|
+
稳定 est < low×W − 3% → overshoot
|
|
192
|
+
稳定 est > low×W + 3% 且 protectBinds → 保护咬合
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
`protectBinds` 用触发时的 `preBaseline` 算:
|
|
196
|
+
|
|
197
|
+
```text
|
|
198
|
+
floor = preBaseline + protect × W
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
实际减少量可以大于 `budget`,因为 budget 只按被折的 surface 计价,关联的 non-surface 前缀会一并被带走。
|