React Native 鸿蒙适配实战:从零构建模拟智能音响的完整指南
最近总有开发者私信问我现在团队里还有一套 React Native 的老项目到底怎么迁移到鸿蒙甚至还有人觉得鸿蒙只支持原生语言RN 根本跑不起来。作为一个从零把模拟智能音响跑上鸿蒙真机的人我可以明确告诉你这条路能走通而且入门难度比想象中低不少。这篇博文从一个具体项目讲起——用 React Native 在鸿蒙系统里做一个模拟智能音响。所谓“模拟”不是做一个死板的静态页面而是包含播放控制、动态频谱、语音交互模拟、原生音频能力桥接的完整应用。它既能当入门练习也能当成以后接真实硬件、接真实语音服务的原型地基。我会把环境搭建、组件拆分、状态设计、原生桥接、调试打包这些关键环节按我实际跑通的顺序完整讲一遍。适合两类人看一类是只会前端、想试试鸿蒙开发的 React 开发者另一类是想评估“RN 跨端上鸿蒙到底靠不靠谱”的技术负责人。看完你应该能判断这个方案在什么场景下值得用又在哪些地方需要谨慎。1. 为什么选 React Native又为什么偏偏做“模拟智能音响”1.1 三种方案摆在一起差距比想象中小在动手前团队里其实有过一轮方案争论用鸿蒙原生 ArkTS 重写、用 Flutter 适配、还是用 React Native 的鸿蒙适配层。我把真实体会到的情况整理成一张表可能会有主观成分但都是基于实际项目维度鸿蒙原生ArkTS/ArkUIFlutter鸿蒙适配版React Native鸿蒙适配层学习成本高UI 范式完全不同中Dart 与渲染管线要重新适应低前端/RN 经验可直接复用现有代码复用率低几乎全重写中Dart 逻辑可复用高JS 逻辑与 RN 组件大部分保留生态成熟度高官方一等公民中适配层持续迭代中适配层已具备跑通业务能力性能表现最好较好够用复杂动画需注意团队适配速度最慢中最快我的结论是如果是从零开始做一个鸿蒙独占、强交互、偏重动画的旗舰应用原生当然首选。但如果是跨端团队、已有 RN 代码资产或者只想快速验证鸿蒙上的产品形态RN 适配层是相当务实的选择。我们最终选它是因为跨端项目里 80% 的界面和业务逻辑可以三端共用真正需要原生处理的只有音频播放、后台运行这类能力。1.2 “模拟智能音响”这个载体选得值很多人会问入门练习为什么不做个 Todolist非要做智能音响恰恰是因为“音响”这个载体覆盖了 React Native 开发里最典型的几类问题复杂的界面布局与动效、播放器状态切换、原生模块桥接、权限申请、后台任务。这几个点几乎是所有中大型 RN 应用都会踩到的硬骨头。智能音响还天然是一个“设备型”产品用户对它的交互预期很明确唤醒、听指令、播放、反馈。这意味着我们可以把交互边界收窄不需要做一个完整系统只需要把一条核心链路做得有真实感。结果就是这个项目难度适中但学完以后你积累的技能点可以直接迁移到真实硬件控制、语音助手、IoT 面板等方向。1.3 项目做完你手里会留下什么这个项目完成后你能带走的不是一堆抄来的代码而是一套理解跨端开发的框架你会清楚 JS 侧和鸿蒙原生侧什么时候该互相调用状态管理在复杂交互里该怎么设计真机调试遇到白屏和证书问题该怎么定位。更实用的是一份“RN 鸿蒙跨端最小可行工程”后续任何新功能都可以在这个地基上快速加。2. 环境搭建避坑实录版本、命令、真机调试三个大坑2.1 一份可以直接照抄的版本清单鸿蒙生态迭代快RN 适配层对版本敏感这一步最容易出问题。我不建议你直接去官网拉最新版而是先锁定一套我实测稳定的组合。组件推荐版本说明Node.js18 LTS 及以上20 LTS 也可以Metro 打包没发现冲突JDK17鸿蒙开发工具链对 JDK 版本有要求Android SDKAPI 33 及以上RN 底层构建仍然依赖 Android 工具链鸿蒙官方 IDE适配你鸿蒙系统版本的稳定版最好和真机系统版本同代RN 鸿蒙适配层与你 RN 主版本匹配的正式发布版不要用 alpha/beta特别强调一下为什么要锁版本RN 的鸿蒙适配层和其他平台不一样它的核心模块是通过原生代码映射到鸿蒙系统 API 的鸿蒙系统一升级适配层经常跟着变。如果项目里 RN 版本太新适配层可能还没跟上太旧又会缺一些新 API。我一开始就是随手拉最新版结果 Metro 能启动但原生模块全部找不到退回稳定组合后半小时正常。2.2 初始化工程的几条关键命令环境变量配好之后我建议按下面的顺序操作# 1. 安装 React Native 官方脚手架如果还没有 npm install -g react-native-community/cli # 2. 创建项目指定 RN 版本 npx react-native-community/cli init SmartSpeakerDemo --version 0.72.15 # 3. 安装鸿蒙适配相关依赖 npm install openharmony/xxx-react-native # 以实际适配包名为准 npm install react-native-community/hooks # 4. 用 IDE 打开工程等待 Gradle/Hvigor 首次同步完成第一次同步很慢因为要下载鸿蒙工具链依赖我这边差不多花了十几分钟。中间别再开其他高占用程序容易造成下载超时。2.3 真机调试最容易翻车的两个位置第一个是开发者模式。鸿蒙真机进入开发者模式后还要在系统设置里打开“USB 调试”和“仅充电模式下允许 ADB 调试”然后让 IDE 自动识别设备。有的设备第一次连接会弹一个 30 秒倒计时的授权框千万别点错否则后面所有安装都会被拒绝。第二个是设备签名。鸿蒙真机运行应用必须签名IDE 里有自动签名引导填一个开发者证书的线上申请流程这个过程需要联网等待审核按提示操作即可。我们当时在签名这步卡了挺久总是在安装阶段报签名不匹配后来发现是工程里有多个 build 模块签名配置只应用到了主模块子模块没同步把所有模块的签名都配好才解决。环境跑通以后我的感受是鸿蒙上跑 RN 比早期资料里描述的成熟得多但那套“版本必须匹配”的铁律劝退了很多一上来就拉最新版的开发者。版本对齐才是这个阶段最核心的工程智慧。3. 音响界面拆解组件树、播放状态机、动态频谱动效3.1 界面的组件树拆得越细后面越省事模拟智能音响的界面我从设计稿里拆成四个大区域设备状态区、播放卡片区、语音指令区、曲目列表区。对应到 React Native 的组件树是这样的View style{styles.root} DeviceStatusBar / // 设备名称、唤醒状态灯、网络状态 PlayerCard / // 封面图、频谱动画、进度条、播放控制按钮组 CommandPanel / // 模拟语音按钮、识别文本显示框 Playlist / // 本地曲目列表点击直接播放 /View每个大组件内部再拆分小组件。比如播放卡片里的进度条我会抽成独立的ProgressBar组件而不是把逻辑堆在PlayerCard里。这样做的直接好处是后面接真实音频焦点、接后台通知时只需要修改对应组件不需要动整棵组件树。组件拆分的原则可供参考如果一个组件里同时出现三个以上的状态判断或者一段 JSX 超过五十行就该想想是不是拆小了。这不算什么高深理论但在实战里真的能避免后续改需求时把代码搅成一锅粥。3.2 用状态机把播放器的“混乱感”吃掉播放器最麻烦的不是 UI而是状态。一个音响的播放状态至少包含待机、聆听、识别中、准备播放、播放中、暂停、播放结束。如果每个状态都用布尔值表示界面会立刻失控。我给项目设计了一个简单状态机type PlayerState | { phase: idle } | { phase: listening } | { phase: recognizing; rawText: string } | { phase: playing; trackId: string; position: number } | { phase: paused; trackId: string; position: number }; function playerReducer(state: PlayerState, action: PlayerAction): PlayerState { switch (action.type) { case WOKE_UP: return { phase: listening }; case SPEECH_RECOGNIZED: return { phase: recognizing, rawText: action.text }; case START_PLAY: return { phase: playing, trackId: action.trackId, position: 0 }; case TOGGLE_PAUSE: if (state.phase playing) { return { ...state, phase: paused }; } return state; // 省略其余 action } }用useReducer管理这个状态机界面只做一件事把当前阶段渲染出来。比如播放中显示频谱动画和暂停按钮聆听中显示呼吸灯动画识别中显示文本加载效果。状态机最大的价值是把所有可能出现的组合收敛到固定集合UI 永远不会出现“既在播放又显示待机”这种矛盾。3.3 动态频谱动画入门级动效也能做出高级感真实音响的频谱是音频数据的实时可视化入门项目不需要真的分析音频我用循环动画模拟了频谱跳跃的效果。思路是生成一组随机高度数组每个固定间隔更新一次同时用 RN 内置的Animated做上下过渡const bars useRef(Array.from({ length: 24 }, () 0)).current; function refreshBars() { const next bars.map((_, i) { const target Math.random(); const phase Math.sin(Date.now() / 200 i) * 0.2; return Math.max(0.1, Math.min(1, target phase)); }); next.forEach((value, i) { Animated.spring(bars[i], { toValue: value, useNativeDriver: true }).start(); }); } // 每 180ms 刷新一次 useEffect(() { const timer setInterval(refreshBars, 180); return () clearInterval(timer); }, []);这个频谱不处理真实音频但视觉上已经有那味儿了。如果后续想接真数据可以把随机数替换成音频分析器输出的频段能量值整个组件结构不用动。大多数入门项目的动效需求用这种“逻辑生成 动画过渡”的方式就足够支撑。4. 让音响真正响起来鸿蒙原生音频模块桥接实录4.1 为什么播放器不能只用 JS 写React Native 里没有内置的音频播放组件社区有第三方库但在鸿蒙适配层上不一定稳定。最可靠的方式是用鸿蒙原生提供的音频能力做一个原生模块JS 侧通过桥接调用。这也是跨端开发里最值得掌握的一环因为大部分系统级能力——播放器、摄像头、蓝牙、定位——都需要经过这道桥。原生侧的核心工作可以这样理解鸿蒙原生给你一套音频播放接口JS 侧不能直接用我们在鸿蒙侧封装一个“播放服务”暴露给 JS 几个方法加载音频、开始播放、暂停、拖动进度、查询时长。然后 JS 侧只需要正常调用这些方法不需要关心底层实现。4.2 鸿蒙侧封装一段简化版思路鸿蒙侧的封装核心是在意图框架或能力封装里注册一个模块对外暴露方法。我这里用一个简化的伪代码说明整个链路NativeModule(AudioPlayer) export class AudioPlayerModule extends NativeModuleBase { private player; initAudioPlayer() { this.player new AVPlayer(); // 设置音频源、监听结束事件 } play(trackId: string): Promiseboolean { const source getTrackSource(trackId); // 如果是本地 res 目录资源使用 rawfile:// 前缀访问 this.player.setSource(rawfile:// source); this.player.play(); return Promise.resolve(true); } pause(): Promiseboolean { this.player.pause(); return Promise.resolve(true); } seekTo(ms: number): Promiseboolean { this.player.seek(ms); return Promise.resolve(true); } getDuration(): Promisenumber { return Promise.resolve(this.player.duration); } }这段代码省略了很多细节比如错误处理、音频焦点、播放完成回调但完整展示了桥接的最小骨架。理解这个骨架以后你会发现所有原生能力的接入模式都是相似的原生侧定义一个模块JS 侧拿模块名和事件名去调用参数传基本类型或对象。真正复杂的是原生侧内部实现JS 侧的代码反而非常简单。4.3 JS 侧的调用封装与几个真正的坑JS 侧调用原生模块我习惯再包一层而不是到处直接引用。好处是万一原生接口改名只改一个文件// audioService.js import { NativeModules } from react-native; const { AudioPlayer } NativeModules; export const audioService { play: (trackId) AudioPlayer.play(trackId), pause: () AudioPlayer.pause(), seekTo: (ms) AudioPlayer.seekTo(ms), getDuration: () AudioPlayer.getDuration(), };跑通之后有几个坑值得记录第一资源路径问题。鸿蒙的本地资源放在resources/rawfile下通过rawfile://访问和 Android 的assets://不一样代码里不能直接复用旧路径。第二播放完成事件。JS 侧需要从播放状态回到待机状态原生侧发生的事件要通过事件机制回传这一步绕不开必须做。第三音频焦点。在真机上如果同时打开其他应用播放声音音响需要响应系统音频焦点变化否则可能被系统直接静音且无法恢复。这些坑不踩一遍很难记住尤其是“JS 调用原生模块看似简单真正复杂的是原生侧的工程配置”这个认知越早建立越好。5. 让音响“听懂人话”的两种做法从模拟闭环到真实识别5.1 先把交互闭环跑通按钮触发 文本指令真实的语音识别需要申请权限、接入语音服务、处理在线/离线策略这些对于一个入门项目来说太重了。我建议第一步做成“模拟语音”界面上放一个大大的麦克风按钮点击后进入聆听动画然后弹出一个文本输入框你输入“播放今日推荐”或“暂停播放”应用解析文本并执行对应动作。这个环节的关键不是识别而是指令解析。我用最简单的关键词匹配做了一个解析器function parseCommand(text: string): Command { if (text.includes(暂停)) return { type: PAUSE }; if (text.includes(播放) text.includes(歌)) { return { type: PLAY_TRACK, trackId: text.match(/播放(.)/)?.[1] }; } return { type: UNKNOWN }; }不要觉得这个实现太简陋。它把“用户输入 - 意图识别 - 动作执行 - UI 反馈”这条链路完整打通了后续接真实语音识别替换的只有输入来源动作执行和 UI 反馈完全不用动。这种“先跑通闭环、再优化单个环节”的思路在真实项目里非常管用。5.2 换成真实语音识别需要动哪些地方如果学完模拟版还想加真识别核心改动有三块申请麦克风权限工程配置里声明权限并确保动态授权流程正确接入鸿蒙的语音识别能力把识别结果文本回传给 JS 侧处理识别中的错误状态比如超时、没听清、网络不可用。这三块每一块都能单独写一篇踩坑笔记但对整个应用架构来说它们都只是替换parseCommand前面的“输入来源”应用主体毫发无损。这也是我把模拟交互放在前面的深意先建立正确的架构认知再去填单个能力的技术细节路径会顺很多。5.3 交互反馈为什么状态切换比界面好看更重要很多初学者做交互只关注界面效果忽略了真正的产品感。音响的交互反馈是“链式”的唤醒后灯要从待机色变成聆听色收到指令后要先显示“识别中”的加载态识别成功后要平滑过渡到播放界面而不是突然跳转识别失败时要给出明确的失败提示和重试入口。这些状态切换都用第 3 章的状态机统一管理界面只根据状态渲染对应组件。我把整套切换拆成一张表格方便你对照检查用户行为状态阶段UI 反馈原生动作点击唤醒idle - listening呼吸灯动画点亮无输入指令listening - recognizing显示识别文本和加载圈无指令解析成功recognizing - playing显示正在播放频谱启动播放音频点击暂停playing - paused频谱静止图标切换暂停播放指令解析失败recognizing - idle弹窗提示“未听懂请重试”无这张表帮我省掉了无数“这里状态怎么又不对”的排查时间。界面好看是观感状态切换正确才是用起来舒服的根基。6. 从能跑到能交付调试、打包和后续的迭代方向6.1 Metro 调试的坑位比想象中少但定位手段要多准备几种RN 开发离不开 Metro 打包器。鸿蒙适配层下的开发调试方式和普通 RN 基本一致启动 Metro在 DevTools 里调试 JS 代码改完代码热更新。但鸿蒙原生侧的改动不会 Hot Reload必须重新挂载原生模块或者全量重编。不少初学者容易在这里困惑明明改了原生代码界面却毫无变化。我的习惯是JS 侧改动靠热更新快速迭代原生侧改动按批记录攒到几个一起重新构建。如果遇到白屏我会先看 Metro 终端有没有报错再看真机日志里有没有原生崩溃栈最后才怀疑代码逻辑。定位手段的优先级比盲目改代码重要得多。6.2 Release 构建入门阶段最容易被忽略的一步开发调试用的是 debug 包性能会打折很多界面卡顿问题其实是 debug 模式造成的假象。要交付一个模拟音响 Demo建议至少构建一次 release 包在真机上体验过后再确认有没有性能问题。release 构建需要注意三点确认签名配置完整否则打包产物无法安装到测试设备把调试用的日志输出清理掉或做成开关检查 resources 目录里的音频资源没有被裁剪。第一次构建时间会比较长耐心等待。构建完成后安装到真机你才会真正感受到这个项目在鸿蒙系统上的真实表现。6.3 从“模拟音响”继续走至少有五个方向值得做这个项目跑通以后下一步的扩展空间其实很大。可以给音响加一个真实的对话接口把识别文本送入大语言模型再生成语音回复体验感会立刻提升一个档次可以接入真实设备控制协议用音响面板控制卧室灯的开关这就是 IoT 项目的雏形可以把频谱动画升级为真实音频能量分析视觉和数据联动可以加蓝牙播放支持把手机音乐通过音响外放还可以做多设备联动让手机端和音响端共享同一个播放状态。每个方向都对应一类新的跨端技术挑战而这篇文章里建立的工程骨架都能继续复用。我在实际项目里反复体会最深的一点是React Native 在鸿蒙上做应用真正决定成败的不是语法而是对“JS 侧能力边界”和“原生侧能力边界”的清晰认知。什么东西放 JS 侧做状态、UI、交互逻辑什么东西必须交给原生侧音频、权限、后台任务想清楚这个问题开发过程会顺畅很多。即使你目前只是新手沿着“模拟交互 - 原生桥接 - 能力替换”这条路线走完两三遍也会慢慢形成自己的跨端开发直觉。这个模拟音响项目就是练这种直觉非常合适的起点。

