新闻详情

新闻详情

首页 / 资讯中心 / 详情

楼宇自控温湿度监测方案:Modbus TCP/UDP与SNMP组合实践

发布时间:2026/9/29 10:37:02来源:尧图网络
楼宇自控温湿度监测方案:Modbus TCP/UDP与SNMP组合实践
楼宇自控项目里温湿度监测永远是最刚需、但也是最容易做出标准答案却跑不通的环节。前两年我接手过一个中型园区的楼宇自控系统改造旧系统用的是某厂商的封闭协议传感器坏了想换第三方设备都不行报价高得离谱。后来我们用Modbus TCP/UDP加SNMP这套组合拳重新搭了一套温湿度监测系统成本降了一大截后期扩容也灵活得多。这套方案里踩过的坑、绕过的弯我觉得值得单独拿出来写一篇。这篇内容适合做楼宇自控、弱电集成、机房动环监控的工程师参考也适合那些想摆脱厂商锁定、自己掌握数据主动权的项目负责人。我会从协议选型的底层逻辑讲起到硬件组网、代码实现、SNMP接入、告警策略最后是部署实测中的问题复盘尽量把整个构建过程说透。1. 为什么是Modbus TCP/UDP SNMP这个组合协议选型的底层逻辑先说结论这个组合不是拍脑袋定的而是把楼宇自控里两个层面的事情分开解决了——设备数据采集和系统平台对接。1.1 Modbus TCP/UDP解决怎么把传感器数据拿回来楼宇里的温湿度传感器无论是有线还是无线、无论是壁挂还是管道式到了现场总线层面绝大多数最终都会汇聚到Modbus协议。原因很简单Modbus是工业领域最老牌、最开放的协议寄存器读写模型极其简单厂商实现成本低产品兼容性最好。在楼宇自控的环境里Modbus RTU串口RS485依然存在但新项目我强烈建议用Modbus TCP/UDP。原因有三个布线成本RS485要走屏蔽双绞线、要手拉手串接、要加终端电阻而TCP/UDP走的都是现有的以太网楼宇里最不缺的就是网口。带载能力RS485理论挂载32个节点加中继可以增多但麻烦而以太网一个网段跑几百个设备毫无压力。排障效率RS485出问题了要拿万用表一段一段量TCP/IP出问题了直接在交换机上抓包看信息量完全不是一个级别。1.2 SNMP解决怎么把数据送进网管平台楼宇自控系统不是一个信息孤岛。甲方IT部门通常有自己的一套网管平台比如SolarWinds、Zabbix、华为eSight之类它们统一监管网络设备、服务器、数据库。这些平台对SNMP协议的兼容是天生的——网络设备、服务器出厂标配SNMP网管平台对SNMP的采集链路最成熟稳定。楼宇里的空调机房、变电所、网络机房这些区域的温湿度数据如果能走SNMP上报到网管平台就不需要甲方IT再单独学一套楼宇自控软件CIO层面非常买账。所以这套方案的定位是Modbus TCP/UDP负责从传感器到边缘采集网关这一段的数据搬运SNMP负责从节点到网管平台这最后一段的对接上报两者各司其职组合起来正好覆盖了整个监测链路。1.3 Modbus UDP有没有必要用我的真实看法很多人问既然有TCP为什么要提UDP我的答案是TCP是必须的UDP是备胎但这个备胎在特定场景下还挺关键。Modbus TCP走的是TCP连接有握手、有确认、有重传可靠性高但代价是连接状态的管理以及TCP的粘包/拆包处理逻辑。Modbus UDP是无连接的发送方把报文丢到网络上就不管了接收方收到就解析。在局域网这种高可靠环境里UDP模式反而简单粗暴高效延迟更低实现代码也更短。实际项目中如果传感器节点数量多、采集周期短且交换机质量可靠UDP模式的稳定性和实时性表现甚至优于TCP。但它有个致命弱点网络拥堵或交换机丢包时UDP报文静默丢失没有重传机制。所以我会建议采集周期小于等于2秒且网络环境可控的场景考虑UDP否则主用TCP。2. 硬件选型与网络拓扑先把骨架搭对再谈代码系统设计最忌讳一上来就写代码。协议再熟硬件选型错误一样白搭。这里分享我的选型顺序和拓扑设计思路。2.1 传感器的三种接入形态楼宇里的温湿度传感器以接入方式划分基本是三种接入形态常见类型优点缺点直连Modbus TCP带网口的工业级温湿度传感器最简单直接网线插交换机单台成本高布线要求高RS485 网关转换RS485温湿度传感器接Modbus TCP网关传感器便宜可挂多路需多一层网关网关是单点无线Zigbee/LoRa 网关聚合无线温湿度探头免布线施工快成本偏高链路环节多稳定性弱我在这个项目里用的是第二种RS485传感器加Modbus TCP网关。理由很实在——甲方的机房、管井里原本就有大量存量RS485传感器不忍浪费而且RS485传感器单价普遍在100200元区间比带网口的TCP传感器便宜一半以上。网关选型上注意一点要选支持透传模式的网关不要选内置轮询逻辑的网关。内置轮询的网关比如某些国产型号自带定时采集功能看似方便实际上把你锁死在它的配置界面里排查故障时它自己做了缓存你根本看不到原始报文非常被动。透传模式就是纯粹的串口转以太网谁发Modbus TCP请求它就翻译成RS485信号发给传感器再把响应原样转回所有的轮询逻辑都在你的上位机里出了问题抓包一目了然。2.2 网络设计的三个要点VLAN划分温湿度传感器网络建议单独划一个VLAN和办公网、访客网隔离。好处是广播域隔离避免DHCP冲突也能防止某个传感器被误配置成上网设备后把整个网络搞乱。传感器数量在100个以内一个VLAN足够网段用192.168.100.0/24。IP规划传感器和网关建议做IP/MAC绑定在DHCP服务器上做静态租约不要图省事全部自动获取。装个温度传感器结果IP漂移了排查起来比登天还难。命名规范也提前定好比如BA-TH-0101楼宇自控-温湿度-01层01号统一做进资产表。端口规划Modbus TCP默认端口502Modbus UDP同样默认502SNMP Agent端口161SNMP Trap端口162注意502端口是IANA注册的但不代表所有防火墙都放行。实际部署时我遇到过楼宇核心ACL策略默认只放行80/443Modbus端口被静默丢弃的情况。所以提前跟甲方网络管理员确认好ACL策略别等到现场联调才抓瞎。2.3 拓扑结构我推荐的星形两级架构------------- | 网管平台 | (SNMP Manager) ------------ | 161/162 | ------------ | 采集服务器 | (Modbus Poller SNMP Agent) ------------ | 502 ---------- | 楼层交换机 | ---------- | | | ---- ---- ---- |网关1| |网关2| |网关3| (Modbus TCP网关, 串口接RS485传感器) ---- ---- ----这套拓扑里采集服务器是唯一的主节点负责所有Modbus轮询然后通过网络管理协议把数据统一对外提供。网关只做协议翻译没有任何业务逻辑挂了就换不心疼。3. Modbus TCP/UDP采集端实现轮询器设计的核心细节硬件就位之后重头戏就是采集端的代码。我用Python来实现因为开发效率高、调试方便数据量在这个场景下完全扛得住。核心库用了pymodbus这个库的同步版本和异步版本我都用过最终选了异步版本因为当传感器数量超过50个时纯同步逐个轮询的耗时已经肉眼可见。3.1 轮询器整体结构一个基本的Modbus轮询器要做四件事维护一个设备表每个传感器由IP、端口、从站地址、寄存器起始地址、寄存器数量、数据类型、采集周期这些字段唯一确定。按周期循环读取不同设备可以有不同的采集周期用字典按周期分组到点只扫描该周期的设备组。解析并入库把Modbus寄存器原始值换算成实际的温度和湿度。异常处理超时、连接拒绝、CRC错误串口侧、非法地址等都要有对应的处理分支。3.2 寄存器地址映射表设计——最容易被忽视的部分Modbus协议本身只规定了你读哪个地址但没说这个地址里的数据长什么样。所以每个传感器型号都要设计一张寄存器映射表传感器型号功能码起始地址数据类型字节序单位换算公式温湿度传感器A03保持0x0001温度INT16Big-Endian℃原值/10温湿度传感器A03保持0x0002湿度INT16Big-Endian%RH原值/10温湿度传感器B04输入0x0000温度Float32Little-Endian℃直接读取温湿度传感器B04输入0x0002湿度Float32Little-Endian%RH直接读取我在实际项目里至少遇到过三种编码方式INT16整数除10最常见精度0.1℃Float32 IEEE 754浮点占用2个寄存器整数带上限偏移比如065535映射-40120℃需要线性换算务必在联调阶段逐个寄存器验证映射关系别偷懒。我见过一次大坑某国产传感器文档写的是温度保存在0x0001类型INT16实际读出来是湿度保存在0x0001类型UINT16文档和实现完全对不上。这种问题只有用Modscan64等工具手动读一遍才能发现。3.3 核心轮询代码框架这是我整理过多次的轮询器简化框架去掉了具体的业务逻辑import asyncio import logging from pymodbus.client import AsyncModbusTcpClient logger logging.getLogger(modbus_poller) # 设备表示例 DEVICES [ { name: BA-TH-0101, ip: 192.168.100.51, port: 502, slave_id: 1, # Modbus从站地址TCP模式下通常为1 fc: 3, # 功能码3读保持寄存器4读输入寄存器 start_addr: 0x0001, quantity: 4, # 读4个寄存器覆盖温度和湿度 mapping: { temp: {offset: 0, fmt: int16, scale: 0.1}, hum: {offset: 1, fmt: int16, scale: 0.1}, }, interval: 5, # 采集周期秒 }, # 更多设备... ] # 按采集周期分组的设备字典 from collections import defaultdict POLL_GROUPS defaultdict(list) for dev in DEVICES: POLL_GROUPS[dev[interval]].append(dev) async def read_device(dev): 读取单个Modbus TCP设备返回解析后的数据字典 client AsyncModbusTcpClient(dev[ip], portdev[port], timeout3) try: await client.connect() if not client.connected: raise ConnectionError(连接失败) if dev[fc] 3: resp await client.read_holding_registers( addressdev[start_addr], countdev[quantity], slavedev[slave_id] ) else: resp await client.read_input_registers( addressdev[start_addr], countdev[quantity], slavedev[slave_id] ) if resp.isError(): raise ValueError(fModbus返回错误: {resp}) # 解析 result {} for key, rule in dev[mapping].items(): raw resp.registers[rule[offset]] if rule[fmt] int16: # 有些传感器INT16是带符号的需要处理负数 if raw 0x8000: raw - 0x10000 result[key] round(raw * rule[scale], 1) # 其它格式Float32等在真实项目里按字节序重组 return {device: dev[name], **result} finally: client.close() async def poll_loop(interval): 按指定周期循环轮询一组设备 devices POLL_GROUPS[interval] while True: tasks [read_device(dev) for dev in devices] results await asyncio.gather(*tasks, return_exceptionsTrue) for r in results: if isinstance(r, Exception): logger.error(f轮询异常: {r}) else: # 这里把结果写入数据库或推给SNMP Agent logger.debug(f数据: {r}) await asyncio.sleep(interval) async def main(): # 为每个周期组启动独立任务 tasks [poll_loop(interval) for interval in POLL_GROUPS] await asyncio.gather(*tasks) if __name__ __main__: logging.basicConfig(levellogging.INFO) asyncio.run(main())几点经验补充轮询并发要控速虽然Python异步并发轻松但网关和传感器的承受能力有限。实测下来一个网关后挂32个RS485传感器时最快也要保持1秒间隔太快了串口总线容易出CRC错误。建议全系统的轮询请求频率控制在网关串口波特率的合理范围内9600波特率对应大约每秒35个完整请求帧。超时时间设3秒不要设太长否则一个设备断线会把整个轮询组拖死。断线设备要进熔断名单连续失败10次就停止轮询它5分钟避免无意义的重试打满日志。日志必须有名有姓错误日志里要带设备名和IP比如BA-TH-0101(192.168.100.51) 读寄存器超时别只写read failed。现场排障时这是你唯一的线索来源。3.4 Modbus UDP模式的处理差异UDP模式下轮询器代码有几处关键变化使用AsyncModbusUdpClient替代TCP客户端没有连接和断开的概念直接发请求报文必须自行保存设备元组列表和对应的事务ID这是Modbus UDP最容易出错的地方响应和请求的对应关系靠Transaction Identifier事务ID匹配标准是请求发出去的事务ID要和响应的保持一致实际上很多简化实现里干脆不校验事务ID因为我们是一问一答的顺序模式同一时刻对一个设备只有一个未完成的请求顺序对应就够了。但要注意如果轮询逻辑改为并发模式同一时刻向同一设备发多个不同功能码的请求就必须严格校验事务ID否则读取结果会互相串。4. SNMP接入的两种路径把数据送出去才算闭环Modbus采集端把数据拿到手只是第一步。真正让系统被甲方接受的关键是SNMP这一段——把温湿度数据变成网管平台一种标准的数据源。这里有两种路径我在不同项目里都实测过。4.1 路径A用SNMP Agent暴露私有OID让网管平台来拉思路运行在采集服务器上或专门的数据转换节点上的SNMP Agent进程把传感器数据映射为一组私有OID网管平台通过SNMP Get/GetNext来定时拉取。这种模式最贴合网管网平台的现有操作习惯——管理员在网管系统里添加一个主机填IP和团体名就能看到这台的各OID节点数据完全复用已有的监控视图。私有OID的规划有讲究。企业级设备的私有OID通常在1.3.6.1.4.1前缀下厂商会申请一个企业号。如果是自用系统在企业号子树内自定义一层比如1.3.6.1.4.1.34556.1.2.1.1.1.1 # 第1个传感器的温度数值 1.3.6.1.4.1.34556.1.2.1.1.2.1 # 第1个传感器的湿度数值 1.3.6.1.4.1.34556.1.2.1.1.1.2 # 第2个传感器的温度数值要让网管平台知道这些OID叫什么含义需要提供一份MIB文件Management Information Base。MIB本质是一个文本文件用ASN.1语法描述每个OID的层级、名称、数据类型、读写权限。即使网管平台不加载MIB也能看到数值数值是纯数字的但加载后才会有可读性这个环节建议别偷懒。Linux下面配置SNMP Agent通常用net-snmp套件。装好之后修改/etc/snmp/snmpd.conf通过扩展指令的方式让snmpd在收到特定OID请求时执行一个外部脚本# 在 snmpd.conf 中添加当访问该OID子树时执行 /usr/local/bin/temp_hum_sensor_status exec .1.3.6.1.4.1.34556.1.2.1.1 /usr/local/bin/sensor_data_provider/usr/local/bin/sensor_data_provider可以是任何一个脚本按行输出两个值——结果类型和结果值#!/bin/bash # 从共享文件或缓存读取最新采集到的温湿度值 TEMP$(cat /var/run/bas/temp_latest) HUM$(cat /var/run/bas/hum_latest) echo integer echo $TEMP echo integer echo $HUM这种方法的好处是配置简单不需要通过snmpd的内置表接口注册数据直接把采集进程的结果通过文件或管道传给snmpd很适合中小规模项目。4.2 路径B用SNMP Trap主动推告警拉模式适合网管平台周期性取数但告警场景需要反向推送——当温湿度越界时系统主动发Snmp Trap给网管平台网管平台急速弹出告警窗口。Trap的优点是实时性好不受轮询周期限制。缺点是UDP报文本身不可靠而且发送频率过高会被网管平台列为事件风暴。所以Trap只发送状态变化不重复发送同一事件。Trap实现上用的还是net-snmp的snmptrap命令# 当温度超过28℃时发送一条Trap snmptrap -v 2c -c public 192.168.10.50 \ 1.3.6.1.4.1.34556.1.100.0.1 \ 1.3.6.1.4.1.34556.1.100.1 s BA-TH-0101 \ 1.3.6.1.4.1.34556.1.100.2 s OID_VALUE_HIGH_TEMP \ 1.3.6.1.4.1.34556.1.100.3 s 温度超限: 实测29.5℃, 告警阈值28℃注意snmptrap的第二个参数是-v 2c对应下那个空引号位置放的是Trap的IP和Agent地址实际使用中写网管平台IP或留空表示本机。这里有一个网络的隐性坑Trap走的是162/UDP端口很多网管平台默认只监听161。如果甲方用的网管平台之前没接过Trap大概率需要在监控服务器防火墙放行162/UDP入站并且确认网管平台开启了接收Trap开关。这个在联调前就要跟甲方确认好现场才不至于来回折腾。4.3 Windows上怎么弄SNMP Agent楼宇自控的采集服务器碰Windows的概率不低。Windows Server本身自带SNMP服务。开启方式控制面板 → 程序 → 启用或关闭Windows功能 → SNMP 服务启用后重启然后在服务里配置SNMP服务属性设置团体名Community默认public建议改、允许的来源主机只填网管平台IP。需要注意的是Windows自带的SNMP Agent功能非常基础没法通过扩展脚本直接挂私有OID。想在Windows上暴露自定义OID要么用第三方的私有SNMP Agent比如某些商业软件要么干脆把数据转换节点放在Linux上Windows只跑Modbus轮询采集。我在项目里的习惯是采集服务器统一用Linux容器化部署省去Windows扩展能力不足的烦恼。如果你确实把数据转换放在了Windows上还有一种取巧做法——安装net-snmp的Windows版本一个轻量安装包装完就有snmpd.exe和snmptrap.exe。配置方式与Linux类似。有人问windows snmp下载应该下哪个我会建议直接去找net-snmp的官方构建版本比Windows自带的那个残缺版好用得多。5. 数据稳定性与告警策略采到数据不丢、告警不轰炸数据链路通了只是开始。真正运行起来后考验的是稳定性设计和告警逻辑的人性化。5.1 断线缓存与自动补采Modbus轮询过程中传感器断网是常态POE供电不稳、网线松动、网关死机。最怕的情况是断线期间的历史数据直接丢失事后追查问题没有任何依据。我的做法是设计一个环形缓存队列在采集服务器本地每条记录包含设备名、时间戳、温度、湿度、状态标志所有数据先写本地时序数据库比如InfluxDB或SQLite加时间索引再定期同步到中心平台断线期间的哲学断线本身是重要数据不能当异常忽略。记录状态标志DOWN即使没有数值时间戳和状态也有价值恢复后通过重新轮询并对比是否可补采某些传感器不支持回溯读取那就把断线时段标记为数据缺失切不可编造数值填补5.2 告警阈值不要只盯绝对阈值多数温湿度报警系统只会配一个简单的范围温度28℃告警湿度30%告警。这种设计的问题是突发性事件如空调故障导致的温度快速爬升等到越过阈值时已经晚了而缓慢漂移如季节变化导致的机房温度从26℃慢慢涨到27.5℃又不会触发告警但积少成多也可能损坏设备。我从运维角度做了两层告警绝对阈值告警超过固定上下限比如温度30℃、15℃立即告警。速率阈值告警计算5分钟内的温度变化斜率如果每分钟变化超过2℃即使还没到绝对阈值也发预警信息。这个策略在实际项目里真的提前发现过一次精密空调故障——温度从22℃向30℃爬升的过程中速率告警比固定阈值告警提前了12分钟发出抢出了宝贵的处置窗口。告警的送达方式SNMP Trap是一条路但建议再加上Webhook推到钉钉/企业微信群。实际运维中网管平台的告警往往会淹没在大量系统事件里而一个5号机房温升过快的微信消息效果远好于网管平台角落里的一条告警。5.3 熔断与降噪机制传感器故障和网络故障要区分。一个网关掉线会导致旗下32个传感器全部离线如果不区分你会在告警平台看到32条红屏警报。此时应该只发一条网关BA-GW-0101离线的综合告警其下传感器更新为从属离线而不是逐台发。实现上就是做一层状态聚合以网关为单位网关心跳用Modbus 0x07诊断功能或周期性读任意从站的设备标识停了子节点一律不告警。这个细节一定不要漏不然第一周运维光看了。6. 项目部署实测与踩坑复盘这些坑你一定也会踩到最后这部分是我最想写的——纸上谈兵谁都会实测阶段遇到的问题才是真正的经验值。以下按踩坑→原因→解决方案的方式复盘几个典型问题。6.1 网关TELNET配置的陷阱很多Modbus TCP网关支持通过网页或串口配置串口参数波特率、数据位、停止位。但有的网关配置界面里有一项串口空闲超时或TCP连接超时默认值可能只有几十秒。坑在于采集服务器和网关之间的TCP连接是长连接如果网关的超时设置太短比如60秒无Modbus请求就断开串口而你的轮询周期是30秒那理论上还行但如果某段时间轮询器重启导致超过60秒没有请求网关的串口会释放RS485总线。等轮询器恢复后TCP连接还在但RS485总线根本没收到信号。表现就是TCP层一切正常Modbus层全部超时。这个坑我排查了整整一个下午最后用笔记本直连网关替换正常路测才发现。对策网关的串口空闲超时设置为0表示永不超时或在测试阶段就把网关的Telnet控制端口打开出现异常时直接看网关自己的诊断日志。6.2 Modbus字节序看似统一实则混乱Modbus协议规定寄存器内的字节序是大端Big-Endian高字节在前但寄存器之间的顺序没有严格规定。这句话导致了无数现场事故用两个寄存器存32位数时有的厂家先发高16位寄存器有的先发低16位用4个寄存器存float时有的按高低高低排列有的按低低高高字符串和编码更是各家有各家的规则实测中最快的方法是在传感器旁边放一个标准温湿度计人为改变环境温度比如用吹风机吹一下看Modbus这边读到的原始int值跟面板显示是否一致、变化方向是否相同。一切的解析规则都以这次实测为准。先测3个不同厂家的传感器确定各自的规则再做解析层不要看文档想当然。6.3 SNMP团体名安全与性能平衡SNMP v2c的团体名community string是明文认证默认的public等于裸奔。部署时我是这么分级的只读团体名bas_read自定义随机串配给网管平台读写团体名干脆不配不给写权限访问控制snmpd.conf里限制来源IP只允许网管平台IP访问snmpd.conf示例# 允许本机管理 rocommunity bas_read 192.168.10.50 rocommunity bas_read 127.0.0.1 # 禁止其他来源另外要注意SNMP v2c的性能瓶颈在大型MIB遍历walk。如果网管平台配置了每30秒walk一次整棵树且你挂了几百个传感器节点CPU占用和网络包都会很可观。实测中我发现每5分钟walk一次完全满足监控需求30秒反而会干扰采集端的轮询——因为snmpd和Modbus采集进程在同一台服务器上争抢CPU和网络。6.4 热数据交换的时序问题多个传感器地址连续、采集周期相同的Modbus支持连续寄存器读取。比如读地址0x0001到0x0004一次搞定温度和湿度比分别读两个地址快不少。但这不是免费的——一次请求跨越多个寄存器的功能码要匹配传感器支持的最大连续读取长度。有些老传感器限制一次最多读2个寄存器多发会返回非法数据地址错误。做法是设备表里为每个设备配置最大连续读长度超过就分段读。看似小细节但对稳定性影响巨大——因为跨多个传感器的话一个报错可能导致整片数据丢失。6.5 告警风暴一次空调故障引发的DN项目上线第二周精密空调故障导致三个机房的温度同时超过告警阈值。SNMP Trap每30秒发一次因为阈值持续超限瞬间告警平台被几百条Trap刷屏运维手机一晚上响了几百条通知最后所有人直接把告警静音了。这是典型的告警疲劳问题。解决方式是引入告警抑制和升级策略同一设备同一等级的告警15分钟内只发一次告警持续存在但已通知过一次则进入持续告警状态不再重复推送只更新网管平台的状态显示如果持续30分钟不恢复升级为高优先级再次通知到值班主管这套逻辑在传统楼宇自控里靠人工判断现在用配置化的规则引擎落地简单可靠。我甚至建议在采集服务器上放一个独立的告警去重模块所有告警先过它再决定推不推。用Redis计数或者SQLite状态表都能实现别让告警风暴成为你们系统的第一课。7. 关于这套系统持续演进的一点想法项目交付后并不会真的结束。温湿度监测只是整个楼宇自控数字化的第一步把Modbus TCP/UDP采集这一层打通之后后续的PM2.5监测、VOC气体浓度、漏水检测、能耗监测都可以顺理成章用同一套设备接入框架来扩展。我目前正在做的一个方向是把这套系统的采集数据直接提供给BIM模型做房间级热力图可视化。做这类事情不是技术炫技而是让数据真正参与装修和运维决策——哪面外墙隔热差、哪个机房热通道散热瓶颈在哪看着一张平面图比看一百条报警记录有用得多。技术选型上Modbus和SNMP都服役了几十年它们不够新潮但胜在稳定、开放、无处不在。选择它们你是在选择把系统的控制权留给业主自己也留给未来的自己。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

