消息队列(MQ)技术全景科普:从选型到AI+未来

消息队列(Message Queue,MQ)是分布式系统的"神经系统",承担着异步通信、流量削峰、系统解耦的核心职责。无论是电商大促的订单洪峰,还是实时数仓的海量日志采集,消息队列都是现代架构中不可或缺的基础设施。本文将从主流产品对比、高可用架构、集群部署、集成实践到AI+未来趋势,为你构建完整的MQ知识体系。


一、主流消息队列全景对比

当前业界四大主流消息队列各具基因:RabbitMQ 是企业级通用代理,Kafka 是流处理平台标杆,RocketMQ 是金融级业务消息专家,Pulsar 则是云原生时代的挑战者 。

1.1 核心定位与基因差异

产品 开发语言 核心定位 解决的原生问题
RabbitMQ Erlang 企业级通用消息代理 异构系统通信、复杂路由、金融级可靠投递
Kafka Scala/Java 高吞吐分布式流平台 海量日志/事件采集、持久化、实时流计算管道
RocketMQ Java 金融级互联网业务消息中间件 高并发峰值、事务消息、顺序消息、海量堆积
Pulsar Java+Go 云原生流+队列一体化平台 多租户隔离、跨地域复制、弹性伸缩、混合负载

1.2 优缺点深度剖析

RabbitMQ:灵活路由之王

优点:

  • 路由能力极强:支持直连(Direct)、主题(Topic)、扇形(Fanout)、首部(Headers)四种交换机,可实现任意复杂的路由规则
  • 延迟极低 :基于Erlang OTP平台,端到端延迟可达微秒级,四大产品中最低
  • 多语言生态完善:AMQP协议通用,几乎所有主流语言都有成熟客户端
  • 管理界面友好:自带功能完整的Web控制台,运维门槛低
  • 企业级可靠:支持持久化、生产者确认(Publisher Confirm)、镜像队列同步

缺点:

  • 吞吐量有限:单机万级/秒,四大产品中最低
  • 堆积能力弱:队列堆积后性能急剧下降,甚至出现雪崩
  • 横向扩展难:镜像集群同步成本高,扩容对吞吐量提升有限
  • 不适合流处理:几乎无原生流计算能力

一句话总结:需要复杂路由、微秒级延迟、企业级集成的场景首选。

Kafka:高吞吐流处理标杆

优点:

  • 吞吐量行业标杆:单机可达百万级TPS,磁盘顺序写实现海量堆积几乎无性能损耗
  • 流处理生态最强:Flink/Spark/Storm等流计算框架原生首选适配
  • 消息可回溯:基于偏移量(Offset)支持按时间回溯消费历史消息
  • 持久化能力强:日志存储机制适合长期归档与事件溯源
  • KRaft模式:2.8+版本去除ZooKeeper依赖,部署门槛降低

缺点:

  • 业务功能弱:原生不支持事务消息、延迟消息、死信队列,需大量二次开发
  • 延迟较高:默认高吞吐场景下延迟100ms+,不适合低延迟核心业务
  • 顺序消息受限:仅单分区内严格顺序,跨分区无法保证
  • 扩容有感知:分区扩容需副本重平衡,业务可能受影响

一句话总结:海量日志采集、实时数仓、流计算场景的不二之选。

RocketMQ:金融级业务消息专家

优点:

  • 金融级可靠性:同步刷盘+同步双写双保险,消息零丢失
  • 业务特性最全:原生支持事务消息(两阶段提交)、严格顺序消息、18级延迟消息(商业版任意精度)、死信队列、消息重试
  • 高并发抗峰:阿里双11验证,支持万亿级消息堆积
  • 部署运维极简:Java环境无额外依赖,中文文档/社区极其完善
  • 扩容无感知:NameServer无状态架构,Broker扩容对业务透明

缺点:

  • 国际生态一般:多语言客户端成熟度略低于Kafka和RabbitMQ
  • 大数据生态不如Kafka:流处理场景非首选
  • 跨地域能力弱:不如Pulsar原生支持多集群复制

一句话总结:电商/金融核心业务、事务/顺序/延迟消息刚需场景的首选。

Pulsar:云原生时代挑战者

