☰
【Codex with ChatGPT 源码学习①】整体架构:为什么要分离控制平面与数据平面?
2026/10/24 5:37:18 网站建设 项目流程

【Codex with ChatGPT 源码学习①】整体架构:为什么要分离控制平面与数据平面?

系列说明:本文是对社区开源项目 XiaoDuoYa/codex-with-chatgpt 的技术解读,非 OpenAI 官方教程、非该项目维护者发布的文档。研究基于 2026-10-22 可访问的main分支;分支内容会变化,建议阅读时核对具体 commit。
证据标记:[源码]表示能从对应源文件确认;[文档]是项目约定;[推断]为技术分析;[建议]为改进方案,不能误当作已经实现的能力。文中命令和请求示例若未专门注明,均为教学示例,并非实际执行结果。

推荐 CSDN 标签:AI AgentCodexChatGPTMCP软件架构

摘要:从组件图和一次开发任务的时序入手,解释 Codex、ChatGPT、Skill、内置浏览器、MCP Bridge 与 Workspace 的关系,认识 Control Plane / Data Plane 的分离设计。

1. 不要把它理解成“ChatGPT 嵌入 Codex 模型”

[文档] 项目的基本分工:Codex 执行编辑、命令、Git 与测试;ChatGPT 负责规划、分析和审查。ChatGPT 通过浏览器网页访问云端模型;Codex 使用自己的浏览器工具与该页面交互。两边仍是不同的运行时。

数据平面:MCP

控制平面:浏览器交互

控制网页、收发消息

INIT / PLAN / REVIEW

受限只读访问

MCP 工具请求及响应

编辑、构建、测试

Codex Agent

内置浏览器

ChatGPT 云端

HTTPS Tunnel

本地 C2C Bridge

Workspace

这种连接分为两条链路:

  • 控制平面(Control Plane):Codex 在 ChatGPT 网页发送[C2C]格式的简短消息,读取 PLAN、DONE 等回复。
  • 数据平面(Data Plane):ChatGPT 通过远程 MCP 请求文件、目录、Git Diff 和执行证据;不要求 Codex 每轮粘贴整个文件。

2. 逐个认识组件

组件是否是独立程序核心职责
CodexAgent 及其执行运行时编辑、Shell、Git、测试、调用浏览器
skill/SKILL.md否,指令文本约定何时连接、如何发消息、如何恢复
In-App Browser(iab)浏览器控制接口操作 ChatGPT 网页会话
ChatGPT云端服务给出计划、审查意见
C2C BridgeNode.js 服务OAuth、MCP、路径限制与只读工具
Workspace磁盘工程目录源码和 Git 状态

[源码]docs/architecture.md将mcp/、auth/、pairing/、workspace/、tunnel/、execution/、process/、cli/分层。工具端使用 TypeScript、Express 和 MCP SDK。

其中最容易混淆的是 Skill 和 Bridge。
Skill 不是一个独立运行的程序
skill/SKILL.md 本质是一份结构化行为指令。Codex 读取它后,按照其中的步骤组织任务。
它本身不会启动模型,也不是 HTTP 服务。

Bridge 才是真正运行的服务程序
Bridge 是 Node.js/TypeScript 编写的软件,监听本地端口,处理认证、文件访问和 MCP 请求。

所以整个项目是两类技术结合:

  • 提示词/Agent 编排层:Skill、消息协议、状态转换。
  • 传统软件工程层:Node.js 服务、HTTP、OAuth、文件系统、Git、网络隧道。

这也解释了为什么项目既有 .md 指令文件,又有大量 .ts 源代码。

3. 最重要的两条通信通道

这是整套架构的核心。

为什么要区分两条通道?

假设你要求开发一个登录模块,工作区里有 300 个文件。

如果没有 MCP,Codex 可能需要把相关源码、差异和测试日志全部粘贴进聊天中。

有了 MCP,Codex 只需要告诉 ChatGPT:

[C2C] task_id: login-001 phase: PLAN 请分析当前工程,实现用户登录功能。

ChatGPT 再自行调用:

list_directory("src") read_file("src/auth.ts") search_workspace("login")

这里的工具调用只是说明工作机制的示意,并非仓库的精确请求 JSON。

控制信息走浏览器,工程数据走 MCP。 两者分离后,可以减小浏览器交互中传递的消息体积,也便于单独管理文件访问权限。

4. 哪个组件掌握真正的执行权?

从权限角度理解架构,比只看通信连接更重要。

操作CodexChatGPT(经 C2C MCP)
阅读源码可以可以,受权限约束
搜索源码可以可以,受权限约束
读取 Git Diff可以可以
修改文件可以不可以
执行终端命令可以不可以
运行测试可以只能读取记录
决定开发步骤可以提供规划和审查意见
控制 ChatGPT 浏览器会话可以不承担此职责

仓库文档明确规定 V1 Bridge 不包含写文件或执行命令的 MCP 工具,并采用一个 Bridge 对应一个 Workspace 的隔离原则。

这说明 ChatGPT 的“规划与审查”是一种角色分工,而不是系统内核级别的主从关系。

Codex 仍然保留真正的工程执行权。

5. 一次真实任务在架构上怎样走?

以“为一个 Python 小程序添加 CSV 导出”为教学示例:

  1. 用户向 Codex 提需求;Codex 按 Skill 选择协作流程。
  2. Codex 通过浏览器发STATE: INIT和目标。
  3. ChatGPT 通过 MCP 读取指定 Workspace 的相关文件。
  4. ChatGPT 发出STATE: PLAN;Codex 接收计划。
  5. Codex 编辑文件、运行测试、记录结果。
  6. Codex 发STATE: EXECUTED,不粘贴整个日志。
  7. ChatGPT 用 MCP 审查实际 Diff、测试记录,返回PLAN(下一轮)、DONE或BLOCKED。

未达标

符合验收

遇到阻塞

INIT

PLAN

EXECUTING

EXECUTED

REVIEW

DONE

BLOCKED

这是[文档]规定的目标流程;网页、网络、模型输出都可能失败,不能当作原子事务。

6. 最容易混淆的四件事

第一,浏览器是 ChatGPT 云服务的前端,不是本地模型进程。
第二,Skill 不是脚本解释器,真实工具调用由 Codex 执行。
第三,MCP 默认只读,是指此 Bridge 的工具接口不提供写入;Codex 自己仍拥有编辑能力。
第四,只读并不意味着数据不出本机。远程 MCP 返回的片段会被发送给 ChatGPT 服务。

7. 为什么这样分工?

把聊天消息缩小为任务指令,有利于降低每轮复制源码的负担;MCP 可以按需提供最新文件。独立审查实际 Diff,则减少 Codex “自说自话”的情况。但浏览器控制有 UI 变化风险,独立模型审查也不等于形式化验证。

8. 本章小结

请记住一个公式:Codex(执行)+ ChatGPT(规划/审查)+ 浏览器(控制)+ MCP(数据)+ Bridge(权限)。下一篇我们将进入SKILL.md,看看 Markdown 怎样约束 Codex 的行为。

源码阅读:架构文档 · 协议


版权与引用:本文为独立整理与分析,引用项目名称、接口名称和少量必要代码片段以解释技术原理;原项目的代码许可证为 MIT。本文不代表原作者或 OpenAI 的立场。转载请保留原项目地址及本文出处。

系列导航:参见同一系列的「导读」及其他章节。
ChatGPT 负责思考,Codex 负责干活?从源码读懂 Codex with ChatGPT(系列导读)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询