分区与 Spaces 立场
一些记忆产品(如 Nowledge Mem 的 Spaces)提供”记忆分区/泳道”:把记忆划入 互相隔离的空间,检索时限定在某个 Space 内。常见问题是:OKS 的 search 有没有 分区这个概念?
直接结论
没有硬分区,但有可选软 scope。 OKS 的召回默认全局——不会因为某个 “空间”而把候选排除在外。同时提供一个按需开启的 --scope:想聚焦某个 area 时才收窄,默认仍是全局。这是核对代码后的事实,不是设计口号。
代码事实
recall.py的recall_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。 要隔离,就再开一个仓库;库内始终保持全局可召回。