解析 Tansformer 模型:理解 GPT-3、BERT 和 T5 背后的模型

原文链接:https://daleonai.com/transformers-explained
作者:Dale Markowitz (@Google Labs,领导生成式 Al 的宣传和教育)
发表时间:2021年5月6日
翻译:数据派 THU(译者:王可汗,校对:和中华),略有修改
中文翻译原地址:https://mp.weixin.qq.com/s/KfSW7ccYUAGp1AHWWF6c1w

你知道这句话吗,当你有一把锤子的时候,所有东西看起来都像钉子? 在机器学习中,我们似乎真的发现了一种神奇的锤子。实际上,在这个模型面前所有东西都是钉子,这就是Transformer模型。Transformer模型可以用来翻译文本、写诗、写文章,甚至生成计算机代码。事实上,我在daleonai.com上写的很多惊人的研究都是建立在Transformer基础之上,比如AlphaFold 2,它是一种从基因序列中预测蛋白质结构的模型,以及GPT-3、BERT、T5、Switch、Meena等功能强大的自然语言处理(NLP)模型。你可能会说,他们不仅仅是遇到了……呃,先往下说吧。

如果你想在机器学习,特别是自然语言处理方面与时俱进,你至少要对Transformer有一点了解。所以在这篇文章中,我们将讨论它们是什么,它们是如何工作的以及为什么它们如此有影响力。

Transformer是一种神经网络结构。简单地说,神经网络是分析图像、视频、音频和文本等复杂数据类型的一种非常有效的模型。针对不同类型的数据有专门优化过的的神经网络。例如,在分析图像时,我们通常会使用卷积神经网络。大体来说,它们模仿了人脑处理视觉信息的方式。

在这里插入图片描述

卷积神经网络,图片来自Renanar2,wikiccommons

大约从2012年开始,我们已经用CNN相当成功地解决了视觉问题,比如识别照片中的物体,识别人脸,手写数字识别。但在很长一段时间里,语言任务(翻译、文本摘要、文本生成、命名实体识别等)都没有较好的方法。这很不幸,因为语言是我们人类交流的主要方式。

在2017年推出Transformer之前,我们使用深度学习来理解文本的方法是使用一种称为循环神经网络(RNN)的模型,它看起来像这样:
在这里插入图片描述

循环神经网络,图片来自fdeloche,Wikimedia

假设你想把一个句子从英语翻译成法语。RNN将一个英语句子作为输入,一次处理一个单词,然后按顺序吐出对应的法语单词。这里的关键词是“顺序”。在语言中,单词的顺序很重要,你不能随意打乱它们。比如下面的句子:

“Jane went looking for trouble.(简到处找麻烦。)”意思与句子非常不同: “Trouble went looking for Jane” (麻烦到处找简。)

因此,任何能够理解语言的模型都必须捕捉词序,而循环神经网络是通过在一个序列中,一次处理一个单词来做到的。

但是RNN有问题。首先,他们很难处理冗长的文本序列,比如长段落或文章。当他们读到一段的结尾时,他们会忘记开头发生了什么。例如,基于RNN的翻译模型可能很难记住长段落主语的性别。

更糟糕的是,RNN很难训练。它们很容易受到所谓的消失/爆炸梯度问题的影响(有时候你只能重新开始训练并祈祷)。更有问题的是,因为RNN是按顺序处理单词的,所以很难并行化。这意味着你不能通过添加更多GPU来加快训练速度,这也意味着你不能用那么多数据来训练它们。

进入Transformer

这就是Transformer大显身手的地方。它们是谷歌和多伦多大学的研究人员在2017年开发的,最初设计用于翻译。但与循环神经网络不同,Transformer可以非常有效地并行化。这就意味着,只要有合适的硬件,你就可以训练出一些非常大的模型。

有多大呢?非常之巨大!

