Skip to content

01-anything/codex 启发:agent 核心循环分 session/task/turn/thread 四层 #8

Description

@miaobyte

来源

Codex 源码分析(reference/codex-source-analysis,第 06 章「Agent 核心循环」):Codex 的核心循环不是 loop { call_model(); call_tool(); } 式的单函数 ReAct,而是 session / task / turn / thread 四层显式协作的分层状态机

四层含义

session —— 串行的会话命令层。 一个会话对应一条串行事件分发循环 submission_loop:所有命令/事件(用户输入、审批回包、中断、压缩、关闭等)都先进入单一队列,按 Op 类型依次分发。同一时刻至多一个活动任务,且可被用户输入打断。它是「串行化」的保障——杜绝多入口并发写。

task —— 任务层。 会话里正在执行的那件具体任务的生命周期。新任务进来先 abort_all_tasks(中止旧任务)再 start_task,保证同一时刻只有一个 active turn;结束时 on_task_finished 收尾并统计 token / 工具调用。它是「可替换、可中止」的粒度。

turn —— 回合层。 一个任务内部由若干回合组成。每回合是 run_turn 驱动的「采样 → 工具调用 → 采样」循环,直到 needs_follow_up == false(模型不再跟进,且无 pending 用户输入)才结束。真正的 ReAct 循环就在这里,也是 token 压力与 compaction 处理的地方。

thread —— 线程层。 比会话更横向的生命周期管理,ThreadManager 负责线程的 start / resume / fork / shutdown。fork 不是文本复制,而是「历史快照 + 中断标记 + 统一 spawn 入口」的状态复制。它是「并行探索 + 可回溯」的粒度。

对 byteseek 的启发

当前 corebrain 是单一 mainbrain 循环(input → llm.call → byteseek.run)。对照四层,可思考各自在 byteseek 里的落点:

  • session 层 → 命令/事件的串行分发队列(现有 talk 队列是雏形,但无统一 Op 分发)。
  • task 层 → 一次真实任务的可替换/可中止粒度(现有 session/<name> 生成程序,无 abort 语义)。
  • turn 层 → 生成程序内部的「采样—工具」迭代(现有 vthread 执行,无 needs_follow_up 收敛语义)。
  • thread 层 → 会话的 start/resume/fork,与 rwir/rwfunc 进化议题 01-anything/rwir/rwfunc 版本+评分进化:n 变体实测择优,沉淀通用/本地最优库 #7 的「n 变体并行择优」天然相关。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions