企业微信回调对接实战:URL验证、消息加解密与自动回复
简介这是一份基于Spring框架的企业微信对接示例项目面向需要快速掌握企业微信消息接收与自动回复功能的Java后端开发者。项目完整演示了企业微信API调用、签名验证、XML消息解析与结果构造、事件处理等核心流程并整合了AppID、AppSecret等配置项附带消息控制器与测试模拟逻辑可帮助读者将企业微信接入能力直接复用到实际业务中。压缩包共152个文件以99个XML消息样本与配置文件、20个Java源码及对应编译类为主体辅以属性配置、Maven包装器等辅助文件包体仅176KB结构精简便于按模块阅读。已有1229人学习下载通过代码可学习从接收请求到自动回复的完整链路并可作为二次开发自定义菜单、获取用户信息、发送客服消息等功能的基础模板。1. 企业微信消息对接从一个“静默失联”的项目说起做企业应用集成时最让人头疼的往往不是复杂业务逻辑而是基础的消息通道迟迟不通。前阵子接手一个“模拟项目X”需求是把某公司内部系统的审批结果自动推送到企业微信同时能接收员工在企微里回复的指令。开发周期给了两周结果光是在回调URL验证这一步就卡了两天——企微服务器一直返回“验证失败”日志里只有一行干巴巴的报错。后来才发现是Token与EncodingAESKey的对应关系搞错了而且回调URL的端口还被防火墙挡了一道。这类对接需求在中小公司里非常普遍用企业微信作为移动端入口把内部系统的通知、审批、告警消息推送出来同时接收用户的文本回复做成简单的对话式交互。它解决的问题很明确不需要自建App不需要额外购买IM服务直接用企业微信已有的通讯录和消息通道。适合谁适合需要快速实现“系统通知触达员工、员工消息回流系统”的开发者尤其是做OA、IT运维、CRM这类内部工具的同学。这篇文章从一个可用的代码包“demoProject.zip”讲起把企业微信接入、接收消息、自动回复这条链路的原理、代码、坑位一次说透。你拿到的是一份能跑的工程骨架不是PPT。2. 回调协议的三座大山URL验证、Token与EncodingAESKey2.1 为什么需要回调企业微信是“被动”的收件方先说清楚一个底层逻辑企业微信服务器不会主动把消息推给你它需要你在管理后台配置一个回调URL相当于告诉企微“有消息请往这个地址投递”。这和Webhook模型完全一致但企业微信多加了两层安全机制签名校验和消息体加密。签名校验解决“消息来自谁”的问题企微在推送时用Token对URL参数进行签名你在本地用同样的Token重新计算一遍一致就说明请求确实来自企微服务器。消息体加密解决“内容泄露”的问题回调推送的XML里正文部分是用EncodingAESKey做AES加密的而且做了Base64编码。你在本地解密后才能看到真实的MsgType、FromUserName、Content等字段。这两个机制合在一起构成了企业微信回调的“三座大山”参数用途谁生成生命周期Token签名校验类似API Key你在管理后台填自己定随时可改改了立即生效EncodingAESKey消息体AES加密密钥43位管理后台随机生成也可自定义随时可重置重置后旧消息无法解密CorpID企业ID标识企业身份管理后台自动生成固定不变2.2 手写URL验证加密与解密的第一次握手URL验证是整个对接流程的第一道关卡。你在管理后台填好回调URL后企微会往这个URL发一个GET请求带四个参数msg_signature、timestamp、nonce、echostr。服务器收到这个GET请求后要做两件事一是用Token、timestamp、nonce按字典序排序拼接后做SHA1哈希对比msg_signature是否一致二是如果签名一致把echostr用EncodingAESKey解密把解密后的明文原样返回。这里有一个常见的误解以为echostr是明文直接返回就好了但实际它是经过AES加密的直接返回会校验失败。以下是Python的URL验证处理代码import hashlib import xml.etree.ElementTree as ET from flask import Flask, request, make_response import base64 import socket class CorpCrypto: def __init__(self, token, encoding_aes_key, corp_id): self.token token self.aes_key base64.b64decode(encoding_aes_key ) self.corp_id corp_id def verify_signature(self, msg_signature, timestamp, nonce): sort_list sorted([self.token, timestamp, nonce]) sort_str .join(sort_list) digest hashlib.sha1(sort_str.encode(utf-8)).hexdigest() return digest msg_signature def decrypt(self, echostr): # AES解密去除PKCS7填充末尾去掉16字节的CorpID cipher self.aes_key from Crypto.Cipher import AES aes AES.new(cipher, AES.MODE_CBC, self.aes_key[:16]) decrypted aes.decrypt(base64.b64decode(echostr)) pad_len decrypted[-1] content decrypted[:-pad_len] # 去掉16字节的CorpID return content[16:].decode(utf-8) app Flask(__name__) TOKEN your_token_here ENCODING_AES_KEY your_43char_key_here CORP_ID your_corp_id crypto CorpCrypto(TOKEN, ENCODING_AES_KEY, CORP_ID) app.route(/wechat/callback, methods[GET, POST]) def callback(): if request.method GET: msg_signature request.args.get(msg_signature) timestamp request.args.get(timestamp) nonce request.args.get(nonce) echostr request.args.get(echostr) if crypto.verify_signature(msg_signature, timestamp, nonce): decrypted_echo crypto.decrypt(echostr) return decrypted_echo else: return signature error, 403 # POST逻辑稍后补上这段代码的关键逻辑是先验证签名再解密顺序不能反。签名验证的作用是拦截伪造请求——如果没有这一步任何人都可以往你的回调地址POST数据你的服务器还会煞有介事地解密轻则报错重则被刷流量。解密的时候要注意AES的解密结果在最末尾会附带16字节的CorpID需要单独切掉。这个细节是很多人解密成功但拿不到正确内容的原因——他们打印出来的明文比预期多了一截。参数说明msg_signature是企微用Token、timestamp、nonce三个参数按照字典序拼接后做的SHA1哈希注意这里的排序规则是“字典序”不是“参数名长度”很多人在这里翻过车。拼接后的字符串直接做SHA1不需要再做URL编码。2.3 管理后台配置的四个关键字段在管理后台配置回调时你会发现有四个字段需要填URL、Token、EncodingAESKey、以及那个“接收消息”的开关。URL的格式必须是https://开头企微强制要求回调地址必须支持HTTPS如果你在测试环境用HTTP企微虽然也接受但正式上线是过不了审核的。生产环境必须走HTTPS这意味你需要准备证书。Token字段是你自己写的任意字符串比如Abc12345但不要用太简单的值因为企微的签名机制虽然能防伪造但如果Token被别人猜到了他就能构造出一个签名合法的假请求。EncodingAESKey是43位随机字符串由大小写字母和数字组成。你可以让企微自动生成也可以自己填但必须是43位不能多不能少且不能包含特殊字符。另外还有一个“消息加解密方式”的选项通常建议选“安全模式”也就是AES加密而不是明文模式。明文模式虽然调试起来方便但正式环境把消息体直接暴露在公网链路上内部系统的通知内容可能会被网关日志记录存在信息泄露风险。3. 接收消息与自动回复从POST回调到业务处理3.1 POST回调的消息格式XML实体和加密字段URL验证通过后接下来就是真正的消息接收。员工在企业微信里给应用发一条消息企微服务器会往你的回调URL发一个POST请求请求体是XML格式整体仍然被AES加密过。外层结构是xmlEncrypt.../Encrypt/xml里面只有Encrypt字段。你需要先解密得到明文XML再去解析里面的业务字段。解密方法和URL验证时一致但注意解密结果里不再带CorpID了——那个只有echostr才带。解密后的明文XML长这样xml ToUserName![CDATA[corp_id]]/ToUserName FromUserName![CDATA[user_id]]/FromUserName CreateTime1718428800/CreateTime MsgType![CDATA[text]]/MsgType Content![CDATA[你好]]/Content MsgId1234567890/MsgId AgentID1000002/AgentID /xml这里的FromUserName是员工的UserID不是微信昵称。MsgType是消息类型text代表文本消息MediaId是图片或文件消息时才会有。AgentID是应用ID如果你配置了多个企业应用可以用这个字段区分消息来自哪个应用。3.2 被动回复握手之后必须应答企业微信的交互模型要求当你的回调收到一条消息后你必须在5秒内返回一个响应。这个响应有两种方式一是直接返回被动回复的XML同步二是通过“发送应用消息”接口主动推送异步。被动回复的XML格式和接收消息类似但需要把响应内容也做加密app.route(/wechat/callback, methods[GET, POST]) def callback(): if request.method GET: # ...URL验证逻辑同上... pass else: msg_signature request.args.get(msg_signature) timestamp request.args.get(timestamp) nonce request.args.get(nonce) # 1. 读取请求体取出Encrypt字段 raw_msg request.data.decode(utf-8) encrypt_elem ET.fromstring(raw_msg).find(Encrypt).text # 2. 解密得到明文XML plain_xml crypto.decrypt_post(encrypt_elem) # 3. 解析业务字段 msg_tree ET.fromstring(plain_xml) from_user msg_tree.find(FromUserName).text content msg_tree.find(Content).text msg_type msg_tree.find(MsgType).text # 4. 业务逻辑判断内容 if content.strip() 你好: reply_content 你好我是自动回复助手 elif content.strip().startswith(查询): reply_content 正在为你查询请稍候 else: reply_content 没听懂请输入你好试试 # 5. 构造被动回复XML并加密 reply_xml build_reply_xml(from_user, reply_content) encrypted_reply crypto.encrypt(reply_xml) # 6. 封装成最外层XML返回 resp_xml fxmlEncrypt![CDATA[{encrypted_reply}]]/Encrypt resp_xml fMsgSignature{sign}/MsgSignature resp_xml fTimeStamp{timestamp}/TimeStamp resp_xml fNonce![CDATA[{nonce}]]/Nonce/xml return make_response(resp_xml)这里的构建回复XML时有一个极其容易踩坑的地方回复的ToUserName和FromUserName必须和接收到的消息互换。收到消息时FromUserName是员工ToUserName是企业的CorpID回复时要反过来ToUserName填员工的UserIDFromUserName填CorpID。如果填反了企微会认为回复不合法员工手机上收到“该消息无法显示”。主动推送的方式是调用企微的message/send接口需要获取access_token每次调用前用CorpID和Secret换token没有缓存机制的话每次请求都要重新获取。这种方式适合异步场景——比如你把消息放进了队列不能在5秒内同步返回那就不走被动回复直接调用这个API把结果推送过去。3.3 完整工程结构demoProject.zip里有什么这个demoProject.zip的目录结构大致如下demoProject/ ├── app.py # Flask主程序路由与回调入口 ├── corp_crypto.py # 加解密封装类 ├── reply_builder.py # 被动回复XML构造 ├── message_sender.py # 主动推送消息接口封装 ├── config.py # Token/AESKey/CorpID配置 ├── requirements.txt # 依赖清单 └── README.md # 环境搭建与启动说明app.py负责HTTP路由corp_crypto.py负责签名验证和AES加解密reply_builder.py封装被动回复的XML模板message_sender.py是主动推送的客户端。config.py里是你需要修改的配置项。依赖清单requirements.txt包含flask、pycryptodome、requests这三个核心库。pycryptodome是AES加密的实现库requests用于调用主动推送的API。4. 避坑指南回调失效、重复推送与并发问题4.1 现象URL验证通过但消息收不到URL验证通过说明你的GET接口没问题签名和加解密都正常但员工发消息后你的服务器完全没有收到POST请求。原因排查下来通常有两个方向一是管理后台的“接收消息”开关没有打开这个开关在应用详情页的“接收消息”设置里不打开的话企微不会推送任何事件二是回调URL配置了但是保存失败——企微保存时也会发一次GET验证如果验证失败它会提示你保存失败但有时候提示是“保存成功”但URL实际上没生效你可以在“接收消息”页面看到当前的URL状态。解决方法是重新保存一次回调配置观察页面是否有报错提示然后到应用详情页确认“接收消息”勾选了“接收消息”和“接收事件”。4.2 现象重复收到同一条消息明明员工只发了一条消息你的服务器却收到了两次一样的推送。原因企业微信有失败重试机制。如果你在收到POST请求后没有在5秒内返回合法的XML响应或者返回了HTTP错误码企微会认为推送失败然后重试。默认重试3次每次间隔递增。这算是个隐藏坑如果你在回调里做了处理但忘了返回响应或者逻辑太慢超过5秒就会触发重试。如果你的业务逻辑里有“接收消息就写入数据库”之类的操作没有做幂等库就会出现大批重复记录。解决方法是利用MsgId字段做幂等。每条消息的MsgId是固定的你的处理逻辑里加一行检查——如果这个MsgId已经处理过直接返回空响应即可不再走业务逻辑。4.3 现象解密偶发失败日志显示“pad block corrupted”这个问题是最玄学的因为它“偶发”——有时候一整天都没事有时候一天崩十几次。原因企微的回调URL验证和解密用的EncodingAESKey是同一个但如果你在管理后台重置过EncodingAESKey而本地config.py里的值没同步更新那旧配置还能收到验证请求因为验证用的是Token但解密会失败因为密钥不一致。另一个更隐蔽的原因是你用了多台服务器部署但代码里把EncodingAESKey写死成了某一台机器上生成的值而多台机器之间配置文件不一致。解决方法是在做任何回调验证之前先确认所有节点的config.py里的EncodingAESKey完全一致。可以用MD5校验配置文件发布时自动比对不一致直接拒绝启动。提示生产环境重置EncodingAESKey后旧的消息无法解密。建议先读取所有未消费的消息并持久化再重置密钥最后重新启动服务。4.4 现象高并发下回调地址扛不住当企业人数多、消息量大时你的Flask单进程服务会明显吃力。Flask自带的开发服务器是单线程的处理POST请求时如果解密AES占用了时间其他请求就会排队。常见做法是用Gunicorn或uWSGI代替Flask自带的WSGI服务器多worker运行。如果消息量大到单机撑不住就得把回调入口做成一个轻量的队列消费者——收到消息后立刻返回“收到”然后把解密和业务逻辑丢到异步队列里处理。这里有一个必须注意的点回调入口必须保持快速响应。如果入口直接解密解析写库构造回复全部同步执行一旦数据库慢整个回调都会超时触发企微重试形成雪崩。我的习惯是回调入口只做签名验证和消息体解密拿到明文后立刻丢进队列马上返回合法的加密空回复业务逻辑由worker异步消费。5. 进阶从自动回复到多轮会话把被动变主动拿到“demoProject.zip”后你基本的接收与自动回复链路已经通了。这里讲讲怎么在这套骨架上做进阶扩展让它从“自动回复机”变成“交互入口”。5.1 给自动回复加状态机文本消息的自动回复如果只做关键词匹配用户很快就会觉得这机器人是个傻子。加一个简单的状态机可以实现多轮会话——比如“请假”流程第一轮用户发“请假”你回复“请问是事假还是病假”第二轮用户回复“事假”你再问“请假几天”第三轮用户回复“3天”你才真正落库并通知审批人。实现思路不复杂在本地开一个字典key是员工UserIDvalue是当前所处状态。每次收到消息先查这个用户有没有未完成的状态有则进入对应分支。这段逻辑有一个边界要处理好如果用户中途失联状态一直挂在内存里会越积越多。我一般会加一个超时机制比如30分钟内没有下一轮输入自动清除会话状态。5.2 主动推送把审批结果“打”给用户被动回复只能在用户主动发消息后应答但很多场景需要系统主动推送。比如审批流程走完了你要通知用户“你的申请已通过”。调用message/send接口的流程如下import requests def get_access_token(corp_id, secret): url https://qyapi.weixin.qq.com/cgi-bin/gettoken params {corpid: corp_id, corpsecret: secret} resp requests.get(url, paramsparams).json() return resp[access_token] def send_text_message(access_token, touser, content, agent_id): url fhttps://qyapi.weixin.qq.com/cgi-bin/message/send?access_token{access_token} payload { touser: touser, msgtype: text, agentid: agent_id, text: {content: content}, safe: 0 } resp requests.post(url, jsonpayload).json() return resptouser支持多个UserID用竖线分隔一次推送上限1000人。AgentID是你在管理后台看到的应用ID推送必须指定是哪个应用发出的。access_token的有效期是7200秒且企微对获取频率有限制。我一般会加一个缓存字典过期前5分钟自动刷新避免每次调用都请求token接口。5.3 验证完整链路从发消息到收到回复全部做完后验证链路是这样一条龙手机企业微信打开你的应用发一条“你好”企微服务器向你的回调URL发POST加密消息你的服务验证签名、解密、解析文本业务逻辑判断关键词构造回复加密回复XML返回给企微员工在企业微信里看到“你好我是自动回复助手”如果哪一步断了优先看回调服务日志其次看企微管理后合的“消息推送”记录——企微会显示推送成功还是失败。这个记录是排查问题的第一现场比猜原因又快又准。5.4 一个提升调试效率的小技巧回调对接最痛苦的是不能本地打断点调试因为企微服务器访问不到你的localhost。我一般会在调试阶段买一台便宜的云服务器把回调URL指向这台机器的公网IP加HTTPS端口本地代码改完就部署上去验证。等稳定了再把URL切回生产环境。如果开发机在办公室内网可以用内网穿透工具把本地端口暴露到公网回调URL指向穿透域名。注意穿透服务的稳定性调试时可以生产环境不推荐。还有一个小习惯所有回调入口日志里务必记录msg_signature、timestamp、nonce、原始请求体这四个信息。遇到“这次成功了下次失败”的问题时这些日志是唯一能还原现场的依据。从那个项目以后我每次对接企微都把日志级别开到DEBUG等稳定了再降回INFO从那以后排查问题的时间至少砍了一半——希望帮到你。本文还有配套的精品资源点击获取

