2. 实验协议的结构化建模
实验协议如果只以自然语言段落存在,机器就无法可靠地判断“这一步需要什么”“这个参数属于谁”“这份数据由哪次运行产生”。结构化建模的目标,是把协议从一段可读文本,转化为一组有明确类型、明确关系、明确状态迁移规则的实体集合。本节围绕“信息模型—实体关系—状态机”三层展开,并给出可直接参考的建模示例。
一、信息模型:把协议拆成可寻址的实体
一个可被机器读取的实验协议,至少需要覆盖六类核心信息:实验目的、材料、设备、步骤、参数、数据输出。它们不是六个并列的字段,而是具有从属与引用关系的实体。建模时先定义实体,再定义实体之间的连接方式。
以“细胞培养上清中IL-6浓度检测”为例,可以抽象出如下实体:
- Protocol(协议):整体标识,包含版本号、适用物种、依据标准。
- Objective(目的):可验证的陈述,例如“定量测定样本中IL-6浓度,检测下限≤2 pg/mL”。
- Material(材料):样本、试剂、耗材,需带批号、有效期、储存条件。
- Equipment(设备):酶标仪、洗板机、移液器,需带型号、校准状态、关键性能参数。
- Step(步骤):有序操作单元,每个步骤引用其所需材料、设备与参数。
- Parameter(参数):温度、时间、体积、转速、波长等,必须绑定到具体步骤或设备。
- DataOutput(数据输出):原始读数、计算结果、单位、精度、存储位置。
关键原则是:参数不能悬空。一个“37 ℃”如果没有绑定到“孵育步骤”和“恒温箱设备”,机器就无法判断它是否被正确执行。因此参数实体必须通过 appliesTo 关系指向步骤或设备。
二、实体关系:用关系类型约束语义
实体定义完成后,需要用有限的关系类型把它们连起来。推荐使用以下关系集合,避免关系语义混乱:
| 关系 | 方向 | 含义 | 示例 |
|---|---|---|---|
| hasStep | Protocol → Step | 协议包含步骤 | IL-6检测协议包含第3步“加样” |
| requires | Step → Material/Equipment | 步骤需要某资源 | 加样步骤需要移液器与样本 |
| hasParameter | Step/Equipment → Parameter | 步骤或设备具有参数 | 孵育步骤具有温度37 ℃、时间30 min |
| produces | Step → DataOutput | 步骤产生数据 | 读板步骤产生OD值 |
| precedes | Step → Step | 步骤先后顺序 | 洗板 precedes 加二抗 |
| derivedFrom | DataOutput → DataOutput | 数据派生关系 | 浓度值 derivedFrom OD值 |
这些关系一旦确定,就可以用图数据库或RDF三元组存储。例如“孵育步骤需要恒温箱”可写成三元组:(Step_Incubate, requires, Equipment_Incubator)。机器查询时,只需沿关系遍历,就能回答“哪些步骤依赖未校准设备”这类问题。
三、状态机:让协议具备执行语义
仅有静态结构还不够。实验执行过程中,每个步骤会经历“未开始—进行中—已完成—异常”等状态。状态机的作用,是定义合法状态与合法迁移,防止出现“未加样却已读板”这类逻辑错误。
以单个步骤为状态机单元,定义四个状态:Pending(待执行)、Running(执行中)、Completed(已完成)、Failed(失败)。合法迁移包括:Pending → Running、Running → Completed、Running → Failed、Failed → Pending(重试)。禁止 Pending 直接跳到 Completed,也禁止 Completed 回退到 Running。
步骤状态机之上,还需要协议级状态机。协议整体状态由所有步骤状态聚合而成:只要有一个步骤处于 Failed,协议状态即为 Blocked;所有步骤 Completed,协议状态才为 Finished。这种聚合规则可以用简单的状态表表达:
协议状态聚合规则(示例):
任一步骤 Failed → Protocol = Blocked
存在步骤 Running → Protocol = InProgress
全部步骤 Completed → Protocol = Finished
其余情况 → Protocol = Pending
把状态机与实体关系结合,就得到完整的可执行协议模型:实体提供“有什么”,关系提供“怎么连”,状态机提供“怎么变”。三者缺一不可。
四、从模型到可执行协议:一个最小示例
把上述模型落到具体协议,可以用一段结构化描述表达。以下示例以“IL-6 ELISA检测”为背景,参数为教学假设值,用于说明建模方式,不代表真实试剂盒说明书。
Protocol: IL6_ELISA_v1.2
Objective: 定量检测样本IL-6浓度,检测范围 2–200 pg/mL
Step_1: 包被
requires: 96孔板, 捕获抗体
hasParameter: 抗体浓度 = 2 μg/mL, 温度 = 4 ℃, 时间 = 12 h
produces: 包被记录
Step_2: 封闭
requires: 封闭液
hasParameter: 温度 = 37 ℃, 时间 = 1 h
precedes: Step_3
Step_3: 加样
requires: 样本, 移液器
hasParameter: 样本体积 = 100 μL, 复孔数 = 2
produces: 加样位置表
Step_4: 孵育与洗板
requires: 恒温箱, 洗板机
hasParameter: 温度 = 37 ℃, 时间 = 30 min, 洗板次数 = 5
Step_5: 显色与读板
requires: 酶标仪
hasParameter: 波长 = 450 nm, 参比波长 = 630 nm
produces: OD_raw
DataOutput: IL6_conc
derivedFrom: OD_raw
unit: pg/mL
precision: 0.1
这段描述已经具备机器可读的基本条件:每个步骤有明确资源引用,每个参数有归属,数据有派生来源。机器可以据此检查“Step_4 是否引用了已校准的恒温箱”“Step_5 的波长是否与酶标仪能力匹配”。
结构化建模的价值,不在于把文字换成表格,而在于让协议中的每个对象都可被寻址、每条关系都可被验证、每次状态变化都可被追踪。当实验协议具备这三层结构后,后续的自动校验、执行监控与数据溯源才有稳定的基础。