news 2026/9/20 3:51:16

多代理协作实战:用Atlas共享记忆打通Claude Code与Codex

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
多代理协作实战:用Atlas共享记忆打通Claude Code与Codex

1. 多代理协作的动机——先把“为什么”想清楚,再谈“怎么做”

1.1 单代理工作流里那个让人抓狂的“失忆”时刻

我本地同时装了 Claude Code 和 Codex 两个编码代理,都是终端里的 CLI 版本。一开始我根本觉得不需要什么“多代理协作”,哪个顺手就用哪个。但用久了,一个特别扎心的问题就冒出来了:上午用 Claude Code 把某个模块的重构方案定下来了,下午切到 Codex 想让它接着写实现,结果 Codex 对上午的讨论一概不知。它不知道你为什么要拆这个模块,不知道你划定的目录边界,也不知道你已经排除掉了哪几个方案。于是它非常礼貌地按自己的“常识”重新设计了一遍,和上午的方案直接冲突。

这个现象我用一句话总结:工具之间没有记忆,等于每换一个工具就失忆一次。你在一个代理身上灌进去的上下文、历史决策、踩坑记录,在另一个代理那边连渣都剩不下。

有人会觉得,那我把上下文复制粘贴过去不就行了?理论上可以,实际上做不到。项目稍微大一点,上下文就动辄几万 token,拷贝成本极高,而且塞进去之后,接收方也不一定能抓住重点,经常出现“你贴了 5000 行背景说明,它只抓住第一段然后跑偏了”的情况。所以我后来一直强调一个观点:跨代理协作的核心不是转述,而是共享一份结构化的记忆。

1.2 为什么要用两个不同的代理干活,而不是一个工具走到黑

先说一个大家可能都遇到过的场景:Claude Code 在代码分析和重构方案设计上确实很强,你给它一段烂代码,它能给你拆得很细,告诉你这里为什么坏、要怎么改、改动风险有多大。而 Codex 在特定任务上效率很高,比如批量生成单元测试、快速做一个技术调研、按照已有风格补齐模板代码,这类机械重复但量大的活丢给它特别省心。

我用这两个工具时,发现一个特别自然的协作节奏:Claude Code 负责“想”——做架构拆解、方案选型、复杂重构的步骤推演;Codex 负责“写”——把已经明确的任务落地成代码,批量产出测试用例,或者快速搜索一个 API 的用法并给出示例。理论上这个节奏很完美,但实际上在引入共享记忆之前根本跑不起来。

为什么跑不起来?因为“想”和“写”之间需要大量的上下文传递。Claude Code 得出“这个模块要拆成 service + repository 两层,接口定义在这里,异常处理走统一逻辑”的结论,Codex 接活时要是不知道这些,写出来的东西又会回到“单文件堆所有逻辑”的旧路。你反复纠正的代价,可能比自己手写还高。

1.3 多代理协作的正确打开方式:角色分工加共享记忆,缺一不可

多代理协作不是把多个 AI 丢进同一个项目目录就行。真正让它们能协作起来,需要两个条件:第一,每个代理有清晰的角色定位,知道自己在项目里负责什么;第二,它们之间有一套共同遵守的记忆机制,把关键决策和历史记录沉淀下来。

角色分工这件事比较直观,你可以在项目说明里写清楚“Claude Code 负责方案设计,Codex 负责代码实现”,但问题是:AI 代理之间的记忆并不会因为这个分工自动打通。它们各自有独立的上下文窗口,各自生成独立的会话历史,互不知晓。

所以这个时候需要第三方来当“共同记忆库”。这个记忆库可以是一个目录、一个文件、一组带索引的文档,或者一个更智能的记忆管理工具。无论具体形态是什么,核心思路都一样:把代理的短期会话记忆和长期项目记忆拆开。短期记忆只在这一轮对话里有效,长期记忆则存放在一个独立的地方,任何代理在开始干活之前,先读一遍长期记忆,再进入自己的短期工作上下文。

这一篇文章要聊的 Atlas,就是做这件事的工具。

2. Atlas 到底提供了什么——拆解“共享记忆”的设计思路

2.1 我理解的 Atlas:它不是又一个跑代码的代理,而是代理之间的记忆中枢

在详细说怎么用之前,先讲清楚 Atlas 的定位。我一开始犯过一个错误,以为 Atlas 是个类似“代理调度器”的东西,能把任务自动分配给 Claude Code 或 Codex。后来仔细读文档才发现不是这样。

Atlas 做的事情更底层,也更实用:它负责管理项目记忆。具体来说,它会维护一个结构化的记忆库,里面记录了这个项目的关键信息,包括架构约定、模块职责、技术选型、常见报错和处理方式、用户偏好等。Claude Code 和 Codex 可以通过 Atlas 提供的接口或者文件协议,读写这份共享记忆。

