AI Agent 说液路正常,压力曲线却不同意:6 层状态契约与 Python 保护门
在 IVD、实验室自动化和分析仪器中,AI Agent 可以调用泵、阀和传感器接口,也可以让 Claude Code、Codex、ChatGPT、Gemini 或 DeepSeek 辅助生成驱动、日志分析和故障排查代码。
但一个接口返回 success: true,最多只能证明命令被软件接收。它不能证明液体已经移动、管路没有堵塞、传感器数据仍然新鲜,也不能证明当前流路和配方版本一致。
真正可交给 AI 的不是一句“压力正常”,而是一份带时间戳、边界、证据来源和故障动作的状态契约。本文以自动化仪器中的泵后压力监测为例,拆解一个可复用的六层模型,并给出可直接测试的 Python 保护门。
先说明边界:本文提出的是通用工程架构。文中的阈值和压力曲线均为软件示例,不是具体设备的放行参数;真实系统必须依据管路、泵、介质、温度和风险分析重新验证。
一、AI 最容易误判的不是数值,而是“数值是否可信”
假设上位机收到下面的数据:
{
"pressure_kpa": 182.6,
"pump_running": true,
"status": "ok"
}
对大模型来说,这段 JSON 很容易被总结成“泵正在运行,压力正常”。但工程师还会追问:
- 数据是什么时间采集的,是否已经过期?
- 传感器是否完成上电自检和零点检查?
- 当前采样率与过滤参数是否和验证版本一致?
- 182.6 kPa 对当前动作究竟是正常、偏高还是完全不相关?
- 压力上升速度是否符合预期,是否出现尖峰或平台?
- 阀位、泵方向、管路版本和介质是否正确?
所以,压力值必须和上下文一起进入 AI,而不是孤立地发送一个浮点数。
二、六层压力状态契约
第 1 层:命令和配方身份
每次动作都应有唯一 command_id,同时记录配方版本、目标泵、目标阀路、运行方向和计划时长。这样才能防止上一次动作的迟到数据被当前任务误用。
建议至少包含:
command_id与recipe_revision;- 目标流路和阀位;
- 泵的目标速度或 PWM;
- 动作开始时间和最大允许时长;
- 当前硬件配置版本。
第 2 层:传感器在线与配置状态
“能读到数字”不等于“传感器状态可信”。控制程序应区分:
- 设备在线;
- 通讯地址正确;
- 采样率和量程配置正确;
- 最近一次有效帧未超时

