假目标也能验:独立验收、双 Bot 会诊、18:00 人闸

本专栏不神化某个模型,而谈怎么把一群助手装进可控的 Harness:上下文、工具、环境、目标与检测、规则与禁忌,以及编排协作与人机边界。每篇只攻一块,尽量带可复现的小实验或对照(公开数据、沙箱账号),避免把私有项目写进公网。文末有完整专栏地图。「工具」区已经分享过几篇(Context7 调研闭环、显式连接对照、论文检索等)。本篇落在「编排」与「人机」交界:用假目标把独立验收、双 Bot 会诊和日终人闸跑通一遍。

问题

多助手一上线,最容易出现三种「看起来在协作、其实在自嗨」的情况:

  1. 执行方自己验自己:写完报告再写「验收通过」,数字错了也过不了关------因为没人对照夹具复算。
  2. 故障会诊变成一人独白:两个角色本该独立写根因,却共享同一可写工作区,后写的把先写的「润色」掉,分歧消失。
  3. 机器通过被当成已合并:质检验收全绿之后,助手静默合并 / 发帖,人只在出事时才知道。

技术预研里不一定立刻有生产仓库。能不能用假目标 + 合成夹具,先把这三道闸的形状练出来?可以。下面三节对应三次沙箱试验。

三机制

机制一:执行方 / 验收方分角色(独立验收)

角色 可写 不可做
执行方 交付物目录 改任务说明 / 改金标
验收方 仅验收报告 改交付物;自己给自己「修到过」

硬约束用产物指纹:验收前记下 SHA256,报告末尾复录,须一致。验收方的工具策略上应禁用对交付物目录的写权限;指纹是给人看的第二道证。

任务说明里写清:必交付路径、表头、复算公式、文末字面来源行。金标放在任务说明的验收方段落,执行方按公式从夹具算,而不是抄金标数字。
#mermaid-svg-2ySnAdY4OhU205ak{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-2ySnAdY4OhU205ak .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2ySnAdY4OhU205ak .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2ySnAdY4OhU205ak .error-icon{fill:#552222;}#mermaid-svg-2ySnAdY4OhU205ak .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2ySnAdY4OhU205ak .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2ySnAdY4OhU205ak .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2ySnAdY4OhU205ak .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2ySnAdY4OhU205ak .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2ySnAdY4OhU205ak .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2ySnAdY4OhU205ak .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2ySnAdY4OhU205ak .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2ySnAdY4OhU205ak .marker.cross{stroke:#333333;}#mermaid-svg-2ySnAdY4OhU205ak svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2ySnAdY4OhU205ak p{margin:0;}#mermaid-svg-2ySnAdY4OhU205ak .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2ySnAdY4OhU205ak .cluster-label text{fill:#333;}#mermaid-svg-2ySnAdY4OhU205ak .cluster-label span{color:#333;}#mermaid-svg-2ySnAdY4OhU205ak .cluster-label span p{background-color:transparent;}#mermaid-svg-2ySnAdY4OhU205ak .label text,#mermaid-svg-2ySnAdY4OhU205ak span{fill:#333;color:#333;}#mermaid-svg-2ySnAdY4OhU205ak .node rect,#mermaid-svg-2ySnAdY4OhU205ak .node circle,#mermaid-svg-2ySnAdY4OhU205ak .node ellipse,#mermaid-svg-2ySnAdY4OhU205ak .node polygon,#mermaid-svg-2ySnAdY4OhU205ak .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2ySnAdY4OhU205ak .rough-node .label text,#mermaid-svg-2ySnAdY4OhU205ak .node .label text,#mermaid-svg-2ySnAdY4OhU205ak .image-shape .label,#mermaid-svg-2ySnAdY4OhU205ak .icon-shape .label{text-anchor:middle;}#mermaid-svg-2ySnAdY4OhU205ak .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2ySnAdY4OhU205ak .rough-node .label,#mermaid-svg-2ySnAdY4OhU205ak .node .label,#mermaid-svg-2ySnAdY4OhU205ak .image-shape .label,#mermaid-svg-2ySnAdY4OhU205ak .icon-shape .label{text-align:center;}#mermaid-svg-2ySnAdY4OhU205ak .node.clickable{cursor:pointer;}#mermaid-svg-2ySnAdY4OhU205ak .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2ySnAdY4OhU205ak .arrowheadPath{fill:#333333;}#mermaid-svg-2ySnAdY4OhU205ak .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2ySnAdY4OhU205ak .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2ySnAdY4OhU205ak .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2ySnAdY4OhU205ak .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2ySnAdY4OhU205ak .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2ySnAdY4OhU205ak .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2ySnAdY4OhU205ak .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2ySnAdY4OhU205ak .cluster text{fill:#333;}#mermaid-svg-2ySnAdY4OhU205ak .cluster span{color:#333;}#mermaid-svg-2ySnAdY4OhU205ak div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2ySnAdY4OhU205ak .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2ySnAdY4OhU205ak rect.text{fill:none;stroke-width:0;}#mermaid-svg-2ySnAdY4OhU205ak .icon-shape,#mermaid-svg-2ySnAdY4OhU205ak .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2ySnAdY4OhU205ak .icon-shape p,#mermaid-svg-2ySnAdY4OhU205ak .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2ySnAdY4OhU205ak .icon-shape .label rect,#mermaid-svg-2ySnAdY4OhU205ak .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2ySnAdY4OhU205ak .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2ySnAdY4OhU205ak .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2ySnAdY4OhU205ak :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 一致且数字对
数字错或指纹变
执行方写交付物
验收方只读复算
写验收报告
指纹对照
通过
未通过

