新闻详情

新闻详情

首页 / 资讯中心 / 详情

消息队列实战指南:重复消费、消息堆积与顺序问题排查

发布时间:2026/9/30 8:15:32来源:尧图网络
消息队列实战指南:重复消费、消息堆积与顺序问题排查
在多个项目里做过后端和中间件维护之后你会发现消息队列最让人头疼的往往不是它本身能不能跑而是它在业务中怎么乱。重复消费、消息堆积、顺序错乱、选型纠结——这些问题几乎每套系统都会碰到但网上大多数资料只讲了概念没讲清楚问题到底长在哪、现场怎么定位、方案怎么落地。这篇算是我对消息队列相关问题的一个系统整理重点放在排查思路和可复用的处理手段上适合正在用或者准备用 MQ 做异步解耦、削峰填谷、数据同步的同学参考。文章不会把 Kafka、RabbitMQ、RocketMQ 的文档复述一遍也不会只列表面参数。我想聊的是在自己维护过的系统里真正踩过的坑为什么重复消费处理不干净、堆积之后为什么一扩容反而更糟、丢消息和乱序到底怎么区分以及从简单的消息队列到生产级系统之间到底差了哪些东西。1. 先聊聊消息队列真正的问题长在哪里1.1 MQ 的敌人不是 Broker而是调用链路上的不确定因素很多人一听说消息队列出问题第一反应就是Broker 挂了或者网络抖了。实际上在我经历过的 MQ 故障里纯 Broker 自身故障的占比并不高真正让人头疼的是消息在整个调用链路上的状态不确定。消息从生产者产生经过 Broker 存储和转发最后被消费者拉取并按业务逻辑处理。这条链路里每一环都有可能成功也可能失败的灰色地带。生产者发送消息后TCP 连接断开了Broker 到底收没收到消费者处理完业务还没来得及提交消费位点进程就崩了消息会不会重新投递这些都不是 MQ 本身的问题而是分布式系统里网络不可靠、进程可能随时挂、数据状态需要多方确认带来的衍生问题。所以排查 MQ 问题之前我的第一个建议是先把问题归类别急着抓 MQ 的日志。问题到底是生产端投递失败还是消费端处理异常或者是 Broker 侧的存储/转发瓶颈这三个方向的处理路径完全不同。1.2 三类问题根因的占比规律我自己的观察一个中等规模的业务系统里MQ 相关的问题大概可以按这样的比例分布问题类别典型表现常见根因大致占比消费端业务处理问题消息处理慢、抛异常、无法提交位点业务代码 Bug、慢 SQL、外部依赖超时接近一半消息可靠性/一致性重复消费、消息丢失、顺序错乱幂等缺失、重试机制不当、位点提交策略错误约三成容量与性能问题堆积、消费延迟、Broker 分区不均衡分区数设计不合理、消费者并发不足、批量参数未调约两成这个比例说明了一个很扎心的事实大多数 MQ 问题本质上是业务代码和系统设计的问题不是 MQ 软件的问题。所以你与其天天盯着监控面板看 Broker 的指标不如先把消费端的日志结构、幂等方案、位点提交策略这些基础功夫做扎实。后面的章节我会围绕这几类高频问题逐个展开。2. 重复消费问题最经典但最容易做错的处理逻辑2.1 为什么重复消费躲不掉先明确一个基本事实在绝大多数主流消息队列的投递语义下重复消费是常态不是异常。Kafka 的消费位点offset是消费者在本地提交的如果消费者处理完消息但还没提交 offset 就宕机重启后会从上次提交的位置重新拉取RabbitMQ 的自动 ACK 模式如果在处理逻辑抛异常前就 ACK 了消息就丢了但如果改成手动 ACK又可能因为处理超时导致消息重新入队。RocketMQ 的消费失败重试和定时重试机制本质上也允许同一条消息被投递多次。说白了只要系统的目标是不丢消息那它一定会采用至少一次at-least-once的投递语义。在这个语义下所有实现都会出现一个副作用同一条消息可能被投递多次。这不是缺陷是保证可靠性的必然代价。想完全不重复就要牺牲不丢失也就是至多一次at-most-once——但业务系统里绝大多数场景宁肯多处理一次也不能丢一条关键消息。2.2 幂等去重的三套常规动作既然重复躲不掉那处理重复的手段就只有一个核心思想让重复消费的业务效果和一次消费完全相同也就是做好幂等。我这里整理了三个级别的方案从简单到完整按场景选用。方案一业务唯一键 数据库唯一约束这是我最推荐的首选方案没有之一。每条消息里带上一个业务唯一标识比如订单号、流水号、用户操作 ID消费端写数据库时把唯一键落到表结构上通过数据库的唯一索引天然拦截重复插入。这样即使消息被并发消费两遍第二条要么插入报错被捕获要么 UPDATE 语句影响行数为 0都不影响最终结果。这里的细节是唯一键不能随便用主键 ID。如果主键是数据库自增的那同一条消息的两次消费会生成两条记录。必须用业务层面的 ID。方案二消费端本地去重表/去重集合如果业务不适合加唯一约束比如是调用外部接口而不是写数据库可以在消费端维护一张去重表。字段设计很简单message_id 做唯一键status 标记处理状态再存一个处理时间。消费逻辑先查这张表如果 message_id 已经存在且状态是成功直接跳过否则执行业务逻辑再更新表状态。为了保证并发安全去重表的插入动作要做成原子操作或者用分布式锁包住查-处理-更新这三步。方案三基于 Redis 的短时间窗口去重对时效性要求不高的场景比如通知类消息、非核心的数据同步可以用 Redis 的 SETNX 命令做滑动窗口去重。以 message_id 为 key设置一个合理的过期时间比如 5 分钟到 1 小时消费前先尝试写入写入成功才继续处理。这个方案性能好但存在两个隐患一是 Redis 过期时间到了之后可能重复消费所以只适合容忍一定重复率的场景二是如果 Redis 和数据库之间出现一致性问题处理成功但 SETNX 没留住还是要靠业务幂等兜底。我见过不少团队一上来就想用 Redis 去重以为这样最快结果跑一段时间发现重复数据还是漏进库里。原因就是他们把 Redis 去重当成了唯一的防线却没有在数据库层做幂等。我的建议是Redis 去重只能做第一道过滤数据库唯一约束或业务幂等才是最终防线。2.3 一个真实排查案例为什么去重表加了还是重复之前维护过一个订单状态同步的服务消费端已经做了 Redis 去重上线一段时间后业务方还是反馈有重复的订单状态更新记录。排查过程很典型先看日志发现两条重复消费的消息message_id 是一致的但两条日志的时间差超过了几分钟。这就奇怪了Redis 的 key 明明设置的是半小时过期怎么会几分钟就被放行继续查发现消费端代码里在执行业务逻辑之前先做了消息体的 JSON 序列化转换而 Redis 去重用的 key 是从转换后的对象里取的一个字段拼接出来的。问题出在这个字段在两条消息里不完全一样——因为消息里有一个嵌套对象序列化之后 key 的尾缀变化了导致同一个 message_id 生成了两个不同的 Redis key。这属于典型的字段取错了问题不是方案本身的问题。后来我把去重 key 统一改成消息头里一个固定的 message_id 字段同时在订单状态表里加了业务唯一约束双保险下去重复问题才彻底收敛。这个案例想说明的是去重方案设计得再漂亮取 key 的规则一旦不稳定整个方案就是空中楼阁。去重 key 必须来自消息中全局唯一、内容稳定、不会被业务逻辑篡改的字段。3. 消息堆积消费追不上时的扩容与治理思路3.1 堆积的两种形态和判断标准消息堆积在业务侧的表现就一句话消息从产生到被消费的延迟越来越大。但背后其实是两种完全不同的形态处理方式也不一样。第一种叫持续型堆积生产速率长期高于消费速率队列长度像负债一样越滚越大。这种形态通常是容量规划问题要么消费者数量太少要么单条消息处理耗时太长要么分区/队列的数量设计不合理。第二种叫突发型堆积平时队列很平某个时刻突然涌进来一大批消息比如秒杀、活动、外部接口突发回调短暂超过消费能力然后又恢复正常。这种形态一般不需要扩规模只要扛过峰值即可。怎么判断是哪种看 TP99 消费耗时和队列积压数的趋势曲线。如果积压数在峰值过后自然下降属于突发型如果积压数持续横盘甚至上涨属于持续型。3.2 先保速率消费端扩容的三个前提面对堆积很多人的第一反应是加消费者实例。这个方向没错但直接加可能有反效果。扩容之前先确认三件事第一消费组的分区数是否足够。像 Kafka 里单个分区同一时刻只能被一个消费者实例消费如果分区数只有 3那你加再多消费者也只能有 3 个在跑剩下的全闲着。所以扩容消费者实例之前先看分区数和实例数的关系。RocketMQ 的 MessageQueue 和消费者实例也存在类似的绑定关系。第二是否有下游依赖在限制吞吐。消费端往往要写数据库、调用外部 API。如果数据库连接池满了或者外部接口限流了加再多消费者只会加重下游压力堆积没解决反而把数据库打挂了。扩容前要同步评估下游的承受能力必要时给消费者加本地限流。第三批量消费参数是否打开。很多消费端一次只能拉一条消息每条都经历一次网络往返和处理上下文切换吞吐自然上不去。Kafka 的 poll 参数、RocketMQ 的 consumeMessageBatchMaxSize、RabbitMQ 的 prefetch count都值得根据消息大小逐步调大。我见过一个数据同步服务把批量消费条数从 1 调到 50堆积曲线的斜率肉眼可见地翻转。3.3 治本方向从业务链路里拆慢点扩容和批量参数是治标真正治本的是把消费链路上的耗时大头拆出来。我遇到过一个典型的堆积案例消费者要处理一条消息里面包含解析、校验、查询用户信息、调用积分服务、写订单表、发送通知六个步骤整条链路的平均耗时接近 800ms。这个耗时意味着单个消费者每秒最多处理 1 条多消息生产端随便一个业务操作产生几条消息就把队列吃满了。排查后发现最大的耗时点是查询用户信息这一步调用了一个响应很慢的 RPC 接口而且每次消费都实时查询。后来的改造很简单给用户信息加了一层本地缓存把 RPC 的超时时间从 3 秒压到 500ms再把通知发送改成异步批量上报。链路平均耗时从 800ms 降到 120ms消费者数量不增反减堆积问题彻底消失。所以每次遇到堆积我都会问几个问题消息里的每一步操作是不是都必须同步完成哪些数据可以缓存哪些下游调用可以合并哪些动作可以异步化把消费链路当成一个独立的小系统来优化往往比简单地堆机器有效得多。4. 消息丢失和乱序两类常被误判的疑难杂症4.1 丢消息的三个环节与兜底方案消息丢失比重复消费隐蔽得多因为重复消费常常能从业务数据里看出来而丢失是从来没有发生的你根本不知道它没发生。我习惯把丢消息的场景分成三个环节来看环节一生产端发丢。生产者调用 send 方法如果采用 fire-and-forget 模式不关心返回结果一旦网络抖动或 Broker 暂时不可用消息就静默丢失了。解决方案是改为同步发送并捕获异常做重试或者开启生产端的确认机制如 Kafka 的 acksallRocketMQ 的同步发送等待返回。重试时要小心中间态所以生产端要做发送日志或埋点方便追踪。环节二Broker 端存丢。消息进了 Broker 但还没同步到副本就发生故障理论上可能丢。主流做法是开启多副本同步机制比如 Kafka 的 replication.factor 至少是 2min.insync.replicas 设为 2这样只有写入 Leader 且同步到 ISR 里的副本才算确认成功。代价是吞吐下降但对关键业务是值得的。环节三消费端丢。这是最常见的丢消息场景。典型错误是先提交位点/ACK再处理业务逻辑。比如 Kafka 消费者开启 enable.auto.committrue默认 5 秒自动提交一次如果刚提交完 offset 进程就崩了还没来得及处理的几条消息就永远被消费了。RocketMQ 也有类似问题如果消费端在监听器里先返回 CONSUME_SUCCESS 再异步执行实际业务异步逻辑没跑完进程就挂了消息也会丢。正确做法是先执行完业务逻辑再提交位点并且关闭自动提交改成业务成功后的手动提交。还有一个经常被忽略的兜底方案消息落地表。关键业务的每一条消息在生产端入库时同时写一张消息流水表状态标记为待处理消费端处理成功后回调更新状态用定时任务扫描超时未处理的消息重新推动。这套方案不依赖 MQ 自身的可靠性是把消息不一定能送达这个假设当成既定事实后的兜底设计。4.2 顺序错乱的常见场景与规避手段顺序问题在做订单、支付、库存这类强状态业务时尤其致命典型表现是一条创建订单消息还在消费队列里后面一条关闭订单的消息已经处理完了最终数据库里留下一个错误的最终状态。顺序错乱的根源是并发和不合理路由。Kafka 保证的是分区内有序不是全局有序RabbitMQ 保证的是单队列内有序但如果你开了多个消费者同时消费同一个队列顺序就被并发打破了RocketMQ 的顺序消息需要手动指定 MessageQueueSelector保证同一业务 key 的消息进同一个队列。所以要想让业务逻辑有序核心就一句话让同一业务 key 的消息始终走同一个队列/分区并且保证这个队列/分区是单消费者串行处理。具体来说有几种做法订单场景把 orderId 作为消息 keyKafka 用 key 做分区器路由让同一订单的消息进同一分区RocketMQ 用自带的 MessageQueueSelector 按订单 ID 选队列RabbitMQ 则用一致性哈希交换机或直接绑定队列。消费端要串行消费。Kafka 里同一分区的消息天然串行所以不要再开线程池并发消费同一分区的数据RocketMQ 的顺序消息消费要监听器里同一队列保证串行。如果全局有序那就只能退化成单分区/单队列吞吐量会大幅受限所以实际业务中一定要把全局有序的需求拆成满足业务逻辑最小范围的有序比如只要求同一用户、同一订单有序。这里有个容易踩的坑出现消息重试时顺序可能被打乱。比如消息 A、B 同属一个订单先后进入队列消费 A 时抛异常触发重试如果重试机制是消息延迟几个小时再回到队列那 B 早就被处理完了。解决思路是顺序消息的重试不能简单丢回队列尾部要么重试时继续按原 key 路由到同一队列并阻塞后续消息要么把重试次数降到最低要么在消费端做状态校验——发现消息序号倒挂时直接拒绝处理等缺失消息重试回来再补。5. Kafka、RabbitMQ、RocketMQ围绕问题做选型时该怎么比5.1 一张表看懂三方核心差异聊完了问题回到选型。市面上现在最主流的三款消息队列是 Kafka、RabbitMQ、RocketMQ。很多团队选型时看的是网上性能对比之类的表格但我建议你从自己系统的问题列表出发反向选型你更怕丢消息还是更怕吞吐不够还是更怕运维复杂度高下面这张表是我自己维护过的系统里总结出来的核心差异比较维度KafkaRabbitMQRocketMQ定位分布式流处理平台轻量级消息代理分布式消息中间件吞吐能力极高适合海量日志、埋点、流计算中上适合中小流量业务高适合大流量业务消息可靠性高需配置副本和 acks高支持 publisher confirm 手动 ACK高同步刷盘和主从同步可配消费模式拉取模式pull消费者自己控制速率推拉结合以 push 为主拉取模式支持 push 模式封装顺序消息分区内有序单队列有序多个消费者时需自行控制队列级别有序支持严格顺序消息延迟毫秒级到秒级吞吐高时延迟会上升微秒到毫秒级低延迟表现好毫秒级延迟一般低于 Kafka死信队列通过 DLT 自定义处理实现原生支持死信队列原生支持死信队列消息回溯按 offset 回溯支持时间戳查询不支持或支持有限支持按时间回溯运维复杂度依赖 ZooKeeper或 KRaft组件多、副本迁移复杂单机部署很简单集群稍复杂组件适中NameServer 与 Broker 部署简单典型场景日志收集、数据管道、流计算、大数据量同步业务系统内部异步任务、ERP、OA、中小型系统电商、金融、订单/交易类核心链路5.2 选型不是选最好是选问题最少从这张表能看出没有一款是全面碾压的。我的个人经验是如果你做的是日志采集、埋点上报、离线/实时数据管道这类海量顺序写入的场景Kafka 是绕不开的选择。它的问题也很明显业务逻辑相关的功能少死信处理、延迟消息都不原生延迟在峰值时会明显抬高。用 Kafka 做核心交易链路你得自己补很多轮子。如果你是中小型业务系统消息量一天几百万条以内团队没有专职中间件人员RabbitMQ 反而是最稳妥的选择。它部署简单、文档多、延迟低路由灵活死信机制原生支持。它的短板在吞吐上限和海量积压场景——真到积压数十万条消息时RabbitMQ 的性能下降比另外两个明显。如果你是电商或金融交易类的核心链路业务上有严格的事务、可靠性、顺序要求RocketMQ 是最合适的。它把很多 Kafka 需要自己实现的机制延迟消息、事务消息、顺序消息、死信队列做成了内置能力对业务开发友好。缺点是社区和资料比 Kafka 少一些踩到冷门问题时要花更多时间翻源码。有一点容易被忽略选型还要看团队的语言栈和运维能力。比如团队是 Java 为主RocketMQ 的客户端和源码调试门槛最低如果团队主要是 Python 或 GoKafka 的客户端生态相对更成熟。5.3 单机和集群两个维度里容易被忽视的差别还有一个选型时很容易忽略的维度你到底是跑单机还是集群。单机场景下RabbitMQ 和 RocketMQ 都相对省心。Kafka 单机部署虽然也能跑但它从设计上就是分布式的单机的配置和运维开销并不划算。集群场景下Kafka 的优势在自动分区迁移和副本平衡机器挂了对数据安全性的保障机制非常成熟RocketMQ 的集群架构相对轻量NameServer 的无状态设计让整体维护比 Kafka 简单RabbitMQ 的集群在跨节点镜像同步上配置比较繁琐镜像队列的性能损耗也不小。我经历过一个项目最初贪图 RabbitMQ 的简单把消息量日峰值几千万的日志管道也往里塞结果集群频繁出现镜像队列同步延迟消费者积压拉到几百万。后来把日志管道拆到 KafkaRabbitMQ 只留业务核心消息两边都稳定了。同一个系统里完全可以混用不同的消息队列核心业务用 RocketMQ 或 RabbitMQ海量非核心数据用 Kafka。这个思路在很多大厂里是常态。6. 从简单消息队列到生产级系统自研方案的边界在哪6.1 简单 MQ 能解决什么问题最近看到不少同学在学习时自己动手实现一个简单的消息队列用 Redis List、数据库表轮询或者纯内存队列都能做出来。简单消息队列这个思路本身没问题——它最大的价值是让你把消息队列的核心机制亲手过一遍生产者写入、队列存储、消费者拉取、确认删除、重试机制。对学习网络编程和分布式基础来说这是一个很好的练习项目。但到了真实业务环境一个简单消息队列和生产级消息队列之间的差距远比大多数人想象的要大。我自己也做过一个内部用的轻量 MQ最初只是觉得业务量不大用 Redis List 就行结果补充了各种缺失能力后才明白差距在哪。6.2 生产级消息队列补全的十样东西一个能在生产环境兜住业务的 MQ至少要在简单模型之上补齐以下能力持久化进程重启后消息不丢不只是内存排队。Redis List 如果不做 AOF/RDB 持久化重启即清空数据库表方案则要考虑表和索引的膨胀。消息确认机制消费者收到消息和处理成功是两件事必须分开确认。没有 ACK 机制就无法区分没收到和处理失败。消费进度记录消费者崩了之后从哪继续消费这需要一个持久化的位点/游标而不是从队列头重新来一遍。失败重试与死信消息处理失败不能无限留在主队列里阻碍其他消息需要有重试队列和最终的死信通道。消息幂等保障至少一次语义必须搭配幂等去重能力否则业务侧永远要背锅。生产者和消费者的高可用单个节点挂了怎么办简单 MQ 往往没有主从切换和故障转移机制。水平扩容消息量翻倍时能不能通过加队列分区或消费者实例来线性提升吞吐简单模型往往卡死在单点。延迟消息/定时消息业务里大量存在30 分钟后通知次日结算这类需求没有延迟能力的 MQ 要靠外部任务轮询复杂度和抖动都高。可视化监控和指标队列积压数、消费延迟、生产速率、重试次数没有这些指标出问题时只能瞎猜。客户端生态和协议标准化Java、Go、Python 的客户端是否统一上报方式是否统一别小看这一点用了多种语言的系统会非常痛苦。我那次做内部轻量 MQ 的结论是如果只是想学习和做内部工具自研完全没问题但如果要做核心业务的消息通道直接用成熟的开源 MQ 是更理性的选择。自研最大的成本不在第一版能跑起来而在后面的持续补洞。7. 我的排查套路与避坑清单可直接抄7.1 排查 MQ 问题的通用路径遇到 MQ 相关的线上问题不管现象是堆积、重复、丢失还是顺序错乱我建议按下面的路径走一遍能少绕很多弯第一步画出上下游链路图。生产者是谁、发到哪个主题/队列、消费者是谁、消费后做什么操作。很多问题其实是链路设计不合理造成的先把链路画出来能直接暴露消息绕了远路或者消费链路依赖了不该依赖的服务这种结构性问题。第二步看消费端日志和异常。至少七成 MQ 问题都能在消费端日志里找到线索。重点看有没有抛异常、重试次数是否异常、单条消息处理耗时是否有明显尖刺。日志里必须打上消息 ID、业务 key、消费耗时这是定位一切的原始数据。第三步看消费组的位点/积压指标。能确认消息是卡在 Broker 里还是已经被消费但处理失败了。Kafka 用 kafka-consumer-groups 命令行工具查 LAGRocketMQ 用控制台查 Consumer 的堆积数和消费 TPSRabbitMQ 在管理界面看 Ready 和 Unacknowledged 数量。第四步生产端和 Broker 端交叉验证。如果消费端没有日志但消息确实不见了就要回头查生产端有没有发送成功、Broker 侧有没有进流量。用消息轨迹RocketMQ 的 Trace 功能、Kafka 的 fetch 指标可以快速定位在哪一跳丢了。第五步对现象做假设-验证。不要一上来就改配置。先写下一个你认为最可能的根因然后找数据验证它。比如怀疑是消费端慢 SQL 导致堆积那就查数据库的慢日志和消费耗时曲线怀疑是消费者实例不够那就看活跃消费实例数和分区数。验证通过后再动手改。7.2 避坑清单最后给一份我自己反复用到的避坑清单每条都是真金白银踩出来的消费端严禁先 ACK 后处理。不管用哪个 MQ手动确认模式下业务逻辑成功了再提交位点自动确认模式下要确认你的处理动作是不是在确认之前完整结束。幂等方案不要只做一层。Redis 去重 数据库唯一键是最省心的组合去重 key 必须来自消息的稳定唯一字段。顺序消费要连重试策略一起设计。顺序消息一旦重试顺序可能就被打断了重试策略要做到阻塞后续 最终告警。扩容消费者前先算分区/队列数。消费者实例数超过分区数的那部分是纯浪费反之分区数太少扩容消费者也没用。不要相信默认配置。自动提交位点、ack 时机、prefetch 数量、retry 次数这些默认值在大多数场景下都不是最优解上线前必须逐项过一遍。关键消息必须有兜底。消息流水表 定时任务对账是应对MQ 自身不可靠的最朴素有效的方案。监控指标要保留足够粒度。至少做到按消费组、按 topic/队列维度监控积压数和消费延迟不然出了故障连问题边界都圈不出来。我在实际项目里还有一个习惯每次处理完 MQ 故障都会把事故过程、定位路径、最终改动整理成一份简短记录存到团队文档里。时间久了就会形成一本问题字典后续再遇到类似问题翻字典能省很多时间。这比任何监控面板都管用。消息队列的问题说到底都是分布式系统一致性和可靠性问题的缩影。把这类问题理清楚你收获的不仅是一个会用的 MQ更是一套在不确定环境里做工程的思维框架。
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

