上下文集合与固定项
当智能体调用 start_session 时,它拿到的不是整个知识库,而是由你策展的起始上下文。Agents → Context 区块就是这份起始上下文的构建器:在这里你精确决定智能体一开始能看到什么——哪些笔记始终加载(固定项)、哪些可复用的组合包挂接到某个作用域(上下文集合),以及哪些记忆类别被静音。标签固定项与记忆静音是 file-first 的:它们存放在笔记的 frontmatter 里,重新克隆仓库后依然保留。上下文集合与跨空间固定项则存放在元数据库中(一处刻意的取舍:无论是重新克隆到干净主机,还是 none 模式,都不会保留它们)。
始终加载的固定项
固定项是一个手动的「始终加载」标记(即归属于 always-load 标签,而非排序)。固定项沿两条轴工作:
- 个人轴——你个人域中的笔记进入
profile.alwaysLoad,在每一次会话中加载。 - 项目轴——已标记项目子树中的笔记进入
project.alwaysLoad,当智能体在该项目中工作时加载(project提示)。
固定项与笔记所处的位置绑定:个人域中的笔记固定进入个人档案,项目子树中的笔记固定进入该项目的组合包。构建器展示的正是智能体实际会加载的内容——服务器端与预览中的上下文策展走的是同一套代码。
上下文集合——跨空间组合包
always-load 标签把固定项绑定到单一空间。上下文集合去掉了这一限制:上下文集合是一个具名、可复用的笔记引用集合,你可以把它挂接到另一个作用域。
一个典型场景:你从共享空间 conventions 的笔记里组装出一个「前端约定」集合,并把它挂接到另一个空间的多个项目上。这些项目的每一次会话都会拿到这些笔记,而你只需在一处编辑该集合——处处随之更新。
还有一个更轻量的选项——跨空间松散固定项:把单条笔记直接从另一个空间固定到某个作用域,无需集合外壳。always-load 标签仍用于同空间固定项;集合与松散固定项则用于跨空间。它们彼此共存,去重按 note-id 进行。
集合存在于它自己的所属空间中,在那里拥有成员资格即可获得可见性与编辑权限。个人集合只能挂接到你自己的个人域;共享集合(来自共享空间)可挂接到你的个人域或任意项目。你不能把个人集合挂接到项目——那样它只会为你一个人加载上下文。
顺序 = 加载优先级
固定项与集合在列表中的顺序由你决定(拖放),而非派生而来。它设定优先级:位置越靠上,加载得越早,在触及 token 预算时被裁剪得越晚。固定项与集合共享同一份排序列表(你可以把某个集合排到某个固定项之上)。整体加载顺序为固定项 → 集合 → 记忆(具体的压过笼统的),随后溢出部分按作用域预算裁剪掉。
记忆静音(mute)
智能体的记忆默认会加载进上下文。如果某个类别太吵,就有针对性地把它静音(mute)。静音会把这份记忆从所有它无需显式请求就自动到达智能体的地方移除:
- 个人档案,它在
start_session时立即加载; recall组合包的组装;start_session(project).knownValues中的类别字典。
search 不会过滤掉被静音的记忆:它对记忆建立索引,正是为了「写入前先搜索」的去重。否则智能体就找不到被静音的类别,会重新造出一份重复。静音让自动上下文安静下来,它不是删除:显式搜索与审计仍能看到一切。反向操作是同一条轴上的 Unmute。
单一 token 预算
构建器各区块的上方有一个加载量表,其刻度严格对应当前作用域的预算。个人响应有一份预算(固定项在前,记忆在后);项目响应有自己的预算,其中项目固定项在前,个人背景则嵌进剩余空间。加载的内容始终 ≤ 预算,裁剪逐项可见。项目记忆不会立即加载,而是按需拉取;如果某个具体的项目事实始终需要,就把那条笔记固定下来。