智能体记忆原则

第一部分核算了单次模型调用的成本,并探讨了何时购买更多候选方案能够增强决策的证据基础。一条轨迹会进行数十次乃至数百次这样的调用,而模型在调用之间不保留任何内容,因此,下一次调用所掌握的全部任务信息,都是由运行时携带并重新交给模型的状态。第二部分完整讨论 H·S·A 中的状态(State)维度。所携带的状态有三种失效方式:其规模超出单次调用能够利用的范围;当它所描述的底层来源发生变化时,它会过时;当两个副本不一致时,它会自相矛盾。本部分讨论状态的两个层面。在会话内(\(S_1\)),状态是每次调用读取的上下文,以及服务系统据此计算出的注意力状态。在会话之外(\(S_3\)),状态是持久保存的来源、日志、索引和笔记,只有经过检索才能发挥作用。位于两者之间的沙箱工作区(\(S_2\))将在第三部分引入,届时智能体将获得向其中写入的权限。这些位置并非同一个缓存的不同层级。每处都保存着不同类型的对象,由不同的主体管理;以下原则规定了各处可以保存什么,以及其中的内容何时不再符合事实。

Principle 4: 上下文是经过选择的工作集
不变量:模型能够可靠利用的上下文远少于其标称窗口所能容纳的内容,任务成功率会在某个有效工作集大小处达到峰值,此后随着更多词元分散注意力并延长预填充时间而下降。因此,为单次调用准备的词元是从轨迹历史中选取的内容,而非历史本身。完整论述见 工作集容量。

推论:运行时必须依据在自身工作负载上测得的有效大小,选择、排列并限制每次调用所见的内容。压缩历史时,必须原样保留后续操作所依赖的标识符、路径和失败的断言。

运行时选出的内容,必须由服务系统转换为注意力状态,并保存在加速器内存中。

Principle 5: 注意力状态由词元前缀派生
不变量:一个序列的 KV 缓存是其精确词元前缀的函数。它只能复用到首个不同词元之前,只能在前缀完全相同的序列之间共享,并且随时可以根据词元重建,因此丢失它只会增加计算成本,绝不会损失任务知识。完整论述见 跨轮次前缀缓存。

推论:智能体运行框架应按易变性从低到高的顺序准备词元,并在两次压缩之间保持历史仅追加,使每一轮都能复用上一轮的计算结果。服务系统应将注意力状态保存在固定大小的块中,使分支轨迹能够共享前缀块,并通过比较暂停轨迹的等待时间与重新加载和重新计算的成本,决定保留、卸载还是丢弃其状态。

必须在会话结束后继续存在的内容,完全存放在模型之外,且只能通过检索重新进入模型。

Principle 6: 检索是一种契约,而非回忆
不变量:持久信息只有经过检索并被置入上下文,才会重新进入模型;检索分数衡量的是与查询的相似程度,而非记录是否为最新、是否具有权威性或是否获准访问。完整论述见 检索契约。

推论:每次从持久存储读取内容,无论是运行时预先将其置入上下文,还是模型通过搜索工具请求,都必须经过一份带有明确类型的契约,限定范围、新鲜度、候选数量和延迟。运行时根据所需信息选择精确搜索、词法检索、稠密检索或图检索,并在将候选内容置入上下文前,依据其来源核验每个候选项的版本与出处。

状态所在的这三处位置,都遵循同一条关于哪个副本具有权威性的规则。

Principle 7: 权威性始终属于来源
不变量:只有源工件,例如文件系统、版本控制树和数据库,才具有权威性。置入上下文的观测结果、压缩后的摘要、索引条目、智能体编写的笔记,以及根据其中任何内容计算出的注意力状态,都是派生视图;当其来源被写入时,这些视图便会失真,而模型无法判断这种变化何时发生。关于提示词的完整论述见 上下文失效,关于持久存储的完整论述见 存储失效处理。

推论:每次修改操作都必须在下一次调用之前,使所有读取过被修改来源的派生视图失效;新鲜度应依据版本而非存续时间判断。各处以各自的成本处理失效:在提示词中标记、刷新或删除过时条目,在读取索引时过滤过时记录,以及将智能体编写的笔记标记为需要重新验证。

上下文工程 决定每次调用能看到哪些词元,并在任务跨度增长时,使这些词元始终保持规模受限、顺序合理且内容为最新。KV 缓存管理 沿着这些词元进入服务系统,核算在一条轨迹的各轮调用、分叉和工具等待期间保留其注意力状态的成本。长期记忆 决定哪些内容在会话结束后继续存在、它们如何返回上下文,以及智能体可以写回什么。即使一条轨迹记住了所需的一切,它仍然无法改变模型之外的任何事物;如何安全地赋予它这种能力,是第三部分的任务。

回到顶部
← 三卷书架