前言

"AI"不一定是调云端大模型。HarmonyOS7 强化了端侧 AI——模型跑在手机本地,不上传数据、不依赖网络、响应快、还保护隐私。
这篇文章带你入门端侧 AI 的两类常见能力:文本生成(本地小模型对话)图像识别(本地分类/检测)。了解它们怎么接入、适合什么场景。

A hand-drawn doodle illustration on pure white pap

为什么要端侧 AI

维度 云端 AI 端侧 AI
网络依赖 必须联网 可离线
延迟 受网络影响
隐私 数据出端 数据不出设备
成本 按调用计费 一次部署

结论:涉及隐私、要离线、要低延迟、高频调用的,优先考虑端侧。复杂推理、知识广的,再上云端大模型。

A hand-drawn doodle illustration on pure white pap

文本生成:本地对话/补全

端侧文本能力通常通过 Core AI 或具体的 NLP Kit 接口,加载本地小模型做生成/补全:

代码实现

import { textGeneration } from '@kit.MindSporeLiteKit'   // 示意包名,以官方为准

async function localChat(prompt: string): Promise<string> {
  // 1. 加载本地模型(通常随 app 打包或从市场下载)
  const model = await loadLocalModel('llm_tiny.ms')
  // 2. 推理生成
  const result = await model.predict(prompt)
  return result as string
}

A hand-drawn doodle illustration on pure white pap

要点(概念层面):

  • 模型文件随 app 提供或首次使用时下载到本地。
  • 推理在设备 NPU/CPU 上跑,数据不离开手机。
  • 适合"短文生成、补全、翻译、摘要"这类轻任务。

注意:具体 API 包名和调用随版本演进,以官方最新文档为准;核心思路(加载本地模型 → 推理)不变。

图像识别:本地分类/检测

图像类任务(识物、扫码、场景识别)端侧很成熟:

核心代码

import { imageClassification } from '@kit.VisionKit'   // 示意,以官方为准

async function recognize(img: image.PixelMap): Promise<string[]> {
  const model = await loadClassifier('mobilenet.ms')
  const labels = await model.classify(img)   // 返回类别标签
  return labels
}
  • 端侧图像模型(如 MobileNet)体积小、速度快,适合实时识物。
  • 数据不出设备,做"相册智能分类""扫码识别"很合适。

端侧 AI 的实操注意

  1. 模型体积:端侧模型要小,几百 MB 还行,GB 级就别想了,除非用动态下载。
  2. 首次加载耗时:模型加载要时间,做成"预加载"或 loading 提示。
  3. 功耗:持续推理会发热耗电,别在后台疯狂跑。
  4. 降级策略:端侧搞不定的复杂任务,回退到云端。

常见误区(小白必踩)

误区 说明
模型过大 端侧模型要小,GB 级别想都别想,除非动态下载且用户接受等待。
首次加载无提示 模型加载要时间,做成预加载或 loading 提示,不然以为卡死。
后台狂跑推理 持续推理发热耗电,别在后台疯狂跑。
无降级策略 端侧搞不定的复杂任务,要能回退云端。

下面这段代码可以直接复制到 DevEco Studio 里运行。建议你边读边敲,改一改文末「动手改一改」里的参数,亲眼看看效果。

完整可运行示例:端侧文本生成

调用端侧 AI 能力做本地推理(无需联网)。

完整示例

// 端侧 AI:本地文本生成(示意 API)
import { textGeneration } from '@kit.MindSporeLiteKit'  // 以实际 SDK 为准

@Entry
@Component
struct OnDeviceAI {
  @State out: string = '点击生成'
  build() {
    Column({ space: 16 }) {
      Text(this.out).fontSize(16)
      Button('本地生成一句话').onClick(async () => {
        // 真实项目替换为对应 SDK 的推理调用
        const r = await textGeneration.generate('写一句问候语')
        this.out = r ?? '生成完成(端侧)'
      })
    }.padding(20)
  }
}

你会看到什么:点按钮,模型在设备本地完成推理并返回结果,不依赖云端,隐私更好、响应更快。

动手改一改

  • 把模型换成图像分类,体验端侧识别。
  • 给生成加 loading 态,推理期间禁用按钮。
  • Native 接口加载量化模型,减小体积、提速。

写在最后

端侧 AI 是"隐私 + 离线 + 低延迟"的杀手锏,适合轻量文本生成和图像识别这类任务。套路就两步:加载本地模型 → 本地推理,数据全程不出设备。

想练手,从"本地图像分类"做起最直观:拍张照,手机本地告诉你是什么——不用联网、不泄隐私,用户体验还很"未来感"。复杂需求再考虑接入云端大模型。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