尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

给AI一双伸向设备的手:大模型接入工业设备调试的架构与实战

给AI一双伸向设备的手:大模型接入工业设备调试的架构与实战 做设备调试的朋友应该都有同感调试这活儿七分靠经验三分靠手速。设备报个警、曲线飘了、参数跑偏老师傅过去看一眼数据、敲两下键盘、拧一下旋钮问题就解决了。新手照着手册一步步来也能调但效率完全是两回事。现在AI大模型火成这样天天听人说AI能写代码、能分析数据、能做方案我身边的工程师朋友都在琢磨同一件事AI这么聪明能不能让它帮我调试设备结果试了一圈发现理想很丰满现实很骨感。AI确实能分析你贴给它的日志、能回答你提出的问题但它有一个致命的短板——它摸不到设备。它不知道设备此刻的真实温度是多少没法按下启动按钮也读不了现场的报警代码。这就是这篇文章要解决的问题给AI一双伸向设备的手。把大模型、AI Agent和物理设备之间的通路打通让AI不光能看到设备数据还能动参数、按按钮真正参与到设备调试的动作层面来。这是和AI一起调试设备系列的第一篇核心是讲清楚架构思路和最小可行链路的搭建适合做设备开发、自动化测试、工业现场运维的工程师以及所有想让AI从聊天工具变成干活搭子的人。1. 为什么非得给AI一双手聊聊设备调试的现实痛点1.1 传统调试方式的时间账先算一笔账。一台新设备进场或者一台旧设备大修之后重新跑起来调试工作大概分这么几步先得人工确认通信接口通不通然后一个个寄存器去读看传感器数值是否正常发现参数不对翻手册找到对应的寄存器地址写进去再观察设备响应如果响应不对从头再来。整个过程看起来不复杂但每一步都极其耗时。我见过最典型的场景一个温控系统做PID整定工程师守在电脑前看着温度曲线一点点爬超调了就改Kp震荡了就改Ti一次整定跑完怎么着也要半小时还不算中间等待设备稳定的时间。一天下来能调完三台设备就算效率高的。这里面的核心问题是设备调试的本质是一个读取—判断—修改—再读取的闭环而这个闭环里最浪费时间的就是人工在中间做判断和转发。1.2 大模型再聪明也绕不开最后一米大模型的强项恰恰在于判断这个环节。你给它一组数据它能快速发现异常趋势能结合经验知识给出参数调整建议甚至能写出一段调整方案。但问题在于它和物理世界之间隔着一道墙。它只能处理你喂给它的文本没办法主动去问设备要数据更没办法把调整参数的指令直接发给设备。这最后一米的距离就是AI落地设备调试的最大障碍。如果你只是把数据复制粘贴给AI问它怎么办那得到的建议大概率是泛泛而谈因为AI缺少对设备当前真实状态的感知。而如果你把数据实时喂给AI让它分析再人工执行它的建议那效率提升有限AI变成了一个高级顾问还是够不着设备。1.3 这双手到底长什么样所以我们要做的就是补上这最后一米。从技术形态上说这双手由三部分组成一是感知通道让AI能主动读取设备的状态数据二是执行通道让AI能把指令下发到设备改变设备的工作参数或状态三是安全护栏确保AI的所有动作都在可控范围内。说得直白一点我们要搭建一条链路设备 → 数据采集 → AI模型 → 指令下发 → 设备。这跟人调试设备的工作流是完全对应的——眼睛看仪表、大脑做判断、手拧旋钮。AI只是把这个流程自动化了。这篇文章后面讲的就是这条链路每一环的实现细节。2. 整体方案设计给AI装四件套2.1 感知层AI的数据入口感知层要解决的核心问题是设备的数据怎么变成AI能读懂的文本或结构化信息。设备接口五花八门串口、网口、USB、CAN总线都有通信协议更是千奇百怪Modbus、PROFINET、自定义协议……但落到AI这里它其实不在乎底层是什么协议它只关心一件事情你给我一个干净的、带单位的数据。所以感知层的设计原则就是底层适配上层统一。我的做法是在设备和AI之间加一个采集服务由它负责跟设备通信把寄存器数值、传感器读数、设备状态码统统转成语义化的文本。比如温度传感器1当前值25.3℃正常范围20-30℃这种描述对AI来说是友好且无歧义的。千万不要把原始寄存器十六进制数据直接丢给AI它不一定能算出正确的物理量就算能算出来也浪费了token而且容易出错。2.2 执行层AI的动作出口执行层解决的是反向问题AI的决策怎么变成设备的实际动作。这部分的实现方式取决于设备支持什么。如果你的设备支持Modbus通信那执行层就是一组Modbus写寄存器操作如果设备有串口命令接口那就是通过串口发送指令如果是简单的开关量可以通过继电器板控制。但有一点是通用的AI不会自己直接发Modbus报文它只会输出一个结构化的指令描述比如把1号温控器的目标温度设为80℃。然后再由执行层的程序把这个描述翻译成具体的通信指令发出。这中间有一个关键设计执行层必须是一组预定义好的工具函数每个函数负责一个具体的动作AI只能在这些工具函数里选择调用。这个设计非常重要它相当于给AI划定了一个活动范围AI不能凭空创造指令只能在你的工具集里挑。这样即使AI产生了幻觉它也没有能力去执行一个你从未定义过的危险操作。2.3 翻译层设备与模型之间的同声传译翻译层是我个人觉得整个链路里最容易被忽视、但也最影响体验的部分。它要做的事情是让AI学会使用你提供的工具。现在主流的做法是通过函数调用Function Calling或者MCP协议把工具描述、参数格式注册给AI模型。AI在对话过程中如果判断需要读取设备数据或下发指令就会返回一个工具调用请求翻译层把这个请求解析出来执行对应的函数把结果返回给AIAI再继续基于结果进行判断和下一步动作。这个感知—思考—执行—反馈的循环在用户看来就像AI在自主调试设备。设计翻译层的时候有一个经验值得分享工具的描述文本一定要写清楚什么时候该用这个工具和参数的单位和范围。比如一个工具定义为set_temperature(zone_id, temperature)你要在描述里写清楚zone_id对应哪个温区temperature单位是摄氏度取值范围0-100。AI模型没有你的背景知识描述越清晰它调用工具的准确率就越高。2.4 大脑层模型选择与角色设定大脑层就是AI模型本身。选型上要考虑两个维度一个是部署位置一个是模型能力。部署位置决定数据安全性。如果调试现场的数据涉密或者不允许出内网那就得用本地部署的开源模型比如Qwen系列、Llama系列。如果数据可以上云那直接用商业模型的API会更省心理解能力强工具调用也稳定。我的建议是第一版先用云端API把链路跑通确认逻辑没问题之后再评估是否需要切到本地模型不要一上来就折腾本地部署那样会把精力浪费在模型调优上而不是链路搭建上。角色设定同样重要。在系统提示词System Prompt里你要告诉AI你是一名设备调试工程师你的任务是分析设备状态、判断异常原因、调整参数并验证效果之类的角色描述同时把调试规范和安全边界写成明确规则。设定清晰的AI角色和约束能显著减少它乱操作的概率。2.5 安全边界这项放前面讲不是因为它是最先进的部分而是因为它最重要AI操作物理设备和AI写代码有一个本质区别代码改错了可以git回滚重新来设备参数写错了可能造成设备损坏、物料报废甚至人身安全事故。所以安全的优先级高于一切功能实现。我的安全设计分了四个层次。第一层是工具白名单AI只能调用预先定义好的安全操作函数。第二层是参数校验所有写入设备的参数在执行前都要过一遍范围检查超出安全阈值的直接拒绝并返回错误信息告诉AI参数超限。第三层是人工审批开关默认状态下AI启动调试流程需要经过工程师确认只有明确开启自动模式时AI才能连续自主操作。第四层是物理急停和看门狗保留一路独立的急停信号以及一个定时器——AI如果在设定时间内没有正常完成动作循环就触发报警暂停并通知工程师。这四层缺一不可。前两层靠软件逻辑后两层是兜底方案。尤其是第四层很多朋友做AI控制设备时容易忽略。可以说没有物理急停的自动化调试方案就是在给设备埋雷。3. 实操从零搭一条AI到设备的最小链路3.1 第一步先搞清楚设备到底怎么通信动手写代码之前先花半小时把设备手册翻清楚。我踩过最大的坑就是没看手册就上手结果发现设备的通信参数和网上的模板对不上。你需要确认三件事第一设备的物理接口是什么串口还是网口串口的话是RS232还是RS485波特率、数据位、校验位、停止位分别是多少。第二设备的通信协议是什么是标准的Modbus RTU/TCP还是厂商自定义的指令集如果是Modbus寄存器地址表什么样哪个地址是温度、哪个地址是启停控制。第三设备有没有写保护机制有些设备需要先解锁才能写入参数这个不搞清楚后面AI怎么调都是白搭。举个例子我调试过的一款温控器物理接口是RS485设备地址是1通信参数9600 8N1寄存器40001是当前温度40002是目标温度40003是报警状态。就这几行信息是整个调试链路的地基。把这些信息整理成一份表格后面写采集服务和工具函数都用得上。3.2 第二步用Python把设备状态读出来采集服务我用Python写原因没别的生态最全pyserial处理串口、pymodbus处理Modbus、FastAPI挂HTTP接口都是现成的轮子不用重复造。以Modbus RTU为例代码逻辑非常直接打开串口、构造读请求、解析响应、把数值换算成物理量、缓存到内存里。关键点有两个一个是超时重试机制串口通信受现场干扰影响偶尔会有数据帧错误采集服务要有重试逻辑不能一失败就崩掉另一个是数据语义化采集服务返回的数据不要是裸的数字最好直接组装成当前温度25.3℃正常范围20-30℃这种文本让AI拿到之后不需要再自己做解释。这一步做完你可以先不接AI直接用命令行手动调用采集接口看看设备数据能不能稳定读出来。链路每一段都要单独验证千万别想着一次性接完再调试出了问题你都不知道该查哪一段。3.3 第三步把读设备和写设备封装成工具接下来是重头戏把设备操作封装成AI能调用的工具函数。我用的是MCP协议Model Context Protocol来管理工具它能统一描述工具的参数格式不管是接商业API还是本地模型都方便。不过如果你暂时不想用MCP用各家模型服务商提供的Function Calling接口也能实现同样的效果只是迁移性差一点。工具最少要建两个一个是读取设备状态参数可以指定要读哪个通道或哪个参数另一个是设置设备参数参数至少包括通道ID、目标值可能还有执行时间或者斜坡时间。工具返回结果要结构化推荐用JSON格式里面放三个字段操作是否成功、操作后的设备实际值、附加提示信息。为什么一定要返回设备实际值因为设备写入操作有失败的可能或者写入后设备因为某些保护逻辑拒绝执行AI需要知道真实结果而不能假设自己写进去了。下面是我写的一个工具定义示例工具描述和参数描述务必写清楚AI能不能正确使用工具一半靠模型能力一半靠你的描述质量# 工具定义核心部分用于MCP或Function Calling注册 tools [ { name: read_device_status, description: 读取指定温控器的实时状态包括当前温度、目标温度、运行状态和报警信息。调试第一步应调用此工具确认设备状态。, parameters: { type: object, properties: { zone_id: { type: integer, description: 温控器编号范围1-4对应设备地址0x01-0x04 } }, required: [zone_id] } }, { name: set_device_parameter, description: 设置温控器的目标温度。参数值必须经过安全校验超出范围将拒绝执行。修改后请通过read_device_status确认新值生效。, parameters: { type: object, properties: { zone_id: {type: integer, description: 温控器编号}, target_temp: {type: number, description: 目标温度单位℃合法范围20-100} }, required: [zone_id, target_temp] } } ]3.4 第四步配置AI Agent把工具挂上去工具就位之后就是把这套工具注册给AI Agent。我用的是开源的Agent编排框架在配置文件里声明模型来源、工具列表和系统提示词。系统提示词这一栏你要像带实习生一样把调试流程写透。我的系统提示词大致长这样你是一名工业设备调试助手你的任务是根据工程师的调试目标分析设备状态给出参数调整方案并通过工具执行调整。执行任何写操作前必须先确认目标值和当前值的差异在合理范围内每次调整后必须隔一段时间读取设备状态确认调整生效。如果设备报警立即停止操作并报告。这套提示词的目的是引导AI按照规范的调试流程循环执行而不是想到哪做到哪。配置完成后做一次联调测试。用对话方式向AI下发一个简单的任务比如请把1号温控器温度从30℃调到50℃调稳后告诉我结果观察AI是否能正确调用读取状态工具分析后调用设置参数工具再调回读取工具验证。如果这个闭环能跑通恭喜你AI这双手已经接到设备上了。3.5 一个完整场景AI自动做PID整定链路通了之后我们来做一个有含金量的场景让AI给一台温控设备做PID整定。传统做法是工程师手动修改P值、I值、D值观察温度曲线反复试错。现在这套工作可以交给AI来跑。我设定一个简单的自动整定循环AI先读取当前温度曲线特征比如超调量、上升时间、稳态误差然后根据这些特征结合它对PID控制的理解计算出新的P/I/D参数接着调用设置设备参数工具把三个参数写进去等设备运行一段时间后再次读取温度数据判断超调是否减小、稳定时间是否缩短。如果效果不理想AI会继续调整参数方向直到曲线满足设定指标。实测下来AI在这个场景下的表现超出了我的预期。它不会像新手工程师那样一下把P值调得过大导致系统强烈震荡因为它有控制理论的知识背景能估算出合理的调整步长。而且它非常耐心可以连续调整十几轮不带厌烦还会在最终汇报里给出完整的调整日志。这就是调试这件事原来的样子——我负责定策略AI负责跑流程、试参数、看结果。4. 常见问题与排查技巧实录4.1 工具调用链路上的经典错误做这套系统的朋友大概率会遇到这么几个问题我把排查顺序和解决方案一起写出来。第一个是AI调用了工具但参数格式一直不对。比如应该传整数它传了字符串应该传区域编号1-4它传了zone1。这种问题九成出在工具参数描述上。你把描述写清楚说死zone_id类型是整数范围1-4模型基本就不会犯错了。如果还是出错就升级模型版本或者强制在Agent框架里做一次参数类型转换。第二个是AI陷入了循环调用不停读数据、不停调整、停不下来。这个通常是系统提示词里没有设置终止条件和最大迭代次数。我会在提示词里明确写连续三次调整后稳态误差无明显改善时应当停止输出诊断报告并等待工程师指令同时在Agent框架里设置最大循环次数达到后强制中断。第三个是工具执行成功但设备状态没变。这大概率是设备写保护或者参数写入需要特定顺序。排查思路先用人工方式调用工具函数绕过AI直接用代码写参数看能不能成功。如果人工也写不进去问题出在设备通信层如果人工能写进去问题出在AI生成的指令上。4.2 串口通信和权限的坑串口调试最常见的坑有两个。一个是Linux环境下串口权限不够Python打开串口报Permission denied。我第一回遇到还以为驱动坏了折腾了半天才发现是当前用户不在dialout用户组里。解决办法很简单sudo usermod -aG dialout $USER然后重新登录再插拔一下串口设备这些老掉牙但是总坑人的问题。另一个是串口被其他程序占用了。你开着串口调试助手软件采集程序就连不上或者采集程序崩溃之后串口资源没释放重启程序也连不上。这种问题用lsof /dev/ttyUSB0看一下是哪个进程占用的杀掉重启就好。还有一种隐蔽的坑USB转串口模块的芯片不稳定长时间跑数据会出现偶发的数据帧错乱表现就是偶尔读回来的数据不对。解决办法是给采集代码加上CRC校验和重试逻辑并且选择质量可靠的FT232或CH340芯片模块。4.3 设备状态回读不一致AI下发指令后通过读取工具验证发现读回来的值和设定的值不一致。这种情况比指令失败更容易迷惑人。我的排查经验分三步。第一步先确认是否读到了缓存数据。很多采集服务为了性能会做数据缓存如果你在写入后立刻读取可能读到的还是写入前的缓存值所以读取工具要设计成强制穿透到设备端去读不能读缓存。第二步确认数据单位换算是否正确。有些寄存器存储的是原始值需要乘以系数才是物理量系数搞错一位小数点读回来的值自然对不上。第三步确认设备是否在运行状态下才允许改参数有些参数在停止状态下才能写入运行状态下写入会被设备静默忽略这一点厂商手册必须啃清楚。4.4 安全熔断和人工审批的设计心得最后聊一下安全设计里的一个细节心得。熔断条件一定要显式、可观测不能只有在AI对话里体现。我的做法是Agent框架里单独起一个监控线程实时检查AI的连续工具调用次数、单次任务执行时长、以及是否有参数超限记录。三项指标任意一项超过阈值监控线程就直接调用急停函数同时向工程师的手机推送报警。人工审批也有两种模式要区分。第一次接AI调试系统我建议全程开着人工审批AI每执行一个写操作都会弹一个确认框请求工程师确认这个过程看着慢但对建立信任很有帮助。等整体链路跑熟、AI的操作习惯被验证安全之后再逐步放权变成只在异常时报警的自动化模式。这个节奏很关键别一上来就全自动否则出一次事故你后面想再推AI落地就会被所有人抵制。5. 最后分享一点我的体会这套给AI一双伸向设备的手的方案本质上没有发明任何新的技术它只是在AI大模型和物理设备之间做了一个合理的分层和解耦。感知层负责统一数据格式执行层负责封装安全操作翻译层让AI学会使用工具大脑层提供判断和决策。四层各司其职链路才稳定。我个人在实际搭建过程中最大的体会是把数据变得干净、语义化比换一个更强的模型更能提升调试效果。AI不需要看到一堆十六进制原始值它需要的是当前5号温区温度为210℃超出上限200℃这种一句话能读懂的信息。数据整理得好AI的分析和判断就准工具调用也稳。还有一个想单独拎出来说的小技巧日志一定要留全。AI每一次调用了什么工具、传了什么参数、返回了什么结果、当前设备是什么状态全部记录下来。这不只是为了事后排查问题更重要的是当设备出问题时你能拿出完整的证据链说清楚这条指令是AI自主决定的、参数为什么是合理的。做自动化调试工程师的自我保护意识和调试能力同样重要。这一篇先讲到这里链路搭好之后后面有机会再聊更进阶的话题比如怎么评估AI的调试策略质量、怎么用强化学习思路让AI越调越准、怎么把这个方案扩展到多设备协同调试场景。如果你也在折腾AI和设备调试这条路欢迎带着具体问题来交流。
返回列表