GPT-3是一种特别令人印象深刻的文本生成模型,它的写作能力几乎与人类相当,它是在45TB的文本数据上训练而成,包括几乎所有的公共网络数据。

所以,用一句话总结Transformer,一定是这样的: 当一个扩展性极佳的模型和一个巨大的数据集邂逅,结果可能会让你大吃一惊。

Transformer是如何工作的?

在这里插入图片描述

Transformer,图片出自原稿:https://arxiv.org/abs/1706.03762

虽然原稿中的图表有点吓人,但Transformer背后的创新可以归结为三个主要概念:

  1. 位置编码(Positional Encodings)

  2. 注意力机制(attention)

  3. 自注意力机制(Self-Attention)

位置编码

让我们从第一个开始,位置编码。假设我们要把文本从英语翻译成法语。回忆RNN,即之前的翻译方法,是通过按顺序处理单词来理解单词顺序。但这也是让它们难以并行化的原因。

Transformer通过一种称为位置编码的创新方法绕过了这一障碍。其思路是将输入序列中的所有单词——在本例中是一个英语句子,在每个单词后面加上一个数字,表明它的顺序。所以,你为你的网络提供如下序列:

<span>[("Dale", 1), ("says", 2), ("hello", 3), ("world", 4)]</span>

从概念上讲,你可以把理解语序的重担从神经网络的结构转移到数据本身。

起初,在对Transformer进行任何数据训练之前,它并不知道如何解释这些位置编码。但是随着这个模型看到越来越多的句子和它们的编码,它学会了如何有效地使用它们。

我在这里做了一点过度简化——最初的作者使用正弦函数来进行位置编码,而不是简单的整数1、2、3、4——但要点是相同的。将语序存储为数据,而不是靠网络结构,这样你的神经网络就更容易训练了。

注意力机制

Transformer的下一个重要部分叫做注意力机制。

嗨!

注意力是一种神经网络结构,在机器学习中随处可见。事实上,2017年介绍Transformer的那篇论文标题并不是《我们向你介绍Transformer》(We Present You the Transformer)。相反,它被称为《注意力就是你需要的一切》(Attention is All You Need)。

Attention is All You Need
https://arxiv.org/pdf/1706.03762.pdf

在2015年文本翻译中引入了注意力机制。要理解它,请参考原文中的例句:

关于欧洲经济区的协定是1992年8月签署的。(The agreement on the European Economic Area was signed in August 1992.)

现在想象一下把这句话翻译成法语:

L’accord sur la zone économique européenne a été signé en août 1992.

对于翻译这个句子,一个不好的方法是对照着英语句子中的每个单词,然后试着把法语中的对应单词一次翻译出来。出于几个原因,这并不奏效,但其中一个原因是,法语翻译中的一些词颠倒过来了:英语中是“欧洲经济区”(European Economic Area),法语中是“la zone économique européenne”。此外,法语是一种有阴阳性词汇的语言。形容词“économique”和“européenne”必须是阴性形式,以匹配阴性宾语“la zone”。

注意力是一种机制,它允许文本模型在决定如何翻译输出句子中的单词时“查看”原始句子中的每一个单词。下图是最初的注意力论文中的一个很好的可视化:
在这里插入图片描述

图片来自论文,“Neural Machine Translation by joint Learning to Align and Translate(2015)”,https://arxiv.org/abs/1409.0473

这是一种热力图,显示出当模型输出法语句子中的每个单词时,它“注意”的位置。如你所料,当模型输出“européenne”时,它会重点关注输入词“European”和“Economic”。

模型如何知道在每个时间步中应该“注意”哪些单词呢? 这就是从训练数据中学到的东西。通过观察成千上万的法语和英语句子,该模型学会了什么类型的单词是相互依赖的。学会了如何遵守词性、复数和其他语法规则。