相关新闻

告别加班!Windows 一键部署 Open Claw,下班前搞定全天工作量|TaoToken 统一 Key 接入

告别加班!Windows 一键部署 Open Claw,下班前搞定全天工作量|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/18 12:50:38 阅读更多 →
空间平滑MUSIC算法:相干信源DOA估计原理与MATLAB实战

空间平滑MUSIC算法:相干信源DOA估计原理与MATLAB实战

简介:空间平滑MUSIC算法MATLAB实现,面向阵列信号处理与DOA估计方向的初学者和研究人员,用于提升多信号源、相干信号环境下的到达方向估计精度。压缩包内共3个m文件,大小仅3KB,分别对应主程序与两种空间平滑处理实现&am…

2026/10/18 12:50:38 阅读更多 →
MATLAB实现5G NOMA用户配对与功率分配仿真

MATLAB实现5G NOMA用户配对与功率分配仿真

简介:本资源是一套面向通信工程专业学生、5G算法研究者及MATLAB仿真初学者的NOMA用户配对完整实践方案,聚焦5G网络中非正交多址接入的关键技术难点——如何科学配对信道条件差异显著的用户以提升系统吞吐量与公平性。压缩包共15个文件,含7个核…

2026/10/18 12:50:38 阅读更多 →

最新新闻

