2. 实验流程的形式化建模

生物实验协议通常以自然语言书写,例如“取 2 μL 模板 DNA 加入 18 μL PCR 反应液,混匀后置于 PCR 仪中 95 ℃ 预变性 3 min,随后进行 30 个循环”。人类实验员能理解其中的隐含前提,但自动化平台不能。形式化建模的任务,就是把这句自然语言翻译成机器可调度、可校验、可追溯的结构化描述:步骤(Step)、资源(Resource)、参数(Parameter)与约束(Constraint),并用状态机与工作流图刻画实验过程。

一、四要素拆解:从一句话到可执行结构

以“PCR 扩增”为例,拆解结果如下:

  • 步骤:移液配制反应体系 → 混匀 → 上机 → 热循环 → 下机取样。每个步骤是一个原子操作,对应平台上的一个可调用动作(如 pipette_transfer、thermocycle)。
  • 资源:模板 DNA(孔位 A1)、2×PCR Master Mix(孔位 B1)、PCR 板(板位 P2)、PCR 仪(设备 D1)、枪头盒(T1)。资源必须带唯一标识与位置坐标。
  • 参数:体积 2 μL / 18 μL、温度 95 ℃、时间 180 s、循环数 30、退火温度 58 ℃。参数是步骤的输入变量,决定动作的具体执行方式。
  • 约束:体积精度 ±5%、模板体积不得超过反应总体积的 10%、热循环前必须完成封板、PCR 仪同一时刻只能被一个任务占用。

四要素缺一不可:只有步骤没有资源,平台不知道“从哪里取、放到哪里”;只有资源没有参数,动作无法量化执行;没有约束,调度器可能排出物理上不可行或生物学上无效的流程。

二、状态机:描述实验过程的“合法状态迁移”

工作流图回答“先做什么、后做什么”,状态机回答“当前处于什么状态、允许迁移到哪里”。对 PCR 步骤建模时,可定义状态集合:Idle(空闲)、ReagentReady(试剂就位)、Mixed(已混匀)、Sealed(已封板)、Cycling(热循环中)、Completed(完成)、Aborted(异常终止)。

迁移规则举例:Idle → ReagentReady 的触发条件是“模板与 Mix 均已分配孔位且体积校验通过”;Mixed → Sealed 要求封板动作成功;Cycling → Completed 要求循环计数达到 30 且温度曲线无超限报警。若在 Cycling 中检测到温度偏差超过 ±1 ℃,则迁移到 Aborted,并触发重试或人工介入。

状态机的价值在于:它把“实验是否正常”变成可判定的条件。调度器只需检查当前状态与迁移条件,就能决定下一步动作,而不必理解生物学语义。

三、工作流图:步骤、资源与数据流的可视化

下图以 PCR 扩增为例,展示从试剂分配到结果输出的工作流结构。图中同时标注了关键资源、参数与约束,便于对照理解形式化模型如何落地为可执行流程。

PCR 扩增实验流程形式化模型 步骤 · 资源 · 参数 · 约束 四要素在工作流中的映射 资源池 模板 DNA 孔位 A1 · 2 μL 2× PCR Mix 孔位 B1 · 18 μL PCR 板 板位 P2 · 96 孔 PCR 仪 设备 D1 · 独占 枪头盒 T1 · 200 μL 封板膜 耗材 · 一次性 步骤 1:试剂分配 pipette_transfer 步骤 2:混匀 mix · 10 次 步骤 3:封板 seal_plate 步骤 4:热循环 thermocycle · 30× 步骤 5:下机取样 transfer_out 参数 模板体积:2 μL Mix 体积:18 μL 预变性:95 ℃ / 180 s 变性:95 ℃ / 30 s 退火:58 ℃ / 30 s 延伸:72 ℃ / 60 s 循环数:30 约束 体积精度:±5% 模板占比 ≤ 10% 热循环前必须封板 PCR 仪独占使用 温度偏差 ≤ ±1 ℃ 循环数必须为整数 封板后禁止开盖 状态迁移 Idle ReagentReady Mixed Sealed Cycling Completed Aborted 温度超限 步骤流 资源依赖 参数绑定 约束校验 异常迁移

四、从模型到可执行:一个最小工作流描述示例

形式化模型最终要落到平台可解析的格式。以下是一个简化的 YAML 工作流片段,展示步骤、资源、参数与约束如何组织。该示例为教学用简化描述,实际平台字段可能更丰富。

workflow: pcr_amplification
steps:
  - id: s1
    action: pipette_transfer
    source: {resource: template_dna, well: A1}
    target: {resource: pcr_plate, well: A1}
    params: {volume_uL: 2, tip: T1}
    constraints:
      - volume_accuracy: 0.05
      - template_ratio_max: 0.10
  - id: s2
    action: pipette_transfer
    source: {resource: pcr_mix, well: B1}
    target: {resource: pcr_plate, well: A1}
    params: {volume_uL: 18, tip: T1}
  - id: s3
    action: mix
    target: {resource: pcr_plate, well: A1}
    params: {cycles: 10, volume_uL: 20}
  - id: s4
    action: seal_plate
    target: {resource: pcr_plate}
    params: {film: seal_film}
  - id: s5
    action: thermocycle
    device: D1
    params:
      predenature: {temp_C: 95, time_s: 180}
      denature:    {temp_C: 95, time_s: 30}
      anneal:      {temp_C: 58, time_s: 30}
      extend:      {temp_C: 72, time_s: 60}
      cycles: 30
    constraints:
      - device_exclusive: true
      - temp_tolerance_C: 1.0
  - id: s6
    action: transfer_out
    source: {resource: pcr_plate, well: A1}
    target: {resource: output_tube, well: A1}
    params: {volume_uL: 20}

这份描述中,s1 到 s6 构成有向无环图;device_exclusive: true 告诉调度器 PCR 仪在 s5 执行期间不能被其他任务占用;temp_tolerance_C: 1.0 是状态机从 Cycling 迁移到 Aborted 的判定阈值。平台解析后即可生成可执行指令序列,并在每一步执行前校验约束。

五、建模中的常见陷阱与检查要点

实际建模时,以下问题最容易导致流程不可执行或结果不可信:

  • 资源未绑定唯一位置:只写“模板 DNA”而不写孔位,移液臂无法定位。每个资源实例必须带板位、孔位或设备编号。
  • 参数缺少单位或量纲:体积写“2”而不写“μL”,温度写“95”而不写“℃”,平台无法判断量级。建议统一使用带单位后缀的字段名,如 volume_uL、temp_C。
  • 约束遗漏导致物理冲突:例如未声明 PCR 仪独占,两个任务同时调度到 D1,执行时必然冲突。约束应覆盖设备占用、体积上限、温度范围、时间窗口等。
  • 状态迁移条件不完整:只定义正常路径,未定义异常路径(如封板失败、温度超限、试剂不足),导致异常时流程挂起而非可控终止。
  • 步骤粒度过粗或过细:把“PCR 扩增”整体作为一个步骤,平台无法插入校验点;把“吸头安装”也拆成独立步骤,则工作流过于冗长。建议以“一个可独立校验结果的动作”为粒度。
建模完成后,可用“三问”快速自检:每个步骤的资源是否可定位?每个参数是否可量化?每条约束是否可判定?三问皆“是”,模型才具备可执行性。

形式化建模不是一次性翻译,而是随协议迭代持续维护的工程资产。当实验条件变化(如退火温度调整、循环数改变)时,只需修改对应参数或约束,工作流结构与状态机逻辑保持不变。这种“结构稳定、参数可变”的特性,正是自动化平台能够快速适配不同生物实验协议的基础。