PyTorch张量操作核心:彻底理解dim参数与维度变换
1. 从一次“诡异”的维度错误说起如果你刚开始用PyTorch或者已经用它写过一些代码那么下面这个场景你一定不陌生你信心满满地调用了一个函数比如torch.sum()或者torch.mean()结果出来的张量形状和你预想的完全不一样或者干脆就报了一个维度不匹配的错误。你盯着代码看了半天明明逻辑是对的问题往往就出在那个不起眼的dim参数上。dim这个参数在PyTorch的绝大多数张量操作函数里都会出现比如求和、求平均、拼接、索引、最大值/最小值查找等等。它看起来很简单就是一个整数指定沿着哪个轴维度进行操作。但就是这个简单的整数让无数新手甚至一些老手在匆忙时栽了跟头。我刚开始用PyTorch做项目时为了一个torch.cat的dim参数没设对调试了整整一个下午最后发现只是把dim0写成了dim1。所以今天我们不谈高深的模型架构也不聊复杂的优化算法就扎扎实实地把dim这个基础但至关重要的概念掰开揉碎了讲清楚。我会用最直观的方式——画图、举例、对比——让你彻底明白dim到底在干什么以及为什么你的直觉有时候会“欺骗”你。理解了它你就能避免大量无谓的维度错误写出更清晰、更健壮的张量操作代码。2. 张量的“维度”究竟是什么建立正确的心理模型在深入dim之前我们必须统一对“维度”的理解。很多人尤其是从数学或NumPy转过来的朋友容易把“维度”和“轴”的概念混淆。在PyTorch以及NumPy的语境下我们说的“维度”通常指的是张量的“阶”或“轴”的数量。一个标量比如数字5是0维张量它没有轴。 一个向量比如[1, 2, 3]是1维张量它有1个轴轴0。 一个矩阵比如[[1, 2], [3, 4]]是2维张量它有2个轴轴0和轴1。 一个“立方体”数据是3维张量以此类推。关键点在于dim参数指定的就是这个“轴”的索引编号而且编号是从0开始的。我们可以把张量想象成一个有多层结构的俄罗斯套娃或者一个有多层索引的Excel表格。dim0通常代表最外层的结构dim1代表次外层依此类推。让我们看一个具体的3维张量例子这在处理批量图像数据时非常常见import torch # 假设我们有一个批量数据batch_size2, channels3, height4, width4 # 形状为 (2, 3, 4, 4) batch_images torch.randn(2, 3, 4, 4) print(batch_images.shape) # 输出: torch.Size([2, 3, 4, 4])对于这个形状为[2, 3, 4, 4]的张量dim0对应“批量”这个维度大小是2。你可以理解为有两个独立的“数据包”。dim1对应“通道”维度大小是3。比如RGB图像的三个颜色通道。dim2对应“高度”维度大小是4。dim3对应“宽度”维度大小是4。一个非常实用的记忆技巧shape元组中各个位置的数字其索引就是对应的dim值。shape[0]对应dim0shape[1]对应dim1。每次不确定时就看看tensor.shape。3. 核心操作解析dim如何决定计算的方向理解了维度的编号我们来看看当你在函数中指定dim时实际发生了什么。其核心逻辑是函数会沿着你指定的那个维度进行操作并在操作后这个维度会在结果中“消失”被聚合掉而其他维度保持不变。3.1 聚合操作求和sum、求平均mean这是最直观的一类。我们用一个2维矩阵来演示A torch.tensor([[1, 2, 3], [4, 5, 6]]) print(A.shape) # torch.Size([2, 3])dim0沿着行向下操作sum_dim0 torch.sum(A, dim0) print(sum_dim0) # 输出: tensor([5, 7, 9]) print(sum_dim0.shape) # 输出: torch.Size([3])发生了什么我们把dim0行方向上的元素加起来。原来的形状是[2, 3]dim0的大小是2。操作过程是第一列[1, 4]相加得5第二列[2, 5]相加得7第三列[3, 6]相加得9。结果形状dim0被“压缩”掉了只剩下原来的dim1所以形状从[2, 3]变成了[3]。你可以想象把两行数据“摞”起来上下相加。dim1沿着列向右操作sum_dim1 torch.sum(A, dim1) print(sum_dim1) # 输出: tensor([ 6, 15]) print(sum_dim1.shape) # 输出: torch.Size([2])发生了什么我们把dim1列方向上的元素加起来。操作过程是第一行[1, 2, 3]相加得6第二行[4, 5, 6]相加得15。结果形状dim1被“压缩”掉了只剩下原来的dim0所以形状从[2, 3]变成了[2]。你可以想象对每一行分别求和。重要提示keepdimTrue参数。有时候我们不想让那个维度消失比如为了后续的广播计算。这时可以设置keepdimTrue它会在结果中保留一个大小为1的维度。sum_dim0_keep torch.sum(A, dim0, keepdimTrue) print(sum_dim0_keep) # 输出: tensor([[5, 7, 9]]) print(sum_dim0_keep.shape) # 输出: torch.Size([1, 3]) dim0还在但大小是13.2 拼接操作连接cattorch.cat是另一个高频使用且容易出错的函数。它的逻辑与聚合操作相反沿着指定的dim将多个张量连接起来该维度的大小会增加。规则是除了待拼接的维度dim指定外其他所有维度的形状必须完全相同。B torch.tensor([[10, 11, 12], [13, 14, 15]]) print(B.shape) # torch.Size([2, 3]) # 沿着 dim0 拼接 (在行方向堆叠增加“样本数”) C_dim0 torch.cat([A, B], dim0) print(C_dim0) # 输出: tensor([[ 1, 2, 3], # [ 4, 5, 6], # [10, 11, 12], # [13, 14, 15]]) print(C_dim0.shape) # 输出: torch.Size([4, 3]) dim0从2变成了4 # 沿着 dim1 拼接 (在列方向拼接增加“特征数”) D torch.tensor([[20, 21], [22, 23]]) print(D.shape) # torch.Size([2, 2]) C_dim1 torch.cat([A, D], dim1) # A的shape是[2,3], D的shape是[2,2] dim1不同但dim0相同。 print(C_dim1) # 输出: tensor([[ 1, 2, 3, 20, 21], # [ 4, 5, 6, 22, 23]]) print(C_dim1.shape) # 输出: torch.Size([2, 5]) dim1从3变成了5一个经典错误试图在dim0拼接两个dim0大小不同的张量而其他维度相同。这是不允许的。必须保证非拼接维度的形状一致。3.3 索引/选择操作取最大值索引argmax、取最大值max这类函数通常返回两个值最大值和其索引。dim参数决定了在哪个维度上寻找“最值”。A torch.tensor([[1, 5, 3], [4, 2, 6]]) # 沿着 dim1 (每行内部)找最大值 max_vals, max_indices torch.max(A, dim1) print(max_vals) # 输出: tensor([5, 6]) 每行的最大值 print(max_indices) # 输出: tensor([1, 2]) 每行最大值所在的列索引(在dim1上的位置) # 沿着 dim0 (每列内部)找最大值 max_vals, max_indices torch.max(A, dim0) print(max_vals) # 输出: tensor([4, 5, 6]) 每列的最大值 print(max_indices) # 输出: tensor([1, 0, 1]) 每列最大值所在的行索引(在dim0上的位置)理解要点argmax(dim1)是在每一行里找所以返回的索引是针对列dim1的。结果张量的形状会去掉dim1保留dim0行。dim0同理。3.4 降维/升维操作压缩squeeze、解压unsqueeze这两个函数直接与维度打交道虽然不直接叫dim但逻辑相通。torch.squeeze(dim)如果指定维度的大小为1则移除该维度。不指定dim则移除所有大小为1的维度。torch.unsqueeze(dim)在指定的维度位置插入一个大小为1的新维度。x torch.randn(1, 3, 1, 5) print(x.shape) # torch.Size([1, 3, 1, 5]) y x.squeeze(dim0) # 移除dim0 print(y.shape) # torch.Size([3, 1, 5]) z x.squeeze() # 移除所有大小为1的dim print(z.shape) # torch.Size([3, 5]) # unsqueeze 非常常用特别是在需要广播对齐维度时 a torch.tensor([1, 2, 3]) print(a.shape) # torch.Size([3]) b a.unsqueeze(0) # 在dim0处加一维变成二维张量 print(b.shape) # torch.Size([1, 3]) print(b) # tensor([[1, 2, 3]]) # 现在可以看作一个1x3的矩阵了 c a.unsqueeze(1) # 在dim1处加一维 print(c.shape) # torch.Size([3, 1]) print(c) # 输出: tensor([[1], # [2], # [3]])4. 高维张量实战CNN特征图与Transformer注意力中的dim理解了2D案例我们进入更真实的场景。深度学习中的数据很少是简单的2D矩阵。4.1 卷积神经网络CNN中的特征图处理假设你有一个CNN中间层的输出形状为[batch, channel, height, width] [4, 64, 32, 32]。feat_map torch.randn(4, 64, 32, 32)全局平均池化Global Average Pooling这通常是对每个通道channel的所有空间位置height, width求平均。所以我们需要在dim2和dim3上操作。# 错误做法只在一个dim上操作 gap_wrong torch.mean(feat_map, dim2) # 形状变为 [4, 64, 32] # 正确做法同时指定两个dim用一个元组 gap torch.mean(feat_map, dim(2, 3)) print(gap.shape) # torch.Size([4, 64]) # 空间维度被聚合掉了剩下批量和通道跨批量的归一化如果你想计算所有样本、所有空间位置上每个通道的均值和方差比如BatchNorm的统计量你需要聚合dim(0, 2, 3)。channel_mean torch.mean(feat_map, dim(0, 2, 3)) # 聚合了批量、高、宽 print(channel_mean.shape) # torch.Size([64]) # 只剩下通道维度得到每个通道的均值4.2 Transformer/自注意力机制中的dim在自注意力中Q查询、K键、V值通常是3D张量[batch, seq_len, d_model]。batch, seq_len, d_model 2, 10, 512 Q torch.randn(batch, seq_len, d_model)注意力分数的计算是Q K.T但这里涉及转置和dim的选择。torch.matmul的广播规则对于高维张量matmul只对最后两个维度进行矩阵乘法前面的维度视为批次维度。所以Q K.transpose(1, 2)才是正确的。这里的transpose(1, 2)交换了seq_len和d_model维度使得K的形状从[2, 10, 512]变成[2, 512, 10]这样Q和K^T才能在后两维上做矩阵乘法[10,512] [512,10] - [10,10]得到每个样本的注意力分数矩阵。softmax的应用我们通常对每个序列的注意力分数在dim-1即最后一个维度也就是键的序列维度上做softmax使得每个查询位置对所有键位置的注意力权重之和为1。attn_scores torch.matmul(Q, K.transpose(1, 2)) / (d_model ** 0.5) # 形状 [2, 10, 10] attn_weights torch.softmax(attn_scores, dim-1) # 在最后一个维度(dim2)上做softmax # dim-1 是PyTorch的一个便利写法代表最后一个维度在这里等价于 dim2。5. 常见陷阱与深度辨析即使知道了规则在实际编码中还是容易踩坑。下面是一些高频错误场景。5.1 陷阱一dim的“方向感”错觉很多人会把dim理解为“对哪一列”或“对哪一行”操作。这个理解在2D情况下勉强可行但在高维下极易出错。更准确的理解是dim指定了“被消除的维度”。函数沿着这个维度“移动”并将该维度上的所有元素聚合或比较起来最终这个维度在输出中消失除非keepdimTrue。5.2 陷阱二squeeze/unsqueeze与dim值越界unsqueeze可以插入新维度的位置范围是[0, tensor.dim()]包含两端。这意味着你可以在最前面dim0、任意两个现有维度之间或者最后面dimtensor.dim()插入。a torch.randn(3, 4) print(a.dim()) # 2 b a.unsqueeze(2) # 有效在dim0和dim1之后插入形状变为[3,4,1] c a.unsqueeze(0) # 有效形状变为[1,3,4] d a.unsqueeze(3) # 报错IndexError: Dimension out of range因为最大允许的dim是2 # 正确做法d a.unsqueeze(-1) # dim-1 表示最后一个维度之后形状变为[3,4,1]5.3 陷阱三cat、stack与dimtorch.cat和torch.stack都用于组合张量但有着本质区别cat在现有的某个维度上连接张量。要求非拼接维度形状一致。stack创建一个新的维度然后将所有张量沿着这个新维度堆叠。要求所有维度的形状完全一致。x torch.randn(2, 3) y torch.randn(2, 3) # cat: 在现有维度上连接 cat_result torch.cat([x, y], dim0) # 形状: [4, 3] # stack: 创建新维度堆叠 stack_result torch.stack([x, y], dim0) # 形状: [2, 2, 3] # 相当于先 unsqueeze(0) 变成 [1,2,3]再 cat如何选择问自己我想增加的是样本数cat还是想增加一个类似“批次”或“层”的新维度stack在数据加载中将多个样本组成一个批次常用stack。在拼接网络不同层的特征时常用cat。5.4 陷阱四广播机制下的维度对齐与dim广播是PyTorch的强大功能但也容易引发隐秘的dim错误。广播规则简单说就是从后往前从最右边的维度开始比较两个张量的形状如果维度大小相等或其中一个为1或其中一个不存在则它们是兼容的。A torch.randn(4, 3, 2) B torch.randn(3, 2) # 形状可以广播为 [1, 3, 2] - [4, 3, 2] C A B # 成功 D torch.randn(4, 3, 1) E torch.randn(3, 2) # 形状为 [1, 3, 2]? 不从后往前比D的最后一个维度是1E是2。1和2不相等但1可以广播到2。再往前D的倒数第二个是3E也是3匹配。再往前D有4E没有这个维度可以广播。所以最终E被广播为[4,3,2]。 F D E # 成功 G torch.randn(4, 2, 3) H torch.randn(2, 3) # 广播为 [1,2,3] - [4,2,3] I G H # 成功 J torch.randn(4, 3, 2) K torch.randn(2, 3) # 从后往前J的最后一个维度是2K是3。2 ! 3且都不是1。广播失败 # L J K # 报错RuntimeError: The size of tensor a (2) must match the size of tensor b (3) at non-singleton dimension 2避坑指南在进行涉及dim参数的操作如sum(keepdimTrue)后再进行广播时务必检查结果的shape是否符合广播规则。使用unsqueeze主动对齐维度是更安全的做法。6. 调试技巧与思维训练当维度错误发生时当你遇到一个维度相关的运行时错误时不要慌张。遵循以下排查路径立即打印形状在出错行前后打印所有相关张量的.shape。这是最直接有效的方法。手动模拟计算对于复杂的操作链在纸上或注释里写出每一步操作后的预期形状。特别是关注dim参数如何改变形状。使用einops库对于极其复杂的维度变换如reshape,permute,rearrangeeinops库提供了声明式的、更易读的接口能极大减少错误。# 传统方式 x x.permute(0, 2, 3, 1).reshape(batch, -1, channels) # 使用 einops from einops import rearrange x rearrange(x, b c h w - b (h w) c)理解函数的默认行为有些函数的dim有默认值。例如torch.sum(tensor)如果不指定dim会对所有元素求和返回一个标量。torch.softmax的dim参数通常必须指定。为了巩固理解这里有一个思维练习对于一个5维张量[batch, sequence, channel, height, width]如果我想计算每个通道在所有批次、序列和空间位置上的平均值应该怎么写 答案是torch.mean(tensor, dim(0, 1, 3, 4))。因为我们要聚合掉除了channeldim2以外的所有维度。7. 总结与最佳实践dim的理解是流畅使用PyTorch的基石。回顾一下核心要点dim是轴的索引从0开始对应shape元组的位置。指定dim意味着沿着该轴操作操作后该轴通常被聚合消失。keepdimTrue可以保留大小为1的维度便于后续广播。cat连接现有维度stack创建新维度。高维操作时使用元组指定多个dim如dim(2,3)。多用shape属性进行调试和验证。最后分享一个我个人的编码习惯在写任何涉及维度变化的函数尤其是cat,stack,sum,mean之前我会先用注释写下输入张量的shape和期望的输出shape。然后像做数学题一样根据dim的规则推导出操作后的形状并与期望对比。这个习惯帮我避免了至少80%的维度错误。当你对dim的直觉训练到一定程度后这些操作就会变得和呼吸一样自然。

