# 生产召回能力分层 > 单一分数(如「4/9」)会掩盖真实情况。真正有用的问题是: > **什么形态的查询能用、什么不能用、为什么。** 数据来源:生产库快照 `/var/tmp/ha-probe/fresh.db` (2026-10-03 `.backup`,1294 entities → 2686 块,chineseclip 512 维 + 中心化) ## 四种形态 | # | 形态 | 例 | 能力 | 机制 | |---|---|---|---|---| | 1 | **带精确串** | 「本机 13010 端口」 | ✅ **强** | 符号路精确串命中 → 布尔置顶 → 排第一 | | 2 | **领域词 + 上下文** | 「从零开发 QQ 插件用什么工具链」 | ✅ **可用** | 向量召回 + 中文符号滑窗 | | 3 | **纯泛化描述** | 「公网地址是什么」 | ❌ **弱** | 向量给不出区分(排名 389/2686) | | 4 | **库里没有** | 「grafana 监控面板的端口」 | ⚠️ **会编造** | 纯中文查询拒答判据失效 | ## 各形态的实测依据 ### 形态 1:精确串(强) ``` 查询「本机 13010 端口对应什么」 召回 13010/13011 而非 12011 [+符号 2: 精确2] http://127.0.0.1:13010 基线 纯向量下这条连 top2000 都进不去 ``` **机制**:`SymbolScore` 的 `exactHit` 是布尔信号,直接置顶 (`Score = 1.0 + VectorHit*0.01`),不参与加权和 —— 否则 满分会被 0.3 的符号权重稀释成 0.3,输给 0.33 符号分的噪声块。 ### 形态 2:领域词(可用) ``` 查询「脚本路径改到哪个目录了」 ✓ 命中 11 个含该词的块 查询「从零开发 QQ 插件用什么工具链」 ✓ 命中 plugindev 那条 查询「agentmail 公网访问地址是什么」 ✘ 命中的是「AgentMail地址格式」等 ``` 前两条靠中文符号滑窗(2~4 字窗口)+ 向量召回。 ### 形态 3:纯泛化描述(弱)—— 主要瓶颈 ``` 查询「agentmail 公网访问地址是什么」 目标块排名 452 查询「公网地址」 目标块排名 389 查询「对外的服务地址」 目标块排名 297 查询「101.201.37.155 是哪台机器」 目标块排名 58 ← 带 IP ``` ★ **排名随查询的"可词法化程度"剧烈变化(452 → 58)**: 带上 IP 后降到 58,说明起作用的主要是词法信号,语义贡献极小。 **根因**:目标块是裸值,没有任何可供语义匹配的文本: ``` http://101.201.37.155:8083/ ← 无描述词 ``` **已试过并否定**(见 `vector-provider-decision.md`): 给裸值块追加中性描述反而更差(排名 26 → 96,噪声稀释原值信号)。 ### 形态 4:库里没有(会编造) ``` [abstention] grafana 监控面板的端口 ✘ 召回 CPU总线/MAR-MDR(0.84+) [abstention] kafka broker 地址 ✘ 召回 read_thread/sdk站 [abstention] 数据库容灾演练 ✘ 召回 读写代码/追调用链 ``` **拒答判据只对含精确串的查询有效**: ``` 拒答 ⟺ 查询含精确串 ∧ 该精确串在全库零命中 豁免 ⟺ 含泛指词 ∨ 无可提取符号 ∨ 纯中文(判据不成立) ``` 纯中文的零命中**分不清「真没有」与「滑窗伪词提取失败」**: ``` 「grafana 监控面板的端口」 → [grafana 监控面板] 库里真没有 「本机服务监听哪些端口」 → [本机服务 监听哪些] 库里有 13010/8081 ``` 两者符号形态完全一样,库规模(3 块 vs 1391 块)也不是区分信号。 ## 运维结论 **能用**: - 带 IP/端口/路径/版本号的查询(运维最常见) - 领域词 + 具体上下文 **不能指望**: - 「XX 是什么」这类泛化描述(除非用户已知道值) - 纯中文的「库里没有」检测(系统会编造,需人工/上游确认) ## 待补的能力 | 缺口 | 已排除的方案 | 可行方向 | |---|---|---| | 形态 3 | 统一追加中性描述(实测更差)、chineseclip(词法主导) | ① 给每个值配**真实**上文(哪条命令/哪次排障产生)② 换 Qwen3-VL 测同义改写 | | 形态 4 | 分数阈值(间隔 0.047,n=4 是运气)、纯中文符号判据(伪词不可分) | 需能分词的中文提取(jieba 词边界与块文本对不齐,需新实验) | ## 复现 ```bash PROD_SNAPSHOT=/var/tmp/ha-probe/prod.db \ go test -tags onnxruntime ./internal/memory/ -run 'TestProbe_生产规模召回' -v # ha-c(测试库,83% 可拆率)的对照 go test -tags onnxruntime ./internal/memory/ -run 'TestProbe_端到端召回' -v ``` ⚠️ 两个库的可拆率差 7.5 倍(生产 11% vs 测试 83%), **ha-c 上的分数不能推广到生产**。