Agent 工程自主探索持久记忆

RSIAgent
源码与论文技术学习文档

以论文证据为主线,对照源码解释方法、实现、实验结果与可复现边界。

论文 v1 · 源码固定提交 · 证据审校最终版
阅读原则:论文主张 ≠ 源码实现 ≠ 作者案例 ≠ 工程迁移建议

论文证据方法与实验只陈述论文正文、表格、附录直接支持的内容。
源码证据运行时实现用于解释论文方法如何落地;源码细节不自动等于论文实验结论。
作者案例个案分析用于理解机制与失败模式,不把单个案例升级成总体因果结论。
工程建议迁移与改进基于论文和源码总结,但不是论文已经验证的结果。

01论文定义与核心机制

论文直接支持的核心结论:RSIAgent 是一个 training-free 多智能体框架,通过 Curriculum、Actor、Verifier 的自主探索与验证构造可复用记忆;模型参数在探索和后续执行中保持固定,采用 broad-then-deep 探索,并在下游任务执行时冻结记忆复用。

论文关注新数字环境中的适应:预训练模型可能缺少某个软件环境的具体操作规律、隐藏约束与失败模式。RSIAgent 不通过更新模型权重解决,而是让 Agent 在环境中获得经验、验证结果并把环境特定知识保存在持久记忆中。

概念在这个项目里的具体含义
Recursive Self-improvement新记忆影响下一轮任务选择与执行;新执行产生证据,继续修订记忆。
Training-free没有模型权重训练环节;仍需要模型调用、VM、探索时间和存储。
Multi-agentActor、Verifier、Curriculum 有独立上下文与权限;角色可以使用同一模型,模型相同不代表共享会话。
Code-as-policy一次动作可是一段 Python 或 Bash 程序,也支持视觉观察、条件启用的提问与完成声明。
Causal knowledge带适用条件的操作规律、约束和失败解释;当前核心实现以文件和提示词组织,没有强制的因果图数据结构。
Frozen memory评估使用固定的宿主机记忆快照,关闭学习和回写,并检查文件树哈希。

用两个表达式区分执行与学习

aₜ ∼ πθ( · | q, hₜ, M )

这是论文动作策略的写法:q 是任务,hₜ 是本次交互历史,M 是跨任务保留的记忆,θ 是固定的模型参数。改变 M,会改变模型在相同任务下可利用的上下文。

Mₖ₊₁ = UActor(Mₖ, τₖ, vₖ)

第二式是便于理解源码的抽象,并非论文新增的优化公式:原 Actor 依据轨迹 τₖ 和有效验证结果 vₖ 修订记忆;宿主在完整学习边界接纳这一版本。这里没有梯度更新。

对已有 Agent 开发经验的人,最值得学习的部分是经验提交边界、独立验证、状态机与可追溯运行记录。把模型换强只是其中一个变量;这个仓库展示了如何组织模型外部的运行系统。

依据:README.md · docs/ARCHITECTURE.md · explore/charter.py · 论文第 3 页

02三个角色与四类状态

论文证据三角色职责来自论文方法;Host harness、会话生命周期与部分权限边界属于源码实现层面的补充。
角色可以看到什么负责什么边界
Actor 执行者任务、环境观察、自己的执行上下文、记忆生成动作;经验证后提炼并修订自己的经验执行期随手修改的文件不直接成为正式记忆
Verifier 验证者任务要求、候选产物、可观察的环境证据调查并提交 PASS / FAIL;目标路径支持 UNVERIFIED隐藏 Actor 私有推理、记忆和工作材料;不代写学习经验
Curriculum 课程规划者目标、已完成练习结果、学习诊断、可用记忆副本决定练什么、继续练习还是返回目标不裁定候选正确性,不提交正式记忆
Host harness 宿主编排器配置、角色产物、哈希、环境与运行记录调度、隔离、提交、恢复与最终评分正式评分不进入探索和学习角色的上下文

不要把所有东西都塞进一个对话历史

状态生命周期为什么分开
Actor interaction history一次执行及随后同一 Actor 的学习阶段保留产生经验的上下文;新的目标尝试重新创建 Actor。
VerifierSession同一次目标尝试中的多轮候选检查能跟踪修订,但每次检查仍要获取新证据;不同项目不共享这一会话。
Curriculum context同一探索 lineage / 任务演进链记住练习方向与收益,减少重复选题。
Canonical memory跨尝试、跨阶段持久化只有完整学习更新可被提交;最终生成冻结版本。

一个具体收益:验证者不需要相信执行者“我已经修好了”的描述,而是打开实际文件、读取持久状态或检查画面。上下文隔离降低同一个错误解释在多个角色之间直接传递的机会,但模型仍可能产生相似错误。

依据:core/verifier.py · core/self_evolving_loop.py · explore/unified_evolution.py · 论文第 20 页

03从入口到冻结评估的完整流程

论文证据论文定义 BRS、DRS 两个探索阶段,并在之后冻结记忆用于测试时复用;“Phase 1/2/3”是公开运行时对论文阶段的实现映射。

论文有两个探索阶段;代码把最终记忆复用也单独编排,所以运行时是三个 Phase。官方基线已经包含 Actor–Verifier 机制,比较“有无 RSI”时不能把基线误认为只调用一次模型。

流程示意。BRS 自身可以继续下一波;DRS 的练习循环返回目标尝试。图中不把“预算用尽”“停滞”画成成功,它们需要分别记录。

源码入口作用
run_osworld.build_plan()为 108 个任务生成 baseline / RSI 批处理计划;RSI 各任务拥有自己的协议与目标方向。
load_protocol()验证阶段配置、预算、任务集合、研究设计和停止策略。
execute_phase1()启动广度探索,记录阶段产物和记忆快照。
execute_phase2()按开发任务推进深度探索,校验继承记忆和终止状态。
execute_phase3()复制冻结记忆,启动最终任务执行,检查回写边界。

04BRS:并行工作,顺序学习

源码证据论文支持“广度探索 + 记忆更新”的方法方向;本节关于同波快照、并行执行、按序 consolidation 的具体行为来自公开运行时实现。

evolve_parallel_phase1() 是最值得逐行阅读的模块之一。Curriculum 一次发布一波项目和输入材料;宿主保存当前记忆快照,所有分支从这一版本出发。每个分支在自己的环境中执行并取得有效验证结果。

与源码对应的简化伪代码
snapshot = copy(canonical_memory)
projects = curriculum.author_wave(target, snapshot, previous_outcomes)
branches = parallel_execute_and_verify(projects, snapshot)

require_all_branches_have_grounded_verdicts(branches)
for branch in curriculum_authored_order(branches):
    restore_latest_memory_to(branch.environment)
    resume_same_actor_context(branch)
    distill(branch.verdict, branch.evidence)
    reconcile_entire_memory()
    validate_and_commit_memory()

# 只有整波结束,才判断是否继续下一波或到达预算边界。

为什么不能直接合并四个目录?

假设 A 学到了新的导出命令,B 发现旧命令在某版本失效。若简单合并文件,同名文件可能覆盖,冲突规则可能同时存在。当前实现让 B 的原 Actor 读取 A 已提交的新记忆,再依据 B 的执行证据修订整个记忆库。合并的对象是知识含义,不只是文件差异。

工程取舍:并行阶段降低等待时间;串行学习阶段保留确定的提交顺序。最终内容仍受顺序和模型判断影响,不保证不同提交顺序得出相同记忆。
细节源码行为及含义
同波不可相互借用经验每个分支拿到同一 pre-wave memory;兄弟分支的结果不会提前改变它的执行。
有效 FAIL 也能学习有效失败提供边界条件;基础设施异常、未完成或隔离分支不能冒充有效结果。
异常分支阻挡整波提交完成所有 future 后检查错误;存在分支错误时,不因其他分支先完成而提交部分波次。
8 个项目是名义边界预算只在完整波次之间检查,因此实际项目数可以超过 8;不是固定两波、每波必须四个。
parallelism=4限制同时运行的分支数;课程发布的波次宽度可以不同。
ALE 释放空闲 VMpark_verified_branches=True 可先保存候选与 Actor 上下文,学习提交时再恢复候选。

依据:explore/phase1_wave.py · explore/phase1_wave.py · benchmarks/ale/learning.py

05DRS:把失败和脆弱成功变成练习

源码证据论文支持针对困难案例、隐藏约束和边界条件的深度探索;PASS/FAIL/UNVERIFIED/STALLED 的精确状态转移来自运行时与测试契约。

默认 DRS 先实际尝试目标。Actor 得到明确的 PASS 或 FAIL 后,在原上下文中学习;Curriculum 再根据结果、学习诊断和当前记忆选择后续项目。练习完成后必须重新尝试目标,先前的 PASS 不能证明新记忆下的目标仍然成功。

输入或决策接下来发生什么
PASS + curriculum_review完成学习,再询问 Curriculum 是否还有值得做的练习;没有新练习时可结束。
PASS + verifier_pass完成学习后停止这一 DRS 生命周期。
FAIL同一 Actor 学习失败证据,Curriculum 选择定向练习,然后重置环境并创建新 Actor。
UNVERIFIED未建立成功或失败证据;不会写成学习样本,外层协议拒绝用它推进阶段。
Curriculum 选择了新练习逐个练习、验证和提交记忆;完成后需要新的目标尝试。
STALLED按状态进行最后一次新目标尝试或保留已经有效的 PASS;记录具体终止原因,不能统一标成“收敛成功”。
网络、VM、存储异常按基础设施异常处理,保留可恢复证据,不伪造任务 FAIL。

交互示例:相同的 PASS,会走向不同的后续状态

    依据状态机编写的教学演示,未调用模型或虚拟机。

    run_self_evolving_loop() 通过 Hooks 将环境、执行、验证、学习和探索拆开。它不接收官方评估分数。要理解实际行为,应同时读调用方的 Hook 配置:通用数据类中部分布尔值默认为 false,而 Phase 2 入口会按照协议开启 PASS 学习与课程判断。

    依据:core/self_evolving_loop.py · benchmarks/osworld/phase2.py · tests/test_self_evolving_loop.py · tests/test_phase2_stop_policy.py

    06记忆的文件协议与上下文管理

    源码证据论文主张持久记忆保存可复用环境知识;文件目录、dict[str, bytes]、~/.memory/、提交与哈希协议属于当前实现。

    持久化对象到底是什么?

    宿主侧核心对象是 dict[str, bytes],即相对路径到文件字节的映射;客体侧放在 ~/.memory/。文件可以是说明、操作手册、脚本或失败记录。没有强制 Schema、索引文件名、文件数量或记忆长度。

    机制落实方式学习价值
    记忆传入push_memory() 将目录打包,经分块 base64 传入客体学习状态与 VM 生命周期解耦。
    自主检索memory_preamble() 只暴露完整文件名和大小清单,正文由 Actor 自己读取不用把全量记忆塞入每次提示词;当前路径没有强制 embedding / top-k 检索器。
    重新检索时机验证反馈、上下文压缩、恢复中断、动作停滞时给出提醒提醒不选文件、不排序、不替 Actor 总结内容。
    经验提炼原 Actor 结合终局验证报告判断哪些程序、条件和教训值得保留保留经验的来源上下文。
    整体协调检查全库中的矛盾、过期假设和过度推广,允许修订、删除或保持不变防止新结论只追加、旧错误一直存活。
    学习诊断另写 learning_diagnosis.md 交给 Curriculum跨角色传递结论与不确定性,不传递 Actor 的私有推理全文。
    正式提交边界检查、journal 快照、原子安装、文件树哈希可追踪记忆版本及所属运行;机制不等于保证内容正确。

    一次完整学习不是“总结聊天记录”

    数据形态与提交步骤示意
    # 教学抽象:示例文件结构由工程设计者选择,仓库不强制。
    {
      "playbooks/video_export.md": b"...",
      "failures/unsupported_filter.md": b"...",
      "scripts/check_render.py": b"..."
    }
    
    # 学习边界
    restore(canonical_memory)       # 撤销工作期随手改动
    resume(original_actor_history)
    distill(verdict, verifier_report)
    reconcile_all_claim_files()
    write_learning_diagnosis()      # 适用的 DRS 学习路径
    candidate = pull_memory()
    validate_boundary(candidate)
    journal(candidate)
    atomic_install(candidate)

    “因果知识”的合理读法是:在已观察的条件 C 下,动作 A 导致了结果 O,并保留反例与不确定性。验证者证明产物是否符合要求,并不会自动证明失败原因。因果解释仍由 Actor 依据轨迹判断,需要对比实验才能增强可信度。

    可以迁移到上下文工程的原则:短期执行历史、长期记忆、对外学习诊断、宿主运行日志分别存储;只有被明确接纳的学习更新进入下一轮。目录形式很简单,写入纪律才是核心。

    依据:explore/charter.py · explore/charter.py · explore/target_learning.py · explore/practice_loop.py · core/loop.py · explore/memory_hash.py

    07Actor 如何把模型输出变成程序执行

    源码证据论文描述 Actor 通过程序和观察与环境交互;JSON 动作协议、program/look/ask/done 等为当前代码实现。

    core/actor.py 定义动作结构与解析;core/loop.py 驱动模型调用、动作执行、观察返回和验证。模型输出的是回复正文中的 JSON,运行时解析后分派;原生 API function call 不是这条动作通道的默认协议。

    动作用途执行后返回
    program执行完整 Python / Bash 程序;可读文件、操作应用、调用脚本程序输出、退出状态、执行元数据。
    look观察截图或图像并提出具体视觉问题视觉模型或原生视觉路径提供观察。
    ask配置了用户通道时获取缺失信息用户或基准用户模拟器的回复;不是总能使用。
    doneActor 提交完成声明与检查触发后续完成门禁 / 独立验证,不等于官方任务满分。
    三条独立动作示例;每次回复只提交一条
    {"program":{"lang":"bash","code":"ls -lah ~/.memory"}}
    
    {"look":{"path":"/tmp/candidate.png","question":"连接线是否接到正确的图形边缘?"}}
    
    {"done":{"checks":[{"desc":"产物存在且可读","probe":"test -s /tmp/result.txt"}]}}

    默认配置中 Actor 使用 GLM-5.3,视觉读取由 Kimi-K3 协助,Verifier 和 Curriculum 也使用 Kimi-K3 的独立上下文。因此把结果归因于“某个单模型提升多少”会遗漏视觉与验证角色的贡献。配置还允许停滞触发角色交换,分析实验时需要把这些运行设置纳入记录。

    工程判断:程序动作适合复杂桌面软件,因为一次程序能操作结构化文件、检查应用状态,再用实际应用验证画面。但应用名称、可编辑格式、导出产物和操作约束仍是任务的一部分;程序成功退出只证明程序运行结束。

    依据:core/actor.py · core/loop.py · core/loop.py · config/osworld/baseline.yaml · config/roles/actor.yaml

    08独立验证为何需要环境隔离

    论文证据独立 Verifier 用真实执行证据检查结果是论文核心设计;namespace/QEMU rollback 等属于实现层面的隔离机制。

    如果验证者通过测试意外修改了文件,再去检查这个文件,就可能把自己修好的结果当成 Actor 的成果。仓库用环境机制保护候选,并给验证者独立的会话与可持续的私有工作区。

    执行模式实现方式适用性与限制
    effect_isolatedLinux namespaces 隔离进程、网络、IPC;候选文件系统只读;私有 scratch 可写适合文件分析与独立测试,但访问 Actor 的实时服务和 GUI 受限。
    rollback_mirror保存完整 QEMU 检查点,在候选现场检查;结束后恢复检查点默认 OSWorld 配置采用此模式,可检查 GUI、进程与本地服务;VM 外远程服务的修改无法随 QEMU 一起回滚。

    AgenticVerifierExecutor 负责执行边界;VerifierSession 保存本次目标尝试的验证上下文及 scratch。验证报告直接发布给宿主,不先写入客体文件让 Actor 任意替换。Actor 的私有路径如 /home/user/.memory 与工作目录按配置隐藏。

    判断必须保留三种含义

    Verifier 本身仍是模型;隔离能保护证据来源与产物,不能保证它正确理解需求。这也是论文报告“本地验证通过,但正式评分仍不完整”的原因之一。

    依据:core/verifier_runtime.py · core/verifier_runtime.py · core/verifier.py · env/qemu_rollback.py · config/osworld/baseline.yaml · 论文第 21 页

    09冻结、评分与任务隔离的真实边界

    源码补充论文证明的是其报告协议下的结果;target_conditioned_adaptation、held_out_generalization、memory lock 与 silent audit 是公开 runner 对研究边界的工程化约束,不能反向解释成论文所有实验都采用同一模式。

    默认研究设计是针对目标的适应

    公开 runner 提供的示例协议包含 target_conditioned_adaptation 等研究设计选项;在这种配置里,开发与评估任务可以围绕同一目标展开。这个事实用于理解源码实验控制,不应直接扩展成“论文所有结果都属于 held-out 泛化”或相反结论。论文结果应按各自附录与 reporting scope 阅读。

    研究模式源码约束能回答的问题
    target_conditioned_adaptation开发与评估任务集合必须相同知道目标并允许练习后,冻结的经验能否帮助重新完成目标?
    held_out_generalization开发与评估任务集合不得重叠;方向文件不得直接命名 held-out 任务在任务集合分离的协议下,经验能否迁移?名称检查本身不等于完全语义去泄漏。

    冻结首先保护宿主正式记忆

    Phase 3 写入 memory_lock.json,标注关闭回写与课程。每次任务后检查宿主记忆树哈希。记忆被复制到 VM 中,Actor 的客体本地工作改动不回写。不能仅凭“frozen”推断所有客体记忆文件都被操作系统挂成只读。

    两个容易忽视的源码细节

    记忆传入失败存在降级继续路径。

    benchmarks/osworld/task.py 中,push_memory() 返回 false 时只记录 memory-OFF 警告并继续执行。memory_record 在此前基于宿主快照建立,Phase 3 后续检查也主要验证宿主哈希与记录。静态代码显示,这条路径可能让“配置了记忆”与“客体成功收到记忆”不一致。没有实际触发这个故障,不能据此认定历史实验发生过。

    复现时建议把传入失败改为阻断运行,并记录客体接收清单与哈希;修改后的实验要使用新版本与新运行名。

    词面检测不是语义泄漏证明。

    silent_audit() 基于 8 个英文词的 shingle 与宿主题目语料比对,并允许已授权目标的例外。它能发现部分直接复制,但无法覆盖改写、结构化编码或所有语义泄漏。

    依据:config/osworld/rsi.example.json · benchmarks/osworld/pipeline.py · benchmarks/osworld/pipeline.py · benchmarks/osworld/task.py · explore/commit.py

    10论文实验结果与报告范围

    论文证据本节只按作者公开的 manuscript reporting scope 解读结果;这些数字是作者报告的聚合结果,不是本次重新跑基准得到的结果。

    下表为作者论文报告的聚合结果。Partial 是任务部分得分的均值,Binary / Full credit 是获得满分的任务比例;差值使用百分点。这里展示的是作者 manuscript 中的统计口径,而不是本次 review 重新执行得到的独立复现实验。

    基准 / 指标同框架,无 RSI有 RSI差值
    OSWorld · Partial71.97%78.98%+7.01
    OSWorld · Binary37.80%42.68%+4.88
    ALE · Partial83.75%84.82%+1.07
    ALE · Binary49.25%50.75%+1.50
    关键限定:作者公开说明 RSI 列并非所有任务都重新做了严格匹配的 RSI 评估;OSWorld 与 ALE 均包含保留基线项,且 selected runs、checkpoints、budgets、evaluation scopes 并未完全匹配。因此这些数字可以描述作者报告的 aggregate improvement,但不能单独当作“严格同预算、同协议、多次重复”的平均因果效应。
    报告范围需要保留的限定
    OSWorld 的分母论文汇总 82 个离线任务;公开批处理入口列出 108 个任务,不能把二者混用。
    OSWorld RSI 列41 个任务使用已报告 RSI 分数,另 41 个保留原基线;包括回退与记录的重试。T082 的设置失败在历史聚合中记为零。
    ALE RSI 列67 个任务中 19 个使用 RSI 列结果、48 个沿用基线;包括修正评分、带公开标签迁移限定的 ECG 和无 BRS 的 Tax Form 变体。
    外部模型比较多数外部成绩取自技术报告或榜单,框架、预算未统一;不能把跨系统比较写成同配置对照实验。
    “超过 GPT-6”只对应论文表中指定指标与范围;ALE Binary 50.75% 低于该表 GPT-6 Astra 的 52.24%。
    四任务阶段消融挑选了曾出现改善的任务;Full RSI 使用两次历史评估均值,deep-only 最多两个课程练习且课程不直接读取记忆,与当前默认协议不同。

    四任务报告中 Full RSI、仅 BRS、仅 DRS 的平均部分得分分别为 74.54%、65.52%、56.50%。它支持继续研究“先广后深”的组合,但小样本选择、重复次数和预算不对称限制了结论强度。

    论文另有 40 个游戏开发任务实验。当前公开仓库的主要入口是 OSWorld 与 ALE;在已检查的当前树中没有相应游戏实验入口,因此不能声称一条现成命令能复现论文全部实验。

    依据:论文表 1 · 附录 C.3–C.4 · 附录 C.5 与 D · docs/PAPER.md · README.md

    11用两个案例理解经验如何影响结果

    作者案例案例用于展示经验如何改变后续操作与结果;它们是个案证据,不单独证明总体平均增益或唯一因果机制。

    T049:失败纠正了需求解释

    演示文稿修复任务要求保留元素尺寸和外观。第一次 DRS 误把它理解成“盒子位置也不能移动”,只修箭头,结果布局仍错误。失败经验促使后续练习区分“保持尺寸”和“恢复位置”,并学习怎样借助完整元素或参考图确定坐标。

    可观察项无记忆运行冻结记忆运行
    任务部分得分0.400.80
    Slide 3 贡献0.000.40
    Slide 2 贡献0.000.00
    Actor 迭代数3519

    案例可支持的解释:记忆纠正的是动作前的解释规则,随后才影响坐标计算。最终内部 PASS 仍未带来满分,说明验证覆盖仍可能不完整。这里的迭代减少也不能忽略前期探索成本。

    T044:相似视觉效果,不代表相同应用语义

    视频案例中,两次输出都去除了顶部水印并保留画面比例。无记忆运行使用通用裁切/补边滤镜;记忆运行采用 Shotcut 原生裁切表示。正式评分同时读取导出视频和工程结构,所以仅看画面不足以解释得分。

    可观察项无记忆运行冻结记忆运行
    任务部分得分0.401.00
    裁切顶部像素10076
    工程滤镜通用 crop / pad原生 crop,Center 关闭
    Actor 迭代数2642

    案例可支持的解释:可复用经验应涵盖指定软件的原生操作、工程格式和验证方法;这次改进增加了完成质量,并没有减少执行迭代。不能把记忆作用统一描述成“更快”。

    案例阅读中的两个额外限定

    T065 的得分变化还伴随当前日期澄清,不宜只归因于记忆。论文的若干案例在 DRS 中已经练过目标,说明的是已知目标的经验复用。案例中的错误分析与元件得分来自作者保存的运行产物,本次没有重新评分这些产物。

    依据:T049:附录 E.3 · T049:表 A7 · T044:附录 E.5 · T065 限定

    12按调用关系阅读源码

    源码证据这是为了理解公开实现而整理的阅读顺序,不是论文中的章节结构。
    顺序文件 / 函数阅读时要回答的问题
    1config/osworld/rsi.example.json运行属于目标适应还是 held-out 泛化?模型、预算与停止策略是什么?
    2run_osworld.py一项任务如何生成 baseline、三阶段命令与输出目录?
    3benchmarks/osworld/pipeline.py各阶段什么时候允许推进?协议与记忆哈希如何验证?
    4explore/phase1_wave.py并发分支共享哪份记忆?失败波次何时阻断?提交为什么串行?
    5core/self_evolving_loop.pyPASS、FAIL、UNVERIFIED、STALLED 分别如何转移?
    6benchmarks/osworld/phase2.py抽象 Hooks 怎样连接真实 VM、Actor、Verifier 与 Curriculum?
    7core/actor.py / core/loop.pyJSON 怎样变成程序?观察怎样回到上下文?何时进入验证?
    8core/verifier_runtime.py隐藏私有路径、保护候选与恢复 scratch 的执行机制是什么?
    9explore/target_learning.py / explore/charter.py同一 Actor 如何学习、协调记忆并给出课程诊断?
    10benchmarks/osworld/task.py记忆如何传入?正式评分在什么位置发生?错误如何处理?
    11benchmarks/ale/learning.py同一探索内核如何适配另一套环境供应与评分流程?

    测试文件可以当作边界说明书

    重点看 test_self_evolving_loop.py、test_phase1_wave_authoring.py、test_verifier_isolation.py、test_phase2_stop_policy.py、test_memory_retrieval_lifecycle.py。例如已有测试明确要求:一次 PASS 后若开展新练习,再次目标失败就不能沿用旧 PASS;UNVERIFIED 不进入记忆学习。

    有些注释还保留历史实验名称与旧模块描述。判断当前行为时依次看公开入口 → 生效配置 → 调用点 → 实际分支 → 对应测试,不要仅靠注释里的“默认值”或历史路由名称。

    依据:tests/test_self_evolving_loop.py · tests/test_phase1_wave_authoring.py · tests/test_verifier_isolation.py · tests/test_memory_retrieval_lifecycle.py

    13复现路径:从协议检查到单任务

    源码证据命令与环境要求来自公开仓库;未在本次 review 中重新运行正式 benchmark,因此只作为复现入口。

    以下命令依据当前仓库文档整理,未在本次分析中启动正式实验。参考环境是 Python 3.12、uv、Linux、Docker 与 /dev/kvm,并需要模型 API、固定版本基准、VM 镜像及任务资产。默认方案通过 API 调用模型;桌面 VM 与软件环境是另一组资源需求。

    环境准备;Docker/镜像与服务还需按 OSWorld 官方固定版本指南配置
    git clone https://github.com/AetherLabsAI/RSIAgent.git
    cd RSIAgent
    git checkout a9e56263f6deaa493496ad6b155fe24bf131bc12
    cp .env.example .env
    # 在 .env 中填入自己的 OPENROUTER_API_KEY
    
    git clone --branch v2026.08.08 https://github.com/xlang-ai/OSWorld-V2.git ../OSWorld-V2
    cd ../OSWorld-V2
    uv sync --frozen
    uv pip install --python .venv/bin/python -r ../RSIAgent/requirements.txt
    source .venv/bin/activate
    cd ../RSIAgent
    准备资产、宿主边界文件与 smoke
    python tools/prepare_osworld_v2_release.py
    python tools/build_p2_corpus.py
    python tools/exam_fence.py build
    python tools/smoke_osworld.py --output results/smoke/osworld
    
    # 查看完整任务计划,不启动 VM / 模型,也不写输出
    python run_osworld.py --arm both --name learning_batch_01 --dry-run

    先用仓库的单任务协议学习生命周期;根目录批处理默认会面向完整任务列表。示例协议已经是 task_080,无需臆造一个根入口不支持的 --task 参数。

    单任务三阶段运行
    cp config/osworld/rsi.example.json config/osworld/rsi.learning.json
    
    # 编辑 rsi.learning.json:
    # 1. run_name 改为唯一名称,如 learning_task080_01
    # 2. 保留 task_080 与其方向文件,或同步修改三处目标信息
    # 3. 保留明确的 study_design 与 phase2.stop_policy
    
    bash scripts/run_rsi.sh config/osworld/rsi.learning.json
    
    # 查看入口支持的检查选项
    python -m benchmarks.osworld.pipeline --help
    要观察的产物应核对的内容
    results/recursive_improvement/<run_name>/phase1/result.json阶段终态、探索项目和冻结记忆路径。
    phase1/curriculum/wave_NNN/课程发布的项目、材料和波次决策。
    phase2/result.json停止策略、目标 verdict、练习量、最终记忆树哈希。
    phase3/memory_lock.json冻结版本、writeback=false、curriculum_enabled=false。
    phase3/result.json官方分数与来源路径;继续沿记录定位具体候选和评分。

    并发参数要区分两层:根命令的 --concurrency 控制独立任务链;BRS 的 parallelism 控制单个任务链内部的分支。两者一起增加会放大同时运行的 VM 数量。

    默认目标 Actor 单次调用 watchdog 为 36,000 秒,练习与课程配置为 86,400 秒。它们是单次运行上限,不是完整项目的成本估算或整个探索链的总时限。当前材料不足以给出可信的美元预算。

    依据:README.md · docs/OPERATIONS.md · scripts/run_rsi.sh · config/roles/target.yaml · config/roles/actor.yaml

    14迁移到自研 Agent:最小可行实现

    工程建议本节是从论文角色边界与源码实现抽象出的自研 Agent 迁移方案,不是 RSIAgent 论文已经验证的 Java 架构。

    以下是基于源码的工程设计建议,不是仓库已经提供的 Java SDK。已有 Java Agent 系统可以先迁移角色边界和记忆生命周期,再决定是否接入完整桌面环境。

    Java 侧接口职责对应的仓库思想
    EnvironmentAdapterreset、execute、observe、snapshot、restoreVM 与候选保护边界。
    ActorSession运行任务;保留同一次经验的上下文供学习使用experience-owned learning。
    VerifierSession独立要求检查、证据收集与明确 verdictVerifierSession + 隔离 executor。
    CurriculumSession根据结果和诊断决定下一个项目或停止课程会话持续,权限限定为选经验。
    MemoryRepository不可变快照、原子提交、版本与证据索引canonical memory、journal、tree hash。
    RunLedger记录阶段、模型配置、候选版本、状态和成本每个产物可追溯到一条运行链。
    Java 接口草图;类型 MemoryDraft 需在你的项目中定义
    enum Verdict { PASS, FAIL, UNVERIFIED }
    enum CurriculumDecision { PRACTICE, READY, STALLED }
    
    record MemoryVersion(String id, String treeHash) {}
    record Verification(Verdict verdict, String evidenceRef) {}
    
    interface MemoryRepository {
        MemoryVersion snapshot();
        MemoryVersion commit(String expectedParentId, MemoryDraft draft);
    }
    
    // 建议:提交前比较父版本;冲突时重新协调,不采用最后写入覆盖。
    // BRS 的多个 Actor 可并行执行,学习提交放入同一串行队列。

    一个适合第一版的练习环境

    选择一个可重置的表格或文档处理沙盒:任务是修复含公式、格式和导出要求的文件。BRS 分别探索公式、引用、格式与导出;DRS 针对某个失败补充边界样例;最终使用冻结记忆完成另一个预先保留的任务。文件可直接检查,环境成本比多应用桌面基准更容易控制。

    最小实验要保存四组信息

    先比较同一 Actor–Verifier 框架的空记忆与冻结记忆,在相同测试集、模型与预算下重复运行。之后再比较仅 BRS、仅 DRS 和组合。这样才能回答你的业务到底从哪一层得到收益。

    15适用场景、失败模式与改进优先级

    工程建议论文明确讨论探索不够针对、验证不完整、记忆整合不可靠等失败来源;优先级与企业落地建议属于基于这些证据的工程扩展。
    场景为什么适合 / 不适合
    稳定的企业内部软件流程同一软件、版本和任务族反复出现,前期探索成本可以摊销。
    文档、音视频、CAD 等复杂产物可以同时检查结构、渲染结果与原生工程,经验具有操作价值。
    可重置的仿真与测试环境能够构造练习、保留候选、独立验证并恢复状态。
    一次性、简单、低重复请求探索开销可能超过任务本身价值。
    无法回滚的线上业务写操作学习与验证探测可能改变真实外部状态,需要先建立可控测试环境。
    需求不完整且无法获取缺失信息再多练习也不能产生真实未知事实,错误猜测反而可能写成规则。
    论文明确报告的三类限制:Insufficiently Targeted Exploration(探索没有击中真正弱点)、Incomplete Verification(验证接受了不完整结果)、Unreliable Memory Consolidation(记忆整合保留了错误或不可靠规则)。下面的工程建议围绕这三类失败展开。

    错误如何被放大

    练习没有触及真正难点 → 验证遗漏关键要求 → Actor 把局部接受理解为通用规则 → 下一轮更确信错误。这个链条说明,记忆量增加和模型调用增加都不必然提高质量。

    优先级建议针对的具体问题
    1记忆传入失败立即阻断;增加客体哈希回执防止评估记录写着有记忆,执行却没有收到。
    2把条件、证据来源、反例和未知项附在重要记忆条目中降低一次局部验证被推广成普遍规则的概率;这是扩展建议,仓库不强制 Schema。
    3固定预算与停止策略,重复试验,保存所有尝试避免只展示最优 checkpoint 或最成功的重试。
    4使用独立任务 / 版本做迁移测试区分已知目标适应、同类任务迁移与跨环境泛化。
    5对高价值产物补充确定性检查器降低模型验证者漏检,仍保留视觉和语义检查。
    6记忆与软件版本绑定,失配时重新验证防止旧软件经验长期污染新环境。

    源码层面的成熟度判断:项目有清晰的状态边界、隔离机制、运行证据与恢复模块,适合研究复杂 Agent 的编排实现。它仍依赖特定基准环境、长时间模型调用和操作性恢复流程;当前发布包含的是运行框架,不能等同于已封装好的通用生产 Agent 平台。

    依据:docs/ARCHITECTURE.md · docs/OPERATIONS.md · docs/RELEASE.md · 失败模式分析 · 限制

    16学习路线与自测

    学习建议这是阅读与实践顺序,不属于论文实验结论。
    学习轮次要做的事完成标志
    第一轮 · 架构读角色表、三阶段流程、self_evolving_loop能解释 PASS / FAIL / UNVERIFIED 与停止策略。
    第二轮 · 记忆跟踪一波 BRS 的快照、验证、提炼、协调、提交能指出哪个 Actor、在何时、对哪个版本写入经验。
    第三轮 · 证据读 verifier_runtime 与冻结评估路径能区分候选保护、隐私隔离、记忆冻结和官方评分隔离。
    第四轮 · 实现在可重置文件沙盒实现最小三角色循环能复现一次错误经验被修正并影响后续动作。
    第五轮 · 实验固定模型、预算和测试集做消融用结果和成本判断价值,保留失败与回退。
    为什么不能让 Curriculum 直接修改正式记忆?

    它没有经历完整执行上下文。让原 Actor 基于自己的动作与验证证据学习,可以把经验归属和记忆写权限保持一致。Curriculum 通过学习诊断选择后续验证假设的练习。

    为什么失败项目也值得写入记忆?

    失败揭示错误解释、适用条件或无效操作。前提是失败经过验证,且记忆保留“不成功”的性质;基础设施错误不能冒充任务知识。

    RSIAgent 的 memory 是向量数据库吗?

    已检查的核心路径使用文件目录与 Actor 自主读取。你可以扩展向量检索,但需要说明检索排序、版本管理与漏召回如何影响行为。

    怎样证明你实现的记忆机制有效?

    在相同 Actor–Verifier 框架下,固定模型、工具与评估任务,比较空记忆和冻结记忆;重复运行并计入探索成本,再用未参与探索的任务检验迁移。

    为什么内部 PASS 不能直接作为最终业务成功?

    它是验证者基于当前证据的判断。需求遗漏、错误解释和测试覆盖不足仍会导致假阳性,需要独立验收信号和可检查产物。

    17版本、依据与分析范围

    论文:RSIAgent: Autonomous Exploration for Recursive Self-improvement in New Environments,arXiv:2609.15364v1,2026-09-14。方法与实验结论以论文及作者公开的 paper reporting notes 为准。

    源码基准:原文档固定到 a9e56263f6deaa493496ad6b155fe24bf131bc12(2026-09-16)。本次证据 review 另外对照公开仓库 README.md 与 docs/PAPER.md 对论文阶段映射、结果聚合与报告范围的说明。

    证据纪律:论文直接主张、源码实现细节、作者案例与本文工程建议分别标注。未在本次 review 中重新运行付费模型、完整 VM benchmark 或官方评分,因此不把作者报告数字写成独立复现结果。

    1. arXiv v1 PDF:研究方法、结果、附录与案例。
    2. README.md:安装、公开入口、报告范围。
    3. docs/ARCHITECTURE.md:角色权限、阶段与提交边界。
    4. docs/PAPER.md:论文统计口径、历史变体、消融限定。
    5. docs/OPERATIONS.md:运行时限、并发与恢复方式。
    6. docs/RELEASE.md:来源记录与作者已报告的发布验证;不作为本次测试结果。
    7. explore/phase1_wave.py:广度探索与有序提交。
    8. core/self_evolving_loop.py:目标尝试和自演进状态机。
    9. explore/charter.py:角色与学习提示词。
    10. core/verifier_runtime.py:验证隔离机制。
    11. benchmarks/osworld/pipeline.py:三阶段协议与记忆完整性检查。
    12. benchmarks/osworld/task.py:记忆加载、执行与封闭评分。

    链接固定在分析提交版本。数值标注为作者报告;源码行为与工程建议分别叙述。正文没有把静态检查等同于运行验证。

    ← 返回内容索引