搜索排名

ContextForge 在语义相似度之上叠加四个排名信号,让活跃、有锚点的知识优先浮现,同时不屏蔽任何内容。

简而言之:如果记忆中存有条目,ContextForge 会根据与查询的相关性以及条目的活跃度、新鲜度、代码锚点和具体程度对其排名。纯语义相似度只是起点。

四个信号

每个信号叠加在嵌入模型返回的基础余弦相似度分数之上。提升是累加且有界的;有一个惩罚是乘法性的。不会过滤掉任何内容——当存在更可信的条目时,低分条目只是优先级降低,仍可被检索。

1. 测试数据排除

标记为 test 的条目默认从搜索结果中排除,防止测试种子数据污染真实查询。可通过传入 filters.tags: ["test"] 将其重新纳入。

效果:查询"auth flow"不再返回团队在编写测试时创建的固定数据行。

2. 新鲜度提升(时间衰减)

新鲜条目可在相似度分数基础上获得最高 +15% 的提升。提升量以 60 天为半衰期衰减,依据 updated_at 字段(回退到 created_at)。

今天
+15%
60 天后
+7.5%
120 天后
+3.75%

效果:当两条相关性相近的条目并存时,更新的那条胜出。旧条目不会被惩罚——只是不再获得额外提升。

3. Git 相关性

当条目引用的文件路径在过去 30 天内被追踪的 Git 仓库提交过,该条目可获得最高 +20% 的分数提升。提升量与条目引用的路径在近期提交中出现的比例成正比。

示例:一条提到 src/lib/auth.ts 的决策记录,当该文件正在被活跃提交时,排名会高于没有提及具体代码的通用计划。没有文件引用的条目保持中性——无法建立相关性。

效果:锚定到活跃代码的知识会优先于没有具体代码引用的构想。需要连接 Git 仓库——在 Git 集成 中完成设置。

4. 提案惩罚

标题或内容以 TODO: FIXME: WISH: XXX: HACK: IDEA: 开头的条目会受到 30% 的乘法惩罚。前缀必须位于最开头(空白符之后)——内联提及不触发此规则。

效果:AI 生成的 TODO 清单不再像已确定的事实一样排名。相同主题和措辞相近的情况下,以普通笔记保存的真实决策会胜过愿望清单。

如何组合计算

每个候选条目的最终分数计算公式:

final = min(
  1.0,
  (cosine + cosine*0.15*recency + cosine*0.20*git) * proposalPenalty
)

三个提升累加(各自贡献上限独立),提案惩罚对整体相乘。即使是完美匹配,一旦被标记为愿望,排名也会明显下降。

让条目排名靠前的技巧

  • 在内容中引用真实的文件路径或函数名。锚定到团队正在活跃提交的代码的条目,相比没有引用的条目能获得可测量的排名提升。
  • 当底层事实发生变化时,更新条目而非创建新条目。更新 updated_at 可保持新鲜度提升有效。
  • 将愿望存为任务,而非 Knowledge Items。任务跟踪位于 /dashboard/tasks。如果必须在记忆中保留 TODO,前缀会将其标记为待办——但排名会低于真实事实。
  • !避免"批量导入 30 条 AI 生成 TODO"的模式。 这些条目对相似查询的匹配分数也相近,会把真正有用的答案挤出视野。

常见问题

有条目会被隐藏不出现在结果中吗?

默认情况下只有标记为 test 的条目会被排除,且只要明确请求即可返回。其他所有内容始终可被检索——只是排名不同。

可以关闭这些信号吗?

目前公开 API 暂不支持。所有信号在每次查询时都会运行。如果您的使用场景受到某个信号的负面影响,欢迎联系我们,我们会考虑暴露相应开关。

没有连接仓库时 Git 相关性还有效吗?

不会——如果您没有连接仓库,git 因子始终为 0,条目不会因此信号得分或失分。其他三个信号仍然有效。

与其他记忆工具相比如何?

大多数语义记忆产品止步于余弦相似度。Git 相关性尤为罕见——它需要记忆库同时摄取 Git 活动,而 ContextForge 原生支持这一点。参见 Git 集成

相关内容

  • 语义搜索 ——底层向量匹配的工作原理。
  • Git 集成 ——连接仓库以激活信号 3(Git 相关性)。
  • 任务 ——存放愿望的正确位置,而非 Knowledge Items。