优点:

  • 计算存储分离:Broker无状态+BookKeeper存储层,可独立弹性扩容,秒级扩缩容
  • 流+队列一体化:原生同时支持队列模型和流模型,一套系统覆盖两种场景
  • 多租户强隔离:原生支持命名空间级别的多租户,适合SaaS平台
  • 无限堆积能力:冷热分层存储,冷数据自动归档对象存储
  • 跨地域复制:原生支持Replicated-Subscriptions,跨地域容灾
  • 兼容Kafka协议:KoP插件可无缝迁移Kafka业务

缺点:

  • 部署复杂度高:组件多(Broker+Bookie+ZooKeeper),裸机部署门槛最高
  • 小集群成本高:计算存储分离架构在资源有限时性价比不高
  • 国内案例相对较少:运维团队需同时掌握Broker+BookKeeper
  • 故障排查链路长:多组件协同,定位问题难度高于其他产品

一句话总结:云原生/K8s环境、多租户、跨地域、流队列混合负载的未来之选。

1.3 关键特性对比表

维度 RabbitMQ Kafka RocketMQ Pulsar
吞吐量 万级/秒 百万级/秒 十万~百万级/秒 十万~百万级/秒
端到端延迟 微秒级 毫秒级(100ms+) 毫秒级(10ms级) 毫秒级
消息可靠性 极高 高(需手动调优) 金融级(0丢失) 极高(Quorum)
顺序消息 单队列可用 分区内有序 全局/分区顺序强 分区内有序
事务消息 弱(插件) 弱(流EOS) 原生强(两阶段) 原生支持
延迟/定时消息 需插件 不支持 原生(18级/任意) 原生支持
死信队列 原生支持 需自研 原生自动 原生支持
消息堆积 极强 极强(分层存储)
消息回溯 不支持 支持 支持 支持
多租户 VHost隔离 一般 原生强隔离

二、高可用与集群架构

2.1 RabbitMQ 高可用架构

RabbitMQ 提供两种集群模式 :

普通集群:仅同步元数据(队列结构、绑定关系等),消息实际只存储在单个节点。某个节点故障时,该节点上的队列不可用。

镜像集群(推荐):队列全量同步至多节点,实现高可用。通过策略(Policy)配置镜像队列,当主节点故障时自动切换到镜像节点。

高可用部署要点

  • 生产环境推荐镜像队列+HAProxy/Keepalived做负载均衡
  • 注意脑裂风险,建议配置 cluster_partition_handling = autoheal
  • 队列堆积后性能雪崩是最大痛点,需监控队列深度并及时消费

2.2 Kafka 高可用架构

Kafka 的高可用基于分区多副本机制

  • 每个Topic分为多个Partition,每个Partition有多个Replica(副本)
  • 副本分为Leader和Follower,生产者/消费者只与Leader交互
  • ISR(In-Sync Replicas)机制确保数据同步
  • 当Leader故障时,从ISR中选举新Leader

高可用部署要点

  • 副本因子(Replication Factor)至少配置为3
  • min.insync.replicas=2 配合 acks=all 确保数据不丢失
  • KRaft模式(2.8+)去除ZooKeeper,降低运维复杂度
  • 扩容时注意副本重平衡对性能的影响

2.3 RocketMQ 高可用架构

RocketMQ 采用NameServer + Broker主从架构 :

  • NameServer:无状态服务,负责路由发现,可部署多节点自动容灾
  • Broker:分Master和Slave,支持同步双写(SYNC_MASTER)和异步复制(ASYNC_MASTER)
  • DLedger模式:基于Raft协议自动选主,实现故障自动切换

高可用部署要点

  • 金融级场景必须配置 SYNC_MASTER + 同步刷盘
  • NameServer至少部署2节点,Broker采用2主2从或更多
  • 利用RocketMQ的自动故障切换能力,无需额外组件

2.4 Pulsar 高可用架构

Pulsar 的高可用是分层架构的天然优势 :

  • Broker层(计算):无状态节点,故障时Topic可秒级切换到其他节点
  • Bookie层(存储):基于BookKeeper的多副本强一致,3副本跨可用区分布
  • ZooKeeper层(元数据):3可用区部署,确保选主与元数据服务正常

高可用部署要点

  • 跨可用区部署时,副本强制分布在各可用区节点上
  • 单可用区故障时,其他可用区副本可继续提供读写
  • 计算层扩容完全无感知,存储层扩容线性提升容量

三、部署指南