企业级RAG落地:从Demo到生产的工程化重构指南 2026/9/30 9:16:41

企业级RAG落地:从Demo到生产的工程化重构指南

我先问你一个很直接的问题:你手里的RAG知识库,敢不敢把Demo现场用的那套方案,原封不动地直接挪到生产环境? 我最近两年做了3个企业级RAG落地项目,分别涉及制造业设备手册问答、金融行业合规条款检索、以及企业内部政策…

阅读更多 →
Java仓库管理系统毕设实战:Spring Boot+Vue全栈开发与避坑指南 2026/9/30 9:16:34

Java仓库管理系统毕设实战:Spring Boot+Vue全栈开发与避坑指南

简介:这份资源是一篇基于Java的仓库管理系统毕业设计论文文档,面向计算机相关专业学生及需要完成课程设计或毕业设计的开发者。论文围绕电子商务背景下传统仓储人工操作效率低、错误率高的痛点,采用Spring Boot后端、Vue前端与MySQL数据库&am…

阅读更多 →
AnythingLLM本地优先AI智能体搭建实战:从部署到制度问答助手 2026/9/30 9:16:34

AnythingLLM本地优先AI智能体搭建实战:从部署到制度问答助手

最近有不少朋友在问,本地优先的 AI 智能体工具到底怎么选,尤其是想把企业内部的制度文档、技术手册变成能“听懂人话”的问答机器人时,市面上的 SaaS 产品往往卡在数据隐私和定制成本上。我自己在对比了多家方案之后,长期留下的就…