自2015年被发现以来,注意力机制一直是自然语言处理一个非常有用的工具,但在其原始形式中,它是与循环神经网络一起使用的。因此,2017年《Transformer》论文的创新之处在于,在一定程度上完全抛弃了RNN。这就是为什么2017年的论文被称为《注意力就是你需要的一切》。

自注意力机制

Transformer的最后一点(也许是最具影响力的一点)是对注意力的变式,即自注意力。

我们刚才谈到的那种普通的注意力有助于在英语和法语句子中匹配单词,这对翻译很重要。但是,如果你不是试图翻译单词,而是建立一个能够理解语言潜在含义和模式的模型——这种模型可以用于完成任何数量的语言任务呢?

一般来说,让神经网络强大的是,它们通常会自动建立起训练数据有意义的内部表示。例如,当你检查视觉神经网络的不同层时,你会发现不同神经元负责“识别”不同的模式,比如边缘、形状,甚至像眼睛和嘴巴这样的高级结构。在文本数据上训练的模型可能自动学习了词性、语法规则以及单词是否同义。

神经网络学习语言的内部表征越好,它在任何语言任务中的表现就越好。事实证明,如果注意力机制应用于输入文本本身,它同样是一种非常有效的方式。

例如,下面这两个句子:

“服务员,能给我账单吗?”( “Server, can I have the check?”)

“我好像让服务器崩溃了”(“Looks like I just crashed the server.”)

在这里,单词“server”意味着两种非常不同的意思,我们人类可以通过查看周围的单词轻松地消除歧义。自注意力使神经网络能够在单词周围的语境中理解单词。因此,当模型处理第一句话中的“服务员”(“Server”)时,它可能是“注意”单词“账单”(“check),这有助于消除该单词代表不同意思——服务员和服务器之间的歧义。

在第二个句子中,模型可能会注意单词“崩溃”(“crash”),以确定这个“服务器”(“server”)指的是一台机器。

自注意力帮助神经网络消除单词歧义,做词性标注,命名实体识别,学习语义角色等等。

我们在这里高度概括和总结了一下Transformer。

如果你想要更深入的技术解释,我强烈推荐你去看看Jay Alammar的博客文章The Illustrated Transformer。

Transformer能做什么?

最流行的基于Transformer的模型之一BERT,它是“来自Transformer的双向编码器表示”( “Bidirectional Encoder Representations from Transformers”)的缩写。它是谷歌的研究人员在我2018年加入公司前后引入的,很快就进入了几乎所有的NLP项目,包括谷歌搜索。

BERT不仅指模型体系结构,还指经过训练的模型本身,您可以在这里免费下载和使用。

这里
https://github.com/google-research/bert

谷歌的研究人员在一个庞大的文本语料库上对它进行了训练,它已经成为一种用于自然语言处理的通用模型。它可以扩展来解决一系列不同的任务,比如:

——文本摘要

——问答

——分类

——命名实体识别

——文本相似度

——攻击性信息/脏话检测

——理解用户的查询

——等等

BERT证明,您可以在未标记的数据上建立非常好的语言模型,比如从Wikipedia和Reddit中提取的文本,并且这些大型的“基础”模型可以与特定领域的数据相适应,适用于许多不同的用例。

最近,OpenAI创建的模型GPT-3生成真实文本的能力让人们大吃一惊。谷歌搜索去年推出的Meena是一个基于变形金刚的聊天机器人(akhem,对话代理),几乎可以就任何话题进行引人入胜的对话(其作者曾花了20分钟与Meena争论作为人类意味着什么)。

Tansformer也在自然语言处理之外掀起了一股浪潮,例如作曲、根据文本描述生成图像以及预测蛋白质结构。

如何使用Transformer?

现在你已经被Transformer的力量所吸引,你可能想知道如何在自己的应用中使用它们。没问题。

你可以从TensorFlow Hub下载常见的基于Transformer的模型,比如BERT。关于代码教程,请查看我写的关于构建基于语义语言应用程序的文章。

文章
https://daleonai.com/semantic-ml

