基于Apache Spark的实时互动应用开发实战:从环境搭建到流处理实现
1. 先搞清楚“Spark快闪”到底是什么以及它能解决什么问题看到“Spark快闪”和“互动区合照互动流程演示”这个标题很多人第一反应可能是某个线下活动的技术展示。但在技术圈尤其是大数据和实时计算领域“Spark”这个词几乎等同于Apache Spark。结合“快闪”和“互动流程”这很可能指的是一种基于Apache Spark框架实现的、快速响应的实时互动数据处理演示比如在活动现场用户上传照片互动区合照后台通过Spark进行快速的人脸识别、图像合成或数据分析并实时返回结果。所以这篇文章的核心是如何理解并复现一个基于Spark的实时互动应用流程。它适合两类人看一是对Spark有基础了解想学习如何将其应用于实时交互场景的开发者二是需要策划技术类互动展示寻找可靠技术方案的项目负责人。最关键的价值在于它跳出了Spark传统的批处理教学展示了一个从数据快速摄入、实时处理到结果送达的完整“快闪”式闭环。网上相关的热搜词比如spark的安装与使用、spark集群搭建、spark数据分析案例都指向了Spark的基础和经典应用。而object spark is not a member of package org.apache这类错误则是新手在环境配置时最容易踩的坑。我们会把这些点都串起来让你不仅明白流程更能自己动手搭起来并避开那些常见的陷阱。2. 环境准备别在依赖和版本上栽跟头在开始任何Spark项目之前环境是第一个拦路虎。很多人照着教程做却卡在import org.apache.spark失败或者Spark Shell启动不了。问题往往出在环境变量、版本冲突和依赖管理上。2.1 核心组件选择与安装对于“快闪”互动这种场景对延迟敏感需要快速启停我建议的组件栈是Spark: 作为核心计算引擎。选择Spark而不是Hadoop MapReduce就是因为它的内存计算特性对于迭代式和交互式工作负载快得多。Spark Streaming 或 Structured Streaming: 用于处理实时数据流。如果是较新的项目强烈推荐Structured Streaming它的API更友好且与Spark SQL集成度更高声明式编程模型更容易理解。一个数据源: 对于“合照互动”数据源可能是Kafka接收来自前端的实时照片上传事件、一个监听的Socket端口或者直接是一个HDFS/S3上的目录模拟实时流入的文件。一个数据接收器: 处理后的结果可能需要写回Kafka通知前端写入数据库或者直接生成图片文件输出。安装Spark本身很简单但关键是“配套”Java: Spark运行在JVM上必须安装JDK 8或11建议JDK 8兼容性最广。安装后务必确认JAVA_HOME环境变量已正确设置。# 检查Java版本和环境变量 java -version echo $JAVA_HOME下载Spark: 从Apache官网下载预编译版本例如spark-3.3.2-bin-hadoop3.tgz。选择带有“hadoop”的版本它包含了常用的Hadoop依赖省去很多麻烦。解压与配置:tar -xzf spark-3.3.2-bin-hadoop3.tgz cd spark-3.3.2-bin-hadoop3编辑conf/spark-env.sh如果没有复制spark-env.sh.template:# 设置Java安装路径 export JAVA_HOME/your/path/to/jdk # 设置Spark主节点IP如果是单机本地模式可以暂时不设 # export SPARK_MASTER_HOSTyour_host_ip验证安装: 运行Spark自带的交互式Shell这是最快验证环境的方法。./bin/spark-shell成功启动后你会看到Spark的Logo和一个scala提示符。输入sc并按回车如果显示res0: org.apache.spark.SparkContext ...说明SparkContext初始化成功环境基本OK。2.2 解决“object spark is not a member of package org.apache”天坑这个错误几乎100%出现在用IDE如IntelliJ IDEA构建Scala/Java项目时。它意味着你的项目无法找到Spark的库。解决方法不是去改Spark的安装包而是正确配置项目的构建工具。对于SBT项目 (build.sbt):libraryDependencies org.apache.spark %% spark-core % 3.3.2 libraryDependencies org.apache.spark %% spark-sql % 3.3.2 // 如果需要SQL和Structured Streaming libraryDependencies org.apache.spark %% spark-streaming % 3.3.2 // 如果需要旧的DStream API对于Maven项目 (pom.xml):dependencies dependency groupIdorg.apache.spark/groupId artifactIdspark-core_2.12/artifactId version3.3.2/version /dependency dependency groupIdorg.apache.spark/groupId artifactIdspark-sql_2.12/artifactId version3.3.2/version /dependency /dependencies关键点:版本匹配: Scala版本如2.12必须与Spark编译版本和你的项目版本一致。%%SBT或_2.12Maven就是用来指定Scala版本的。刷新依赖: 修改构建文件后在IDE中执行刷新或重新导入项目的操作。检查网络: 确保能正常从Maven中央仓库下载JAR包。2.3 关于“集群搭建”的务实建议对于“快闪”演示或学习阶段根本不需要搭建多节点的Spark集群。dgx spark可能指NVIDIA DGX服务器上的Spark优化这属于高性能计算场景初期无需考虑。本地模式 (local[*])完全够用。它会在你本地机器上利用所有CPU核心启动Spark执行器。在代码中或提交任务时指定--master local[*]即可。这避免了网络配置、节点通信、资源管理等复杂问题让你专注于业务逻辑开发。只有当你的演示需要处理的数据量巨大或者需要模拟真正的分布式容错时才考虑搭建一个伪分布式集群所有进程跑在一台机器上或使用云托管的Spark服务如Databricks、EMR。3. 拆解“合照互动流程”的核心实现环节现在我们进入正题把“互动区合照互动流程”拆解成Spark能处理的数据流水线。这个过程本质是一个实时数据管道。3.1 流程抽象与数据流设计假设场景用户在互动屏前拍照合照点击上传后台需要快速识别照片中的人数、添加趣味滤镜或虚拟道具然后合成一张新图片返回显示。数据流可以这样设计数据摄入: 前端应用将照片或照片的元数据如访问URL作为一个事件消息发送到Kafka的photo_upload主题。实时处理: Spark Structured Streaming作业订阅该Kafka主题消费消息。图像处理:从消息中获取图片地址可能是HDFS路径、S3链接或Base64编码的字符串。调用图像处理逻辑。这里注意Spark本身不擅长像素级的图像处理。通常有两种做法在Spark UDF用户定义函数中调用外部图像处理库如OpenCV via JavaCV或Python的PIL/Pillow。这要求执行器节点安装了相应库。将图片数据发送到专用的图像处理微服务Spark负责协调和结果收集。这种方式更解耦但引入网络延迟。结果输出: 处理完成后例如生成新图片的存储路径和描述信息将结果写回另一个Kafka主题photo_processed或者直接写入一个高速键值存储如Redis供前端查询。前端送达: 前端订阅photo_processed主题或轮询Redis获取结果并更新界面。3.2 使用Structured Streaming实现核心管道下面我们用Spark Structured StreamingScala API勾勒一个简化的代码骨架。这里我们假设图片处理是一个黑盒函数processImage。import org.apache.spark.sql.SparkSession import org.apache.spark.sql.functions._ import org.apache.spark.sql.types._ object PhotoInteractionStreaming { def main(args: Array[String]): Unit { // 1. 创建SparkSession指定运行在本地模式 val spark SparkSession .builder() .appName(Spark快闪-合照互动处理) .master(local[*]) // 本地模式使用所有核心 .config(spark.sql.shuffle.partitions, 2) // 本地调试时减少分区数避免过多任务开销 .getOrCreate() import spark.implicits._ // 2. 定义输入数据的Schema假设Kafka消息是JSON格式 val inputSchema StructType(Seq( StructField(userId, StringType, nullable false), StructField(photoId, StringType, nullable false), StructField(photoUrl, StringType, nullable false), StructField(timestamp, TimestampType, nullable false) )) // 3. 从Kafka读取流数据 val kafkaBootstrapServers your_kafka_broker:9092 val inputDF spark .readStream .format(kafka) .option(kafka.bootstrap.servers, kafkaBootstrapServers) .option(subscribe, photo_upload) .option(startingOffsets, latest) // 从最新位置开始适合演示 .load() .select(from_json(col(value).cast(StringType), inputSchema).as(data)) // 解析JSON .select(data.*) // 展开字段 // 4. 定义图像处理的UDF这里是一个示意实际需要调用具体的图像处理逻辑 // 注意UDF内的代码会在每个执行器节点上运行必须确保相关库可用。 val processImageUDF udf((photoUrl: String) { // 这里是图像处理的占位逻辑 // 真实场景下载图片 - 调用OpenCV/PIL处理 - 上传结果图 - 返回新URL val processedPhotoUrl sprocessed_$photoUrl val peopleCount 5 // 假设识别出5个人 s$processedPhotoUrl|$peopleCount }) // 5. 应用处理逻辑 val processedDF inputDF .withColumn(processingResult, processImageUDF(col(photoUrl))) .withColumn(processedUrl, split(col(processingResult), \\|).getItem(0)) .withColumn(detectedPeople, split(col(processingResult), \\|).getItem(1).cast(IntegerType)) .withColumn(responseTimestamp, current_timestamp()) // 6. 将结果输出到Kafka同样需要序列化为JSON字符串 val outputDF processedDF.select( col(photoId), col(processedUrl), col(detectedPeople), col(responseTimestamp), to_json(struct(*)).as(value) // 将整行数据转为JSON字符串作为Kafka消息的value ) // 7. 启动流查询输出到Kafka主题 photo_processed val query outputDF .writeStream .outputMode(append) .format(kafka) .option(kafka.bootstrap.servers, kafkaBootstrapServers) .option(topic, photo_processed) .option(checkpointLocation, /tmp/spark_checkpoint/photo_interaction) // 必须设置用于容错 .start() query.awaitTermination() // 等待查询终止比如手动停止或发生错误 } }3.3 关键参数与配置解释master(“local[*]”): 指定运行模式。*代表使用所有CPU核心。对于演示这足够了。生产环境会是spark://master:7077或yarn。spark.sql.shuffle.partitions: 控制Shuffle数据混洗时的分区数。在本地模式下数据量小设为2-4可以显著减少任务调度开销跑得更快。数据量大时才需要调高。startingOffsets: 流开始消费的位置。latest只处理启动后新来的数据适合演示。earliest会处理主题里所有历史数据。checkpointLocation:这是Structured Streaming容错的关键。Spark会将进度信息和中间状态写到这里。如果作业重启它会从这里恢复保证“精确一次”的处理语义。必须设置且路径需要可靠存储如HDFS。UDF的使用注意: 在UDF中执行图像处理这类重型操作要小心序列化问题和资源消耗。确保UDF中引用的所有类都是可序列化的并且图像处理库在所有执行器节点上都可用。对于复杂处理更推荐使用mapPartitions来在每个分区内复用资源。4. 从“能跑通”到“稳定演示”的实战要点把代码跑起来只是第一步。要让这个“快闪”演示稳定、流畅还需要考虑以下问题。4.1 资源管理与性能调优内存: Spark是吃内存的大户。在本地模式下你可以通过--driver-memory和--executor-memory参数为驱动程序和执行器分配内存。如果处理图片较大需要增加内存防止OOM内存溢出。./bin/spark-submit \ --master local[*] \ --driver-memory 4g \ --executor-memory 4g \ --class PhotoInteractionStreaming \ your_application.jar背压: 如果数据流入速度超过处理速度会导致数据堆积。Structured Streaming支持背压可以通过spark.streaming.backpressure.enabled等参数开启它会动态调整接收速率。水印与延迟数据: 如果互动不要求严格的顺序可以设置水印来处理稍微延迟到达的数据。例如.withWatermark(“timestamp”, “2 minutes”)允许2分钟内的延迟数据被处理。4.2 演示环境的简化与降级真实的KafkaSpark流水线对演示环境要求较高。为了简化你可以做降级处理用Socket源代替Kafka: Spark可以直接从网络Socket读取文本流。你可以写一个简单的Python脚本模拟前端向某个端口发送数据。val lines spark.readStream .format(socket) .option(host, localhost) .option(port, 9999) .load()用控制台输出代替Kafka输出: 将结果直接打印到控制台方便观察。val query processedDF.writeStream .outputMode(append) .format(console) .start()模拟图像处理: 在UDF中不进行真实的图像下载和处理而是添加随机休眠和返回模拟结果专注于测试数据流逻辑。val mockProcessUDF udf((url: String) { Thread.sleep(100) // 模拟100ms处理耗时 s”mock_processed_$url|${scala.util.Random.nextInt(10)}” })4.3 监控与调试Spark UI: Spark作业启动后默认在http://localhost:4040提供Web UI。这是最重要的调试工具可以查看作业进度、任务执行时间、Shuffle数据量、有无数据倾斜等。日志: 查看执行器日志在Spark UI的“Executors”页签可以找到日志链接特别是处理UDF时抛出的异常。检查点: 定期检查你设置的checkpointLocation目录如果作业失败可以从中看到保存的状态信息。5. 常见问题排查清单当你的“快闪”演示跑不起来或者结果不对时按照这个顺序排查作业根本提交不了/启动失败:检查JAVA_HOME环境变量。检查Spark依赖包是否在classpath中如果是spark-submit用--jars或--packages添加。检查主类名是否正确。查看spark-submit的完整错误堆栈。流查询启动后收不到数据:检查数据源: Kafka主题名、broker地址、分区是否正确Socket端口是否已打开并有数据发送检查偏移量:startingOffsets是不是设成了latest而启动后没有新数据产生查看微批处理进度: 去Spark UI的“Streaming”页签看是否有批次被触发输入速率是否为0。处理速度慢延迟高:看Spark UI: 是否存在数据倾斜某个任务执行时间特别长Shuffle数据量是否异常大检查UDF: 图像处理UDF是否是瓶颈在UDF内打印日志或计时看看单次处理耗时。调整并行度: 增加spark.sql.shuffle.partitions或尝试对输入流进行重分区repartition。资源不足: 增加执行器内存和核心数。输出结果不正确或为空:检查UDF逻辑: UDF是否对某些输入返回了null或异常添加try-catch并记录日志。检查Schema匹配: 流数据字段名和类型是否与代码中的Schema定义严格匹配大小写敏感。检查水印和窗口: 如果使用了时间窗口确认事件时间字段是否正确水印设置是否合理延迟数据是否被正确丢弃。作业运行一段时间后失败:检查点错误: 检查点目录是否被意外清理或权限不足这是流作业容错的关键不能丢失。外部服务不可用: 如果UDF中调用了外部图像服务或数据库网络波动或服务宕机会导致作业失败。考虑增加重试机制或使用更健壮的客户端。资源耗尽: 内存泄漏或数据积累导致OOM。检查内存使用情况考虑设置更合理的批次间隔或清理策略。6. 从演示到生产还需要考虑什么一个成功的“快闪”演示证明了技术的可行性。但如果想将其转化为一个真正的线上互动服务还需要补上这些环节资源管理: 使用YARN或Kubernetes来管理Spark集群资源实现动态分配和隔离。高可用: 部署多个Spark Driver通过ZooKeeper选举和多个Kafka Broker避免单点故障。数据持久化与状态管理: 对于更复杂的互动逻辑如用户状态跟踪可能需要使用Spark的mapGroupsWithState或flatMapGroupsWithStateAPI来管理有状态计算。监控告警: 集成Prometheus、Grafana等监控栈对数据延迟、处理错误率、系统资源进行监控和告警。CI/CD: 将Spark作业的打包、测试、部署流程自动化。回到“快闪”这个主题它的精髓在于快速验证和展示核心价值。用最小的可行产品MVP思路先用本地模式、模拟数据、控制台输出把整个数据流跑通让观众看到从“上传”到“结果送达”的完整链条。这比一开始就陷入复杂的集群部署和性能调优要有力得多。当你掌握了这个基本流程后续的扩展和优化就有了坚实的起点。

