WeKnora:有据问答、限定记忆与可维护运维
WeKnora 记忆召回源码:调分数之前,先修正候选池
通过低重要性记忆被漏召回的案例,分析作用域过滤、候选扩展与倒数排名融合。
你将学会
- 没进入候选池,再相关也无法胜出
- 扩大搜索范围,不能丢掉权限与索引对应
- 融合名次,再受输出预算约束
开始前需要
- 了解 HTTP 与容器基本概念
- 理解文档段落和模型提供方的区别
分清入库、检索、答案支持和记忆范围,并设计基于证据的验收练习。
先看结论
- 候选选择会形成隐蔽的召回上限。
- 扩大候选必须保留身份和生命周期过滤。
- 融合排名可避免直接相加不可比的原始分数。
没进入候选池,再相关也无法胜出
当前仓库方法检索当前身份的向量集合,而不是只计算按重要性预选窗口内的向量。SQL 在距离排序前过滤空间、身份、向量模型、维度、有效状态、到期时间和可选类别。若某条记忆在问题参与计算之前就被排除,后续相关性排序无法把它救回来。
设有一条非常重要但弱相关的记录,和一条重要性低却准确匹配问题的记录。先按重要性截取第一条,再计算相似度,第二条永远没有机会。合成回归使用人为指定分数展示这一问题,不代表真实向量效果或数据库执行结果。
扩大搜索范围,不能丢掉权限与索引对应
可检索向量列可用时,仓库在数据库中计算距离;否则把向量传回进程评分,并保留五千行防御上限。这并非跨空间无限搜索,查询仍保留身份和生命周期条件,完整条目也通过带作用域的仓库方法加载。
mergeVectorHits 将原池中没有的语义命中追加进候选集合,返回指向同一个集合的排名索引。它跳过已排除的 ID,并在首次追加前复制切片,避免覆盖调用方共享的底层数组。只扩大数据库检索而不扩展融合候选池,仍会丢失新发现的结果。
融合名次,再受输出预算约束
服务使用倒数排名融合组合词法与向量结果。该版本实际累加 1/(60+rank),rank 从零开始,相同得分保持稳定顺序。它并不直接把词法命中次数加到余弦相似度上,因为两者数值尺度不能直接比较。
十二项测试验证教学模型的作用域过滤、旧窗口反例、阈值、候选增长、排除、稳定融合和输入保持;并非上游 Go、SQL、halfvec 或集成测试。另一个值得注意的地方是旧词法文件注释仍称召回只走词法,而当前向量路径和功能文档说明了为何不能仅凭注释判断现状。
如何选择
| 比较维度 | 方案 A | 方案 B |
|---|---|---|
| Best when | You need predictable behavior and easy auditing | You need adaptive optimization and have reliable telemetry |
| Main risk | May leave performance on the table | Can become difficult to explain or debug |
实施步骤
- 1
先追踪评分前的候选来源。
- 2
核对排序前的作用域和状态过滤。
- 3
将仅向量命中的记录纳入融合池。
- 4
测试低重要性相关记录与越权诱饵。
可复制示例
const importantWindow = [{id: "popular", importance: 10, similarity: 0.55}];
const omittedMatch = {id: "relevant", importance: 1, similarity: 0.98};
// 合成案例:只给 importantWindow 评分无法找回 omittedMatch。
const fullScope = [...importantWindow, omittedMatch];
const ranked = fullScope.toSorted((a, b) => b.similarity - a.similarity);
console.log(ranked[0].id); // relevant,不是真实向量性能测试常见问题
换更好的向量模型能找回被预先排除的候选吗?
不能,没有进入评分范围的条目无法靠更高分数恢复。
十二项测试运行在 PostgreSQL 上吗?
没有,它们运行的是合成 JavaScript 教学模型。
资料来源
- WeKnora / internal/application/repository/memory_vector.go来源核查 2026-09-14
- WeKnora / internal/application/service/memory/vector.go来源核查 2026-09-14
- WeKnora / internal/application/service/memory/recall_trace.go来源核查 2026-09-14
- WeKnora / internal/application/service/memory/search.go来源核查 2026-09-14
- WeKnora / internal/application/service/memory/lexical.go来源核查 2026-09-14