但是如果你想要真正的跟随潮流,并且你写Python,我强烈推荐由HuggingFace公司维护的Transformer库。该平台允许您以一种非常开发人员友好的方式训练和使用当今大多数流行的NLP模型,如BERT、Roberta、T5、GPT-2。

相关推荐

RN 鸿蒙安全三方库落地:react-native-digital-shield,密钥不出 TEE,AES-GCM/RSA-JWT 跨端身份打通

本文基于 RNOH 0.84 与 HarmonyOS API 26,自研数字盾库 react-native-digital-shield,把 ArkTS 专属的 HUKS、asset 能力经TurboModule 桥接给 JS:提供 AES-256-GCM 加解密与密钥托管、敏感资产存储、RSA-2048 签发校验 RS256 JWT,并以 JWK 公钥和 HS256 共享密钥实现跨端身份互认,密钥明文始终不出 TEE。文中还复盘 TurboModule 双侧注册、GCM 需拆分 16 字节

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 16

Flutter 修复鸿蒙 WebView Cookie 同名键丢失:离线回读与开发助手复核实录

修复了 Flutter 三方库 webview_cookie_manager 鸿蒙端因同名键误判导致的 Cookie 名称丢失问题,确保业务键如 path、domain 等在回读时正确保留。修复后,模拟器与真机测试均实现四组数据完整恢复,值中多等号也保持不变。补丁已提交至 CPF-Flutter 官方仓库,提升插件在鸿蒙平台的可靠性。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 29

Flutter 鸿蒙启动图撤销后编译失败:用 DevEco Code 复核三方库修复

本文针对 Flutter 鸿蒙启动图撤销时导致编译失败的问题,修复了 flutter_native_splash_ohos 库在移除启动图时误删仍被引用资源的缺陷。通过保留1×1透明图片并透传自定义模块路径,确保资源引用完整性,使工程可正常构建。修复已提交至官方仓库,支持幂等操作与多场景验证,提升开发体验。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 41

Flutter 接入鸿蒙 ArkWeb 预初始化:帮助页首开时机与主线程成本实测

为解决Flutter鸿蒙版webview_flutter无法在无视图状态下提前初始化引擎的问题,我在其原生实现中新增可选静态入口initializeWebEngine()。实测表明,在2秒预热窗口下,页面首屏渲染(FCP)耗时从中位数1791ms降至1019ms,显著提升首次打开体验;而在零延迟场景下,总路径耗时略有上升,需权衡预热时机与用户等待成本。该补丁已提交至CPF-Flutter官方仓库,支持社区协作优化。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 38

Flutter 优化鸿蒙 printing_ohos 多页 PDF 光栅化:原生资源释放与缓冲复用

针对鸿蒙端 printing_ohos 插件存在的页码映射错误与高内存占用问题,本文提出并实现三项优化:修正页码索引映射、引入原生资源分层释放机制、复用像素缓冲区。修复后,第三页显示正确,内存增长显著降低——在模拟器上PSS增量中位数下降65.8%,真机测试下降64.4%。完整补丁已提交至官方仓库,支持社区协作与问题反馈。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 34

React Native 鸿蒙权限审计实战:让每一项权限都有人认领

本文介绍一款纯 JS 编写的 React Native 鸿蒙权限审计工具,解决权限声明与使用对账难、最小权限集计算矛盾、审核必填字段缺失三大痛点。通过 module.json5 声明、使用台账与源码扫描三路输入对账,自动识别未使用权限、补全 reason/usedScene、生成可粘贴的最小清单,并支持 CI 卡控与风险分评估。工具内核独立,离线运行,兼顾准确性与安全性,助力应用高效通过审核。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 12

Cordova 鸿蒙 WebView 安全实战:能改的运行时拦,改不了的构建期审

