一个真实在用的个人知识库(Obsidian,记了四年的概念笔记、读书笔记、日记摘录和博客),公开部分放到线上。问一个问题,它先在 两万多 个笔记块里混合检索,再重排、带出处地回答;库里没有的,它会说没有。下面把每一步的分数都摊开了。
这一问在线上实际走过的每一步,上面的动画就是按这些数字放的。蓝底的行是最后放进提示词、给模型看的块。
余弦:问题向量和块向量的相似度(bge-m3)。BM25:字面检索的分(中文两字切词)。混合分:两者各自换成 z 分(离平均值几个标准差)后按 1 : 0.15 相加,空壳块(不到 12 个字)减 3,过 1.5 才算候选。重排:bge-reranker-v2-m3 把问题和块成对打的相关度(0–1),候选按它重新排序。
检索的打分口径和我本地 Obsidian 插件「第二大脑」是同一套(同一份代码移植过来),本地那套先用评测集调过;线上版补上了重排、生成和生成评测。
在这份公开语料上单独建的评测集,召回和生成分开评。