如何衡量长上下文RAG的质量与速度?RedKnot HotpotQA Demo实战:F1/EM/TTFT一次看全 2026/9/29 15:50:13

如何衡量长上下文RAG的质量与速度?RedKnot HotpotQA Demo实战:F1/EM/TTFT一次看全

如何衡量长上下文RAG的质量与速度?RedKnot HotpotQA Demo实战:F1/EM/TTFT一次看全 【免费下载链接】RedKnot Efficient Long-Context LLM Serving with Head-Aware KV Reuse and SegPagedAttention 项目地址: https://gitcode.com/gh_mirrors/re/RedKn…

阅读更多 →
三星手机刷机全攻略:Odin3驱动与固件安装实战 2026/9/29 15:50:13

三星手机刷机全攻略:Odin3驱动与固件安装实战

先说明一件事:刷机不是玄学,三星手机刷机更是有章可循。只要搞明白Odin3和驱动、ROM这三者的关系,整个过程基本就是照着流程走。作为常年折腾三星设备的人,我前前后后用Odin3刷过S8、Note9、S10、S20,也帮朋友救过好几…

阅读更多 →
TPOT实战:用遗传编程自动化机器学习流水线 2026/9/29 15:50:13

TPOT实战:用遗传编程自动化机器学习流水线

