feat: 诊断(任务书 18 第一块):诊断数学、四种提交、一次运行跑多个实验、账本与材料、flow 诊断各步
消融默认关,关掉时解释阶段一并跳过;选诊断实验用信息价值减成本。 eval/diagnosis/research.json 为第三块配置。vocab 字段说明的出口文字随提示词一起改,见下一次提交的 prompts/ 与同文件改动(本次含在内)。 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -22,6 +22,9 @@ type FactorRules = {
|
||||
/** 实现、修复、核验共用:冻结协议的实现条款(c1…)、因子(p1…)、保障短名。 */
|
||||
type FrozenItems = { candidate: string; clauses: string[]; factors: string[]; safeguards: string[] };
|
||||
|
||||
/** 诊断实现、修复、核验共用:本次诊断选中的实验编号(d1…)。 */
|
||||
type DiagnosisItems = { experiments: string[] };
|
||||
|
||||
/** 入口个数的范围(方法.md 4.2:2–3 个)。 */
|
||||
type EntryCount = { min: 2; max: 3 };
|
||||
|
||||
@@ -30,6 +33,16 @@ export type Checklist =
|
||||
| { kind: "discussion"; entries: EntryCount }
|
||||
/** minChoices = min(N, 入口总数)(方法.md 4.2 认领)。 */
|
||||
| { kind: "claim"; entries: string[]; minChoices: number }
|
||||
/**
|
||||
* 诊断解释最多 M 条、诊断实验最多 A 个(方法.md 4.3 诊 1);takenMetricIds 是新登记的指标短名不能用的编号
|
||||
* (最终指标、常规辅助指标和答案路径的两个保留键)。
|
||||
*/
|
||||
| { kind: "diagnosisProposal"; maxExplanations: number; maxExperiments: number; takenMetricIds: string[] }
|
||||
/** 对自己每条解释(explanations)× 每个合并后的实验(experiments)各给三个数(方法.md 4.3 诊 2)。 */
|
||||
| { kind: "diagnosisPrediction"; explanations: string[]; experiments: string[] }
|
||||
| ({ kind: "diagnosisImplementation" } & DiagnosisItems)
|
||||
| ({ kind: "diagnosisRepair" } & DiagnosisItems)
|
||||
| ({ kind: "diagnosisVerification" } & DiagnosisItems)
|
||||
| ({ kind: "proposal"; maxProposals: number } & FactorRules)
|
||||
| { kind: "firstPrediction"; candidate: string }
|
||||
| { kind: "secondPrediction"; candidate: string }
|
||||
|
||||
@@ -10,6 +10,10 @@ export const STAGES = [
|
||||
"entryDraft", // 0.1 闭门写入口
|
||||
"discussion", // 0.2 讨论,可配置为 1 或 2 次,每次都是这个阶段
|
||||
"claim", // 0.3 认领
|
||||
"diagnosisProposal", // 诊 1 诊断解释与诊断实验
|
||||
"diagnosisPrediction", // 诊 2 诊断预测
|
||||
"diagnosisImplementation", // 诊 4 诊断实现,以及核验不通过后的修复
|
||||
"diagnosisVerification", // 诊 4 诊断核验
|
||||
"proposal", // ② 提案
|
||||
"firstPrediction", // ④ 第一次预测
|
||||
"critique", // ⑤ 挑刺
|
||||
@@ -33,6 +37,11 @@ export const SUBMISSION_KINDS = {
|
||||
entry: { stage: "entryDraft", role: "researcher" },
|
||||
discussion: { stage: "discussion", role: "researcher" },
|
||||
claim: { stage: "claim", role: "researcher" },
|
||||
diagnosisProposal: { stage: "diagnosisProposal", role: "researcher" },
|
||||
diagnosisPrediction: { stage: "diagnosisPrediction", role: "researcher" },
|
||||
diagnosisImplementation: { stage: "diagnosisImplementation", role: "experimenter" },
|
||||
diagnosisRepair: { stage: "diagnosisImplementation", role: "experimenter" },
|
||||
diagnosisVerification: { stage: "diagnosisVerification", role: "verifier" },
|
||||
proposal: { stage: "proposal", role: "researcher" },
|
||||
firstPrediction: { stage: "firstPrediction", role: "researcher" },
|
||||
critique: { stage: "critique", role: "researcher" },
|
||||
|
||||
@@ -503,6 +503,146 @@ export const VerificationSubmission = Type.Object(
|
||||
},
|
||||
);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// 诊断:解释与实验、预测、实现、核验(方法.md 4.3 诊 1–诊 4、第五部分"诊断"三行)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
const DiagnosisExplanation = Type.Object(
|
||||
{
|
||||
body: Type.String({
|
||||
...TEXT,
|
||||
description:
|
||||
"Markdown:为什么卡在这里,剩下的空间在哪,什么样的实测会推翻它(写不出推翻它的实测,说明这条解释还不能被检验,先改具体再交)。" +
|
||||
"诊断问的是剩下的空间在哪,不是上一步的功劳怎么分。没有具体判断就直说,写明查了什么、为什么拿不准",
|
||||
}),
|
||||
},
|
||||
CLOSED,
|
||||
);
|
||||
|
||||
const DiagnosisExperiment = Type.Object(
|
||||
{
|
||||
name: Type.String({
|
||||
...TEXT,
|
||||
description: "名称:离开这份清单单独看也读得懂",
|
||||
}),
|
||||
spot: Type.String({
|
||||
...TEXT,
|
||||
description: "动哪一处:在当前基线的哪一处代码或哪一步上动手,只写一处(文件、函数或步骤名),其余照基线保留;想测两处就拆成两个实验",
|
||||
}),
|
||||
body: Type.String({
|
||||
...TEXT,
|
||||
description:
|
||||
"Markdown:在这一处怎么动(换成明显更强的版本、换成另一种做法、拿掉,或放宽某个限制)、" +
|
||||
"做完交出什么能判分的答案、几种可能的结果各排除哪几条解释(有分不开的也写明)。不写自己估的分数,分数在下一步交",
|
||||
}),
|
||||
metrics: Type.Array(HypothesisMetric, {
|
||||
description:
|
||||
"登记假设专用指标:这个实验的代码要额外记录的量,编号只写短名;没有就交空数组。" +
|
||||
"诊断实验里的指标只能选 recordMissing(缺了只记缺失),选 invalidateRun 会被退回",
|
||||
}),
|
||||
},
|
||||
CLOSED,
|
||||
);
|
||||
|
||||
export const DiagnosisProposalSubmission = Type.Object(
|
||||
{
|
||||
explanations: Type.Array(DiagnosisExplanation, {
|
||||
minItems: 1,
|
||||
description: "诊断解释清单,编号由程序分配;条数上限见材料。真有第二个看法再写第二条,各条之间要真的不同;没有具体判断,就写一条直说没有的",
|
||||
}),
|
||||
experiments: Type.Array(DiagnosisExperiment, {
|
||||
minItems: 1,
|
||||
description:
|
||||
"诊断实验清单,个数上限见材料。好的实验是不同解释对它的预测差得远:大家都预测涨不了多少的实验,测了也不改变下一步。" +
|
||||
"每个实验只动一处,用时要放得进分到的那份时间;想不出能把解释分开的实验,就交最能暴露你的解释错在哪的那个",
|
||||
}),
|
||||
},
|
||||
{
|
||||
...CLOSED,
|
||||
description: "对当前基线的诊断:几条解释,和能把它们分开的几个实验。实验正文里不写自己估的分数",
|
||||
},
|
||||
);
|
||||
|
||||
export const DiagnosisPredictionSubmission = Type.Object(
|
||||
{
|
||||
predictions: Type.Array(
|
||||
Type.Object(
|
||||
{
|
||||
explanation: Type.String({ ...Id, description: "你自己的诊断解释编号,照材料里列的写" }),
|
||||
experiment: Type.String({ ...Id, description: "合并后的诊断实验编号,照材料里列的写,别人提的也要给" }),
|
||||
range: Range,
|
||||
},
|
||||
CLOSED,
|
||||
),
|
||||
{
|
||||
description:
|
||||
"你自己的每条诊断解释对每个合并后的实验各给三个数:按这条解释,做了这个实验,分数有一成、一半、九成可能低于多少。" +
|
||||
"不多不少,每一对只写一次;按这条解释本身写,不往折中的范围靠;解释和这个实验没关系就按基线附近写并放宽;拿不准就把 q1 和 q9 拉开",
|
||||
},
|
||||
),
|
||||
body: Type.String({
|
||||
...TEXT,
|
||||
description: "理由,Markdown:这些数是怎么来的,不同解释给的数差在哪里;几条解释给的数差不多,写明它们在这些实验上分不开",
|
||||
}),
|
||||
},
|
||||
CLOSED,
|
||||
);
|
||||
|
||||
/** 诊断实现和修复用同一个定义。代码本身由程序从实验员的工作目录冻结,不作为字段交。 */
|
||||
export const DiagnosisImplementationSubmission = Type.Object(
|
||||
{
|
||||
locations: Type.Array(
|
||||
Type.Object(
|
||||
{
|
||||
experiment: Type.String({ ...Id, description: "诊断实验编号,照材料里列的写" }),
|
||||
locations: LOCATIONS,
|
||||
},
|
||||
CLOSED,
|
||||
),
|
||||
{
|
||||
description: "位置表:选中的每个实验一项,列出本次代码中这个实验实际所在的全部位置,行号以本次提交代码为准",
|
||||
},
|
||||
),
|
||||
concerns: CONCERNS,
|
||||
body: Type.String({
|
||||
...TEXT,
|
||||
description: "实现说明,Markdown:位置表之外需要说明的事;实验原文没规定规模时,写你选了什么、为什么放得进分到的时间。修复时逐条回应核验意见:改在哪里,或以实验原文和代码位置说明为什么不改。没有要补充的就写\"无\"",
|
||||
}),
|
||||
},
|
||||
CLOSED,
|
||||
);
|
||||
|
||||
export const DiagnosisVerificationSubmission = Type.Object(
|
||||
{
|
||||
experiments: Type.Array(
|
||||
Type.Object(
|
||||
{
|
||||
experiment: Type.String({ ...Id, description: "诊断实验编号,照材料里列的写" }),
|
||||
followed: Type.Boolean({
|
||||
description: "照实验写的做法实现了写 true;没找到、做得不一样或材料不足以核清,写 false",
|
||||
}),
|
||||
nothingElse: Type.Boolean({
|
||||
description: "没有动实验写的那一处以外的地方写 true;顺手改了别处(含顺手改进)写 false",
|
||||
}),
|
||||
where: WHERE,
|
||||
},
|
||||
CLOSED,
|
||||
),
|
||||
{
|
||||
description: "选中的每个实验一项,逐个判断,一个实验不通过不影响别的实验",
|
||||
},
|
||||
),
|
||||
body: Type.String({
|
||||
...TEXT,
|
||||
description: "说明,Markdown:逐项结果之外需要说明的事。没有要补充的就写\"无\"",
|
||||
}),
|
||||
},
|
||||
{
|
||||
...CLOSED,
|
||||
description: "只交逐个实验的结果,通过与否由程序推出:任何一项写 false 的实验退回实验员修复,用完修复次数仍不通过的实验从这次诊断里拿掉",
|
||||
},
|
||||
);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// 解释、消融、收尾(方法.md 4.3 ⑭⑯⑱)
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -611,6 +751,11 @@ export const SUBMISSION_SCHEMAS = {
|
||||
entry: EntrySubmission,
|
||||
discussion: DiscussionSubmission,
|
||||
claim: ClaimSubmission,
|
||||
diagnosisProposal: DiagnosisProposalSubmission,
|
||||
diagnosisPrediction: DiagnosisPredictionSubmission,
|
||||
diagnosisImplementation: DiagnosisImplementationSubmission,
|
||||
diagnosisRepair: DiagnosisImplementationSubmission,
|
||||
diagnosisVerification: DiagnosisVerificationSubmission,
|
||||
proposal: ProposalSubmission,
|
||||
firstPrediction: PredictionSubmission,
|
||||
critique: CritiqueSubmission,
|
||||
|
||||
Reference in New Issue
Block a user