-
在操作系统安全领域,传统测试方法难以覆盖所有边界条件和并发场景。鸿蒙微内核为实现“无后门、无死锁”的可信底座,引入形式化验证(Formal Verification)技术,通过数学逻辑对关键模块进行端到端证明。这一过程并非理论空谈,而是与代码开发深度集成的工程实践。其核心方法是:将内核行为建模为状态机,用逻辑公式描述安全属性,再通过定理证明器自动验证这些属性是否恒成立。以进程间通信(IPC)模块为例,需确保以下安全不变式(Safety Invariants):权限隔离:非授权进程无法读取或篡改其他进程的消息;内存安全:消息传递不越界访问内核或用户内存;活性保障:发送方不会因接收方阻塞而永久挂起(无死锁)。上海交通大学团队为此构建了 FLYS 验证框架,其工作流程如下:# FLYS 框架伪代码示例class IPCVerifier: def __init__(self): # 1. 构建状态模型 self.state = StateModel( processes=Set[Process], message_queues=Dict[PortID, Queue[Message]], memory_map=Dict[Addr, Permission] ) # 2. 定义安全属性(Hoare 逻辑三元组) self.safety_rules = [ # 规则1:发送消息需持有目标端口能力 ForAll(p: Process, m: Message, Requires(p.has_capability(m.dst_port)), Ensures(m in self.message_queues[m.dst_port]) ), # 规则2:接收消息不能越界读取 ForAll(p: Process, port: PortID, Requires(p.is_bound_to(port)), Ensures(Not(OutOfBoundsAccess(p.recv_buffer))) ) ] def verify_ipc_send(self): # 3. 将C代码转换为逻辑公式 send_code_ir = translate_c_to_ir("ipc_send.c") # 4. 调用Z3求解器验证 result = z3_solver.prove( preconditions=self.safety_rules[0].pre, postconditions=self.safety_rules[0].post, program_logic=send_code_ir ) if not result.is_valid(): raise VerificationError("IPC send violates capability check")在实际开发中,该流程嵌入 CI/CD 管道:开发者提交微内核 C 代码;自动化工具提取函数逻辑,生成中间表示(IR);FLYS 框架加载预定义的安全规范;调用 Coq 或 Z3 进行自动推导;若验证失败,返回反例路径(如特定调度序列导致死锁)。例如,一段简化版的 IPC 发送函数:// 微内核 C 代码 (ipc_send.c)int ipc_send(port_t dst_port, void* data, size_t len) { // 获取调用者进程 process_t* sender = current_process(); // 检查能力令牌 if (!has_capability(sender, dst_port)) { return -EPERM; } // 拷贝数据到内核缓冲区(关键:长度校验) if (len > MAX_MSG_SIZE) { return -EINVAL; } memcpy(kernel_msg_buf, data, len); // 假设已校验用户地址有效性 // 入队并唤醒接收方 enqueue_message(dst_port, kernel_msg_buf, len); wake_up_receiver(dst_port); return 0;}形式化验证会重点检查:has_capability 是否在 memcpy 之前调用;len 是否被用于数组索引前已校验;wake_up_receiver 是否可能引发优先级反转死锁。经验证,鸿蒙微内核的 IPC、内存管理、中断处理等 12 个核心模块共 5.7 万行 C 代码,全部通过形式化验证,覆盖 100% 的安全属性。这意味着,只要硬件行为符合预期,这些模块在任何输入和并发调度下都不会违反安全规范。对开发者而言,这一过程透明但影响深远:不再需要手动编写大量边界测试用例;并发 bug 在编码阶段即被发现;安全审计从“找漏洞”变为“验证证明”。形式化验证不是替代测试,而是将安全保证提升到数学确定性层面。在万物互联时代,当汽车、医疗设备运行于同一内核之上,这种“可证明的安全”不再是奢侈品,而是必需品——鸿蒙微内核的形式化实践,正是对此的坚定回应。
-
在鸿蒙微内核架构中,进程间通信(IPC)是系统服务协同的核心通道。传统 Linux 使用 Binder 机制,数据需经内核缓冲区多次拷贝;而鸿蒙通过零拷贝共享内存(Zero-Copy Shared Memory)技术,将高频通信(如传感器数据流、图形缓冲区传递)的延迟降低至微秒级,性能达 Binder 的 3~5 倍。其核心思想是:避免数据在内核与用户空间之间复制,直接让多个进程映射同一物理内存页。以下通过一个传感器数据分发场景展示其实现逻辑。首先,在内核中注册共享内存区域:// 内核态 - 共享内存管理模块typedef struct { uint64_t phys_addr; // 物理地址 size_t size; pid_t owner_pid; // 创建者进程 uint32_t ref_count; // 引用计数} SharedMemRegion;SharedMemRegion* CreateSharedRegion(size_t size) { // 1. 分配连续物理页(不可换出) void* phys = AllocContiguousPages(size); // 2. 创建内核元数据 SharedMemRegion* reg = kmalloc(sizeof(SharedMemRegion)); reg->phys_addr = (uint64_t)phys; reg->size = size; reg->owner_pid = current->pid; reg->ref_count = 1; return reg;}// 返回共享内存句柄(非指针,防伪造)uint64_t GetSharedMemHandle(SharedMemRegion* reg) { return HashPointer(reg); // 映射为64位令牌}服务端(如 Sensor Service)创建共享缓冲区并发布句柄:// 用户态 - Sensor Serviceclass SensorBufferManager { std::map<uint64_t, void*> mapped_regions_; public: uint64_t AllocateSensorBuffer(size_t size) { // 1. 向内核申请共享内存 uint64_t handle = syscall(SYS_CREATE_SHARED_MEM, size); // 2. 将物理内存映射到本进程地址空间 void* local_ptr = mmap(nullptr, size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_HUGETLB, shared_mem_fd, handle); mapped_regions_[handle] = local_ptr; return handle; // 句柄可安全传递给客户端 } void WriteSensorData(uint64_t handle, const SensorData& data) { void* buf = mapped_regions_[handle]; memcpy(buf, &data, sizeof(data)); // 直接写入共享区 }};客户端(如健康应用)通过句柄接入同一内存:// ArkTS 应用层import ipc from '@ohos.ipc';class HealthApp { private bufferHandle: number = 0; private sharedBuffer?: ArrayBuffer; async connectToSensor() { // 1. 从 Sensor Service 获取共享内存句柄 this.bufferHandle = await sensorService.getSensorBufferHandle(); // 2. 通过系统 API 映射共享内存 try { this.sharedBuffer = await ipc.mapSharedMemory(this.bufferHandle); console.info('Shared memory mapped successfully'); // 3. 启动轮询读取(实际项目中应使用事件通知) this.startReading(); } catch (err) { console.error('Map shared memory failed:', err.message); } } private startReading() { const interval = setInterval(() => { if (this.sharedBuffer) { // 直接读取共享内存中的最新数据 const dataView = new DataView(this.sharedBuffer); const heartRate = dataView.getInt32(0, true); // 小端序 const timestamp = dataView.getBigUint64(8, true); this.updateUI(heartRate, Number(timestamp)); } }, 16); // ~60Hz }}整个过程无任何数据拷贝:传感器驱动将原始数据 DMA 到共享物理页;Sensor Service 仅更新元数据(如写入位置);客户端直接从同一物理页读取,延迟 < 5μs。为保障安全,系统实施严格管控:句柄验证:内核校验 handle 是否属于调用者有权访问的区域;权限隔离:仅同 UID 或显式授权的进程可映射;生命周期绑定:当所有引用释放后,自动回收物理内存。此外,对于大块数据(如图像帧),鸿蒙还支持 FD 传递(File Descriptor Passing):// 服务端发送 FDsendmsg_with_fd(client_sock, &msg, sensor_buffer_fd);// 客户端接收 FD 并 mmapint received_fd = recvmsg_with_fd(server_sock, &msg);void* frame = mmap(nullptr, size, PROT_READ, MAP_SHARED, received_fd, 0);这种零拷贝设计使鸿蒙在 AR/VR、实时音视频等高吞吐场景中具备显著优势——每秒数千次的传感器采样或 4K 视频帧传递,不再因 IPC 开销成为瓶颈。这不仅是性能优化,更是微内核“能力最小化”哲学的延伸:内核只提供安全的共享机制,数据流动由用户态自主控制。
-
鸿蒙系统采用微内核设计,将传统宏内核中的设备驱动、文件系统、网络协议栈等模块移至用户态服务进程,仅保留最核心的调度、IPC 与内存管理在内核中。这一架构遵循最小特权原则(Principle of Least Privilege):每个组件仅拥有完成其功能所必需的最小权限,从而大幅缩小攻击面。以摄像头访问为例,在传统 Linux 系统中,应用通过 v4l2 驱动直接操作硬件寄存器,一旦应用被攻破,攻击者可任意控制摄像头。而在鸿蒙微内核中,该流程被重构为多层隔离:// 内核态(<10KB 代码)// 仅提供基础能力:内存映射、中断通知、IPC 通道void Kernel_Camera_IRQHandler() { // 仅唤醒用户态 Camera Service,不处理数据 SendIPCMessage(CAMERA_SERVICE_PID, IRQ_EVENT);}int sys_ipc_send(pid_t to, void* msg, size_t len) { // 内核只负责消息传递,不解析内容 return CopyMessageToProcess(to, msg, len);}所有业务逻辑运行在用户态的 Camera Service 中:// 用户态 Camera Service(独立进程)class CameraService {private: int camera_fd_; // 仅此进程持有真实设备句柄 std::map<uid_t, AccessToken> access_tokens_;public: void HandleClientRequest(const IPCMessage& msg) { // 1. 验证调用者身份 uid_t caller_uid = GetCallingUid(msg.from_pid); // 2. 检查权限令牌 if (!HasValidToken(caller_uid)) { RejectRequest(msg); // 直接拒绝 return; } // 3. 执行安全封装操作 switch (msg.cmd) { case CMD_START_PREVIEW: StartPreviewSafely(); // 内部做参数校验 break; case CMD_CAPTURE_FRAME: CaptureFrameWithBoundsCheck(); // 防止缓冲区溢出 break; } } bool HasValidToken(uid_t uid) { // 令牌由系统服务颁发,绑定应用签名与权限声明 auto it = access_tokens_.find(uid); return (it != access_tokens_.end() && !it->second.expired()); }};应用层则通过受控接口请求服务:// ArkTS 应用代码import camera from '@ohos.multimedia.camera';async function startCamera() { try { // 系统弹窗请求用户授权("仅本次允许"选项) const cameraManager = await camera.getCameraManager(); const cameraObj = await cameraManager.createCamera('front'); // 所有操作经 IPC 转发至 Camera Service await cameraObj.startPreview(); } catch (err) { // 权限被拒或服务不可用 console.error('Camera access denied:', err.message); }}整个链路的安全保障体现在三层:内核隔离:应用无法直接访问硬件,所有操作必须通过 IPC;服务沙箱:Camera Service 运行在独立进程,崩溃不影响系统;动态授权:即使应用声明了摄像头权限,仍需用户实时确认,且可限制为“仅本次”。此外,关键服务(如生物识别、支付)进一步运行在 TEE(可信执行环境)中。例如指纹验证:// TEE 内部(硬件级隔离)bool VerifyFingerprintInTEE(uint8_t* template, uint8_t* sample) { // 原始指纹数据永不离开 TEE return HardwareAcceleratedMatch(template, sample);}// REE(普通世界)只能发送加密请求int send_fingerprint_request(void* encrypted_data) { return smc_call(SMC_TEE_VERIFY_FP, encrypted_data); // 触发安全监控调用}这种“微内核 + 用户态服务 + TEE”三层纵深防御,使得单点漏洞难以横向移动。即便攻击者控制了某个应用,也无法绕过 IPC 边界访问其他设备;即使攻破了 Camera Service,也因无内核权限而无法提权。据华为官方披露,鸿蒙微内核代码量仅为 Linux 内核的千分之一,形式化验证覆盖率达 100%,从数学上证明了无后门、无死锁。这不仅是架构选择,更是对“安全即默认”理念的工程践行——在万物互联时代,信任不应建立在假设之上,而应由最小化、可验证的代码基石支撑。
-
在鸿蒙应用启动性能优化中,方舟编译器(Ark Compiler)摒弃了传统 Android 的“解释执行 + JIT”模式,转而采用 AOT(Ahead-Of-Time)与 JIT(Just-In-Time)混合编译策略,在安装时预编译热点代码,运行时动态优化长尾逻辑,从而兼顾启动速度与内存效率。这一机制的核心在于分层编译决策:安装阶段通过静态分析识别高频路径,生成高度优化的机器码;运行阶段则对未覆盖或动态生成的代码进行轻量级 JIT 编译,并根据实际执行反馈进行再优化。当用户安装一个 .hap 应用包时,系统会触发 Quick Install Compile 阶段:# 系统后台自动执行(开发者不可见)ark_aot_compiler \ --input app.abc \ # ArkTS 字节码 --output app.oat \ # 优化后的机器码 --profile hot_methods.prof # 基于历史使用数据的热点预测该过程利用调用图分析与类型推断,对以下内容进行深度优化:内联小函数(如 getter/setter)消除冗余空值检查将虚方法调用转为直接调用(若类型确定)向量化简单循环(如数组遍历)例如,一段 ArkTS 代码:function sumArray(arr: number[]): number { let sum = 0; for (let i = 0; i < arr.length; i++) { sum += arr[i]; } return sum;}经 AOT 编译后,可能生成类似如下 ARM64 汇编(简化示意):; 循环展开 + NEON 向量化ldr x0, [x1] ; 加载数组指针mov v0.4s, #0 ; 初始化累加寄存器loop: ldr q1, [x0], #16 ; 一次加载4个float fadd v0.4s, v0.4s, v1.4s subs x2, x2, #4 ; 计数减4 bne loop; 最终归约...这使得该函数在首次调用时即达峰值性能,无需运行时预热。然而,并非所有代码都适合 AOT。对于低频或动态路径(如异常处理、插件代码),方舟运行时保留 轻量级 JIT 能力:// Ark Runtime 内部逻辑(伪代码)void ExecuteBytecode(Bytecode* bc) { if (IsHotMethod(bc)) { // 已 AOT 编译,直接跳转机器码 JumpToAotCode(bc->aot_entry); } else { // 首次执行:快速 JIT 编译 void* jit_code = QuickJitCompile(bc); bc->jit_entry = jit_code; Call(jit_code); // 若后续频繁调用,触发深度优化 if (bc->call_count > JIT_OPT_THRESHOLD) { ScheduleDeepOptimization(bc); } }}这种混合策略带来显著收益:启动加速:主界面渲染路径已 AOT 优化,冷启动时间减少 30%;内存节省:仅 JIT 编译实际执行的代码,避免全量 AOT 的存储膨胀;持续优化:运行时收集的 profile 可用于下次安装时的 AOT 决策,形成闭环。对开发者而言,无需显式干预编译过程,但可通过以下方式辅助优化:避免动态 eval() 或 Function 构造:阻碍静态分析;使用明确类型注解:提升类型推断准确率;减少巨型函数:利于内联与向量化。最终,方舟编译器将“何时编译”“如何优化”的复杂性封装于系统层,让应用天然具备高性能基因——这正是鸿蒙追求“天生流畅”的底层支撑之一。
-
在鸿蒙的 ArkUI 声明式框架中,开发者不再通过命令式代码控制界面元素的位置与尺寸,而是描述“UI 应该是什么样子”,系统根据设备形态、屏幕尺寸和用户状态自动调整布局。这种 UI = f(state) 的范式,使得一套代码可无缝适配手机、平板、手表甚至车机。以下通过一个媒体控制面板示例,展示如何利用 ArkUI 的自适应能力实现多端兼容。@Entry@Componentstruct MediaPlayer { @State isPlaying: boolean = false; @State volume: number = 70; @State currentTime: string = '02:15'; @State totalTime: string = '04:30'; build() { // 根容器根据屏幕宽度自动选择布局方向 Column() { // 专辑封面区域:固定宽高比 Image($r('app.media.album_cover')) .objectFit(ImageFit.Cover) .aspectRatio(1.0) // 保持 1:1 宽高比 .margin(16) // 歌曲信息:文本自适应换行 Text('Moonlight Sonata') .fontSize(24) .fontWeight(FontWeight.Bold) .maxLines(2) .textOverflow({ overflow: TextOverflow.Ellipsis }) .padding({ horizontal: 16 }) Text('Ludwig van Beethoven') .fontSize(16) .fontColor('#666666') .padding({ horizontal: 16, bottom: 24 }) // 进度条区域 Column() { Slider({ value: 45, min: 0, max: 100, step: 1 }) .width('90%') .padding({ bottom: 8 }) Row() { Text(this.currentTime) .fontSize(12) .fontColor('#999999') Spacer() Text(this.totalTime) .fontSize(12) .fontColor('#999999') } .width('90%') } // 控制按钮组:根据可用空间动态排列 this.buildControlButtons() .padding(24) } .width('100%') .height('100%') } @Builder buildControlButtons(): some View { // 获取当前窗口宽度 const windowWidth = getContext(this).config?.window?.width || 360; if (windowWidth > 600) { // 平板/大屏模式:横向排列,带文字标签 return Row() { this.controlButton($r('app.media.icon_repeat'), 'Repeat') this.controlButton($r('app.media.icon_prev'), 'Previous') this.playPauseButton() this.controlButton($r('app.media.icon_next'), 'Next') this.controlButton($r('app.media.icon_shuffle'), 'Shuffle') } .justifyContent(FlexAlign.Center) .gap(24); } else { // 手机模式:紧凑图标排列 return Row() { Image($r('app.media.icon_repeat')).width(24).height(24) Image($r('app.media.icon_prev')).width(32).height(32) this.playPauseButton() Image($r('app.media.icon_next')).width(32).height(32) Image($r('app.media.icon_shuffle')).width(24).height(24) } .justifyContent(FlexAlign.SpaceBetween) .width('80%'); } } @Builder playPauseButton(): Image { return Image(this.isPlaying ? $r('app.media.icon_pause') : $r('app.media.icon_play')) .width(48) .height(48) .onClick(() => { this.isPlaying = !this.isPlaying; }); } @Builder controlButton(icon: Resource, label: string): Column { return Column() { Image(icon).width(20).height(20) Text(label) .fontSize(10) .fontColor('#333333') .lineHeight(12) } .alignItems(HorizontalAlign.Center) .onClick(() => { console.log(`${label} clicked`); }); }}上述代码通过三个关键机制实现自适应:响应式查询:getContext(this).config?.window?.width 获取当前窗口尺寸,在构建时决定布局结构;弹性容器:Column 与 Row 自动填充可用空间,Spacer() 推动子元素分布;约束属性:aspectRatio 保持比例,maxLines 限制文本高度,objectFit 控制图片裁剪。更进一步,ArkUI 支持 媒体查询(Media Query)语法,可声明式定义不同断点下的样式:build() { Column() { // ... } .mediaQuery([ { condition: '(min-width: 600px)', style: { padding: { left: 48, right: 48 } } }, { condition: '(orientation: landscape)', style: { flexDirection: FlexDirection.Row } } ])}此外,系统还提供 栅格布局(GridRow/GridCol)用于复杂页面:GridRow() { GridCol({ span: { xs: 4, sm: 6, md: 8, lg: 12 } }) { VideoPlayer() } GridCol({ span: { xs: 4, sm: 6, md: 4, lg: 4 } }) { Playlist() }}其中 xs/sm/md/lg 对应不同屏幕宽度区间,系统自动选择最匹配的列数。这种自适应能力不仅减少重复代码,更确保用户体验一致性——无论在 1.5 英寸手表还是 32 英寸智慧屏上,应用都能以最合理的方式呈现内容。这正是声明式 UI 框架将“设备适配”从开发者负担转化为系统能力的核心价值。
-
在鸿蒙生态中,用户数据需在手机、平板、手表等设备间无缝流转。分布式数据管理(Distributed Data Management)为此提供统一抽象,其中 KVStore 作为非结构化数据的存储载体,支持基于设备信任关系的自动同步。开发者无需关心网络传输细节,仅通过本地 API 操作,即可实现多端数据一致。以下展示如何创建一个跨设备同步的键值数据库,并监听远程变更。首先,在 module.json5 中声明数据同步权限:{ "module": { "requestPermissions": [ { "name": "ohos.permission.DISTRIBUTED_DATASYNC" } ] }}接着,在 ArkTS 中初始化分布式 KVStore:import { distributedData } from '@ohos.data.distributedData';import { BusinessError } from '@ohos.base';@Entry@Componentstruct NoteSyncApp { private kvStore?: distributedData.KVStore; private notes: Array<{ id: string, content: string }> = []; aboutToAppear() { this.initKVStore(); } private async initKVStore() { try { // 创建 KVManager 实例 const manager = distributedData.createKVManager({ bundleName: 'com.example.notes' }); // 配置分布式 KVStore const options: distributedData.KVStoreOptions = { createType: distributedData.KVStore.CREATE_TYPE_SINGLE_VERSION, encrypt: false, backup: false, autoSync: true, // 关键:启用自动同步 kvStoreType: distributedData.KVStore.KV_STORE_TYPE_DEVICE_COLLABORATION }; // 获取 KVStore 实例 this.kvStore = await manager.getKVStore('user_notes', options); // 监听本地及远程数据变更 this.kvStore.on('dataChange', distributedData.KVStore.SubscribeType.SUBSCRIBE_TYPE_ALL, (mutations: distributedData.KVMutation[]) => { console.info(`Received ${mutations.length} changes`); this.handleDataChanges(mutations); } ); // 初次加载所有笔记 await this.loadAllNotes(); } catch (err) { console.error('Failed to init KVStore:', (err as BusinessError).message); } } private async loadAllNotes() { if (!this.kvStore) return; try { // 获取所有键 const keys = await this.kvStore.getKeys(''); const newNotes: typeof this.notes = []; for (const key of keys) { if (key.startsWith('note_')) { const value = await this.kvStore.getString(key, ''); newNotes.push({ id: key, content: value }); } } this.notes = newNotes; this.updateUI(); // 触发界面刷新 } catch (err) { console.error('Load notes failed:', (err as BusinessError).message); } } private handleDataChanges(mutations: distributedData.KVMutation[]) { let needReload = false; for (const mutation of mutations) { if (mutation.key.startsWith('note_')) { if (mutation.value === null) { // 删除操作 this.notes = this.notes.filter(note => note.id !== mutation.key); } else { // 新增或更新 const existingIndex = this.notes.findIndex(note => note.id === mutation.key); if (existingIndex >= 0) { this.notes[existingIndex].content = mutation.value as string; } else { this.notes.push({ id: mutation.key, content: mutation.value as string }); } } needReload = true; } } if (needReload) { this.updateUI(); } } private async addNewNote(content: string) { if (!this.kvStore) return; const noteId = `note_${Date.now()}`; try { // 写入即触发同步(因 autoSync=true) await this.kvStore.putString(noteId, content); console.info(`Note ${noteId} saved and synced`); } catch (err) { console.error('Save note failed:', (err as BusinessError).message); } } private async deleteNote(noteId: string) { if (!this.kvStore) return; try { await this.kvStore.delete(noteId); } catch (err) { console.error('Delete note failed:', (err as BusinessError).message); } } private updateUI() { // 在实际 ArkUI 中,可通过 @State 或全局状态触发重绘 } build() { Column() { // 笔记列表 UI List() { ForEach(this.notes, (note) => { ListItem() { Text(note.content).padding(10) Button('Delete').onClick(() => this.deleteNote(note.id)) } }, item => item.id) } // 添加新笔记 TextInput({ placeholder: 'Enter new note...' }) .onChange((value) => { if (value.endsWith('\n')) { this.addNewNote(value.trim()); } }) } .padding(16) }}该实现的关键在于 autoSync: true 配置。一旦启用,系统将:自动发现同账号下其他在线设备;建立加密通道(基于设备证书);增量同步变更数据(仅传输差异部分);冲突解决:采用“最后写入胜出”(Last Write Wins)策略,时间戳由系统统一校准。值得注意的是,所有 API 调用均为异步,但对开发者而言,操作体验如同本地数据库。当用户在手机上新增一条笔记,平板端几乎实时收到 dataChange 事件并更新 UI,整个过程无需手动触发同步或处理网络异常。这种“透明分布式”设计,正是鸿蒙将复杂协同逻辑下沉至系统层,向上提供简洁编程模型的典型体现——让数据自由流动,而代码专注业务。
-
在鸿蒙的分布式生态中,用户期望应用体验不被单一设备束缚。例如,手机上开始的视频会议可无缝迁移到智慧屏,健身应用可将手表的心率数据与电视的指导画面协同呈现。这一能力由分布式任务调度(Distributed Task Scheduling)提供支撑,其核心是将多设备虚拟为一个“超级终端”,并动态迁移或协同执行应用任务。开发者可通过 @ohos.ability.runtime 模块实现跨设备任务迁移。以下以视频播放场景为例,展示如何将播放任务从手机迁移到智慧屏。首先,在 module.json5 中声明支持迁移的能力:{ "module": { "abilities": [ { "name": "VideoPlayerAbility", "type": "page", "launchType": "standard", "continuable": true, "skills": [ { "entities": ["entity.system.home"], "actions": ["action.system.home"] } ] } ] }}关键字段 continuable: true 告知系统该 Ability 支持跨设备迁移。接着,在页面逻辑中实现迁移触发与状态同步:import UIAbility from '@ohos.app.ability.UIAbility';import distributedDeviceManager from '@ohos.distributedHardware.deviceManager';import { BusinessError } from '@ohos.base';@Entry@Componentstruct VideoPlayerPage { private currentVideoUri: string = 'file:///data/media/sample.mp4'; private playbackPosition: number = 0; // 播放进度(毫秒) private dm?: distributedDeviceManager.DeviceManager; private targetDeviceId: string = ''; aboutToAppear() { // 初始化设备管理器 try { this.dm = distributedDeviceManager.createDeviceManager('com.example.videoplayer'); } catch (err) { console.error('Create DeviceManager failed'); return; } // 获取可信设备列表(已配对的智慧屏、平板等) this.dm.getTrustedDeviceList((err: BusinessError, devices: Array<distributedDeviceManager.DeviceInfo>) => { if (!err && devices.length > 0) { // 假设第一个设备为目标(实际应由用户选择) this.targetDeviceId = devices[0].deviceId; } }); } build() { Column() { Video({ src: this.currentVideoUri, startTime: this.playbackPosition }) .width('100%') .height(300) Button('迁移到大屏') .onClick(() => this.migrateToRemoteDevice()) .margin({ top: 20 }) } .padding(16) } private migrateToRemoteDevice() { if (!this.targetDeviceId) { console.warn('No target device available'); return; } // 构建迁移参数:携带当前播放状态 const continuationExtraParams = { videoUri: this.currentVideoUri, position: this.playbackPosition.toString() }; // 调用 AbilityContinuationManager 发起迁移 try { const abilityContext = getContext(this) as common.UIAbilityContext; abilityContext.abilityContinuationManager?.continueAbility( this.targetDeviceId, continuationExtraParams, (result: number) => { if (result === 0) { console.info('Migration request sent successfully'); // 可选择在本地暂停播放 this.pauseLocalPlayback(); } else { console.error('Migration failed with code:', result); } } ); } catch (err) { console.error('Exception during migration:', JSON.stringify(err)); } } private pauseLocalPlayback() { // 实际项目中应调用视频组件的暂停方法 console.log('Local playback paused'); }}在目标设备(如智慧屏)端,需实现 onContinueAbilityRequest 回调以接收迁移任务:// 在智慧屏端的 UIAbility 中export default class VideoPlayerAbility extends UIAbility { onContinueAbilityRequest(wantParam: Record<string, Object>): boolean { // 验证来源设备是否可信(可选) const sourceDevice = wantParam['ohos.continuation.sourceDeviceId'] as string; if (!this.isTrustedDevice(sourceDevice)) { return false; // 拒绝迁移 } // 解析迁移参数 const videoUri = wantParam['videoUri'] as string; const position = parseInt(wantParam['position'] as string, 10); // 启动本地播放器并恢复状态 this.startVideoPlayback(videoUri, position); return true; // 接受迁移 } private isTrustedDevice(deviceId: string): boolean { // 实际可查询设备管理服务验证信任关系 return true; } private startVideoPlayback(uri: string, pos: number) { // 启动播放页面并传入参数 const want = { deviceId: '', bundleName: 'com.example.videoplayer', abilityName: 'VideoPlayerPage', parameters: { videoUri: uri, startPosition: pos } }; this.context.startAbility(want); }}整个迁移过程由系统自动保障:状态一致性:通过 continuationExtraParams 传递关键状态;网络通道:底层使用分布式软总线建立高带宽连接,确保迁移指令低延迟送达;权限控制:仅同账号下已认证设备可发起/接受迁移;失败回退:若目标设备拒绝或离线,本地任务继续运行,无感知中断。这种机制使得应用无需关心设备拓扑变化,只需声明“可迁移”并处理状态同步,即可获得跨设备连续性体验。这正是鸿蒙“一次开发,多端部署”理念在运行时层面的深度体现——设备边界消融,服务随人而动。
-
在鸿蒙的分布式架构中,分布式软总线(DSoftBus)是实现多设备无缝协同的通信底座。其核心能力之一,是在用户无感的前提下,自动发现周边可信设备并建立安全连接。这一过程融合了网络扫描、身份认证与拓扑管理,开发者仅需调用高层 API 即可接入“超级终端”网络。以下通过 ArkTS 代码展示如何在应用中监听并加入可信设备组。首先,应用需声明分布式组网权限:// module.json5{ "module": { "requestPermissions": [ { "name": "ohos.permission.DISTRIBUTED_DATASYNC" }, { "name": "ohos.permission.GET_DISTRIBUTED_DEVICE_INFO" } ] }}随后,在业务逻辑中初始化设备管理器并注册发现回调:import deviceManager from '@ohos.distributedHardware.deviceManager';import { BusinessError } from '@ohos.base';@Entry@Componentstruct DeviceDiscoveryView { private trustedDevices: Array<{ deviceId: string, deviceName: string }> = []; private dm?: deviceManager.DeviceManager; aboutToAppear() { // 获取设备管理器实例 try { this.dm = deviceManager.createDeviceManager('com.example.myapp'); } catch (err) { console.error('Failed to create DeviceManager:', (err as BusinessError).message); return; } // 注册设备发现监听器 this.dm.on('deviceFound', (deviceInfo) => { console.info(`New device found: ${deviceInfo.deviceName} (${deviceInfo.deviceId})`); // 检查设备是否已认证(属于同一华为账号) if (deviceInfo.isTrusted) { this.trustedDevices.push({ deviceId: deviceInfo.deviceId, deviceName: deviceInfo.deviceName }); // 触发UI更新 this.updateUI(); } }); // 启动设备发现(持续扫描) this.startDeviceDiscovery(); } private startDeviceDiscovery() { if (!this.dm) return; const subscribeInfo: deviceManager.SubscribeInfo = { subscribeId: 1001, mode: deviceManager.DiscoverMode.DISCOVER_MODE_ACTIVE, medium: deviceManager.ExchangeMedium.EXCHANGE_MEDIUM_WIFI, protocol: deviceManager.ExchangeProtocol.EXCHANGE_PROTOCOL_BLE, encode: deviceManager.EncodeType.ENCODE_TYPE_JSON, frequency: deviceManager.DiscoveryFrequency.LOW }; this.dm.startDeviceDiscovery(subscribeInfo, (err: BusinessError) => { if (err) { console.error('Start discovery failed:', err.message); } else { console.info('Device discovery started'); } }); } private updateUI() { // 在ArkUI中触发状态更新 // 实际项目中可通过@State或全局状态管理实现 } build() { Column() { Text('Trusted Devices') .fontSize(20) .fontWeight(FontWeight.Bold) .margin(16) List() { ForEach(this.trustedDevices, (item) => { ListItem() { Row() { Text(item.deviceName) .fontSize(16) Spacer() Button('Connect') .onClick(() => this.establishConnection(item.deviceId)) .margin({ right: 16 }) } .padding(12) } }, item => item.deviceId) } .width('100%') } .padding(16) } private establishConnection(deviceId: string) { if (!this.dm) return; // 建立P2P连接(底层由DSoftBus自动选择最优传输通道) this.dm.authenticateDevice(deviceId, (err: BusinessError, authParam?: deviceManager.AuthParam) => { if (err) { console.error('Authentication failed:', err.message); return; } // 连接成功后,可进行数据传输或任务调度 console.info(`Secure connection established with ${deviceId}`); // 示例:发送一条测试消息 this.sendDataToDevice(deviceId, 'Hello from ArkTS!'); }); } private sendDataToDevice(deviceId: string, message: string) { // 实际数据传输通常通过分布式数据管理或文件服务完成 // 此处仅为示意流程 console.log(`Sending to ${deviceId}: ${message}`); }}在上述代码中,deviceManager 模块封装了分布式软总线的底层细节:自动网络适配:medium 和 protocol 字段指定发现媒介(如 Wi-Fi + BLE),但实际通信时 DSoftBus 会根据设备能力动态切换至最优链路(如 Wi-Fi Direct 或以太网);信任关系校验:isTrusted 字段由系统基于华为账号体系与设备证书链验证,确保仅同账户设备可见;低功耗设计:frequency: LOW 表示使用 BLE 广播进行唤醒,仅在需要高带宽时才激活 Wi-Fi P2P。值得注意的是,整个发现与连接过程无需用户手动配对或输入密码。一旦设备登录同一账号并开启蓝牙/Wi-Fi,软总线便在后台完成密钥协商与通道建立,为上层提供类本地 IPC 的通信体验。这种“无感组网”能力,正是鸿蒙实现“超级终端”的第一步——让设备像器官一样自然协同,而非孤立的硬件集合。
-
在多设备协同场景中,用户常需在手机、平板或智慧屏之间共享大型媒体文件或工程文档。传统方案要求完整拷贝,不仅耗时,还浪费存储空间。鸿蒙的分布式文件服务(Distributed File Service, DFS)通过按需加载(On-Demand Loading)技术,实现了“远程文件本地化访问”的体验——用户看到的是完整文件,系统却只在必要时传输所需数据块。这一能力的核心在于虚拟文件句柄与分段缓存策略的协同设计。当应用通过标准 URI 访问远程文件时,DFS 并不会立即拉取全部内容,而是创建一个轻量级代理对象:// 应用层代码:如同访问本地文件const fileUri = 'dfs://device_xxx/document.pdf';const fd = await fileIO.open(fileUri, fileIO.OpenMode.READ_ONLY);// 读取第100KB处的4KB数据const buffer = new ArrayBuffer(4096);await fileIO.read(fd, buffer, { offset: 100 * 1024 });在底层,DFS 拦截该请求并执行以下流程:元数据预取:首次打开文件时,仅同步文件头信息(大小、修改时间、校验和),耗时 <50ms;分块索引构建:将文件逻辑划分为固定大小块(默认 64KB),建立块偏移到远程地址的映射表;懒加载触发:当 read 调用指定偏移量时,计算所属数据块,向源设备发起精准请求;本地缓存写入:接收到的数据块暂存于设备高速缓存区,并更新本地索引;后续访问加速:若再次读取同一区域,直接从缓存返回,避免网络往返。为保障流畅性,DFS 还引入智能预读机制。例如,当用户连续读取视频文件的前几个 GOP(Group of Pictures)时,系统会预测播放趋势,提前加载后续关键帧数据块,确保 4K 视频在跨设备播放时不卡顿。对于写操作,DFS 采用延迟提交策略:修改先写入本地临时副本;应用调用 flush() 或 close() 时,才将差异块同步至源设备;支持断点续传:若传输中断,下次打开时自动校验已传块,仅重传缺失部分。安全方面,所有数据传输均通过设备证书建立的 TLS 通道加密,且文件访问权限继承自分布式数据管理的信任模型——只有已被授权的设备才能发起按需加载请求。
-
1月24日,中国司法人工智能大会(CJAI2026)在上海召开,清华大学互联网司法研究院通过“华为AI百校计划”的算力支持行动,正式发布基于华为云昇腾AI云服务研发的开源法律大模型LegalOne-R1,推动司法智能化迈向新高度。 “LegalOne-R1具有1.7B、4B和8B三个不同参数的版本,是针对我国的司法数据进行训练的生成式法律大模型。”清华大学互联网司法研究院院长、计算机系教授刘奕群在发布现场介绍了模型的研发情况和创新价值。LegalOne-R1 是一款面向法律场景的高性能推理模型,通过“中端训练+后训练”双阶段增强,融合指令微调与强化学习,高效注入法律知识、模拟专业工作流,实现法律思维的涌现。模型在保障通用能力的前提下,精准掌握条文记忆、概念辨析、多跳推理与裁判逻辑,在真实业务中更稳、更准、更可用。LegalOne-R1的训练,得到了“华为AI百校计划”的稳定算力支持;还得到了互联网体系结构全国重点实验室上海分室、泉城省实验室和麦伽智能等产业合作伙伴的大力支持。在公开评测集合上,LegalOne-R1-8B在法律专业能力上表现突出。在LexEval、LawBench、JecQA等评测集上,LegalOne-R1-8B的整体表现对标参数规模显著更大的通用模型,在法律概念理解、法条记忆性、多跳推理等关键任务上达到当前开源模型的领先水平。LegalOne-R1“小参数、强推理”的特性将显著降低司法机关与法律科技企业应用法律大模型的门槛与算力成本:在1.7B、4B、8B等不同尺寸模型上完成系统评测后,LegalOne-R1以8B量级即可逼近更大规模通用模型的法律专业能力上限,为更广泛的本地化部署与行业集成打开空间。技术适配层面,华为云昇腾AI云服务整合大规模算力集群、计算引擎CANN、AI 开发框架MindSpore、ModelArts AI 开发生产线和ModelArts Studio大模型即服务平台,为大模型的训练、推理,AI 应用的开发、运行提供稳定可靠的全栈算力保障。在训练中,昇腾AI云服务为LegalOne-R1模型从数据预处理、模型训练到推理部署的全流程提供了关键的全栈支持,不仅保障了多规格参数模型的高效训练与轻量化推理需求,更精准匹配了司法场景对数据安全与合规的全生命周期要求。此次科研成果,显著推动了法律AI的普惠化应用,更为国内垂直领域专用模型的发展树立了可复制、可推广的创新范式。未来,华为云将进一步扩大高校合作“朋友圈“,以开放姿态持续支持高校科研团队进行科研创新,共同探索AI世界的新边界。
-
各位亲爱的版主们,大家好!经过大家一个月的努力角逐,12月外部版主激励评比结果已出炉,数据公示如下,请查看!·外部版主激励规则:点击了解更多转正礼/基础任务/额外任务(在线时长15小时+,主题帖15+,回帖30+,技术长文5+/原创技术干货1+,合集1+,有效回复问题求助帖10+,话题互动1+,完成这4项指标可获对应价值的代金券/实物礼品)请完成任务获得激励的版主,点击填写激励发放意愿统计问卷反馈截止时间:2026年2月20日,以便小编进行相应的激励发放。如若对统计有问题,可私信联系小助手~~~
-
说起来,2025年刚结束的时候,我在即刻上发了一条动态:"回想一下年初写的AI预测文章,现在看真是挺惭愧的。好多事情,我压根没想到会这么快发生。"这条动态引起了不少共鸣。评论区里有人说:"我也一样,年底回看年初,感觉像是过了十年。"为什么会有这种感觉呢?我想了很久,觉得核心原因可能是:2025年,AI完成了一次质变。不是参数更大了,不是评测分数更高了,而是从"能用"变成了"好用"。什么是"能用"到"好用"?先说说什么是"能用"。2023年下半年到2024年初,大模型确实能用。你可以用GPT-4写文案,用Claude写代码,用Midjourney画图。但问题是,你知道它在哪些地方会翻车,哪些事情不能让它做。比如,你不能让它分析一个很长的PDF,因为经常漏看关键信息。你不能让它写一个完整的项目,因为它会编造一些不存在的API。你不能把它接入你的真实工作流,因为不可控。这时候,AI更像一个"会聊天但不太靠谱的助手"。你有空的时候,可以让它帮点小忙。但真正重要的事情,还是得靠自己。那什么是"好用"呢?2025年,AI开始变得可靠。你可以放心让它处理长文档,因为它学会了在几百页的内容里精准定位信息。你可以让它接手复杂任务,因为它学会了规划步骤、调用工具、在出错时自我纠正。你可以把它集成到真实工作流,因为它的行为变得可预测、可追溯。我最近用的一个例子是Claude Code。年初的时候,我还会担心它改的代码会不会有bug,但现在,我基本上已经可以放心让它改一些关键模块了。不是因为我盲目信任,而是我确实看到,它的代码质量和错误处理能力提升非常明显。这种"从谨慎使用到放心使用"的转变,就是从"能用"到"好用"的质变。四个关键突破要理解2025年为什么会有这个质变,得从四个关键技术突破说起。1. 推理能力:从"模仿"到"思考"2025年最让我意外的,是AI推理能力的提升。说起来,年初的时候,我对"AI能否真正思考"这个问题还持怀疑态度。那时候主流的做法是CoT,就是在prompt里加一句"请一步一步思考",然后模型会输出一串推理过程。但这更像是"模仿思考",不是真正理解DeepSeek在1月份发布的R1模型,改变了我的看法。他们的团队在论文里提到一个很有意思的现象:在训练的某个阶段,模型突然开始大量使用"wait"、"retry"、"verify"这些词。简单说,模型在训练中学会了"停下来想一想"。这个变化不是prompt工程师教它的,而是通过强化学习自己学会的。DeepSeek团队后来在Nature杂志上发表了论文,详细披露了整个过程。他们用671B参数的MoE架构,但每次推理只激活37B参数,激活率约5.5%。这把推理成本降低了60%,而且整个增量训练成本只有29.4万美元。这个数字还挺猛的。要知道,OpenAI训练GPT-4的成本据说超过1亿美元。DeepSeek用不到GPT-4三分之一的成本,做出了一个推理能力接近GPT-5的模型,更让我意外的是,他们把所有训练细节都公开了。从失败尝试到中间检查点,从RL训练架构到消融实验,一共86页论文,把原本藏在黑箱里的东西全部展现出来。这个透明度,在整个AI行业都是空前的。紧随其后,OpenAI在GPT-5中推出了"扩展推理能力",Anthropic发布了O1推理模型,国内也有一批开源推理模型出现。2025年,推理能力变成了超一线模型的核心战场。这些模型不再是"模仿思考",而是真的在思考。2. 多模态:从"拼接"到"原生"第二个突破,是多模态。说起来,多模态不是新概念了。早在2022年,就有CLIP、Stable Diffusion这些能理解图像的模型。但2025年的变化在于,多模态从"拼接式"进化到了"原生式"。什么意思呢?早期的多模态模型,是用几个独立的编码器分别处理不同模态。比如用一个视觉模型处理图像,用一个语言模型处理文本,然后通过一个"连接层"把它们对齐。这就像两个人各说各的,中间有个翻译在沟通。虽然能交流,但信息在传递过程中会大量丢失。2025年的原生多模态模型,比如GPT-4o、通义千问2.5-VL,采用了完全不同的架构。它们把所有模态的数据——文本、图像、音频、视频——都转换成统一的"token",然后用同一个模型处理。这就像给了一个"通用的语言",让模型能够真正理解不同模态之间的关系,而不是简单地拼接。豆包大模型1.6 Vision就是一个很好的例子。他们通过动态推理+多模态融合,在工业质检场景下检测准确率达到98.7%,比上一代提升了12个百分点。更让我印象深刻的是通义千问的实时翻译系统。它不仅翻译文字,还能看口型、识别人物表情,在嘈杂环境下准确率达到94%,比传统模型提升20%而且它能区分一些很容易混淆的词。比如"mask"(口罩)和"Musk"(马斯克),通过口型识别就能精准区分,专有名词翻译准确率达到99.2%。这种理解能力的提升,让多模态从一个"加分项",变成了基础大模型的"标配"。 3. Agent:从"聊天"到"行动"第三个突破,是Agent。2025年被称为"Agent元年",这不是空话。因为Agent确实从概念走到了规模化商用。说起来,年初的时候,我对Agent还持观望态度。那时候的Agent更多是"能调几个工具的聊天机器人",可靠性不高,难以真正替代人类完成复杂任务。但2025年,情况完全变了。我印象最深的是阿里巴巴在下半年发布的千问App。它能同时接入外卖、购物、订票等多个系统,用户说一句话,它就能在后台完成查机酒、选商品、备补给、支付的全流程。这不是简单的"从A入口导向B App",而是以Agent的形式,在后台完成跨系统的协同。金融领域也有大量落地案例。某国有银行接入的智能体,跨境汇款可疑交易识别率从65%飙升至92%,响应速度缩至秒级。编程领域的Agent就更成熟了。Claude Code、Cursor这些工具,已经能帮开发者完成理解需求、读取项目代码、修改文件、运行测试的全流程。我测下来,平均每个项目能省3-5小时。而且这些Agent不再只是单打独斗,而是形成了"多Agent协同"的架构。比如一个活动策划任务,会有主编Agent协同场地、宾客、资源、创意等子Agent,自动完成选址、邀人、物资推荐、图片生成、邮件发送等全流程。这种"从单点调用到智能协同"的转变,让Agent从一个"辅助工具",进化成了"数字员工"。 4. 具身智能:从"表演"到"实用"第四个突破,是具身智能。说起来,2024年我看过很多机器人"炫技"的视频。有的机器人能后空翻,有的能跳复杂的舞蹈。但说实话,这些东西离实际应用还很远。2025年,具身智能完成了从"技术演示"到"规模商用"的跨越。优必选的Walker S2工业人形机器人,累计订单金额已突破8亿元。智元机器人的灵犀X2机器人宣布第5000台量产下线,灵巧手等核心部件年交付量达数千台。产品方向也变了。不再是表演"后空翻"这些炫技动作,而是转向解决冲泡咖啡、踢球、分拣包裹这些"精细活"。特斯拉的Optimus Gen3通过多模态大模型实现复杂动作泛化,抓取成功率高达99.2%。星动纪元的星动L7全尺寸双足机器人,在京东"亚洲一号"仓库里执行分拣包裹、扫码等物流作业,错误率低于0.1%。更关键的是,"大脑-小脑-躯体"的全链路技术都实现了突破。"大脑"方面,多模态大模型的工程化落地,让机器人能通过自然语言理解并规划任务。"小脑"方面,运动控制与智能决策能力提升,使机器人能在开放环境中应对扰动。"躯体"方面,国产谐波减速器、仿生灵巧手、多维视触觉传感器等核心零部件性能达到国际领先水平。2025世界机器人大会显示,参展人形机器人整机企业从27家增至50家。资本也很活跃,前三季度国内机器人行业一级市场融资事件达610笔,融资总额约500亿元,都是去年同期的两倍以上。这个增长速度,还是挺猛的。成本革命除了这四个技术突破,2025年还有一个更底层的变化:成本革命。说起来,大模型的训练和推理成本一直是个大问题。但2025年,这个成本出现了断崖式下降。斯坦福报告显示,在MMLU基准测试中达到GPT-3.5水平的AI模型调用成本,从2022年11月的20美元/百万token,骤降至2024年10月的0.07美元/百万token,18个月内下降了280倍。这个下降速度,在科技史上都是罕见的。训练成本也大幅降低。DeepSeek-R1的增量训练成本约29.4万美元,而OpenAI训练GPT-4的成本超过1亿美元。虽然不能直接对比(因为GPT-4的规模更大),但这个数量级的差异还是很明显的。更关键的是,通过MoE架构、模型压缩、量化等技术,小模型的性能也在快速提升。面壁智能的MiniCPM-Llama3-V 2.5模型,用24亿参数实现百亿级性能,登顶国际开源榜单。这个模型已经搭载于小米、华为等终端设备,支持实时语音翻译与图像识别。这意味着,AI能力可以从云端下沉到端侧,拓展了应用边界。而且推理成本的下降,让很多以前"用不起"的场景变得可行。比如实时翻译、智能客服、个性化推荐这些需要大规模调用模型的场景,现在经济上可行了。 开源生态的崛起2025年的另一个重要变化,是开源生态的崛起。说起来,开源大模型一直存在,但2025年,开源模型与闭源模型的性能差距快速缩小。中国的开源模型全球下载量占比达17.1%,首次超越美国。智谱AI开源的GLM4.6,在编程能力上对标Claude Sonnet4,代码生成准确率达92.3%,支持8种主流编程语言。而且首次实现寒武纪芯片FP8+Int4混合量化部署,模型体积压缩至原体积1/5,推理速度提升3倍。蚂蚁集团开源的Ring1T preview,是全球首个开源万亿参数推理模型,在数学竞赛和编程测试中的表现逼近GPT-5。DeepSeek的R1论文在Nature杂志上发表,成为全球首个通过顶级期刊独立同行评审的主流大语言模型。这在整个AI行业都是前所未有的透明度。这些开源模型的崛起,降低了技术门槛,让中小企业和个人开发者也能用上顶级模型的能力。更重要的是,它们打破了闭源模型的技术垄断,推动整个行业的开放和进步。 产业落地的关键拐点有了这些技术突破和成本下降,产业落地自然水到渠成。2025年,AI在工业、医疗、金融、法律等关键领域实现了深度渗透。截至2025年9月,全国已建成3万多家智能工厂,覆盖80%以上的制造业行业大类,生产效率平均提升超22%。医疗领域,AI辅助放疗系统使中小医院可共享大医院专家经验,显著提升诊疗效率与精准度。金融领域,蚂蚁集团的风控大脑3.0,信贷欺诈识别准确率99.993%,跨境支付清算效率提升22倍。法律领域,英国浚哲律师事务所的律师通过AI工具完成96%的文书起草、案例研究及内部管理任务。应用规模也在快速增长。生成式AI用户规模在2025年前6个月激增106.6%,达5.15亿人,普及率升至36.5%。 治理与伦理的同步推进随着AI的广泛应用,治理和伦理也成了不可回避的话题。2025年,中国在政策与法规层面持续发力:3月发布《人工智能生成合成内容标识办法》,首次将传播平台纳入责任主体,实现从生成端到分发端的闭环监管。8月国务院印发《关于深入实施"人工智能+"行动的意见》,要求建立分类分级监管机制。10月《网络安全法》新增AI安全专章,明确滥用个人信息、生成违法内容的法律责任,该法将于2026年1月1日正式施行。欧盟《人工智能法案》也正式生效,按风险分级对AI系统实施监管,违规企业最高可处全球营业额7%的罚款。这些法规的出台,为AI的可持续发展提供了制度保障。 我的思考:2025年的本质回看2025年,AI发生了这么多变化,本质是什么?我想了很久,觉得核心在于两点。第一,AI从"工具"变成了"伙伴"。2025年之前,AI更像一个"工具"。你给它指令,它执行。它不会主动做什么,也不会超出你的预期。2025年,AI开始像一个"伙伴"。它能理解你的意图,主动规划任务,在出错时自我纠正,甚至在某些时候给你建议。这种转变,不是参数大了多少倍,而是AI学会了"思考"和"行动"。第二,AI从"奢侈品"变成了"日用品"。2025年之前,AI是"奢侈品"。训练一个顶级模型要几千万美元,调用一次API要几美分。只有大公司才玩得起。2025年,AI变成了"日用品"。开源模型性能逼近商用系统,推理成本下降280倍,端侧模型性能大幅提升。中小企业和个人开发者也能用上顶级模型的能力。这种转变,不是技术细节的优化,而是AI真正开始普惠。 2026年的趋势基于2025年的发展,2026年会有哪些趋势呢?我有几个判断。趋势一:多Agent协同成为主流。单一Agent会升级为"Agent矩阵",跨部门、跨系统协作处理复杂任务。比如营销Agent对接风控Agent,实现从获客到转化的全流程自动化。趋势二:低代码开发普及。中小企业通过Dify、微软Power Platform等工具,无需专业技术团队,就能快速搭建专属Agent,落地成本降低60%以上。趋势三:端侧AI成为标配。AI能力会大规模下沉到终端设备,手机、平板、电脑、汽车、眼镜都会内置AI能力。云边端协同会成为主流架构。趋势四:安全合规常态化。AI原生应用会内置数据隔离、端到端加密功能,90%以上金融、医疗企业会采用私有化部署的Agent方案。 最后2025年,AI完成了从"能用"到"好用"的质变。这个质变,不是某一项技术的突破,而是推理能力、多模态、Agent、具身智能、成本革命、开源生态等多个方向协同演进的结果。2026年,AI会如何发展?我觉得核心还是两个关键词:思考和行动。AI会思考得更深,行动得更准从"能用"到"好用",再到"离不开"。这或许就是AI时代的大趋势。
-
2025年又过去了,在过去的一年中,我们见证了AI的发展,见证了社区各种工具及服务的扩展,那在这一看中,你又学习到了哪些好的技术点,一起给大家分享一下吧~
-
(2026年1月发布) < 华为云Versatile智能体平台 体验入口>华为开发者空间 --开发平台--Versatile Agent (请在PC端打开) 版本概览 华为云Versatile智能体平台定位为一站式企业级智能体构建平台,倡导人人都能构建自己的企业级智能体。本次版本更新新增10+特性,侧重于在插件、资产中心、知识库、工作流节点等功能上进行了能力补齐,强化Versatile作为企业级agent平台的一体化开发能力,帮助用户构建更专业、更贴合业务需求的智能体。 新增重点特性介绍 01 团队共享应用/插件 资产中心· 应用广场/插件广场支持团队共享能力,可设置共享模式和共享范围。业务价值:由用户创建的应用、插件等资源,可在当前租户下的所有团队间共享使用,便于团队多成员快速调用,提升协作与效率。(备注:不支持跨租户共享) 02 订阅ROMA Connect MCP服务 资产中心· MCP广场支持订阅ROMA Connect的MCP服务:集成至资产中心-第三方展示;支持工具调测,在智能体中可以添加使用。业务价值:打通ROMA Connect MCP资源,帮助拓展智能体能力边界,提升Agent应用的工具调用能力。 03 对象管理/对象提取节点 配置管理· 新增对象管理:支持创建/编辑/删除对象。可在当前页面创建对象模板,并在相关节点中引用这些模板。业务价值:通过在对象提取节点快速引用模板,减少重复性工作,从而提高开发效率。 工作流应用·新增对象提取节点:工作流支持参数提取节点,用于提取指定对象中的参数。 可配置子工作流以进行参数的校验与校准,并发起用户交互。业务价值:通过使用该节点,简化复杂工作流的管理和维护,提高效率,同时减少配置错误的可能性。 04 多智能体应用新增调试 应用管理多智能体应用优化:支持调试功能业务价值:可查看试运行过程中的调试结果,直观了解多智能体的运行性能,便于开发者快速地追溯操作顺序并精确定位问题。 05 提示词引入变量 应用管理· Agent提示词支持引用自定义变量参数:在模型优先模式下,当用户为应用添加记忆并创建了变量后,可快速引用;同时支持用户在提示词输入框中输入变量。业务价值:支撑提示词创建时快捷选择变量,便于快速定义用户的某一行为或偏好,提升效率。 06 Agent工作流/插件支持参数配置 应用管理· Agent引用工作流、插件时支持参数配置:可配置参数默认值;对值比较稳定的参数,例如密钥等,支持隐藏可见性。业务价值:减少大模型的无效判断,提升插件、工作流的调用效率。针对不需要智能体动态提取的固定参数,提供“可见性”开关,避免参数值发生不必要的修改。 07 发布历史支持还原版本 应用管理· 发布历史中显示每个版本的修改描述:可查看智能体更新发布的历史记录,支持还原版本和删除操作。业务价值:清晰展现版本更新的过程信息;可辅助一键快速还原版本。 08 基于API创建插件 能力增强 组件库· 服务域名和基准URL支持定义变量值:添加变量后,可以在变量参数部分设置参数的描述;在工具调测时,可输入具体的参数值。业务价值:通过可定义变量,提升插件管理的灵活性和可维护性。 · 新增华为云认证:支持华为云IAM认证,通过IAM账号获取用户Token进行认证业务价值:丰富插件鉴权的方式,对接华为云IAM实现快速权限校验。 09 创建MCP支持streamableHttp 组件库· 基于空白模板创建MCP时,安装方式支持streamableHttp业务价值:丰富MCP服务的安装方式,适用于与已部署在外部环境的远程MCP服务器建立连接,例如,接入自主开发的基于streamable http协议的MCP服务。 10 知识库对接KooSearch 知识库· 外部知识库连接,支持对接华为云企业搜索服务KooSearch业务价值:增加知识库来源,快捷调用koosearch知识库平台,实现知识库资源高效共享。 · 知识库高级设置优化:Versatile企业版用户在创建知识库后,可以通过“高级配置”选项来修改精排模型。 11 多智能体运营运维 运营运维-观测· 观测支持上报和统计多智能体的数据信息。包括调用链管理、会话管理、应用指标统计、租户指标统计。业务价值:全面提示多智能体的运维管理能力,呈现关键使用数据,使运维人员能够快速识别性能瓶颈、优化问题。 12 模型配置支持深度思考 模型中心· 模型配置支持深度思考:功能开启时,大模型将首先进行深入的思考和推理,通过逐步拆解问题、梳理逻辑,生成一段详细的思维链内容,并在调试界面展示。业务价值:“深度思考”过程有助于提升最终输出答案的准确性和可靠性,确保用户获得更加精准的信息。 API1、新增获取知识库检索图片接口,可通过图片ID获取知识库检索图片。2、优化工作流/智能体接口:调用工作流接口新增createdTime参数,调用智能体应用新增histories参数。 审计:支持云审计的关键操作:通过云审计服务,可记录与Versatile相关的操作事件,便于日后的查询、审计和回溯。 点击可前往>>华为云Versatile智能体平台 官网
AgentArts运营小助手
发表于2026-01-22 15:44:22
2026-01-22 15:44:22
最后回复
yd_26009237
2026-03-03 17:22:30
122 11 -
总体说明 TensorFlow 1.15训练/在线推理场景需准备的比对数据文件如下表所示文件说明获取方式TensorFlow原始训练网络npy文件标杆数据准备GPU侧npy文件计算图文件(*.txt)计算图文件准备NPU侧dump数据和计算图文件通过昇腾AI处理器运行生成的训练网络dump数据文件待比对数据 准备GPU侧npy文件 生成npy文件:a. 修改TensorFlow训练/在线推理脚本,添加debug选项设置b. 执行训练/在线推理脚本c. 训练/在线推理任务停止后,命令行视图自动进入tfdbg调试命令行交互模式,执行run命令For more details, see help.tfdbg> runrun命令执行完成后,可以依次执行lt命令查询已存储的张量,执行pt命令查看已存储的张量内容,保存数据为npy格式文件 收集npy文件:a. 执行lt > gpu_dump命令将所有tensor的名称暂存到自定义名称的gpu_dump文件里Wrote output to tensor_nameb. 重新开启一个命令行窗口,在新的命令行窗口进入gpu_dump文件所在目录(默认在训练/在线推理脚本所在目录),执行下述命令,用以生成在tfdbg命令行执行的命令timestamp=$[$(date +%s%N)/1000] ; cat gpu_dump | awk '{print "pt",$4,$4}' | awk '{gsub("/", "_", $3);gsub(":", ".", $3);print($1,$2,"-n 0 -w "$3".""'$timestamp'"".npy")}'c. 复制所有生成的存储tensor的命令(所有以“pt”开头的命令),回到tfdbg命令行视图所在窗口,粘贴执行,即可存储所有npy文件。存储路径为训练/在线推理脚本所在目录.d.检查生成的npy文件命名是否符合{op_name}.{output_index}.{timestamp}.npy格式准备NPU侧dump数据和计算图文件 dump参数配置:a. Estimator模式:通过NPURunConfig中的dump_config采集dump数据,在创建NPURunConfig之前,实例化一个DumpConfig类进行dump的配置(包括配置dump路径、dump哪些迭代的数据、dump算子的输入还是输出数据等)from npu_bridge.npu_init import *# dump_path:dump数据存放路径,该参数指定的目录需要在启动训练/在线推理的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限# enable_dump:是否开启dump功能# dump_step:指定采集哪些迭代的dump数据# dump_mode:dump模式,取值:input/output/alldump_config = DumpConfig(enable_dump=True, dump_path = "/home/output", dump_step="0|5|10", dump_mode="all")config = NPURunConfig( dump_config=dump_config, session_config=session_config )b. sess.run模式:通过session配置项enable_dump、dump_path、dump_step、dump_mode配置dump参数config = tf.ConfigProto()custom_op = config.graph_options.rewrite_options.custom_optimizers.add()custom_op.name = "NpuOptimizer"custom_op.parameter_map["use_off_line"].b = Truecustom_op.parameter_map["enable_dump"].b = Truecustom_op.parameter_map["dump_path"].s = tf.compat.as_bytes("/home/output") custom_op.parameter_map["dump_step"].s = tf.compat.as_bytes("0|5|10")custom_op.parameter_map["dump_mode"].s = tf.compat.as_bytes("all") custom_op.parameter_map["dump_layer"].s = tf.compat.as_bytes("nodename1 nodename2 nodename3")config.graph_options.rewrite_options.remapping = RewriterConfig.OFFwith tf.Session(config=config) as sess: print(sess.run(cost)) 获取dump数据文件和计算图文件:a. 执行训练/在线推理脚本,生成dump数据文件和计算图文件b. 选取计算图文件c. 选取dump数据文件了解更多请查阅昇腾社区文档:cid:link_1
上滑加载中
推荐直播
-
码道新技能,AI 新生产力——从自动视频生成到开源项目解析2026/04/08 周三 19:00-21:00
童得力-华为云开发者生态运营总监/何文强-无人机企业AI提效负责人
本次华为云码道 Skill 实战活动,聚焦两大 AI 开发场景:通过实战教学,带你打造 AI 编程自动生成视频 Skill,并实现对 GitHub 热门开源项目的智能知识抽取,手把手掌握 Skill 开发全流程,用 AI 提升研发效率与内容生产力。
回顾中 -
华为云码道:零代码股票智能决策平台全功能实战2026/04/18 周六 10:00-12:00
秦拳德-中软国际教育卓越研究院研究员、华为云金牌讲师、云原生技术专家
利用Tushare接口获取实时行情数据,采用Transformer算法进行时序预测与涨跌分析,并集成DeepSeek API提供智能解读。同时,项目深度结合华为云CodeArts(码道)的代码智能体能力,实现代码一键推送至云端代码仓库,建立起高效、可协作的团队开发新范式。开发者可快速上手,从零打造功能完整的个股筛选、智能分析与风险管控产品。
回顾中 -
华为云码道全新升级,多会话并行与多智能体协作2026/05/08 周五 19:00-21:00
王一男-华为云码道产品专家;张嘉冉-华为云码道工程师;胡琦-华为云HCDE;程诗杰-华为云HCDG
华为云码道4月份版本全新升级,此次直播深度解读4月份产品特性,通过“特性解读+实操演示+实战案例+设计创新”的组合,全方位展现码道在多会话并行与多智能体协作方面的能力,赋能开发者提升效率
正在直播
热门标签