# 性能、检索与架构验证 验证日期:2026-10-26。环境:Windows,本机 Node.js v24.19.0,当前 0.2.0-alpha.8 源码。规模检索与隔离召回两组测试同时运行,存在同机负载竞争;以下为一次实测,不是跨机器保证。原始结果位于 [benchmarks](benchmarks/)。 ## 测量结果 | 合成条目数 | FTS 建索引 | FTS p50 / p95 | 选择性词 p95 | 宽泛词 p95 | 隔离召回 p95 | 召回成功 / 超时 | | ---: | ---: | ---: | ---: | ---: | ---: | ---: | | 10,000 | 0.52s | 0.51 / 7.44ms | 0.22ms | 7.65ms | 10.94ms | 40 / 0 | | 100,000 | 6.26s | 0.75 / 85.20ms | 0.54ms | 85.58ms | 91.27ms | 40 / 0 | | 1,000,000 | 69.89s | 1.53 / 844.68ms | 0.94ms | 845.50ms | 163.11ms | 20 / 20 | FTS 测的是原生磁盘索引与分词,不包含 Markdown 创建、元数据 Map、完整 SearchService 精确扫描和模型调用。隔离召回测的是实际 RecallSearch + IPC + FTS/规则/置信度,包含冷启动和超时,40 次中交替使用选择性词与宽泛词。召回 p95 包含超时退出,因此百万条的 163.11ms **不表示检索成功**。脚本的 3ms 就绪窗口只是模拟,不能等同生产首步注入率。 10 万条 Map 驻留对比:完整正文模式堆内存 716.90 MiB,仅元数据模式 181.02 MiB,约下降 74.7%;进程 RSS 分别为 915.95 / 361.52 MiB。此测试仅比较 Map 保留,不包含索引、语料文件与应用任务,不能宣称整个插件节省同等比例内存。 ## 检索质量与自动注入边界 固定 20 条合成知识、80 个查询的混合检索:Recall@5 100%,MRR 0.98125,p95 0.55ms。该集合用于开发问法与规则,不是独立留出集;微型语料延迟不代表大规模检索速度。见 [完整检索结果](benchmarks/recall-hybrid.json)。 自动召回策略采用独立子进程、筛选阈值及提示词预算,不能直接沿用上述成绩。固定合成策略集含 80 个正向查询、20 个无关查询: | 阈值 | Recall@5 | 漏召率 | 已发生注入中的错误注入率 | | ---: | ---: | ---: | ---: | | 0.30 | 66.25% | 33.75% | 5.45% | | 0.50 | 43.75% | 56.25% | 0% | | 0.65 | 23.75% | 76.25% | 0% | | 0.80 | 15% | 85% | 0% | 错误注入率的分母是发生注入的查询数;只要混入无关 ID 即视为错误。跳过和超时计入漏召。0% 是这个固定集合的观测值,不是对实际用户资料的承诺。真实历史留出评测、正式阈值和生产首步覆盖率仍待完成。见 [策略原始结果](benchmarks/synthetic-policy.json)。 ## 架构收益如何理解 - Markdown 保存正文,SQLite 保存检索索引,便于备份、迁移和重建;第三方附件与许可随内容保存。 - 元数据驻留、正文按需读取降低常驻文本量;L0/L1/L2 提供渐进读取,但没有把 token 节省比例作为已测指标。 - 自动召回独立 SQL 子进程可终止,超时跳过;同步提示词 section 只读已就绪缓存,避免等待模型或正文 I/O。 - 中文问法、别名与 FTS 改善固定集合的匹配;当前没有向量嵌入,不宣称在开放域语义检索上优于向量方案。 - 全文精确扫描、宽泛词候选和大规模建索引仍有成本。百万条合成结果暴露了预算下的漏召,不构成百万条完整应用验收。 ## 复现 ```powershell npm ci npm run build npm run typecheck npm test node scripts/eval-recall.mjs test/fixtures/recall-eval.json --hybrid node scripts/bench.mjs --run node --expose-gc scripts/bench-memory.mjs node scripts/bench-recall.mjs --run node scripts/eval-recall-policy.mjs ``` 规模测试将产生较大临时索引并占用 CPU、磁盘与内存。当前构建、类型检查通过,测试 80/80 通过;实机历史记录见 [测试报告](测试报告.md)。