• AI+昇腾生态,赞奇联创智能化视觉解决方案
    AI+昇腾生态,赞奇联创智能化视觉解决方案推荐概要:赞奇科技深耕数字视觉领域,为建筑设计、影视动画、广电媒资、云游戏等场景提供一站式视觉云服务,面临AI带来的机会和技术路线选择。华为云DTSE专家协同赞奇共建AI场景全新解决方案,并赋能赞奇OCR、DeepSeek数据拟和能力、国产算力的Stable Diffusion模型调用、函数工作流,全面构建基于华为云的技术底座,共建AI场景全新解决方案。一、业务背景与痛点23年开始赞奇积极转型,全面拥抱AI,依托自研的AI算力调度平台与私有化部署框架,面对AI的快速发展,对应的产品能力多,赞奇选择华为昇腾底座,和华为云MaaS服务,以及OCR,ASR等能力,在这些能力基础上构建其产品和服务,目前取得比较好的效益。核心痛点一:工业图纸识别场景人工识别图纸效率与准确率低:当前制造业务均为非标产品定制,由工程师用手机拍摄PDF图纸,通过免费扫描软件识别文字后复制到表格中,做结构化存储(前端扫描与后端存储准确率与效率均十分低下)。耗时长且受拍摄环境光线、角度等变量影响,图像素材质量不稳定影响识别准确率,导致订单滞后、人力消耗大,已成为制约生产交付效率的核心堵点。结构配件行业标准数量多,查询繁琐:设计人员在审图、编制方案等环节均需要查询大量企业、行业、国家标准。每次查询涉及手动检索800余本标准文件,查询耗时长,效率低,因标准应用失准影响产品设计合规性,埋下质量隐患与合规风险,成为制约生产效能与企业运营稳定性的突出短板。核心痛点二:AI小说生成视频场景文生图规模生产内容的准确性:通过AI解决文字和人的一致性,问题包括:手部畸形、古代出现现代元素、人物亲密接触等,规模生产需要大量人工审核和校对工作,造成成本很高。语音合成和字幕生成:AI小说生成视频中需要将旁白文本转换为自然流畅的语音;合成视频中需要自动生成字幕,并精准对齐时间轴。 二、方案设计三、技术架构图四、业务价值帮助赞奇科技进行智能体应用的AI大模型选型,分析需求并解决并发问题,优化提示词,协助POC测试稳定运行;支撑赞奇AIKnow智能体编排服务解决方案的业务设计和技术架构设计。五、开发者声音在“技术即服务”方面,华为云提供的一站式AI开发平台(ModelArts)和AI开放能力(OCR、ASR、TTS等),大大降低了AI开发的门槛,提升了开发者学习AI、使用AI的效率。昇腾算力解决了开发者算力可持续性获取的难题,同时华为云提供了云上的MaaS服务,开发者可以获取开箱即用的算力。在“经验即服务”方面,华为云DTSE团队向开发者提供贴身的技术服务,更好地帮助开发者使用华为云服务来构建应用,共同打造创新方案。未来的友好性开发者工具一定是强结合AI的,当前大部分的开发者和企业的AI应用场景依然是“X+AI”,我们希望有真正AI原生智能的工具可以使用,整合AI常用的技术栈,比如:RAG、Agent、MCP等,帮助企业应用场景完成“AI+X”的转型。
  • [技术干货] 南京大学空间融入课程重构案例
    南京大学空间融入课程重构案例推荐概要:华为开发者空间携手南京大学,基于文理交融特色探索创新模式,把开发者空间融入南大学子课程与实践环节。聚焦 AI、鸿蒙、昇腾等前沿根技术,借校企优质师资合力,让南大学子在课堂解锁多元实践场景,以跨学科实践赋能科技人才创新能力跃升 。面向对象:软件工程专业大二学生课程信息:《计算机操作系统》操作系统专业课、3学分/48学时覆盖人数: 240人/每期授课周期: 8周次一、“计算机操作系统”合作背景南京大学课程“计算机操作系统” 中,低年级学生在本地配置操作系统实验环境过程繁琐、易出错,影响学习体验;借助华为开发者空间云主机可简化环境配置操作、提高实验效率,学生普遍反馈难度偏高,与理论课程关联较弱,无实操,与培养软件工程专业学生操作系统应用能力的目标偏离。二、“计算机操作系统”课程介绍南京大学软件学院开展《计算机操作系统》课程,将原课程基于华为开发者空间云主机的课程实践进行重构。面向软件工程专业大二学生,培养其理解和应用操作系统的能力,特别是开发与操作系统交互的底层软件的能力。三、华为开发者空间的使用场景和优势开发资源:每人一套基于华为云openEuler系统的鲲鹏云开发环境,解决缺少实际环境问题。开箱即用:鲲鹏云开发环境预置各形态服务器,主流开发软件及工具,开箱即用,解决因为配置繁琐、耗时长问题。镜像分享:支持老师制作镜像,并分享给学生在鲲鹏云开发环境操作使用,避免环境不一致问题影响教学进度。容器模板化:支持通过镜像拉起环境,保证环境一致性。四、基于华为开发者空间的课程实验设计面向软件工程专业大二学生,培养其理解和应用操作系统的能力,特别是开发与操作系统交互的底层软件的能力。云平台的操作和云主机的使用内核模块的概念、进程的概念,进程状态的变化等内存管理相关的系统调用的使用、内存管理算法等I/O中断检测、设备驱动编写等文件的操作、文件系统的操作等进程间通信的手段软件包构建的知识、软件包特征的理解等五、基于华为开发者空间的课程实验安排六、课后感言课程改革和实践课帮助理论联系实践,更好的理解计算操作系统和软件应用作业更偏向于软件开发和应用,能够快速上机,节省大量时间完成。 
  • [技术干货] CANN社区版-8.5.0.alpha002/AOE工具(EP)/离线推理场景下调优
    调优流程     推荐先进行子图调优,再进行算子调优。原因是:先进行子图调优会生成图的切分方式,子图调优后算子已经被切分成最终的shape了,再进行算子调优,会基于这个最终shape去做算子调优。如果优先算子调优,这时调优的算子shape不是最终切分后的算子shape,不符合实际使用场景。环境准备     软件部署:AOE工具运行依赖昇腾AI处理器,所以当前工具仅支持昇腾AI处理器所在设备既作开发环境又作运行环境的场景。     参考地址https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/83RC1/softwareinst/instg/instg_0000.html完成驱动、固件以及开发套件包Ascend-cann-toolkit的安装,部署开发环境和运行环境     安装第三方依赖配置环境变量     使用AOE调优前,请先使用export命令在当前终端下声明环境变量。该方式在关闭Shell终端后失效。用户也可将设置环境变量的命令写入自定义脚本执行调优     执行AOE调优引擎进行子图调优、执行AOE调优引擎进行子图重载调优、执行AOE调优引擎进行算子调优查看调优结果     何查看调优结果,包括屏幕打印信息和生成的自定义知识库、om模型、算子调优结果文件和子图调优结果文件。执行调优结果如下所示,代表调优完成并且性能有提升。<xxxx> process finished. Performance improved by xx% //xxxx:调优任务名称,xx%:性能提升的比例。性能验证     调优完成后,请使用调优后的自定义知识库(如何使用请参见如何使用调优后的自定义知识库https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/83RC1/devaids/aoe/aoepar_16_067.html)重新推理,验证性能是否提高。了解更多请查阅昇腾社区文档:https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/850alpha002/devaids/aoe/aoeep_16_020.html 
  • [技术干货] CANN社区版-8.3.RCX/AOE工具(EP)/简介
    AOE      AOE(Ascend Optimization Engine)是一款自动调优工具,作用是充分利用有限的硬件资源,以满足算子和整网的性能要求。AOE通过生成调优策略、编译、在运行环境上验证的闭环反馈机制,不断迭代出更优的调优策略,最终得到最佳的调优策略,从而可以更充分利用硬件资源,不断提升网络的性能,达到最优的效果。SGAT简介      SGAT是一种提升子图性能的优化器。一张完整的网络,会被拆分成多个子图。针对每一个子图,通过SGAT生成不同的调优策略。SGAT的调优算法通过获取每个迭代的调优策略性能数据,找到最优的调优策略,从而实现对应子图的最优性能。调优的结果会通过子图知识库的形式进行保存。整个SGAT调优过程支持断点恢复模式,能够在调优异常时,恢复断点继续进行调优OPAT简介      OPAT是一种提升算子性能的优化器。AOE将一张整图输入给OPAT,OPAT内部进行算子融合,将融合得到的图进行算子粒度切分,针对每一个融合算子子图生成不同的算子调优策略,从而实现最优的算子性能,并将得到的最优策略保存在算子知识库。GDAT简介      GDAT是通过最大化反向计算与梯度聚合通信并行度,缩短通信拖尾时间的优化工具。分布式训练场景下,各个设备之间计算梯度后执行梯度聚合操作,梯度聚合算子的融合策略会影响反向计算结束后的通信拖尾时间,从而影响集群训练的性能和线性度。一个较优的梯度数据切分原则为:尽可能使拖尾时间最短。 了解更多请查阅昇腾社区文档:https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/83RC1/devaids/aoe/aoeep_16_001.html 
  • [版主交流] 【华为云社区外部版主】2025年11月激励评比结果已公布!
    各位亲爱的版主们,大家好!经过大家一个月的努力角逐,11月外部版主激励评比结果已出炉,数据公示如下,请查看!·外部版主激励规则:点击了解更多转正礼/基础任务/额外任务(在线时长15小时+,主题帖15+,回帖30+,技术长文5+/原创技术干货1+,合集1+,有效回复问题求助帖10+,话题互动1+,完成这4项指标可获对应价值的代金券/实物礼品)请完成任务获得激励的版主,点击填写激励发放意愿统计问卷反馈截止时间:2025年1月20日,以便小编进行相应的激励发放。如若对统计有问题,可私信联系小助手~~~   注:在线时长数据达标后,才会再去考察达标版主的三项任务完成情况;主题数+回帖数达标后,才会再去考察达标版主的技术长文数量情况。 
  • 让开发者无惧创新!观测云 x 华为云开发者年度会议收官
     01 在“黑土地”上,为开发者点亮光12月27日-28日,上海华为练秋湖研发中心。冬日的寒风挡不住技术人的热血,2025华为开发者大赛暨开发者年度会议在此盛大举行。华为云CEO周跃峰在现场提到,要联合开发者打造行业AI的“梦工厂”。在这场顶级技术盛会中,观测云的角色非常明确:我们不仅是参与者,更持续护航开发者生态。如果说华为云为开发者提供了广袤的算力“黑土地”,那么观测云所做的,就是在这片土地上构建一套 “全链路数据观测基础设施”。我们深知,对于身处数字化转型深水区的开发者而言,代码能跑只是及格线,“系统稳定、性能强大、数据完整、故障可溯”才是硬道理。在这场顶级技术盛会中,观测云不仅是参与者,也愿意为开发者创新构建稳定高性能的基础设施。 02观测云赛道复盘:英雄配好刀,洞察定乾坤本届大赛,观测云赛道成为了检验开发者实战能力的试金石。决赛现场,我们看到了极具含金量的答辩:- 线上选手跨越地域限制,现场演示了如何利用观测云抽丝剥茧,在复杂的微服务架构下迅速锁定根因;- 线下选手面对评委的犀利提问,从容自信,将极客精神展现得淋漓尽致。这不仅是一场比赛,更是一次关于 “在AI时代,可观测性技术如何持续创造价值”的深度对话。 03巅峰时刻:双云携手,为开发者加冕本次大会的高潮,无疑是颁奖典礼。这不仅是对获奖者的表彰,更是华为云 x 观测云生态紧密融合的有力见证。在聚光灯下,华为云开发者支持与运营部部长 林华鼎 与 观测云CEO助理 沙昀其 共同登台,为在观测云赛道脱颖而出的优胜者颁奖。这一幕极具象征意义——大厂的生态加持 & 垂直领域的极致工具,两者强强联手,共同托举起开发者的创新梦想。正如林华鼎部长所言,华为云致力于构建开放共赢的生态,而观测云正是这一生态中不可或缺的“可观测性基础设施”。                            04现场回响:零距离的观测温度赛场之外,观测云的展台成为了连接开发者与技术的纽带。在观测云展台只有纯粹的技术交流。从eBPF技术的落地应用,到Trace链路追踪的实操演练,观测云的技术专家与参会者们零距离互动。 每一个驻足提问的身影,每一次恍然大悟的点头,都印证了观测云的品牌理念:离开发者近一点,再近一点。 05结语:每一位开发者的智慧皆可扎根生长从观测云入驻华为云云商店,让获取服务更便捷;到打通WeLink,让告警直达工作群,实现秒级协同;再到第一时间适配鸿蒙原生应用(HarmonyOS Next)的监控支持……我们将工具链磨得更锋利,并会继续携手华为云,在工具链、技术社区、生态赋能上持续投入。为了让每一位开发者的智慧皆可扎根生长。观测云特别推出了开箱即用的免费版——为每一位构建者提供可托付的可观测性。比赛虽已落幕,但创新的火种已经点燃。我们也欢迎每一位开发者加入我们的开发者社区,与我们一起成长!
  • [技术干货] 如何在ArkUI中自定义动画路径?
    在鸿蒙 OS 5(API 12)的 ArkUI 中,原生暂不支持直接通过贝塞尔曲线或 SVG 路径定义任意运动轨迹的动画(如 CSS 的 offset-path 或 Android 的 PathMotion)。但开发者仍可通过以下几种方式模拟自定义动画路径,实现元素沿特定轨迹移动的效果。方法一:使用 translate + 多段关键帧插值(推荐)虽然 ArkUI 没有内置关键帧动画语法,但可以通过 分段调用 animateTo 或 状态驱动的插值计算 来近似路径动画。示例:让图标沿“心形”轨迹移动// 定义心形路径的关键点(简化版)const HEART_PATH = [ { x: 0, y: -80 }, { x: 20, y: -100 }, { x: 50, y: -90 }, { x: 60, y: -60 }, { x: 50, y: -30 }, { x: 0, y: 0 }, { x: -50, y: -30 }, { x: -60, y: -60 }, { x: -50, y: -90 }, { x: -20, y: -100 }, { x: 0, y: -80 }];@Entry@Componentstruct PathAnimationDemo { @State currentIndex: number = 0 @State translateX: number = 0 @State translateY: number = 0 animateAlongPath() { // 重置起点 this.currentIndex = 0; this.translateX = HEART_PATH[0].x; this.translateY = HEART_PATH[0].y; // 逐段动画 const animateStep = (index: number) => { if (index >= HEART_PATH.length) return; animateTo({ duration: 200, curve: Curve.Linear }, () => { this.translateX = HEART_PATH[index].x; this.translateY = HEART_PATH[index].y; }).then(() => { animateStep(index + 1); // 链式调用下一段 }); }; animateStep(1); } build() { Column() { // 动画元素 Image($r('app.media.icon_heart')) .width(40) .height(40) .translate({ x: this.translateX, y: this.translateY }) .position({ x: '50%', y: '50%' }) // 以中心为原点 .zIndex(10) Button("沿心形路径移动") .margin({ top: 100 }) .onClick(() => this.animateAlongPath()) } .width('100%') .height('100%') .justifyContent(FlexAlign.Center) }}方法二:使用 Canvas + 自定义绘制(高级)若需更精细控制(如绘制轨迹线、旋转对齐切线),可结合 Canvas 组件:@Entry@Componentstruct CanvasPathDemo { private controller: CanvasRenderingContext2D | null = null; @State progress: number = 0; // 0.0 ~ 1.0 aboutToAppear() { // 可在此预计算路径点 } renderOnCanvas(canvas: CanvasRenderingContext2D) { canvas.clearRect(0, 0, 360, 360); // 绘制轨迹(可选) canvas.strokeStyle = '#ccc'; canvas.beginPath(); // ... 绘制静态路径 // 计算当前位置(简化:圆周运动) const centerX = 180; const centerY = 180; const radius = 100; const angle = this.progress * 2 * Math.PI; const x = centerX + radius * Math.cos(angle); const y = centerY + radius * Math.sin(angle); // 绘制移动元素 canvas.fillStyle = '#ff4d6d'; canvas.beginPath(); canvas.arc(x, y, 10, 0, 2 * Math.PI); canvas.fill(); } startAnimation() { let p = 0; const tick = () => { p += 0.01; if (p <= 1) { this.progress = p; setTimeout(tick, 16); // ~60fps } }; tick(); } build() { Column() { Canvas(this.renderOnCanvas) .width(360) .height(360) Button("开始动画") .onClick(() => this.startAnimation()) } .width('100%') .height('100%') .justifyContent(FlexAlign.Center) }}方法三:使用 Lottie(推荐用于复杂矢量动画)对于品牌动画、加载指示器等复杂路径动画,强烈建议使用 Lottie:在设计工具(如 After Effects)中制作动画并导出 JSON;将 JSON 文件放入 resources/rawfile/ 目录;使用 LottieComponent 播放:import lottie from '@ohos/lottie';@Entry@Componentstruct LottieDemo { controller: lottie.LottieAnimationController = new lottie.LottieAnimationController(); build() { Column() { // 加载 rawfile 下的 animation.json LottieComponent($rawfile('animation.json'), { controller: this.controller, width: 200, height: 200 }) Button("播放") .onClick(() => { this.controller.play(); }) } .width('100%') .height('100%') .justifyContent(FlexAlign.Center) }}方法四:组合 rotate + translate 模拟曲线对于简单弧线(如抛物线、圆弧),可通过极坐标转换实现:@State angle: number = 0@State radius: number = 100animateArc() { animateTo({ duration: 2000, curve: Curve.Linear }, () => { this.angle = 180; // 从 0° 到 180° });}build() { Column() { // 元素绕 (180, 180) 做半圆运动 Circle() .width(30) .height(30) .backgroundColor(Color.Red) .position({ x: 180, y: 180 }) .translate({ x: this.radius * Math.cos(this.angle * Math.PI / 180), y: this.radius * Math.sin(this.angle * Math.PI / 180) }) Button("沿圆弧移动") .onClick(() => this.animateArc()) } .width('100%') .height('100%')} 
  • [技术干货] 如何在鸿蒙OS5中使用动画效果
    在鸿蒙 OS 5 中,ArkUI 提供了丰富且易用的动画能力,开发者可以通过声明式方式为 UI 元素添加平滑过渡、弹性反馈或复杂交互动画。动画主要分为属性动画、显式动画和转场动画三类。以下结合代码示例说明常用方法。1. 属性动画(隐式动画)对支持动画的属性(如 opacity、scale、rotate、width 等)直接赋值时,通过 .animation() 修饰器自动触发动画。@Entry@Componentstruct AnimatedButton { @State scale: number = 1 build() { Column() { Button("点击放大") .width(200) .height(60) .fontSize(18) .scale({ x: this.scale, y: this.scale }) // 定义动画参数 .animation({ duration: 300, curve: Curve.EaseOut, delay: 0 }) .onClick(() => { this.scale = this.scale === 1 ? 1.2 : 1 }) } .justifyContent(FlexAlign.Center) .width('100%') .height('100%') }}✅ 支持的可动画属性包括:opacity、rotate、scale、translate、width、height、backgroundColor 等。⚠️ 并非所有属性都支持动画,例如 visibility 不行,需用 opacity + pointerEvent 模拟。2. 显式动画(animateTo)当需要对多个属性同时执行复杂动画,或控制动画生命周期时,使用 animateTo 函数。@State rotateAngle: number = 0@State bgColor: Color = Color.BlueanimateBox() { animateTo({ duration: 500, curve: Curve.SpringMotion, // 弹性曲线 delay: 0 }, () => { this.rotateAngle += 360 this.bgColor = this.bgColor === Color.Blue ? Color.Green : Color.Blue })}build() { Column() { Column() .width(100) .height(100) .backgroundColor(this.bgColor) .rotate({ angle: this.rotateAngle }) .borderRadius(12) Button("旋转+变色") .margin({ top: 30 }) .onClick(() => this.animateBox()) } .justifyContent(FlexAlign.Center) .width('100%') .height('100%')}✅ animateTo 的回调中可修改多个状态变量,所有变更会合并为一次动画。✅ 支持中断、嵌套等高级控制(配合 AnimationContext)。3. 转场动画(页面/组件切换)用于页面跳转或列表项增删时的过渡效果,通过 pageTransition 或 transition 实现。页面转场(PageTransition)在页面入口处定义进入/返回动画:// PageA.ets@Entry@Componentstruct PageA { build() { Column() { NavigationBarItem(title: 'Page A') Button("跳转到 B") .onClick(() => router.pushUrl({ url: 'pages/PageB' })) } } // 定义本页的转场效果 pageTransition({ type: RouteType.Push, slide: SlideEffect.Left, // 从右侧滑入 duration: 300 })}组件转场(transition)用于动态显示/隐藏组件时的入场/离场动画:@State isVisible: boolean = truebuild() { Column() { if (this.isVisible) { Text("我会淡入淡出") .fontSize(24) .transition({ type: TransitionType.Insert, // 插入时 options: { duration: 400, curve: Curve.EaseInOut } }) .transition({ type: TransitionType.Delete, // 删除时 options: { duration: 300, curve: Curve.EaseIn } }) } Button(this.isVisible ? "隐藏" : "显示") .margin({ top: 30 }) .onClick(() => { this.isVisible = !this.isVisible }) } .width('100%') .height('100%') .justifyContent(FlexAlign.Center)}✅ transition 支持 Insert(插入)、Delete(删除)、Appear、Disappear 四种类型。4. 关键帧动画(animateTo with keyframes)鸿蒙 OS 5 支持通过 keyframe 定义多阶段动画(需使用 animateTo 的扩展形式):animateKeyframes() { animateTo({ duration: 1000, curve: Curve.Linear }, () => { // ArkUI 目前不直接支持 CSS-style keyframes, // 但可通过分段 animateTo 模拟 })}⚠️ 截至 API 12(OS 5),ArkUI 尚未提供原生关键帧语法,复杂路径动画建议使用 Path + 自定义绘制或 Lottie。5. 常用动画曲线(Curve)Curve.Linear:匀速Curve.EaseIn / EaseOut / EaseInOut:缓动Curve.FastOutSlowIn:Material 风格Curve.SpringMotion:弹簧效果(推荐用于弹窗、按钮反馈)Curve.Smooth:平滑插值注意事项性能:避免对大量元素同时执行复杂动画,尤其是 width/height 动画可能触发重排。可访问性:尊重系统“减少动画”设置(可通过 displaySync 或 Accessibility API 检测)。组合使用:属性动画与显式动画可混合,但同一属性以显式动画优先。调试:使用 DevEco Studio 的 Previewer 实时预览动画效果。总结鸿蒙 OS 5 的 ArkUI 动画体系以声明式、低代码、高性能为核心:简单交互 → 用 .animation();复合状态变化 → 用 animateTo;页面/组件切换 → 用 pageTransition 或 transition。合理运用这些能力,可显著提升应用的流畅度与用户体验,同时保持代码简洁。
  • [技术干货] 什么是Speculative Decoding的实际应用场景?
    Speculative Decoding(推测解码)虽然在原理上适用于任何自回归大模型推理,但在实际生产环境中,其价值并非“处处可用”,而是集中在特定高成本、高吞吐需求的场景。以下是其典型且高 ROI(投资回报率)的实际应用场景: 1. 超大规模模型在线服务(70B+ 级别)场景描述:部署 Llama-3-70B、Mixtral-8x22B、Qwen-Max、Gemma-2-27B 等大模型提供 API单次生成延迟高(如 50–200 ms/token),GPU 成本极高(A100/H100 按小时计费)为何适用:大模型 forward 成本 >> 小模型(草稿模型)成本即使接受率仅 60%,也能用 1 次大模型计算换 2–3 个 token,直接降低单位 token 成本 40–60%显存增加极小(草稿模型可量化至 INT4 或运行在 CPU) 2. 高并发对话机器人(客服/助手类)场景描述:用户请求量大(>100 req/s),平均生成长度 100–500 tokens对话前缀高度重复(如系统提示词相同)为何适用:草稿模型可复用前缀缓存(Prefix Caching),进一步加速吞吐提升意味着单卡可承载更多并发用户,减少服务器数量用户对轻微生成差异不敏感(如“好的” vs “好的!”)3. 长文本生成任务(报告/摘要/创作)场景描述:生成长度 >1K tokens(如技术文档、小说章节)用户愿意等待,但希望总完成时间尽可能短为何适用:长序列中,草稿模型预测连续文本的接受率更高(语言局部一致性)总体加速比在长文本中更稳定(避免短文本“验证失败即终止”的波动)⏱️ 示例:生成 2000 字文章,原需 120 秒 → 使用 Speculative Decoding 后仅需 45 秒。4. 私有化部署中的硬件资源受限环境场景描述:客户本地仅有 1–2 张 A10/A100,需运行 13B–70B 模型无法通过增加 GPU 横向扩展为何适用:不增加 GPU 数量,仅靠算法优化提升吞吐草稿模型可部署在 CPU(如 llama.cpp + GPU offload),主 GPU 专注大模型验证适合对延迟容忍度中等(<2s 首 token)的企业应用🔧 配置示例:# 主模型 GPU 运行,草稿模型 CPU 运行(vLLM 支持)--model Qwen/Qwen-72B--speculative-model Qwen/Qwen-1.8B--speculative-draft-tensor-parallel-size 0 # 0 表示 CPU 
  • [技术干货] 12月技术干货应用文章合集
    1、有哪些场景适合使用泛型?文章链接:cid:link_1文章描述:在 Go 中,泛型(自 1.18 起支持)并非万能工具,但在特定场景下能显著提升代码的复用性、类型安全性和可读性,Go 的泛型设计哲学是“适度抽象”——它不追求 Haskell 或 C++ 的表达力,而是解决最痛的重复问题。当你发现自己在复制粘贴代码只为改一个类型名时,就是泛型登场的最佳时机...2、 AI大模型学习导航:从入门到精通的详尽路线图,零基础也可成为AI领域专家,一篇足够,赶紧收藏!文章链接:cid:link_2文章描述:大模型定义与特点:参数规模、训练数据量、应用场景,Transformer架构基础:编码器与解码器的区别,自注意力机制,主流大模型类型:GPT系列、BERT系列、T5系列、Llama系列等,大模型"智能"的本质:参数学习、知识表征、上下文理解,学习资源:《大模型技术白皮书》(2025年最新版)Hugging Face官方文档中的模型介绍部分.....3、 Java 大视界 -- 基于 Java 的大数据可视化在城市生态环境监测与保护决策中的应用文章链接:cid:link_3文章描述:去年在陕西某县调试系统时,环保站王工指着老旧传感器叹气:“县城就 3 台电脑,跑不动你们的复杂系统。” 那天我们用 Java 把系统核心代码压缩到 8.7MB,去掉冗余功能,只保留 “水质 + 气象” 监测 ——3 天后,这套轻量化系统在暴雨前 2 小时预警山洪,帮 23 户村民提前转移。王工后来在电话里说:“现在看数据像看天气预报,简单明了。” 这个细节让我明白:生态可视化的真谛,不是 “功能多全”,而是 “能不能走进县乡监测站的老旧电脑”。在跟进 13 个案例的日子里,我们见过长三角用 “跨界传输图谱” 协商减排,也见过县城用 “手机端轻量化看板” 巡检河道 —— 这些带着 “泥土味” 的故事....4、Java 注解与反射实战:自定义注解从入门到精通文章链接:cid:link_4文章描述:你是否经常在 Java 代码中看到@Override、@Deprecated这样的标记?这些就是注解 —— 一种给代码 "贴标签" 的机制。注解本身不直接影响代码执行,但能通过工具(如编译器)或框架(如 Spring)赋予代码额外含义。自定义注解则是让我们根据业务需求创建专属 "标签",结合反射机制能实现强大的动态逻辑(比如日志记录、权限校验、ORM 映射等)。本文将从基础到实战,带你掌握自定义注解的定义、元注解的作用,以及如何通过反射让注解 "生效"...5、 Rust 智能指针文章链接:cid:link_5文章描述:Rust 提供了多种智能指针(Smart Pointers),用于在堆上分配内存、管理资源(如文件、网络连接)或实现特殊行为(如引用计数)。以下是 Rust 中主要智能指针的用法和区别...6、Vue ref 作为响应式数组或原生集合类型 (如 Map) 中的元素被访问时不会被解包文章链接:cid:link_6文章描述:在 Vue 3 的 reactive 中,当 ref 作为响应式数组或原生集合(如 Map)的元素时,不会自动解包 .value,需要手动访问 .value。这是 Vue 的设计行为,因为数组和集合的索引访问或方法调用(如 map.get())无法像模板渲染那样自动处理解包逻辑。下面详细解释你的代码示例和 Map 的语法...7、5MB能存储多少个汉字,多少个单词,多少个字母文章链接:cid:link_7文章描述:在存储数据时,不同类型的数据(如汉字、英文单词、字母)占用的空间大小不同,主要取决于它们的编码方式,存储汉字:直接按 3 字节/汉字 计算,保守估计。存储英文文本:如果单词长度差异大,可按平均 5~8 字母/单词 调整计算。优化存储:若需存储大量数据,考虑压缩(如 lz-string 库)或使用 IndexedDB 替代 localStorage...8、 基于HCS Terraform Provider发放ECS、VPC等资源,搭建Web服务文章链接:cid:link_0文章描述:Web开发是使用云资源的一种典型场景。搭建Web服务通常需要ECS、EVS、VPC、EIP等多类资源,通过Terraform脚本和Module,简化资源申请流程,提升Web服务搭建效率...
  • [课程] 使用教程 | 华为云Versatile智能体平台 开发者学习地图上线~(持续更新)
     < 华为云Versatile智能体平台 体验入口>华为开发者空间 --开发平台--Versatile Agent (请在PC端打开) 01 初识平台平台资源订购指导产品免费版订购流程平台使用流程Versatile智能体平台 使用流程基本概念AI相关术语介绍一图了解Versatile产品优势、应用场景快速入门案例手动搭建单智能体AI一句话创建智能体通过模板搭建智能体  02 云学堂课程赋能(new!)功能详细解读Versatile:模型接入与单智能体应用Versatile工作流开发:构建复杂业务逻辑Versatile多智能体开发:实现智能体协同架构 Versatile:插件与知识库集成实战  03 实践案例共创分享最佳实践最佳实践案例汇总视频案例指导视频类操作指导汇总案例中心Agent搭建优秀案例汇总入门案例搭建单智能体-旅游规划助手搭建工作流应用-智能助教常见问题平台常见问题FAQ  04 产品理念平台能力介绍HDC.2025Versatile品牌发布产品能力总览——打造最佳企业级Agent平台技术点解读插件类——MCP/工具能力详解知识库/RAG能力详解  05 用户指南AI应用开发开发单智能体应用开发工作流应用开发多智能体应用平台能力了解资产中心接入模型服务管理资源(插件/MCP/知识库/提示词)运营运维管理工作空间  点击可前往>>华为云Versatile智能体平台 官网
  • [技术干货] CANN社区版-8.3.RCX/3A算法开发
    3A算法介绍      包括AE、AWB、AF算法库,其中AF算法库当前不支持。3A算法库以注册的方式,添加到Firmware中,完成曝光、白平衡、色彩还原等处理AE(Auto Exposure)功能      根据自动测光系统获得当前图像的曝光量,再自动配置镜头光滑、Sensor快门及增益来获得最佳的图像质量      自动曝光的算法主要分:光圈优先、快门优先、增益优先AWB(Automatic White Balance)自动白平衡      色温随可见光的光滑成分变化而变化,在低色温光源下,白色物体偏红,在高色温光源下,白色物体偏蓝,人眼可根据大脑的记忆判断,识别物体的真实颜色。AWB算法的功能是降低外界光源对物体真实颜色的影响,使得我们采集的颜色信息转变为在理想日光光源下的无偏色信息。     AWB模块由硬件的AWB信息统计模块及控制白平衡策略的AWB算法两部分组成:ISP的WB信息统计模块判断Sensor输出的每个像素是否满足用户设定的白点条件,计算所有满足条件的像素的R、G、B三个颜色通道平均值。支持将图像分成M*N(M行N列)区域,统计每个区域的R、G、B均值以及参与统计的白点个数。支持输出整幅图像的R、G、B均值以及参与统计的白点个数。Sensor对接Sensor向ISP库注册的差异化适配,这些差异化适配主要由Firmware中的基础算法单元决定Sensor向3A库注册的差异化适配。Sensor的适配包括算法的初始化默认值,及Sensor控制接口,Sensor的适配是通过接口回调的形式注册给ISP库和3A算法库3A算法注册向ISP库注册AE算法向ISP注册AWB算法了解更多请查阅昇腾社区文档:https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/83RC1/appdevg/ispdevug/ispdevug_0004.html
  • [技术干货] CANN社区版-8.3.RCX/ISP(Image Signal Processing) Firmware架构介绍
    ISP(Image Signal Processing) Firmware架构     三部分:ISP控制单元和基础算法库+3A算法库(包括AE等)+Sensor库。仅Atlas 200I/500 A2 推理产品支持这部分功能。ISP Firmware设计的基本思想是:单独提供3A算法库,由ISP控制单元调度基础算法库和3A算法库;由业务侧Sensor库分别向ISP基础算法库和3A算法库注册函数回调,以实现差异化的Sensor适配。不同的Sensor都以回调函数的形式,向ISP算法库注册控制函数。ISP控制单元调度基础算法库和3A算法库时,将通过这些回调函数获取初始化参数,并控制Sensor, 如调节曝光时间、模拟增益、数字增益等,控制镜头步进聚焦或旋转光圈等。ISP Firmware内部处理流程分两部分初始化动态调节开发模式自研的3A算法库自定义的3A算法库开发部分使用自研的3A算法库,部分使用自定义的3A算法库总体接口调用流程ISP作为前端采集部分,需要和审批采集单元VI协同工作ISP初始化和基本配置完成后,徐亚哦VI进行接口时序匹配一是匹配不同Sensor的输入时序,二是为ISP配置正确的输入时序待时序配置完成后,ISP就可以启动并进行动态图像质量调节了解更多请查阅昇腾社区文档:https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/83RC1/appdevg/ispdevug/ispdevug_0001.html 
  • [技术干货] Go 中避免在 map 遍历时直接取地址导致指针复用
     在 Go 语言中,使用 range 遍历 map 时,如果直接对循环变量取地址并保存,很容易意外地让多个指针指向同一个内存地址。这是因为 range 循环内部会复用同一个变量来存储每次迭代的 key 和 value。看一个常见错误示例:type Item struct { ID int Name string}func main() { items := map[int]Item{ 1: {ID: 1, Name: "apple"}, 2: {ID: 2, Name: "banana"}, 3: {ID: 3, Name: "cherry"}, } var pointers []*Item for _, item := range items { pointers = append(pointers, &item) // 危险:取循环变量的地址 } for _, p := range pointers { fmt.Println(p.ID, p.Name) }}你可能期望输出三个不同的水果,但实际输出很可能是:3 cherry3 cherry3 cherry所有指针都指向同一个 item 变量,而该变量在循环结束时保留的是最后一次迭代的值(即 {3, "cherry"})。这个问题不仅出现在 map 遍历中,在 slice 的 range 循环中同样存在:list := []Item{{1, "a"}, {2, "b"}}for _, v := range list { ptrs = append(ptrs, &v) // 同样会全部指向最后一个元素}正确做法一:通过索引访问原始数据最直接的方式是使用 key 或索引从原容器中取值:for k := range items { pointers = append(pointers, &items[k]) // 安全:取 map 中真实元素的地址}注意:此方法要求 map 的 value 是可寻址的(即不是纯值类型拷贝)。由于 Go 的 map 中的 value 本身不可寻址(出于并发安全设计),上述写法实际上会报错:cannot take the address of items[k]因此,对于 map,通常需要复制一份再取地址。正确做法二:在循环体内创建局部副本这是最通用且安全的方式:for _, item := range items { item := item // 创建新的 item 变量(遮蔽外层) pointers = append(pointers, &item)}这里 item := item 看似冗余,实则关键:它在每次迭代中声明了一个新的局部变量,并将当前值拷贝进去。后续取地址操作针对的是这个独立副本,不会被下一次迭代覆盖。同样适用于 slice:for _, v := range list { v := v ptrs = append(ptrs, &v)}正确做法三:将值存入新分配的对象如果后续需要修改这些对象,也可以直接构造新实例:for _, item := range items { clone := &Item{ ID: item.ID, Name: item.Name, } pointers = append(pointers, clone)}这种方式语义清晰,且避免了任何指针复用风险。为什么 map 的 value 不能直接取地址?Go 的 map 在实现上可能因扩容或 rehash 导致内部存储位置变化,若允许直接取地址,指针可能失效或引发数据竞争。因此语言层面禁止 &m[key] 操作。这也意味着:如果你需要保存 map 中元素的指针,必须先将其拷贝到可寻址的变量中。如何发现这类 bug?使用 go vet:较新版本的 go vet 能检测部分“取 range 变量地址”的问题;单元测试:遍历结果与预期不符时,优先怀疑指针复用;日志打印指针地址辅助调试:for _, item := range items { fmt.Printf("addr: %p, value: %+v\n", &item, item) // 会发现所有地址相同}总结在 range 循环中对 value 变量取地址是高危操作。无论遍历 map 还是 slice,只要需要保存指针,都应:在循环体内创建局部副本(v := v),或显式拷贝构造新对象这个小技巧能避免大量隐蔽的数据错误,尤其在构建对象列表、注册回调或缓存指针时至关重要。记住:循环变量是共享的,它的地址不等于元素的地址。
  • [行业前沿] Go 中正确处理文件路径拼接避免跨平台问题
    Go 中正确处理文件路径拼接避免跨平台问题在 Go 开发中,经常需要拼接文件路径,比如读取配置、写入日志或操作资源文件。很多开发者习惯直接用字符串拼接:path := "data/" + filename或者使用正斜杠硬编码:path := "config/app.json"这类写法在 Linux 或 macOS 上可能正常,但在 Windows 上容易出错,因为 Windows 使用反斜杠 \ 作为路径分隔符。虽然 Go 运行时通常能兼容正斜杠,但当路径用于系统调用、外部命令或与用户输入交互时,不规范的路径可能导致 file not found 错误。更严重的是,手动拼接无法处理路径开头的斜杠、重复分隔符或相对/绝对路径混合等问题。正确做法:使用 filepath.JoinGo 标准库提供了 path/filepath 包,其中的 Join 函数会根据当前操作系统自动选择正确的路径分隔符,并智能处理多余的分隔符:import "path/filepath"func getConfigPath(filename string) string { return filepath.Join("config", filename)}// 在 Linux/macOS: 返回 "config/app.json"// 在 Windows: 返回 "config\app.json"即使传入带分隔符的片段,Join 也会正确处理:filepath.Join("base/", "/sub", "file.txt") // 结果是 "base/sub/file.txt"(Unix)或 "base\sub\file.txt"(Windows)注意:filepath.Join 不会解析 .. 或 .,如需规范化路径,应配合 filepath.Clean:p := filepath.Join("a", "..", "b", "./c.txt")cleaned := filepath.Clean(p) // 得到 "b/c.txt"(或 "b\c.txt")避免使用 path.Join标准库还有一个 path 包(无 file 前缀),它的 Join 始终使用正斜杠,适用于 URL 或网络路径,不适用于本地文件系统:import "path"path.Join("a", "b") // 总是返回 "a/b",即使在 Windows 上在 Windows 上用 path.Join 拼接文件路径,传给 os.Open 可能工作(因为 Go 内部做了兼容),但若将路径传递给外部程序(如 exec.Command 调用 notepad.exe),就可能失败。因此,操作本地文件路径时,务必使用 path/filepath,而不是 path。处理用户输入或配置中的路径如果路径来自配置文件或命令行参数,可能包含环境变量(如 $HOME)或用户目录缩写(如 ~)。Go 不会自动展开这些符号,需手动处理:func expandPath(path string) (string, error) { if strings.HasPrefix(path, "~/") { home, err := os.UserHomeDir() if err != nil { return "", err } path = filepath.Join(home, path[2:]) } return filepath.Abs(path)}然后使用:raw := "~/logs/app.log"realPath, _ := expandPath(raw)f, err := os.Open(realPath)构建跨平台资源路径的推荐模式假设项目结构如下:myapp/├── main.go└── assets/ └── logo.png在代码中引用 assets/logo.png 时,不要写死相对路径,而是基于可执行文件位置动态计算:func getAssetPath(name string) (string, error) { exePath, err := os.Executable() if err != nil { return "", err } exeDir := filepath.Dir(exePath) return filepath.Join(exeDir, "assets", name), nil}这样无论程序从哪个目录启动,都能正确找到资源。单元测试中的路径处理在测试中,常需要创建临时文件。使用 os.MkdirTemp 和 filepath.Join 组合最安全:func TestProcessFile(t *testing.T) { tmpDir := t.TempDir() // Go 1.15+ 推荐方式 testFile := filepath.Join(tmpDir, "input.txt") os.WriteFile(testFile, []byte("hello"), 0644) result, err := process(testFile) // ...}T.TempDir() 自动清理,且路径格式符合当前系统规范。总结永远不要手动拼接文件路径字符串;使用 filepath.Join 而非 path.Join;对用户输入的路径,考虑展开 ~ 和转为绝对路径;在跨平台项目中,所有文件操作路径都应通过 filepath 包构造;测试时使用 t.TempDir() 或 os.MkdirTemp 配合 filepath.Join。这些小习惯能让你的 Go 程序在 Windows、Linux、macOS 上表现一致,避免“在我机器上能跑”的尴尬。
总条数:1845 到第
上滑加载中