打个比方。以前你开两个顾问,让他们分别干活,结果两个顾问各记各的笔记,谁也不知道对方写了什么。Atlas 就是那个公共档案柜:每个人进办公室先翻档案,干完活再把自己的新发现归档。这样一来,不管今天谁值班,他看到的“项目现状”都是一致的。

这种设计有一个很大的好处:它不锁死工具。你不用为了“协作”而生硬地让 Claude Code 和 Codex 用同一个框架、同一套插件。工具尽可以不同,只要它们都对接同一个记忆库,就能形成协作关系。

2.2 Atlas 记忆库里的内容形态:不止是聊天记录,而是结构化经验

最开始我用 Atlas 的时候,以为它就是把两边代理的对话历史存下来,然后互相喂给对方。试过之后发现这个理解不对,而且这样做的效果也不好——原始聊天记录夹杂大量噪音,直接共享反而容易把接收方带偏。

Atlas 的做法是:把聊天过程中提炼出来的“记忆”,按照类别存入记忆库。比如在 Atlas 的 memory 目录下,会有几个子分类:项目架构说明、技术决策记录、开发约定、已知问题与解决方案、用户偏好。Claude Code 在分析代码时发现“当前项目的数据库连接方式沿用的是老旧的单例模式,建议后续迁移到连接池”,这个信息会被整理成一条“技术决策记录”,存入记忆库。Codex 下次接手数据库相关任务时,Atlas 会先把这条记忆注入它的上下文,它就知道当前项目的一个技术债背景了。

这里有一个很关键的细节:记忆需要有一个失效机制。项目是会变化的。比如三周前定的是“统一走 REST API 风格”,三周后可以改成“新模块用 GraphQL,老模块维持 REST”。如果记忆库里还存着那条旧决策,新的代理就会做错决定。Atlas 的方法是给每条记忆打上状态标签:活跃、已废弃、待确认,并且支持手动调整。每次代理读取记忆时,废弃状态的记忆默认不参与上下文注入。

2.3 为什么推荐记忆共享,而不是把上下文合并成一个超长会话

我知道有些人的想法是:与其搞一套记忆库,不如直接让两个代理共用一个超长上下文窗口不就行了?一个会话里同时跑 Claude Code 和 Codex,后者的新增内容自然被前者看到。

这个方案理论上可行,工程上很难落地。首先,超长上下文的 token 消耗极其恐怖,尤其是在频繁交替工作的场景下,费用会成倍增长。其次,上下文窗口越长,模型注意力越容易被稀释,代理很可能忽略掉真正关键的信息,反而被无关紧要的对话细节影响判断。这是一个“越多越乱”的反向效应。最后,不同代理对上下文的敏感度不一样,强行合并会话,等于让两边都吃下大量无关信息,反而降低了各自的专业能力。

Atlas 的共享记忆则走了一条“少而精”的路线。它不把全部历史塞进上下文,而是按需只注入当前任务真正相关的记忆段。做数据库迁移时就注入数据库相关的记忆,写前端组件时就注入 UI 约定相关的记忆。这种“相关即注入”的策略,既保证了代理之间的信息同步,又不会让上下文被撑爆。

3. 实操笔记——用 Atlas 打通 Claude Code 和 Codex 的完整流程

3.1 环境准备:两个 CLI 代理加一个 Atlas 工作区

先说基础环境。我是在 macOS 上做的这套方案,Windows 和 Linux 的操作大同小异,主要是安装路径和 PATH 配置的区别。

第一步,确认 Claude Code 和 Codex 都已经能在终端里正常跑起来。我安装 Claude Code 用的是官方脚本,安装完成后在终端里执行claude就能进入交互界面。Codex 则是通过 npm 全局安装的 CLI 版本,执行codex进入命令行。两个工具都各自完成了登录,这也是后面能正常工作的前置条件。

第二步,创建项目工作区。我习惯在项目的根目录下建一个atlas/文件夹作为记忆库所在地,里面再分memory/logs/两个子目录。前者放结构化的记忆条目,后者保留每次会话的原始记录备查。这个目录结构可以理解为 Atla 的“档案柜”。

第三步,确认 Atlas 能访问这两个代理的会话接口。从我实际使用的版本来看,Atlas 是通过读取代理的会话日志文件来获取信息的,所以需要确认 Claude Code 和 Codex 在运行时确实会落盘会话日志。Claude Code 会在项目缓存目录里写会话记录,Codex 也会在本地保留历史。这一步要是不确认,后面 Atlas 就会“看不到”你干过什么,记忆库自然也就更新不了。

3.2 把 Claude Code 的方案讨论沉淀为记忆

我的实际操作流程一般是这样的。先用 Claude Code 进入一段方案设计会话,比如让它分析当前项目的登录模块,提出重构方案。Claude Code 会输出一段分析,包括现状问题、目标架构、迁移步骤、风险点。

