移动端AI部署实战:基于TFLite与QNN构建高性能异构推理引擎
上周在调试一个安卓端的实时目标检测项目时我遇到了一个典型的性能瓶颈模型推理速度跟不上摄像头帧率导致画面卡顿用户体验直线下降。当时团队内部讨论的焦点自然落在了如何选择更高效的推理后端上。TFLite是安卓生态的“原住民”部署简单但纯CPU推理在复杂模型上总显得力不从心而高通骁龙芯片内置的Hexagon DSP通过Qualcomm Neural Network (QNN) SDK理论上能提供数倍于CPU的AI算力但它的开发门槛和“黑盒”特性又让人望而却步。就在这个当口我注意到了“纯Native实现Yolo26 QNNTFLITE”这个组合。这听起来像是一个技术缝合怪——把最新的YOLOv26模型、高通的专用加速库QNN和谷歌的通用框架TFLite全部用C Native层整合起来。这绝不仅仅是一个“把模型跑起来”的Demo它指向了一个更核心的工程问题如何在移动端复杂且碎片化的硬件环境中构建一个既能利用专用硬件峰值性能又能在硬件不支持时优雅降级到通用方案的、稳定可控的AI推理管线。很多人一看到“Native”、“QNN”就觉得是底层黑魔法只适合芯片厂商或框架开发者。但我的实际体验是当你需要把AI能力真正“产品化”而不仅仅是“演示化”时深入Native层去理解并整合这些后端是从“玩具”走向“工具”的必经之路。这篇文章我就结合对相关技术的梳理和实践思考拆解一下这个技术方案背后的逻辑、价值以及如果你想尝试应该从哪里开始又需要注意哪些深坑。1. 为什么“Native 多后端”是移动端AI部署的必然选择在安卓上跑AI模型开发者首先想到的可能是Google官方推荐的ML Kit或者直接用TFLite的Java/Kotlin API。这些方案上手快但当你对性能、功耗、尤其是不同机型上的表现一致性有要求时就会遇到天花板。1.1 移动端算力的异构性与碎片化困境今天的安卓设备其AI算力来源非常复杂CPU (ARM Cortex-A/X系列)通用性强但能效比低持续高负载推理会导致发热降频。GPU (Adreno, Mali等)适合并行计算但驱动优化程度不一功耗也高并非所有AI算子都得到良好支持。NPU/DSP (如高通Hexagon, 联发科APU, 华为达芬奇)为AI计算量身定制能效比极高但各家接口、能力、支持的操作集Opset完全不同是典型的“碎片化”重灾区。你的应用如果只依赖CPU在低端机上会卡顿如果只依赖某家NPU就等于放弃了其他品牌的海量用户。一个成熟的移动端AI应用其推理引擎必须具备“自适应”能力。1.2 TFLite的角色不是终点而是“管理器”和“保底”TFLite在这里扮演了一个关键角色。它不仅仅是一个推理框架更是一个后端管理器Delegate。它的核心价值在于统一的模型格式.tflite将训练好的模型如PyTorch、TensorFlow导出的YOLOv26转换为一个标准的、轻量化的中间表示。可插拔的后端架构通过Delegate机制TFLite Runtime可以将计算任务分发给不同的硬件后端。NNAPI Delegate调用安卓系统级的NNAPI由系统决定使用CPU、GPU还是NPU。优点是通用缺点是系统版本和厂商实现差异大行为不可控。GPU Delegate直接使用OpenCL或OpenGL ES进行GPU加速。Hexagon Delegate这就是通往高通QNN的桥梁。它允许TFLite将计算图的一部分或全部委托给高通的Hexagon DSP执行。可靠的CPU回退当专用后端初始化失败、不支持某些算子或出现错误时TFLite可以自动或手动配置回退到纯CPU执行保证了功能的基本可用性。所以“TFLite QNN”的本质是让TFLite这个“通用管家”去调度QNN这个“骁龙专属高手”来干活。而NativeC实现则是为了获得最高效、最直接的控制权。1.3 为何一定要用C Native层性能零损耗Java/Kotlin通过JNI调用Native代码虽有开销但对于密集的AI推理循环如逐帧处理将整个循环放在Native侧可以避免JNI的反复跨界调用整体性能更高。直接的内存控制AI推理涉及大量张量数据搬运。在Native层你可以精细控制内存的分配、复用内存池直接处理摄像头传来的YUV或RGB数据避免在Java堆和Native堆之间不必要的拷贝。更稳定的生命周期管理将模型加载、推理会话等重型资源放在Native层生命周期与你的C对象绑定比受安卓GC影响的Java对象更可控。代码复用一套C核心推理代码可以相对容易地通过不同的JNI接口或跨平台框架如Flutter的FFI服务于安卓、iOS甚至桌面端。因此这个技术栈的选择反映的是一个从“应用层调用AI”到“系统层整合AI”的思维转变。目标不是跑通一个Demo而是构建一个高性能、可适配、易维护的推理引擎核心。2. 拆解技术栈YOLOv26、TFLite与QNN如何协同工作理解了为什么需要这个组合我们再看看它们具体是如何拼接在一起的。整个过程可以看作一个精密的流水线。2.1 起点YOLOv26模型的训练与导出YOLOv26作为YOLO系列的最新演进可能在精度、速度或结构上有新的改进。但无论模型如何变化部署的第一步都是将其“冻结”并转换为部署友好的格式。训练框架通常在PyTorch或TensorFlow中完成训练得到.pt或.pb文件。模型转换使用tf.lite.TFLiteConverter针对TensorFlow模型或torch.onnx.export配合onnx-tf再转换等工具链将模型转换为.tflite格式。这是最关键也最容易出错的一步。算子支持度必须确保YOLOv26中使用的所有算子尤其是激活函数、特殊卷积、后处理NMS等都被TFLite和QNN支持。不支持的算子会导致整个图无法在QNN上运行或被迫拆分成多子图影响性能。量化为了极致性能通常会采用INT8量化。这需要在转换时进行量化感知训练QAT或训练后动态范围量化Post-Training Quantization。QNN对INT8有非常好的支持能极大发挥DSP效能。2.2 枢纽TFLite Interpreter与Hexagon Delegate的配置在C Native代码中我们并不直接调用QNN而是配置TFLite。// 伪代码示例展示核心逻辑 #include “tensorflow/lite/interpreter.h“; #include “tensorflow/lite/model.h“; #include “tensorflow/lite/delegates/hexagon/hexagon_delegate.h“; // 1. 加载TFLite模型 std::unique_ptrtflite::FlatBufferModel model tflite::FlatBufferModel::BuildFromFile(model_path); // 2. 创建解释器 tflite::ops::builtin::BuiltinOpResolver resolver; std::unique_ptrtflite::Interpreter interpreter; tflite::InterpreterBuilder(*model, resolver)(interpreter); // 3. 尝试创建并应用Hexagon Delegate TfLiteHexagonDelegateOptions hexagon_options TfLiteHexagonDelegateOptionsDefault(); // 可以在这里设置一些选项如是否启用调试 std::unique_ptrTfLiteDelegate, decltype(TfLiteHexagonDelegateDelete) hexagon_delegate( TfLiteHexagonDelegateCreate(hexagon_options), TfLiteHexagonDelegateDelete); // 4. 应用Delegate。如果失败interpreter-ModifyGraphWithDelegate会返回错误。 if (interpreter-ModifyGraphWithDelegate(hexagon_delegate.get()) ! kTfLiteOk) { // Delegate应用失败降级到CPU执行 LOG(WARNING) “Hexagon delegate failed to apply, falling back to CPU.“; // 此时hexagon_delegate会被释放interpreter将使用CPU内核 } else { // Delegate应用成功需要确保hexagon_delegate的生命周期长于interpreter LOG(INFO) “Hexagon delegate applied successfully.“; } // 5. 分配张量内存 interpreter-AllocateTensors(); // 6. 准备输入数据例如将OpenCV Mat数据拷贝到输入张量 float* input interpreter-typed_input_tensorfloat(0); // ... 数据填充逻辑 ... // 7. 执行推理 if (interpreter-Invoke() ! kTfLiteOk) { LOG(ERROR) “Inference failed!“; // 处理错误可以考虑切换到纯CPU模式重试 } // 8. 获取输出 float* output interpreter-typed_output_tensorfloat(0); // ... 后处理逻辑 ...关键点在于第3、4步我们尝试创建Hexagon Delegate并应用到解释器。这个过程可能会因为以下原因失败设备不支持Hexagon DSP或驱动版本过低。.tflite模型中包含QNN不支持的算子。QNN SDK的共享库.so文件未正确打包到APK中或加载失败。一个健壮的引擎必须处理Delegate失败的情况并优雅地回退到CPU模式。这就是“QNNTFLITE”中“”号的意义——它不是保证成功而是提供了一种性能优先的尝试机制。2.3 加速核心QNN SDK在背后做了什么当Hexagon Delegate成功应用后TFLite会将计算图传递给QNN SDK。QNN SDK会执行以下操作图编译与优化将TFLite计算图编译成Hexagon DSP可执行的高效指令序列并进行内存布局优化、算子融合等。在DSP上执行编译后的代码在Hexagon DSP上运行与CPU、GPU异步并行显著降低主CPU负载和整体功耗。内存管理在DSP的专用内存VTCM和系统内存之间高效搬运数据。对于开发者来说这个过程是透明的。但你需要意识到首次初始化Delegate和加载模型时会有一个明显的编译延迟这是因为QNN在后台进行编译优化。优化后的缓存通常会保存下来下次启动就快了。3. 从Demo到产品构建健壮推理引擎的实操框架把代码跑通只是第一步。要让这个引擎能在千万台不同的安卓设备上稳定工作需要一套系统性的工程方法。我将其总结为“三步构建法”。3.1 第一步环境搭建与最小可行性验证目标在开发机上确认整个工具链是通的。环境准备Android NDK用于编译C代码。确保版本与TFLite版本兼容。TFLite C API通常通过下载预编译库或从源码编译获取。QNN SDK从高通开发者网站下载这是最关键的且需要注册账号。SDK包含头文件、库文件以及工具链。模型转换工具准备好你的YOLOv26模型并找到正确的转换路径PyTorch - ONNX - TFLite 或 TensorFlow - TFLite。CMake配置正确链接上述所有库。重点注意QNN SDK的路径和所需的特定系统库如libhexagon_nn_skel.so等。编写最小测试创建一个最简单的C可执行程序非安卓环境加载.tflite模型创建Hexagon Delegate进行单次推理。这个阶段的目的不是性能而是验证“模型能否被TFLite正确加载”以及“QNN Delegate能否被创建”。处理失败路径在测试程序中必须编写完整的错误处理逻辑捕获Delegate创建失败、模型加载失败、推理失败等异常并记录清晰的日志。3.2 第二步集成到安卓项目与性能调优目标在真机上运行并开始关注性能指标。JNI封装将你的C推理引擎类通过JNI暴露几个简单的Java方法如init(String modelPath),float[] processImage(byte[] imageData),release()。APK打包QNN库QNN SDK提供的.so库需要打包到APK的特定ABI目录下armeabi-v7a,arm64-v8a。使用android.ndk在CMakeLists.txt中预编译这些库或直接拷贝。基准测试延迟从输入数据准备好到获取输出结果的时间。吞吐量每秒能处理的帧数FPS。功耗与发热使用电池统计工具或感知设备温度。对比测试在相同设备上分别测试纯CPU、GPU Delegate和Hexagon Delegate的性能。你会看到QNN在能效比上的显著优势。参数调优输入分辨率YOLOv26可能支持动态输入。找到精度和速度的最佳平衡点。线程数即使使用QNNTFLite Interpreter的CPU线程数设置也可能影响前后处理。内存复用在Native层创建输入/输出张量的内存池避免每次推理都重新分配。3.3 第三步异常处理、降级与长期维护目标确保引擎在各种真实环境下鲁棒运行。全面的运行时检测设备能力检测在初始化时可以通过TfLiteHexagonDelegateCreate的返回值或尝试加载QNN库来判断设备是否支持。更优的做法是使用一个轻量级的探测模型先进行试探性推理。多Delegate回退链实现一个优先级策略例如QNN - GPU - CPU。按顺序尝试直到有一个成功。完善的日志与监控在Native层使用android/log.h输出日志便于logcat抓取。记录关键事件引擎初始化成功/失败、使用的后端、平均推理时间、错误次数等。这些数据可以上报用于分析不同机型的兼容性问题。模型管理与更新考虑模型加密、动态下载更新等机制。建立模型版本与后端兼容性的对应关系。当更新模型时需重新测试其在各Delegate下的表现。功耗与热管理在长时间连续推理时监控设备温度。如果过热可以动态降低推理频率如跳帧处理或暂时切换到更节能的模式虽然QNN本身已很节能。4. 避坑指南那些官方文档不会告诉你的细节在实际操作中你会遇到很多棘手的细节问题。这里列出几个最常见的“坑”。4.1 模型转换的“算子地狱”问题转换后的.tflite模型在CPU上运行正常但一使用Hexagon Delegate就失败或输出异常。排查使用TFLite提供的benchmark_model工具并加上--use_hexagontrue参数查看详细的错误信息。检查转换日志确认是否有算子被拆分成多个子图Partitioned graph。QNN可能只支持主图的一部分。重点关注自定义算子、特定版本的激活函数如SiLU/Swish、特殊池化层、以及后处理的非极大值抑制NMS。YOLO的后处理往往包含大量非标准操作最稳妥的方式是将NMS从模型中剥离在CPU上单独实现。建议模型设计初期就考虑部署友好性尽量使用TFLite和QNN官方支持的操作。对于YOLO寻找已经验证过QNN兼容性的开源模型转换脚本或预转换模型。4.2 QNN SDK的版本与兼容性迷宫问题同样的代码和模型在A手机上工作正常在B手机上崩溃或无法初始化。排查SDK版本确保你使用的QNN SDK版本与设备Hexagon DSP的驱动版本大致兼容。高通会不断更新SDK以支持新算子和优化。系统库依赖QNN运行时依赖一些系统库如libhexagon_nn_skel.so。这些库由手机厂商预置。老旧或非主流厂商的手机可能版本过低或缺失。你的APK需要打包一个兼容版本但可能会与系统版本冲突。ABI问题确保为arm64-v8a和armeabi-v7a都打包了正确的.so文件。建议在应用启动时增加一个轻量级的“能力检测”环节而不是直接尝试初始化重型模型。收集用户设备的DSP驱动版本信息建立白名单或兼容性数据库。4.3 Native内存泄漏与生命周期管理问题应用长时间运行后内存不断增长最终崩溃。排查JNI全局引用在JNI中创建的Java对象引用如果没有正确释放会导致Java对象无法被GC回收。C对象生命周期确保TfLiteDelegate、Interpreter、FlatBufferModel等对象的析构顺序正确。通常Delegate必须在Interpreter之前销毁。输入/输出缓冲区每次推理是否都申请了新内存考虑复用。建议使用valgrind或Android Studio的Native Memory Profiler进行检测。将核心推理资源封装在一个C类中利用RAII资源获取即初始化原则管理生命周期。4.4 多线程下的并发与同步问题在多线程环境下同时调用推理接口导致崩溃或结果错乱。分析TFLite Interpreter本身不是线程安全的。一个Interpreter实例在同一时间只能被一个线程调用Invoke()。方案方案A简单使用一个全局互斥锁std::mutex保护整个推理过程。简单但并发性能差。方案B推荐维护一个Interpreter对象池。每个工作线程从池中取一个Interpreter使用用完后归还。每个Interpreter可以绑定不同的Delegate但模型相同。这需要更多的内存但并发性能好。方案C高级对于流水线作业可以将预处理、推理、后处理放在不同线程使用生产者-消费者队列连接。推理线程内部采用方案A或B。回过头看“纯Native实现Yolo26 QNNTFLITE”这个标题其实描述的是一个移动端AI部署的“完全体”形态。它不是一个炫技的Demo而是一个面对真实工程挑战的务实方案通过Native层获得极致控制利用TFLite的框架能力统一接口和管理多后端最终瞄准QNN以榨取骁龙平台的专用算力。它的价值不在于用了多么前沿的技术而在于提供了一种系统化的性能与兼容性平衡思路。对于个人开发者可以从理解TFLite Delegate机制开始先实现CPU/GPU的切换再尝试集成QNN。对于团队这意味着需要建立从模型训练考虑算子兼容性、转换验证、到端侧多后端测试的完整流水线。真正困难的从来不是写出那几行调用Delegate的代码而是在海量设备、复杂网络和严苛功耗要求下让这套系统持续稳定地工作。这背后需要的是对每一层技术栈的深入理解以及一份详尽的、充满“坑点”记录的检查清单。

