分区与 Spaces 立场

一些记忆产品(如 Nowledge Mem 的 Spaces)提供”记忆分区/泳道”:把记忆划入 互相隔离的空间,检索时限定在某个 Space 内。常见问题是:OKS 的 search 有没有 分区这个概念?

直接结论

没有硬分区,但有可选软 scope。 OKS 的召回默认全局——不会因为某个 “空间”而把候选排除在外。同时提供一个按需开启--scope:想聚焦某个 area 时才收窄,默认仍是全局。这是核对代码后的事实,不是设计口号。

代码事实

  • recall.pyrecall_knowledge(query, ..., scope=None)scope 为空时遍历 全部 wiki 页面做 6 因子打分;传入某个 area 时,在打分前只保留该 域的候选(软过滤,非硬隔离)。默认 None = 全局。
  • area(知识域)是页面的一个字段:默认只影响归类与返回;仅当你显式 --scope 时才用它收窄检索范围。
  • topic_id 命中 discuss trace 时给 +2.0 相关性加权——这是软加权, 用来把同话题内容顶上来,而不是把其它内容挡在外面。
  • raw/时间YYYY/MM/DD)分区存储;模态子目录只是外观,召回用 rglob 递归扫描,同样不构成隔离边界。--scope 只作用于 wiki(语义)路径, episodic(raw/)保持全局,因为 raw 按时间而非 area 组织。

换言之,OKS 里所有”分组”手段(area、模态目录、时间目录)都是软的: 影响排序与归类,默认从不切断可见性;--scope 是你主动按下的一个临时聚焦键。

用法:可选软 scope

oks search "缓存失效" --scope backend    # 只在 backend 域内做 6 因子召回
oks search "缓存失效"                     # 默认全局,跨域联想
oks recall "缓存失效" --scope backend     # 双路召回:知识路按域收窄,raw 路仍全局

--scope 复用已有的 area 字段,不新增任何存储结构,也不改变默认行为—— 它只是把”这次我想聚焦某域”变成一个显式、可解释、可省略的查询参数。 (search 兼容旧的 --domain / -d 别名。)

为什么不引入硬 Space

  • 一仓 = 一库 — OKS 的边界就是这个 git 仓库。需要真正隔离的知识,应该放到 另一个仓库,而不是在库内制造隐形围栏。
  • 软分组已足够area(22 个域)+ 时间分区 + topic_id 加权,已经能表达 “相关性偏好”,无需牺牲跨域联想能力。
  • 保留跨域联想 — 知识的价值常在意外连接处产生;硬 Space 会切断”用 A 域 经验照亮 B 域问题”这类召回,与 OKS”让知识互相挑战、补充”的取向相悖。
  • 可解释、可 diff — 分组靠字段与目录表达,一切可读可 git diff;隐式的 空间隔离往往是黑盒。

立场一句话

OKS 用软分组(area / 时间 / topic 加权)而非硬 Space。 要隔离,就再开一个仓库;库内始终保持全局可召回。


参考


回到顶部

This site uses Just the Docs, a documentation theme for Jekyll.