相关新闻

通信电子考研一站式资源平台:真题、笔记、经验与高效备考指南

通信电子考研一站式资源平台:真题、笔记、经验与高效备考指南

最近在准备通信电子考研的同学,是不是经常为了找专业课资料、真题、经验贴而焦头烂额?网上的信息要么零散不全,要么质量参差不齐,甚至有些还需要付费才能获取。作为过来人,我深知在备考初期信息搜集的耗时与痛苦。今天…

2026/8/14 2:06:12 阅读更多 →
吴大正信号课后题高效复习指南:减负提效,直击考研核心考点

吴大正信号课后题高效复习指南:减负提效,直击考研核心考点

这次我们来看一个针对电子通信考研的专项复习项目:“别白刷!吴大正信号课后题,只看这些就够上岸”。对于备考信号与系统这门核心专业课的同学来说,吴大正教授的《信号与线性系统分析》是绕不开的经典教材,但其课后习题…

2026/8/14 2:06:12 阅读更多 →
学校网站建设需求分析:从零基础到打造高转化教育门户的深度实操指南

学校网站建设需求分析:从零基础到打造高转化教育门户的深度实操指南

做教育这块的人都知道,现在的家长和孩子早就不是过去那种只要有个联系方式就算完事的年代了。你去问问那些招办老师,或者问问那些负责宣传的校长,他们心里都有一本账:网站不好用,招生难一半;网站做得花哨但不实用,家长看了直摇头。咱们今天不聊那些高大上的互联网黑话,…