相关新闻

Flint中间语言:解决AI生成图表代码不确定性的工程实践

Flint中间语言:解决AI生成图表代码不确定性的工程实践

1. 从“猜谜”到“编程”:Agent生码不确定性的根源剖析最近在折腾AI Agent生成图表代码时,你是不是也遇到过这种情况:给Agent一个简单的指令,比如“帮我画一个过去一年销售额的折线图”,结果它给你生成了用ECharts写的…

2026/8/15 21:54:59 阅读更多 →
SSL证书验证失败排查与解决方案全解析

SSL证书验证失败排查与解决方案全解析

1. 问题初探:SSL证书验证失败的背后“SSL Error: Unable to verify the first certificate”,这个报错对于任何需要通过网络进行安全通信的开发者或运维人员来说,都像是一个熟悉的“老朋友”。它常常在你满怀信心地运行一段代码,试…

2026/8/15 21:54:59 阅读更多 →
电动汽车集群优化:Matlab与Yalmip建模实践

电动汽车集群优化:Matlab与Yalmip建模实践

1. 电动汽车集群优化的现实挑战在当今能源转型的大背景下,电动汽车(EV)的普及率正以惊人的速度增长。但随之而来的充电需求激增给电网带来了前所未有的压力。我曾在某充电站运营商的项目中亲眼目睹:当12辆电动出租车同时接入快充时…