; - 上电自检、校准版本和错误状态明确。
以公开产品信息为例,FOREACH PDM5 是面向自动化仪器液路的数字压力检测模块,支持 I2C 通讯,默认 7-bit 地址为 0x6D,默认采样率为 37.5 Hz,最高可调至 100 Hz。把这些配置读回并写入日志,比在代码里假设“初始化应该成功”更可靠。
第 3 层:基线与数据新鲜度
动作开始前应保留一个短基线窗口,而不是只读一个零点。基线可以帮助发现:
- 传感器零点漂移;
- 管路仍残留压力;
- 阀未完全切换;
- 上一次动作尚未释放;
- 数据流已经停止但缓存值仍在重复返回。
状态契约中建议同时记录 sample_age_ms、baseline_mean、baseline_std 和有效样本数。AI 可以解释趋势,但“数据是否过期”应由确定性逻辑判断。
第 4 层:动作相关的压力窗口
不存在适用于所有动作的统一“正常压力”。吸液、排液、清洗、废液抽吸和阀切换后的压力方向可能完全不同。
因此,每个已验证动作都应定义:
- 允许的稳态压力区间;
- 启动后的最大到达时间;
- 最大压力上升或下降速率;
- 可接受的瞬态尖峰宽度;
- 完成动作时应出现的压力特征。
这些边界应该来自台架数据和风险分析,不能由 AI 根据一条历史曲线临时生成。
第 5 层:异常类型,而不是一个布尔报警
把所有异常都压缩成 pressure_alarm = true 会丢失诊断价值。建议至少区分:
| 异常 | 可能表现 | 需要联查的证据 |
|---|---|---|
| 堵塞或夹管 | 压力快速升高、流量不足 | 阀位、泵电流、流量 |
| 泄漏或空源 | 泵运行但压力响应偏小 | 液位、气泡、接头 |
| 阀路错误 | 压力曲线与目标动作不匹配 | 实际阀位、路由版本 |
| 传感器离线 | 数据超时或重复旧值 | I2C 状态、时间戳 |
| 瞬态尖峰 | 短时间超界后恢复 | 采样率、滤波、切阀时刻 |
AI Agent 可以根据多源证据提出优先排查顺序,但不能把“最可能原因”直接当成已确认根因。
第 6 层:确定性放行、停机与恢复
允许继续、暂停还是停机,应该由版本化规则决定。AI 适合生成解释、聚合日志和建议测试,不适合在运行中自行放宽压力上限、延长超时或绕过传感器离线状态。
一个最小状态契约可以是:
{
"command": {
"id": "wash-2048",
"recipe_revision": "r17",
"ack": true
},
"sensor": {
"online": true,
"address": "0x6D",
"sample_age_ms": 18,
"sampling_hz": 37.5
},
"pressure": {
"baseline_kpa": 3.2,
"current_kpa": 186.4,
"slope_kpa_s": 42.0
},
"route": {
"target": "wash_to_waste",
"verified": true
},
"decision": "continue_inside_validated_window"
}
三、用 Python 写一个明确的保护门
下面的代码不是 PDM5 驱动,也不代表任何产品协议。它只演示如何把在线状态、数据新鲜度、流路确认和压力边界放进同一个可测试函数。
from dataclasses import dataclass
from enum import Enum
class Decision(str, Enum):
CONTINUE = "continue"
PAUSE = "pause"
SAFE_STOP = "safe_stop"
@dataclass
class PressureObservation:
command_ack: bool
sensor_online: bool
sample_age_ms: int
route_verified: bool
pressure_kpa: float
slope_kpa_s: float
@dataclass
class ValidatedWindow:
min_pressure_kpa: float
max_pressure_kpa: float
max_abs_slope_kpa_s: float
max_sample_age_ms: int
def pressure_gate(
obs: PressureObservation,
window: ValidatedWindow,
) -> tuple[Decision, str]:
if not obs.command_ack:
return Decision.PAUSE, "command_not_acknowledged"
if not obs.sensor_online:
return Decision.SAFE_STOP, "pressure_sensor_offline"
if obs.sample_age_ms > window.max_sample_age_ms:
return Decision.SAFE_STOP, "pressure_data_stale"
if not obs.route_verified:
return Decision.SAFE_STOP, "fluid_route_not_verified"
if not (
window.min_pressure_kpa
<= obs.pressure_kpa
<= window.max_pressure_kpa
):
return Decision.SAFE_STOP, "pressure_out_of_validated_window"
if abs(obs.slope_kpa_s) > window.max_abs_slope_kpa_s:
return Decision.PAUSE, "pressure_slope_requires_review"
return Decision.CONTINUE, "all_deterministic_checks_passed"
这段函数刻意保持“无聊”:没有大模型调用,没有自动修改阈值,也没有无限重试。因为保护门最重要的特性不是聪明,而是可测试、可复现、可审查。
四、产品参数如何进入状态模型
FOREACH PDM5 压力检测模块的公开页面列出了 10–1200 kPa 压力范围、I2C 数字输出、PEEK 流道、1/4-28 UNF 内螺纹接口、内部体积不超过 55 µL,以及默认 37.5 Hz、最高 100 Hz 的采样率。
这些参数可以帮助完成早期选型和接口设计,但不能直接替代整机的压力阈值。真实系统还要结合:
- 泵的流量—压力特性;
- 管径、长度、接头、过滤器和阀的阻力;
- 介质黏度、温度、气泡和顺应性;
- 采样率、滤波延迟与端到端停机时间;
- 允许的残余体积、污染和风险等级。
也就是说,产品规格定义“传感器能做什么”,设备验证定义“这个动作在什么条件下可以放行”。
五、Claude Code、Codex 和 ChatGPT 最适合承担哪些工作
当状态契约已经明确后,AI 工具可以真正提高效率:
- 根据字段定义生成数据类、接口和日志结构;
- 为超时、离线、越界、尖峰和阀位错误生成单元测试;
- 对历史压力曲线做分段、聚类和异常候选标注;
- 汇总传感器、泵、阀和气泡事件的时间线;
- 检查代码是否把超时或空值错误映射成“正常”;
- 根据失败样本生成回归测试清单。
但以下工作仍应保留给确定性规则和人工批准:
- 设置或放宽安全阈值;
- 跳过失效传感器;
- 在流路身份不明时继续动作;
- 根据一次异常自动修改生产配方;
- 用模型推断代替台架验证。
结语
AI Agent 接入真实液路的第一步,不是让它控制更多执行器,而是让它看到更可靠、带边界的物理证据。
把命令、传感器配置、数据新鲜度、动作压力窗口、异常分类和确定性恢复规则放进同一份状态契约后,AI 才能在不越权的前提下帮助工程团队解释日志、生成测试和缩短排查时间。
**说明:**本文由 FOREACH 恒永达团队成员基于官网公开产品资料和通用工程方法整理。示例阈值、JSON 和 Python 代码仅用于架构讨论,不构成医疗诊断建议,也不替代产品规格书、通信手册、风险分析和整机验证。
更多推荐


所有评论(0)