2026/8/14 2:06:12 阅读更多 →

最新新闻

免费开源的网盘直链下载助手到底值不值得装?一次完整的实测体验

免费开源的网盘直链下载助手到底值不值得装?一次完整的实测体验

免费开源的网盘直链下载助手到底值不值得装?一次完整的实测体验 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云…

2026/8/14 11:17:11 阅读更多 →
商务酒店网站建设怎么做才不掉链子:从官网设计到获客转化的实战避坑指南,老板们必看

商务酒店网站建设怎么做才不掉链子:从官网设计到获客转化的实战避坑指南,老板们必看

做酒店生意的老板们,大家最近是不是都在为客源焦虑?现在的市场环境大家都知道,流量贵得离谱, OTA平台佣金高得让人心疼,好不容易接个团购订单,算下来利润薄得像张纸。很多老板跟我抱怨,说现在做网站没用,没人看,做了也是浪费钱。但我今天想跟大家掏心窝子说几句实在话…

2026/8/14 11:17:11 阅读更多 →
iPhone USB网络共享驱动一键安装终极指南:三步告别设备管理器黄色感叹号

iPhone USB网络共享驱动一键安装终极指南:三步告别设备管理器黄色感叹号

iPhone USB网络共享驱动一键安装终极指南:三步告别设备管理器黄色感叹号 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://g…