机制二:双 Bot 会诊 + 对照方出表(保留分歧)

同一故障任务说明、同一份假日志,两个会话各自只写自己的假设文件;第三人(对照方)只读两边产物出对照表。

约束 做法
防串改 A/B 互斥对方假设文件的写权限;或分分支 / 分工作树(worktree)
证据 必须引用日志原文行,不写「感觉是」
下一步 只列只读核对(A0,只读);不杀进程、不改配置、不发帖
成功标准 至少一处主因分歧显式留在表上,等人拍板

分歧本身是产物。把分歧抹平,才是编排失败。
#mermaid-svg-DNm4QnlkN58Lq9Tv{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DNm4QnlkN58Lq9Tv .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DNm4QnlkN58Lq9Tv .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DNm4QnlkN58Lq9Tv .error-icon{fill:#552222;}#mermaid-svg-DNm4QnlkN58Lq9Tv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DNm4QnlkN58Lq9Tv .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DNm4QnlkN58Lq9Tv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DNm4QnlkN58Lq9Tv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DNm4QnlkN58Lq9Tv .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DNm4QnlkN58Lq9Tv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DNm4QnlkN58Lq9Tv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DNm4QnlkN58Lq9Tv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DNm4QnlkN58Lq9Tv .marker.cross{stroke:#333333;}#mermaid-svg-DNm4QnlkN58Lq9Tv svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DNm4QnlkN58Lq9Tv p{margin:0;}#mermaid-svg-DNm4QnlkN58Lq9Tv .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-DNm4QnlkN58Lq9Tv .cluster-label text{fill:#333;}#mermaid-svg-DNm4QnlkN58Lq9Tv .cluster-label span{color:#333;}#mermaid-svg-DNm4QnlkN58Lq9Tv .cluster-label span p{background-color:transparent;}#mermaid-svg-DNm4QnlkN58Lq9Tv .label text,#mermaid-svg-DNm4QnlkN58Lq9Tv span{fill:#333;color:#333;}#mermaid-svg-DNm4QnlkN58Lq9Tv .node rect,#mermaid-svg-DNm4QnlkN58Lq9Tv .node circle,#mermaid-svg-DNm4QnlkN58Lq9Tv .node ellipse,#mermaid-svg-DNm4QnlkN58Lq9Tv .node polygon,#mermaid-svg-DNm4QnlkN58Lq9Tv .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DNm4QnlkN58Lq9Tv .rough-node .label text,#mermaid-svg-DNm4QnlkN58Lq9Tv .node .label text,#mermaid-svg-DNm4QnlkN58Lq9Tv .image-shape .label,#mermaid-svg-DNm4QnlkN58Lq9Tv .icon-shape .label{text-anchor:middle;}#mermaid-svg-DNm4QnlkN58Lq9Tv .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DNm4QnlkN58Lq9Tv .rough-node .label,#mermaid-svg-DNm4QnlkN58Lq9Tv .node .label,#mermaid-svg-DNm4QnlkN58Lq9Tv .image-shape .label,#mermaid-svg-DNm4QnlkN58Lq9Tv .icon-shape .label{text-align:center;}#mermaid-svg-DNm4QnlkN58Lq9Tv .node.clickable{cursor:pointer;}#mermaid-svg-DNm4QnlkN58Lq9Tv .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DNm4QnlkN58Lq9Tv .arrowheadPath{fill:#333333;}#mermaid-svg-DNm4QnlkN58Lq9Tv .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DNm4QnlkN58Lq9Tv .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DNm4QnlkN58Lq9Tv .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DNm4QnlkN58Lq9Tv .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DNm4QnlkN58Lq9Tv .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DNm4QnlkN58Lq9Tv .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DNm4QnlkN58Lq9Tv .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DNm4QnlkN58Lq9Tv .cluster text{fill:#333;}#mermaid-svg-DNm4QnlkN58Lq9Tv .cluster span{color:#333;}#mermaid-svg-DNm4QnlkN58Lq9Tv div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-DNm4QnlkN58Lq9Tv .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DNm4QnlkN58Lq9Tv rect.text{fill:none;stroke-width:0;}#mermaid-svg-DNm4QnlkN58Lq9Tv .icon-shape,#mermaid-svg-DNm4QnlkN58Lq9Tv .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DNm4QnlkN58Lq9Tv .icon-shape p,#mermaid-svg-DNm4QnlkN58Lq9Tv .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DNm4QnlkN58Lq9Tv .icon-shape .label rect,#mermaid-svg-DNm4QnlkN58Lq9Tv .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DNm4QnlkN58Lq9Tv .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DNm4QnlkN58Lq9Tv .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DNm4QnlkN58Lq9Tv :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 同一假日志
Bot A 写假设
Bot B 写假设
对照方只读出表
主因分歧保留
人拍板

