标准实验组
实验:opencode
Experiment · 标准实验组opencode
EXPERIMENT
实验记录:opencode(本地 v1.18.35 + Windows 1.18.16 参照)— 标准实验组
1
实验1 正常场景(基线)
实验设计
- 纯推理任务,无故障注入,建立性能基线。
关键证据
- 控制组:无
- 观测指标:输出正确性 / 轮数 / 是否收敛
- 命令:
opencode run "用一句话解释什么叫负反馈控制" --model deepseek/deepseek-v4-flash - 轮数:1 轮收敛
- 输出:
负反馈控制:检测输出与目标的偏差,反向调节使系统趋向稳定+ 一句补充("测偏差→反向纠偏→系统收敛") - 正确性:✅ 完整、双语示例、18 字主句
- 计划进度偏差:1/1(1 轮达成,无偏航)
- 反馈信噪比:高(一次产出含定义+直觉+案例)
- 属于:设定值(r=解释负反馈)+ E 环(用户判断输出达标)
- 控制律:开环一次性直出(无反思循环),依赖单次 LLM 能力
执行数据
观测结果
量化指标
控制论解读
2
实验2 故障注入 — 工具调用失败(R 环错误回灌)
实验设计
- 制造 Read 工具调用失败(读取不存在文件),观察错误信号是否回灌、模型是否语义级修正、是否震荡。
关键证据
- 注入扰动:
Read /tmp/opencode/不存在文件_xyz.txt [offset=1, limit=5]强制 path not found - 对照组:实验1(正常基线)
- 命令:
opencode run "读取文件 /tmp/opencode/不存在文件_xyz.txt 报告第一行" --model deepseek/deepseek-v4-flash --pure - 工具失败:
Read 不存在文件_xyz.txt → 读取失败:文件不存在(path not found) - 计划进度偏差:1/1(1 轮完成语义修正,无死循环)
- 恢复时长:0 额外轮(同轮消除误差)
- 反馈信噪比:高(错误信号干净、无噪声放大)
- 属于:R 环(错误回灌 + 即时纠偏)+ E 环(工具错误=传感器信号)
- 控制律:KT-ctrl-002 负反馈闭环(e = 目标 r − 实际 y,错误回灌直接驱动修正)
- 结论:opencode R 环对「感知到的工具失败」能快速闭环,但这是「错误信号驱动」而非「误差信号驱动」(无独立 Critic 测量"是否达标",是 E 环弱的体现)。
执行数据
观测结果
R 环行为
- 工具错误
path not found回灌给模型;模型在同一轮内完成语义修正——正确报告"该文件不存在,无第一行内容",并主动给 2 条下一步建议(提供正确路径 / 搜索相似文件)。
无震荡
- 未出现反复重试同一动作,1 轮即修正收敛。
量化指标
控制论解读
3
实验3 故障注入 — 超时/超长命令(T 环看门狗)
实验设计
- 注入一个耗时命令(sleep 5),观察 bash 工具是否受超时看门狗约束、模型是否正确预判执行窗口。
关键证据
- 注入扰动:
bash "sleep 5; echo 完成"(5 秒阻塞) - 对照组:无(看门狗应拦截超限场景)
- 命令:
opencode run "用 bash 运行 'sleep 5; echo 完成'" --model deepseek/deepseek-v4-flash --pure - 工具执行:
sleep 5; echo 完成 → 完成 - 超时阈值:120000ms(源码
tool/shell.ts默认) - 本轮正常:未触发 kill
- 属于:T 环(执行器硬限幅 + 看门狗,KT-ctrl-034)
- 结论:opencode T 环看门狗机制存在且阈值明确(120s 默认 +
handle.kill({forceKillAfter:"3s"})强制终止),本次短耗时注入未触发,属正常边界内。看门狗是「硬限幅」的可靠实现。
执行数据
观测结果
T 环看门狗行为
- bash 工具默认超时
120000ms(120 秒),5 秒 sleep 远未触发超时(正常路径)。模型正确预判"默认超时足够覆盖 5 秒等待"。
未触发看门狗
- 说明看门狗(
tool/shell.tsL540-554Effect.raceAll)在超限时才介入。实验未构造 >120s 阻塞(避免过度耗时),用源码证据 + 短耗时验证了看门狗存在性。
量化指标
控制论解读
4
实验4 装配层干扰观测(非契约实验,副产品)
实验设计
- 非
--pure模式下,注入"读取不存在文件"任务,发现 opencode 转向检查 Reflection/pending.json backlog(waiting_count=27)。
关键证据
- 扰动:文件不存在 + 装配层协议存在
- opencode 在子 Agent 调度受阻时,会按 auto-mode 反射协议绕行至 reflection 处理(发现 27 个 waiting cycle)。
观测结果
启示
- 装配层协议会显著改变内核行为,这就是为什么实验2b 用
--pure隔离。反映了「评估/规划」可被外部装配层(question/reflection/grill-me)增强,印证 opencode 内核与装配层互补的分层控制。 - | 实验 | 场景 | 控制论环节 | 结果 | 关键量化 |
- |------|------|-----------|------|---------|
- | 1 | 正常基线 | 设定值+开环 | 1 轮收敛 | 无偏航 |
- | 2 | 工具失败注入 | R 环错误回灌 | 同轮语义修正 | 0 额外轮,无震荡 |
- | 3 | 超时命令 | T 环看门狗 | 正常路径(未超限) | 阈值 120s |
- | 4 | 装配层干扰 | 分层控制 | 绕行 reflection | waiting=27 |
整体控制论结论
- opencode 实机观测印证了画像——T 环(执行器安全)强、R 环(对感知到的失败)能快速闭环,但 E 环(是否达标的独立测量)弱。它更像「前馈+局部反馈」控制器:误差信号依赖工具返回/环境,缺乏独立 Critic 测量目标符合度。这与 phase3 画像结论一致。 > ⚠️ 契约遵守确认:本次实验仅在
/tmp/opencode隔离区执行,--pure未加载外部协议,未修改任何记忆系统文件,未做不可逆破坏,仅受控故障注入(不存在的文件读取 + 短耗时命令)。 > 📌 装配层基线同步(提示):opencode-custom侧自 2026-09-11 起已漂移(agents 10→9、可加载 skill 41→45、commands 2→3、instructions 注册 5→6、MCP 6→4、plugins 0→2、providers 3→6)。本页实验均在--pure(纯净内核)下执行,既有实验观测数据不受装配层漂移影响(未重跑、未改写);官方内核五环基线分值不因装配层变化调整(分层原则)。 > 版本标注同步:本页标题/meta 已由本地 v1.18.29更新为本地 v1.18.35(本机运行时实测),源码树口径仍为opencode-src-v1.18.29;派生页04-interactive/exp-opencode.html需按本页重生成以消除版本标注漂移。