ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Codex Autoresearch 后台控制器拆解:controller 如何调度 codex exec worker 实现无人值守

Codex Autoresearch 后台控制器拆解:controller 如何调度 codex exec worker 实现无人值守 Codex Autoresearch 后台控制器拆解controller 如何调度 codex exec worker 实现无人值守【免费下载链接】codex-autoresearchCodex Autoresearch Skill — A self-directed iterative system for Codex that continuously cycles through: modify, verify, retain or discard, and repeat indefinitely. Inspired by Karpathy’s autoresearch concept.项目地址: https://gitcode.com/gh_mirrors/co/codex-autoresearchCodex Autoresearch 后台控制器拆解controller 如何调度 codex exec worker 实现无人值守Codex Autoresearch是一个让 Codex 自主循环修改 → 验证 → 保留或回滚 → 重复的技能。它的前台模式依赖 Codex Goal 续跑而真正让人设好就睡觉的是它的后台模式一个分离的 Python 控制器controller循环拉起一个个一次性的codex execworker每个 worker 只做一轮实验控制器负责验证契约、记录状态、处理停止与恢复。本文带你拆解这条无人值守链路的关键机制。一、整体架构启动器、控制器、worker 三层分工后台运行的进程关系可以用一行文字概括来自 references/background.mdCodex TUI - detached controller - worker 1 - worker 2 - ... - terminal event角色职责生命周期启动器launch命令初始化基线、写运行配置、拉起控制器后退出一次性控制器detached controller循环读取事件日志逐个拉起/等待/校验 worker一次完整运行workercodex exec只做恰好一轮实验然后退出每个迭代一次这种短命 worker 长命控制器的设计是理解整个系统的钥匙worker 不需要跨轮记忆所有状态都落在磁盘上控制器每轮都从权威状态重新推导。二、控制器如何启动detached 进程 就绪校验入口是 scripts/autoresearch.py 中的launch_background先执行initialize_run完成基线测量与配置落盘再调用 spawn_controller。spawn_controller做了三件关键小事防重入如果 autoresearch-results/runtime.json 里记录的控制器 PID 还活着直接报错杜绝双控制器分离启动以start_new_sessionLinux方式拉起python3 autoresearch.py _controller --repo repo标准输入输出全部丢弃父进程退出后它继续存活5 秒就绪窗口启动器会轮询直到控制器把runtime.json写成running且 PID 匹配否则判为启动失败并清理进程。也就是说launch返回时你能拿到 run id、基线值、控制器 PID 和结果目录——之后就可以放心离开终端了。三、控制器主循环每个迭代只起一个 worker核心逻辑在 run_controller。每一轮循环重读状态重新加载run.json与完整的 events.jsonl确认状态为active、仓库干净、HEAD 与分支未漂移消费停止请求检查stop-request.json是否存在这是stop命令留下的便条构造 worker 命令controller_command 拼出codex exec -C repo --ephemeral --json --output-last-message file [-]其中--ephemeral保证 worker 不留下任何会话状态执行策略二选一默认的danger-full-access对应--dangerously-bypass-approvals-and-sandbox因为finish需要写 Git 提交和回滚或用户明确选择的--sandbox workspace-write注入提示词worker_prompt 把已确认的目标、当前指标、目标值、允许修改的路径和验证命令写进 stdin并明确规则——只允许改 scope 内的文件、不许自己 commit/revert、不许编辑autoresearch-results/、恰好调用一次finish后退出等待与记录worker 的全部 JSON 输出追加到autoresearch-results/logs/worker-XXXX.jsonl控制器每 0.1 秒轮询一次以便及时响应停止请求被请求停止时用 terminate_process_tree 整树终止先 SIGTERM 宽限再 SIGKILL 兜底校验契约worker 正常退出后控制器只接受恰好新增一条iteration事件外加可能的complete/stopped这类合法模式否则记为worker_contract_violation并写入error事件——这就是防止静默提前退出、防止无限重启循环的保险丝。四、状态与可观测性runtime.json / runtime.log / events.jsonl后台运行期间所有诊断信息都在目标仓库的autoresearch-results/下该目录始终不入库路径作用run.json不可变的确认配置目标、scope、指标命令、目标值events.jsonl追加式事件史baseline / iteration / blocked / complete / error / stopped / resumedruntime.json控制器与 worker 的实时 PID 和状态starting/running/stopping/stopped/errorruntime.log控制器生命周期事件流controller_started、worker_started、worker_finished 等logs/每次验证、守护命令与每个 worker 的完整输出任何异常——worker 非零退出、事件缺失、控制器死亡——都只会变成error或orphaned绝不会被当成进度。这是长时无人值守可被信任的前提。五、无人值守期间用户怎么控制控制器只认三类信号全部通过同一个技能入口$codex-autoresearch下发status校验完整事件史报告当前指标、迭代数、控制器/worker PID以及仓库是否与记录一致stopstop_background 不直接杀进程而是写入stop-request.json由控制器自己在下一个安全点worker 边界终止 worker 并记录stopped事件若控制器已失联orphaned则拒绝操作并提示人工处理resume --note ...resume_run 先拒绝已完成 / 有未回滚试验提交 / 孤儿 worker 还活着等危险场景校验通过才追加resumed事件并重新拉起一个新控制器。运行结束后一句generate an HTML report就能生成自包含的可视化报告 report.html六、小结无人值守 短命 worker 状态外置 严格契约 回头看这条链路没有花哨技术靠的是三个朴素决定worker 无状态每轮全新codex exec提示词里携带全部必要信息做完一轮立即退出状态外置且只追加events.jsonl是唯一事实来源控制器每次循环都完整重放校验绝不猜测契约不可违反一个 worker 恰好一个实验越界即error宁可停下等人也不静默自愈。想动手体验的话先阅读 SKILL.md 的完整技能约定、references/workflow.md 的新建运行流程再按 docs/INSTALL.md 安装用一个可重复计分的任务如测试失败数、覆盖率发起一次 background 运行然后就可以真的去睡觉了。【免费下载链接】codex-autoresearchCodex Autoresearch Skill — A self-directed iterative system for Codex that continuously cycles through: modify, verify, retain or discard, and repeat indefinitely. Inspired by Karpathy’s autoresearch concept.项目地址: https://gitcode.com/gh_mirrors/co/codex-autoresearch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表