Agent 工程对照
← 返回周报

2026-W37

openJiuwen 给 LLM 裁判配了刚性评分契约:权重必须人写明,加不到 100% 就报错

本周落点

本周综述

openJiuwen 本周把 rsi 闭环的评估端换成了一个带证据的 LLM 裁判:harness_rsi/evaluator/judger/ 下新增 llm_as_judge、judge_evidence、judge_runtime、scoring 与一份 judge_prompt.md,data_loader 侧另加 grading_contract.py。真正值得记的是后者的几条硬规则。评分项必须由人显式标注成 [weight N%] 或 [deduct N%](中文的「权重」「扣分」等价);解析器的文档字符串写得很直白——规范化评分别名,但不从任务内容里推断规则;遇到看起来像评分项、却没有显式标注的编号行,直接抛错而不是跳过;正向权重之和不等于 100% 同样抛错,错误信息里特意写明权重不会被静默重新缩放。评分标准含糊时,评估根本不开始。

展开完整综述

把它和上期放在一起看,openJiuwen 在同一个位置连着下了两次同样的注。W36 的图谱演化规定只有强验证成功、或能归因到 orchestration 的失败才允许改变行为;本周是不合格的评分契约不许进入评估。两次都不是在提升裁判或模型本身的能力,而是在给「学习」设准入门槛。自改进系统最容易坏的地方是把噪声当成信号,这家一贯的处理方式是在入口处拒绝,而不是在下游用加权去稀释。

同一周 symphony 新增了 flow 子包,约两千行,distill、observation、review、packager、codegen、render、store、engine 一整串,做的是从执行经验里蒸馏出技能包;rsi 侧则补上了最终 harness 发布与检查点插件清单的测试。闭环两端本周同时变厚:评估端拿到带证据和加权契约的裁判,产出端拿到可打包的技能包与可发布的 harness。位置仍然是信息——这些都落在 symphony 与 rsi 下,没有进内核。

Pi 把延迟工具加载接到了 Fireworks Messages 线路,做法是在该线路的兼容声明里打开 supportsToolReferences,和它一贯「缓存能力写进配置」的路子一致。文档里那条附注比功能本身更值得读:加载器的名字必须叫 ToolSearch 或 tool_search,换成别的名字功能照常工作,但 Fireworks 会把加载出来的 schema 塞回初始工具前缀,缓存收益就此消失。也就是说,渐进披露在这里换到的首先是前缀稳定,而不只是上下文空间;而这笔收益挂在一个提供方约定的固定名字上——写错不会报错,只会悄悄变慢变贵。

剩下两家都在做减法。DeepSeek 从公开包清单类型里删掉了 dsh.categories——一个在注释里就写明「自由发现标签、不影响插件加载」的字段,同周还清掉了桌面端一个无人调用的插件分类查询:没有执行方的声明被当作负债处理。Codex 的 #45248 则把元数据的归属粒度从回合下沉到步,一个回合里模型或推理强度中途变化时,前后置工具钩子、权限请求钩子与 MCP 调用现在拿到的是实际发出该次调用那一步的设置,而不再是回合开始时的那份。连同 openJiuwen 把畸形 file_path 从崩溃降级成工具错误的那条修复(PR 里写明理由是编码代理经常把参数写坏,回合必须活下来让模型重试),本周四家分别在线路声明、包清单、请求元数据与工具契约上处理同一件事:声明的东西和实际生效的东西对不上时,该由谁来兜。

工程解读

Codex:钩子和请求元数据改看「这一步」的设置,不再看回合开头的

改了什么
#45248 把模型、推理强度、自动审查与 Node REPL 标志在每一步发出请求或工具调用时捕获下来,前置与后置工具钩子、权限请求钩子、MCP 调用和请求元数据都改用这份捕获值,而不是回合开始时的设置。
为什么改原文说明
PR 的 Why 一节写明:回合中途切换模型或推理强度后,请求元数据和工具钩子报告的仍是回合的初始设置,而元数据应当描述实际发出这次请求或调用的那一步。
对开发者的影响
如果你写了按模型区分行为的钩子(例如只对某个模型放行某类命令,或按推理强度记账),现在它看到的是真实发出调用的那一步的设置,回合中途切换模型不会再让判断落空。自建 Harness 时值得借鉴:设置的归属粒度应该跟调用走,而不是跟回合走。