本文通过 cordova-plugin-harmony-webguard 插件,解决 Cordova/HarmonyOS 应用中导航安全、引擎不可修改配置、JS 门面静默降级三大难题。基于运行时策略闸门(onPageStart + JS 预检)与构建期审计 CLI(扫描 MainPage.ets、config.xml 等),实现协议拦截、白名单校验、高危配置阻断,支持 CI 失败退出,将安全基线可视化、可测化,真正落地“能改的运行时拦,改不了的构建期审”。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 27

Flutter 鸿蒙供应链审计实战:让高危依赖卡在 CI 门口

本文介绍了一个基于纯 Dart CLI 与 Flutter Dashboard 的依赖审计工具,解决鸿蒙工程中三套锁文件(pubspec.lock、oh-package-lock.json5、package-lock.json)统一读取、离线快照与 OSV 在线情报选择、以及高危依赖通过退出码卡在 CI 的问题。工具以锁文件为事实依据,支持离线快照(4 条真实 GHSA)与在线查询,输出 SBOM(CycloneDX 1.5)、Markdown/JSON 报告,并通过退出码实现 CI 阻断,性能秒级

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 152

React Native 鸿蒙端侧 OCR 实战:TurboModule 与纯 TS 引擎的逐字契约

本文以鸿蒙真机上的 React Native 0.84 工程为例,详解三大难题:通过 TurboModule 接入 HarmonyOS Core Vision Kit 实现端侧离线 OCR;规避 Metro 预置头导致的 require 不存在问题;实现 npm 包与 HAR 双形态交付。项目采用 codegen 生成 ArkTS 接口,结合纯 TS 回退引擎,确保跨引擎逐字符一致,并通过 autolinking 支持无缝集成。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 92

Flutter 鸿蒙端侧 OCR 实战:让文字识别留在设备上

本文通过一个运行在鸿蒙真机上的 Flutter 插件工程,系统解决了三大核心问题:如何统一内存、文件、相册三类输入的识别链路;如何实现与 KMP 版本的 JSON 契约逐字节对齐;以及在系统不提供置信度时如何诚实处理。基于 HarmonyOS Core Vision Kit,插件实现端侧离线 OCR,全程无网络、无权限、无密钥,支持真实小票与截图识别,性能稳定(312~507ms),并通过 35 项单元测试与真机集成验证。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 149

跨端 RN 鸿蒙碰一碰分享库实战:基于 Share Kit 封装 react-native-ohos-knock-share,实现卡片、文件一碰传

本文介绍基于React Native的鸿蒙碰一碰分享库,解决RN开发者在鸿蒙生态中无法便捷使用Share Kit碰一碰功能的痛点。通过封装NFC/星闪触碰、3秒发送窗口、沙箱文件URI转换等核心逻辑,实现跨设备快速传递链接、文件、图片等内容。支持手机、平板、PC多端适配,提供回环演示与真机实测验证,显著降低接入门槛,提升跨端协作效率。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 188

React Native 鸿蒙实战:给应用接入小艺语音指令,跑通 Skill 声明到操作闭环

本文介绍如何在 React Native 鸿蒙(RNOH)工程中实现小艺技能闭环,通过开源库 react-native-ohos-ai-agent 封装技能声明、语音指令接收、端侧执行与结果回传全流程。针对三方应用权限限制,精准定位可操作边界,实现“被唤起→执行→反馈”链路贯通。结合五张真机截图验证:技能注册、指令匹配、意图上报、智能体调起及对话层弹出等关键节点均成功,完整打通语音交互闭环,助力应用无需入口即可被用户“叫”到。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 169

Flutter 鸿蒙实现精准碰一碰分享:tap_share_ohos 三方库打通真机传文件与传卡片

