RabbitMQ从零到一:Docker部署与Python客户端实战指南
1. 项目概述为什么是RabbitMQ消息队列听起来像是个后台系统里晦涩难懂的组件但它的作用其实和现实生活中的“快递驿站”或者“银行叫号系统”非常像。想象一下你的应用是一个繁忙的电商网站用户下单、支付、发货、发短信通知这些任务如果都让前台页面同步等着做完用户早就等得不耐烦了。消息队列的作用就是把这些耗时或需要异步处理的任务像快递包裹一样先丢到一个“驿站”队列里存着然后让专门的“快递员”消费者慢慢去处理。发送方生产者发完就走不用等整个系统的响应速度和吞吐量就上来了。而RabbitMQ就是这个领域里的“老牌劲旅”。它基于AMQP高级消息队列协议标准用Erlang语言编写以高可靠性、灵活的路由机制和良好的管理界面著称。无论是微服务间的解耦、流量削峰填谷还是实现复杂的任务分发RabbitMQ都是一个经过大规模生产环境验证的可靠选择。这次我们就从零开始手把手完成RabbitMQ的安装并编写一个能跑起来的客户端示例让你不仅知道怎么装更明白背后的门道和实际使用时容易踩的坑。2. 环境准备与安装决策在动手安装之前有几个关键决策点需要明确这直接决定了后续的安装路径和复杂度。2.1 安装方式选型Docker vs 原生安装这是你面临的第一个选择。我强烈推荐Docker方式尤其是对于学习和开发环境。为什么首选Docker环境隔离与纯净RabbitMQ依赖Erlang运行环境。直接在本机安装Erlang可能会与系统其他服务或你已有的开发环境产生冲突。Docker容器提供了完美的隔离装完即用删掉即净。部署一致性你在Docker里测试好的配置可以几乎原封不动地搬到生产环境的Docker或Kubernetes中避免了“在我机器上是好的”这类问题。管理简便一条命令即可启动、停止、删除包括其数据卷管理也相对清晰。当然如果你需要深入研究RabbitMQ的底层配置或者环境限制必须使用原生安装也可以选择后者。本文将主要围绕Docker安装展开并在最后简要说明原生安装的要点。2.2 资源规划与版本选择即使是用Docker也需要心里有数。镜像版本我们选择带management标签的镜像例如rabbitmq:3.13-management。这个标签包含了官方的Web管理插件可以通过浏览器访问管理界面对于学习和调试至关重要。端口映射5672: 这是AMQP协议默认的客户端通信端口我们的应用程序会连接这个端口。15672: 这是Web管理界面的端口。数据持久化我们需要将RabbitMQ的数据和配置挂载到宿主机防止容器删除后数据丢失。通常需要持久化两个路径/var/lib/rabbitmq消息、队列元数据和/etc/rabbitmq配置文件。3. 基于Docker的安装与配置实操下面进入实战环节。请确保你的系统已经安装了Docker和Docker Compose。3.1 使用Docker Compose一键部署我偏好使用docker-compose.yml文件来定义服务这样配置清晰可重复执行。创建一个名为docker-compose.yml的文件内容如下version: 3.8 services: rabbitmq: image: rabbitmq:3.13-management container_name: my-rabbitmq restart: unless-stopped ports: - 5672:5672 # AMQP协议端口 - 15672:15672 # 管理界面端口 environment: RABBITMQ_DEFAULT_USER: admin # 设置默认用户名 RABBITMQ_DEFAULT_PASS: your_strong_password_here # 设置默认密码 volumes: - ./rabbitmq_data:/var/lib/rabbitmq # 持久化数据 - ./rabbitmq_conf:/etc/rabbitmq # 持久化配置 networks: - app-network networks: app-network: driver: bridge关键参数解读restart: unless-stopped确保容器在意外退出时除非手动停止会自动重启提高可用性。environment这里设置了默认的虚拟主机/下的用户和密码。务必修改RABBITMQ_DEFAULT_PASS为一个强密码在生产环境中密码应通过更安全的方式注入如环境变量文件。volumes将容器内的数据目录和配置目录映射到当前目录下的rabbitmq_data和rabbitmq_conf文件夹。首次运行会自动创建这些目录。在包含docker-compose.yml文件的目录下执行命令docker-compose up -d-d参数表示在后台运行。执行成功后使用docker ps命令应该能看到名为my-rabbitmq的容器正在运行。3.2 验证安装与访问管理界面检查容器状态docker logs my-rabbitmq --tail 50查看日志尾部如果看到Server startup complete之类的信息说明启动成功。访问Web管理界面 打开浏览器访问http://localhost:15672。使用上面配置的用户名(admin)和密码登录。 登录后你将看到RabbitMQ的管理仪表盘。这里可以查看连接、通道、交换机、队列、消息等所有信息是运维和调试的利器。注意如果无法访问请检查防火墙是否放行了15672端口对于Linux/macOS。Docker容器是否正常运行 (docker ps)。端口是否被其他程序占用netstat -tulnp | grep 15672。3.3 基础配置与用户管理通过环境变量我们创建了默认用户但一个规范的环境通常需要更细致的规划。1. 虚拟主机VHost隔离VHost类似于MySQL中的数据库为不同应用或团队提供逻辑上的隔离。所有交换机、队列都隶属于某个VHost。即使用户名密码相同不同VHost的资源也完全隔离。 你可以在管理界面Admin-Virtual Hosts选项卡中添加例如/app1/analytics。2. 创建专属应用用户不建议所有应用都使用默认的admin账号。应该遵循最小权限原则。登录管理界面进入Admin选项卡。点击Add a user填写用户名如app_user和密码。点击用户名进入详情页在Permissions部分为其设置权限。格式通常为Configure regexp: 该用户能创建/删除交换机、队列的权限正则。例如^app1-.*表示只能操作以app1-开头的资源。Write regexp: 向匹配的队列写入消息的权限。Read regexp: 从匹配的队列读取消息的权限。 对于一个普通的消费者或生产者可能只需要Write和Read权限。将权限授予特定的VHost例如/app1。4. 客户端使用从概念到代码服务端搭好了现在我们来看看客户端怎么用。这里以Python为例使用最流行的pika库。Java、Go、.NET等语言都有对应的优秀客户端库模式大同小异。4.1 核心概念快速梳理写代码前必须理解RabbitMQ的经典模型主要是生产者Publisher、交换机Exchange、队列Queue、消费者Consumer四者的关系。生产者发送消息的程序。交换机消息的“路由中心”。生产者把消息发到交换机而不是直接到队列。交换机根据类型和规则决定消息该去哪个队列。队列消息的“存储缓冲区”等待消费者来取。消费者接收并处理消息的程序。交换机类型决定了路由行为直连交换机Direct消息的routing_key必须完全匹配队列绑定时设定的binding_key才会进入该队列。常用于精确路由。扇出交换机Fanout广播模式它会把消息无条件地路由到所有绑定到它的队列上。忽略routing_key。常用于发布/订阅场景。主题交换机Topic最灵活。routing_key和binding_key使用点号分隔支持通配符*(匹配一个单词) 和#(匹配零个或多个单词)。例如logs.app.error可以路由到绑定键为logs.app.*或logs.#的队列。4.2 Python客户端实战生产者与消费者首先安装pika库pip install pika场景我们模拟一个订单处理系统。订单创建后需要同时执行“发送确认邮件”和“记录日志”两个任务。这是一个典型的扇出交换机应用场景。4.2.1 生产者代码producer.pyimport pika import json import time # 1. 建立连接和通道 credentials pika.PlainCredentials(app_user, your_password) # 使用之前创建的应用用户 connection pika.BlockingConnection( pika.ConnectionParameters(hostlocalhost, port5672, virtual_host/app1, credentialscredentials) ) channel connection.channel() # 2. 声明一个扇出类型的交换机 durableTrue 表示持久化 channel.exchange_declare(exchangeorder_events, exchange_typefanout, durableTrue) # 3. 构造消息 for i in range(5): order_id 1000 i message { order_id: order_id, status: created, timestamp: time.time(), user_email: fuser{order_id}example.com } message_body json.dumps(message).encode(utf-8) # 4. 发布消息到交换机routing_key 对于 fanout 交换机无效可设为空 channel.basic_publish( exchangeorder_events, routing_key, # fanout 交换机忽略此参数 bodymessage_body, propertiespika.BasicProperties( delivery_mode2, # 将消息标记为持久化 (delivery_mode2) ) ) print(f [x] Sent order event: {message}) # 5. 关闭连接 connection.close()关键点解析virtual_host连接时指定虚拟主机实现隔离。exchange_declare声明交换机。如果交换机已存在且参数相同则无影响如果参数不同如类型改变则会报错。这是一个幂等操作。durableTrue将交换机和队列下文会看到标记为持久化RabbitMQ重启后不会丢失。注意这只能保证元数据不丢。要保证消息本身不丢还需要1) 将消息的delivery_mode设置为2持久化模式2) 配合生产者确认Publisher Confirm机制。basic_publish中的properties这里设置了消息的投递模式为持久化。4.2.2 消费者代码 - 邮件服务consumer_email.pyimport pika import json import time def send_email(email, content): 模拟发送邮件的函数 print(f [邮件服务] 准备发送邮件给 {email}...) time.sleep(1) # 模拟耗时 print(f [邮件服务] 已发送邮件给 {email}: {content}) return True def callback(ch, method, properties, body): 处理接收到的消息的回调函数 message json.loads(body.decode(utf-8)) print(f [邮件服务] 收到订单事件: {message}) # 业务逻辑发送确认邮件 email message[user_email] email_content f您的订单 #{message[order_id]} 已创建成功。 if send_email(email, email_content): # 手动确认消息告诉RabbitMQ这条消息处理成功了可以删除了 ch.basic_ack(delivery_tagmethod.delivery_tag) else: # 处理失败可以拒绝消息并重新入队或者记录到死信队列 print(f [邮件服务] 邮件发送失败拒绝消息。) ch.basic_nack(delivery_tagmethod.delivery_tag, requeueFalse) # 不重新入队 # 建立连接和通道同生产者略 credentials pika.PlainCredentials(app_user, your_password) connection pika.BlockingConnection( pika.ConnectionParameters(hostlocalhost, port5672, virtual_host/app1, credentialscredentials) ) channel connection.channel() # 声明交换机确保存在 channel.exchange_declare(exchangeorder_events, exchange_typefanout, durableTrue) # 声明一个匿名队列由RabbitMQ随机生成名字exclusiveTrue表示连接关闭后自动删除 result channel.queue_declare(queue, exclusiveTrue) queue_name result.method.queue # 获取随机生成的队列名 print(f [邮件服务] 生成的临时队列: {queue_name}) # 将队列绑定到交换机 channel.queue_bind(exchangeorder_events, queuequeue_name) # 设置QoS告诉RabbitMQ一次最多推送多少条消息给消费者防止消费者被压垮 channel.basic_qos(prefetch_count1) # 开始消费no_ackFalse 表示开启手动确认模式 channel.basic_consume(queuequeue_name, on_message_callbackcallback, auto_ackFalse) print( [邮件服务] 等待订单事件。按 CTRLC 退出。) channel.start_consuming()关键点解析queue_declare(queue, exclusiveTrue)创建了一个非持久化、独占的、自动删除的匿名队列。这对于临时消费者如这个示例很合适。对于需要持久化的任务队列应该给队列起一个固定的名字并设置durableTrue。queue_bind将队列与交换机绑定。对于fanout交换机routing_key参数被忽略。basic_qos(prefetch_count1)这是保证公平调度和防止消费者积压的关键设置。它告诉RabbitMQ在消费者未确认前一条消息之前不要给它发送新的消息。这样能确保工作负载均匀分布。auto_ackFalse和basic_ack手动消息确认机制。这是保证消息“至少被消费一次”At-least-once delivery的核心。只有在消费者真正处理完业务逻辑后才调用basic_ack确认RabbitMQ才会从队列中删除该消息。如果消费者进程崩溃RabbitMQ会将未确认的消息重新投递给其他消费者。basic_nack: 否定确认。可以拒绝消息requeueTrue会重新放回队列requeueFalse则消息会被丢弃或进入死信队列。4.2.3 运行与观察先启动两个消费者模拟邮件服务和日志服务python consumer_email.py另开一个终端运行一个类似的consumer_log.py代码逻辑类似把打印内容换成“记录日志”。再运行生产者python producer.py观察两个消费者的终端输出它们应该都收到了全部5条消息。这就是扇出交换机的广播效果。5. 生产环境进阶考量与避坑指南把RabbitMQ用起来不难但要用好、用稳尤其是在生产环境下面这些点必须关注。5.1 消息可靠性保障不丢消息的“铁三角”消息丢失可能发生在生产者、RabbitMQ自身、消费者三个环节。构建可靠性需要组合拳生产者确认Publisher Confirm问题生产者发送消息后不知道消息是否真正到达了RabbitMQ服务器可能在网络传输中丢失。方案开启通道的confirm_delivery模式。发送消息后生产者会异步收到一个确认ack或否定确认nack的回调。只有收到ack才能认为消息已持久化到服务器。代码示意pikachannel.confirm_delivery() # 开启确认模式 try: channel.basic_publish(...) print(Message confirmed!) except pika.exceptions.UnroutableError: print(Message was returned (no queue bound)!) except pika.exceptions.NackError: print(Message was nacked!)消息与队列持久化如前所述设置交换机(durableTrue)、队列(durableTrue)、消息(delivery_mode2)为持久化。但这只能应对RabbitMQ正常重启无法应对服务器断电等极端情况消息可能还在缓存未落盘。持久化会牺牲一些性能。消费者手动确认Manual Acknowledgement如上文示例设置auto_ackFalse并在业务处理成功后手动basic_ack。这是保证消息不被消费者漏掉的关键。三者结合才能最大程度保证消息不丢失。5.2 集群与高可用单点故障的解决方案单机RabbitMQ有宕机风险。生产环境必须部署集群。普通集群队列元数据队列定义、绑定关系等在所有节点同步但队列消息本身只存在于创建该队列的节点。其他节点只知道指向该节点的引用。如果主节点宕机该队列不可用除非配合镜像队列。镜像队列Mirrored Queues这是实现高可用的推荐方式。你可以将队列镜像到集群中的多个节点上。这样每个消息都会被复制到所有镜像节点。即使主节点故障其他镜像节点可以立刻接管服务不中断。配置方式主要通过策略Policy来设置。例如在管理界面Admin-Policies添加一条策略Pattern:^ha\.(匹配所有以ha.开头的队列)Definition:{ha-mode:all}(镜像到所有节点) 或{ha-mode:exactly, ha-params: 2}(镜像到2个节点)Priority: 05.3 监控与运维让问题可视化管理界面Management UI最直接的监控工具。重点关注Overview连接数、通道数、队列数、消息速率。Queues每个队列的消息数、未确认消息数、入队/出队速率、消费者数量。如果Ready消息数持续增长说明消费者处理不过来。Connections/Channels查看是否有异常连接或大量未关闭的通道会导致内存泄漏。命令行工具rabbitmqctldocker exec my-rabbitmq rabbitmqctl list_queues name messages_ready messages_unacknowledged docker exec my-rabbitmq rabbitmqctl node_health_check docker exec my-rabbitmq rabbitmqctl cluster_status指标集成RabbitMQ支持Prometheus监控。可以启用rabbitmq_prometheus插件将指标暴露给Prometheus再通过Grafana展示。5.4 常见问题排查实录问题1连接数暴涨导致服务器资源耗尽。原因客户端代码中每次发消息都创建新连接且没有正确关闭。TCP连接和AMQP通道都是资源。解决使用连接池如对于长时间运行的服务或确保在代码逻辑完成后正确关闭通道和连接channel.close(),connection.close()。对于短生命周期的任务可以考虑复用全局连接。问题2队列消息堆积消费者处理不过来。原因生产者速率 消费者速率。解决横向扩展增加消费者实例。优化消费者检查消费者业务逻辑是否有性能瓶颈能否异步或批量处理。限流在生产者端或通过RabbitMQ的QoS进行限流。设置队列最大长度在声明队列时设置x-max-length参数当队列满时旧消息会被丢弃或成为死信。这是一种保护机制。问题3网络闪断导致连接自动恢复。原因生产环境网络不稳定。解决客户端应实现自动重连机制。许多客户端库如Java的Spring AMQP .NET的RabbitMQ.Client内置了自动恢复功能。对于pika你需要自己实现监听连接关闭事件并进行重试的逻辑或者使用像pika的BlockingConnection的connection.process_data_events()配合异常捕获或考虑使用支持自动恢复的异步库如aio-pika。问题4无法路由的消息去哪了场景消息被发送到一个交换机但该交换机没有绑定任何队列或者没有队列的路由键匹配。结果消息会被直接丢弃。解决方案使用备用交换机Alternate Exchange。在声明主交换机时指定一个备用交换机。无法路由的消息会被自动转发到备用交换机你可以将其绑定到一个“死信队列”进行告警或人工处理。6. 原生安装简要说明如果你因为某些原因必须进行原生安装例如在无法使用Docker的服务器上流程如下以Ubuntu为例安装ErlangRabbitMQ依赖特定版本的Erlang。最好从RabbitMQ提供的仓库安装。# 添加RabbitMQ的APT仓库和密钥 curl -1sLf https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg /dev/null curl -1sLf https://keyserver.ubuntu.com/pks/lookup?opgetsearch0x0A9AF2115F4687BD29803A206B73A36E6026DFCA | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg /dev/null curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg /dev/null # ... 添加源列表 (具体命令请参考RabbitMQ官方文档不同系统版本有差异) sudo apt-get update sudo apt-get install -y erlang-base erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key erlang-runtime-tools erlang-snmp erlang-ssl erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl安装RabbitMQ Server# 同样从官方仓库安装 sudo apt-get install rabbitmq-server -y管理服务sudo systemctl start rabbitmq-server sudo systemctl enable rabbitmq-server # 开机自启 sudo systemctl status rabbitmq-server启用管理插件sudo rabbitmq-plugins enable rabbitmq_management之后就可以通过http://服务器IP:15672访问了。默认用户guest密码guest通常只允许本地访问需要创建新用户并设置权限。原生安装的配置管理主要通过修改/etc/rabbitmq/rabbitmq.conf文件实现语法是Sysctl风格的。对于初学者通过Docker环境变量或Web界面配置要直观得多。从安装到基础使用再到生产环境的深水区RabbitMQ的学问远不止于此。镜像队列的细致配置、死信队列的妙用、延迟消息的多种实现方案、与Spring Cloud Stream等框架的集成每一个话题都值得深入。但无论如何理解其核心模型生产者-交换机-队列-消费者、掌握消息可靠性的保障手段、并学会基本的监控与排查已经能让你应对绝大多数场景了。在实际项目中多观察管理界面多看看队列堆积和消费者状态很多潜在问题都能提前暴露。

