当 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 时,主要问题是代码修改是否正确。
但当它们被组合起来以后,问题就变了。
text
ChatGPT Plus
↓
ChatGPT Pro
↓
Codex
↓
Test Agent
↓
Review Agent
这个流程中,每一层都会产生新的状态。
例如:
text
Plus 输出需求摘要
Pro 输出任务规格
Codex 输出代码变更
Test Agent 输出测试结果
Review Agent 输出风险判断
如果这些状态之间没有统一约束,就可能出现:
text
需求摘要认为可以改变接口
任务规格要求保持接口兼容
Codex 根据代码推断需要调整字段
测试只验证了新接口
审查却依据旧接口规则拒绝变更
这不是某一个 Agent 不够聪明。
而是多个 Agent 之间没有形成一致的事实来源。
在分布式系统里,这叫一致性问题。
在 AI 工程里,可以称为 Agent Consistency。
二、ChatGPT Plus、Pro 与 Codex 看到的并不是同一个系统
很多人默认认为,只要多个 Agent 处理同一个项目,它们看到的就是同一个上下文。
实际上并不是。
ChatGPT Plus 可能读取的是需求文档。
text
Plus Context
├── 产品需求
├── 用户反馈
├── 会议记录
└── 历史说明
ChatGPT Pro 可能读取的是架构资料。
text
Pro Context
├── 系统架构
├── 技术约束
├── 风险说明
├── 模块边界
└── 长期规划
Codex 读取的是代码仓库。
text
Codex Context
├── 当前代码
├── 文件结构
├── 测试
├── 编译结果
├── Git 差异
└── 运行错误
这三套上下文并不天然一致。
需求文档可能已经过期。
架构说明可能没有反映最新实现。
代码可能包含临时补丁。
测试可能验证的是旧行为。
所以,多 Agent 系统的第一个难题,是上下文一致性。
可以定义一个统一工程上下文:
ts
type EngineeringContext = {
requirementVersion: string
architectureVersion: string
repositoryCommit: string
testBaseline: string
policyVersion: string
generatedAt: string
}
每个 Agent 开始任务前,都应该知道自己正在基于哪个版本工作。
否则,ChatGPT Pro 可能基于上周的架构规划任务,而 Codex 已经在今天的新代码上执行。
这就是典型的版本漂移。
三、多 Agent 协作需要一个"单一事实源"
分布式系统中,一个核心问题是:
text
谁拥有最终事实?
在 AI 软件工程中,同样需要回答这个问题。
需求文档是事实吗?
代码是事实吗?
测试是事实吗?
架构文档是事实吗?
ChatGPT Pro 的推理结论是事实吗?
实际上,它们都只能描述事实的一部分。
更合理的结构是建立一个 Engineering Source of Truth。
text
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 可以发现失败,但不能单独决定需求是否合理。
这需要一个明确的事实优先级。
例如:
yaml
truth_priority:
business_rules:
source: domain-specification
api_behavior:
source: contract-tests
architecture_boundary:
source: architecture-decision-record
current_implementation:
source: repository-commit
release_eligibility:
source: verification-policy
这相当于为多 Agent 系统建立一致性协议。
四、ChatGPT Pro 应该承担协调器,而不是绝对决策者
在多 Agent 工作流中,ChatGPT Pro 很容易被放在最高位置。
因为它更擅长复杂推理、规划和任务拆解。
但这并不意味着 ChatGPT Pro 应该拥有绝对决策权。
更合理的定位是 Coordinator。
text
ChatGPT Pro
├── 汇总上下文
├── 发现冲突
├── 拆解任务
├── 分配 Agent
├── 合并结果
└── 请求人工决策
它类似分布式系统中的协调节点。
但协调节点不能随意修改底层事实。
例如,ChatGPT Pro 发现需求文档和代码行为不一致时,不应该自行选择其中一个。
它应该输出冲突:
json
{
"conflict": {
"requirement": "管理员账号不自动锁定",
"current_code": "所有账号统一锁定",
"tests": "管理员锁定测试当前通过",
"decision_required": true
}
}
这比直接让 Codex 改代码更可靠。
因为很多不一致并不是 bug,而可能是历史决策、文档过期或业务策略变化。
ChatGPT Pro 应该负责暴露冲突,而不是掩盖冲突。
五、Codex 执行前需要进行乐观锁检查
在数据库并发控制中,乐观锁用于防止基于旧状态的写入覆盖新状态。
AI 工程中也存在相同问题。
假设 ChatGPT Pro 基于提交 A 生成了任务规格。
text
Repository Commit: A
但在 Codex 执行之前,其他开发者已经提交了新代码 B。
text
Repository Commit: B
如果 Codex 仍然按 A 的上下文执行,就可能覆盖新逻辑。
因此,Codex 任务应该包含基线版本:
ts
type CodexTask = {
baselineCommit: string
goal: string
allowedFiles: string[]
constraints: string[]
}
执行前检查:
ts
async function validateBaseline(task: CodexTask) {
const currentCommit = await getCurrentCommit()
if (currentCommit !== task.baselineCommit) {
throw new Error("Repository state changed. Replanning required.")
}
}
这就是 AI 工程中的乐观锁。
text
计划基于状态 A
当前系统已经变成状态 B
因此禁止直接执行
没有这一步,多 Agent 协作越快,冲突越容易发生。
六、Agent 之间需要传递"因果关系",而不是只传递结果
很多 AI 工作流只是把上一个 Agent 的输出传给下一个 Agent。
text
Plus 输出摘要
↓
Pro 输出计划
↓
Codex 输出代码
问题在于,结果并不能完整表达推理因果。
例如 ChatGPT Pro 输出:
text
建议修改缓存策略。
Codex 不知道这个结论来自:
text
性能日志显示数据库查询占 70%
还是来自:
text
架构文档建议使用缓存
这两者的证据强度完全不同。
所以 Agent 之间应该传递 Decision Trace。
ts
type DecisionTrace = {
decision: string
basedOn: Evidence[]
assumptions: string[]
rejectedOptions: string[]
confidence: number
}
示例:
json
{
"decision": "为用户资料增加缓存",
"basedOn": [
"过去 24 小时数据库查询中,用户资料查询占 68%",
"用户资料更新频率低于读取频率"
],
"assumptions": [
"允许最多 30 秒数据延迟"
],
"rejectedOptions": [
"数据库索引优化无法解决重复读取问题"
],
"confidence": 0.82
}
Codex 执行时不仅知道要做什么,还知道为什么做。
这能降低错误理解。
七、多 Agent 系统必须处理语义冲突
代码冲突可以通过 Git 检测。
语义冲突更难发现。
例如两个 Agent 分别提出:
text
Agent A:
为了兼容旧客户端,保留字段 user_name。
Agent B:
为了统一命名,将字段改成 username。
代码层面可能没有直接冲突。
但语义上它们互相矛盾。
可以定义一个语义约束集合:
ts
type SemanticConstraint = {
id: string
statement: string
priority: "must" | "should" | "optional"
source: string
}
例如:
yaml
constraints:
- id: API-001
statement: "旧客户端字段 user_name 必须保持"
priority: must
source: api-contract
- id: STYLE-014
statement: "新字段统一使用 camelCase"
priority: should
source: coding-style
当两个约束冲突时:
text
must > should
因此保留兼容性。
这不是模型临时判断,而是工程策略。
多 Agent 系统必须依赖显式优先级,不能只依赖自然语言推理。
八、ChatGPT Plus 可以成为上下文归一化层
在多 Agent 协作中,ChatGPT Plus 的价值不一定只在内容生成。
它可以承担 Context Normalization。
也就是把不同来源的信息转换成统一格式。
例如输入来自:
text
需求文档
会议记录
Issue
用户反馈
代码注释
测试说明
ChatGPT Plus 可以整理为统一结构:
yaml
context:
confirmed_facts:
- "旧客户端仍使用 user_name 字段"
assumptions:
- "预计三个月内完成客户端迁移"
conflicts:
- "新接口文档使用 username"
unknowns:
- "旧客户端当前活跃比例"
decisions_required:
- "是否保留双字段兼容"
这比直接把所有原始材料交给 ChatGPT Pro 更稳定。
Plus 负责清洗和归一化。
Pro 负责分析和规划。
Codex 负责执行。
这种分层能降低上下文噪声。
九、Agent 协作需要任务状态机
多 Agent 工作流不能只靠聊天历史维持状态。
应该有明确状态机。
text
CREATED
↓
CONTEXT_READY
↓
PLANNED
↓
APPROVED
↓
EXECUTING
↓
VERIFYING
↓
REVIEW_REQUIRED
↓
COMPLETED
失败状态包括:
text
CONTEXT_CONFLICT
BASELINE_CHANGED
SCOPE_VIOLATION
VERIFICATION_FAILED
HUMAN_REJECTED
可以定义为:
ts
type TaskState =
| "CREATED"
| "CONTEXT_READY"
| "PLANNED"
| "APPROVED"
| "EXECUTING"
| "VERIFYING"
| "REVIEW_REQUIRED"
| "COMPLETED"
| "CONTEXT_CONFLICT"
| "BASELINE_CHANGED"
| "SCOPE_VIOLATION"
| "VERIFICATION_FAILED"
| "HUMAN_REJECTED"
状态转换必须受规则控制:
ts
const transitions: Record<TaskState, 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。
text
Codex Agent A:修改认证模块
Codex Agent B:修改用户模块
Codex Agent C:补充测试
看起来可以并行。
但如果它们同时修改共享类型、公共工具或同一接口,就可能产生冲突。
文件冲突只是最简单的一种。
更复杂的是依赖冲突。
text
Agent A 改变 User 类型
Agent B 仍按旧 User 类型开发
Agent C 根据旧测试生成断言
这需要依赖图锁定。
ts
type TaskLock = {
taskId: string
lockedFiles: string[]
lockedSymbols: string[]
lockedContracts: string[]
}
例如:
json
{
"taskId": "AUTH-102",
"lockedFiles": [
"src/auth/login.service.ts"
],
"lockedSymbols": [
"User",
"LoginResult"
],
"lockedContracts": [
"POST /api/login"
]
}
其他 Agent 在执行前必须检查锁。
这类似数据库锁和分布式锁。
AI Agent 越多,调度和冲突控制越重要。
十一、最终一致性不适合所有软件模块
分布式系统里,经常使用最终一致性。
不同节点短时间状态不同,但最终会收敛。
AI 工程里也可能出现类似模式。
例如文档 Agent、测试 Agent 和 Codex Agent 可以暂时不同步,之后统一更新。
但不是所有模块都适合最终一致性。
以下领域通常要求强一致:
text
认证
权限
支付
库存
数据库迁移
公共 API 契约
安全策略
例如:
text
代码已经改变接口
文档稍后再更新
在普通内部工具中可能可以接受。
但对于公共 API,这种短暂不一致可能直接造成客户端故障。
因此需要定义一致性等级:
yaml
consistency_policy:
authentication:
level: strong
payment:
level: strong
public_api:
level: strong
internal_docs:
level: eventual
code_comments:
level: eventual
ChatGPT Pro 在规划任务时,必须根据一致性等级决定执行策略。
强一致任务应该串行执行、同步验证、人工批准。
最终一致任务可以并行执行,之后统一收敛。
十二、人工节点相当于共识协议中的仲裁者
多 Agent 系统中,多个 Agent 可能给出不同结论。
例如:
text
ChatGPT Pro:
应该重构订单状态机。
Codex:
当前结构可以通过小修复解决。
Review Agent:
重构风险高,不建议现在执行。
系统需要达成共识。
不能简单让多数 Agent 投票。
因为不同 Agent 的能力和信息来源不同。
更合理的方式是引入人工仲裁。
text
Agent Proposals
↓
Evidence Comparison
↓
Human Arbitration
↓
Final Decision
人工不需要重新完成所有分析。
但必须对关键冲突做最终判断。
这类似分布式系统中的 Leader 或仲裁节点。
人类保留:
text
目标解释权
风险接受权
架构决定权
上线批准权
责任承担权
AI 可以提高决策信息密度,但不能消除责任主体。
十三、需要为 Agent 设计幂等操作
分布式系统中,网络重试可能导致同一个请求执行多次。
AI Agent 同样可能因为超时、失败恢复或任务重跑而重复执行。
例如 Codex 被要求:
text
为用户表增加索引。
如果任务重复执行,可能出现重复迁移。
因此 Agent 操作必须尽量幂等。
ts
async function ensureUserEmailIndex() {
const exists = await database.indexExists(
"users",
"idx_users_email"
)
if (exists) {
return {
status: "already_exists",
changed: false
}
}
await database.createIndex(
"users",
"idx_users_email",
["email"]
)
return {
status: "created",
changed: true
}
}
Codex 任务也应该包含幂等要求:
yaml
execution_policy:
idempotent: true
duplicate_run_behavior:
- 不重复创建资源
- 不重复写入数据
- 不重复注册事件
多 Agent 系统如果没有幂等设计,重试机制会变成新的风险来源。
十四、Agent 日志需要支持因果追踪
传统日志按时间记录事件。
多 Agent 系统还需要记录因果关系。
text
为什么 Codex 修改了这个函数?
因为 ChatGPT Pro 创建了任务 T-102。
为什么 Pro 创建这个任务?
因为 Plus 从用户反馈中提取到问题 R-88。
为什么最终合并?
因为测试 V-31 通过,并由人工 H-7 批准。
可以使用 Correlation ID:
ts
type AgentEvent = {
eventId: string
correlationId: string
causationId?: string
agent: string
action: string
timestamp: string
payload: unknown
}
形成因果链:
text
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 协作不能依赖一个无限增长的聊天上下文。
应该使用版本化记忆。
text
Memory v1:原始需求
Memory v2:补充业务规则
Memory v3:确认兼容要求
Memory v4:架构决策更新
每次任务都引用明确版本:
ts
type AgentMemoryReference = {
memoryVersion: string
requirementVersion: string
architectureVersion: string
repositoryCommit: string
}
这样可以避免:
text
Agent A 使用新规则
Agent B 仍使用旧规则
版本化记忆还支持回溯。
当代码出现问题时,可以定位:
text
这次执行使用了哪个需求版本?
当时的架构约束是什么?
是否遗漏了后续更新?
这也是多 Agent 工程可审计的基础。
十六、多 Agent 软件工程的推荐架构
可以将 ChatGPT Plus、ChatGPT Pro 与 Codex 组织成下面的结构:
text
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 Trace
ChatGPT Plus 可以位于 Context Plane,负责信息整理和上下文归一化。
ChatGPT Pro 位于 Coordination Plane,负责规划、冲突发现和任务调度。
Codex 位于 Execution Plane,负责代码仓库中的受控执行。
一致性平面负责防止多个 Agent 互相覆盖。
可观测性平面负责追踪整个过程。
十七、一个简化的多 Agent 调度程序
可以用 TypeScript 抽象一个简化结构:
ts
type AgentContext = {
requirementVersion: string
architectureVersion: string
repositoryCommit: string
constraints: string[]
}
type AgentPlan = {
tasks: AgentTask[]
conflicts: ContextConflict[]
}
type AgentTask = {
id: string
agent: "plus" | "pro" | "codex" | "test"
dependsOn: string[]
scope: string[]
expectedOutput: string[]
}
class MultiAgentEngineeringRuntime {
async run(goal: string) {
const context = await this.normalizeContext(goal)
const plan = await this.createPlan(goal, context)
if (plan.conflicts.length > 0) {
return this.requestHumanResolution(plan.conflicts)
}
await this.validateRepositoryVersion(
context.repositoryCommit
)
const orderedTasks = this.topologicalSort(plan.tasks)
const results = []
for (const task of orderedTasks) {
await this.acquireScopeLock(task.scope)
try {
const result = await this.executeTask(task, context)
results.push(result)
} finally {
await this.releaseScopeLock(task.scope)
}
}
const verification = await this.verify(results)
return this.requestFinalHumanReview({
goal,
context,
plan,
results,
verification
})
}
private async normalizeContext(goal: string): Promise<AgentContext> {
return plusAgent.normalize(goal)
}
private async createPlan(
goal: string,
context: AgentContext
): Promise<AgentPlan> {
return proAgent.plan(goal, context)
}
}
这段结构表达了几个核心原则:
text
先统一上下文
再发现冲突
再生成任务图
再检查版本
再锁定执行范围
再按依赖顺序执行
最后统一验证
多 Agent 系统不能简单并行调用多个模型。
它需要真正的协调机制。
十八、程序员会从 Agent 使用者变成一致性设计者
当 ChatGPT Plus、ChatGPT Pro 与 Codex 同时进入开发流程后,程序员的角色会进一步变化。
过去程序员主要关注:
text
代码是否正确
架构是否合理
性能是否足够
未来还要关注:
text
多个 Agent 是否使用同一版本上下文?
任务之间是否存在语义冲突?
执行范围是否互相覆盖?
状态是否可以收敛?
任务是否具备幂等性?
因果关系是否可以追踪?
这是一种新的工程能力:
text
Agent Consistency Engineering
它融合了:
text
分布式系统思想
软件架构
任务编排
上下文工程
权限治理
可观测性
人工决策
真正高级的 AI 工程,不只是会调用 ChatGPT Pro 或 Codex。
而是能让多个 Agent 在复杂项目里稳定协作,并保持系统事实一致。
十九、结语:多 Agent 时代,最昂贵的可能不是推理,而是不一致
ChatGPT Plus、ChatGPT Pro 与 Codex 的组合,确实可以扩大个人和团队的能力。
Plus 可以整理上下文。
Pro 可以规划复杂任务。
Codex 可以执行工程修改。
但当多个 Agent 同时进入软件开发后,新的复杂度也随之出现:
text
上下文版本漂移
任务目标冲突
代码写入冲突
测试基线不一致
语义约束冲突
重复执行
状态无法收敛
这些问题和分布式系统非常相似。
因此,多 Agent 软件工程不能只关注模型能力。
还需要建立:
text
统一事实源
版本化上下文
任务状态机
依赖调度
范围锁定
语义约束
幂等执行
因果追踪
人工仲裁
可以用一个公式概括:
text
Multi-Agent Engineering Reliability
=
Agent Capability
× Context Consistency
× Coordination Quality
× Verification Strength
如果只有强模型,没有一致性控制,多个 Agent 只会更快地产生互相冲突的结果。
如果只有 Codex 的执行能力,没有版本检查和范围锁,代码仓库可能出现难以追踪的并发变更。
如果只有 ChatGPT Pro 的规划,没有明确事实源,任务计划可能建立在错误上下文上。
所以,未来真正成熟的 AI 软件工程,不是让更多 Agent 同时工作。
而是让 ChatGPT Plus、ChatGPT Pro、Codex、测试系统和人类开发者,在同一个版本化事实空间中协作。
多 Agent 时代最重要的问题,可能不再是:
text
AI 能不能完成任务?
而是:
text
多个 AI 完成的任务,最终能不能组成同一个正确系统?
这才是 ChatGPT Pro、Plus 与 Codex 进入复杂软件工程后,真正值得讨论的深层问题。