3.1 部署难度排序

RabbitMQ < RocketMQ < Kafka < Pulsar

产品 单节点部署 集群部署 云原生部署
RabbitMQ 极简(安装Erlang+RPM/DEB) 中等(需配置镜像策略) 一般(需适配StatefulSet)
RocketMQ 极简(Java环境,一键启动) 极简(NameServer+Broker) 良好(官方Operator)
Kafka 简单(KRaft模式更简单) 中等(需关注副本重平衡) 良好(Strimzi Operator)
Pulsar 复杂(多组件依赖) 复杂(Broker+Bookie+ZK) 极简(官方Helm Chart,K8s环境)

3.2 快速部署示例

RabbitMQ 单节点 Docker 部署
bash 复制代码
docker run -d --name rabbitmq \
  -p 5672:5672 -p 15672:15672 \
  -e RABBITMQ_DEFAULT_USER=admin \
  -e RABBITMQ_DEFAULT_PASS=admin123 \
  rabbitmq:3.13-management

访问 http://localhost:15672 进入管理控制台。

RocketMQ 单节点快速启动
bash 复制代码
# 1. 下载并解压
wget https://archive.apache.org/dist/rocketmq/5.2.0/rocketmq-all-5.2.0-bin-release.zip
unzip rocketmq-all-5.2.0-bin-release.zip
cd rocketmq-all-5.2.0-bin-release

# 2. 启动 NameServer
nohup sh bin/mqnamesrv &

# 3. 启动 Broker
nohup sh bin/mqbroker -n localhost:9876 --enable-proxy &
Kafka KRaft 单节点启动(无需ZooKeeper)
bash 复制代码
# 1. 下载 Kafka 3.7+
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xzf kafka_2.13-3.7.0.tgz
cd kafka_2.13-3.7.0

# 2. 生成KRaft集群ID
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"

# 3. 格式化存储
bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties

# 4. 启动服务
bin/kafka-server-start.sh config/kraft/server.properties
Pulsar K8s 部署(Helm)
bash 复制代码
# 添加 Pulsar Helm 仓库
helm repo add apache https://pulsar.apache.org/charts
helm repo update

# 安装 Pulsar 集群
helm install pulsar apache/pulsar \
  --set initialize=true \
  --namespace pulsar --create-namespace

关键建议:Pulsar 在传统物理机/虚拟机环境部署复杂度高,但在 K8s 环境下借助官方 Helm Chart 可一键部署,其云原生优势才能充分发挥 。


四、集成示例代码

4.1 RabbitMQ 集成示例

Java(Spring AMQP):

java 复制代码
// 生产者
@SpringBootApplication
public class RabbitDemoApplication {
    
    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    public void sendOrder(String orderId) {
        rabbitTemplate.convertAndSend("order.exchange", "order.create", 
            orderId, message -> {
                message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
                return message;
            });
    }
}

// 消费者
@Component
@RabbitListener(queues = "order.queue")
public class OrderConsumer {
    
    @RabbitHandler
    public void handleOrder(String orderId, Channel channel, 
                          @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException {
        try {
            // 处理订单逻辑
            processOrder(orderId);
            channel.basicAck(tag, false); // 手动确认
        } catch (Exception e) {
            channel.basicNack(tag, false, true); // 重试
        }
    }
}

Python(pika):

python 复制代码
import pika
import json

# 生产者
def send_message():
    credentials = pika.PlainCredentials('admin', 'admin123')
    connection = pika.BlockingConnection(
        pika.ConnectionParameters('localhost', 5672, '/', credentials))
    channel = connection.channel()
    
    # 声明交换机和队列
    channel.exchange_declare(exchange='order.exchange', exchange_type='topic')
    channel.queue_declare(queue='order.queue', durable=True)
    channel.queue_bind(exchange='order.exchange', queue='order.queue', 
                       routing_key='order.create')
    
    message = {'order_id': 'ORD-2026-001', 'amount': 199.99}
    channel.basic_publish(
        exchange='order.exchange',
        routing_key='order.create',
        body=json.dumps(message),
        properties=pika.BasicProperties(delivery_mode=2)  # 持久化
    )
    connection.close()

# 消费者
def consume_message():
    credentials = pika.PlainCredentials('admin', 'admin123')
    connection = pika.BlockingConnection(
        pika.ConnectionParameters('localhost', 5672, '/', credentials))
    channel = connection.channel()
    