相关新闻

从CLI到AG-UI:智能体交互范式的五层演进与技术架构解析

从CLI到AG-UI:智能体交互范式的五层演进与技术架构解析

1. 项目概述:从命令行到智能体交互的演进脉络最近和不少做AI应用开发的朋友聊天,发现大家经常被一堆缩写搞得晕头转向。CLI、MCP、A2A、A2UI、AG-UI……这些词频繁出现在各种技术文档和讨论里,听起来都挺“高大上”,但具体指什么、…

2026/8/11 5:32:52 阅读更多 →
AI Agent动态休眠与唤醒:基于任务调度与沙箱技术的资源优化方案

AI Agent动态休眠与唤醒:基于任务调度与沙箱技术的资源优化方案

1. 从“算力焦虑”到“资源精算”:AI Agent的效能革命最近和几个做AI Agent的朋友聊天,大家不约而同地提到了同一个词:“肉疼”。这疼的不是别的,是钱包。一个7B参数的模型,部署在云端GPU实例上,哪怕它大部…

2026/8/11 5:32:52 阅读更多 →
AI辅助大屏开发:从任务拆解到质量管控的实战指南

AI辅助大屏开发:从任务拆解到质量管控的实战指南

1. 从“AI画图”到“AI写代码”:大屏开发的新范式与核心矛盾 最近两年,AI在代码生成领域的能力突飞猛进,从最初的代码补全,到如今能根据自然语言描述生成一个完整的功能模块。对于数据可视化大屏这类“重前端、重UI、逻辑相对规整…