本文针对Flutter在鸿蒙系统上“碰一碰”分享功能缺失的痛点,基于DevEco Studio 26.0、HarmonyOS 7.0 API 26与Flutter 3.41.9实测环境,提出并实现开源库tap_share_ohos。该库封装NFC、Share Kit、权限管理及分布式能力,通过Dart门面层统一接口,利用MethodChannel与BasicMessageChannel对接原生ArkTS逻辑,实现文件与卡片的碰一碰分享。真机测试显示,可无缝调起系统分享面板,支持华为分享接力

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 170

Flutter 鸿蒙实战:用三方库接入小艺语音指令与智能体,跑通 Skill 声明到操作闭环

本文基于 flutter_ohos_ai_agent 三方库,实现 Flutter 应用一键调起鸿蒙小艺智能体。针对跨端框架对接鸿蒙 AI 能力的碎片化、环境差异等痛点,通过插件封装系统 Kit 能力,提供统一 Dart API。实测显示,模拟器与真机均支持文本/语音指令闭环,真机可完整调起小艺面板并回传事件。核心原理为:利用 ArkUI 承载页桥接 FunctionComponent,通过 MethodChannel 与 EventChannel 实现 Flutter 与原生能力双向通信,完成从语音识别到

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 153

RNOH 原生内存泄漏定位与治理:借助 LeakyGuard 实现图片解码降采样、LRU 字节缓存、资源生命周期管控,长列表图片页面峰值内存优化

本文面向 RNOH 0.84 长列表图片场景,剖析滑动数分钟后进程被系统杀掉的根因:原图解码尺寸失控、缓存按条数限流、PixelMap未显式 release。基于自研LeakyGuar,TurboModule 库,给出 desiredSize 真降采样、字节预算 LRU 缓存(逐出必 release)、资源登记与快照 diff、卸载即释放 Hook 的闭环方案,实测单图内存降 98.6%,24 图峰值由 1098.6MB 降至15.8MB。并总结双侧注册、ArkTS 语法差异、vp 转像

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 308

Flutter 鸿蒙空间音频实战:让音乐播放器的声音“长出方位感“

本文通过一个真实运行的 Flutter 工程,系统解析了在鸿蒙系统上实现空间音频的三大核心问题:基于双耳时间差(ITD)、声级差(ILD)和频谱整形的方位感算法;耳机切换与音频焦点管理;以及播放器与音效的集成。项目使用自研插件 spatial_audio,结合原生 HarmonyOS 接口,实现了跨设备的空间音频体验,支持普通耳机,无需硬件依赖,并提供实时参数反馈与系统状态监听。附带完整代码仓库与实测效果展示,为 Flutter on HarmonyOS 的音频开发提供了可复用的技术方案。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 291

Flutter 鸿蒙 HiTrace 请求归因:图片压缩等待时,主线程在做什么

为定位鸿蒙平台图片压缩性能瓶颈,我在 flutter_native_image 插件中新增可选的 HiTrace 阶段追踪功能,支持按请求开启解码、缩放、编码与资源释放阶段的耗时分析。通过对比模拟器与真机(华为畅享 100 Pro Max)数据,精准识别出耗时主要集中在解码与编码阶段,显著提升诊断效率。相关代码已提交至官方仓库,助力开发者快速定位性能问题。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 1万+

Flutter 适配鸿蒙折叠屏铰链角度按需订阅:支架调节页用完即停与重入实测

本文介绍对 Flutter 三方库 dual_screen 的优化:针对支架调节页等短时观察场景,保留原有缓存入口的同时,新增按需订阅机制。通过按需启停监听,实现页面退出后停止原生回调,避免无效数据更新。实测显示,无消费者时原生回调从3条降至0条,重进页面则等待新事件,更符合临时工具页的使用逻辑。完整代码已开源,支持鸿蒙折叠屏角度动态感知,适用于需精准控制生命周期的折叠屏应用开发。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 1万+

Flutter 适配鸿蒙手表屏幕形状:让计时卡片按圆屏和方屏布局