相关新闻

提示工程新视角:鼓励性话语如何提升大语言模型表现

提示工程新视角:鼓励性话语如何提升大语言模型表现

在实际使用大语言模型(LLM)进行代码生成、数学推理或复杂问题求解时,开发者常常会遇到一个困惑:为什么同样的提示词,有时模型能给出惊艳的答案,有时却表现平平?除了模型能力、上下文长度和温度参…

2026/10/19 5:21:21 阅读更多 →
结构体与函数:从数据封装到模块化编程的实战指南

结构体与函数:从数据封装到模块化编程的实战指南

1. 从“数据孤岛”到“功能模块”:结构体与函数的协同进化 干了这么多年嵌入式开发和系统编程,我见过太多新手写的代码:变量散落一地,函数参数列表长得能绕屏幕一圈,改一个字段得翻遍十几个文件。问题的根源&#xff0…

2026/10/19 5:21:21 阅读更多 →
Bun实战指南:一体化JavaScript工具链的性能优势与迁移策略

Bun实战指南:一体化JavaScript工具链的性能优势与迁移策略

最近在社区里看到不少关于 Bun 的讨论,标题党们喊着“Node.js 要凉了”,而实际项目中,从阿里、腾讯到字节,确实有不少团队开始尝试或小范围使用 Bun 来提升开发体验和构建效率。作为一个长期与 Node.js 生态打交道的开发者&#x…