2026/8/11 5:32:52 阅读更多 →

最新新闻

2026年普惠性补充医疗保险市场结构性演进:多层次保障体系下的增长逻辑与转型挑战

2026年普惠性补充医疗保险市场结构性演进:多层次保障体系下的增长逻辑与转型挑战

据恒州诚思调研统计,2025年全球普惠性补充医疗保险市场规模约94.13亿元,预计至2032年将接近143.9亿元,对应未来六年6.3%的年复合增长率(CAGR)。全球医疗保健支出约占全球GDP的10%且呈持续上升态势,人口老龄…

2026/8/11 6:22:08 阅读更多 →
2026年全球葡萄酒追溯系统市场增长动能分析:区块链技术重构防伪溯源新格局

2026年全球葡萄酒追溯系统市场增长动能分析:区块链技术重构防伪溯源新格局

据恒州诚思统计数据显示,2025年全球葡萄酒追溯系统市场规模已达约29.25亿元,预计至2032年将稳步攀升至38.53亿元,对应未来六年间4.0%的年复合增长率(CAGR)。这一增长轨迹表明,葡萄酒追溯系统正从可选配置向…

2026/8/11 6:22:08 阅读更多 →
Python量化选股实战:基于 QuantDash 快速实现「均线金叉 + 倍量隐蔽启动」高胜率策略