2026/8/15 21:54:59 阅读更多 →

最新新闻

蓝速科技可移动多媒体智慧讲台:分散场地下的灵活选型实测

蓝速科技可移动多媒体智慧讲台:分散场地下的灵活选型实测

在智慧教室改造或企业培训空间升级的进程中,很多管理者都面临过一个两难选择:是为每个分散的会议室和教室单独配置固定的多媒体讲台,导致设备长期闲置、资金利用率低;还是为了节省成本只配一两台,结果遇到多场会议或轮…

2026/8/15 22:42:29 阅读更多 →
安防监控YOLO全栈方案:人员入侵检测+行为分析+跟踪算法一体化实现

安防监控YOLO全栈方案:人员入侵检测+行为分析+跟踪算法一体化实现

在园区、厂区、社区、机房等安防场景中,传统移动侦测方案长期被误报率高的问题困扰:光影变化、风吹树叶、猫狗穿行、蚊虫飞影都会触发告警,值班人员每天要处理上百条无效告警,真正的入侵事件反而被淹没。基于YOLO的智能分析方案,通过精准的人员检测、连续的目标跟踪、可配…

2026/8/15 22:42:29 阅读更多 →
Android Fragment深度解析:从生命周期到事务管理的实战指南

Android Fragment深度解析:从生命周期到事务管理的实战指南