2026/8/14 11:17:11 阅读更多 →
抖音无水印下载实用指南:一个开源工具,从单条视频到整页批量全搞定

抖音无水印下载实用指南:一个开源工具,从单条视频到整页批量全搞定

抖音无水印下载实用指南:一个开源工具,从单条视频到整页批量全搞定 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and…

2026/8/14 11:17:11 阅读更多 →
RTL8852BE 驱动从“装不上“到“看透它“:一次逆向拆解式的 Linux Wi-Fi 6 网卡自救

RTL8852BE 驱动从“装不上“到“看透它“:一次逆向拆解式的 Linux Wi-Fi 6 网卡自救

RTL8852BE 驱动从"装不上"到"看透它":一次逆向拆解式的 Linux Wi-Fi 6 网卡自救 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 为什么有人插上这块网卡&…

2026/8/14 11:17:11 阅读更多 →
4步用mootdx打通通达信数据读取:亲手搭一个行情小工具

4步用mootdx打通通达信数据读取:亲手搭一个行情小工具

4步用mootdx打通通达信数据读取:亲手搭一个行情小工具 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx mootdx 是一个把通达信数据读取"包成三行代码"的 Python 封装库&#…

2026/8/14 11:16:09 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

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/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从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/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

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

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

2026/8/13 10:41:49 阅读更多 →
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/13 10:41:49 阅读更多 →