    def callback(ch, method, properties, body):
        data = json.loads(body)
        print(f"Received: {data}")
        ch.basic_ack(delivery_tag=method.delivery_tag)
    
    channel.basic_consume(queue='order.queue', on_message_callback=callback)
    channel.start_consuming()

4.2 Kafka 集成示例

Java(Spring Kafka):

java 复制代码
// 生产者配置
@Configuration
public class KafkaProducerConfig {
    
    @Bean
    public ProducerFactory<String, String> producerFactory() {
        Map<String, Object> props = new HashMap<>();
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        props.put(ProducerConfig.ACKS_CONFIG, "all"); // 最高可靠性
        props.put(ProducerConfig.RETRIES_CONFIG, 3);
        props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, true); // 幂等生产者
        return new DefaultKafkaProducerFactory<>(props);
    }
    
    @Bean
    public KafkaTemplate<String, String> kafkaTemplate() {
        return new KafkaTemplate<>(producerFactory());
    }
}

// 生产者
@Service
public class LogProducer {
    @Autowired private KafkaTemplate<String, String> kafkaTemplate;
    
    public void sendLog(String log) {
        kafkaTemplate.send("user-behavior", UUID.randomUUID().toString(), log)
            .whenComplete((result, ex) -> {
                if (ex == null) {
                    System.out.println("Sent: " + result.getRecordMetadata().offset());
                }
            });
    }
}

// 消费者
@Component
public class LogConsumer {
    @KafkaListener(topics = "user-behavior", groupId = "analytics-group")
    public void consume(ConsumerRecord<String, String> record) {
        System.out.printf("Partition: %d, Offset: %d, Value: %s%n",
            record.partition(), record.offset(), record.value());
    }
}

Python(kafka-python):

python 复制代码
from kafka import KafkaProducer, KafkaConsumer
import json

# 生产者
producer = KafkaProducer(
    bootstrap_servers=['localhost:9092'],
    value_serializer=lambda v: json.dumps(v).encode('utf-8'),
    acks='all',
    retries=3,
    enable_idempotence=True
)

def send_event(user_id, event):
    future = producer.send('user-behavior', key=user_id.encode(), value=event)
    record_metadata = future.get(timeout=10)
    print(f"Sent to partition {record_metadata.partition}, offset {record_metadata.offset}")

# 消费者
consumer = KafkaConsumer(
    'user-behavior',
    bootstrap_servers=['localhost:9092'],
    group_id='analytics-group',
    auto_offset_reset='earliest',
    enable_auto_commit=True,
    value_deserializer=lambda m: json.loads(m.decode('utf-8'))
)

def consume_events():
    for message in consumer:
        print(f"Partition: {message.partition}, Offset: {message.offset}, "
              f"Key: {message.key}, Value: {message.value}")

4.3 RocketMQ 集成示例

Java(Spring Cloud Stream / 原生客户端):

java 复制代码
// 生产者
@Service
public class OrderProducer {
    
    @Autowired
    private RocketMQTemplate rocketMQTemplate;
    
    public void sendOrder(Order order) {
        // 同步发送
        SendResult sendResult = rocketMQTemplate.syncSend("order-topic", order);
        System.out.println("Send status: " + sendResult.getSendStatus());
        
        // 事务消息
        TransactionSendResult result = rocketMQTemplate.sendMessageInTransaction(
            "order-transaction-group", 
            "order-topic", 
            MessageBuilder.withPayload(order).build(), 
            order
        );
    }
    
    // 延迟消息(Level 3 = 10秒延迟)
    public void sendDelayOrder(Order order) {
        rocketMQTemplate.syncSendDelayTimeSeconds("order-topic", order, 10);
    }
}

// 消费者
@Service
@RocketMQMessageListener(
    topic = "order-topic",
    consumerGroup = "order-consumer-group",
    consumeMode = ConsumeMode.CONCURRENTLY, // 或 ORDERLY(顺序消费)
    messageModel = MessageModel.CLUSTERING
)
public class OrderConsumer implements RocketMQListener<Order> {
    
    @Override
    public void onMessage(Order order) {
        System.out.println("Received order: " + order.getOrderId());
        // 业务处理
    }
}

