李博!我最近被一个事儿烦死了,每次开新会话跟Codex聊,它就跟失忆了一样,之前说好的项目规范全忘了。
哈哈,你这是踩到LLM无状态的经典坑了。不过你运气好,Codex刚上了Memory功能,专治这个。
诶对对对,我看到了!但我没太搞懂它到底怎么实现的,你给我讲讲呗。
行,先说根本问题。你知道为什么每次新会话AI都是白纸一张吗?因为LLM本质上就是个无记忆的函数——输入什么处理什么,它不会自动保留任何历史状态。
对,GPT-4 Turbo有128K的上下文窗口,但那也只是单次会话内的事儿,跨会话就没了。
没错,所以Memory的思路其实特别直观——在模型层之上加一层持久化抽象。把历史会话里有价值的信息存下来,新会话开始时自动注入进去。
等等,这不就是RAG吗?检索增强生成那套?
嘿,可以啊小雨,嗅觉很灵敏。确实是类RAG架构,但它是个性化的RAG——知识库不是通用文档,而是你自己的历史会话里提炼出来的偏好和项目知识。
那它具体怎么决定哪些信息值得存呢?总不能把我每句话都存下来吧。
这就是它设计精巧的地方了。开启Memory之后,系统会先进入一个观察期,判断当前会话有没有值得提取的信息。不是所有对话都会被记录的。
你想啊,如果什么都存,噪声太多,反而会污染后续的上下文注入。所以它有一套智能筛选机制。
那过了筛选之后呢?直接存?
没那么简单。我跟你说,这里有个特别关键的步骤——脱敏处理。
真的假的?它还会自动脱敏?
当然!你想想,开发者对话里经常会不小心贴API Key、数据库密码这些东西。系统用正则匹配加语义识别双管齐下,比如sk-开头的OpenAI密钥、ghp-开头的GitHub Token,这些固定格式的直接正则抓。
更厉害的是,你说一句'我的数据库密码是xyz123',即使没有固定格式,模型也能语义识别出来这是敏感信息。
这个确实牛,我们做产品的时候安全评审就最怕这种场景。
对,脱敏完了还有一步额度校验,确认你Memory存储空间够用才会真正写入。
那存储在哪儿?云端还是本地?
本地。存在CODEX_HOME目录下的memories子目录里。这是个Local-first的设计哲学——你的项目知识不会上传到任何第三方服务器。
哦这个好,隐私友好。但跨设备就没法同步了吧?
对,除非你手动迁移。数据主权和便利性之间的取舍嘛。
那每条记忆具体长什么样?
四个核心模块:线程阶段性摘要、稳定记忆条目、近期上下文线索、还有Agents Markdown规范。
等会儿让我想想……稳定记忆条目就是那些长期不变的东西,比如我用Taro框架、TypeScript、BEM命名规范这些?
完全正确!而且它会跟你仓库里设定的项目规范绑定,确保AI始终遵守你的约定。
我突然理解了。就是说我第一次告诉它用Taro加TypeScript,第二次让它写新组件的时候,它直接就按这套来了,不用我再说一遍。
对!甚至你踩过的坑它也记得。比如某个API有兼容性问题,下次遇到类似调用它会自动规避。
这不就是我梦寐以求的——一个真正了解我项目的AI搭档嘛!
你们产品经理就知道用户体验,哈哈。但从技术角度说,这确实是RAG在个人开发场景的一次精巧落地。
得了吧,用户体验不重要吗?那我问你,什么东西不该往Memory里存?
密钥、Token、账号密码,这些绝对不行。虽然有脱敏机制,但你也别主动往里贴完整密钥。还有团队内部机密规范、临时调试信息,这些也没必要。
那适合存的呢?
命名习惯、技术选型、代码模板、踩过的坑、输出格式偏好——这些长期稳定的东西,越早让它记住越好。
嗯,我感觉这个功能的核心价值就是——随着时间推移,AI对你的项目理解会越来越深。
对,本质上它把'每次重新教AI'变成了'AI持续学习你'。从无状态到有状态,这一步跨得挺大的。
行,我回去就把Memory打开,先把我那个小程序项目的规范喂进去。李博,今天又学到了,谢啦。
客气啥,下次有坑记得来找我聊,我也好积累点素材,哈哈。