阅读更多 →
Agent/LLM技术日报:知识库建设、框架选型与落地排障实践 2026/9/30 9:16:34

Agent/LLM技术日报:知识库建设、框架选型与落地排障实践

今天这份Agent/LLM技术日报,我给自己定的选题标准只有一条:能让你下一个项目少踩坑、多落地的内容才进日报。搜了一圈这两天的热词,发现几个信号非常集中:llm wiki知识库、本体RAG、Agent框架与编排、Agent记忆与安全、本地ERP结合…

阅读更多 →
从零构建生产级记忆型 AI Agent:AgentScope 架构、记忆机制与 SSE 实战 2026/9/30 9:16:27

从零构建生产级记忆型 AI Agent:AgentScope 架构、记忆机制与 SSE 实战

记忆型 AI Agent 这个词这两年快被用烂了,但真正落到生产环境里,能稳定跑起来、能记住上下文、能在多轮对话里不丢状态的,其实没几个。大部分 demo 级别的 Agent 聊上三五轮就开始胡言乱语,要么把用户十分钟前说的话忘得一干二净&…

阅读更多 →
TensorFlow 2.16 LTS工业部署实战:从安装到端侧推理的全链路解析 2026/9/30 9:16:27

TensorFlow 2.16 LTS工业部署实战:从安装到端侧推理的全链路解析

1. 这不是“又一个深度学习框架”——TensorFlow的本质定位与它被误读十年的真相 很多人第一次听说TensorFlow,是在2015年谷歌开源那天;更多人真正接触它,是在2018年Kaggle比赛里看到别人用tf.keras写模型;而到了2024年&#xff…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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