文 | 王丰辉(资深金融研究者)
这个念头不是凭空来的。用智能体的这大半年,我一直有种说不清的别扭,直到前几天我翻了一遍我的智能体工作区,才看清别扭在哪里。
我数了数它替我记下的东西:上百份每天的工作记录,十九份自动存档,五个备份目录。这三样没有一样是我主动加的。每聊过一轮,它就多一份记录;我每改过一批文件,它也会多出一个备份目录。都是几段自动跑的程序顺手留下的,我没有为它们下过任何一个决定。
可另一方面的事情正好相反。这半年我在它身上花的时间,最多的不是做加法,是做减法。最近清掉的一件,是两份说的是同一件事的记录。当初分两次记下来,用词还不一样,留着就各占一个地方,以后要找还得两边都找。我把它们并成了一份,再回头把引用过它们的地方批量改过来。
它一直在长,我却一直在替它减。
我原来以为,用得越久它就越懂我。后来发现不是这么回事。这半年我攒下来的规矩,没有一条是我自己想出来的,每一条背后都是一次纠错。
就说用词。我原先以为模型最怕碰上生词,看见没见过的词会停下来问一句。事实正相反。你给它一个自己造的词,它不会问这是什么意思,它会顺着你的话往下接。它猜得太顺,顺到你根本看不出它在猜。
这听上去是优点,其实是麻烦。它不会给你一个"我不确定"的信号,而是一边猜一边往前走,等走出去很远,你才发现它一开始就理解岔了。所以我后来养成一个习惯,重要的事情,我得先把话想清楚、再写下来。文件>记忆,这个习惯不是它要求的,是我自己吃了几次亏才长出来的。
写下来的就留住了,没写下来的无法常驻上下文。这两周出过三次事:一次是某份材料已经用过,我没记下它用在了哪里;一次是把两份并成一份之后,忘了登记原来那份去了哪儿;还有一次更干脆,我整理好的那一版,跟着原来的文件一起被删掉了。三件事看着不像一回事:谁来记忆,记到哪儿(记忆是分层的)。
错误不会自愈,只会累积。
回头看,我这半年真正在做的只有一件事:替它做它不做的那部分。
“加”不用我操心。它做得又快又勤,而且它越能干,加进来的东西越多,我要面对的只会越来越重。缺的一直是减。我起初以为减就是清理,后来发现这里头差得远。
一种是按规则来的:同一条内容重复了,删掉;过了一个时间,收进存档;格式不统一,改齐。这种不需要判断,规则定下来就能自动跑,早就该交给脚本去做。另一种不在规则里:哪两条记录其实是互相矛盾的,哪一条经验可以抽出来,变成以后能固化的,哪些东西该彻底丢掉。这些只能一条一条看过去,需要判断,脚本替不了。
我做的这类判断,很大一部分是它该放哪一层。
一种是该智能体记住的,尤其是人机交互的原则,归 memory(记忆),又分全局 memory 和场景 memory;一种是多次打磨之后可以固化的,可以是经验,也可以是技巧,归 skill(技能)。混在一处,找哪一样都不顺。后来又拆出第三种——那些可以自动跑的,不需要推理的,不该占记忆的地方,也不该占技能的地方,它就该是一段脚本。
判据最后落到一句话上:这一步需不需要判断。不需要判断、照着规则就能做的,写成脚本,比如同一份内容重复了删掉、过了一个时间收进存档。需要判断、每次情况都不一样的,写成一条能复用的 skill,下次碰上照着走。剩下那部分既不是动作也不是流程,是"原则"的,才进 memory。
如上所说,记忆也不止一层。最上面几条,换到哪个项目都成立,比如"事实以文件为准""不确定就直接问"。往下是索引,管的是怎么找,不管是什么。再往下是稳定的事实和眼下的进展。再往下是可复用的 skill 和脚本。最下面一层是当天的流水,过了当天就不该再占地方。
这些边界不是一次画好的。我一路踩出来:索引和约定原本混在同一份文件里,找东西得从头翻;当天的流水里真正值钱的是"决定了什么、为什么这么定",为此我重建了日志的模板;还有一条,脚本之间怎么串起来,我把它写进了 skill 里,可按判据它每一步都定了、不需要判断,早该归脚本。
每一次都是发现混着,再切开。切开过一阵子,新的东西又混进去。所以真正要的不是一次把边界想清楚,那是想不完的,而是隔一段时间回头翻一遍,把该删的删、该合的合、该挪的挪。而且这件事不能指望我记得,它得是一个定下来的动作,到点就做,做没做看得出来。
这件事到今天我都是自己做,审视架构、审视边界、第一性原理。我留意过现在的通用智能体走到哪一步:技能它已经能自己长,一件事做成了,它把成功的路子存下来,下次直接调用;记忆策略也刚能自己判断一点,什么值得从当次对话挪到长期。可最上面这一层,没有一家是自己长出来的,都是人先划好格子,它往里填。我看过的说法是,硬给它塞一套固定分类反而让它变差,不如让它自己管;可真让它自己管,划格子这一步它管不了。所以格子到今天还是人在划,划完还得人隔一阵回头修。
我发现需要做减法,需要去做定期的减脂,需要去做定期的整理和抽象,而恰恰这一层是对应到了人类的大脑的梦这一层。
在跟智能体交互的这段时间里,经过经验和认知的迭代,我逐渐认知到通用的智能体是需要有"梦"这一层的。
这半年我替它做的事,归到一起只有三件。
搬运是其中一件,当天发生过的事,挑出值得留的,写到长期放着的地方去。
另一件是修剪。两份说的是同一件事,合成一份;两条互相矛盾,留下站得住的,去掉另一条;有些已经过时,收进存档,不再让它出现在眼前。
最难的一件是抽象。把反复出现的具体问题,抽成一条以后能照着做的原则。
这三件事,人脑没有放在清醒的时候做。它专门留了一个时段,白天忙着往里装,夜里停下来收拾。那个时段叫睡眠,梦就发生在那里。
三件事里,后两件才是重头。梦的价值不在搬运,在减法和抽象。 搬运只是把东西换个柜子,减法和抽象动的是结构。规则能兜住的那部分清理算不上难,难的是需要判断的那部分:哪两条其实是互相矛盾的,哪一条经验值得抽出来,哪些该彻底丢掉。这些判断人做得来,只是慢,也烦,手头一有别的事压上来,最先放下的就是它。
我说的梦不是梦里的那些画面,是睡觉这段时间大脑在做的事。这一块不是我研究出来的,我是看来的:有说法讲,睡眠期间大脑会把当天的经历再走一遍,该留的留下,不要的抹掉,再把新的和旧的接上。
为什么这件事非得离开现场去做,放梦里去做。在场的时候,注意力全在手上那一件事上。你看到的是下一句要说的话、下一个要处理的东西,看不到过去几个月里哪些东西重合了、哪些打架了。还有一层,任何一条记录,在它被写下的那一次里都显得有用,当时不记就觉得会丢;该不该留,得等你站到那一次之外才判得出来。最麻烦的是不做的后果。不整理,错的记录不会自己走掉,它会被一遍一遍当成事实读回来,越读越真。
这个思路现在已经有智能体在做。有的在原来的智能体旁边挂一个专门负责整理的,趁它闲着把记忆理一遍,等它下一次醒来,直接读到整理过的那一版;有的定期动手,把重复的合并、过期的清掉、互相矛盾的挑出来消掉,而且每一步改动都能查、能退回去;还有一种干脆照着睡眠本身的几个阶段来,先分类,再把重要的升进长期,最后把新旧连起来。
做法不一样,但停下的地方是同一个:它们整理的都是摆在外面的记忆,模型本身没有一个动过。这一半已经有人做出来了,另一半还是空的。
梦这一层需要解决两件事情:第一层,能力的固化、沉淀与迁移。第二层,自我迭代。而自我迭代这一层,现在完全没有达到。这两件事看着像并排的两个目标,其实在同一条通道上,一个在前一个在后。自我迭代说的是让模型自己把自己变得更强,现在的 RSI,实际上是有两个出口。这个说法是我自己归纳的,未必准确,但它能把我看到的事情串起来。
第一个出口写回外面,写进记忆库、能复用的技能,还有我以后照着做的原则或流程。它改的是下一次醒来的起点。它下一次碰上同一类问题,手里拿的东西不一样,走到的结论也就不一样。这个出口是通的,我们拿到的,正是能力的固化、沉淀与迁移。
第二个出口写回模型自己,写进权重。它改的是能力的本体。通了,才算自我进步,才算真正的自我迭代。而它到今天还是断的。
这条通道到今天还断着,不是没人试过,是卡住它的地方不止一处。
我原来的想法很简单,记忆就是把东西存起来,存得越多越全越好。这半年看下来,难的不是存,是决定留什么、去掉什么、把哪几条合成一条。这三件事,它一件也没有自己做过。
而这些事,从第一天到现在都是我在做。它什么时候能自己接手,我不知道。它得先学会睡觉。(本文为作者观点,不代表本头条号立场)