机制三:角色图 + 18:00 人闸(机器验 ≠ 人批)

单目标拆角色:协调拆票与汇总;调研 / 执笔 / 质检验收方各写各的路径;日终人闸只在收闸门包时介入。

关键分离:

  • 质检验收方「通过」= 机器侧对照任务说明 / 夹具通过
  • 18:00 人闸 = 是否允许合并、是否对外;未批则停
  • 开合并请求 ≠ 合并;沉默 / 未回复 ≠ 默认批准

闸门包最小字段:状态一览、变更摘要、待批问项(合并?对外?打回?)、闸后动作表。真发帖走审批通道;沙箱只写包、不发。
#mermaid-svg-ujkiNGtpq5NVYEM0{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ujkiNGtpq5NVYEM0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ujkiNGtpq5NVYEM0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ujkiNGtpq5NVYEM0 .error-icon{fill:#552222;}#mermaid-svg-ujkiNGtpq5NVYEM0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ujkiNGtpq5NVYEM0 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ujkiNGtpq5NVYEM0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ujkiNGtpq5NVYEM0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ujkiNGtpq5NVYEM0 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ujkiNGtpq5NVYEM0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ujkiNGtpq5NVYEM0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ujkiNGtpq5NVYEM0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ujkiNGtpq5NVYEM0 .marker.cross{stroke:#333333;}#mermaid-svg-ujkiNGtpq5NVYEM0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ujkiNGtpq5NVYEM0 p{margin:0;}#mermaid-svg-ujkiNGtpq5NVYEM0 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ujkiNGtpq5NVYEM0 .cluster-label text{fill:#333;}#mermaid-svg-ujkiNGtpq5NVYEM0 .cluster-label span{color:#333;}#mermaid-svg-ujkiNGtpq5NVYEM0 .cluster-label span p{background-color:transparent;}#mermaid-svg-ujkiNGtpq5NVYEM0 .label text,#mermaid-svg-ujkiNGtpq5NVYEM0 span{fill:#333;color:#333;}#mermaid-svg-ujkiNGtpq5NVYEM0 .node rect,#mermaid-svg-ujkiNGtpq5NVYEM0 .node circle,#mermaid-svg-ujkiNGtpq5NVYEM0 .node ellipse,#mermaid-svg-ujkiNGtpq5NVYEM0 .node polygon,#mermaid-svg-ujkiNGtpq5NVYEM0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ujkiNGtpq5NVYEM0 .rough-node .label text,#mermaid-svg-ujkiNGtpq5NVYEM0 .node .label text,#mermaid-svg-ujkiNGtpq5NVYEM0 .image-shape .label,#mermaid-svg-ujkiNGtpq5NVYEM0 .icon-shape .label{text-anchor:middle;}#mermaid-svg-ujkiNGtpq5NVYEM0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ujkiNGtpq5NVYEM0 .rough-node .label,#mermaid-svg-ujkiNGtpq5NVYEM0 .node .label,#mermaid-svg-ujkiNGtpq5NVYEM0 .image-shape .label,#mermaid-svg-ujkiNGtpq5NVYEM0 .icon-shape .label{text-align:center;}#mermaid-svg-ujkiNGtpq5NVYEM0 .node.clickable{cursor:pointer;}#mermaid-svg-ujkiNGtpq5NVYEM0 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ujkiNGtpq5NVYEM0 .arrowheadPath{fill:#333333;}#mermaid-svg-ujkiNGtpq5NVYEM0 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ujkiNGtpq5NVYEM0 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ujkiNGtpq5NVYEM0 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ujkiNGtpq5NVYEM0 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ujkiNGtpq5NVYEM0 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ujkiNGtpq5NVYEM0 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ujkiNGtpq5NVYEM0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ujkiNGtpq5NVYEM0 .cluster text{fill:#333;}#mermaid-svg-ujkiNGtpq5NVYEM0 .cluster span{color:#333;}#mermaid-svg-ujkiNGtpq5NVYEM0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ujkiNGtpq5NVYEM0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ujkiNGtpq5NVYEM0 rect.text{fill:none;stroke-width:0;}#mermaid-svg-ujkiNGtpq5NVYEM0 .icon-shape,#mermaid-svg-ujkiNGtpq5NVYEM0 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ujkiNGtpq5NVYEM0 .icon-shape p,#mermaid-svg-ujkiNGtpq5NVYEM0 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ujkiNGtpq5NVYEM0 .icon-shape .label rect,#mermaid-svg-ujkiNGtpq5NVYEM0 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ujkiNGtpq5NVYEM0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ujkiNGtpq5NVYEM0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ujkiNGtpq5NVYEM0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 人批
未批
单目标拆角色
各角色写交付
机器验收通过
18:00 提交闸门包
允许合并 / 对外
停手