做机器学习这几年,我听过最多的一句话是:“模型效果不好,要不要换个算法试试?”但真正做过项目的人都知道,换算法往往是最没用的一步。数据清洗怎么做、特征怎么构造、缺失值怎么处理、用哪几个特征组合、模型复杂度控…

阅读更多 →
从轮询卡顿到WebSocket实时推送:心跳与重连实战指南 2026/9/29 15:50:07

从轮询卡顿到WebSocket实时推送:心跳与重连实战指南

前阵子维护一个后台管理系统,列表页每 5 秒用定时器发一次状态轮询,结果接口一抖动,请求就堆在浏览器里,用户输入都跟着卡。后来改成 WebSocket 实时推送,同一个页面,数据从服务端到前端基本在 100 毫秒内到…

阅读更多 →
OAuth2.0+JWT双令牌机制在第三方API鉴权中的实践与踩坑记录 2026/9/29 15:50:07

OAuth2.0+JWT双令牌机制在第三方API鉴权中的实践与踩坑记录

我去年接手了一个餐饮优惠聚合平台的接口服务,对外要对接好几家外卖平台和本地商户的开放 API,对内要给小程序和 App 提供统一入口。这个服务在内部被伙伴们习惯性称为“霸王餐 API”——因为它整天处理的就是优惠权益聚合、订单核销和状态同步这类事情。…

阅读更多 →
GitHub镜像站搭建指南:用Nginx缓存加速源码与Release下载 2026/9/29 15:50:07

GitHub镜像站搭建指南:用Nginx缓存加速源码与Release下载

做开发这些年,我发现一个特别常见的现象:明明源码在GitHub上放得好好的,可一到关键时候,clone个仓库慢得像蜗牛爬,发布包里动辄几百MB的依赖资源,下载到一半还给你断连。尤其是一个团队里几个人同时拉同一份…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