7月15更新ChatGPT Pro、Plus 与 Codex:多 Agent 软件工程中的一致性问题 (GPT5.6来了) 当 ChatGPT Plus、ChatGPT Pro 与 Codex 被放进同一个开发流程后很多人第一反应是效率提升。ChatGPT Plus 可以整理资料。ChatGPT Pro 可以分析架构。Codex 可以执行代码修改。看起来像是把不同能力组合起来形成一套更完整的 AI 开发工作流。但如果从分布式系统的角度看真正困难的问题并不是“每个 Agent 能不能完成自己的任务”而是多个 Agent 在不同上下文、不同时间点、不同目标理解下协作时如何保持系统状态一致这和分布式系统非常相似。在分布式系统中多个节点同时读取、修改和传播状态最容易出现的问题不是节点完全失效而是节点之间对“当前事实”的理解不一致。在 AI 软件工程里同样的问题会出现。ChatGPT Plus 可能根据需求文档总结出一套业务规则。ChatGPT Pro 可能根据架构资料推导出另一套任务边界。Codex 可能根据代码仓库当前状态执行具体修改。测试 Agent 可能依据旧测试判断结果是否正确。审查 Agent 又可能依据另一份规范给出风险结论。每个 Agent 单独看都可能合理但组合起来却可能产生冲突。因此多 Agent 软件工程真正需要解决的不只是生成能力而是状态一致性、语义一致性和决策一致性。一、单 Agent 问题是能力问题多 Agent 问题是协调问题单独使用 ChatGPT Plus 时主要问题是回答质量。单独使用 ChatGPT Pro 时主要问题是推理是否完整。单独使用 Codex 时主要问题是代码修改是否正确。但当它们被组合起来以后问题就变了。ChatGPT Plus ↓ ChatGPT Pro ↓ Codex ↓ Test Agent ↓ Review Agent这个流程中每一层都会产生新的状态。例如Plus 输出需求摘要 Pro 输出任务规格 Codex 输出代码变更 Test Agent 输出测试结果 Review Agent 输出风险判断如果这些状态之间没有统一约束就可能出现需求摘要认为可以改变接口 任务规格要求保持接口兼容 Codex 根据代码推断需要调整字段 测试只验证了新接口 审查却依据旧接口规则拒绝变更这不是某一个 Agent 不够聪明。而是多个 Agent 之间没有形成一致的事实来源。在分布式系统里这叫一致性问题。在 AI 工程里可以称为 Agent Consistency。二、ChatGPT Plus、Pro 与 Codex 看到的并不是同一个系统很多人默认认为只要多个 Agent 处理同一个项目它们看到的就是同一个上下文。实际上并不是。ChatGPT Plus 可能读取的是需求文档。Plus Context ├── 产品需求 ├── 用户反馈 ├── 会议记录 └── 历史说明ChatGPT Pro 可能读取的是架构资料。Pro Context ├── 系统架构 ├── 技术约束 ├── 风险说明 ├── 模块边界 └── 长期规划Codex 读取的是代码仓库。Codex Context ├── 当前代码 ├── 文件结构 ├── 测试 ├── 编译结果 ├── Git 差异 └── 运行错误这三套上下文并不天然一致。需求文档可能已经过期。架构说明可能没有反映最新实现。代码可能包含临时补丁。测试可能验证的是旧行为。所以多 Agent 系统的第一个难题是上下文一致性。可以定义一个统一工程上下文typeEngineeringContext{requirementVersion:stringarchitectureVersion:stringrepositoryCommit:stringtestBaseline:stringpolicyVersion:stringgeneratedAt:string}每个 Agent 开始任务前都应该知道自己正在基于哪个版本工作。否则ChatGPT Pro 可能基于上周的架构规划任务而 Codex 已经在今天的新代码上执行。这就是典型的版本漂移。三、多 Agent 协作需要一个“单一事实源”分布式系统中一个核心问题是谁拥有最终事实在 AI 软件工程中同样需要回答这个问题。需求文档是事实吗代码是事实吗测试是事实吗架构文档是事实吗ChatGPT Pro 的推理结论是事实吗实际上它们都只能描述事实的一部分。更合理的结构是建立一个 Engineering Source of Truth。Engineering Source of Truth ├── Requirement Spec ├── Architecture Decision ├── API Contract ├── Domain Rules ├── Repository State ├── Test Baseline └── Policy Constraints每个 Agent 都不能自由定义事实。ChatGPT Plus 可以总结需求但不能改变需求。ChatGPT Pro 可以拆解任务但不能绕过架构决策。Codex 可以修改代码但不能重新解释业务规则。测试 Agent 可以发现失败但不能单独决定需求是否合理。这需要一个明确的事实优先级。例如truth_priority:business_rules:source:domain-specificationapi_behavior:source:contract-testsarchitecture_boundary:source:architecture-decision-recordcurrent_implementation:source:repository-commitrelease_eligibility:source:verification-policy这相当于为多 Agent 系统建立一致性协议。四、ChatGPT Pro 应该承担协调器而不是绝对决策者在多 Agent 工作流中ChatGPT Pro 很容易被放在最高位置。因为它更擅长复杂推理、规划和任务拆解。但这并不意味着 ChatGPT Pro 应该拥有绝对决策权。更合理的定位是 Coordinator。ChatGPT Pro ├── 汇总上下文 ├── 发现冲突 ├── 拆解任务 ├── 分配 Agent ├── 合并结果 └── 请求人工决策它类似分布式系统中的协调节点。但协调节点不能随意修改底层事实。例如ChatGPT Pro 发现需求文档和代码行为不一致时不应该自行选择其中一个。它应该输出冲突{conflict:{requirement:管理员账号不自动锁定,current_code:所有账号统一锁定,tests:管理员锁定测试当前通过,decision_required:true}}这比直接让 Codex 改代码更可靠。因为很多不一致并不是 bug而可能是历史决策、文档过期或业务策略变化。ChatGPT Pro 应该负责暴露冲突而不是掩盖冲突。五、Codex 执行前需要进行乐观锁检查在数据库并发控制中乐观锁用于防止基于旧状态的写入覆盖新状态。AI 工程中也存在相同问题。假设 ChatGPT Pro 基于提交A生成了任务规格。Repository Commit: A但在 Codex 执行之前其他开发者已经提交了新代码B。Repository Commit: B如果 Codex 仍然按A的上下文执行就可能覆盖新逻辑。因此Codex 任务应该包含基线版本typeCodexTask{baselineCommit:stringgoal:stringallowedFiles:string[]constraints:string[]}执行前检查asyncfunctionvalidateBaseline(task:CodexTask){constcurrentCommitawaitgetCurrentCommit()if(currentCommit!task.baselineCommit){thrownewError(Repository state changed. Replanning required.)}}这就是 AI 工程中的乐观锁。计划基于状态 A 当前系统已经变成状态 B 因此禁止直接执行没有这一步多 Agent 协作越快冲突越容易发生。六、Agent 之间需要传递“因果关系”而不是只传递结果很多 AI 工作流只是把上一个 Agent 的输出传给下一个 Agent。Plus 输出摘要 ↓ Pro 输出计划 ↓ Codex 输出代码问题在于结果并不能完整表达推理因果。例如 ChatGPT Pro 输出建议修改缓存策略。Codex 不知道这个结论来自性能日志显示数据库查询占 70%还是来自架构文档建议使用缓存这两者的证据强度完全不同。所以 Agent 之间应该传递 Decision Trace。typeDecisionTrace{decision:stringbasedOn:Evidence[]assumptions:string[]rejectedOptions:string[]confidence:number}示例{decision:为用户资料增加缓存,basedOn:[过去 24 小时数据库查询中用户资料查询占 68%,用户资料更新频率低于读取频率],assumptions:[允许最多 30 秒数据延迟],rejectedOptions:[数据库索引优化无法解决重复读取问题],confidence:0.82}Codex 执行时不仅知道要做什么还知道为什么做。这能降低错误理解。七、多 Agent 系统必须处理语义冲突代码冲突可以通过 Git 检测。语义冲突更难发现。例如两个 Agent 分别提出Agent A 为了兼容旧客户端保留字段 user_name。 Agent B 为了统一命名将字段改成 username。代码层面可能没有直接冲突。但语义上它们互相矛盾。可以定义一个语义约束集合typeSemanticConstraint{id:stringstatement:stringpriority:must|should|optionalsource:string}例如constraints:-id:API-001statement:旧客户端字段 user_name 必须保持priority:mustsource:api-contract-id:STYLE-014statement:新字段统一使用 camelCasepriority:shouldsource:coding-style当两个约束冲突时must should因此保留兼容性。这不是模型临时判断而是工程策略。多 Agent 系统必须依赖显式优先级不能只依赖自然语言推理。八、ChatGPT Plus 可以成为上下文归一化层在多 Agent 协作中ChatGPT Plus 的价值不一定只在内容生成。它可以承担 Context Normalization。也就是把不同来源的信息转换成统一格式。例如输入来自需求文档 会议记录 Issue 用户反馈 代码注释 测试说明ChatGPT Plus 可以整理为统一结构context:confirmed_facts:-旧客户端仍使用 user_name 字段assumptions:-预计三个月内完成客户端迁移conflicts:-新接口文档使用 usernameunknowns:-旧客户端当前活跃比例decisions_required:-是否保留双字段兼容这比直接把所有原始材料交给 ChatGPT Pro 更稳定。Plus 负责清洗和归一化。Pro 负责分析和规划。Codex 负责执行。这种分层能降低上下文噪声。九、Agent 协作需要任务状态机多 Agent 工作流不能只靠聊天历史维持状态。应该有明确状态机。CREATED ↓ CONTEXT_READY ↓ PLANNED ↓ APPROVED ↓ EXECUTING ↓ VERIFYING ↓ REVIEW_REQUIRED ↓ COMPLETED失败状态包括CONTEXT_CONFLICT BASELINE_CHANGED SCOPE_VIOLATION VERIFICATION_FAILED HUMAN_REJECTED可以定义为typeTaskState|CREATED|CONTEXT_READY|PLANNED|APPROVED|EXECUTING|VERIFYING|REVIEW_REQUIRED|COMPLETED|CONTEXT_CONFLICT|BASELINE_CHANGED|SCOPE_VIOLATION|VERIFICATION_FAILED|HUMAN_REJECTED状态转换必须受规则控制consttransitions:RecordTaskState,TaskState[]{CREATED:[CONTEXT_READY,CONTEXT_CONFLICT],CONTEXT_READY:[PLANNED],PLANNED:[APPROVED,HUMAN_REJECTED],APPROVED:[EXECUTING,BASELINE_CHANGED],EXECUTING:[VERIFYING,SCOPE_VIOLATION],VERIFYING:[REVIEW_REQUIRED,VERIFICATION_FAILED],REVIEW_REQUIRED:[COMPLETED,HUMAN_REJECTED],COMPLETED:[],CONTEXT_CONFLICT:[],BASELINE_CHANGED:[],SCOPE_VIOLATION:[],VERIFICATION_FAILED:[],HUMAN_REJECTED:[]}这能避免 Agent 跳过关键阶段。例如 Codex 不能从PLANNED直接进入EXECUTING必须先经过批准。十、多 Agent 并行执行会带来写入冲突为了提高效率未来可能同时运行多个 Codex Agent。Codex Agent A修改认证模块 Codex Agent B修改用户模块 Codex Agent C补充测试看起来可以并行。但如果它们同时修改共享类型、公共工具或同一接口就可能产生冲突。文件冲突只是最简单的一种。更复杂的是依赖冲突。Agent A 改变 User 类型 Agent B 仍按旧 User 类型开发 Agent C 根据旧测试生成断言这需要依赖图锁定。typeTaskLock{taskId:stringlockedFiles:string[]lockedSymbols:string[]lockedContracts:string[]}例如{taskId:AUTH-102,lockedFiles:[src/auth/login.service.ts],lockedSymbols:[User,LoginResult],lockedContracts:[POST /api/login]}其他 Agent 在执行前必须检查锁。这类似数据库锁和分布式锁。AI Agent 越多调度和冲突控制越重要。十一、最终一致性不适合所有软件模块分布式系统里经常使用最终一致性。不同节点短时间状态不同但最终会收敛。AI 工程里也可能出现类似模式。例如文档 Agent、测试 Agent 和 Codex Agent 可以暂时不同步之后统一更新。但不是所有模块都适合最终一致性。以下领域通常要求强一致认证 权限 支付 库存 数据库迁移 公共 API 契约 安全策略例如代码已经改变接口 文档稍后再更新在普通内部工具中可能可以接受。但对于公共 API这种短暂不一致可能直接造成客户端故障。因此需要定义一致性等级consistency_policy:authentication:level:strongpayment:level:strongpublic_api:level:stronginternal_docs:level:eventualcode_comments:level:eventualChatGPT Pro 在规划任务时必须根据一致性等级决定执行策略。强一致任务应该串行执行、同步验证、人工批准。最终一致任务可以并行执行之后统一收敛。十二、人工节点相当于共识协议中的仲裁者多 Agent 系统中多个 Agent 可能给出不同结论。例如ChatGPT Pro 应该重构订单状态机。 Codex 当前结构可以通过小修复解决。 Review Agent 重构风险高不建议现在执行。系统需要达成共识。不能简单让多数 Agent 投票。因为不同 Agent 的能力和信息来源不同。更合理的方式是引入人工仲裁。Agent Proposals ↓ Evidence Comparison ↓ Human Arbitration ↓ Final Decision人工不需要重新完成所有分析。但必须对关键冲突做最终判断。这类似分布式系统中的 Leader 或仲裁节点。人类保留目标解释权 风险接受权 架构决定权 上线批准权 责任承担权AI 可以提高决策信息密度但不能消除责任主体。十三、需要为 Agent 设计幂等操作分布式系统中网络重试可能导致同一个请求执行多次。AI Agent 同样可能因为超时、失败恢复或任务重跑而重复执行。例如 Codex 被要求为用户表增加索引。如果任务重复执行可能出现重复迁移。因此 Agent 操作必须尽量幂等。asyncfunctionensureUserEmailIndex(){constexistsawaitdatabase.indexExists(users,idx_users_email)if(exists){return{status:already_exists,changed:false}}awaitdatabase.createIndex(users,idx_users_email,[email])return{status:created,changed:true}}Codex 任务也应该包含幂等要求execution_policy:idempotent:trueduplicate_run_behavior:-不重复创建资源-不重复写入数据-不重复注册事件多 Agent 系统如果没有幂等设计重试机制会变成新的风险来源。十四、Agent 日志需要支持因果追踪传统日志按时间记录事件。多 Agent 系统还需要记录因果关系。为什么 Codex 修改了这个函数 因为 ChatGPT Pro 创建了任务 T-102。 为什么 Pro 创建这个任务 因为 Plus 从用户反馈中提取到问题 R-88。 为什么最终合并 因为测试 V-31 通过并由人工 H-7 批准。可以使用 Correlation IDtypeAgentEvent{eventId:stringcorrelationId:stringcausationId?:stringagent:stringaction:stringtimestamp:stringpayload:unknown}形成因果链Requirement R-88 ↓ Context C-41 ↓ Plan P-19 ↓ Codex Task T-102 ↓ Change Set CS-32 ↓ Verification V-31 ↓ Human Approval H-7这对排查 AI 工程事故非常重要。没有因果追踪只能知道代码被改了。有因果追踪才能知道为什么被改、依据是什么、谁批准。十五、ChatGPT Pro、Plus 与 Codex 需要共享版本化记忆多 Agent 协作不能依赖一个无限增长的聊天上下文。应该使用版本化记忆。Memory v1原始需求 Memory v2补充业务规则 Memory v3确认兼容要求 Memory v4架构决策更新每次任务都引用明确版本typeAgentMemoryReference{memoryVersion:stringrequirementVersion:stringarchitectureVersion:stringrepositoryCommit:string}这样可以避免Agent A 使用新规则 Agent B 仍使用旧规则版本化记忆还支持回溯。当代码出现问题时可以定位这次执行使用了哪个需求版本 当时的架构约束是什么 是否遗漏了后续更新这也是多 Agent 工程可审计的基础。十六、多 Agent 软件工程的推荐架构可以将 ChatGPT Plus、ChatGPT Pro 与 Codex 组织成下面的结构Multi-Agent Engineering Platform ├── Context Plane │ ├── Requirement Store │ ├── Architecture Store │ ├── Policy Store │ └── Repository Snapshot │ ├── Coordination Plane │ ├── ChatGPT Pro Planner │ ├── Conflict Detector │ ├── Task Scheduler │ └── Human Approval │ ├── Execution Plane │ ├── Codex Agent │ ├── Test Agent │ ├── Documentation Agent │ └── Analysis Agent │ ├── Consistency Plane │ ├── Version Check │ ├── Scope Lock │ ├── Semantic Constraint │ └── Contract Validation │ └── Observability Plane ├── Agent Trace ├── Decision Trace ├── Change Trace └── Verification TraceChatGPT Plus 可以位于 Context Plane负责信息整理和上下文归一化。ChatGPT Pro 位于 Coordination Plane负责规划、冲突发现和任务调度。Codex 位于 Execution Plane负责代码仓库中的受控执行。一致性平面负责防止多个 Agent 互相覆盖。可观测性平面负责追踪整个过程。十七、一个简化的多 Agent 调度程序可以用 TypeScript 抽象一个简化结构typeAgentContext{requirementVersion:stringarchitectureVersion:stringrepositoryCommit:stringconstraints:string[]}typeAgentPlan{tasks:AgentTask[]conflicts:ContextConflict[]}typeAgentTask{id:stringagent:plus|pro|codex|testdependsOn:string[]scope:string[]expectedOutput:string[]}classMultiAgentEngineeringRuntime{asyncrun(goal:string){constcontextawaitthis.normalizeContext(goal)constplanawaitthis.createPlan(goal,context)if(plan.conflicts.length0){returnthis.requestHumanResolution(plan.conflicts)}awaitthis.validateRepositoryVersion(context.repositoryCommit)constorderedTasksthis.topologicalSort(plan.tasks)constresults[]for(consttaskoforderedTasks){awaitthis.acquireScopeLock(task.scope)try{constresultawaitthis.executeTask(task,context)results.push(result)}finally{awaitthis.releaseScopeLock(task.scope)}}constverificationawaitthis.verify(results)returnthis.requestFinalHumanReview({goal,context,plan,results,verification})}privateasyncnormalizeContext(goal:string):PromiseAgentContext{returnplusAgent.normalize(goal)}privateasynccreatePlan(goal:string,context:AgentContext):PromiseAgentPlan{returnproAgent.plan(goal,context)}}这段结构表达了几个核心原则先统一上下文 再发现冲突 再生成任务图 再检查版本 再锁定执行范围 再按依赖顺序执行 最后统一验证多 Agent 系统不能简单并行调用多个模型。它需要真正的协调机制。十八、程序员会从 Agent 使用者变成一致性设计者当 ChatGPT Plus、ChatGPT Pro 与 Codex 同时进入开发流程后程序员的角色会进一步变化。过去程序员主要关注代码是否正确 架构是否合理 性能是否足够未来还要关注多个 Agent 是否使用同一版本上下文 任务之间是否存在语义冲突 执行范围是否互相覆盖 状态是否可以收敛 任务是否具备幂等性 因果关系是否可以追踪这是一种新的工程能力Agent Consistency Engineering它融合了分布式系统思想 软件架构 任务编排 上下文工程 权限治理 可观测性 人工决策真正高级的 AI 工程不只是会调用 ChatGPT Pro 或 Codex。而是能让多个 Agent 在复杂项目里稳定协作并保持系统事实一致。十九、结语多 Agent 时代最昂贵的可能不是推理而是不一致ChatGPT Plus、ChatGPT Pro 与 Codex 的组合确实可以扩大个人和团队的能力。Plus 可以整理上下文。Pro 可以规划复杂任务。Codex 可以执行工程修改。但当多个 Agent 同时进入软件开发后新的复杂度也随之出现上下文版本漂移 任务目标冲突 代码写入冲突 测试基线不一致 语义约束冲突 重复执行 状态无法收敛这些问题和分布式系统非常相似。因此多 Agent 软件工程不能只关注模型能力。还需要建立统一事实源 版本化上下文 任务状态机 依赖调度 范围锁定 语义约束 幂等执行 因果追踪 人工仲裁可以用一个公式概括Multi-Agent Engineering Reliability Agent Capability × Context Consistency × Coordination Quality × Verification Strength如果只有强模型没有一致性控制多个 Agent 只会更快地产生互相冲突的结果。如果只有 Codex 的执行能力没有版本检查和范围锁代码仓库可能出现难以追踪的并发变更。如果只有 ChatGPT Pro 的规划没有明确事实源任务计划可能建立在错误上下文上。所以未来真正成熟的 AI 软件工程不是让更多 Agent 同时工作。而是让 ChatGPT Plus、ChatGPT Pro、Codex、测试系统和人类开发者在同一个版本化事实空间中协作。多 Agent 时代最重要的问题可能不再是AI 能不能完成任务而是多个 AI 完成的任务最终能不能组成同一个正确系统这才是 ChatGPT Pro、Plus 与 Codex 进入复杂软件工程后真正值得讨论的深层问题。