沙箱证据(标明沙箱)

三次试验均在沙箱目录完成;数字与端口来自合成夹具 / 假 CI 日志,可公开讲。

A · 故意算错成功率,验收方抓到

夹具 metrics.csv(5 行合成跑数):金标 mean=131.0,max=200,success_rate_pct=80.0(4/5)。

执行方交付物把成功率写成 100.0(丢掉失败行后按 4/4 计)。验收方逐条对照:

准则 结果 证据(摘要)
文件存在 / 首段固定句 / 表头三指标 / 文末来源行 通过 交付物路径与字面匹配
mean_latency_ms=131.0、max_latency_ms=200 通过 与夹具复算一致
success_rate_pct=80.0 未通过 产物 100.0 vs 复算 80.0
产物 SHA 验收前后一致 通过 指纹未变 → 验收方未改产物
总体 未通过 符合「至少演示一条失败」

可带走:表格「看起来整齐」不够;独立复算 + 指纹,才能证明「验的人没偷偷改交付物」。

B · 同一假日志,主因故意分歧

假 CI 日志(preview-api smoke):两次 bind 均 errno=98 EADDRINUSE;诊断行指向另一工作树残留 node(pid=4412);同时有 PREVIEW_API_TOKEN unset 的 WARN;listen_addr 回落默认 18080;健康检查从未发出。

维度 Bot A(环境) Bot B(配置) 裁定
主根因 端口残留 / 工作树未隔离端口 缺强制环境变量 + 默认端口契约 分歧
共享证据 errno=98、diag pid、listener_bind 同上 + token WARN、default 回落 同意
下一步 只读复读 / ss / 文档 只读 yaml / 环境变量键名 / 重试定义 全 A0(只读)
自动修复 否 否 同意:无自动修复

A 的主因叙事正是「文件隔离 ≠ 端口隔离」;B 则把问题抬到启动契约------这与环境区同一话题可对照,本篇不展开端口实验。对照方不裁判对错,只把分歧和只读下一步交给人。

C · 单目标角色图 + 18:00 包,写死不自动合并

假目标:合成周指标 → 一页纸 Markdown。角色边:执行 → 协调 → 人;质检验收方对齐机制一。

时间线要点(Asia/Shanghai,示意):

节点 级别 红线
读任务说明 / 算金标 A0(只读) 不改状态
写笔记 / 草稿 / 验收报告 / 开草稿合并请求 A1(受限写) 开合并请求 ≠ 合并
18:00 提交闸门包 A2(需人批)汇总 人未批则停
人批合并 A2(需人批) 禁止静默自动合并
对外发布 A3(仅负责人) 默认不做;仅负责人

