检索与知识层:本地 BGE RAG 到 pgvector
三层串行检索链、读穿缓存、grounding 服务与向量库统一运维,让同一份知识在接口、工具与报告三处口径一致。
一条链,不是三个检索
检索链固定为档案层 → 策略层 → 知识层三层串行,一次查询串起三层,而不是三个并列检索各自召回。这样只需一处实现,避免不同入口的装配口径分叉。链上启用读穿缓存(命中直返、未命中回填,TTL 3600)。
召回侧是混合检索:jieba BM25 关键词 + BGE 向量语义,向量侧取 Top-K × 3 候选。知识层语料包含营销知识体系的 461 条策略规则,另有 80 条质量范本用于生成质量锚定。
为什么用本地语义检索
2026 年 10 月 26 日做过一次明确取舍:外部知识库的 OpenAPI 只有关键词召回,语义能力弱于本地 BGE 向量检索,且调不到其内置的问答能力,因此知识检索统一由本地 RAG 承载,外部配置全量移除。
同期收敛还包括:向量模型统一为 PLUS(768 维),独立精排环节并入单阶段混合检索,用一个嵌入模型贯穿全链路。
ChromaDB → pgvector(10-28)
| 维度 | 迁移前 | 迁移后 |
|---|---|---|
| 向量存储 | ChromaDB(独立语料库) | PostgreSQL kb.chunk + HNSW 索引 |
| 距离口径 | 各自定义 | 统一 similarity = 1 - distance,阈值 0.25 |
| 检索判据 | R@10 | R@20 + MRR(R@20 由 0.285 提升到 0.328) |
| 运维 | 关系库 + 向量库双栈 | 与 PostgreSQL 统一运维 |
同时新增可见性三档枚举(私有 / 租户 / 全局,默认取最保守值),共享与私有由字段显式表达;内容缓存与数据索引合并为单一 content_store,列数从 19 收敛到 11,过期状态统一由一个字段表达。
一个入口,三个消费方
检索能力抽为只读 grounding_service,HTTP 检索接口、MCP 工具与报告线三处复用,装配口径完全一致。这是「能力不绑交互形态」最具体的一处落地:换入口不换判断依据。
衔接
- 交互形态的变化:V4 · 开放接入与租户化
- 语义理解侧同源:意图识别与槽位填充