Python量化选股实战:基于 QuantDash 快速实现「均线金叉 + 倍量隐蔽启动」高胜率策略

📌 摘要 / 快速解答 (Direct Answer) 本文针对量化交易中经典的“主力隐蔽吸筹/启动”场景,介绍如何利用 QuantDash Python SDK 的高性能前复权日 K 数据,在数秒内筛选出满足 MA5/MA20 均线金叉、当日成交量相比前一日放大 2 倍以上&#xff…

2026/8/11 6:22:08 阅读更多 →
从汇编视角解析C++编译器优化:常量折叠、内联与向量化实战

从汇编视角解析C++编译器优化:常量折叠、内联与向量化实战

1. 项目概述:为什么我们需要从汇编看C优化?干了十几年C开发,我见过太多程序员对编译器优化抱着一种“玄学”态度——开了O2/O3,代码就跑得快了,但具体快在哪里,编译器到底对我的代码动了什么手脚&#xff0…

2026/8/11 6:22:08 阅读更多 →
Linux软链接原理与实战:从ln命令到系统架构设计

Linux软链接原理与实战:从ln命令到系统架构设计

1. 项目概述:软链接,Linux世界的“快捷方式”在Linux世界里,文件系统管理是每个用户和开发者绕不开的基本功。当你面对一个深藏在/usr/local/lib/python3.11/site-packages/some_complex_package/下的核心配置文件,而你又需要频繁…

2026/8/11 6:22:08 阅读更多 →
HybridCLR:Unity原生C#热更新原理、接入与工程实践指南

HybridCLR:Unity原生C#热更新原理、接入与工程实践指南

1. 项目概述:为什么HybridCLR是Unity开发者的“必选项”?如果你是一名Unity开发者,并且你的项目生命周期超过三个月,那么“热更新”这个词对你来说,绝对不是一个陌生的概念。从早期的Lua、ILRuntime,到后来…

2026/8/11 6:21:08 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

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

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

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

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

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

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

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

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

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

2026/8/11 1:08:05 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/11 1:08:06 阅读更多 →
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/10 17:07:33 阅读更多 →