本文基于 wear_plus 1.2.4 版本,为鸿蒙系统补全屏幕形状查询功能,使 WatchShape 能正确返回 round 等形状信息。通过在原 Dart 接口不变的前提下,新增鸿蒙平台处理器,实现与 Android 一致的异步查询逻辑。对照实验验证:适配后页面可从“查询未接入”变为“圆屏已确认”,日志成功接收系统回执,布局行为保持一致。完整代码开源至 oh-flutter/wear_plus,支持 Flutter 鸿蒙穿戴设备开发。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 1万+

Flutter 优化鸿蒙剪贴板大图复制卡顿:从主线程同步阻塞到异步文件描述符直解

针对鸿蒙系统下 flutter_image_clipboard 插件复制高清图片时阻塞主线程的问题,本文提出三项优化:异步文件描述符直解、异步剪贴板写入及原生资源逆序释放。实测显示,模拟器事件循环最大间隔从300.32ms降至54.36ms(降幅81.9%),真机上更从133.20ms降至11.20ms(降幅91.59%),显著提升页面响应性。完整代码已开源,支持直接使用与社区交流。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 1万+

Flutter 三方库 petalmaps_ohos 的 OpenHarmony 适配实战(0 → 1 全记录)

本文详细记录了从零构建 Flutter 三方库 petalmaps_ohos 并适配 OpenHarmony/HarmonyOS 平台的全过程,涵盖项目初始化、原生实现(基于 ArkTS 和 MethodCallHandler)、插件注册、功能验证及升级至 HarmonyOS SDK 26 的关键步骤。重点解析了为何需实现 AbilityAware 获取 UIAbilityContext 以确保地图调起成功,并通过分层架构、枚举封装与兼容性设计,实现功能完整、易用且低维护成本的“调起系”地图插件,

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 59

Flutter 三方库 holding 的 OpenHarmony 适配实战:从 0 到 1 开发一个鸿蒙感知插件

本文详述了从零实现开源 Flutter 插件 holding 并适配 OpenHarmony/HarmonyOS 的全过程。基于鸿蒙专属 MultimodalAwarenessKit,实现握持手与操作手状态感知,覆盖事件流订阅、状态查询及 API 26 新增接口,确保功能一致、性能高效、接口稳定。通过 Dart 层封装、ArkTS 原生桥接、真机验证与单元测试,完成插件工程化落地,并发布至 pub.dev,为同类系统能力插件的鸿蒙化提供可复用的技术路径。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 28

Flutter 三方库 gesturesshare 从 0 到 1:鸿蒙隔空传送分享插件的开发、升级与发布实战

本文详述了 Flutter for OpenHarmony 三方库 gesturesshare 从零开发到发布全过程:基于 HarmonyOS 隔空传送能力,实现跨设备图片与 App Linking 一键分享。涵盖双端代码设计、API 26 升级、真机验证及 Pub 发布流程,提供 Dart/ArkTS 对照与踩坑复盘。项目填补 Flutter 生态空白,推动鸿蒙多设备交互能力普及,助力开发者快速接入系统级功能。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 28

Qt 鸿蒙沉浸光感实战:让玻璃的每个像素自己发光

本文通过一个 QML 模块与 Qt for OpenHarmony 构建实践,完整解答了三个核心问题:如何用 81 行 GLSL 实现无图片依赖的动态玻璃材质(含光核漂移、视差、SDF 圆角与颗粒);如何在 Qt Quick 中通过 C++ 控制器实现弹层锚定与翻转;以及如何将 Qt 应用交叉编译并以 HAR 形式部署至鸿蒙系统。项目基于 Qt 5.12.12,利用 ShaderEffect 实现纯渲染级视觉效果,兼顾性能与跨平台兼容性,提供可复用的开源方案。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 23

开源鸿蒙平台 KMP_CMP 三方库「端侧语音转文字」适配全流程

