搜索排名
ContextForge 在语义相似度之上叠加四个排名信号,让活跃、有锚点的知识优先浮现,同时不屏蔽任何内容。
简而言之:如果记忆中存有条目,ContextForge 会根据与查询的相关性以及条目的活跃度、新鲜度、代码锚点和具体程度对其排名。纯语义相似度只是起点。
四个信号
每个信号叠加在嵌入模型返回的基础余弦相似度分数之上。提升是累加且有界的;有一个惩罚是乘法性的。不会过滤掉任何内容——当存在更可信的条目时,低分条目只是优先级降低,仍可被检索。
1. 测试数据排除
标记为 test 的条目默认从搜索结果中排除,防止测试种子数据污染真实查询。可通过传入 filters.tags: ["test"] 将其重新纳入。
效果:查询"auth flow"不再返回团队在编写测试时创建的固定数据行。
2. 新鲜度提升(时间衰减)
新鲜条目可在相似度分数基础上获得最高 +15% 的提升。提升量以 60 天为半衰期衰减,依据 updated_at 字段(回退到 created_at)。
效果:当两条相关性相近的条目并存时,更新的那条胜出。旧条目不会被惩罚——只是不再获得额外提升。
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 集成。