2026/10/18 5:17:29 阅读更多 →

最新新闻

随机密码生成器Docker化部署实战:Python Flask与secrets模块

随机密码生成器Docker化部署实战:Python Flask与secrets模块

随机密码生成器这种东西,说实话实现起来并没什么高深算法,但真正到了要部署、要稳定跑起来、要让团队成员顺手用的时候,坑还挺多。最近我把一套随机密码生成器做了Docker化部署,作为内部小工具挂在服务器上,整个过程走…

2026/10/19 5:21:18 阅读更多 →
Spark音乐推荐系统设计与实现:标签画像+ALS混合推荐

Spark音乐推荐系统设计与实现:标签画像+ALS混合推荐

最近被问到最多的一个项目,就是代号 J001S 的“基于 Spark 的音乐推荐系统设计与实现”。这题目一看就是典型的毕业设计/课程设计,但说实话,能把这个题目做出彩的人并不多。核心玩法其实很清晰:歌曲标签加用户画像,再叠…

2026/10/19 5:21:18 阅读更多 →
具身智能的拜师礼:从数据采集到机器人学徒的产业叩问

具身智能的拜师礼:从数据采集到机器人学徒的产业叩问

活动还没开始,场外的自由讨论区就已经吵成了一片。有人围着一条机械臂反复看末端夹爪的开合精度,有人对着投影上的遥操作界面讨论延迟数字,还有人干脆蹲在角落里,拿着笔记本飞速记着什么。我当时站在人群里,听到最频繁…

