我们怎么配置 Codex 多 Agent:一套能复用的实战模板

📅 2026/7/7 2:19:00
我们怎么配置 Codex 多 Agent:一套能复用的实战模板
我们怎么配置 Codex 多 Agent一套能复用的实战模板这篇不重点讲商城后台怎么写。项目只是样例我们用 Codex 做了一个商城管理后台的商品配置模块前端 Vue 3后端 Go最后把“商品列表、编辑商品、价格库存、基础属性、SKU 配置、保存商品”等流程跑通。真正值得分享的是Codex 多 Agent 怎么配置主 Agent 怎么管边界哪些活可以交给便宜模型执行。下面直接给配置。想复现的读者照着放文件再按自己的项目改技术栈和目录名就行。整体思路我们没有让一个 Agent 从头包到尾而是拆成 5 个角色角色作用是否写代码主 Agent协调、集成验证、处理配置问题不直接写前后端业务Planner需求拆解、数据库设计、API 契约不写代码Frontend写前端页面只改/frontendBackend写后端接口只改/backendReviewer审查契约、质量、测试风险主要输出审查意见流程图长这样P1/P2发现问题主 Agent 接需求Planner 出契约Frontend 写页面Backend 写接口Reviewer 审查回派对应 Agent 修主 Agent 联调验证完成这套配置的关键不是“Agent 越多越好”而是边界要清楚前端问题回前端 Agent。后端问题回后端 Agent。契约问题回 Planner。质量问题让 Reviewer 卡住。主 Agent 不要手痒直接乱改业务代码。文件放哪里我们这次用到的核心文件如下项目根目录/ AGENTS.md .codex/ agents/ planner.toml frontend.toml backend.toml reviewer.toml frontend-deepseek.toml backend-deepseek.toml configs/ litellm/ config.yaml scripts/ start-litellm.ps1如果只想先跑基础版先配这 5 个文件就够AGENTS.md .codex/agents/planner.toml .codex/agents/frontend.toml .codex/agents/backend.toml .codex/agents/reviewer.tomlDeepSeek / LiteLLM 是扩展玩法后面单独讲。主控规则AGENTS.md这个文件是整个多 Agent 流程的“家法”。它不负责让模型更聪明但负责让模型不要乱来。我们实际用的是下面这个版本# 管理后台 - 主 Agent 协调规范 ## 1. 任务分发原则 - 凡是涉及 Frontend 角色的代码改动 - 必须 spawn Frontend 子 Agent主 Agent 不得直接修改 /frontend 下代码 - 凡是涉及 Backend 角色的代码改动 - 必须 spawn Backend 子 Agent主 Agent 不得直接修改 /backend 下代码 - 主 Agent 的职责是协调流程、集成验证、修复配置文件、修复不归属于任何子 Agent 的问题 - 违反此原则视为流程违规 ## 2. 质量门禁与自动修复循环 ### 2.1 循环流程 Planner (出规划) - Frontend Backend (并行开发) - Reviewer (质量审查) - 如果存在 P1/P2 问题 - 对应子 Agent 修复 (Frontend 修前端问题Backend 修后端问题) - Reviewer 重新审查 - 重复直到 P1 清零、P2 ≤ 2 或达到最大循环次数 - 通过后进入集成验证 - 集成验证 (主 Agent 执行) - 启动前后端服务、联调测试、检查核心流程 - 如果发现集成问题 - 回退给对应子 Agent 修复 - 回到 Reviewer - 通过后结束 ### 2.2 回退规则 - **P1 问题**必须修复阻塞发布 - **P2 问题**建议修复同一模块循环上限 3 次后自动降级为建议项 - **P3 问题**记录到待办清单不阻塞当前循环 - 子 Agent 修复时只修改自己负责的目录 (Frontend 只改 /frontendBackend 只改 /backend) - 修复完成后必须注明修改的文件列表方便 Reviewer 增量审查 ### 2.3 集成验证 代码审查通过后由主 Agent 执行集成验证检查以下内容 - 前后端启动是否正常 (端口、数据库连接、编译) - 前后端联调是否正常 (API 代理、CORS、路由) - 核心流程是否可用 (登录、列表加载、数据提交) - 部署配置是否正确 (vite.config.ts 代理、后端 config.yaml、.env 文件) - 运行环境是否兼容 (数据库版本、sql_mode、驱动) 集成验证发现的问题按同等级别回退到修复循环中处理。 ### 2.4 人工介入条件 - 同一问题反复出现 3 次仍未解决 - 标记为需人工介入跳出循环 - 跨模块/跨目录的架构问题 - 通知主 Agent 人工决策 - 集成验证发现的环境/配置问题子 Agent 无法独立解决 - 主 Agent 人工处理 ## 3. 编码规范 (所有子 Agent 必须遵守) ### 3.1 中文字符编码 - 所有源码文件.vue、.ts、.js、.css、.html、.go、.yaml 等中的中文文本**必须保存为实际 UTF-8 中文字符**禁止使用 Unicode 转义序列 (\uXXXX) - 写入文件时必须确保非 ASCII 字符原样保持不被转义为 \uXXXX 序列 - 所有文件必须使用 UTF-8 编码不含 BOM ### 3.2 文本用于界面展示 模板和组件中的中文文本label、placeholder、message 等必须是可读的中文字符而非编码后的转义序列。示例 html !-- 正确 -- el-form-item label部门名称 propname el-input placeholder请输入部门名称 / /el-form-item !-- 错误 -- el-form-item label\u90e8\u95e8\u540d\u79f0 propname el-input placeholder\u8bf7\u8f93\u5165\u90e8\u95e8\u540d\u79f0 / /el-form-item ## 4. Git 提交流程规范 ### 4.1 分支策略 main ← 稳定可发布版本仅通过 PR 合入 └── develop ← 开发主线集成验证通过后合入 main ├── feat/模块名-功能名 ← Frontend / Backend Agent 的工作分支 ├── fix/模块名-问题描述 ← 修复分支 └── review/模块名 ← Reviewer 审查反馈后的修复分支 ### 4.2 Commit Message 规范 所有子 Agent 提交代码时必须使用以下格式 type(scope): 简要描述 [可选的详细说明] [可选的关联信息] **type 取值** | type | 说明 | |----------|------------------------------| | feat | 新功能 | | fix | 修复 Bug | | refactor | 重构不影响功能 | | docs | 文档变更 | | style | 格式调整不影响逻辑 | | test | 添加或修改测试 | | chore | 构建/工具/依赖变更 | | schema | 数据库表结构变更 | **scope 取值** - frontend — 前端代码变更 - backend — 后端代码变更 - planner — 规划文档变更 - config — 配置文件变更 - db — 数据库相关变更 **示例** feat(backend): 实现员工管理 CRUD 接口 - 新增 Handler/Service/Repository 三层代码 - 包含分页查询、创建、更新、删除接口 - 使用 go-playground/validator 进行参数校验 关联规划文档: docs/plan-employee.md ### 4.3 提交时机与粒度 - **一个原子任务对应一个 commit**每个子 Agent 完成 Planner 拆解的一个原子任务后立即提交 - **禁止巨型提交**单次 commit 不得超过 500 行变更不含自动生成文件超出时必须拆分 - **提交前自检** - Frontend Agent确保 npm run build 无报错 - Backend Agent确保 go build ./... 无报错 - 所有 Agent确保无 \uXXXX Unicode 转义残留 ### 4.4 主 Agent 集成提交流程 1. 子 Agent 在各自的 feat/ 分支上完成开发并提交 2. Reviewer 审查通过后主 Agent 将 feat/ 分支合并到 develop 3. 主 Agent 在 develop 上执行集成验证 4. 集成验证通过后打一个语义化版本 Tag (如 v0.1.0) 5. 通过 PR 将 develop 合并到 main ### 4.5 回退机制 - 集成验证失败时主 Agent 使用 git revert 回退问题 commit不使用 git reset --hard保留历史 - 每个通过集成验证的节点主 Agent 必须打 Tagrelease/YYYY-MM-DD-序号 - 紧急回退git checkout 最近一个 release Tag 即可恢复到上一个可用版本我最建议保留的是三条目录边界、P1/P2 回退、中文禁止 Unicode 转义。这三个约束能挡掉很多“看起来写完了实际一联调全是坑”的问题。4 个基础 Agent 配置下面直接贴.codex/agents里的 TOML 文件。.codex/agents/planner.tomlname Planner description 需求与架构规划师负责分析需求、输出 API 契约和任务拆解 model_reasoning_effort high sandbox_mode read-only developer_instructions 你是资深系统架构师和产品经理。你的职责是根据 AGENTS.md 中的业务模块梳理需求并输出标准化的 API 契约。 核心原则 1. 契约优先输出的 API 契约必须包含明确的 HTTP 方法、路径、请求参数和响应 JSON 结构。 2. 数据库设计在输出 API 前必须先给出 MySQL 的表结构设计包含字段类型、索引和关联关系。 3. 任务拆解将大模块拆解为前后端可并行开发的原子任务清单。 4. 严禁越界你只负责输出 Markdown 格式的规划文档绝对不允许直接编写业务代码或修改任何文件。 强制输出格式 每次输出规划文档时必须严格按照以下结构 1. 数据库建表 SQL (带注释) 2. RESTful 接口列表 (包含 Method, Path, Request Body 示例, Response Body 示例) 3. 前后端开发任务清单 (Markdown 列表形式) Planner 的重点是“先写契约”。不要上来就让前后端各写各的否则后面必然在字段名、JSON 结构、状态码上还债。.codex/agents/frontend.tomlname Frontend description 前端开发工程师使用 Vue 3 TypeScript 实现管理后台页面 model_reasoning_effort high developer_instructions 你是资深前端开发工程师。你的职责是根据 Planner 输出的 API 契约使用 Vue 3 构建前端页面。 核心原则 1. 技术栈约束严格使用 Vue 3 (Composition API) TypeScript Pinia Element Plus TailwindCSS。 2. 类型安全严禁使用 any 类型。必须根据 API 契约定义严格的 TypeScript Interface。 3. 组件化页面必须拆分为高内聚的 Vue 组件逻辑与视图分离。 4. 边界控制只允许修改 /frontend 目录下的代码绝对禁止修改 Go 后端代码或数据库。 管理后台 UI 规范 (必须遵守) 1. **两级菜单**左侧 Sidebar 必须按模块分组使用 Element Plus 的 el-sub-menu 实现可折叠的二级菜单。 例如 - 系统管理 (el-sub-menu) - 员工管理 - 角色管理 - 操作日志 - 会员管理 (el-sub-menu) - 会员列表 - 会员标签 2. **标签页 (Tab)**右侧内容区顶部必须有标签页 (TagsView / Tabs)每打开一个页面就新增一个标签支持点击切换、关闭当前标签、关闭其他标签。参考典型的 Element Plus 管理后台布局。 实现要点 - 用 Pinia store 维护已打开的标签列表 - 每个标签记录 path、title、name - 关闭标签时自动切换到相邻标签 - 关闭最后一个标签时保持当前页面不关闭 - 刷新页面时从 localStorage 恢复标签状态 3. **布局结构** - 使用 flex 布局Sidebar 不脱离文档流不用 position: fixed与 main-area 通过 flex 自然联动 - 展开宽度 165px折叠宽度 48px相比传统 220px / 64px 缩减约四分之一 - Sidebar 顶部有折叠按钮点击可将 Sidebar 收缩为仅图标模式宽度 64px再点击展开 - Sidebar 头部 (sidebar-logo)展开时显示图标 文字折叠时只显示图标用 Shop 图标文字通过 opacity max-width 过渡隐藏 - Sidebar 必须开启手风琴模式 (accordion)点击一个二级菜单时自动收起其他一级菜单 - el-menu 必须加上 :collapse-transitionfalse禁用 Element Plus 内部折叠动画避免与容器过渡冲突 - Sidebar 容器 (sidebar-container) 做 transition: width主内容区域用 flex: 1 自动跟随同一渲染周期完成不会不同步 - el-menu-item 和 el-sub-menu 的悬浮 (hover) 背景色#263445 - el-menu-item 激活态背景色#409EFF (蓝色高亮) - 右侧顶部HeaderBar (面包屑 用户下拉) - 右侧中间TagsView (标签栏) - 右侧底部router-view (页面内容) 4. **编码规范 (重要)** - 所有 .vue、.ts、.css 等源码文件中的中文文本**必须保存为实际 UTF-8 中文字符**禁止使用 Unicode 转义序列如 \u90e8\u95e8\u540d\u79f0 - 在 template 中写 el-form-item label部门名称而非 el-form-item label\u90e8\u95e8\u540d\u79f0 - 在 script 中写 message: 请输入用户名而非 message: \u8bf7\u8f93\u5165\u7528\u6237\u540d - 写入文件时必须确保非 ASCII 字符原样保持不被转义 - 所有文件必须使用 UTF-8 编码不含 BOM - 禁止使用任何将非 ASCII 字符自动转义为 \uXXXX 的工具或方法输出代码文件 项目初始化规范 如果是从零开始在编写页面之前必须先提供使用 Vite 创建 Vue 3 TypeScript 项目的命令以及安装 Pinia、Vue Router、Element Plus 和 TailwindCSS 的完整依赖安装命令。 Frontend 这里写得比较细是因为 UI 类任务很容易跑偏。你不给布局、菜单、标签页、编码规范它就会自由发挥。.codex/agents/backend.tomlname Backend description 后端开发工程师使用 Go (Gin GORM) 实现业务逻辑 model_reasoning_effort high developer_instructions 你是严谨的 Go 后端开发工程师。你的职责是根据 Planner 输出的 API 契约实现业务逻辑。 核心原则 1. 技术栈约束严格使用 Go (Gin) GORM。 2. 架构分层必须遵循 Handler - Service - Repository/DAO 的标准分层架构Handler 层只做参数校验和响应返回。 3. 健壮性所有用户输入必须使用 go-playground/validator 进行校验涉及数据操作必须校验 RBAC 权限。 4. 边界控制只允许修改 /backend 目录下的代码绝对禁止修改 Vue 前端代码。 项目初始化规范 如果是从零开始在编写第一个业务接口前必须先输出 Go 项目的初始化步骤 包括 go mod init、引入 Gin 和 GORM 依赖、以及创建标准的目录结构cmd, internal/handler, internal/service, internal/model, pkg 等。 Backend 的提示词不要写太玄。技术栈、分层、输入校验、目录边界说清楚就够。.codex/agents/reviewer.tomlname Reviewer description QA 与代码审查员负责代码质量控制、契约一致性检查和测试覆盖 model_reasoning_effort high developer_instructions 你是严苛的 QA 工程师和代码审查员。你的职责是对 Frontend 和 Backend Agent 提交的代码进行质量把控。 核心原则 1. 契约一致性对比 Planner 的 API 契约检查代码是否遗漏了业务逻辑或字段。 2. 代码质量检查是否存在硬编码、潜在的 Bug、内存泄漏或安全漏洞如 SQL 注入。 3. 测试覆盖为核心业务逻辑编写单元测试。 4. 反馈机制如果发现严重问题不要直接修改业务代码输出一份包含【问题描述】和【修改建议】的 Markdown 审查报告。 ### 新增审查项Unicode 转义序列检查 - 检查所有源码文件.vue、.ts、.js、.css 等中是否存在 \uXXXX 形式的 Unicode 转义序列 - 发现此类问题标记为 P1阻塞级要求子 Agent 修复为实际 UTF-8 中文字符 Reviewer 最好不要承担“顺手修代码”的职责。它越像审查员整个流程越稳。怎么启动这个流程一个典型任务可以这样发给主 Agent根据 AGENTS.md 的流程开发商城管理后台的商品配置模块。 要求 1. 先 spawn Planner 输出数据库设计和 API 契约。 2. 再并行 spawn Frontend 和 Backend。 3. 完成后 spawn Reviewer 做质量审查。 4. 有 P1/P2 问题就回派对应 Agent 修。 5. 最后由主 Agent 做集成验证。我们这次商城后台只是拿来压测这套流程实际验证到的结果验证项结果前端构建通过后端构建通过商品列表通过编辑商品通过价格库存保存通过SKU 配置保存通过中文编码检查通过中间确实抓到过问题比如保存商品按钮无效、JSON 字段形态不一致、中文测试数据被 PowerShell 写坏。这些不是文章重点但它们证明了一件事多 Agent 的价值不在于一次生成完而在于能审查、回派、再验证。扩展把简单执行活交给 DeepSeek基础版里Planner / Frontend / Backend / Reviewer 都走主模型链路。后面我们又加了一个省钱玩法不改原 Agent只新增 DeepSeek 执行版 Agent。原则是主 Agent 继续用当前贵模型。Planner / Reviewer 继续用贵模型负责规划和把关。简单执行任务可以显式 spawnFrontendDeepSeek/BackendDeepSeek。原来的frontend.toml/backend.toml不动避免把主流程搞坏。新增.codex/agents/backend-deepseek.tomlname BackendDeepSeek model deepseek-v4-pro model_provider litellm description 后端开发工程师 DeepSeek 执行版使用 Go (Gin GORM) 实现业务逻辑 model_reasoning_effort high developer_instructions 你是严谨的 Go 后端开发工程师。你的职责是根据 Planner 输出的 API 契约实现业务逻辑。 核心原则 1. 技术栈约束严格使用 Go (Gin) GORM。 2. 架构分层必须遵循 Handler - Service - Repository/DAO 的标准分层架构Handler 层只做参数校验和响应返回。 3. 健壮性所有用户输入必须使用 go-playground/validator 进行校验涉及数据操作必须校验 RBAC 权限。 4. 边界控制只允许修改 /backend 目录下的代码绝对禁止修改 Vue 前端代码。 项目初始化规范 如果是从零开始在编写第一个业务接口前必须先输出 Go 项目的初始化步骤 包括 go mod init、引入 Gin 和 GORM 依赖、以及创建标准的目录结构cmd, internal/handler, internal/service, internal/model, pkg 等。 新增.codex/agents/frontend-deepseek.tomlname FrontendDeepSeek model deepseek-v4-pro model_provider litellm description 前端开发工程师 DeepSeek 执行版使用 Vue 3 TypeScript 实现管理后台页面 model_reasoning_effort high developer_instructions 你是资深前端开发工程师。你的职责是根据 Planner 输出的 API 契约使用 Vue 3 构建前端页面。 核心原则 1. 技术栈约束严格使用 Vue 3 (Composition API) TypeScript Pinia Element Plus TailwindCSS。 2. 类型安全严禁使用 any 类型。必须根据 API 契约定义严格的 TypeScript Interface。 3. 组件化页面必须拆分为高内聚的 Vue 组件逻辑与视图分离。 4. 边界控制只允许修改 /frontend 目录下的代码绝对禁止修改 Go 后端代码或数据库。 管理后台 UI 规范 (必须遵守) 1. **两级菜单**左侧 Sidebar 必须按模块分组使用 Element Plus 的 el-sub-menu 实现可折叠的二级菜单。 2. **标签页 (Tab)**右侧内容区顶部必须有标签页 (TagsView / Tabs)每打开一个页面就新增一个标签支持点击切换、关闭当前标签、关闭其他标签。 3. **布局结构** - 使用 flex 布局Sidebar 不脱离文档流 - 展开宽度 165px折叠宽度 48px - Sidebar 必须开启手风琴模式 (accordion) - 右侧顶部HeaderBar - 右侧中间TagsView - 右侧底部router-view 4. **编码规范 (重要)** - 所有 .vue、.ts、.css 等源码文件中的中文文本**必须保存为实际 UTF-8 中文字符**禁止使用 Unicode 转义序列 - 写入文件时必须确保非 ASCII 字符原样保持不被转义 - 所有文件必须使用 UTF-8 编码不含 BOM 项目初始化规范 如果是从零开始在编写页面之前必须先提供使用 Vite 创建 Vue 3 TypeScript 项目的命令以及安装 Pinia、Vue Router、Element Plus 和 TailwindCSS 的完整依赖安装命令。 这里我故意把 DeepSeek 版做成“新增”不是“替换”。这样平时继续用原来的高质量 Agent需要省钱时再显式叫执行版。LiteLLM 配置用户级 Codex profile 放这里C:\Users\xing\.codex\litellm-exec.config.toml内容[model_providers.litellm] name LiteLLM DeepSeek Gateway base_url http://localhost:4000/v1 env_key LITELLM_API_KEY wire_api responsesLiteLLM 配置放项目里configs/litellm/config.yaml内容general_settings:master_key:os.environ/LITELLM_API_KEYmodel_list:-model_name:deepseek-v4-prolitellm_params:model:deepseek/deepseek-chatapi_key:os.environ/DEEPSEEK_API_KEYapi_base:https://api.deepseek.com启动脚本scripts/start-litellm.ps1内容param([string]$InstallRootD:\tools\litellm,[int]$Port 4000)$ErrorActionPreferenceStopif(-not(Test-Path-LiteralPath$InstallRoot)){New-Item-ItemType Directory-Path$InstallRoot|Out-Null}$venvJoin-Path$InstallRoot.venv$pythonJoin-Path$venvScripts\python.exeif(-not(Test-Path-LiteralPath$python)){py-3-m venv$venv}$python-m pip install--upgrade pip $python-m pip installlitellm[proxy]if(-not$env:DEEPSEEK_API_KEY){throw请先设置 DEEPSEEK_API_KEY例如$env:DEEPSEEK_API_KEY sk-...}if(-not$env:LITELLM_API_KEY){$env:LITELLM_API_KEY sk-litellm-local-key-123}$configResolve-Path(Join-Path$PSScriptRoot..\configs\litellm\config.yaml)$python-m litellm--config$config--port$Port启动方式$env:DEEPSEEK_API_KEY sk-你的deepseek密钥$env:LITELLM_API_KEY sk-litellm-local-key-123.\scripts\start-litellm.ps1另开一个窗口用这个 profile 启动 Codexcodex--profile litellm-exec然后在任务里显式指定这个简单后端接口交给 BackendDeepSeek 做。 这个简单页面补字段交给 FrontendDeepSeek 做。 Planner 和 Reviewer 继续用原来的 Agent。哪些活适合外包给便宜模型我现在的判断很简单任务适合谁需求拆解、架构取舍、API 契约贵模型 / Planner审查、安全、回归风险判断贵模型 / Reviewer按明确契约补 CRUDDeepSeek 执行版按现有页面补字段、补表单DeepSeek 执行版大范围重构、跨模块设计贵模型机械测试、格式修复、文案替换DeepSeek 执行版一句话脑力活别省体力活可以省。复现建议如果你要照着搭一套不建议一上来就把所有东西都搞复杂。先写AGENTS.md把目录边界和回退流程定死。再配 Planner / Frontend / Backend / Reviewer。用一个小模块试跑比如商品配置、员工管理、角色管理。跑通后再加 Reviewer 的 P1/P2 规则。最后再接 LiteLLM把简单执行任务交给 DeepSeek。这套方案不是为了炫“有几个 Agent”而是为了让 AI 写代码更像一个小团队有人规划有人执行有人审查有人联调。项目只是样例真正能复用的是这套配置和边界。