ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

oh-my-pi Autoresearch 断点续跑机制:resume-message 提示词解析与自动续跑实现

oh-my-pi Autoresearch 断点续跑机制:resume-message 提示词解析与自动续跑实现 oh-my-pi Autoresearch 断点续跑机制resume-message 提示词解析与自动续跑实现【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi导读本文围绕 oh-my-pi coding-agent 内置的 Autoresearch自主实验研究模式中一段关键的提示词文件packages/coding-agent/src/autoresearch/resume-message.md深入讲解它在断点续跑流程中的角色当一次run_experiment完成后、Agent 进入下一轮迭代之前系统如何通过这段消息让 Agent 重新对齐实验目标、检查待处理的运行记录pending run、并继续最有希望的方向直到被用户打断或达到迭代上限。读完本文你将掌握 oh-my-pi Autoresearch 模式的整体运行协议、resume-message.md与prompt.md、prompt-setup.md、command-resume.md之间的分工以及底层agent_end事件与api.sendMessage如何驱动自动续跑这一关键能力。一、resume-message.md一段 9 行的续跑指令先看原文档全文位于 resume-message.mdContinue the autoresearch loop now. - Re-read your notes and the recent-runs context above before deciding the next direction. - Inspect recent git history for context. - A previous benchmark run completed but was never logged. Finish log_experiment before starting a new run. (仅在存在 pending run 时渲染) - Continue from the most promising unfinished direction. - Keep iterating until interrupted or until the configured iteration cap is reached. - Preserve correctness and do not game the benchmark.这段模板虽然只有寥寥数行却是整个自主实验循环的续跑锚点它承担四类语义身份声明Continue the autoresearch loop now.——告诉模型当前轮次不是普通对话而是实验循环的延续上下文对齐要求 Agent 重读笔记notes和上文中的 recent-runs context再决定下一步方向待办优先级通过 Handlebars 条件块{{#if has_pending_run}}在存在未记录unlogged的已完成运行结果时强制要求先执行log_experiment禁止在未记账的情况下启动新实验行为约束从最有希望的未完成方向继续、持续迭代直到被打断或达到迭代上限并且保持正确性、不要刷分do not game the benchmark。值得注意的是最后一条 Guardrail 与 prompt.md 中NEVER game the benchmark的规则完全一致说明这段续跑消息是 Autoresearch 模式治理规则的延续而非独立的新规则。二、续跑消息在系统里的实际装配位置2.1 模板导入与渲染在 autoresearch/index.ts 中模板以纯文本资源形式导入import resumeMessageTemplate from ./resume-message.md with { type: text };当需要续跑时通过prompt.render渲染模板传入has_pending_run布尔值以决定是否输出先完成 log_experiment的约束行api.sendMessage( { customType: autoresearch-resume, content: prompt.render(resumeMessageTemplate, { has_pending_run: Boolean(pendingRun), }), display: false, attribution: agent, }, { deliverAs: nextTurn, triggerTurn: true }, );从代码结构看customType: autoresearch-resume、display: false、deliverAs: nextTurn、triggerTurn: true这几个参数共同决定了这条消息的特殊性它是一条由系统注入、不对用户展示、自动触发下一轮 Agent 执行的内部消息——这正是自动续跑的实现细节。2.2 触发时机agent_end 事件resume 消息并非随时注入而是严格绑定在 agent_end 事件处理器 中。其逻辑可归纳为Agent 每轮结束agent_end时先清理runtime.runningExperiment并刷新仪表盘若 Autoresearch 模式未开启直接返回若用户已排队新消息ctx.hasPendingMessages()则放弃自动续跑autoResumeArmed false等待用户输入加载当前分支的活跃会话检查是否存在已完成但未记录的 pending run满足存在 pending run 且本轮尚未处理过该 run或autoResumeArmed为真的条件时渲染 resume-message 模板并通过sendMessage注入下一轮。也就是说autoResumeArmed是手动续跑路径的关键开关而 pending run 检查则是自动续跑路径的关键开关。两者汇合后Agent 在新的一轮开始时收到的就是 resume-message 的内容。2.3 与命令式续跑 command-resume.md 的区别除了事件驱动自动续跑Autoresearch 还提供了一条用户手动续跑路径在 TUI 中输入/autoresearch命令。当检测到当前autoresearch/*分支已有活跃会话时/autoresearch会渲染 command-resume.md 模板并作为用户消息发送Resume autoresearch on the active session. {{branch_status_line}} - Use the active session context above as the source of truth for goal, scope, constraints, and run history. - Inspect recent git history for context. - Continue the most promising unfinished direction. - Keep iterating until interrupted or until the configured iteration cap is reached.对比可见两条续跑路径的约束行几乎一致重读上下文、查看 git 历史、继续最有希望的方向、持续迭代到上限区别在于 command-resume 多出分支状态行Created and checked out dedicated git branch .../Using dedicated git branch ...且以用户消息形式呈现、可以携带用户补充的resume_context。二者的行为在 index.ts 的现有会话分支中由api.sendUserMessage(prompt.render(commandResumeTemplate, ...))完成装配。三、resume 消息背后的完整实验循环协议要真正理解续跑消息需要先理解它所属的 Autoresearch 模式的四阶段协议。3.1 Phase 1Harness 搭建prompt-setup.md首次开启 Autoresearch 且没有会话时系统注入 prompt-setup.md。这一阶段只允许搭建基准测试框架harness不允许做任何优化。必须产出在工作目录编写./autoresearch.sh作为唯一权威的基准入口成功时退出码为 0失败时非 0输出主指标行METRIC namevalue次指标以更多METRIC行输出每次运行必须确定性复现同一负载无实时网络、无时间依赖、必要时固定随机种子。Phase 1 的硬性规则包括禁止提前调用run_experiment、log_experiment、update_notes在init_experiment之前它们会报 no active autoresearch session编译通过不算基准测试harness 必须真实执行负载并输出METRIC禁止手工创建autoresearch.md、.autoresearch/等会话状态文件因为会话状态由系统统一跟踪removeLegacyArtifacts会在clear时清理这些遗留产物见 index.ts。3.2 Phase 2迭代循环prompt.mdinit_experiment调用成功后进入 Phase 2系统注入 prompt.md。该阶段会列出四个实验工具及其语义工具职责init_experiment开启或重配会话传new_segment: true可在当前会话内开启新基线segment首次调用会快照工作树为基线并自动提交 harnessrun_experiment固定执行bash autoresearch.sh自动捕获输出并解析METRIC namevalue/ASI keyvalue行回传log_experiment记录运行结果keep自动提交改动discard/crash/checks_failed回滚工作树可用flag_runs标记可疑历史运行update_notes持久化会话剧本body整体替换或向 ideas 待办追加append_idea笔记每轮注入系统提示词操作协议为先理解目标与瓶颈 → 必要时用init_experiment不 bump segment或update_notes更新目标/范围 → 先建立基线 → 然后反复改代码 →run_experiment→ 诚实地log_experiment每轮只做一个连贯的实验。决策规则指标变好 →keep变差或持平 →discard运行失败 →crash校验失败 →checks_failed。主指标是唯一的决策依据ASI 字段可自由用于记录hypothesis、rollback_reason、next_action_hint等学习信息。3.3 resume 消息在协议中的位置对比 prompt.md 与 resume-message.md 可以发现两者在继续迭代、保持正确性、禁止刷分的约束上完全同源。区别在于prompt.md 是每轮系统提示词的一部分由before_agent_start事件注入而 resume-message.md 是上一轮结束与下一轮开始之间的事件消息。当一轮实验结束、log_experiment已记账、用户无新消息时续跑消息保证循环不会停滞——Agent 会自动开启下一轮迭代这正是Autoresearch自主研究的含义所在。四、续跑逻辑的源码级佐证4.1 守卫条件与去重机制在 agent_end 处理器 中自动续跑被两个状态变量双重保护const shouldResumePendingRun pendingRun ! null runtime.lastAutoResumePendingRunNumber ! pendingRun.runNumber; if (!shouldResumePendingRun !runtime.autoResumeArmed) { return; } runtime.autoResumeArmed false; runtime.lastAutoResumePendingRunNumber pendingRun?.runNumber ?? null;autoResumeArmedrun_experiment成功结束后被置为true见 run-experiment.ts代表本轮实验完成、可以自动进入下一轮log_experiment之后同样置真见 log-experiment.tslastAutoResumePendingRunNumber防止同一 pending run 被反复触发续跑消息避免循环卡死。从源码结构看这种armed 标志 run 编号去重的组合确保了 resume 消息每轮至多注入一次且严格发生在实验完成之后、新迭代开始之前。4.2 pending run 的判定pendingRunSummaryFromRowindex.ts定义了一条运行记录何时算作 pendingstatus为 null尚未log_experiment、completedAt非空、退出码为 0 且未超时即视为通过。这正是 resume 消息中previous benchmark run completed but was never logged一句的底层判定依据。若存在 pending run续跑消息会要求先执行log_experiment因为run_experiment本身也会在启动新实验前abandonPendingRuns见 run-experiment.ts未记账的运行会被标记为放弃从而丢失一次实验结果。4.3 分支切换与模式恢复rehydrate 与before_agent_start中还有一层分支保护Autoresearch 模式只在活跃会话记录的 git 分支上生效。若用户在轮次之间手动切出了autoresearch/*分支before_agent_start会静默关闭 Autoresearch、摘除四个实验工具并停止注入系统提示词切回分支后会话与运行历史被保留SQLite 持久化于 storage.ts可无缝恢复。这也解释了为什么 resume 消息中要求Inspect recent git history for context——git 历史本身就是实验迭代的账本。五、续跑前 Agent 实际该做什么结合 resume-message 的指令与 prompt.md 的会话快照语义一轮续跑开始时的标准动作序列是重读注入的笔记与 recent-runs 上下文当前 segment 编号、本 segment 运行次数、基线指标、最优已保留指标、最近三次运行的状态/指标/ASI 摘要、未加理由的越界改动unjustified deviations等这些数据由before_agent_start中的recentResults计算并渲染进 prompt.md检查 pending run若has_pending_run为真必须先调用log_experiment记账keep/discard/crash/checks_failed四选一再开启新实验审视 git 历史确认基线提交与已保留的 keep 提交了解当前工作树相对基线的差异决定下一方向从最有希望的未完成方向继续每轮只做一个连贯实验循环终止条件用户打断或达到max_iterations上限——log_experiment记账后若本 segment 运行数达到上限会自动关闭 Autoresearch 模式并摘除工具见 log-experiment.ts。六、相关实现文件索引若希望深入阅读以下是 Autoresearch 模式的核心实现清单resume-message.md自动续跑注入的消息模板本文主题command-resume.md/autoresearch命令手动续跑模板prompt-setup.mdPhase 1 harness 搭建提示词prompt.mdPhase 2 迭代循环提示词index.ts扩展入口含agent_end/before_agent_start事件、/autoresearch命令、快捷键与续跑装配tools/init-experiment.ts会话初始化与基线快照tools/run-experiment.ts基准执行、输出捕获与 METRIC/ASI 解析tools/log-experiment.ts结果记账、提交/回滚、范围越界审计与置信度计算tools/update-notes.ts持久化笔记与想法待办helpers.tsMETRIC/ASI行解析、范围匹配等工具函数git.tsautoresearch/*分支保障与脏路径解析storage.tsSQLite 会话/运行记录持久化。结语resume-message.md表面上是 9 行提示词实际是 oh-my-pi Autoresearch 循环闭环中实验结束 → 新迭代开始这一衔接点的规则载体。它通过agent_end事件、pending run 状态与autoResumeArmed标志的三重配合让 Agent 在无人工干预时也能沿着记账 → 回顾 → 选择方向 → 再实验的路径持续迭代同时以保持正确性、禁止刷分的护栏约束自主行为。理解这段消息等于理解了整个自主实验循环的状态机设计。【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表