闸门包里显式写:合并进共享主干 = 未执行 --- 等人闸;人沉默时助手 什么都不合并、不发帖。验收方「通过」出现在状态表里,但不等于已合并。

可带走的清单

  1. 验收方与执行方分离:分会话或分写权限;用 SHA 证明验收过程未改产物。
  2. 故意失败样例要留着:全通过的演示教不出检测;至少一条算错 / 绑失败,才证明闸门有用。
  3. 双会诊的成功标准是「分歧可见」:共享证据、各写各的、对照方只出表;下一步默认只读。
  4. 机器验 ≠ 人批:质检 / 验收通过后,合并与对外仍进 18:00(或同等)人闸包;未批 = 停手。
  5. 单目标角色图:一个日闸只服务一个目标,减少多票抢同一人批。
  6. 对外与政策另算:专栏发表、改审批政策等走更高一级;沙箱演示不发真实审批帖。
  7. (附)审批路由选择题(A0--A3)可做成技能自测;「团队频道非紧急帖」等条文若政策未写明,先标待确认,再补政策------本篇不展开营销式工具安利。

数据与来源

  • 沙箱台账与产物:试验 A(验收方独立验证)、试验 B(双 Bot 根因会诊)、试验 C(角色图 + 18:00 人闸);汇总见同目录汇总。
  • 观点仅代表作者沙箱实践,与具体平台或厂商无关。

专栏地图

用 Agents / Bots 搭一支研究团队 ------ Harness 实践笔记

写给谁:想把「一个人 + 一群助手」跑成可持续研发流程的工程师与研究者。

背景:多助手协作已经便宜,真正难的是上下文从哪来、工具接不接、环境是否可复现、目标怎么验、规则与禁忌怎么落地。本专栏按 Harness 拆零件,每篇只攻一块,并尽量带对照实验;演示默认沙箱与公开数据。

分区地图:

  1. 上下文(Context)--- 对话、记忆、技能、仓库与文档如何进入视野;什么该进、什么不该进。
  2. 工具(Tools)--- 显式连接器 vs 隐式搜索;何时值得接官方 API。已分享:Context7 调研闭环;Context7 vs 纯 Cursor 量化对照;论文检索(S2 限流后的备胎栈)。
  3. 环境(Environment)--- 沙箱机、浏览器、CI、GPU、密钥与登录态;演示环境与真实环境隔离。
  4. 目标与检测方法(Goals & Evaluation)--- 可验收目标、例程、指标、失败样例与回归。本篇机制一可作入口旁证。
  5. 规则、约束与禁忌(Rules & Guardrails)--- 审批闸门、安静时段、发布前检查与信息安全清单。
  6. 编排与协作(Orchestration)--- 多 Bot 分工、频道订阅、交接与去重。本文(独立验收 · 双会诊 · 日闸)。
  7. 人机边界(Human-in-the-loop)--- 必须人点的步骤;草稿卡、发布审批、失败时如何停手。本文 18:00 闸门包与之重叠。

写法:问题 → 机制/工具 → 小实验或对照 → 可带走的结论。观点仅代表作者实践,与平台无关。

相关推荐
镭封1 小时前
自媒体内容生产怎么提速?文案整理、配音与剪辑流程
人工智能·小程序·音视频·语音识别·媒体
王大王momo1 小时前
Kimi K3.1 Pro 正式发布:编程与 3D 能力升级,Highspeed 同步上线
人工智能·ai编程
zhippt_10141 小时前
AI生成PPT工具推荐:图转PPT与一键生成实测对比
人工智能·1024程序员节
zhippt_10141 小时前
AI生成PPT工具怎么选?6款在线一键生成PPT工具实测对比
人工智能·powerpoint
成都旺小宝科技1 小时前
AI工牌案例:华润静安府话术执行率提到62%
人工智能·机器学习·房地产
apollo_qwe1 小时前
大模型 API 接通了,AI 聊天页面为什么还是不好用?
前端·vue.js·人工智能
悟天特斯1 小时前
楼宇自控的进阶:从「自动控制」到「自学习优化」
人工智能·物联网
见闻小天地1 小时前
新手入门:印刷包装设备的伺服和PLC运动控制方案各管什么?七步选型讲清楚
运维·网络·数据库·人工智能
JuiceFS1 小时前
HeyGen:如何让全球 10+ GPU 集群训练不再等待数据?
人工智能·后端