1. 项目概述:为什么Fragment是Android开发的基石如果你在Android开发领域摸爬滚打超过一年,却还没被Fragment的“生命周期”和“事务管理”折磨过,那你的开发经历可能是不完整的。Fragment,这个自Android 3.0(Honeycom…

2026/8/15 22:42:29 阅读更多 →
MySQL磁盘空间异常增长排查与优化实战指南

MySQL磁盘空间异常增长排查与优化实战指南

1. 问题初探:MySQL为何会成为“空间吞噬者”? 接手一个运行了一段时间的线上服务,某天突然收到磁盘告警,登录服务器一看, /var/lib/mysql 目录的体积已经膨胀到令人心惊肉跳的程度。这恐怕是很多DBA和运维工程师都曾…

2026/8/15 22:42:29 阅读更多 →
构建动态数据层:从贪吃蛇隐喻到生长型知识图谱实践

构建动态数据层:从贪吃蛇隐喻到生长型知识图谱实践

1. 从“蛇吃豆”到“蛇吃文档”:一个数据层隐喻的诞生 最近在折腾一些自动化工具和文档处理流程时,脑子里突然蹦出一个挺有意思的类比,越想越觉得贴切,索性写出来和大家聊聊。这个类比就是: 扫描器是蛇,文…

2026/8/15 22:42:29 阅读更多 →
安卓Jellyfin连接失败?解析SSL证书链问题与解决方案

安卓Jellyfin连接失败?解析SSL证书链问题与解决方案

1. 问题场景:当安卓手机遇上自定义域名和免费SSL证书如果你和我一样,喜欢在家里搭建一个Jellyfin媒体服务器,享受随时随地看自己收藏的电影、电视剧的乐趣,那么“自定义域名免费SSL证书”这个组合,你大概率不会陌生。这…

2026/8/15 22:41:29 阅读更多 →

日新闻

内景 空间站内部 中国空间站 太空 内仓

内景 空间站内部 中国空间站 太空 内仓

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 空间站内部 中国空间站 太空 内仓 地址:本地PC端运行(或Web…

2026/8/15 0:00:30 阅读更多 →
重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 当我们面对海量金融数据时,传统的数据获取方式往往让我们陷入困境—…

2026/8/15 0:00:30 阅读更多 →
一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

快消品(FMCG)是流通速度较快、竞争较为激烈的行业之一。一瓶饮料从出厂到消费者手中,往往只有几十天甚至几天的周转窗口。这决定了快消行业的仓储管理系统(WMS)与制造业、电商行业存在明显区别:它不仅需要管…

2026/8/15 0:02:30 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/15 12:59:14 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/15 2:35:29 阅读更多 →