From 44ccc97d7b66a67d2a8c408670373ce2c7f0a9c6 Mon Sep 17 00:00:00 2001 From: iomgaa Date: Mon, 5 Oct 2026 09:12:06 -0400 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=96=B9=E6=B3=95=E5=8A=A0=E8=AF=8A?= =?UTF-8?q?=E6=96=AD=EF=BC=88=E6=AF=8F=E8=BD=AE=E6=8F=90=E6=A1=88=E5=89=8D?= =?UTF-8?q?=E5=9C=A8=E5=BD=93=E5=89=8D=E5=9F=BA=E7=BA=BF=E4=B8=8A=E5=81=9A?= =?UTF-8?q?=E8=AF=8A=E6=96=AD=E5=AE=9E=E9=AA=8C=EF=BC=89=EF=BC=8C=E6=B6=88?= =?UTF-8?q?=E8=9E=8D=E9=BB=98=E8=AE=A4=E5=85=B3=EF=BC=9B=E5=86=99=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=B9=A6=2018?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- WORK_LOG.md | 5 +- docs/方法.md | 166 +++++++++++++++++----- docs/结构.md | 14 +- 任务书/18-诊断.md | 347 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 493 insertions(+), 39 deletions(-) create mode 100644 任务书/18-诊断.md diff --git a/WORK_LOG.md b/WORK_LOG.md index a73cbdb..9310059 100644 --- a/WORK_LOG.md +++ b/WORK_LOG.md @@ -84,12 +84,13 @@ - 第 1 轮方向分析与提示词第二次改(2026-10-03):监督者按路线(不按单个想法)读了 6 次运行,能走到最好的那类解法 6/6 次都有人想到,但常被写成备选或"做法类别"之一;18/18 人第一个入口从读基线半径函数出发、按代码工序分工;压低它的理由是"求确定、好归因、怕白跑",不是技术理由。用户定两处改法,由监督者直接改提示词(ff5c8dd),再写任务书 15 让新会话重跑对照:①正向只管冲分、消融负责解释、估分照实;②先不看代码自己解题,再拆基线工序,两边对照。用户原话:"正向实验,就是为了去追求最高的分……你这样实验你可以去冲。然后后面的反向实验有人给你兜底";"先让他脱离代码……假设自己没有代码的情况之下……列出解法……在思考输出之中把这个解法列一下就好了……然后第二,他需要对现在的解法进行拆解……进行一个综合的分析";"提示词你直接改,改后后还是写一个任务书让新会话执行"。flow 第 3 部分顺延为任务书 16。 - flow 第 3 部分(2026-10-04):⑨–⑫ 照方法实现,写完采纳停下;验收看五样研究质量(实现照协议没有、核验员判得对不对、押注和实测对比、分数和参考项目第 1 轮对比、程序账目),不设硬线;实验员、核验员这一段的提示词先诊断再改,改完提交后才跑、看到结果不再调。用户原话:"我基本认同,唯一我觉得需要补充的就是 prom 需要修改……这次那几位的 prompt 也同样需要修改"。因为提示词要改,任务书 15 的三份研究恢复时会被提示词哈希核对挡下,改为从头新跑 3 份(监督者定,顺带重复一次任务书 15 的路线对照)。监督者另定:一批里的正式运行一个接一个跑、检验时不和别的研究同时跑(候选多半按秒数停,抢 CPU 会改分数);轻量检查次数按每次调用计、不进账本;修复阶段按"第几次"编号。 - flow 第 4 部分(2026-10-04,任务书 17):先写任务书 17 交新会话执行,同时监督者离线做 Jev 比上限的检验。这一段的提示词(解释、收尾、消融实现、消融核验)同样先诊断再改,改完提交后才跑、看到结果不再调;研究者角色提示词不动。收尾的"下一步"由"在哪个因子上继续"改为"沿某个因子继续,或换一条更可能拿最高分的路线"(方法.md 4.3 ⑱)。验收从头真实跑 3 份完整研究到余额用完,不回放 16-real-1;3 份同时跑,一份研究内的正式运行仍一个接一个跑,用每次运行的 CPU 时间与墙钟时间之比核对没有互相抢。用户原话:"我建议先写任务书 17(消融到收尾),然后让一个flow完成任务17,同时我们可以用这 6 个实测分数加上参考项目的账本,离线检验"、"我感觉改提示词真的很重要"、"我基本同意,唯一的问题是3份不能并行跑吗?"。 +- 诊断(2026-10-05,任务书 18):信息与反向实验两个核心不变,改对准的东西。每轮提案之前,研究者写几种"为什么卡在这里"的诊断解释和诊断实验(在当前基线上只动一处:加强、换掉、拿掉、放宽),按自己的解释对每个实验押三个数;程序用信息价值减成本定做不做、做哪几个(方向收益直接用"做了比现在高多少");选中的实验打包成一次正式运行、扣 1 次;结果确认或否定各条解释,放进本轮提案材料。诊断实验的答案不采纳为基线(它是在已有答案上接着算的),方向要写成提案经正向拿分。消融默认关、保留开关,关掉时解释阶段也不做;B、D 就是"无诊断、开消融"的对照。不加"停滞时强制换路"之类的规则。监督者先提过"体检 + 停滞强制换路 + 统一比值不值得测",用户否掉。用户原话:"我们应保持反向实验和信息这两个核心点不变……需要打开思路,思考为什么人类研究者能够顺利完成,而我们套用时出现问题。我觉得你的方案仍然受限,例如强制换一条路径,这种做法显得奇怪"、"认可这个方向,也认可'每轮把几个诊断实验打包成一次正式运行,照样扣 1次,不开免费的口子'"、"同意默认关闭消融。反向实验这个核心由诊断承担"。"诊断结果只当信息、不直接采纳"由监督者解释理由后,用户没有异议。方法.md 直接改写,不写讨论过程(用户原话:"我们写的不是讨论稿")。 ## 未完成 - 用 Jev 代替研究者押注(用户提,2026-10-03 定这次先不做):做成开关、可当论文消融。设想只换选批用的那份押注,研究者照旧押、照旧记战绩,两边可比;Jev 一次只给是非概率,三个数要靠问一串"会不会超过某分"反推。先离线检验:参考项目 8 个验收账本里的真实候选、研究者押注和实测分数,比谁排得准。任务书 15 的结果若显示"提案变激进了、但押注仍压低激进路线、选批不选",就是做它的直接理由。任务书 15 后补(2026-10-04,用户提"让 Jev 只看题目和方案、两两比较谁的上限高,再和研究者押注加权"):监督者判断先不进 flow。理由:c2 那次 Jev 的"能到最好"对三条完整路线给 0.61/0.69/0.53,并不把联合优化排第一;研究者是否押错要等实跑分数;加权的权重没有数据。做法:任务书 16 跑出实测后,连同参考项目 8 个账本,离线检验"只给题目和两条方案、两个顺序各问一次取平均"的上限比较,和研究者押注、实测三方对照;Jev 确实更准,再做成开关,形式倾向"每批留一个名额给 Jev 判上限最高的候选",不做加权。用户回复"行,那先做任务书 16"。 - B、D 两份完整研究的分析(2026-10-05,监督者派 4 个独立子 Agent,关键数字已核):①D 没到最好:第 0 轮讨论把"圆心和半径一起交给求解器"判为"不值得占名额"(D 账本 seq 77,理由是黑盒搜索更适合分段线性的 LP 值),15 份冻结协议都没做它;第 1 轮定下"只挪圆心、半径用 LP 现算"的引擎后,后几轮只改起点库。监督者复跑:对 D 第 3 轮最好的解只做一次 0.04 秒的联合局部求解就从 2.6051 到 2.6191;从基线三环出发做一次也到 2.546,接近 D 第 1 轮 110 秒的成绩。B 第 1 轮就采纳了联合求解加多起点。②信息与消融在 B、D 里都没有改变分数走向:各轮三个候选的合并中位数只差 0.001–0.03,押注分不出好坏,选批近似随机;选格多数格净值为负被跳过(B 测 2/9、D 测 3/8),D 第 1 轮"大家一致"的那格事后看是一致地错了;测了的格,B 第 1 轮测到退化起点的假象(研究者自己读对),B 第 3 轮确认已饱和,D 第 3 轮的结论把第 4、5 轮引向扩起点库,两轮都没采纳。推动进步的是正向运行里登记的拆账指标和研究者读代码、读解;收尾原文接力这条渠道有效。同一份代码重跑的波动从没测过,D 第 3–5 轮 0.003 量级的差别可能在噪声里。③Jev 两两比较(31 对,3 对平手):总体不比合并中位数准(上限一问 14/28,合并 q5 14/21);只在看完结果后切出的"新项目第 1 轮、分差>0.01"7 对里全对(q5 3/7),是待复核的线索;"一次运行谁高"一问对调顺序一半以上会翻转。结果在 `/home/iomgaa/inforsi-eval/2026-10-05-jev-ceiling/`。暂不做 Jev 开关。只有 2 份完整研究,以上都不能当方法结论。 -- 文献精读(2026-10-05,用户提"信息与反向实验理论上说得通,问题可能在落地或少了 trick"):6 个子 Agent 读了约 50 篇,原文在 `reference-paper/`(不进仓库)。监督者抽查过 AdaEvolve 表 4、FermiEval、Ng 第 44 章原文。要点:①研究者给的范围不能直接当先验:大模型口头区间严重过窄(FermiEval 名义 99% 只覆盖 65%;9 个新模型 95% 区间覆盖 9–44%),同厂商模型错得一样(两模型都错时 60% 选同一错答),现成模型判断"哪个研究想法更好"接近随机(Wen 2025,微调后才 77%);文献做法是用历史结果做保形外扩、给不同研究者不同信息、程序直接平均。②只看一步、只看单格的信息价值天然会算出 0(信息价值不是边际递减),保证都要求噪声已知;对策是成组估价、保留随机探索、先测噪声。③消融在文献里是解释和发表的工具(Lipton、Fawcett、AI Scientist v2 都把它放最后、不回流);人决定下一步靠采纳前的区分实验和"上限/瓶颈诊断"(Ng 第 44–45、53–57 章"优化验证测试"),D 缺的正是这一步。POPPER 是唯一让检验结果改变下一步并有部件消融的:去推翻当前主张的推论,用 e 值序贯停。④单线必锁:FunSearch 单岛 0/5;OpenEvolve 填圆卡 2.377 靠人工写"换根本不同的方法"才突破;AdaEvolve 填圆卡 2.5414,停滞时触发"元指导"注入联合连续优化后到 2.6095,去掉元指导 3 次平均 2.5213 对完整 2.6294。跨代传总结/教训的证据都弱。结论:方向(事前预测、用实验排除)站得住,落地时信息的原料没校准、反向实验对准了过去而不是当前瓶颈、缺多路线和停滞换路线、没测噪声。下一步和用户讨论怎么改,未定。 +- 文献精读(2026-10-05,用户提"信息与反向实验理论上说得通,问题可能在落地或少了 trick"):6 个子 Agent 读了约 50 篇,原文在 `reference-paper/`(不进仓库)。监督者抽查过 AdaEvolve 表 4、FermiEval、Ng 第 44 章原文。要点:①文献里大模型口头区间严重过窄(FermiEval 名义 99% 只覆盖 65%;9 个新模型 95% 区间覆盖 9–44%),同厂商模型错得一样(两模型都错时 60% 选同一错答),现成模型判断"哪个研究想法更好"接近随机(Wen 2025,微调后才 77%);文献做法是用历史结果做保形外扩、给不同研究者不同信息、程序直接平均。监督者拿 B、D 等 35 次正向运行核对(检测 1):实测落在合并范围一成到九成之外 8/35(理想 20%),合并范围基本准、略偏保守;单个研究者的范围过窄(41/105 落在外面)。所以问题在分不出好坏(候选之间差得太少),不在范围不准,不需要打折放宽。同一份代码重跑的波动(检测 2)不测,用户原话:"我百分之百保证这个不会有多大偏差。而且如果要去度量这个偏差,我们后面耗费的资源太大了"。②只看一步、只看单格的信息价值天然会算出 0(信息价值不是边际递减),保证都要求噪声已知;对策是成组估价、保留随机探索、先测噪声。③消融在文献里是解释和发表的工具(Lipton、Fawcett、AI Scientist v2 都把它放最后、不回流);人决定下一步靠采纳前的区分实验和"上限/瓶颈诊断"(Ng 第 44–45、53–57 章"优化验证测试"),D 缺的正是这一步。POPPER 是唯一让检验结果改变下一步并有部件消融的:去推翻当前主张的推论,用 e 值序贯停。④单线必锁:FunSearch 单岛 0/5;OpenEvolve 填圆卡 2.377 靠人工写"换根本不同的方法"才突破;AdaEvolve 填圆卡 2.5414,停滞时触发"元指导"注入联合连续优化后到 2.6095,去掉元指导 3 次平均 2.5213 对完整 2.6294。跨代传总结/教训的证据都弱。结论:方向(事前预测、用实验排除)站得住,落地时信息和反向实验对准的东西不对:押分押的是几个相近候选的分数,消融拆的是过去改动的功劳;人类研究者押的是"卡在哪"的几种解释,反向实验是在当前程序上加强或拿掉一步看空间在哪。据此定了诊断(见"关键决定"2026-10-05 诊断一条、任务书 18)。 - 第零轮之后再看(2026-10-03 定,等部分 2 的数据):②第一条消息里没有题目本身,要模型自己查 TASK.md,是否由程序放在最前面;③三位研究者拿到完全一样的提示,是否给每人分一个不同的看题路径;④研究者角色提示词每个任务都发全文,是否按任务只发用得到的几节。现状(任务书 14):角色提示词已瘦身到 4386 字,但仍每个任务整份发。 - 信念本"按因子归并"(方法.md 6.10 第 1 条"出现在哪些候选里"):现在是每个候选的每个因子一行,用"(延续 X)"连起来,没合成一行。等真实运行后再看要不要合。 - GLM 内容审核误拦(2026-10-05,监督者查明):full17-e 第 1 轮回应阶段 researcher-2 的同一份材料两次被模型服务以"可能包含不安全或敏感内容"(400)拒收,研究停下。逐段二分复现:拦截只在 glm-5.3、glm-5.3-flash 上发生,deepseek-v4-flash 放行同一份文字;触发点是研究者自己笔记里的一句"非真六角点阵、四处未定死",把"四处"或"定死"换掉一个词就放行,单独发这一行也放行,像是 GLM 服务方的审核把附近的"六……四……死"连读成敏感日期。全部检验账本里只出现这 1 次。同一份材料重派必然再拦,重试无用。暂不为它改程序或改写模型文字;再出现时,再和用户定研究者是否换不带这种审核的模型。复现脚本在监督者会话的临时目录,结论以本条为准。 @@ -111,4 +112,4 @@ ## 下一步 -任务书 17(flow 第 4 部分:消融到收尾)已完成,四部分合起来的验收做完(B、D 两份完整研究)。Jev 比上限的离线检验("未完成"第一条,用户 2026-10-05 定等任务书 17 完成后做)。之后是 export、plugin。vocab 1154 行超上限 4 条(pi-lens 拆行),待用户定放宽还是精简说明。 +任务书 18(诊断)已写好,交新会话执行;执行前 materials、vocab 的新行数上限要用户定。之后是 export、plugin。vocab 1154 行超上限 4 条(pi-lens 拆行),待用户定放宽还是精简说明。 diff --git a/docs/方法.md b/docs/方法.md index b3696e4..707f453 100644 --- a/docs/方法.md +++ b/docs/方法.md @@ -14,19 +14,21 @@ 1. **持续提出值得试的改法**:从目标、代码和历史结果里找方向。 2. **知道每次运行让我们多知道了什么**:模型能给出数值范围,但给得偏自信,几位研究者之间也高度相关,所以不能直接当概率用。程序要把这些范围换算成可用的把握,用它来选实验、决定要不要花运行去查原因,并持续核对这些范围准不准。 -3. **弄清每次成功是哪一部分起了作用**,并把这个认识带进下一轮。 +3. **弄清当前卡在哪里、剩下的空间在哪**,并把这个认识用到本轮的提案上。 每一轮研究交出三样东西: - 更好的代码; -- 按因子的知识:被采纳改法里,信息价值认为值得测的因子"关掉它少多少分"的实测; +- 对当前程序的诊断:几种"卡在哪里"的解释,哪些被实测确认、哪些被否定,各个方向实测还能涨多少; - 能度量的认识收窄:信念本和比特。 方法有三层,三层都要保住: -- 正向找改法、反向查原因的闭环; +- 正向找改法、反向诊断当前程序的闭环; - 信息度量:范围、信念本、比特、信息价值; -- 以因子为单位做消融、记录知识。 +- 以解释为单位做事前预测、用实验确认或否定。 + +决定下一步往哪走,靠的是在当前最好的程序上动一处、看分数怎么变(诊断)。把已采纳的改法一个因子一个因子关掉、看各撑几成(消融),回答的是"功劳怎么分",作为可选步骤保留,现行配置关闭(第十一部分)。 分工的根本原则:程序推进阶段、执行数学规则、保存不可改的记录;模型负责提案、实现和解释。模型在对话里说"已经提交"不算数,以正式记录为准。 @@ -62,7 +64,13 @@ **撑几成**:关掉一个因子后少掉的分数,占这个改法总提升的比例。 -**解释**:研究者对"每个因子起多大作用"的文字判断,外加对每一格给的三个数。每条解释在每一格上,看实测是否落在它自己给的一成到九成之间:落在里面记**确认**,落在外面记**否定**。 +**诊断**:每轮提案之前,在当前基线的程序和它交出的答案上做几个诊断实验,用一次正式运行跑完,看剩下的提升空间藏在哪里。 + +**诊断实验**:在当前基线上只动一处,再看分数。动法有四种:把某一步换成明显更强的版本、换成另一种做法、拿掉、放宽某个限制。每个诊断实验都要交出一个能判分的答案。 + +**诊断解释**:研究者对"为什么卡在这里、剩下的空间在哪"的文字判断,外加对每个诊断实验给的三个数。 + +**解释**:研究者对"每个因子起多大作用"的文字判断,外加对每一格给的三个数。诊断解释和消融的解释用同一套判法:每条解释在每个实验或每一格上,看实测是否落在它自己给的一成到九成之间,落在里面记**确认**,落在外面记**否定**。 **信息价值**:先测某几格再决定下一步,比不测就决定,平均能多拿多少分。**机会成本**:这几次运行如果拿去跑正向候选,本来平均能多拿多少分。 @@ -102,9 +110,9 @@ | 角色 | 人数 | 工具 | 做什么 | | ------ | ------ | --------------- | --------------------------------------------------- | -| 研究者 | N(可配置) | 只读工具、提交工具、私人笔记 | 写入口、提案、预测、挑刺、回应、解释、收尾 | -| 实验员 | 按任务派 | 完整的文件与 shell 权限 | 按冻结协议实现、做轻量检查、按核验意见修复、实现消融格 | -| 核验员 | 按任务派 | 只读工具、提交工具 | 逐项核对实现是否落实了冻结协议 | +| 研究者 | N(可配置) | 只读工具、提交工具、私人笔记 | 写入口、诊断解释与诊断实验、提案、预测、挑刺、回应、解释、收尾 | +| 实验员 | 按任务派 | 完整的文件与 shell 权限 | 实现诊断实验、按冻结协议实现、做轻量检查、按核验意见修复、实现消融格 | +| 核验员 | 按任务派 | 只读工具、提交工具 | 逐项核对实现是否落实了诊断实验的写法或冻结协议 | | 程序(宿主) | — | — | 推进阶段、保管冻结记录与评测文件、启动正式运行、从原始产物独立算分、执行全部数学规则、记账、现算信念本 | | Jev 判别 | — | — | 回答封闭问题,例如两条提案是不是同一个改法、一处实现改动有没有某种性质;程序根据回答合并、退回或拒收 | @@ -124,7 +132,7 @@ 1. **任务说明**:这一步做什么,交给谁读。 2. **你自己的**:你认领的入口、你的私人笔记全文、你自己的候选的运行与消融结果、实验员对你的候选的提醒、答案路径。 -3. **公共材料**:任务与本轮情况、基线、研究记录、信念本、上一轮收尾、挑刺与回应、指标清单等。正式证据一样不少;第 2 部分已经给过的内容,这里只写一句指引。 +3. **公共材料**:任务与本轮情况、基线、本轮诊断结果、研究记录、信念本、上一轮收尾、挑刺与回应、指标清单等。正式证据一样不少;第 2 部分已经给过的内容,这里只写一句指引。 4. **现在交什么**。 **私人笔记**:用来记你自己的判断,尤其是这几样: @@ -192,12 +200,49 @@ - 上一轮没跑、而且基线没变的候选,自动留在本轮候选池里。它们沿用原来的冻结协议和回应,不重新挑刺、不重新回应,只重新做第二次预测。作者自评继续封存,作者也不用重新给。留池候选不占作者本轮的提案名额,候选池不设上限。 - 基线变了的旧候选离开候选池,只在信念本里列出名字,可以重新提出。 +**诊断(诊 1–诊 4)** + +余额不到 2 次时,本轮不诊断,诊 1–诊 4 都不做,保证本轮至少还能跑 1 次正向。配置关掉诊断时也不做(第十一部分)。 + +*诊 1 诊断解释与诊断实验(每位研究者,各自独立)* + +- 材料:当前基线的代码,产出当前基线的那次正式运行的答案、分数和指标,信念本,上一轮收尾。第 1 轮的基线是任务给的原始代码,材料里还有第零轮的全部记录。 +- 每人交两样: + - 1 至 M 条诊断解释。每条写:为什么卡在这里,剩下的空间在哪,什么样的实测会推翻它。 + - 1 至 A 个诊断实验(A 可配置,见 6.11)。每个写:在当前基线上动哪一处、怎么动;它能把哪几种解释分开。可以登记假设专用指标,只能选"缺了只记缺失"。 +- 诊断实验的正文里不写自己估的分数,分数在诊 2 交。 +- Jev 检查每个诊断实验有没有三类问题:改动了评测、自相矛盾、写得太含糊没法照着实现。有就退回。 +- 收齐 N 人后,诊断解释的文字冻结。 + +*诊 2 合并与诊断预测* + +- Jev 判断诊断实验之间是不是同一个实验。同一个的合成一个,保留全部作者,正文取作者里编号最小的那一份。 +- 合并后的诊断实验清单和全部诊断解释公开。 +- 每位研究者对自己的每条诊断解释,给每个诊断实验交三个数:"按这条解释,做了这个实验,分数有一成、一半、九成可能低于多少"。别人提的实验也要给,拿不准就把一成和九成拉开。看不到别人这一步交的数。 +- 收齐 N 人后冻结。冻结必须早于诊断运行启动,这样这些范围才算事前预测。 + +*诊 3 定做不做、做哪几个(程序)* + +- 按 6.12 用信息价值减成本选出要做的诊断实验,或者定本轮不诊断。写一条决定记录,附上全部数字。 +- 本轮不诊断时,直接进 ②;材料里"本轮诊断结果"一节写"本轮没有诊断:原因"。 + +*诊 4 实现、核验、运行与结算* + +- 一位实验员把选中的全部诊断实验写进一份诊断程序。每个实验都从当前基线的代码和产出当前基线那次运行的答案出发,只动它写的那一处,交出自己的答案。实验员交代码、每个实验的位置表和 `concerns`。 +- 程序检查有没有改不许改的文件;Jev 检查代码改动,查的五类问题同 ⑨。 +- 核验员逐个实验核对:有没有照写法做,有没有动写法以外的地方。不通过就退回实验员修复,次数上限同 ⑨。用完了仍不通过的实验从这次诊断里拿掉,记"证据不足:核验不通过";一个都不剩时本轮不诊断,不扣次数,记一条事件。 +- 正式运行:全部实验在一次正式运行里跑完,扣一次运行次数,登记、启动、扣次的规矩同 ⑩。单次时限和核数照任务规定,由这次的实验平分时间。每个实验的答案由任务的独立校验器单独判分,需要时先合法化。某个实验跑崩、超时、没有产物或修不了,只这个实验记"证据不足",其余照常判分。 +- 结算(6.12):每个实验的实测分数;每条诊断解释在每个实验上确认或否定;世界比特和惊讶;程序按诊断推出的方向。 +- 结果整份公开,写进信念本的诊断历史,放进本轮之后全部研究者任务的材料。 +- 诊断实验的答案不采纳为基线:它是在已有答案上接着算出来的,不是一份能在单次时限内从头交出答案的代码。诊断指出的方向,要在本轮写成提案,经正向运行拿分。 + **② 提案(每位研究者,各自独立)** - 每人交 1 至 M 条合格提案,每条按因子写,格式见第五部分。 - 正文里不写自己估的分数或提升量,那属于作者自评,要封存。可以引用已经测到的分数,并写明出自哪次运行。 - 文献结论和别人报告的数值只能当起点,要说明与本任务的区别。 -- 从第 2 轮起,要说明哪些新的观测影响了这条提案。 +- 要说明哪些新的观测影响了这条提案,包括本轮的诊断结果。第 1 轮没有诊断时不用写。 +- 冻结协议可以写"照诊断实验 dN 的做法",实现这个候选的实验员会拿到本轮诊断程序的代码作参考。 - 因子超过上限时,把多出来的留到下一轮,不要几个捆成一个因子交。超过上限的提案退回本人重交。 - 交不出合格提案时,在回复里写清卡在哪里,不凑数。这按内部错误处理:研究停下,写明原因。 @@ -276,6 +321,7 @@ **⑫ 采纳(程序)** - 只看正向运行的实测分数。最好的有效候选比当前基线高出采纳线以上,就成为新基线;否则保留原基线。 +- 配置关掉消融时(现行配置),⑬–⑰ 都不做,直接跳到 ⑱。 - 被采纳的改法如果只有 1 个因子,正向运行本身就是这个因子的实测,不做消融,直接跳到 ⑱。 - 没有采纳任何候选时,也跳到 ⑱。 @@ -335,7 +381,7 @@ ### 4.4 研究结束 1. 运行次数用完,研究结束(第七部分"什么时候开下一轮")。 -2. 导出全部记录:正向、消融、两次预测、第零轮、提交的替换次数、解封的作者自评、合法化、资源用量、答案路径、`concerns`、两条曲线、常数表。 +2. 导出全部记录:诊断、正向、消融、诊断预测与两次预测、第零轮、提交的替换次数、解封的作者自评、合法化、资源用量、答案路径、`concerns`、两条曲线、常数表。 --- @@ -353,6 +399,9 @@ | ----------- | ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ----------------------------------- | | 入口(0.1、0.2) | 名称(编号由程序按顺序分配) | 从哪里开始看、为什么值得走 | 编号用于认领与分配 | | 讨论(0.2) | 可选:替换后的入口清单 | 讨论正文 | 转给下一次讨论与认领 | +| 诊断解释与实验(诊 1) | 诊断解释清单(每条的编号由程序分配);诊断实验清单:每个实验的名称、动哪一处、指标登记 | 每条解释:为什么卡在这里、空间在哪、什么实测会推翻它;每个实验:怎么动、能分开哪几种解释 | 合并实验、诊 2 的材料、选诊断实验 | +| 诊断预测(诊 2) | 自己每条诊断解释对每个诊断实验的三个数 | 理由 | 选诊断实验、确认 / 否定、信息账 | +| 诊断实现 / 修复 / 核验 | 每个实验的位置表;`concerns`;核验的逐个实验结果(照没照写法做、有没有动写法以外的地方)(代码由程序冻结) | 实现说明 | 诊断运行;核验不通过的实验退回或拿掉 | | 志愿(0.3) | 入口编号的有序列表 | — | 分配 | | 提案 | 因子清单:每个因子的编号、名称、做法、关键设定(决定效果的设定值,没有写"无")、关掉时换成什么(可省)、延续(信念本里的因子编号,或空)。保障清单:每条一个短名。指标登记。作者自评的三个数 | 每个因子为什么可能有效;每条保障做什么、属于拦 / 补 / 改哪一种、自检时怎么想的;协议(不许改什么、随机性怎么处理、何时停、什么样的运行不算数);因子之间的关系 | 数因子个数、列消融格、信念本按因子归并;保障短名用来对号;作者自评封存 | | 第一次预测 | 本轮每个新候选的三个数 | 理由 | 和第二次预测对比、信息账 | @@ -423,6 +472,7 @@ - **正向**:在同一次选批里,取所有人对所有候选的折线(含尾巴)的最低点 L 和最高点 U,令 W = U − L,开放预留 U(x) 在 \[L − W/2, U + W/2\] 上均匀铺开。 - **消融**:每一格单独定 L 和 U,因为关掉不同的因子,分数可能差得很远。 +- **诊断**:每个诊断实验单独定 L 和 U,理由同消融。 - **合并**:F(x) = (1 − λ) × \[F₁(x) + … + F\_N(x)\] ÷ N + λ × U(x),λ 是方法参数,现行值 0.10。 - 各人等权,不按以往战绩加权,也不往两头推。 - 同一个人交了几条解释时,他的那一份权重在这几条之间平分。 @@ -559,12 +609,12 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p ### 6.9 比特、惊讶、核对范围准不准 -- **格宽** Δ = ε/100,是一把固定的尺子,不随规则或其他配置变。填圆的 Δ = 0.0001。正向和消融格都从本批基线 b 起切,第 j 小格是 \[b + jΔ, b + (j+1)Δ)。 -- **世界比特** = −Σ\_j p\_j log₂ p\_j,p\_j 是合并分布落在第 j 小格的把握。正向用候选的合并分布,消融格用 6.3 的成分混合。 +- **格宽** Δ = ε/100,是一把固定的尺子,不随规则或其他配置变。填圆的 Δ = 0.0001。正向、诊断实验和消融格都从本批基线 b 起切,第 j 小格是 \[b + jΔ, b + (j+1)Δ)。 +- **世界比特** = −Σ\_j p\_j log₂ p\_j,p\_j 是合并分布落在第 j 小格的把握。正向用候选的合并分布,诊断实验和消融格用 6.3 的成分混合。 - **惊讶** = −log₂ p,p 是实测所在那一小格的事前把握。事前把握为 0 时,记"事前把握为 0,惊讶算不出",不拿 0 或无穷大顶替。 - **分歧量**(只记录)= 各人折线等权平均后的世界比特 − 各人世界比特的平均值。这里的平均不掺开放预留,所以大家交的范围完全一样时分歧量为 0。 -- 只对有效分数记比特和惊讶。世界比特、惊讶、分歧量、分数尺读数和战绩都用第二次预测来算。 -- 范围是偏宽还是偏窄,看落点四段和覆盖率。按人分开、按正向与消融分开报告,第一次和第二次预测也各报一份。估得准时,覆盖率约 80%,四段比例约 1 : 4 : 4 : 1。 +- 只对有效分数记比特和惊讶。世界比特、惊讶、分歧量、分数尺读数和战绩,正向都用第二次预测来算,诊断用诊 2 的预测来算。 +- 范围是偏宽还是偏窄,看落点四段和覆盖率。按人分开、按正向、诊断与消融分开报告,第一次和第二次预测也各报一份。估得准时,覆盖率约 80%,四段比例约 1 : 4 : 4 : 1。 - 比特的多少首先取决于大家事前说得有多宽,所以"比特变少"不能单独证明学到了东西,必须和惊讶、落点一起看。 - 衡量好坏的尺子只有一把:比特、惊讶、覆盖率永远按同一个算法、从每个人的原始范围算出来,不跟着选批、选格这些决策规则一起变。 @@ -579,13 +629,14 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p - 答案出自哪里; - 撑几成为负时写"关掉 pN 反而更好 X 分(实测)";过了采纳线时,再加一句"已采纳为下一轮基线(消融中发现)"。 2. **每次消融一句程序读出的结论**,外加一行:"程序按方向收益押的因子:pN(预测收益 X)。这只是按公式推出来的参考,你可以不跟。"不押时写明原因。 -3. **选批历史**和各次运行结果,包括合法化扣掉的分和资源用量。 -4. **战绩**,按人、分正向与消融写;偏高、偏低、穿上沿、穿下沿都在分数原值上判,不按任务方向翻转: +3. **诊断历史**:每轮的诊断解释、诊断实验和实测分数,每条解释在每个实验上确认还是否定,没做的实验和原因,外加一行"程序按诊断推出的方向:dN(实测 +X)。这只是按公式推出来的参考,你可以不跟。"本轮没有诊断时写明原因。 +4. **选批历史**和各次运行结果,包括合法化扣掉的分和资源用量。 +5. **战绩**,按人、分正向、诊断与消融写;偏高、偏低、穿上沿、穿下沿都在分数原值上判,不按任务方向翻转: - 中位数偏高几次、偏低几次; - 被穿过上沿几次、下沿几次; - 包住几次; - "作者自评 vs 大家合并"那一栏,只收已经跑过、有有效成绩的候选。 -5. 因为基线变了而离开候选池的旧候选名字。 +6. 因为基线变了而离开候选池的旧候选名字。 ### 6.11 常数与参数 @@ -598,6 +649,8 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p | u、衰减 r | 0.5、0.5 | 方法参数 | | 第零轮讨论次数 | 2 | 可配置(1 或 2) | | 修复次数上限〔自定,取自参考项目〕 | 1 | 方法参数 | +| 每人每轮诊断实验上限 A | 2 | 方法参数 | +| 一次诊断最多做几个实验 D | 4 | 方法参数 | | 轻量检查(每个实现任务)〔自定,取自参考项目〕 | 最多 2 次,每次 5 秒 | 方法参数 | | 采纳线上限 | ε | 跟随 ε | | 采纳线下限、剩余空间下限、比特格宽 Δ | ε/100 | 跟随 ε | @@ -609,6 +662,44 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p 方法参数只在做方法实验时才改。配置对话不逐项问,按本表的现行值写进配置文件,给用户看过;研究开始时,全部取值冻结进账本。 +### 6.12 诊断:方向收益、信息价值、选实验、结算 + +**成分与权重**:同 6.7。每条诊断解释算一个成分,开放预留也算一个成分。解释合起来占 1 − λ,研究者之间等权,同一个人的几条解释平分他那一份;开放预留占 λ。每个成分对每个诊断实验都有一个分布:解释用它自己的三个数补上尾巴后的折线,开放预留用这个实验的均匀分布(6.3)。同一个成分里,各实验之间互相独立。 + +**方向收益**:设当前基线分数为 b,诊断实验 d 实测为 x,往这个方向走的收益是 + +g_d(x) = x − b + +越小越好的任务按 6.1 换算成改进量。它量的是"做了这件事比现在高多少",也就是这个方向还剩的空间。另有一个选项"这几个方向都不走",收益为 0。 + +**信息价值**:做实验组合 S 的价值为 + +VOI(S) = E_{S 的结果}[ max(0, max_d E(g_d | S 的结果)) ] − max(0, max_d E(g_d)) + +- max_d 取遍合并后的全部诊断实验,包括没选进 S 的。 +- 成分权重的更新、做了的实验用实测、没做的实验用新权重加权平均,以及积分方法,都同 6.7。 + +**价值减成本**: + +- 价值(S) = u × m′ × VOI(S)。u、m′ 同 6.7,其中 R̂ = ⌈(余额 − 1) ÷ 每批上限⌉。 +- 成本 = 2ĝ₀ × \[(K + 1) ÷ (K + 2) − K ÷ (K + 1)\],K 是每批上限,ĝ₀ = max(0, max_d E(g_d))。不管做几个实验,诊断都只占一次运行,所以任何非空组合的成本都相同。 +- 净值(S) = 价值(S) − 成本。 + +**选实验**: + +1. 余额不到 2 次时不诊断。 +2. 合并后的实验不超过 D 个时,只看"全做"这一个组合;超过 D 个时,看所有恰好 D 个实验的组合。多做一个实验,信息价值只会不变或变大,成本又不变,所以只比较装满的组合。 +3. 取净值最大、并且净值 > 1e-12 的组合。净值相差不到 1e-12 的视为相同,按实验编号从小到大比。都不大于 1e-12 时,本轮不诊断。 +4. 没选中的实验记"没做",写明原因("放不下"或"信息价值不足以抵过成本"),附上含这个实验的组合里净值最大的那个净值。没做的实验以后不补,研究者下一轮可以重新提。 + +**结算**: + +- 每个实验的结局:有效分数,或"证据不足:原因"(跑崩、超时、没有产物、修不了、核验不通过)。证据不足的实验不判、不记账。 +- 每条诊断解释在每个有效实验上,实测落在它自己的 \[q₁, q₉\] 里面(含两端)记确认,落在外面记否定。确认与否定只是这个实验上事前预测的记录,不代表解释为真的概率。 +- 世界比特和惊讶按 6.9。 +- **诊断推出的方向**:按有效实验的实测更新成分权重(实测落在所有成分范围之外时保持起始权重,同 6.8);有效实验用实测换算收益,其余实验用新权重估。收益最大的实验就是诊断推出的方向,记下实验编号和收益;最大收益不为正时,记"诊断没有指出能涨分的方向"。它只写进信念本作参考,不强制。 +- 每轮最多一次诊断结算。 + --- ## 七、预算与扣次 @@ -622,7 +713,7 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p **什么时候扣次数** -- 基线、正向候选、消融格,都按实际启动计入。 +- 基线、诊断、正向候选、消融格,都按实际启动计入。一次诊断不管做几个实验,都只算一次。 - 启动前先预留一次名额,确认进程已经启动,才扣一次。 - 启动后失败、超时、被取消,照样计数。 - 确认没有启动就取消的,退还名额;已经发生的准备成本照样记录。 @@ -633,23 +724,26 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p **什么时候开下一轮** - 余额至少还有 1 次,就开下一轮;余额为 0,研究结束。不设轮数上限。 -- 本轮正向的批量 k = min(每批上限, 余额)。 +- 诊断只在余额至少 2 次时做(见 6.12)。 +- 本轮正向的批量 k = min(每批上限, 余额),余额取诊断之后的。 - 消融最多测"余额 − 1"格,保证下一轮至少还能跑 1 次正向(见 6.7)。 - 最后一次正向如果用掉了全部余额,又采纳了多因子改法,这次采纳就没有消融,各格记"没测:剩余次数不够"。 -**示例**(推演,不是真实运行):运行次数 13,每批上限 2。消融选哪几格是假设的。 +**示例**(推演,不是真实运行):运行次数 13,每批上限 2,诊断开、消融关(现行配置)。诊断做不做、采纳与否都是假设的。 | 时点 | 用掉 | 余额 | 发生什么 | | ------- | ---: | ---: | ---------------------------- | | 基线 | 1 | 12 | | -| 第 1 轮正向 | 2 | 10 | 采纳一个 3 因子改法 | -| 第 1 轮消融 | 2 | 8 | 假设信息价值减成本选中 2 格;第 3 格记"没测" | +| 第 1 轮诊断 | 1 | 11 | 选中 3 个诊断实验,一次运行跑完 | +| 第 1 轮正向 | 2 | 9 | 采纳一个 3 因子改法 | +| 第 2 轮诊断 | 1 | 8 | | | 第 2 轮正向 | 2 | 6 | 没有采纳 | +| 第 3 轮诊断 | 0 | 6 | 假设大家的诊断解释预测一致,信息价值不抵成本,本轮不诊断 | | 第 3 轮正向 | 2 | 4 | 采纳一个 2 因子改法 | -| 第 3 轮消融 | 0 | 4 | 假设大家都押同一个因子,信息价值为 0,两格都记"没测" | -| 第 4 轮正向 | 2 | 2 | 没有采纳 | -| 第 5 轮正向 | 2 | 0 | 余额用完,研究结束 | +| 第 4 轮诊断 | 1 | 3 | | +| 第 4 轮正向 | 2 | 1 | 没有采纳 | +| 第 5 轮 | 1 | 0 | 余额不到 2 次,不诊断;正向跑 1 个候选,研究结束 | --- @@ -670,7 +764,7 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p - 圆心在正方形外,或者半径缩到 0 仍不合法,判为修不了。 3. 修完的分数如果比原分数还高,直接报错。 4. 每次运行多记三样:原违反量、原分数、合法化扣掉的分数。 -5. 跑崩、超时、没有产物、修不了的运行,照样扣次数,记为失败。正向运行出现这种情况不能被采纳;消融格记"证据不足"。 +5. 跑崩、超时、没有产物、修不了的运行,照样扣次数,记为失败。正向运行出现这种情况不能被采纳;诊断实验和消融格记"证据不足"。 **防作弊靠结构,不靠审查** @@ -699,8 +793,8 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p - **每个花钱的动作都先登记、再执行、再登记结果**,包括正式运行和模型调用。每次启动都走同一条恢复路径:从账本读出当前状态,找出已经登记、但还没有结果的动作,逐个核对。 - 正式运行能核对出"确认启动"或"确认没启动"的,按第七部分扣次数或退还;核对不出来的,记"状态未知"并停下。 - 模型任务还没有收下提交的,重新发起;已经收下提交的,以账本为准。 -- **驱动了实际动作的决定,一经写入,恢复时就按原决定走,不重算。** 这类决定包括:选批、测哪几格、入口分配、押的因子。还没写入的决定,由同一个纯函数从账本里的输入重新算出,结果相同。这里不用全局随机数;需要随机时,种子由研究编号、轮次、版本算出。 -- **同一格只结算一次**,同一条解释在同一格上只有一行账。重复读取、导入、恢复,或者换个编号重建同一次消融,都不会再记一次账。同一次运行服务于不同的比较时,记录共享同一个来源,不算成几份独立的证据。 +- **驱动了实际动作的决定,一经写入,恢复时就按原决定走,不重算。** 这类决定包括:选批、做哪几个诊断实验、测哪几格、入口分配、押的因子。还没写入的决定,由同一个纯函数从账本里的输入重新算出,结果相同。这里不用全局随机数;需要随机时,种子由研究编号、轮次、版本算出。 +- **同一格、同一个诊断实验只结算一次**,同一条解释在同一格或同一个实验上只有一行账。重复读取、导入、恢复,或者换个编号重建同一次消融,都不会再记一次账。同一次运行服务于不同的比较时,记录共享同一个来源,不算成几份独立的证据。 - **冻结的东西不可覆盖,更正一律追加记录。** 这包括协议、因子清单、因子位置表、范围、原始证据。冻结先于启动,这个先后关系在中断前后都要成立:中断前已经冻结的范围,仍然算事前预测;中断后才写的范围,不能冒充事前预测。 - **运行一旦启动,就按实测记账。** 跑完才发现实现有错,也不标为无效重跑。 - **不支持中途作废重做某一轮**,也不支持替换提示词模板、放弃某个阶段。想重来,就另开一份新研究。 @@ -729,7 +823,12 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p ## 十一、可换的规则与对照组 -做方法实验时,下面两个决策点可以换规则。研究开始时,程序把配置翻译成"这份研究的步骤清单"和"每个决策点用哪条规则",存进账本。 +做方法实验时,下面两个步骤可以开关,两个决策点可以换规则。研究开始时,程序把配置翻译成"这份研究的步骤清单"和"每个决策点用哪条规则",存进账本。 + +**步骤开关** + +- 诊断(4.3 诊 1–诊 4):开或关。现行配置开。 +- 消融(4.3 ⑬–⑰):开或关,开时写选格规则。现行配置关。 **选批规则** @@ -743,13 +842,13 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p - 随机抽同样多的格:格数取"信息价值减成本"对同一输入会选的格数;〔自定〕 - 都不测。 -**对照组(暂不实现)**:步骤开关(关掉消融、挑刺与回应、第零轮或第一次预测)和"朴素循环"(几位研究者各交提案、不预测不挑刺、随机挑几个去跑、留下最好的)是给论文准备的对照实验。用户 2026-10-02 定:完整流程在本项目里跑稳之前先不做,要做时再按当时的方法补进这一节。原始设计见参考项目设计-16 第 7.3 节。 +**对照组(暂不实现)**:其余步骤开关(关掉挑刺与回应、第零轮或第一次预测)和"朴素循环"(几位研究者各交提案、不预测不挑刺、随机挑几个去跑、留下最好的)是给论文准备的对照实验。用户 2026-10-02 定:完整流程在本项目里跑稳之前先不做,要做时再按当时的方法补进这一节。原始设计见参考项目设计-16 第 7.3 节。 --- ## 十二、已知局限 -1. 方向收益量的是已经拿到的分数,当成收益用会估高。靠"押的因子、预测收益、下一轮实际涨幅"这几项记录,在多份研究之间检查。 +1. 消融的方向收益量的是已经拿到的分数,当成收益用会估高。靠"押的因子、预测收益、下一轮实际涨幅"这几项记录,在多份研究之间检查。 2. 因子怎么划由作者决定,只靠"拿不准就算因子"和挑刺把关;"延续"写错了也察觉不到。 3. 保障的定义仍然要靠读代码来判断。答案路径和实验员的提醒能在事后发现问题,但不能在事前保证。 4. 消融中发现的新基线,其余因子的作用是在原来的完整代码上测出来的。因子之间有交互时,两者会不同,信念本里会写明"测于完整代码"。 @@ -757,4 +856,7 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p 6. 第一次预测估的是原始提案,和最后真正跑的冻结协议可能有出入,所以两次预测的对比里,也混着"协议被改过"这一层。 7. 所有研究者都认为下一步该在同一个因子上继续时,信息价值严格为 0,这次采纳的因子就不测,没有"关掉它少多少分"的实测。导出里会记下"没测"和净值,真实运行后看这种情况出现得多不多,再决定要不要把知识本身的价值算进信息价值。 8. 一份研究只有十来次运行、一到三次采纳,所有比较都只能当案例来讲。 +9. 诊断实验是在已有答案上接着算、和别的实验平分一次运行的时间,它量到的空间和一份候选从头跑满时限能拿到的不一样。靠"诊断推出的方向、它的收益、本轮沿这个方向的候选实测"这几项记录,在多份研究之间检查。 +10. 所有诊断解释对各实验的预测都一样时,信息价值很小,本轮不诊断;大家一致地错了,也就没有机会测出来。开放预留是唯一的余量,真实运行后看这种情况出现得多不多。 +11. 程序不强制研究者沿诊断推出的方向提案。诊断指出了方向、却没有人沿它提,账本里查得出来。 diff --git a/docs/结构.md b/docs/结构.md index 53786a1..9f1c70a 100644 --- a/docs/结构.md +++ b/docs/结构.md @@ -94,6 +94,9 @@ ``` 1. 开轮:放信念本,处理留池候选 + 1a. 诊断(余额至少 2 次):诊断解释与实验 → 判重合并 → 诊断预测 → 选诊断实验 → + 实现 → 核验 →(不通过:修复 → 再核验)→ 一次正式运行 → 诊断结算 + 〔规则:信息价值减成本〕 2. 提案 3. 判重合并 4. 第一次预测(看原始提案) @@ -104,7 +107,7 @@ 9. 对每个入选候选:实现 → 核验 →(不通过:修复 → 再核验)→ 正式运行 10. 整批公开,记分数账和信息账 11. 采纳 -12. 若采纳的改法有 2 个以上因子: +12. 若消融开着、而且采纳的改法有 2 个以上因子(现行配置消融关): 列格 → 解释 → 选格 → 对每个选中的格:消融实现 → 核验 → 运行 → 结算 〔规则:选格规则〕 13. 收尾,更新信念本 @@ -120,6 +123,7 @@ | 2. 开轮到选批 | 4.3 ①–⑧(选批由用户 2026-10-03 定并进来) | 第 1 轮的整体研究质量(任务书 14):提案在研究路径上处在哪一步、多样性与判重、提案质量、挑刺与回应、预测是否合理、选批、过程健康;同一轮的提示词按调研结论先诊断再改 | 不回放(用户 2026-10-03 定)。参考项目高分运行(12-real-2、14-real-1、15-real-1、15-tight-2、16-real-1)第 1 轮的文字和我们的 3 次运行一起去掉来历,交全新上下文的审阅者按同一套方面打分比较 | | 3. 实现到采纳 | ⑨–⑫ | 扣掉的次数等于确认启动的运行数;修复用完不跑、不扣、记事件 | 15-tight-2 第 1 轮的修复 | | 4. 消融到收尾 | ⑬–⑱ 与研究结束 | 解释冻结早于任何一格启动;每格只结算一次 | 不回放(用户 2026-10-04 同意)。从头真实跑 3 份完整研究到余额用完,当四部分合起来的验收;消融与收尾和参考项目 15-real-1、15-tight-2、16-real-1 并排看 | +| 5. 诊断(任务书 18) | 4.3 诊 1–诊 4;消融默认关 | 诊断预测冻结早于诊断运行启动;一次诊断只扣一次、只结算一次 | 不回放。从头真实跑 3 份完整研究,和任务书 17 的 B、D(没有诊断、消融开)并排看 | **怎么验证**(用户 2026-10-03 定):一律用真 Jev、真 Docker,不做假的 Jev、Docker、任务,flow 不为此开替换口子。同样的输入真实跑几次,结果都符合要求就算通过;真实运行里没出现过的情况不专门造出来测。用户原话:"我建议用一律用真 Jev、真 Docker。因为其实我们现在是在做科学研究,不是在开发程序……我们只需要重复运行多次"。模型一侧两种都做: @@ -136,7 +140,7 @@ **全部只追加。** 所有记录放在同一张表里,每一行是:序号(自动递增,就是时间先后)、种类、内容(JSON)、内容的哈希。整张表禁止修改、禁止删除,由数据库触发器保证。要更正就追加一条新记录;"开"和"关"、"替换"也都写成新记录。 -恢复时只核对、不重做写入(CLAUDE.md"中断后怎么恢复"),所以记录照写就是,不需要通用的去重。有自己编号、按定义只发生一次的记录,按编号加数据库唯一约束,重复了就报错:阶段开、阶段关、运行登记、确认启动、运行结果、模型调用开始、模型调用结束、消融结算(按轮次:每轮最多采纳一个改法,所以最多一次消融)。没有这种编号的记录(提交的各个版本、事件、用量)照写。前后顺序(比如启动前要先登记)由 flow 的同一个入口保证,ledger 不查。运行编号由 flow 起;确认没启动、退还名额后要重试,就起一个新编号。 +恢复时只核对、不重做写入(CLAUDE.md"中断后怎么恢复"),所以记录照写就是,不需要通用的去重。有自己编号、按定义只发生一次的记录,按编号加数据库唯一约束,重复了就报错:阶段开、阶段关、运行登记、确认启动、运行结果、模型调用开始、模型调用结束、消融结算、诊断结算(按轮次:每轮最多一次)。没有这种编号的记录(提交的各个版本、事件、用量)照写。前后顺序(比如启动前要先登记)由 flow 的同一个入口保证,ledger 不查。运行编号由 flow 起;确认没启动、退还名额后要重试,就起一个新编号。 | # | 记录 | 内容 | 谁写入 | | --- | --- | --- | --- | @@ -145,10 +149,10 @@ | 3 | 提交 | 各种提交的每一版:入口、讨论、志愿、提案、两次预测、挑刺、回应、解释、收尾、实现、核验:阶段关闭后以最后一版为准,此后由 ledger 拒绝再写。私人笔记的每一条:不属于任何阶段,以最后写入的一条为准。每一版带收下时用到的 Jev 判断(含原始概率和结论,没用到 Jev 的为空)。被退回的提交也记,附对象(同提交的 target:候选、原提案或消融格,没有对象的为空)、退回理由和用到的 Jev 判断 | flow(经 submissions 判定后) | | 4 | 冻结协议 | 每个候选的冻结版本:方法.md 4.3 ⑥ 列的因子清单、保障清单、指标登记、正文、实现条款,以及轮次、出发的基线、合并了哪些原提案。答复不在其中,留在回应或统一的提交记录里(用户 2026-10-03 定) | flow(主体由 submissions 拼) | | 5 | 作者自评 | 封存时的三个数;解封时追加一条解封记录 | flow | -| 6 | 冻结代码 | 每份候选代码和消融格代码的版本号,以及因子位置表 | flow(版本号由 workspace 给出) | +| 6 | 冻结代码 | 每份候选代码、诊断程序和消融格代码的版本号,以及因子位置表、诊断实验位置表 | flow(版本号由 workspace 给出) | | 7 | 运行 | 每次正式运行三条:登记要跑(占名额);确认启动(扣次);结果(分数、合法化、指标、答案路径、资源) | flow(结果由 runner 与 tasks 给出) | -| 8 | 决定 | 程序做的每个决定:选批、采纳、选格、押的因子、入口分配、判重合并。每条存规则名、规则版本、方法参数、种子、全部输入、输出;用到 Jev 的(判重合并),输入里带 Jev 的原始概率 | flow(由 rules 计算) | -| 9 | 结算 | 每格的结局、撑几成、配合关系标签、每条解释的确认或否定、世界比特、惊讶 | flow(由 rules 计算) | +| 8 | 决定 | 程序做的每个决定:选诊断实验、选批、采纳、选格、押的因子、入口分配、判重合并(提案和诊断实验)。每条存规则名、规则版本、方法参数、种子、全部输入、输出;用到 Jev 的(判重合并),输入里带 Jev 的原始概率 | flow(由 rules 计算) | +| 9 | 结算 | 消融:每格的结局、撑几成、配合关系标签、每条解释的确认或否定、世界比特、惊讶。诊断:每个实验的结局与实测、每条诊断解释的确认或否定、世界比特、惊讶、诊断推出的方向 | flow(由 rules 计算) | | 10 | 用量 | 模型调用三条:开始(附这次任务的全部材料)、每次回复的用量、结束(带这次调用的墙钟时间;中断后恢复时补写的结束记录,结局记出错、原因写"进程中断",墙钟时间记测不到)。正式运行的资源用量记在运行结果里。只记录 | flow(用量由 agents 交出) | | 11 | 事件 | 违规记录、"按配置跳过"、"没测"及原因、停下的原因 | flow | diff --git a/任务书/18-诊断.md b/任务书/18-诊断.md new file mode 100644 index 0000000..4f34ebb --- /dev/null +++ b/任务书/18-诊断.md @@ -0,0 +1,347 @@ +# 任务书 18:诊断(每轮提案之前,在当前基线上做诊断实验) + +做完以后,每一轮在提案之前多走一段诊断: +1. 研究者写诊断解释和诊断实验; +2. Jev 合并重复的实验,研究者对每个实验交三个数; +3. 程序用信息价值减成本,定这轮做不做、做哪几个实验; +4. 实验员把选中的实验写进一份诊断程序,核验员核对,然后跑一次正式运行; +5. 程序结算,结果放进本轮提案以及之后全部研究者任务的材料。 + +同时,消融改成默认关闭。 + +方法以 `docs/方法.md` 为准,这次改了这几处:第一部分、第二部分、4.3(开轮之后的"诊断"一段,以及 ② ⑨ ⑫)、第五部分、6.3、6.9–6.11、新增的 6.12、第七、九、十一、十二部分。`docs/结构.md` 第三部分的步骤清单、第四部分的账本表、"flow 分几部分"表的第 5 行也同步改了。 + +一份任务书里有三块,**按顺序做**: + +1. **第一块:写代码。** +2. **第二块:写诊断这一段的提示词。**这一块单独提交,提交以后才跑第三块。 +3. **第三块:真实运行和评估。**从头真实跑 3 份完整研究,按研究质量评估。 + +本任务书已由用户和监督者在 2026-10-05 一起确定。下面说的"监督者",是在参考项目目录里和用户讨论设计的另一个会话。 + +## 开工前先读 + +- `CLAUDE.md`:全部。 +- `docs/方法.md`:上面列的改动处全文,以及 6.7(诊断的数学规则大部分沿用它)、6.8、第三部分(材料顺序)。 +- `docs/结构.md`:第二、三、四、五部分;第八部分 flow、rules、materials、submissions、tasks、runner、workspace、jev 各节。 +- `docs/调研/提示词.md`:第二块必读。 +- `任务书/17-flow-4-消融到收尾.md`:消融这一段的写法。诊断的实现、核验、修复、运行、结算,大体照着消融和正向的写法来。 +- `WORK_LOG.md`:"未完成"里的"B、D 两份完整研究的分析"和"文献精读"两条。这两条说明了为什么要加诊断。 +- 论文原文在 `reference-paper/`(不进仓库)。第二块用得到的:`human-practice/mly.txt`(Ng)、`human-practice/platt1964.txt`、`ai-scientist/popper.pdf`、`ai-scientist/ai-coscientist.pdf`、`llm-search/AdaEvolve_2602.20133.txt`。 + +## 一、第一块:代码 + +### 1.1 配置与步骤清单 + +- `flow` 里加一个 `diagnosis`,写法同 `ablation`: + - `{ enabled: false }`; + - 或者 `{ enabled: true, perResearcher, maxExperiments }`:每人每轮诊断实验上限 A,现行值 2;一次诊断最多做几个实验 D,现行值 4(方法.md 6.11)。 + - 两个都是方法参数。 +- `ROUND_STEPS` 在 `carryOverPool` 和 `proposal` 之间加诊断的步骤。名字照现有的风格自己起,至少分开这几步: + 1. 诊断解释与实验; + 2. 判重合并; + 3. 诊断预测; + 4. 选诊断实验(决策点,带规则); + 5. 实现、核验、修复; + 6. 诊断运行; + 7. 诊断结算。 +- 诊断关掉时,这几步都标"按配置跳过"。 +- **消融关掉时,`explanation` 也跟着跳过**(方法.md 4.3 ⑫)。改 `steps.ts` 里那句注释,以及 schema 里 `ablation.enabled: false` 的说明。 +- 选诊断实验的规则只有一条,就是"信息价值减成本"。照选格的做法登记进 rules 的登记表,步骤清单里带规则名和版本。不为它另造别的规则。 +- 验收配置 `eval/round-zero/research.json` 不改。第三块用的配置放在 `eval/diagnosis/research.json`:照抄这份,改两处:诊断开(A = 2,D = 4),消融关。 + +### 1.2 rules:诊断的数学(方法.md 6.12) + +**要算的东西** +- 成分模型; +- 方向收益 g_d(x) = x − b,外加一个收益为 0 的"都不走"; +- 信息价值; +- 价值减成本; +- 选实验,只比较装满的组合; +- 结算:每个实验的结局、确认与否定、世界比特、惊讶、诊断推出的方向。 + +**复用,不另抄一份公式** +- 6.7 的成分权重、权重更新、精确积分和部分格网格,现在写在 `value.ts` 里,是按"撑几成"刻度写的。把它抽成能接两种"实测 → 收益"换算的形式: + - 消融:撑几成乘 h; + - 诊断:x − b,再和 0 取大。 +- 消融的数字必须**逐位不变**。拿现有的消融测试和 B、D 账本里的选格决定重算对照。 +- 确认与否定、世界比特、惊讶,直接用 `ablation.ts`、`bits.ts` 现有的函数。 + +**和消融不同的地方** +- 有一个"都不走"的 0 选项:VOI 公式里两处都和 0 取大。 +- 成本固定按 1 次运行算,ĝ₀ 取 max(0, ·)。 +- R̂ = ⌈(余额 − 1) ÷ 每批上限⌉。 +- 只比较装满的组合:实验数 ≤ D 时只有"全做"一个组合;超过 D 时,比较所有恰好 D 个的组合。 +- 平票时按实验编号比。 + +**选实验的决定记录**要附上:全部组合的价值、成本、净值,选中的组合,以及每个没选中的实验的原因和净值。数字写到能离线重算的程度,同选格(方法.md 6.7、结构.md 第五部分第 2 条)。 + +**战绩和信息账**的 Phase 加一个 `diagnosis`,按人、按正向 / 诊断 / 消融分开报(方法.md 6.9、6.10)。 + +**测试**用独立算出的预期值,不复制实现的公式。至少覆盖: +- 两条解释对一个实验预测相反时信息价值为正,预测一样时信息价值为 0(只剩开放预留的部分); +- 余额 < 2 时不诊断; +- 实验数超过 D 时只比较装满的组合; +- 证据不足的实验不判、不记账; +- 诊断推出的方向:全部实验收益不为正时,记"没有指出能涨分的方向"。 + +### 1.3 vocab、submissions、jev + +**vocab:新加四种提交**(方法.md 第五部分表里"诊断"三行): +- 诊断解释与实验; +- 诊断预测; +- 诊断实现(修复同一种); +- 诊断核验。 + +字段说明照现有提交的写法:每样都有出口。 + +**submissions 收件时查:** +- 解释 1 至 M 条,实验 1 至 A 个; +- 诊断预测覆盖"自己每条解释 × 每个合并后的实验",不多不少,三个数严格递增; +- 诊断实验登记的指标只能是"缺了只记缺失"; +- 诊断核验的逐个实验结果覆盖全部选中的实验。 + +**jev:** +- 诊断实验判重:新加一个问法,照 `dedup` 写,对象是"在当前基线上动一处的诊断实验"。阈值暂用 `dedup` 的 0.3,等真实数据再校准,照实写进注释。 +- 诊断实验交上来时,查"改动了评测、自相矛盾、太含糊":直接用 `freeze` 那三问。如果问法里的措辞只适合冻结协议,就照 `dedup` 的办法加一个变体,不改原问法。 +- 诊断程序的代码改动:直接用 `diff` 那五问。 + +### 1.4 tasks、runner、workspace:一次运行跑几个实验 + +**运行方式** +- 一次诊断运行就是一个容器、一次登记、一次确认启动、一次扣次。runner 的现有规矩(限时、限核、断网、记资源、按容器名恢复)照旧。 +- 总时限、核数照任务规定(填圆:120 秒、1 核)。容器里由任务的 harness 按顺序跑每个实验,每个实验分到"总时限 ÷ 实验数"。 +- harness 记下每个实验实际用了多久、是不是超时。一个实验超时或跑崩,不影响后面的实验。 + +**每个实验从哪里出发** +- 从当前基线的代码,以及**产出当前基线的那次正式运行的原始产物**出发。 +- 这份产物在运行目录里,用只读的方式交给每个实验。 +- 怎么交(文件路径、参数还是环境变量),由 tasks 定,写进 `TASK.md` 给实验员看。 + +**判分** +- 每个实验交出的答案,用任务现有的校验器和合法化**单独判分**。 +- 判分结果按实验分开记在这一次运行的结果里:分数、合法化、登记的指标、用时、结局。 +- 资源用量记整次运行的。 + +**workspace** +- 诊断程序存成一个版本,记进冻结代码记录,同时附上每个实验的位置表。 +- 实验员的工作目录从当前基线代码取出,再放进那份原始产物。 + +**改动范围** +- 改 tasks 和 runner 时,正向运行、消融运行、基线运行的行为一个字节都不能变。 +- 用现有测试,加上任务书 17 的一次正向运行定义前后对照来证明。 + +### 1.5 ledger、materials + +**ledger** +- 决定加一种:选诊断实验。 +- 结算加一种:诊断结算,按轮次唯一。 +- 写入时要拒绝"这次诊断运行已经确认启动,才冻结诊断预测",照消融拒绝晚冻结解释的写法。 + +**materials:给谁看什么**(方法.md 第三部分、4.3 诊断一段) + +- **诊 1** + - 当前基线的代码,产出它的那次运行的答案、分数、指标,信念本,上一轮收尾; + - 第 1 轮还要放第零轮的全部记录。 +- **诊 2** + - 合并后的实验清单(标明作者),全部诊断解释,自己的解释; + - 看不到别人这一步交的数。 +- **实现、修复** + - 选中的实验原文,当前基线代码,原始产物的路径; + - 修复时还要放核验意见。 +- **核验** + - 选中的实验原文,以及"当前基线 → 诊断程序"的改动,加上位置表。 +- **从 ② 提案开始,本轮之后全部研究者任务** + - 公共材料里加"本轮诊断结果"一节:每个实验做了什么、实测、用时、结局,每条解释确认或否定,诊断推出的方向; + - 本轮没诊断时,写原因。 +- **实现正向候选的实验员** + - 本轮有诊断时,材料里给出诊断程序代码的位置(只读),注明"冻结协议引用诊断实验时作参考"。 +- **信念本** + - 加"诊断历史"(方法.md 6.10 第 3 条)。 + +**规模** +- materials 现在 1930 行,上限 1950,这次一定会超。新上限由用户定,见第五部分。 +- 先把诊断材料写清楚,再看能不能和消融材料共用写法。 + +### 1.6 flow + +**怎么走** +- 照步骤清单走。方法.md 4.3 诊断一段每一条都要落实。 +- 余额 < 2 时,诊 1–诊 4 都不做:不开阶段,不写记录,从余额就能算出"本轮没有诊断"。这一点和"无采纳则没有消融"一样。 +- 诊 3 定了"不诊断"时,诊 4 不做。 +- 实现:一个实验员任务,对象是本轮诊断。 +- 核验:一个核验员任务,交逐个实验的结果。 +- 修复:只修不通过的实验,次数上限 `maxRepairs`。用完仍不通过的实验从这次诊断里拿掉,记"证据不足:核验不通过"。一个都不剩时,写事件,不跑,不扣次。 +- 拿掉实验时,诊断程序里对应的代码怎么处理,你定。要求是:跑的只是剩下的实验,而且核验员核过的代码不再改动。 +- 诊断运行用 `formalRun`,用途写 `diagnosis`,对象是本轮诊断。 +- 结算、写信念本之后,才开 ② 提案。 + +**阶段编号**照消融的写法按"第几次"排。 + +**"做完以哪条记录为准"**补进结构.md 第八部分 flow 一节的表。 + +**规模** +- flow 现在 2118 行,预计加 400–700 行,上限照结构.md 第七部分(3500)。 + +### 1.7 审阅 + +写完后另派一个全新上下文的子 Agent 审阅一轮,只看这几处: +- 诊断运行的登记、扣次和恢复; +- 选诊断实验和诊断结算的输入,是不是照 rules 的类型拼对了; +- 诊断预测冻结早于运行启动; +- 拿掉实验以后跑的是不是剩下的实验; +- 消融的数字是不是逐位不变; +- 正向、消融、基线运行定义是不是没变。 + +审阅只防 CLAUDE.md"罕见情况怎么办"里的三类情况,提了别的照列不改。 + +## 二、第二块:诊断这一段的提示词 + +### 2.1 范围 + +**要写的** +- 新的任务提示词:诊断解释与实验、诊断预测、诊断实现、诊断修复(如果修复能共用实现那份,就不另写)、诊断核验; +- 四种新提交的字段说明(vocab 的 `description`)。 + +**要改的** +- `prompts/roles/researcher.md`:加上诊断这项工作。只加诊断需要的几句,其余不动。 +- `prompts/roles/experimenter.md`、`verifier.md`:加上诊断程序怎么写、怎么核。只加几句。 +- `prompts/tasks/proposal.md`:加一句,用上本轮的诊断结果。 + +**不改的** +- 其余提示词; +- `tasks/circle_packing/` 下除 `TASK.md` 里"诊断实验怎么拿到原始产物"那一段以外的内容。 + +### 2.2 诊断提示词要让模型做到的事 + +照 `docs/调研/提示词.md` 第三、四部分写:引导怎么想,不做必填的结构化清单。诊断这一段要讲清楚以下几点。例子只用和题目无关的领域。 + +1. **诊断问的是"剩下的空间在哪",不是"上一步功劳怎么分"。**做法是在当前程序上只动一处,看分数怎么变: + - 换成明显更强、不计时间的版本,看这一步后面还藏着多少; + - 拿掉它,看它现在撑着多少; + - 换一种做法; + - 放宽一个限制。 + 参考 Ng《Machine Learning Yearning》第 44–45、53–57 章的"优化验证测试"和"按部件看上限",原文是 `reference-paper/human-practice/mly.txt`。Platt 1964 的"强推断"(同一目录)讲的也是这件事:先列几种互相竞争的解释,再设计能排除其中一些的实验。 +2. **好的诊断实验,不同解释对它的预测差得远。**大家都预测"涨不了多少"的实验,测了也不改变下一步。研究者之间意见不同的地方最值得测。 +3. **每条诊断解释要写什么样的实测会推翻它。**写不出来,说明这条解释还不能被检验。 +4. **以前否掉某条路线的理由,本身也是一条没测过的看法,**可以拿来设计诊断实验。 +5. **诊断实验只动一处,**交出能判分的答案,用时要放得进分到的那份时间。 +6. **实验员实现诊断实验时,照写法做,不顺手改进。**任务书 16 查过的"照规格实现"结论可以直接用。 + +### 2.3 怎么做 + +1. 读 `docs/调研/提示词.md`,以及上面提到的论文原文。 +2. 派子 Agent 再查两样。子 Agent 只读、不写 md,结论直接回复。 + - 让模型提出互相竞争的解释,并设计能把它们分开的实验,有哪些写法实际有效:POPPER 的证伪实验设计、co-scientist 的假设与评审、AdaEvolve 停滞时的元指导。原文在 `reference-paper/`,参考实现的克隆在 `/home/iomgaa/Projects/RivalBits/reference/`。 + - 同类系统怎么写"诊断当前瓶颈"的提示。 +3. 写。任务提示词里不写字段怎么填,那是字段说明的事。 +4. **自查泄露**:照任务书 17 第 1.2 节第 5 条,用填圆的关键词搜一遍改过的全部文件。关键词至少包括任务书 16、17 用过的那些,再加"联合""半径""LP""起点"。搜到就改掉,搜不到才算过。 +5. **先提交,再跑。**提示词单独提交一次。之后的真实运行全部用这一版,看到运行结果以后不再改提示词。 + +## 三、第三块:真实运行和评估 + +### 3.1 跑什么 + +- 配置用 `eval/diagnosis/research.json`(诊断开、消融关),从头新跑 3 份完整研究,一直跑到余额用完、停在"导出还没写"。 +- 3 份同时跑,同任务书 17 第 3.1 节。CPU 时间与墙钟时间之比照样列出。 +- 3 份里挑 1 份,在**一次诊断运行确认启动以后、出结果之前**,杀一次控制进程再启动。检查三件事: + - 恢复后没有重跑; + - 只扣了一次; + - 每个实验的结果都照常写进去,结算和后面的步骤照常走完。 +- 中途出错,照任务书 17 第 3.1 节处理。 +- 模型服务的内容审核拦下某份材料(任务书 17 的 E 那种情况)时,这份研究照方法停下,照实记,不改写模型交的文字,不换模型。 + +### 3.2 评估:研究质量 + +不设硬线,结果照实交给用户。 + +**第 1 样:诊断解释和诊断实验的质量。**每一轮的诊 1,派一个全新上下文的子 Agent,在**看不到诊断结果**的情况下读:诊断解释、诊断实验、诊断预测、当前基线代码与它的分数。回答: +- 解释说出了具体的瓶颈吗?写了什么实测会推翻它吗? +- 同一轮几位研究者的解释有没有真正不同? +- 每个实验是不是只动一处?是不是真能把几种解释分开? +- 有没有实验去测以前否掉过的路线的理由? + +**第 2 样:选实验。**每轮列出: +- 合并后的实验、各实验的事前合并范围、各组合的信息价值、成本、净值; +- 选了哪几个,或者为什么不诊断。 + +回答:选中的是不是大家分歧最大的;有没有因为大家意见一致而不诊断,出现了几次(方法.md 第十二部分第 10 条)。 + +**第 3 样:诊断实现照写法没有、核验员判得对不对。**每次诊断,派一个全新上下文的子 Agent 读:实验原文、当前基线代码、诊断程序、位置表、`concerns`、核验结论。回答: +- 每个实验是不是只动了写的那一处,有没有偷偷改进别的地方; +- 核验员该判不通过却通过的、不该判却判了的。 + +**第 4 样:诊断有没有改变走向。**这是这次最要紧的一样。每份研究每一轮一行: +- 诊断推出的方向和它的实测收益; +- 本轮提案里有几条沿这个方向;提案正文有没有引用诊断结果; +- 选批选没选沿这个方向的候选; +- 正向实测,以及沿这个方向的候选比诊断实测高还是低(方法.md 第十二部分第 9 条); +- 采纳了什么。 + +另列:诊断指出了方向、却没有人沿它提的轮次(第十二部分第 11 条)。 + +**第 5 样:预测准不准、分不分得开。** +- 诊 2 预测的落点四段和覆盖率,按人、合并分开报; +- 同一轮各实验合并中位数之间的差距,和任务书 17 里正向候选之间的差距(0.001–0.03)对比。 + +**第 6 样:整份研究的走向。**每份研究列: +- 每一轮:诊断做没做、几个实验;正向候选;采纳与分数;离已知最好还差多少; +- 分数随轮次的曲线。和任务书 17 的 B、D(没有诊断、消融开)并排,再并上参考项目 15-real-1、15-tight-2、16-real-1。 +- 每个跑过的正向候选一行,同任务书 17 第 3.2 节第 6 样的表。 + +**第 7 样:程序账目。**每份研究列: +- 确认启动的正式运行数(基线、诊断、正向分开)和余额减少的次数,两者应相等;最后余额为 0; +- 每次诊断:选了几个实验,核验几次、修复几次、拿掉了几个,跑了几个;每个实验的用时和结局; +- 诊断预测冻结早于诊断运行确认启动;每轮最多一次诊断结算; +- 余额 < 2 的那一轮没有诊断记录; +- 消融关着:没有消融阶段和解释阶段,账本里有"按配置跳过"; +- 杀进程那一次的三条检查。 + +### 3.3 怎么算通过 + +**程序部分必须过:** +- `npm run check`、`npm test` 全过; +- 3 份研究都跑到余额为 0、停在"导出还没写",阶段开关成对; +- 扣掉的次数等于确认启动的运行数; +- 杀进程那一次的三条检查都成立; +- 消融的数字逐位不变(1.2); +- 正向、消融、基线的运行定义没变(1.4)。 + +**研究质量不设硬线,照实交给用户。**质量不好时,先查是不是 flow 或 materials 写错了:抽一次诊断,看研究者、实验员、核验员"模型调用开始"里存的材料,是否符合方法.md 第三部分和 4.3 诊断一段。材料错了就修,修完重跑;材料对,就照实报告,不再改提示词。 + +## 四、正式代码和检验代码分开 + +照任务书 12 第四部分的 7 条。这次新加的检验代码放 `eval/diagnosis/`,能复用 `eval/full/`、`eval/lib/` 的就复用。运行目录、审阅结果放 `/home/iomgaa/inforsi-eval/<日期-名字>/`,不提交。 + +## 五、规模 + +| 模块 | 现在 | 这次 | +|---|---|---| +| flow | 2118 | 加 400–700,上限 3500 | +| rules | 1762 | 加 200–400,上限 2500 | +| materials | 1930 | 上限 1950 一定会超,新上限由用户定,监督者核对时写进结构.md | +| vocab | 1154 | 已超 1150,新上限由用户定,监督者核对时写进结构.md | +| 其余 | — | 照结构.md 第七部分 | + +写的过程中,哪个模块超过预计一倍,停下来检查。 + +## 六、文档 + +完成后更新: +- `docs/结构.md` 第八部分各模块新导出的函数、类型;flow 一节"做完以哪条记录为准"的表、"谁做、对哪个对象"的表、诊断的阶段编号;新加的 `eval:` 命令; +- `WORK_LOG.md`:"已完成"补一条。"关键决定"不用你写,监督者核对时补。 + +不新建 md 文件。方法.md 不用改,有和它对不上的地方,写进报告。 + +## 七、验收与报告 + +做完后本地提交,然后在回复里交一份报告。报告写正文,不把日志全文附进去,日志放在证据目录,报告里给路径。 + +1. 提交号:提示词那次单独列;新增和修改的文件,分 `prompts/`、`src/`、`tests/`、`eval/` 列;各模块行数。 +2. 提示词:每份写了或改了什么、依据哪条原则或调研结论;泄露自查的关键词和结果;再调研派了哪些子 Agent、查到了什么。 +3. `npm run check`、`npm test` 的结果,完整输出放证据目录。消融逐位不变、运行定义不变的对照结果。 +4. 程序部分:3 份研究的研究目录、轮数、停下原因;杀进程那一次的三条检查。 +5. 研究质量:第 3.2 节七样的表和结论。第 4 样单独写一段结论:诊断有没有改变走向。 +6. 你和这份任务书、结构.md、方法.md 不一致的地方,以及为什么。 +7. **规则不清楚的地方**:哪里让你犹豫、哪里你是靠猜的。没有就写"没有"。没有真实证据的可能情况,在这里提一句就够,不写进 WORK_LOG。 +8. 正式代码和检验代码分开的自查,逐条写"做到了"或"没做到、为什么"。