HarmonyOS 6.1 AI深度融合:从“功能”到“智能”的大模型落地
系列智能化篇·第47篇。全场景篇后有产品经理问“现在的电商Demo功能齐全了但感觉还是‘死’的。能不能接入AI让它像真人客服一样聊天或者自动生成商品文案” 这正是生成式AIGenAI带来的变革。今天我们将电商Demo升级为“AI电商助手”深度集成华为盘古大模型及MindSpore Lite端侧推理实现智能客服对话、商品图文生成、个性化推荐、图像识别搜索。我们将解决大模型体积大、推理慢、隐私保护三大落地难题。全程基于API23含官方文档未涉及的“端云协同推理架构”和“Prompt工程优化”技巧。一、前言为什么端侧AI是鸿蒙的“王炸”云端大模型如ChatGPT虽强但存在延迟高、隐私泄露、断网不可用的问题。鸿蒙的端云协同AI架构给出了完美答案端侧负责实时性要求高、隐私敏感的任务如键盘输入预测、本地相册识别使用轻量化模型MindSpore Lite。云侧负责复杂推理、知识问答如盘古大模型通过安全隧道传输数据。协同端侧预处理云侧深度推理端侧后处理兼顾效果与效率。今天我们将把AI能力植入电商Demo的每一个毛孔让它从“工具”进化为“助手”。二、核心概念辨析传统算法 vs 大模型维度传统算法 (ML/DL)大语言模型 (LLM)能力​单一任务分类、回归通用任务理解、生成、推理数据​需要大量标注数据训练预训练Few-shot学习少量样本即可交互​输入特征输出结果自然语言对话多轮交互泛化​泛化能力弱换场景需重训泛化能力强适应新场景资源​轻量适合端侧庞大通常需云侧支持三、代码实现从“功能”到“智能”3.1 集成盘古大模型智能客服使用AGC的GenAI Kit调用盘古大模型实现电商场景的智能客服。创建entry/src/main/ets/ai/PanguChatService.etsimport { genAi } from hw-agconnect/genai import { BusinessError } from kit.BasicServicesKit export interface ChatMessage { role: user | assistant | system content: string } export class PanguChatService { private chatSession: genAi.ChatSession | null null private systemPrompt: string 你是一个专业的电商智能助手名为“鸿蒙购物助手”。 你的任务是帮助用户查找商品、解答售后问题、提供购物建议。 请遵循以下规则 1. 回答简洁明了不超过100字。 2. 如果不知道答案请诚实告知不要编造。 3. 优先推荐平台内的商品。 4. 语气友好使用表情符号增加亲和力。 5. 当前平台主打电子产品特别是华为鸿蒙生态产品。 /** * 初始化聊天会话 */ async init(): Promisevoid { try { // 1. 配置大模型参数 const config: genAi.SessionConfig { modelName: pangu-nlp-3.0, // 盘古NLP大模型 temperature: 0.7, // 控制随机性越低越确定 maxTokens: 200, // 最大输出长度 topP: 0.9, systemPrompt: this.systemPrompt } // 2. 创建聊天会话 this.chatSession await genAi.createChatSession(config) console.log(盘古大模型会话初始化成功) } catch (err) { console.error(初始化失败:, err) } } /** * 发送消息并获取回复 */ async sendMessage(userInput: string): Promisestring { if (!this.chatSession) { await this.init() } try { // 1. 构建消息历史实际应用中需维护完整的对话历史 const messages: ChatMessage[] [ { role: user, content: userInput } ] // 2. 调用大模型 const response await this.chatSession.sendMessage(messages) // 3. 提取回复内容 const reply response.getContent() console.log(AI回复:, reply) return reply } catch (err) { console.error(发送消息失败:, err) return 抱歉AI助手暂时无法响应请稍后再试。 } } /** * 流式对话打字机效果 */ async sendMessageStream( userInput: string, onChunk: (chunk: string) void, onComplete: () void ): Promisevoid { if (!this.chatSession) { await this.init() } try { const messages: ChatMessage[] [ { role: user, content: userInput } ] // 使用流式接口 const stream this.chatSession.sendMessageStream(messages) stream.on(data, (chunk: genAi.StreamChunk) { const text chunk.getText() onChunk(text) }) stream.on(end, () { console.log(流式对话结束) onComplete() }) stream.on(error, (err: BusinessError) { console.error(流式对话错误:, err) onChunk(抱歉对话出错。) onComplete() }) } catch (err) { console.error(启动流式对话失败:, err) onChunk(抱歉AI助手暂时无法响应。) onComplete() } } /** * 清理会话资源 */ destroy(): void { if (this.chatSession) { this.chatSession.destroy() this.chatSession null } } }3.2 端侧图像识别拍照搜商品使用MindSpore Lite在端侧运行轻量化图像识别模型实现拍照搜商品。创建entry/src/main/ets/ai/ImageSearchEngine.etsimport { mindSporeLite } from kit.MindSporeLiteKit import { image } from kit.ImageKit import { fileIo } from kit.CoreFileKit export class ImageSearchEngine { private model: mindSporeLite.Model | null null private labels: string[] [] /** * 加载模型和标签 */ async loadModel(): Promisevoid { try { // 1. 加载模型文件.ms模型 const modelPath ${getContext().filesDir}/mobilenet_v2.ms // 注实际项目中需将模型文件放入rawfile目录并复制到沙箱 await this.copyModelToSandbox() // 2. 创建MSContext const context new mindSporeLite.Context() context.target [cpu] // 使用CPU推理也可配置GPU/NPU context.cpuThreadPoolNum 4 // 线程数 context.cpuPowerMode mindSporeLite.CpuPowerMode.BIG_CORES_FIRST // 3. 加载模型 this.model await mindSporeLite.Model.createFromFile(modelPath, context) // 4. 加载标签文件 const labelPath ${getContext().filesDir}/labels.txt const labelContent fileIo.readTextSync(labelPath) this.labels labelContent.split(\n).map(line line.trim()) console.log(图像识别模型加载成功标签数:, this.labels.length) } catch (err) { console.error(模型加载失败:, err) } } /** * 复制模型文件到沙箱 */ private async copyModelToSandbox(): Promisevoid { const resourceManager getContext().resourceManager const modelData await resourceManager.getRawFileContent(mobilenet_v2.ms) const labelData await resourceManager.getRawFileContent(labels.txt) const modelPath ${getContext().filesDir}/mobilenet_v2.ms const labelPath ${getContext().filesDir}/labels.txt fileIo.writeSync(fileIo.openSync(modelPath, fileIo.OpenMode.CREATE | fileIo.OpenMode.WRITE_ONLY), modelData) fileIo.writeSync(fileIo.openSync(labelPath, fileIo.OpenMode.CREATE | fileIo.OpenMode.WRITE_ONLY), labelData) } /** * 识别图片并返回最可能的商品类别 */ async recognizeImage(imagePixelMap: image.PixelMap): Promise{ label: string, confidence: number }[] { if (!this.model) { await this.loadModel() } try { // 1. 图像预处理 const tensor await this.preprocessImage(imagePixelMap) // 2. 创建输入张量 const inputs: mindSporeLite.Tensor[] [tensor] // 3. 执行推理 const outputs await this.model!.predict(inputs) // 4. 后处理解析结果 const results this.postprocessOutputs(outputs) return results.slice(0, 5) // 返回前5个最可能的结果 } catch (err) { console.error(图像识别失败:, err) return [] } } /** * 图像预处理缩放、归一化、格式转换 */ private async preprocessImage(pixelMap: image.PixelMap): PromisemindSporeLite.Tensor { // 1. 缩放到模型输入尺寸 (224x224) const scaleOptions: image.ScalingOptions { size: { height: 224, width: 224 } } const scaledPixelMap await image.createPixelMap(pixelMap, scaleOptions) // 2. 读取像素数据 const pixelBytes await scaledPixelMap.readPixelsToBuffer() // 3. 转换为Tensor (NHWC格式float32) const tensor mindSporeLite.Tensor.create([1, 224, 224, 3], mindSporeLite.DataType.FLOAT32) // 4. 归一化处理 (像素值 / 255.0) const floatData new Float32Array(1 * 224 * 224 * 3) for (let i 0; i pixelBytes.length; i 4) { const r pixelBytes[i] / 255.0 const g pixelBytes[i 1] / 255.0 const b pixelBytes[i 2] / 255.0 // 跳过alpha通道 floatData[(i / 4) * 3] r floatData[(i / 4) * 3 1] g floatData[(i / 4) * 3 2] b } tensor.setData(floatData.buffer) return tensor } /** * 后处理解析输出张量匹配标签 */ private postprocessOutputs(outputs: mindSporeLite.Tensor[]): { label: string, confidence: number }[] { const outputTensor outputs[0] const data new Float32Array(outputTensor.getData()) // Softmax计算概率 const expData data.map(x Math.exp(x)) const sumExp expData.reduce((a, b) a b, 0) const probabilities expData.map(x x / sumExp) // 创建索引-概率对并排序 const results probabilities .map((prob, index) ({ label: this.labels[index] || 未知类别_${index}, confidence: prob })) .sort((a, b) b.confidence - a.confidence) return results } }3.3 AI生成商品文案使用大模型的生成能力为商品自动生成营销文案。export class ProductCopywriter { private panguService: PanguChatService constructor() { this.panguService new PanguChatService() this.panguService.init() } /** * 生成商品标题 */ async generateTitle(productName: string, features: string[]): Promisestring { const prompt 请为以下商品生成一个吸引人的电商标题要求 1. 包含核心关键词${productName} 2. 突出卖点${features.join(、)} 3. 长度控制在20字以内 4. 使用感叹号或emoji增加吸引力 示例华为FreeBuds Pro 3 → 华为FreeBuds Pro 3静谧通话无损音质 return await this.panguService.sendMessage(prompt) } /** * 生成商品描述 */ async generateDescription(productName: string, specs: Recordstring, string): Promisestring { const specStr Object.entries(specs).map(([k, v]) ${k}: ${v}).join() const prompt 请为商品${productName}撰写一段详细的电商描述规格参数${specStr}。 要求 1. 分段落每段一个小标题。 2. 语言生动突出用户体验。 3. 包含使用场景建议。 4. 字数在200字左右。 return await this.panguService.sendMessage(prompt) } /** * 生成社交媒体短文案 */ async generateSocialMediaPost(productName: string, platform: weibo | xiaohongshu): Promisestring { const prompt 请为商品${productName}生成一条适合${platform}发布的文案。 ${platform xiaohongshu ? 要求包含emoji使用小红书风格的语言添加相关话题标签。 : } ${platform weibo ? 要求简洁有力包含热门话题适合转发。 : } return await this.panguService.sendMessage(prompt) } }3.4 端云协同架构设计一个高效的端云协同推理流程。export class AICoordinator { private cloudService: PanguChatService private edgeEngine: ImageSearchEngine private cache: Mapstring, any new Map() constructor() { this.cloudService new PanguChatService() this.edgeEngine new ImageSearchEngine() } /** * 端云协同推理智能问答 */ async hybridChat(userQuery: string): Promisestring { // 1. 端侧意图识别快速过滤 const intent await this.classifyIntent(userQuery) if (intent image_search) { // 2. 如果是图像搜索直接在端侧处理 return 请拍摄商品照片我将为您搜索相似商品。 } else if (intent simple_faq) { // 3. 简单FAQ使用端侧小模型 return await this.answerWithEdgeModel(userQuery) } else { // 4. 复杂问题调用云端大模型 return await this.cloudService.sendMessage(userQuery) } } /** * 端侧意图分类简化版 */ private async classifyIntent(query: string): Promisestring { const keywords { image_search: [拍照, 图片, 识别, 这是什么], simple_faq: [多少钱, 在哪买, 营业时间, 退货政策] } for (const [intent, words] of Object.entries(keywords)) { if (words.some(word query.includes(word))) { return intent } } return complex_query } /** * 使用端侧小模型回答问题模拟 */ private async answerWithEdgeModel(query: string): Promisestring { const faq: Recordstring, string { 多少钱: 商品价格请查看详情页不同配置价格不同哦~, 在哪买: 您可以在华为商城、京东、天猫官方旗舰店购买。, 退货政策: 支持7天无理由退货1年质保服务。 } for (const [question, answer] of Object.entries(faq)) { if (query.includes(question)) { return answer } } return 这个问题有点难让我问问云端专家... } }四、踩坑记录官方文档没写的AI落地细节模型转换的“暗坑”MindSpore Lite支持的模型格式是.ms通常需要将PyTorch/TensorFlow模型通过converter_lite工具转换。转换时要注意算子支持度有些复杂算子可能不支持需要替换或修改模型结构。端侧推理的内存爆炸在手机端加载大模型即使是轻量版也会占用大量内存。如果同时加载多个模型如OCR图像识别NLP极易触发OOM。解决方案使用懒加载按需加载模型及时调用model.destroy()释放资源使用NAPI将推理放在Native层减少JS堆压力。Prompt工程的“玄学”大模型的输出质量极度依赖Prompt的设计。同样的请求不同的Prompt模板效果天差地别。经验给AI设定明确的角色Role、任务Task、约束Constraints和示例Examples。比如“你是一个专业的电商文案专家请用小红书风格写一段文案要求包含emoji不超过100字”。流式输出的UI卡顿使用流式对话打字机效果时如果每次收到一个字符就更新UI高频刷新会导致UI线程阻塞。解决方案使用节流Throttle每积累一定长度的文本如10个字符或每隔一定时间如50ms更新一次UI或者使用TaskPool将字符串拼接放在后台线程。隐私合规红线AI涉及大量用户数据聊天记录、图片。必须明确告知用户数据用途并提供撤回同意和数据删除的入口。对于端侧AI强调“数据不出端”对于云侧AI使用匿名化和脱敏技术并遵守GDPR等法规。

相关新闻

18650电池片定制实力企业

18650电池片定制实力企业

找18650电池片定制,为何实力企业是品质的“压舱石”?在新能源浪潮席卷全球的今天,18650电池片作为动力与储能的基石,其定制化需求正变得前所未有的旺盛。从智能小家电到电动工具,从便携式储能到精密仪器,一…

2026/10/25 14:09:58 阅读更多 →
Dear ImGui即时模式GUI:C++桌面应用高效开发实战指南

Dear ImGui即时模式GUI:C++桌面应用高效开发实战指南

1. Dear ImGui项目概述与核心价值如果你是一名C开发者,正在为桌面应用、工具软件或者游戏编辑器寻找一个轻量、高效且易于集成的即时模式图形用户界面库,那么Dear ImGui几乎是你绕不开的选择。我第一次接触它是在一个需要快速迭代内部工具的项目中&#…

2026/10/25 7:51:45 阅读更多 →
2026学生耐用行李箱推荐:开学季不踩坑,热门行李箱横评对比

2026学生耐用行李箱推荐:开学季不踩坑,热门行李箱横评对比

前言:那些年被行李箱支配的恐惧开学季拖着行李箱赶高铁、挤地铁,结果轮子卡在瓷砖缝里纹丝不动;好不容易挤上车,箱子在斜坡上溜走差点砸到人;托运回来发现箱角裂了、拉链崩了——这些场景,相信不少学生党都…

2026/10/27 20:54:05 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/28 7:28:00 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/28 9:02:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/27 18:20:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/28 9:00:54 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/28 7:29:02 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 9:01:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 19:19:37 阅读更多 →