Browse this library

Chinese source article

3.1 · 脚手架改进

把提示、程序、架构、技能、记忆与 harness 放进同一条 L2 路线,比较它们改变执行分布的方式。

View original Markdown ↗

模型参数不变,系统能力仍能发生很大变化。提示词决定任务怎样表达,程序决定模型在什么节点被调用,技能封装可复用流程,记忆保存过去的经验,harness 则把模型、工具、上下文和运行时连成一台机器。这些内容都落在 Σ\Sigma,也就是 L2 的脚手架层。

L2 的边界比文件扩展名更重要。修改一段自然语言提示可能改变整个执行策略;修改几行调度代码也可能只是修复日志格式。判断深度要看改动是否跨任务保留,以及它是否改变了后续任务的行动分布。设模型参数固定为 θ\theta,脚手架根据任务和历史状态构造轨迹:

τ∼pθ,Σ(τ∣x,h).\tau\sim p_{\theta,\Sigma}(\tau\mid x,h).

L2 更新把 Σk\Sigma_k 变成 Σk+1\Sigma_{k+1},从而改变可调用工具、上下文装配、控制流或经验检索。只在当前任务里追加一条临时反馈,仍是 L0;把反馈总结成以后会加载的技能或记忆,才进入 L2。

1. 从文本提示到可执行结构

提示优化是最轻的 L2 baseline。搜索器提出候选提示,在开发集上评估后保留得分最高的一版。它容易部署,也最容易出现选择偏差:同一验证集被反复查看后,提示会逐渐贴合题目措辞。若搜索器本身不变,这仍只是外部过程更新提示,并没有进入 L3。

把提示写成程序后,候选空间从词句扩展到分支、循环、角色分工和工具调用。程序化表示带来两个好处。第一,局部改动能被精确定位,例如只替换检索查询生成器,不必重写整段指令。第二,行为可以由执行轨迹检查,测试不仅看最终答案,也能看是否调用了错误工具、是否遗漏必要步骤。代价是结构变大后更容易在开发任务上搜索出脆弱的工作流,调用次数和延迟也必须进入目标函数。

架构级变化再往上一层:单 Agent 变成规划者—执行者—评审者,多轮串行变成并行候选,固定工具链变成按状态路由。此时比较不能只报告准确率,还要固定基础模型、采样预算和工具权限。否则「架构更好」可能只是多调用了几倍模型,或者获得了 baseline 没有的外部信息。

2. 技能、记忆与 harness 的分工

技能保存的是可复用做法,通常包含触发条件、操作步骤、输入输出约定和失败处理。记忆保存的是过去发生过什么,可以是事件、事实、经验或压缩后的状态。harness 管理的是运行规则:何时装载哪些内容、工具怎样注册、上下文超预算时怎样裁剪、错误怎样回传、任务怎样恢复。三者都会出现在上下文里,却不能混成一个文件夹。

一次成功轨迹若直接存进记忆,下次可以被检索到;若从多次轨迹中提炼出稳定操作,才更像技能;若系统改变了检索顺序、工具调度或上下文生命周期,则是 harness 改动。分层的意义在于不同对象需要不同验收。记忆要防止错误事实和过期经验扩散;技能要测试适用条件和迁移能力;harness 要检查整条执行路径、资源上限与故障恢复。

自生成内容尤其需要晋升门槛。系统可以先把候选写入隔离区,在独立任务上复测,通过后再进入默认装载路径。若每次成功都立即写成长久记忆,偶然策略会污染检索;若每条轨迹都自动变成技能,技能库很快充满互相冲突的说明;若 Agent 能直接改 harness 而没有回滚和沙箱,一次错误就可能破坏后续全部评测。

3. L2 的证据口径

脚手架方法常把最终任务分数当作唯一证据,但同一分数可能由不同机制产生。更好的比较至少分四层:改动是否被正确加载;它改变了哪些轨迹统计;轨迹变化是否带来任务收益;收益是否能迁移到未参与选择的任务。对于技能和记忆,还要做命中与未命中的配对比较,确认提升来自内容本身,而不是更长上下文或更多调用。

资源也要配对。若新 harness 多生成四条候选并增加一个评审模型,应同时报告 token、模型调用、工具调用、墙钟时间与失败重试。可以比较等质量下的成本,也可以比较等预算下的质量,不能只选对新系统有利的一边。对于会持续写入的系统,短期 A/B 还不够,还要观察库规模增长后检索噪声、冲突和延迟怎样变化。

L2 与 L3 的分界落在「谁在改」。固定搜索器找到更好的提示、技能或工作流,更新对象仍是 Σ\Sigma;若系统从历史改进结果中改变了提出、组合或筛选脚手架候选的策略,持久变化进入 UU,才算 L3。这个边界可以避免把所有自动提示优化都叫作 RSI,同时也保留了脚手架改进本身的价值。

脚手架还存在组合效应。单独增加记忆可能无效,因为检索器取不回来;单独改检索器也可能无效,因为库里没有可复用经验;两者一起改变后才出现收益。逐项消融适合定位独立贡献,却会漏掉这种交互。除了移除一个组件,还应做交换实验:新记忆配旧检索、新检索配旧记忆、新技能配旧 harness。四格对照能看出收益来自内容、装配方式还是两者匹配。

版本边界也要明确。技能和提示通常是文本,改动容易审查;记忆库是不断增长的数据,某次行为可能由很久以前写入的一条记录触发;harness 又会决定哪些版本被装载。一次运行应能还原模型、提示、技能集合、记忆快照、工具定义和调度器的完整组合。否则出现回归时,即便 Git 里的代码没变,也找不到真正的执行版本。

当脚手架变化很频繁时,离线均值会掩盖尾部风险。检索错误可能只在少数相似任务上触发,工具路由错误可能只在权限边界出现。除了总体成功率,还要统计无关记忆注入、冲突技能同时命中、工具参数修复次数、上下文截断和恢复失败。它们是机制层信号,能比最终任务分更早暴露 L2 更新正在积累债务。

还有一种常见误判来自基础模型升级。新模型更会遵守长提示、调用工具,旧 harness 的分数随之提高,并不表示脚手架本身完成了自我改进。比较脚手架版本时固定模型,比较模型版本时固定脚手架,再补一组最佳组合,才能看出收益来自哪一侧,以及两者是否存在匹配效应。

提示、程序与架构 处理 L2 的内层结构,比较文本候选、符号规则、程序搜索和多 Agent 架构。技能、记忆与 Harness 处理跨任务状态怎样被写入、检索、晋升和回滚。前者回答执行过程怎样被重新编排,后者回答新经验怎样进入下一次执行。