Select模型详解:Windows Socket TCP服务端实现与优化

Select模型详解:Windows Socket TCP服务端实现与优化

聊到Windows下的网络编程,“五种I/O模型”绝对是一个绕不开的话题。很多人在面试或者做项目的时候第一次接触这个概念,当场就被Select、WSAAsyncSelect、WSAEventSelect、重叠I/O、完成端口这一串名词搞懵了。说实话,这五个模型确实容易让人望…

2026/10/18 21:46:11 阅读更多 →
RT-Thread移植到CH32V307VCT6:Ubuntu下RISC-V BSP开发全流程

RT-Thread移植到CH32V307VCT6:Ubuntu下RISC-V BSP开发全流程

把RT-Thread移植到CH32V307VCT6这颗国产RISC-V单片机上,再顺手做一个能在Ubuntu下编译的BSP包,这活儿听起来不大,实际上涉及工具链、启动文件、时钟树、串口驱动、链接脚本和构建系统一堆事。我这次折腾完整套流程,把中间踩过的坑…

2026/10/18 21:46:11 阅读更多 →
从Demo到生产:Spring AI Alibaba Admin工程化实践

从Demo到生产:Spring AI Alibaba Admin工程化实践

做了三年AI应用,我的感受是:Demo和产品之间隔着一整条生产线。朋友圈里炫的AI聊天机器人、RAG问答神器,绝大多数都停在了玩具阶段——本地跑得欢,一上生产就崩。这不怪模型,怪工程。真正让我觉得AI应用"从玩具变成…

