在 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_idrecipe_revision
  • 目标流路和阀位;
  • 泵的目标速度或 PWM;
  • 动作开始时间和最大允许时长;
  • 当前硬件配置版本。

第 2 层:传感器在线与配置状态

“能读到数字”不等于“传感器状态可信”。控制程序应区分:

  • 设备在线;
  • 通讯地址正确;
  • 采样率和量程配置正确;
  • 最近一次有效帧未超时FOREACH PDM5 压力检测模块
  • 上电自检、校准版本和错误状态明确。

以公开产品信息为例,FOREACH PDM5 是面向自动化仪器液路的数字压力检测模块,支持 I2C 通讯,默认 7-bit 地址为 0x6D,默认采样率为 37.5 Hz,最高可调至 100 Hz。把这些配置读回并写入日志,比在代码里假设“初始化应该成功”更可靠。

第 3 层:基线与数据新鲜度

动作开始前应保留一个短基线窗口,而不是只读一个零点。基线可以帮助发现:

  • 传感器零点漂移;
  • 管路仍残留压力;
  • 阀未完全切换;
  • 上一次动作尚未释放;
  • 数据流已经停止但缓存值仍在重复返回。

状态契约中建议同时记录 sample_age_msbaseline_meanbaseline_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 的采样率。

这些参数可以帮助完成早期选型和接口设计,但不能直接替代整机的压力阈值。真实系统还要结合:

  1. 泵的流量—压力特性;
  2. 管径、长度、接头、过滤器和阀的阻力;
  3. 介质黏度、温度、气泡和顺应性;
  4. 采样率、滤波延迟与端到端停机时间;
  5. 允许的残余体积、污染和风险等级。

也就是说,产品规格定义“传感器能做什么”,设备验证定义“这个动作在什么条件下可以放行”。

五、Claude Code、Codex 和 ChatGPT 最适合承担哪些工作

当状态契约已经明确后,AI 工具可以真正提高效率:

  • 根据字段定义生成数据类、接口和日志结构;
  • 为超时、离线、越界、尖峰和阀位错误生成单元测试;
  • 对历史压力曲线做分段、聚类和异常候选标注;
  • 汇总传感器、泵、阀和气泡事件的时间线;
  • 检查代码是否把超时或空值错误映射成“正常”;
  • 根据失败样本生成回归测试清单。

但以下工作仍应保留给确定性规则和人工批准:

  • 设置或放宽安全阈值;
  • 跳过失效传感器;
  • 在流路身份不明时继续动作;
  • 根据一次异常自动修改生产配方;
  • 用模型推断代替台架验证。

结语

AI Agent 接入真实液路的第一步,不是让它控制更多执行器,而是让它看到更可靠、带边界的物理证据。

把命令、传感器配置、数据新鲜度、动作压力窗口、异常分类和确定性恢复规则放进同一份状态契约后,AI 才能在不越权的前提下帮助工程团队解释日志、生成测试和缩短排查时间。

**说明:**本文由 FOREACH 恒永达团队成员基于官网公开产品资料和通用工程方法整理。示例阈值、JSON 和 Python 代码仅用于架构讨论,不构成医疗诊断建议,也不替代产品规格书、通信手册、风险分析和整机验证。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