这个对话结束之后,我会手动触发一次 Atlas 的记忆归档操作。具体命令是atlas commit --from claude,它的作用就是扫描 Claude Code 的最新会话记录,提取出其中的技术决策、架构分析等关键信息,然后写入记忆库。写入之前,Atlas 会让我确认哪些条目要保存、保存到哪个分类。

这个“人工确认”的机制我一开始嫌麻烦,觉得多此一举。后来发现这个环节特别重要——为什么?因为 AI 代理在会话里会输出大量的候选项、推敲过程、甚至错误猜测,如果全部归档,记忆库就变成了一堆垃圾信息,下次读取时反而干扰判断。人工筛选的目的,就是只把真正有结论价值的记忆沉淀下来。

归档完成后,我会检查一下记忆库里的条目内容。大多数时候 Atlas 提取得还算准确,但我偶尔也会遇到它把“候选方案”和“最终方案”搞混的情况,这时候直接编辑记忆文件修正即可。

3.3 让 Codex 读取记忆后继续干活

方案讨论归档之后,接下来要让 Codex 接手实现。关键动作来了:在调用 Codex 之前,我先执行atlas inject --to codex --task "根据记忆库实现登录模块重构"

这一步做了什么?它会从记忆库里检索与当前任务相关的记忆条目,把它们格式化后注入到 Codex 的启动上下文中。Codex 启动时就能“看到”Claude Code 之前定的目标架构、模块边界、特殊约定,比如数据库表结构保持不变、接口路径不改变、异常处理走统一响应体。这些都是实现阶段最需要的信息。

我实测下来,注入记忆之后 Codex 的工作质量提升是非常明显的。没注入之前,Codex 会画蛇添足地改掉一些不该改的接口,或者新增一个多余的配置项;注入之后,Codex 的行为明显收敛了,不仅接口签名和原方案一致,而且连注释里的关键词都和方案文档用的保持一致。这就是共享记忆带来的直接收益。

3.4 关闭代码生成之后,把 Codex 的新发现归档回记忆库

Codex 完成实现之后还有一步,很多人会漏掉:把实现阶段发现的新信息归档回去。比如 Codex 在写代码时发现,原来设计文档里提到的某个依赖库在新版本里已经废弃了,它换用了一个替代方案,并且给出了理由。这个信息如果不归档,下次 Claude Code 做新方案时又会踩一遍坑。

所以我处理完实现之后会再执行一次atlas commit --from codex,把 Codex 这次会话里产生的技术发现归档进记忆库。这样一轮协作完成后,记忆库里的内容实际上是双向更新的:Claude Code 的决策进来了,Codex 的实现反馈也进来了,两边对项目的理解都在同一个基准面上迭代。

这里补充一个数据交换的细节。Atlas 的注入操作并不是把全部记忆一股脑塞给代理,而是有一个相关性计算环节。它会根据你传入的任务描述,在记忆库里检索最相关的一批条目,控制注入长度,避免无关记忆占用上下文窗口。如果我发现注入的内容不是自己想要的,可以手动追加关键词,让检索更精准。

4. 使用 Atlas 过程中的常见问题与排查心得

4.1 Codex 端提示认证或模型不可用的排查思路

在实际运行这套流程的时候,我遇到过几次比较棘手的报错。一次是 Codex 启动时提示auth token is unavailable,翻译过来就是“拿不到登录凭据”。这个问题的原因一般是 Codex 的本地登录状态过期了,或者环境变量里的凭据信息没有被正确加载。我当时的处理方式是先重新执行 Codex 的登录命令,确认浏览器弹出的授权流程正常完成,然后再重新打开终端会话,确认环境变量加载正常。

还有一次遇到的是模型相关的报错,具体是某个模型标识在当前 Codex 配置中不受支持。这类情况我一般先去查一下 Codex 当前版本支持的模型列表,然后检查配置文件里的 model 字段,把它改成我订阅的账号实际可用的模型。同步记忆和配置调整这两件事一定要做,否则下游工具运行依赖的模型不可用,共享记忆再好也白搭。

Claude Code 端的问题相对少一些,主要是权限问题。它有时会提示需要给目录完全访问权限,我的做法是直接在授权弹窗里给当前项目目录的读写权限,而不是只给一个最小权限,因为后续 Atlas 需要扫描 Claude Code 的会话日志,路径受限的话会扫不到。

4.2 记忆条目出现冲突,新老方案互相打架

使用一段时间后,记忆库里可能会出现冲突的条目。比如早期归档了一条“数据库连接统一走旧单例模式”,后来项目组决定迁移到连接池,又归档了一条“用连接池替代单例模式”。两条记忆同时存在,新代理读取的时候就可能产生困惑。