// 事务监听器
@RocketMQTransactionListener
public class OrderTransactionListener implements RocketMQLocalTransactionListener {
    
    @Override
    public RocketMQLocalTransactionState executeLocalTransaction(Message msg, Object arg) {
        try {
            // 执行本地事务(如创建订单)
            createOrder((Order) arg);
            return RocketMQLocalTransactionState.COMMIT;
        } catch (Exception e) {
            return RocketMQLocalTransactionState.ROLLBACK;
        }
    }
    
    @Override
    public RocketMQLocalTransactionState checkLocalTransaction(Message msg) {
        // 回查本地事务状态
        if (orderExists(msg.getKeys())) {
            return RocketMQLocalTransactionState.COMMIT;
        }
        return RocketMQLocalTransactionState.ROLLBACK;
    }
}

Python(rocketmq-client-python):

python 复制代码
from rocketmq.client import Producer, Consumer, Message
import json

# 生产者
producer = Producer('order-producer-group')
producer.set_name_server_address('localhost:9876')
producer.start()

def send_order(order_data):
    msg = Message('order-topic')
    msg.set_keys('order-001')
    msg.set_tags('create')
    msg.set_body(json.dumps(order_data).encode('utf-8'))
    
    result = producer.send_sync(msg)
    print(f"Send result: {result.status}, msg_id: {result.msg_id}")

# 消费者
consumer = Consumer('order-consumer-group')
consumer.set_name_server_address('localhost:9876')
consumer.subscribe('order-topic', '*')

def callback(msg):
    print(f"Received: {msg.body.decode('utf-8')}, "
          f"tags: {msg.tags}, keys: {msg.keys}")
    return True  # 消费成功

consumer.register_message_listener(callback)
consumer.start()

4.4 Pulsar 集成示例

Java(Pulsar Client):

java 复制代码
// 生产者
PulsarClient client = PulsarClient.builder()
    .serviceUrl("pulsar://localhost:6650")
    .build();

Producer<String> producer = client.newProducer(Schema.STRING)
    .topic("persistent://public/default/order-topic")
    .enableBatching(true)
    .batchingMaxPublishDelay(10, TimeUnit.MILLISECONDS)
    .create();

producer.send("Order-2026-001");

// 消费者
Consumer<String> consumer = client.newConsumer(Schema.STRING)
    .topic("persistent://public/default/order-topic")
    .subscriptionName("order-sub")
    .subscriptionType(SubscriptionType.Shared) // Shared/Key_Shared/Failover/Exclusive
    .subscribe();

while (true) {
    Message<String> msg = consumer.receive();
    try {
        System.out.println("Received: " + msg.getValue());
        consumer.acknowledge(msg);
    } catch (Exception e) {
        consumer.negativeAcknowledge(msg);
    }
}

Python(pulsar-client):

python 复制代码
import pulsar
from pulsar.schema import JsonSchema
import json

# 生产者
client = pulsar.Client('pulsar://localhost:6650')

producer = client.create_producer(
    'persistent://public/default/order-topic',
    schema=JsonSchema(dict)
)

def send_order(order):
    producer.send(order, properties={'region': 'ap-southeast-1'})

# 消费者
consumer = client.subscribe(
    'persistent://public/default/order-topic',
    subscription_name='order-sub',
    consumer_type=pulsar.ConsumerType.Shared
)

def consume_orders():
    while True:
        msg = consumer.receive()
        try:
            data = msg.value()
            print(f"Received: {data}, properties: {msg.properties()}")
            consumer.acknowledge(msg)
        except Exception as e:
            consumer.negative_acknowledge(msg)

五、AI+ 消息队列:未来趋势与优势队列

随着大模型和智能体(Agent)技术的爆发,消息队列正在经历从"数据管道"到"智能编排中枢"的进化。以下是AI时代消息队列的关键演进方向:

5.1 AI+消息队列的核心场景

  1. 智能流量预测与自动扩缩容:利用时序预测模型提前感知流量洪峰,自动调整Broker/Partition数量
  2. 智能消息路由:基于消息内容语义理解,动态路由到最合适的消费者或处理管道
  3. 异常检测与自愈:AI实时检测消息延迟、消费堆积、死信异常,自动触发重试或告警
  4. 多模态消息处理:支持文本、图像、音频、视频等AI生成内容的高效传输与路由
  5. Agent间通信协议:作为AI Agent系统的标准通信层,支持复杂任务编排与状态同步