Pi:Fireworks 线路支持延迟工具加载,但加载器必须叫 ToolSearch

改了什么
Fireworks Messages 线路打开了原生延迟工具加载:延迟的工具定义用 defer_loading 标记,加载点用 tool_reference 内容,与 Anthropic 线路的表示方式相同;扩展文档把它列为第三条支持的线路。
为什么改原文说明
文档里的附注给出了约束的原因:加载器名字用 ToolSearch 或 tool_search 时才能延迟到前缀之外,换成别的名字功能照常,但 Fireworks 会把加载出来的 schema 放回初始工具前缀,缓存收益随之消失。CHANGELOG 把这次改动关联到一个要求改进 Fireworks 专属配置的 issue。
对开发者的影响
在 Fireworks 上用 Pi 做延迟工具加载时,务必把加载器命名为 ToolSearch 或 tool_search——写错不会报错,只会悄悄变慢变贵。更一般的教训:渐进披露换来的首先是前缀稳定,而这笔收益可能挂在提供方的某个约定上,需要在配置里显式写明。

openJiuwen:LLM 裁判的评分契约不许含糊,权重加不到 100% 就拒绝评估

改了什么
rsi 的评估端接入了带证据的 LLM 裁判(llm_as_judge、judge_evidence、scoring 等),数据加载侧新增 grading_contract.py:评分项必须显式标注权重或扣分,不从任务内容推断规则;像评分项却没标注的编号行直接报错;正向权重之和不是 100% 也报错,且不会被静默缩放。
为什么改编辑推断
PR 正文没有写原因。结合上一期同一位置的变化(图谱演化只接受强验证成功或可归因的失败)来看,推断是在给自改进闭环设准入门槛:含糊的评分标准会把噪声当成信号喂回优化器,与其在下游加权稀释,不如在入口拒绝。
对开发者的影响
用 openJiuwen 的 rsi 做评估的团队,旧的评分说明可能需要补上显式权重才能跑起来。自建评估 Harness 可以借这条原则:评分契约要机器可校验,校验不过就不开始评估,而不是尽量解析。

DeepSeek:删掉不影响加载的插件分类字段

改了什么
公开包清单类型删除了 dsh.categories 字段——它在注释里就写明只是自由发现标签、不影响插件加载;README、架构说明同步移除,桌面端一个无人调用的插件分类查询也一并删除。
为什么改编辑推断
提交信息只有一行 refactor(manifest): remove discovery categories,没有说明原因。推断是在清理「没有执行方的声明」:一个既不参与加载、也没人读取的字段,只会让清单作者误以为它有作用。
对开发者的影响
如果你的 DeepSeek 插件清单里写了 dsh.categories,升级后需要删掉。自建插件系统时的借鉴:清单里的每个字段都应该有明确的消费方,没有消费方的元数据迟早会和实际行为脱节。
影响到的格子(6 条说明)

评估与自改进 × openJiuwen

本格描述的 rsi 闭环,评估端与产出端同时变厚:evaluator/judger/ 新增 llm_as_judge、judge_evidence、judge_runtime、scoring 与 judge_prompt.md,构成带证据的 LLM 裁判;新增的 data_loader/grading_contract.py 强制评分契约——评分项须显式标注 [weight N%] / [deduct N%],不从任务内容推断规则,正向权重之和不为 100% 直接报错且不静默缩放。产出端由 symphony/flow/ 的经验蒸馏(distill/packager/codegen)产出技能包,rsi 侧补上最终 harness 发布测试。

提示词缓存 × Pi

本格描述的「按线路 compat schema 声明缓存能力」新增一例:Fireworks Messages 线路打开 supportsToolReferences 以启用延迟工具加载。文档同时点明该收益的脆弱处——加载器名必须是 ToolSearch 或 tool_search,否则 Fireworks 会把加载的 schema 并回初始工具前缀,缓存收益消失。

Skills 与渐进披露 × Pi

本格此前只记到单文件 harness/skills.ts。本周变更显示 Pi 的按需暴露实际落在 packages/ai 的线路兼容层:延迟工具加载(defer_loading 定义 + tool_reference 加载点)新增 Fireworks Messages 通道,与 Anthropic、OpenAI 并列,且三条线路的原生表示方式各不相同。