解决这个问题的办法是在记忆条目中显式声明状态。Atlas 里每条记忆都有“活跃/已废弃”标签,归档新决策时,手动扫描一下历史条目,把过时的那条标记为“已废弃”即可。这样做之后,检索时旧条目基本不会再命中,除非拖拽关键词强行指定。养成“归档新记忆时顺手废弃旧记忆”的习惯,能省掉很多后期排障时间。

4.3 注入的记忆被代理忽略,感觉像没注入一样

这个问题比较隐蔽。我在一次任务中发现,Codex 启动时明明注入了记忆内容,但生成的代码风格还是不符合既定约定,说明它没理解好注入的记忆。后来我查看 Atlas 注入的完整内容,发现问题出在注入格式上——有些记忆条目描述太含糊,比如“按项目规范处理异常”,缺少具体规则,代理看到了也不知道该怎么做。

遇到这种情况,我的经验是回到记忆库里把模糊条目改成明确可执行的规则形式。比如把“按项目规范处理异常”改成“所有业务异常统一丢弃堆栈,只返回 error_code 和 message 字段,并写入日志服务”。具体化之后的记忆,代理的遵循度会显著提升。这属于记忆整理质量的范畴,和 Atlas 工具本身无关,但也值得注意。

4.4 一个被很多人忽视的问题:日志目录迁移导致记忆断档

有一次我重装了 Codex,旧版 CLI 的日志目录和新版不一致,导致 Atlas 扫描会话记录时突然找不到历史数据了,记忆库停更好几个小时。我当时排查了很久,才发现是新旧版本把日志写入路径换了位置。

所以如果你也重装了代理工具,一定要顺手检查一下会话日志的输出路径。我现在的做法是在 Atlas 配置里显式指定两个代理各自日志目录的绝对路径,而不是依赖默认配置,这样即使工具更新换代,路径也不会突然失效。设置完之后可以手动跑一次atlas commit,确认能扫描到新的日志文件再继续干活。

5. 效果总结与我的实际体会——这套方案到底值不值得做

说实话,一开始搭这套多代理共享记忆的方案,我是抱着“试一试”的心态,觉得顶多就是省一点复制粘贴的功夫。但用了一周之后,我发现自己回不去了。

以前下午开工时,我得花时间回忆上午 Claude Code 讨论到了哪里、定了什么方案,然后努力把这些背景转述给 Codex。现在不需要了。Codex 启动时就能通过 Atlas 看到全部关键决策,直接进入干活状态。这种体验上的变化,带来的不只是效率提升,更重要的是让我更愿意把复杂的重构任务拆给多个代理去做,反正它们之间不会因为记忆断档而互相踩脚。

这套方案真正解决的问题是:不同 AI 代理之间的信息连续性。Claude Code 和 Codex 各有所长,但如果它们各自为战,协作成本会高到让你宁可自己写。Atlas 提供了一个记忆中枢,让“角色分工”真正落地。每一次方案讨论、每一次实现反馈,都会被沉淀进记忆库,两个代理基于同一份事实做判断,项目的上下文不再随着会话结束而消失。

当然,这个方案也不是没有前提。它要求使用者养成一个不错的习惯:每次和代理协作完,花一两分钟做记忆归档,把有价值的信息沉淀下来。这个习惯刚开始可能有点不顺手,但坚持几天后会变成肌肉记忆。等到你某一天发现 Codex 能主动引用一段三天前 Claude Code 定下的设计约束时,就会明白这份“麻烦”非常值得。

最后再分享一个小技巧:如果你的项目里还有其他 AI 工具或者脚本,也可以把它们纳入同一个 Atlas 记忆库,只要遵循同样的读写协议就行。我们常说“让 AI 互相对话”,实际上真正可靠的做法不是让它们同时在线聊天,而是让它们共同维护一个稳定的记忆源。项目在变,工具在变,但记忆一直在的话,后续接手的人,不管是不是 AI,都能快速站在同一个认知基线上继续推进。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 3:47:48

从黑库到蓝库:Simulink电力电子仿真迁移实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 3:47:42

F5扩展AI安全防护平台:聚焦API与数据通路安全

F5最近把AI安全防护平台做了一次比较大的扩展,新增了一系列面向AI应用与API流量的防护能力。这个消息在圈子里讨论度不低,但不少人看完新闻稿还是一头雾水——F5到底在原有防护体系上加了什么,这些新能力解决的是哪类问题,以及它跟…

作者头像 李华
网站建设 2026/9/20 3:47:12

MATLAB实现模型预测控制的船舶艏向控制:从原理到代码

前阵子在调船舶自动舵算法,连续几个晚上对着Simulink里的PID参数反复折腾——超调压下去了响应又变慢,响应提上来舵角又开始高频抖。后来我把MPC(模型预测控制)真正跑起来做船舶艏向控制,才意识到之前的纠结大多来自控…

作者头像 李华