5.2 未来更具AI+优势的队列

🏆 Pulsar:AI时代的架构最优解

Pulsar 的计算存储分离架构在AI时代具有天然优势 :

  • 弹性算力调度:AI推理任务波动大,Pulsar的无状态Broker可秒级扩缩容,完美匹配GPU集群的弹性调度
  • 多租户隔离:AI SaaS平台可为每个模型/租户分配独立命名空间,资源严格隔离
  • 冷热分层+对象存储:AI训练数据量巨大,Pulsar的Tiered Storage可将历史数据自动归档S3,降低存储成本
  • Geo-Replication:AI模型服务全球部署时,跨地域消息同步确保推理结果一致性
  • Function Mesh:原生轻量级流处理,可直接嵌入AI推理Pipeline
🥈 Kafka:流式AI数据管道

Kafka 在实时特征工程、模型推理流水线中仍占据核心地位:

  • Kafka + Flink ML:实时特征提取与模型在线学习
  • Kafka Connect + Vector DB:将消息流实时同步到向量数据库,支撑RAG应用
  • 高吞吐适配:AI模型生成内容(AIGC)的海量日志采集仍依赖Kafka的吞吐能力
🥉 RocketMQ:AI业务事务保障

在AI赋能的电商、金融核心业务中,RocketMQ的事务消息能力不可或缺:

  • AI推荐下单 → 事务消息保证库存扣减与订单创建一致性
  • AI风控决策 → 延迟消息实现定时复核与熔断
  • 国内AI应用落地 → 中文生态与运维友好度仍是关键优势

5.3 选型决策树(2026+)

复制代码
业务需求输入
    │
    ├─ 是否云原生/K8s部署? ──是──→ Pulsar(AI弹性首选)
    │       否
    ├─ 是否大数据/流处理/AI Pipeline? ──是──→ Kafka(流计算生态)
    │       否
    ├─ 是否金融/电商核心业务(事务/顺序)? ──是──→ RocketMQ(业务可靠)
    │       否
    └─ 是否复杂路由/多协议/低延迟? ──是──→ RabbitMQ(灵活集成)
            否
        → 轻量级场景:考虑Redis Streams/NATS

六、总结

消息队列的选型没有银弹,关键在于匹配业务基因

  • RabbitMQ:灵活路由、微秒级延迟、企业集成------"瑞士军刀"
  • Kafka:百万吞吐、流处理生态、可回溯------"数据高速公路"
  • RocketMQ:金融级可靠、事务/顺序/延迟------"业务守护者"
  • Pulsar:云原生弹性、多租户、无限堆积------"未来架构"

在AI+时代,Pulsar 凭借计算存储分离和云原生架构,将成为AI弹性调度与多租户场景的最优解;Kafka 继续统治流式AI数据管道;RocketMQ 保障AI业务的事务一致性。理解各产品的架构基因,才能在正确的场景做出正确的选择。


相关推荐
乌恩大侠1 小时前
【AI-RAN】在空ubuntu服务器安装环境和生成TV,高达430G文件
服务器·人工智能·ubuntu·fpga开发·o-ru
机器觉醒时代2 小时前
英伟达GR00T N系列四代模型演进解析
人工智能·机器人·具身智能·vla模型
AI技术增长2 小时前
Pytorch图像去噪实战(八):Noise2Void盲点网络图像去噪实战,只有单张带噪图也能训练
人工智能·pytorch·python
梦想很大很大2 小时前
让 AI 成为“报表配置员”:BI 低代码平台的 Schema 实践路径
前端·人工智能·低代码
隔壁大炮2 小时前
Day07-RNN层(循环网络层)
人工智能·pytorch·python·rnn·深度学习·神经网络·计算机视觉
小饕2 小时前
从 Word2Vec 到多模态:词嵌入技术的演进全景
人工智能·算法·机器学习
上海云盾第一敬业销售2 小时前
生成式AI催生深度伪造攻击,WAF如何识别“假流量“?
人工智能
ykjhr_3d2 小时前
数字工具AI智能学伴,助力教育数字化转型
大数据·人工智能·ai·ai人工智能·华锐视点·华锐云空间
LIUAWEIO2 小时前
鸽鸽工具网:免费在线工具大全,打开网页即用
人工智能·安全·ai·json