codex防重复生成需三层控制:api层关闭自动重试并校验x-request-id;前端用token预取或本地锁限频;数据库层通过sha-256哈希+联合唯一索引防止文件覆盖。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

Codex生成代码时防止重复触发
在Codex 0.148.0-alpha.20版本中,自动重试机制被显著增强,若不加控制,连续两次提交相同Prompt会生成两份冲突的Service类文件,直接导致编译失败。必须在API契约层就切断重复请求路径。
第一步:在Codex插件配置中关闭「自动重试」开关→进入IntelliJ IDEA → Settings → Tools → Codex → 取消勾选“Enable auto-retry on generation failure”。
第二步:为每次代码生成请求强制注入唯一requestId→在调用Codex REST API前,用UUID生成字符串,拼入X-Request-ID请求头,例如:【X-Request-ID: 7e3a9b2f-1c5d-4a8e-b0a1-2f8c7d9e4a5b】。
第三步:服务端拦截该Header并校验是否已存在→Codex后端需在Controller入口处读取X-Request-ID→查询Redis中key为“codex:gen:
用Token机制约束前端触发行为
用户在IDE里点两次“Generate Service”按钮,就会触发两次无差别请求。必须让前端主动参与幂等控制,而不是全靠后端兜底。
方法一:Token预取+单次消费
通过本地 Codex 或 OpenClaw OAuth 凭证直接调用 ChatGPT/Codex Responses 的 image_generation 工具来生成或编辑光栅图像,然后保存
前端发起生成请求前,先GET /codex/v1/token → 后端返回一个带30秒TTL的UUID Token → 前端将该Token填入后续POST /codex/v1/generate的body中 → 后端收到后立即执行Redis DEL操作 → 若DEL返回false(说明已被消费),则拒绝本次生成。
方法二:本地锁+时间戳双校验
前端在点击按钮瞬间记录Date.now() → 检查上一次点击时间戳是否距今不足800ms → 若是,直接return false并toast提示“操作太快,请稍候” → 这一步能拦住90%的手抖误点,【不依赖后端,响应零延迟】。
数据库层防重复落地
Codex生成的代码最终要写入本地磁盘,如果两个请求同时写入同一个Repository.java文件,会引发IO覆盖或乱码。必须在落盘前做原子性判断。
在Codex的FileWriterService中,对每个目标文件路径计算SHA-256哈希值作为业务主键→插入MySQL去重表codex_generation_log(字段:file_path_hash、content_hash、created_at)→设置联合唯一索引(file_path_hash, content_hash)→插入失败即视为重复生成,跳过写文件动作。
注意:这个去重表必须配每日定时任务清理,否则三个月后可能突破500万行,拖慢INSERT性能。