相关新闻

日常聊天内容转化为短视频口播文案的结构化提示词指令

日常聊天内容转化为短视频口播文案的结构化提示词指令

口水话变口播文案指令角色定位(Role)背景能力(Background)核心技能(Skills)1. 核心信息提炼2. 情绪引发与操控3. 内容结构化4. 风格适应与创意表达5. 精简与强调表达约束条件(Constraints&#…

2026/10/18 13:24:58 阅读更多 →
AI分析报告串味问题解析:上下文污染与缓存复用机制及工程化防御

AI分析报告串味问题解析:上下文污染与缓存复用机制及工程化防御

1. 问题现场还原:一个让人后背发凉的“偷懒”现象先说结论:这不是模型变笨了,而是上下文污染加上缓存复用共同制造的假象。我最近在一个数据分析项目里就踩了这个坑——让 AI 对一份新导出的销售数据做趋势分析,结果它输出的结论里…

2026/10/18 13:23:58 阅读更多 →
Qt5 QFtp缺失解决方案:封装库实现FTP文件管理

Qt5 QFtp缺失解决方案:封装库实现FTP文件管理

简介:这份资源面向仍在使用Qt5、却需要继续调用FTP功能的C开发者,尤其是维护旧项目或受限于历史代码、无法立即迁移到QNetworkAccessManager的技术人员。它把Qt4时代的QFTP模块重新封装为可供Qt5链接的库,让登录、上传、下载、列目录等FTP操作…

2026/10/18 13:23:58 阅读更多 →

最新新闻

多动作并行异步DDPG:选矿浮选智能决策模型工程化实践

多动作并行异步DDPG:选矿浮选智能决策模型工程化实践

简介:本资源是一篇发表于《控制与决策》2022年第8期的学术论文PDF,面向自动化、智能优化与流程工业领域的研究生、科研人员及工程技术人员,聚焦选矿过程运行指标的动态决策难题。针对传统深度确定性策略梯度(DDPG)算法…

2026/10/18 14:09:21 阅读更多 →
UVM验证环境自动生成工具:一键生成testbench与组件代码

UVM验证环境自动生成工具:一键生成testbench与组件代码

简介:这是一款面向数字芯片验证工程师的UVM环境自动化构建工具,专为降低SystemVerilog验证平台搭建门槛而设计,尤其适合初/中级验证人员及需快速迭代验证场景的团队。资源包共78个文件,含14个核心UVM SystemVerilog源码&#xff0…

2026/10/18 14:09:21 阅读更多 →
AI 接进办公文档后,为什么还是会读错?从结构保真到结果复核的实现链路

AI 接进办公文档后,为什么还是会读错?从结构保真到结果复核的实现链路

办公 AI 的常见误差,往往从模型看到文档之前就开始了:表格中的列名丢了,批注混进正文了,脚注里的限制条件被截断了。等模型接到一段看似完整的文本,它可能已经失去了判断业务含义所需的关系。 因此,可靠的…

2026/10/18 14:09:21 阅读更多 →
分割标签怎样正确叠加?VTK 离散色表、透明背景与类别一致性

分割标签怎样正确叠加?VTK 离散色表、透明背景与类别一致性

分割模型输出了正确类别,界面上却颜色错乱、边缘冒出新颜色,或者背景遮住整幅原图。这些问题可能发生在可视化层,与模型推理精度无关。标签叠加需要同时维护类别、空间几何与颜色表达。本文从只有三种标签的合成体出发,建立可以直…

2026/10/18 14:09:21 阅读更多 →
舰载高频地波雷达MATLAB仿真:K分布杂波建模与CFAR检测全流程

舰载高频地波雷达MATLAB仿真:K分布杂波建模与CFAR检测全流程

简介:这份舰载高频地波雷达MATLAB仿真工程包,面向电子信息、雷达工程与信号处理方向的本科生和初级研究者,解决从杂波环境构建到目标检测验证的整套仿真需求,可直接用于课程设计、毕业设计或基础科研复现。压缩包共22个文件&#…

2026/10/18 14:09:21 阅读更多 →
Java AI应用开发实战:框架停更后的技术选型与工程化路径

Java AI应用开发实战:框架停更后的技术选型与工程化路径

1. 一个框架停更引发的技术选型焦虑前几天在一个技术交流群里,有位做Java后端的兄弟抛出一个问题:“Spring AI Alibaba是不是停更了?我看仓库好久没动静了,Java搞AI这块是不是没戏了?”群里瞬间热闹起来,有…

2026/10/18 14:08:20 阅读更多 →

日新闻

基于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/18 0:00:55 阅读更多 →

周新闻

基于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/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 阅读更多 →