ARTICLE DETAIL

资讯详情

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

oh-my-pi Autoresearch 模式:基于 METRIC/ASI 闭环的自主实验循环实战指南

oh-my-pi Autoresearch 模式:基于 METRIC/ASI 闭环的自主实验循环实战指南 oh-my-pi Autoresearch 模式基于 METRIC/ASI 闭环的自主实验循环实战指南【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-piAutoresearch Mode 是 oh-my-pi 内置在 coding-agent 中的一套自主实验框架Agent 以读懂目标 → 搭建基准 → 迭代改动 → 运行基准 → 诚实记录的循环自动优化代码性能直到用户打断或达到迭代上限。本指南围绕 autoresearch 提示词 展开结合四个实验工具与状态机的真实实现讲解如何从零搭建 benchmark 基准、如何用init_experiment/run_experiment/log_experiment/update_notes驱动闭环、如何解读置信度与 scope 偏差最终让你掌握一套可复用的Agent 自主跑实验方法论。一、Autoresearch 是什么Agent 自主实验循环的整体设计Autoresearch 不是一个普通的功能开关而是一套被注入系统提示词system prompt的运行协议。从源码看它在 index.ts 中以/autoresearch斜杠命令启用并在每次 agent 启动前通过 before_agent_start 钩子 把 prompt.mdPhase 2 迭代循环或 prompt-setup.mdPhase 1 基准搭建渲染进系统提示词。整个实验生命周期被划分为两个阶段Phase 1Harness 搭建。目标是写出规范化的基准入口autoresearch.sh让它可以测量目标指标。此时禁止调用run_experiment、log_experiment、update_notes会因no active autoresearch session报错只有init_experiment完成后才进入 Phase 2。Phase 2迭代循环。Agent 不断执行改代码 → 跑基准 → 记录结果的循环直到用户中断或达到max_iterations上限。一个关键约定是会话状态与运行产物由框架代管。autoresearch.sh在 Phase 1 阶段被提交commit一旦init_experiment之后禁止中途编辑autoresearch.sh——除非你刻意通过init_experiment new_segment: true开启新 segment同时禁止在仓库里创建autoresearch.md、.autoresearch/等遗留文件。从 index.ts 可以看到这些旧式工件autoresearch.md、autoresearch.checks.sh、autoresearch.program.md、autoresearch.ideas.md、autoresearch.jsonl、autoresearch.config.json、.autoresearch在执行clear时会被主动清理说明会话状态一律由框架的 SQLite 存储代管而不是散落在工作目录里。状态持久化位于用户目录下的~/.omp/autoresearch/见 storage.ts 的项目路径编码注释以仓库根路径编码后的目录名 SQLite 数据库按项目隔离并且与 git 分支绑定会话记录在哪个autoresearch/*分支上切走分支时实验工具自动解绑切回来时无缝恢复index.ts 的 rehydrate 逻辑。二、Phase 1编写并验证基准入口 autoresearch.sh2.1 基准脚本的四条硬性要求根据 prompt-setup.mdautoresearch.sh必须满足要求说明退出码语义成功必须exit 0失败必须非零退出码主指标输出以单行METRIC namevalue打印主指标次指标输出以附加的METRIC namevalue行打印次指标确定性每次运行同一工作负载禁止实时网络、禁止依赖当前时间种子固定特别注意不允许把编译通过当作基准。Harness 必须真正执行工作负载并输出METRIC行。2.2 指标行的解析规则源码级为什么是METRIC namevalue这种格式因为 helpers.ts 用正则逐行解析const regex new RegExp(^METRIC\\s([\\w.µ-])(\\S)\\s*$, gm);即每行必须是METRIC 空白 名称数值名称允许\w、.、µ、-数值会被Number()强转且必须有限Number.isFinite。被解析到的指标会写入运行时runtime与数据库供log_experiment直接使用。同理ASI keyvalue行会被 parseAsiLines 解析成结构化元数据支持布尔、数字、JSON 对象/数组等值类型。run_experiment会固定执行bash autoresearch.sh命令不可改常量DEFAULT_HARNESS_COMMAND定义于 init-experiment.ts自动捕获输出并把METRIC/ASI行解析回给 Agent。2.3 Phase 1 的标准步骤勘察目标读源码明确要测什么决定工作负载写基准写autoresearch.sh及辅助文件benchmark 二进制、fixtures、Cargo.toml、package.json等均可改它们都属于基准基线的一部分验证通过普通bash工具执行bash autoresearch.sh确认退出码为 0 且至少输出一行METRIC不满足就继续迭代初始化调用init_experiment传入 goal、主指标名必须与METRIC行中的名字一致和 scope框架会把当前工作树快照为基线baseline commit并自动提交 harness 改动到autoresearch/*分支然后进入 Phase 2。三、四个实验工具参数、语义与底层实现四个工具都在 tools/ 目录下实现且都通过 types.ts 定义的类型与状态机联动。核心类型包括ExperimentStatus keep | discard | crash | checks_failed、MetricDirection lower | higher以及贯穿全流程的ExperimentResult、ExperimentState。3.1 init_experiment打开或重配会话参数 Schemainit-experiment.ts参数类型默认值说明namestring—实验名必填goal?string—会话目标primary_metricstring—主指标名须与METRIC行一致metric_unit?string—单位如ms、µs、mbdirection?lower \| higherlower哪个方向更好默认越小越好secondary_metrics?string[]—次指标名列表scope_paths?string[]—预期会被改动的路径off_limits?string[]—禁止改动的路径constraints?string[]—自由格式约束max_iterations?number—每个 segment 的软迭代上限new_segment?booleanfalse在既有会话中开启全新 segment新基线首次调用Phase 1 → Phase 2 转换要求./autoresearch.sh已存在若在autoresearch/*分支上Pending 的 harness 改动会被自动提交为autoresearch: harness setup提交init-experiment.ts。注意工具描述中的警告如果不在专用autoresearch/*分支上discard只能回滚本次运行改动的文件无法整体重置到基线。3.2 run_experiment运行基准并解析指标参数只有一个timeout_seconds?默认600 秒。底层行为run-experiment.ts固定执行bash autoresearch.sh输出实时写入runs/0001/benchmark.log之类的按运行号4 位补零分目录的日志文件运行时按 1 秒间隔向前端推送进度快照结束后解析METRIC/ASI行、记录退出码与是否超时killed判定passed exitCode 0 !killed输出默认只回传截断后的尾部EXPERIMENT_MAX_LINES 10行、EXPERIMENT_MAX_BYTES 4 * 1024字节见 helpers.ts完整日志保留在磁盘供查阅。每次 run 前后都会通过git status --porcelain记录工作树脏路径preRunDirtyPaths这是后续 scope 偏差判定的基础。3.3 log_experiment诚实记录结果驱动 keep/discard/crash参数 Schemalog-experiment.ts参数类型说明metricnumber主指标值必填statuskeep\|discard\|crash\|checks_failed运行结果必填descriptionstring简短的运行描述必填metrics?{[name]: number}次指标覆盖/补充asi?{[key]: unknown}自由格式结构化元数据commit?string覆盖记录的提交哈希justification?string保留存在偏差的运行时的理由必填否则记为未合理化的偏差flag_runs?[{run_id, reason}]标记之前的运行可疑排除出基线与最佳值计算四种状态的决策语义与副作用keep指标改善 →自动 commit提交信息为描述 Result 的 JSON见 log-experiment.tsdiscard指标回退或持平 →自动回滚工作树在autoresearch/*分支上执行git reset --hard HEADgit clean只回滚本次迭代的未提交改动绝不回滚之前的 keep 提交crash运行失败checks_failed校验失败你自行定义校验内容通过普通bash工具执行。若解析到的主指标与传入的metric不一致会警告两者都已存储log-experiment.ts鼓励 Agent 以实测数据为准。3.4 update_notes维护持久化实验手册参数只有两个body整体替换 notes 内容与append_idea在## Ideas节下追加一条待办想法。notes 在每一轮迭代都会被注入系统提示词update-notes.ts用于沉淀目标、假设、回滚原因、下一步动作等长期记忆。四、运行协议从基线到收敛的七步循环prompt.md 定义的操作协议可归纳为七步先理解再动手读源码、定位瓶颈、确认前置条件与基准输入随时更新目标/范围/约束通过再次init_experiment不 bump segment或update_notes刻意改变autoresearch.sh时才 bump segment先建立基线baseline之后每次对比都以它为准迭代改代码 →run_experiment→ 用log_experiment诚实记录每轮迭代只做一个连贯实验让主指标做决策keep改善/discard回退或持平/crash失败/checks_failed校验失败善用 ASI它是不透明通道只管存入有价值的经验hypothesis、rollback_reason、next_action_hint等低置信度时复跑对看似有改进的改动先复跑确认log_experiment会为每次 keep 报告置信度分数以观测到的噪声底数为倍数。提示词模板中的上下文变量会在每轮自动注入goal、working_dir、branch、baseline_commit、notes、current_segment、当前 segment 运行数、基线/最佳指标、最近 3 次运行含状态、指标、ASI 摘要、scope 偏差与是否已 justify、未合理化偏差列表以及**待处理运行pending run**提醒——若上一次运行未记录必须先完成log_experiment再开始新基准。4.1 置信度用 MAD 衡量改进是否超出噪声置信度由 state.ts 的computeConfidence计算取当前 segment 内未被 flag 的指标值集合计算中位数median与**中位数绝对偏差MAD**作为噪声底数然后用|best_kept - baseline| / MAD得到噪声底数的倍数。只有至少 3 个有效运行才会给出置信度。展示时log-experiment.ts按倍数分级≥ 2为likely real很可能真实、≥ 1为marginal边缘、否则为within noise在噪声范围内。4.2 scope 偏差与 flag_runs实验的问责机制运行结束后log_experiment会比较本次运行实际改动的文件与会话的scope_paths/off_limitslog-experiment.ts越界文件记为scope_deviations带偏差保留运行必须传justification否则下一次迭代的提示词会把它列为未合理化偏差要求处理若发现之前的运行是奖励投机reward-hacked或出错可在下一次log_experiment传flag_runs: [{run_id, reason}]被标记的运行会从基线与最佳指标计算中排除prompt.md 与 state.ts 的基线/最佳值筛选都带!flagged过滤。五、会话控制/autoresearch 命令、快捷键与自动续跑5.1 /autoresearch 命令/autoresearch空参数在已开启时关闭模式/autoresearch off退出模式并卸载四个实验工具/autoresearch clear [--keep-tree] [--reset-tree]关闭会话默认在autoresearch/*分支上会把工作树硬重置回基线提交git reset --hard baseline_commitgit clean--keep-tree可保留工作树--reset-tree强制重置随后清理遗留工件index.ts/autoresearch 目标描述切换到或新建专用 git 分支autoresearch/*并开启模式若该分支已有会话则恢复会话index.ts。5.2 快捷键与自动续跑ctrlx切换实验面板展开/收起无结果时提示尚无结果ctrlshiftx显示实验面板浮层index.ts自动续跑agent_end事件处理index.ts会在本轮 agent 结束且没有等待中的用户消息时若存在未记录pending的运行自动注入恢复消息resume-message.md继续循环——即先补完log_experiment再从最有希望的未完成方向继续迭代。5.3 分支切换的安全边界before_agent_start会在每轮开始前重新检查 git 分支一旦用户手动切离autoresearch/*分支本轮将静默关闭 autoresearch面板隐藏、工具卸载、不注入提示词但会话数据保留切回分支即恢复index.ts。六、守卫规则实验的正确性底线prompt.md 结尾的 Guardrails 是整套机制的价值观约束绝不游戏基准NEVER game the benchmark——不许为刷指标而绕过真实负载绝不过拟合合成输入NEVER overfit to synthetic inputs——若真实工作负载更宽泛不能只对测试数据优化必须保持正确性MUST preserve correctness——任何优化不得破坏功能正确性运行中的消息处理如果运行进行中用户发来新消息先完成当前运行与记录循环下一轮再处理新输入。对应地resume-message.md 在续跑提示中再次强调保持正确性不要游戏基准。七、落地实践建议基准可复现是前提写autoresearch.sh时固定随机种子、避免网络与时间依赖否则discard判定会被噪声淹没一次只改一个变量协议要求每轮一个连贯实验配合 ASI 记录hypothesis与rollback_reason让实验历史可回溯低置信度改进先复跑改进幅度低于 1× 噪声底数时不要急于 keep善用 flag_runs 纠偏发现早期运行可疑时及时标记防止污染基线统计深入验证可参考测试仓库中 autoresearch-tools.test.ts、autoresearch-state.test.ts、autoresearch-before-agent-start.test.ts、autoresearch-git.test.ts 覆盖了工具行为、状态计算与提示词注入等核心逻辑是理解这套机制边界的最佳入口。结语Autoresearch Mode 的独特价值在于它把实验方法论编码进了 Agent 的系统提示词与工具约束里——固定的入口、强制的指标输出协议、诚实记录的决策规则、噪声感知的置信度、以及 git 层面的 keep/discard 回滚保障。通过 prompt.md、prompt-setup.md 两套提示词与 tools/ 四个工具的配合oh-my-pi 让 Agent 在无人值守时也能持续、可控、可审计地逼近目标指标同时用 scope 偏差与 flag_runs 机制把越界行为显式暴露给用户裁决。【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表