diff --git a/CLAUDE.md b/CLAUDE.md index c53d46d..cdf8a57 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,7 +10,7 @@ |---|---| | 研究方法:流程、公式、信念本、记账含义 | `docs/方法.md` | | 代码结构与各模块的预期规模 | `docs/结构.md` | -| 配置字段与默认值 | 配置的类型定义和校验代码;文档只解释含义,不抄数值 | +| 配置字段 | 配置的类型定义和校验代码;文档只解释含义,不抄数值 | | 当前进度、下一步、运行中的任务 | `WORK_LOG.md` | | 同类系统和书籍的调研 | `docs/调研/` | | Pi 的接口与行为 | 本机安装的包、它的文档和实测 | @@ -62,6 +62,10 @@ 以下不防:用户本人中途改配置、改提示词、同时开两个进程、随时终止;有人在同一账号下故意用 shell 绕开规则;出错后马上就能看出来的问题。 +### 不设默认值 + +配置的每个字段都必填,函数参数不写默认值;可以没有的值写 null,不靠省略。缺了就报错,不替人补。默认值会掩盖错误:字段名拼错、文档改了代码没跟上,研究照样跑完,没人发现用的是哪个值。方法.md 6.11 标"固定"的常数是方法本身的一部分,不算默认值。 + ### 错误怎么处理 - **外部错误**,比如模型接口超时、网络断开、子进程被系统杀掉:只在调用外部服务的那一处做有限次重试,仍然失败就把这一步记为失败,写明状态。 @@ -127,7 +131,7 @@ - 研究者、实验员、核验员都用 Pi 子会话、Pi 工具和 Pi 的模型服务配置,不自己写直接调用模型接口的 Agent。 - Pi 固定用本机的 `@earendil-works/pi-coding-agent` 0.85.1,Node ≥ 22.19。只照这个版本的包和文档写代码,不升级全局 Pi。 -- 角色模型默认 glm-5.3。 +- 角色模型用 glm-5.3,在配置里写明。 - 每个角色有一份自己的角色提示词,同一角色的所有任务共用;每类任务另有一份任务消息,写目标、要求和要交什么。 - 实验员有完整的文件和 shell 权限,因为它的工作就是写代码、跑代码。研究者和核验员只有只读工具和提交工具。这是分工,不是安全边界。 - 提示词只引导模型怎么想,不设必填栏目。逼模型填栏目,它会为了填而编。只有程序确实要读取的值,才做成提交字段。 diff --git a/WORK_LOG.md b/WORK_LOG.md index 3ea63c2..e4c5ee0 100644 --- a/WORK_LOG.md +++ b/WORK_LOG.md @@ -28,6 +28,7 @@ - 账本改为一张只追加的表,全部记录都不能改(ca2cd52)。用户原话:"同意全部只追加"。 - 谁能看什么归 materials(按任务定材料,第一条消息和查询工具是同一份材料的两种给法),ledger 只存;只在"只能一次"处加唯一约束;Jev 不单独成记录,记在它判断的那件事里(0b0cbb0)。用户原话:"给到派的材料有哪些"和"一开始灌进去还是主动等派去查"是分开的事情;Jev"本质只是一种可以代替程序的判别器"。 - 有自己编号、按定义只发生一次的记录加唯一约束,重复就报错;记录之间的前后顺序检查一律不加,flow 调 ledger 是模块之间的调用,不算边界(493ea6d)。这是监督者提的处理,用户回复"同意";CLAUDE.md"罕见情况怎么办"第 2 条随之写明边界。 +- 整个系统不设默认值:配置每个字段必填,函数参数不写默认值,可以没有的值写 null(CLAUDE.md"不设默认值")。用户原话:"全部都不要默认值更好,甚至整个系统都不要默认值,因为默认值可能会掩盖错误"。 - 计算时间不再是预算,只记录;预算只有运行次数(42347e4)。用户原话:"CPU 秒不当预算但是要记录"。 - 解释的每格三个数改为可选,关掉消融时不交。用户原话:"同意 A:解释的 cells 去掉 minItems,改为可选"。 - rules 的约定(方法.md 没写死的地方):入池 P < 0.5 严格;采纳和消融中发现都要严格大于采纳线;成本用 max(0, ĝ₀);没测的格附"含它的最好组合"的净值;战绩在分数原值上判;编号一律按自然序比较。用户原话:"1–8 都同意"。消融成分权重跟随 λ、分歧量不掺开放预留,由用户改进方法.md(a050771)。 @@ -61,6 +62,7 @@ - 给 flow:确认启动前要先登记运行;模型调用要先开始再结束;阶段要先开再关;ledger 都不查。 - ledger 待顺手改(下一份涉及 ledger 的任务书带上):结算的唯一约束改按轮次(每轮最多一次消融,结构.md 第四部分已改),去掉 `ablation` 编号;私人笔记去掉版本号,以最后写入的一条为准(序号就是先后,版本号是程序推得出的栏目)。 - 给 materials:别人的"退回"记录不放进任何研究者的材料(退回的提案原样带着作者自评,不另拆封存)。 +- 给 agents:模型的思考档位必须写明,不用参考项目"写 null 表示用 Pi 自己的默认"那种写法。 - 给 agents、runner:"整个环境的用量"(实验员会话的 CPU、内存等)写这两个模块时再定记录种类。 - 写 plugin 时实测:源码导入路径带 `.ts` 扩展名,Pi 加载插件能否接受。 diff --git a/docs/方法.md b/docs/方法.md index 69d33e6..9003127 100644 --- a/docs/方法.md +++ b/docs/方法.md @@ -2,7 +2,7 @@ 这份文件是研究方法唯一的现行版本,代码里的数学规则、流程推进和记账都以它为准。 -- 文中的数值写的是现行值。可以改的标"可配置"或"方法参数";字段名和默认值以配置的类型定义为准。 +- 文中的数值写的是现行值。可以改的标"可配置"或"方法参数";字段名以配置的类型定义为准;配置里每个字段都必须写明,程序不补默认值。 - 标〔自定〕的条目,是开发中自己定的规则,用户还没有逐条确认。其余都是用户确认过的方法。 - 正文的来源是用户逐条认可的方法,各自的确认记录写在提交说明里。 @@ -604,7 +604,7 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p | 部分格积分的规模 | m^k ≤ 4,000,000,s ≤ 20 | 固定 | -方法参数只在做方法实验时才改,配置对话不会问。研究开始时,全部取值冻结进账本。 +方法参数只在做方法实验时才改。配置对话不逐项问,按本表的现行值写进配置文件,给用户看过;研究开始时,全部取值冻结进账本。 --- @@ -701,7 +701,7 @@ VOI(S) = E_{S 的结果}[ max_p E(收益_p | S 的结果) ] − max_p E(收益_p - **冻结的东西不可覆盖,更正一律追加记录。** 这包括协议、因子清单、因子位置表、范围、原始证据。冻结先于启动,这个先后关系在中断前后都要成立:中断前已经冻结的范围,仍然算事前预测;中断后才写的范围,不能冒充事前预测。 - **运行一旦启动,就按实测记账。** 跑完才发现实现有错,也不标为无效重跑。 - **不支持中途作废重做某一轮**,也不支持替换提示词模板、放弃某个阶段。想重来,就另开一份新研究。 -- **开发入口**:研究因为模型交不出合格提交而停下后,开发者可以修好提示词,在同一阶段只重新发起那一个任务。这个入口由配置开关控制,默认关闭,开发调试时才打开。〔自定:默认关闭〕打开过这个入口的研究,不能当验收证据。 +- **开发入口**:研究因为模型交不出合格提交而停下后,开发者可以修好提示词,在同一阶段只重新发起那一个任务。这个入口由配置开关控制,配置里必须写明开还是关:正式研究写关,开发调试时才写开。〔自定〕打开过这个入口的研究,不能当验收证据。 - **每个阶段结束时核对几条总账**,不符就停。例如:扣掉的次数等于已确认启动的正式运行数;每条证据只记一次账。 --- diff --git a/docs/结构.md b/docs/结构.md index 914173b..dd35f72 100644 --- a/docs/结构.md +++ b/docs/结构.md @@ -34,7 +34,7 @@ | 入口 | plugin(插件入口) | 用户在 Pi 里怎么操作:命令、状态显示、配置对话;文件锁;把各模块装配起来 | 装配时用到各模块 | | 组织 | flow(流程) | 按步骤清单推进研究;每次启动走同一条恢复路径 | ledger、rules、materials、submissions、agents、runner、tasks、workspace、config、jev | | 组织 | export(导出) | 导出给人看的格式 | ledger、rules、materials | -| 组织 | config(配置) | research.json 的字段、默认值、校验;把配置翻译成步骤清单 | 无 | +| 组织 | config(配置) | research.json 的字段和校验(每个字段必填,不补默认值);把配置翻译成步骤清单 | 无 | | 组织 | materials(材料) | 每个任务能看到哪些材料(方法.md 第三部分);第一条消息放哪些、什么顺序、怎么写;在这些材料范围内回答模型的查询 | ledger、rules | | 组织 | submissions(收件) | 一份提交收下还是退回:先程序检查,再问 Jev(字段定义在 vocab) | jev | | 外部 | ledger(账本) | 记录怎么存、怎么保证不可改、怎么从记录算出当前状态;花钱动作的登记 | 无 | @@ -144,7 +144,7 @@ Jev 是一个判别器,和程序检查地位相同,不单独成一种记录 |---|---|---| | 外部服务 | Pi 会话、Docker 运行器、任务、Jev | 接口。Jev 另配一个"永远判不同"的空实现,用来关掉判重 | | 决策规则 | 选批:批内最好期望、均匀随机。选格:信息价值减成本、全测、随机同格数、都不测。以后可能加合并方式 | 纯函数,登记在 rules 里的"名字 → 函数"表里,配置写名字 | -| 方法参数 | N、M、批量、运行次数、因子数上限、u、衰减、开放预留 | 配置值,不写成常数,也不用环境变量。分两层:用户配置(配置对话会问);方法参数(做实验时才改,配置对话不问) | +| 方法参数 | N、M、批量、运行次数、因子数上限、u、衰减、开放预留 | 配置值,不写成常数,也不用环境变量,每个都必须写在配置文件里。分两层:用户配置(配置对话逐项问);方法参数(做实验时才改,配置对话按方法.md 6.11 的现行值写进文件、给用户看过) | | 步骤开关 | 消融、挑刺与回应、第零轮、第一次预测 | 配置值,由 config 翻译进步骤清单 | | 模型与提示词 | 每个角色、每位研究者用哪个模型;提示词目录 | 配置值;账本记下每份提示词文件的哈希 |