端到端研究 demo


文档摘要

端到端研究 demo 本节摘要:demo 是你早先写的每个契约都必须组合的地方。任一漏,demo 就是抓住它的那节。把自动研究循环端到端接起来:假设种子、实验运行器、调度器、批判循环、论文写作器。通过纯 Python import 把前四课的原语组合,不用框架。跑循环到自终止终,发单一 demo 报告列每阶段输出。保 demo 确定性使测试套件可断言终形状。当任一阶段契约破时露清晰失败模式,使下一阶段不以破输入跑。五阶段:种子是三假设列表,调度器跨它们跑六实验用三并行槽,总线报一个或多个论文触发,选择器选单一最佳结果,批判循环在从该结果建的草稿上迭代,论文写作器发终 LaTeX、BibTeX 与清单。五课,四 import,一报告——加阶段时接线恰长一行。

端到端研究 demo

本节摘要:demo 是你早先写的每个契约都必须组合的地方。任一漏,demo 就是抓住它的那节。把自动研究循环端到端接起来:假设种子、实验运行器、调度器、批判循环、论文写作器。通过纯 Python import 把前四课的原语组合,不用框架。跑循环到自终止终,发单一 demo 报告列每阶段输出。保 demo 确定性使测试套件可断言终形状。当任一阶段契约破时露清晰失败模式,使下一阶段不以破输入跑。五阶段:种子是三假设列表,调度器跨它们跑六实验用三并行槽,总线报一个或多个论文触发,选择器选单一最佳结果,批判循环在从该结果建的草稿上迭代,论文写作器发终 LaTeX、BibTeX 与清单。五课,四 import,一报告——加阶段时接线恰长一行。

对应原课程:Phase 19 · Lesson 57 · end-to-end-research-demo(原英文 phases/19-capstone-projects/57-end-to-end-research-demo/docs/en.md)。本节属「AI Scientist」赛道第八节。

学习目标

阅读完本节,你应当能够:

  1. 端到端接自动研究循环:假设种子、实验运行器、调度器、批判循环、论文写作器。
  2. 通过纯 Python import(非框架)组合前四课原语。
  3. 跑循环到自终止终,发单一 demo 报告列每阶段输出。
  4. 保 demo 确定性使测试套件可断言终形状。
  5. 任一阶段契约破时露清晰失败模式,使下一阶段不以破输入跑。

一、问题与直觉

这里组合什么

五阶段。种子是三假设列表,调度器跨它们跑六实验用三并行槽,总线报一个或多个论文触发,选择器选单一最佳结果,批判循环在从该结果建的草稿上迭代,论文写作器发终 LaTeX、BibTeX、清单。

为什么 import 而非拷贝

每早先课发 main.py 带公开 dataclass 与函数。demo 通过调每课父目录的 sys.path import 它们。这不是框架接线,是早先课测试文件已用的同一 import。

内联桩替第 48~51 课:小种子假设生成器与同步奖励函数。用户可调两 import 把内联桩换成那些课的真原语。

确定性保证

demo 构造上确定。实验运行器是种子 numpy,批判循环的修订器按固定序走固定维,论文写作器的散文生成器是第 52 节的 mock,调度器的 UCB 选择器按迭代序(非随机选择)破平。给同种子,demo 发同报告,测试跑两次比 manifest 断言此性质。

demo 报告形状

每字段逐字来自上游阶段。demo 不转任何输出,只组合它们——那就是 demo 测的东西。

二、从零实现

失败模式处理

每阶段要么成功要么抛类型化错误:

Scheduler ........ 返 SchedulerReport 带 stop_reason in {queue_empty, max_experiments, deadline} Best-result pick . 无论文触发时抛 NoTriggerError Critic loop ...... 返 LoopResult 带 status converged 或 stopped Paper writer ..... 契约破时抛 PaperValidationError

任一阶段失败用类型化异常短路 demo。测试钉此契约:test_no_triggers_raises_typed_errortest_best_picker_raises_when_no_triggers 断言选择器在无分支触发时抛 NoTriggerError/BestResultError,写作器永不调。

最佳结果选择器

调度器按分支发论文触发。选择器选跨所有触发均奖励最高的分支,按分支 id 字母序破平使 demo 确定。选择器是小纯函数,测试在固定调度器报告上钉它。

接批判循环

第 53 节批判循环操作 MiniPaper。demo 从选中分支建 MiniPaper:用分支 id 填摘要、种两节(Introduction 与 Results)、从分支均奖励设 originality_tag(>=0.8 高、>=0.6 中、否则低)。修订器迭代草稿到收敛,输出进论文写作器。