2026/10/19 5:21:18 阅读更多 →
Kafka生产环境部署与配置避坑指南

Kafka生产环境部署与配置避坑指南

1. 这不是“装个软件”那么简单:Kafka部署背后的真实战场你点开一篇叫《Kafka 的安装、管理和配置》的教程,心里想的可能是:“哦,下载、解压、改几个配置、启动服务——十分钟搞定”。我试过无数次,也带过不少刚接触消…

2026/10/19 5:21:18 阅读更多 →
千元机生态之争:畅享90 Pro Max开售背后的鸿蒙下沉逻辑

千元机生态之争:畅享90 Pro Max开售背后的鸿蒙下沉逻辑

千元档手机市场这几年其实很微妙。过去大家拼的是“跑分高不高、像素大不大、电池够不够”,但最近风向明显变了,越来越多的新机开始把“系统生态”“跨端互联”“全家桶体验”当成核心卖点。畅享90 Pro Max正式开售的消息之所以引发关注,不只…

2026/10/19 5:21:18 阅读更多 →
矩阵分解推荐系统实战:从协同过滤到SGD梯度下降原理与实现

矩阵分解推荐系统实战:从协同过滤到SGD梯度下降原理与实现

如果把推荐系统相关的经典论文排个"被引用最多、被误读也最多"的榜单,这篇《Matrix Factorization Techniques for Recommender Systems》绝对能进前三。我第一次读它的时候刚被各种协同过滤公式折磨完,看完第一反应是:就这么简单&…

2026/10/19 5:20:17 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →