Agent Harness 学习
← 返回对照矩阵

self improvement

进化

评估与自改进

Harness 自己怎么变好?有没有外循环?

横向读这一行

这一行把四家分成了两派。openJiuwen 和 Codex 让系统自己改自己——前者有完整的 rsi 闭环(评估→分析→规划改动→执行→迭代),后者从历史会话里自动长出记忆并合并;DeepSeek 和 Pi 则把判断权留给人——DeepSeek 收集人类反馈但明确不回灌模型对话,Pi 只提供一把尺子(evals 包),让人自己去比不同 Harness 配置的好坏。注意 openJiuwen 的编排器在跟踪 commit 上已从顶层 auto_harness/ 迁进 rsi/,是本站教学基线之后发生的真实结构变动。

对比
openJiuwen带代码

把递归自我改进做成一级子系统 rsi/

规模最大的一份,而且正在迁移中:教学基线上的顶层 auto_harness/ 在当前跟踪 commit 已被掏空(只剩 __init__.py),实际编排器搬进了 rsi/auto_harness/orchestrator.py。rsi 下自成一套闭环——evaluator 跑用例、evaluation_result_analyzer 分析失败、member_optimizer 规划并执行改动(action_planner / action_executor)、single_harness/iterative.py 做迭代爬坡。另一条线 agent_evolving 管经验:experience 有 lifecycle / scorer / archive / tracker,optimizer 分别针对 llm_call、memory_call、skill_call、tool_call 四类调用做优化。

openjiuwen/
├── auto_harness/                    # 教学基线上的编排器,本 commit 已空(仅 __init__.py)
├── rsi/                             # 递归自我改进
│   ├── auto_harness/orchestrator.py # ← 编排器迁移到这里
│   │   └── agents / stages / pipelines / rails / skills / experience ...
│   ├── evaluator/case_runner.py                (1493 行)
│   ├── evaluation_result_analyzer/analyzer.py  (2902 行)
│   ├── member_optimizer/action_planner.py      (1714 行)
│   ├── member_optimizer/action_executor.py     (2208 行)
│   └── single_harness/iterative.py             (2758 行)
└── agent_evolving/                  # 经验沉淀与调用优化
    ├── experience/  lifecycle · scorer · archive · tracker · rebuild
    ├── optimizer/   llm_call · memory_call · skill_call · tool_call
    ├── evaluator/ · dataset/ · checkpointing/ · agent_rl/
openjiuwen/rsi@ fd6c47854201
Codex带代码

两阶段记忆流水线,从历史会话里长出记忆

没有做「优化 Harness 配置」的外循环,但有一条跨会话学习的流水线。它在根会话启动时后台异步触发,且带明确的准入条件(非临时会话、特性开启、不是子代理会话、状态库可用)。Phase 1 从状态库领取一批到期的历史 rollout,逐个交给模型抽出结构化记忆(raw_memory + rollout_summary + slug),做密钥脱敏后写回;带并发上限、租约防重复、失败退避重试。Phase 2 拿全局锁做合并,按 usage_count 与最近使用时间排序筛选,落成 raw_memories.md 与 rollout_summaries/,并把整个记忆目录维护成一个 git 基线,每轮写出 workspace diff。

The pipeline is triggered when a root session starts, and only if:

- the session is not ephemeral
- the memory feature is enabled
- the session is not a sub-agent session
- the state DB is available

It runs asynchronously in the background and executes two phases in order: Phase 1, then Phase 2.

## Phase 1: Rollout Extraction (per-thread)
# → 领取到期 rollout、过滤出与记忆相关的响应项、并发送模型抽取结构化记忆、
#   脱敏后写回状态库;租约防重复,失败带退避重试。

## Phase 2: Global Consolidation
# → 取全局锁,按 usage_count / last_usage 排序筛选,合并成 raw_memories.md
#   与 rollout_summaries/,记忆根目录维护为 git 基线并写出 phase2_workspace_diff.md。
codex-rs/memories/README.md:31-40@ 4beea50e26dd

只收集人类反馈,且明确不回灌模型

四家里最克制的一份:没有自动优化循环,只有一个 feedback 插件族,把人类评价分成两条刻意分开的契约——写进规范会话日志的不可变备注,和挂在某条助手消息上、存本地边车文件的可编辑反馈。README 里有一句关键约束:两种形式都不进入模型对话。也就是说反馈是给人和离线分析用的,不构成运行时自改进闭环。基准测试则完全在仓库外,靠 Python SDK 跑(BENCHMARK.md),要求每个任务用独立工作区与会话 id。

# feedback/ — recorded human feedback

The feedback family exposes two deliberately separate contracts: an immutable
remark in the canonical Session log, and editable feedback attached to one
assistant message in a local sidecar. Neither form enters the model conversation.

# packages/feedback/
# ├── command-feedback/   斜杠命令入口
# └── message-feedback/   挂在单条助手消息上的可编辑反馈(本地边车)

# BENCHMARK.md:基准测试走 Python SDK 的 jsonrpc-agent 最小变体运行,
#               要求每个基准任务使用独立 workspace 与 session id。
packages/feedback/README.md:1-8@ b150a551b8d4
Pi带代码

内置 evals 包,直接拿来横向比 Harness 配置

唯一把「评估」做成仓库内一等包的实现,而且目标写得很直白:用来比较 prompt、工具、skills、模型或其他 harness 配置。做法是把真实的 AgentSession 适配到 vitest-evals,在隔离的临时项目目录与 agent 目录里跑,并附上原生的 Pi 会话产物。运行时经由 Pi 正常的 ModelRuntime 取凭据,provider 与 model 必须成对给出。这不是自动优化循环,而是把「改一版 Harness 就能量出差异」这件事变成一条 npm 命令——对应课程第 6 章的自建评估 Harness。

# Pi evals

Pi evals are behavioral, model-backed checks for Pi workflows. They adapt a real
`AgentSession` to `vitest-evals`, run it in isolated temporary project and agent
directories, and attach native Pi session artifacts.
Use them to measure end-to-end behavior and compare prompts, tools, skills,
models, or other harness configurations.

## Running evals

npm run eval -- --provider openai --model gpt-5.6-sol

# packages/evals/src/
# ├── pi-harness.ts      被测 Harness 的适配层
# ├── smoke.eval.ts
# └── extensions.eval.ts
packages/evals/README.md:1-6@ bfb004d4418f

back to course / 回到课程

矩阵展示的是「各家怎么做」。这个问题本身为什么存在、有哪些经典权衡,在课程里讲:

6

Harness 工程深入

评估、进化与二阶控制:让 Harness 自己变好