生命周期挂载点 × Codex

钩子拿到的设置口径变了:#45248 之后,前置/后置工具钩子与权限请求钩子接收的是实际发出该次调用那一步的模型、推理强度与审查标志,而非回合开始时的设置,hook_runtime.rs 与 turn_metadata.rs 同步改写。本格此前只描述挂载点在哪里,未涉及挂载点看到的设置归属于哪一层。

工具定义方式 × openJiuwen

本格强调 _ToolMeta 把异常处理等横切关注点织入框架,本周的 filesystem.py 修复给出了这条契约的边界用例:模型把整个 file_path/content 载荷塞进 file_path 时,Path.resolve() 抛出的 ENAMETOOLONG 此前会杀死整个回合;改为解包一层嵌套 JSON、拒绝超长路径分量,并把 OSError 转成 ValueError,使 invoke 返回 success=False 的 ToolOutput。PR 明确将其定性为公共文件系统工具契约问题。

内核与扩展边界 × DeepSeek Harness

公开包清单收窄:DshManifest 删除 dsh.categories(其自身注释即写明是自由发现标签、不影响插件加载),README 与架构说明同步移除,桌面端未被调用的插件分类查询一并删除。本格描述的「配置生成的插件树」在声明面上少了一层没有执行方的分类元数据。

采集到的提交与发布
openJiuwen69 提交 · 1 release · 429 ★

当周 release

值得注意的提交

  • 3b3a4c6fix(agent-evolve): solve aigw sft upload issue
  • 5f944bb[mirror] openJiuwen-ai/agent-core#1326: fix(context_evolver): add l3 reflection tests
  • b5f189bfix(personal-context): fix context-link validation and collection liveness
  • cc0e58fupdate version to 0.1.18
  • 4b3860bfix(harness): return write_file errors instead of ENAMETOOLONG crashes
  • 09ef9c1fix: allow fastmcp 3.x and declare opentelemetry-sdk to drop vulnerable diskcache
Codex100+ 提交 · 18 release · 123,997 ★

值得注意的提交

  • 6f39a47Add worktree session creation to the agents overview (#45276)
  • 44b9011Preserve terminal scrollback when growing the TUI viewport (#45271)
  • a505c71Route pastes into the active history search query (#45262)
  • 516f278Open new sessions directly from the command center (#45255)
  • 16537b2Use captured step settings for request metadata and tool hooks (#45248)
  • 36f0dbeRegister Windows desktop uninstall ownership before sandbox setup (#45224)
DeepSeek Harness100+ 提交 · 5 release · 223,271 ★

值得注意的提交

  • 59f2e3bMerge release/dsh-0.1.5 version 0.1.5-rc.2 into master sync branch
  • a305303release(dsh): 0.1.5-rc.2
  • 3bfcebeMerge master into worktree/release-0.1.5-sync-master
  • 060323dfeat(web): backport feedback and file refinements to 0.1.5
  • 0963bddtest(python): control stray-output fragments for sealing coverage
  • 3b5daf1test(ci): verify current master on PR runners
Pi55 提交 · 0 release · 104,916 ★

值得注意的提交

  • 71dca87fix(ci): Fix a broken test
  • b215884feat(coding-agent): add customization documentation evals (#9491)
  • 713bdf3Revert "fix(ai): update stale DeepSeek Flash test model IDs"
  • e841300fix(ai): update stale DeepSeek Flash test model IDs
  • d92eb8dfeat(ai): enable Fireworks Messages deferred tool loading
  • 4bd3f48fix(ai): enable GLM-5.2 reasoning on Mistral

每家最多列 6 条代表性提交,已去掉合并、版本号与纯文档提交。

观察名单

观察名单

这几个项目出现在周报里,但还不在对照矩阵中。

Claude Agent SDKAnthropic
6 提交 · 8,093 ★

Anthropic 把 Claude Code 的 Harness 能力下放为可编程 SDK,是「Harness 作为库」这条路线的参照系。

最近一次 release(不限当周):v0.2.152(2026-09-02)

同族的 anthropics/claude-agent-sdk-typescript 只有 examples/scripts/CHANGELOG,属发布仓,不单独采集。