2026/10/18 21:46:11 阅读更多 →
LDA主题模型实战指南:从原理到gensim落地与调参避坑

LDA主题模型实战指南:从原理到gensim落地与调参避坑

简介:面向需要主题建模实战参考的Python开发者,这份LDA主题模型实现代码包围绕gensim库给出了可运行的训练脚本,覆盖文本预处理、词典构建、语料转换、LdaModel训练与主题分布输出等核心步骤。资源包共12个文件,压缩后仅10KB&…

2026/10/18 21:46:11 阅读更多 →
Python+PySide6打造桌面透明悬浮窗:金价监控小工具全解析

Python+PySide6打造桌面透明悬浮窗:金价监控小工具全解析

简介:面向日常盯盘与上班摸鱼场景,这款黄金金价监控气泡工具能把内外金价实时浮在电脑右下角,与系统时间并列显示,每60秒自动刷新,无需频繁打开网页或手机即可掌握最新行情。工具采用Python编写,纯悬浮气泡…

2026/10/18 21:46:11 阅读更多 →
增量索引实战:新文档怎么做到分钟级可检索

增量索引实战:新文档怎么做到分钟级可检索

个人主页&#xff1a;> for_ever_love__ <&#xff08;欢迎各位大佬莅临&#x1f60a;&#xff09; 其他栏目: > 大模型开发从0到1 < 其他栏目: > iOS项目总结大全 < 其他栏目: > 我想学python了 < 其他栏目: > iOS UI < 文章目录增量索引实战&a…

2026/10/18 21:45:10 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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 阅读更多 →