1
检索链路:让正确的片段进入上下文
文档切分 → 向量检索 → 混合检索 → 重排
文档切分
索引质量的地基Chunking
- 递归切分是最稳的默认:段落 → 句子 → 字符逐级降级
- 语义切分:相邻句 embedding 相似度骤降处断开
- overlap 10%–20%,防止关键句被腰斩
- Small-to-Big:小块检索、大块喂给模型
切分决定了召回上限:切错了,后面再强的重排也救不回来。
向量检索
语义召回Vector Retrieval
- 把文本压成向量,用距离找最近邻
- Embedding 模型必须与语料同语言、同领域
- ANN 近似检索:HNSW 快而准,IVF-PQ 省内存
- 向量不认识型号 / 编号 / 人名拼写 → 需混合检索
- 召回 Top-50~100,宁多勿漏,交给重排收口
向量检索负责「语义像不像」,不负责「关键词准不准」。
混合检索
稀疏 + 稠密Hybrid Retrieval
- BM25 补齐型号、编号、法条号等精确匹配
- 向量补齐同义改写、跨语言、语义相关
- RRF:score = Σ 1/(k + rank),k ≈ 60
- 也可用加权融合,但需先做分数归一化
- 单路召回落下的,另一路往往能补回来
实践结论:混合检索几乎总是优于任一路单检。
重排
精度收口Rerank
- 两段式:Bi-Encoder 粗召回 → Cross-Encoder 精排
- 典型配比:召回 50–100 → 精排 5–10
- LLM listwise 重排更准,但延迟与成本高
- 延迟敏感场景:只重排 Top-20,或做结果缓存
重排是性价比最高的一道工序:不动索引,直接涨准确率。
2
增强与治理:让答案可信、可查、不过期
GraphRAG → 事实校验 → 引用溯源 → 知识更新
GraphRAG
跨文档 · 多跳Graph-based RAG
- 索引期:抽取实体/关系 → 建图 → 社区聚类 → 生成社区摘要
- 查询期:社区映射 + 多跳遍历,比向量更会"连"
- 擅长跨文档、多跳、总结类问题("整体趋势是什么")
- 代价:构建贵、更新慢,宜与向量库并存而非替代
向量库擅长"哪段像",图谱擅长"谁跟谁有关",两者互补。
事实校验
防幻觉闸门Fact Verification
- NLI 三分类:蕴含 / 矛盾 / 无法证实
- 无法证实 → 再检索一次,仍无则降级为"未找到"
- 自一致性:多次采样投票,少数派说法重点复核
- 医疗、金融、法务等场景应强制校验后再出
校验放在生成之后、返回之前,是最后一道闸门。
引用溯源
可审计Citation & Provenance
- 生成时即要求句级标注,而非事后匹配
- 引用要落到 span 级别(字符区间),不是只给文档名
- 记录 版本与抓取时间,避免引用已失效的旧版
- 再校验一次:引用片段是否真的支撑该句
引用同时是给用户的安全感,也是给排查的线索。
知识更新机制
索引保鲜Knowledge Update
- 增量 upsert:新文档走同一条切分→嵌入→写入流水线
- 版本 + 软删除,杜绝"新旧混杂"的答案
- TTL / 定时巡检:源变了就触发重建
- 切分策略或 Embedding 模型升级 → 必须全量重建
- 重建期间用双索引蓝绿切换,避免服务中断
知识库的对手不是"没数据",而是"数据悄悄过期了"。