Community研究与数据分析github.com

研究实验框架

为Claude Code在远程GPU服务器上运行的机器学习研究项目设置并操作实验框架——包含冻结协议(数据划分、评估器、基线数值)、带有通过标准的声明合约、仅由冻结评估器生成的结果、基于门控决策的循环退出(通过/预算/停滞)、带追踪的分离式GPU启动、以及阻止编辑冻结文件的钩子。每当开始或运行论文实验、复现基线、在GPU集群上启动训练或特征提取任务、检查想法是否通过终止测试、或者用户表示实验出现偏差、数值不可信、工作中途停滞时使用。与research-paper技能配合使用(后者决定运行什么);本技能决定如何执行和评判运行。

研究实验框架 是什么?

research-harness是一个专门为ML研究项目设计的实验框架技能,主要用于Claude Code在远程GPU服务器上的工作。它将实验规则从文本描述转移到文件、代码和钩子中,遵循工程化的框架/循环/图结构。框架包含三大层级:空间层(冻结的合约、数据划分、评估器和基线)、时间层(通过冻结评估器验证循环、基于代码的门控退出机制)和路径层(从数据划分到论文撰写的文件合约链)。该技能的核心价值在于解决实验中常见的非模型问题,如数据划分静默改变、手动输入数值、测试集泄漏到训练集、想法重复失败、以及轮询循环导致的账户锁定。它支持启动训练/特征提取任务、复现基线、检查想法是否通过终止测试,并配套有审查子代理进行泄露检测、协议合规性和公平性比较的审核流程。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hardiksharma6555/research-harness-skill/tree/HEAD

Installed? Explore more 研究与数据分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

研究实验框架 是做什么的?

在长期实验工作中,出问题的很少是模型本身。真正出问题的是模型周围的空间:某个数据划分悄悄改变了、一个手动输入的数值、测试集泄漏到了训练集中、某个已失败想法的第六个变体、一个锁住了账户的轮询循环。本技能将这些规则从文本描述转移到文件、代码和钩子中,遵循工程化框架/循环/图结构。

映射到实验的三个层级

框架(空间)。

  • contract.json:声明、协议、门控、计算规则。冻结。
  • CLAUDE.md:项目的简短地图,而非手册。
  • frozen/:数据划分列表、eval.py、复制过来的基线数值。哈希锁定且只读。
  • harness/launch.py:启动运行的唯一方式。它强制执行GPU白名单和空闲规则,并以分离模式启动作业。
  • traces.jsonl:每个事件一行。
  • state.json:门控的决策。
  • lessons.md:曾付出两次修复代价的错误记录。

循环(时间)。

  • L1验证循环: frozen/eval.py对每次运行评分。它是唯一的指标来源。

  • 由代码决策的退出(harness/gate.py):

    • PASS: 候选方案以指定margin超过参考方案。
    • BUDGET_EXIT: 达到最大变体数量。
    • STALL_EXIT: 连续N轮无改进。
    • REPRO_FAIL: 我们的基线复现与论文差距过大。

    模型自身永远不会声明“完成”。

  • L4等待变化: 每个作业最后写入runs/<id>/DONE。通过一个后台监视器等待该文件,而非重复轮询。

路径(路线)。 刻意保持小巧: 数据划分 → 冻结 → 特征 → 参考运行(基线复现) → 候选变体 → 门控 → 论文撰写。 每个箭头是一个文件合约(划分TSV文件、特征的DONE.json、运行的scores/目录)。

设置项目

  1. 将template/复制到服务器上的项目中。将任务代码复制到src/下(examples/aigi/是一个完整的AI生成图像检测工作示例)。
  2. 根据template/contract.example.json编写contract.json:
    • claim: 一句话加一个数字;
    • protocol: 严格按照源论文定义;在open_questions中列出所有未指定的细节及其选择;
    • gate: 参考标签、论文数值、margin、预算;
    • compute: Python路径、节点/GPU白名单、空闲规则。
  3. 编写paths.json(数据集根目录),并将基线数值复制到frozen/baselines.json中。通过一个脚本从PDF中解析并重新检查平均值;绝不要手动输入。
  4. 冻结:python harness/freeze.py add contract.json frozen/eval.py frozen/baselines.json。
  5. 通过launch.py生成数据划分,读取清单计数,然后冻结数据划分。
  6. 在运行Claude Code的机器上安装保护钩子:
    • 将hooks/research_guard.py复制到<project>/.claude/hooks/;
    • 编写<project>/.claude/research_guard.json,将远程项目目录名称作为project_markers条目;
    • 将hooks/settings.snippet.json合并到<project>/.claude/settings.json中。

操作规则

  • 数值仅来自result.json或门控输出行。 引用它们;绝不要在聊天中计算或手动输入指标。如果某个数值不在eval.py写入的文件中,那它就不存在。
  • 仅通过launch.py启动运行。 它会拒绝重复的运行ID、已更改的冻结文件以及忙碌的GPU,并记录每次运行的代码哈希。
  • 一次运行,一个问题。 使用运行ID和标签说明它测试什么(gfre_repro_s0、ml_l12-24_k256)。候选想法的变体共享门控的candidate_tag。其他任何操作,如调试或冒烟测试,使用不同的标签以免消耗预算。
  • 尊重门控。
    • CONTINUE意味着你可以尝试另一个变体。
    • BUDGET_EXIT、STALL_EXIT和REPRO_FAIL意味着停止并向人类提供证据。不要第六次修补同一个想法。
  • 冻结的协议在项目中途永不更改。 如果必须更改(数据划分中的错误、从作者处获知的协议细节),由人类编辑FROZEN.sha256并开始新的冻结。早期结果保留在results.jsonl中,带有自己的历史记录。
  • 通过单个后台监视器等待DONE文件。 循环中的每次ssh调用都使用-o BatchMode=yes,并在退出码为255时停止。
  • 每次运行后,读取status.py输出,而非原始日志。仅在失败时打开log.txt。
  • 当错误重复出现时, 在lessons.md中添加一行,并尽可能将其转化为检查(src/中的断言、钩子规则、清单检查)。

审查者通行(在信任PASS之前)

为每个视角生成一个审查子代理。给每个子代理代码和文件,而不是你的结论:

  1. 数据泄漏: 训练、验证和测试文件是否有重叠?排除的模式是否真的被排除?测试标签是否到达了训练代码?
  2. 协议: 数据划分、测试集、阈值和指标是否与源论文和contract.json一致?open_questions中的选择是否已披露?
  3. 公平比较: 参考复现是否在容忍范围内?复制的基线数值是否来自同一协议?任何重新运行的基线是否已标记?

一个审查者的价值完全取决于它改变了多少决策。每个视角返回具体的文件/行证据,或者什么都不返回。

文件

template/                 复制到新项目中
  CLAUDE.md               地图(编辑标题)
  contract.example.json   声明/协议/门控/计算
  lessons.md
  harness/                launch.py job.sh gate.py status.py freeze.py check_frozen.py trace.py common.py
  frozen/eval.py          二分类检测评估器(每个测试集的阈值ACC + AP)
hooks/                    research_guard.py + 示例配置 + 设置片段
examples/aigi/           AI生成图像检测:GenImage + CNNDetection数据划分,CLIP特征
                          缓存,GFRE风格重建检测器,GFRE表格解析器

致谢:框架/循环/图结构遵循@0xwhrrari的“Harness, Loop and Graph”(2026年11月)。

相关技能