当前推荐先读:沿 generate 走完一次 Agent 任务。 先按完整任务顺序进入各职责组件,讲完回到主线,再用下面的动作页展开具体交接。
读过 generate() 和 _run_turn() 后,进入 Trajectory Management 专题,专门理解历史接续、改写、分叉与训练片段。正文与下载文件来自 slime_photo 中的同一份笔记。
按任务阶段阅读
| 阶段 | 从这里读 | 这一段在做什么 |
|---|---|---|
| 1 启动条件 | Pre-4. 启动前准备 | Adapter 入口、任务、Session、执行环境和题目准备好,走到 Harness.run 前 |
| 2 Agent 启动 | 4. Launch Agent → 5. Manage Sandbox / 6. Exec Commands | 配置和命令怎样形成,环境怎样落实,CLI 怎样启动并等待 |
| 3 模型请求循环 | 7. Make API Calls → 2. Translate & Forward → 3. Generate Tokens → 3.5. 完成一次模型请求 | CLI 已在运行;一次请求从回连、转换到生成、响应和轨迹,可能重复多轮 |
| 4 回到任务收尾 | 完整任务主线的第 7、8 步 | CLI 结束后收集 diff,独立评估,返回结果或导出训练轨迹,再清理 |
Pre-4 在目录中放于 3.5 后、4 前,表示给动作 4 增加前置阅读。真实执行先准备和启动,再发生模型请求;组件动作编号不表示这个时间顺序。
先看项目开头的任务生命周期总览,再从各动作页的定位图进入具体数据流。
下面保留 CodeWiki 原图作为组件导航。原图的启动调用实际由外层 generate() 发起;本例的直接 HTTP 客户端是沙箱中的 CLI,没有独立 External Platforms 实现。原图动作 1 的接收入口与动作 7 一起说明,动作 8 的响应返回在 3.5 展开。
每章正在跟随哪一层调用
generate() 编排一次样本任务。进入 Harness 后,运行中的 CLI 可以多次发起模型请求;2 → 3 → 3.5 展开的是每次请求内部的 _run_turn()。5 提供环境能力,6 组合这些能力执行长命令;它们会被任务中的多个位置调用。
因此,同一个文件可以出现在多个章节中,阅读时只展开当前职责。各章的“本章主要源码文件与入口”可以点开查看文件、符号和行号。
| 章节 | 当前主线 | 本章展开 | 读完返回 |
|---|---|---|---|
| 2. Translate & Forward | BaseAdapter._run_turn() | 将客户端的消息历史与可用工具定义整理成共享格式;本章不生成 token。 | 回到 _run_turn(),将 translated 与 tools_schema 交给动作 3 编码。 |
| 3. Generate Tokens | BaseAdapter._run_turn() → call_sglang_generate() | 模板编码、采样参数、生成请求及 TurnRecord 封装。 | 回到 _run_turn(),动作 3.5 从 turn.output_ids 开始解码与收尾。 |
| 3.5 完成一次模型请求 | BaseAdapter._run_turn() | 解码、解析、协议回复、轨迹记录与请求退出;区别响应对象构造和实际网络发送。 | 请求返回运行中的 CLI;会话仍可继续。本章不结束整个 Agent 任务,也不导出训练样本。 |
| Pre-4. 启动前准备 | generate() | 准备 Adapter 服务、任务信息、会话、执行环境、CLI 和题目文件。 | 在 generate() 中调用 Harness.run(),把已经准备好的六项输入交给动作 4。 |
| 4. Launch Agent | generate() → BaseHarness.run() | 确认用户、建立 HarnessContext、写配置、形成命令与环境、委派运行并接回状态。 | 退出状态沿 run_agent()/Harness.run() 返回 generate();外层继续收集 diff 与独立评分。 |
| 5. Manage Sandbox | Sandbox 接口 → E2BSandbox 后端 | 命令和文件 API 如何落实到后端、返回结果与错误,按需回看环境创建和回收。 | 回到调用 sb.exec/read_file/write_file 的位置,继续原来的任务;本章不是启动之后单独发生的一阶段。 |
| 6. Exec Commands | run_agent() → exec_and_wait() | 用动作 5 的文件/命令能力写脚本、后台启动、检查完成标记、读取输出与处理等待预算。 | 返回 (exit_code, output) 给 run_agent();后者只把整数状态继续交还 Harness 与 generate()。 |
| 7. Make API Calls | 运行中的 CLI → Adapter HTTP 入口 | 地址与凭据如何对应 HTTP 路由、请求 JSON 和会话身份;CLI 内部组装历史和执行工具属于外部程序。 | 进入 _run_turn() 的输入转换,即动作 2;随后 3 和 3.5 完成本轮并响应 CLI。 |
阅读材料
- Trajectory Management 专题阅读入口:在
generate()/_run_turn()主线之后,专门理解历史分叉、assistant 改写与训练 Sample 导出。 - 本节 README
- Slime Core 完整请求流程