接论文写作器

第 52 节论文写作器操作带图与参考文献的全 Paper 形状。demo 经 mini_to_full_paper 升级收敛后 MiniPaper,附选中分支一张图与批判建议的引用键并集建的小合成参考文献。demo 加的每引也加到参考文献列,使校验过。

code/main.py 定义 BestResultErrorNoTriggerErrorDemoReportpick_best_branchbuild_mini_papermini_to_full_paperrun_demo。顶部 import 调一次 sys.pathPaperWriterCriticLoopIterationScheduler

def run_demo(seed=0): scheduler_report = IterationScheduler(seed_hypotheses(), mock_runner(seed) ).run(max_experiments=6) triggers = [t for t in scheduler_report.paper_triggers] if not triggers: raise NoTriggerError("无分支跨论文阈值") best = pick_best_branch(scheduler_report) # 最高均奖励, 字母序破平 mini = build_mini_paper(best) # 摘要/两节/originality_tag critic_result = CriticLoop(deterministic_critic(), deterministic_reviser() ).run(mini) # 迭代到收敛 full = mini_to_full_paper(critic_result.draft, best) # 加图 + 参考文献 manifest = PaperWriter(MockProseGenerator()).write(out_dir, full) return DemoReport(scheduler=scheduler_report, best=best, critic=critic_result, paper=manifest, stop_reason=scheduler_report.stop_reason)

设计要点:demo 的工是证组合即架构——五课四 import 一报告,加阶段时接线恰长一行。每阶段输出逐字透传到报告,demo 不转任何输出只组合,那是它测的。类型化失败短路使破输入不传下游。确定性构造(种子 numpy、固定序修订、mock 散文、迭代序破平)使跑两次比 manifest 可断言。内联桩替第 48~51 课使 demo 独立可跑,调两 import 换真原语。

三、框架对比

真实自主研究代理(AI-Scientist v1/v2、Sakana AI、斯坦福 STORM)是本节 demo 的产品化版:真 LLM 替 mock、真实验执行(训真模型)替内联桩、真文献检索(第 49 节)替无、结果存 WandB/MLflow 替内存报告。LangGraph/CrewAI/AutoGen 把这包成图框架,节点是阶段、边是数据流,但组合契约同:每阶段产类型化输出、下游消费它、失败类型化短路。本节手写的价值是看清「组合即架构」——无框架魔法,纯 import + 纯函数透传,失败模式是契约破而非框架怪。研究循环的产品化难点在真 LLM 的随机性(批判/写作不收敛)、真实验的成本(GPU 时)、真文献的覆盖(第 49 节漏判),本节 mock 绕开这些先证骨架可组合。

四、可复用产物

code/main.py + code/tests/test_e2e.py(覆盖 demo 端到端跑发全五字段报告、跨两次运行确定、无分支跨阈值时 NoTriggerError、写作器契约破时 PaperValidationError、论文清单含选中分支图、调度器 stop_reason 是预期值之一)。run_demo(seed) 是编排器入口,返 DemoReport。demo 的存在本身是测试——五阶段组合的契约破则 demo 抓住。换真原语(真 LLM 批判、真实验运行器),run_demo 接线不动。

五、练习

  1. 换真文献检索:把内联桩替成第 49 节 RetrievalClient,假设生成前先查重,观察队列变化。
  2. 换真批判:把确定性批判器换成真 LLM,跑同种子,观察分轨迹的随机性。
  3. 持久状态:每阶段结果写小 JSON store,使重启可恢复而不重跑廉价阶段。
  4. 仪表盘:调度器与批判循环的 trace 事件渲染成单一时间线。
  5. 多论文:改选择器选 top-3 分支各产一篇论文,对比单论文 vs 多论文的产出。

本节要点回顾

  1. 组合即架构:五课四 import 一报告,无框架魔法,加阶段接线长一行。
  2. 输出透传:demo 不转任何输出只组合,那是它测的东西。
  3. 类型化失败短路:每阶段契约破抛类型化错误,破输入不传下游。
  4. 确定性构造:种子 numpy、固定序修订、mock 散文、迭代序破平,跑两次同报告。
  5. 内联桩替前四课:种子假设生成器 + 同步奖励函数,调两 import 换真原语。
  6. demo 的存在即测试:五阶段组合契约破则 demo 抓住。

下一节,我们离开 AI Scientist 赛道进入多模态/VLM 赛道,做「视觉编码器 patch」——把图像切成 patch 网格、线性投影成 token,加 2D 正弦位置编码。


发布者: 作者: Rohit Gupta 转发
评论区 (0)
U