本项目实现KMP/CMP在OpenHarmony鸿蒙平台的语音转文字(TTS)完整链路适配,通过Kotlin/Native共享模型、C ABI/N-API桥接与ArkTS交互,解决权限、音频格式、生命周期及跨平台契约等难题。支持中文、英文、日文多语言识别,提供统一结果模型与JSON序列化,实测于华为Mate 80 Pro Max模拟器,验证了JVM测试、Native动态库、HAP签名部署及真机识别全流程。项目结构清晰,分六阶段推进,确保代码复用与平台无关性,为KMP在鸿蒙生态落地提供可复用的技术范式。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 30

开源鸿蒙平台 KMP_CMP 三方库「端侧OCR」新特性适配

本项目实现Kotlin Multiplatform(KMP)在OpenHarmony平台的端侧OCR适配,基于HarmonyOS 7.0 SDK与Compose Multiplatform 1.9.2,成功打通JVM、Kotlin/Native与ArkTS间的数据交互。通过C ABI/N-API桥接层,实现KMP模型与Core Vision Kit识别结果的跨语言共享,支持中、英、日、韩四语识别。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 13

开源鸿蒙平台 KMP/CMP 三方库「智感握姿」新特性

本项目实现鸿蒙KMP/CMP平台下智感握姿能力的跨端适配,基于Kotlin Multiplatform构建共享状态模型,通过C ABI与ArkTS桥接,支持左手、右手、双手等五种握持状态的稳定传递。项目打通ohosArm64目标、Native动态库构建与DevEco Studio集成链路,提供统一API与真机验证示例,确保状态模型、事件序列与生命周期在多端一致。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 19

Electron 鸿蒙沉浸光感实战:把玻璃交给操作系统去发光

本文通过一个 Electron 库与 HarmonyOS 三方库,系统解决三大核心问题:跨平台材质路径对齐(macOS vibrancy、Windows acrylic、鸿蒙 backgroundBlurStyle)、菜单子窗口精准定位(坐标转换与工作区适配)、以及无脚本菜单文档的安全事件回传(自定义 URL scheme 与焦点管理)。基于 CPF-Electron 鸿蒙化分支,实现桌面级玻璃效果——材质由操作系统合成器采样,网页仅渲染薄色层与光斑,确保视觉一致性与性能优化。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 21

Flutter 修复 flutter_secure_storage 鸿蒙入口路由与前缀隔离:让多账号登录凭证在手机上独立读写与清理

本文针对 flutter_secure_storage 在鸿蒙平台的适配问题,修复了主包缺失 TargetPlatform.ohos 路由导致的 unsupported_platform 错误,并统一鸿蒙子包多账号前缀的读写与清理范围,解决键值覆盖、前缀错用及批量操作匹配过宽等问题。修复后,业务层可继续使用统一接口实现跨账号安全存储,保障数据隔离性。完整代码已开源至 abaoge/flutter_secure_storage。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 1万+

Cordova 鸿蒙沉浸光感实战:让弹层玻璃“喝到“背景的光

本文通过一个 HarmonyOS 模拟器上的 Cordova 项目,详解了在 WebView 中实现“玻璃拟态”效果的三大核心问题:利用 backdrop-filter 实现背景实时模糊与提亮,构建四层结构(采样、渐变底、光场、噪点)模拟真实玻璃质感;通过锚点定位与动态布局实现弹层贴边生长;并集成焦点管理、系统返回键及 inert 属性,确保交互礼仪完整。插件为纯 JS 无原生依赖,基于 ArkWeb 内核,兼顾性能与真实背景采样,适用于菜单、浮层等场景。

白天写代码,晚上追AI大模型,偶尔搞点八卦 开源动态|技术干货|实习机会|生态活动 我负责分享,你负责变强 28
上一篇: 基于大语言模型的 AI Agents:Part3
下一篇: 如何写出高质量的Prompt
AtomGit 代码君
AtomGit 代码君 企业官方账号 企业官方账号
博客等级 码龄6年 2万+粉丝 856原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值