HarmonyOS :AI 套件技能调用从场景到实战全指南
技能调用是意图框架依托系统AI多模态大模型能力做深度用户输入理解,并通过解析的用户意图对接应用或元服务内的功能和内容。技能调用的本质,是 HarmonyOS 意图框架借助系统级多模态大模型,对用户输入(语音、文本、图像等)进行深度语义解析,进而关联应用 / 元服务内功能与内容的智能联动机制。它的核心价值,是让用户通过自然语言即可直接触发复杂功能,无需逐层点击界面,实现 “说即所得” 的智能交互。 使用者通过对小艺对话进行自然语言输入实现内容查询,知识问答,以及通过对图片选定识别问答进行服务获取。技能调用场景分为两种: 信息交互类:云侧意图调用进行内容查询后展示,端侧用户点击进行意图调用闭环。 信息交互类的场景分为三种情况,具体如下所示: 功能履约场景。例如订电影票:语音对话输入“买两张今天的电影票,某电影”,即可进行电影票购买选座。 功能服务类的场景也分为三种情况,具体如下所示: 功能执行并展示UIExtension。例如操控蓝牙开关:语音对话输入“打开蓝牙”,即可弹窗蓝牙设置,并打开蓝牙开关。 关于使用接入方案的概述,开发者需要按照意图定义,进行意图注册并实现意图调用;用户通过对小艺对话进行自然语言输入,小艺理解语义转换成意图调用(含意图参数),执行意图调用实现对应交互体验。HarmonyOS AI 套件的技能调用遵循 “意图定义→意图注册→意图执行” 的标准化流程,具体流程图如下所示: 这里以“搜索旅游攻略”特性为例,使用者需要首先注册“查看旅游攻略”(ViewTravelGuides)。开发者需要编辑对应的意图配置PROJECT_HOME/entry/src/main/resources/base/profile/insight_intent.json文件,实现意图注册,具体操作如下所示: 其中,配置参数信息如下所示: 根据上面的接入方案,这里通过前台意图和前台窗口意图两个调用来介绍具体的使用。 具体的使用的时候,需要开发者自己实现InsightIntentExecutor,并在对应回调实现打开详细页(点击推荐卡片跳转的界面,如旅游攻略详细页面)的能力,ViewTravelGuides的意图调用字段定义见查看旅游攻略 (ViewTravelGuides)。实际操作步骤如下: 具体的使用的时候,开发者还需要自己实现InsightIntentExecutor,并在对应回调实现窗口页面内容加载的能力。实际操作步骤如下: 通过上面的详细介绍,其实HarmonyOS AI 套件的技能调用,本质上是在 “端侧智能” 与 “分布式架构” 的双重加持下,重新定义了开发者与智能能力的协作方式,它不再是 “开发者适配 AI”,而是 “AI 适配开发者”。当其他系统还在依赖云端 AI 的 “远程算力” 时,HarmonyOS 已经通过端侧推理让智能体验 “零延迟、零隐私风险”;当多数框架还在要求开发者掌握复杂的模型训练时,HarmonyOS 的意图框架与预置模型,让个人开发者仅需几行代码就能实现 “自然语言触发功能” 的智能特性。这不仅是技术的平权,更是将 “泛在智能” 从概念落地为可触达的开发工具。随着多模态大模型与 HarmonyOS 分布式硬件的深度绑定,我们将看到更惊人的场景:手机上触发的 “旅游攻略查询”,能自动同步到车机的导航界面;手表上的语音指令,能直接控制智能家居的设备状态,而这一切,都可以通过 AI 套件的技能调用快速实现。写在前面
在 AI 从 “云端集中式” 向 “端侧分布式” 演进的今天,用户对智能体验的需求早已从 “能用” 升级为 “安全、实时、无界”,而 HarmonyOS 凭借原生的端侧 AI 能力与分布式架构,恰好击中了这一行业痛点。不同于依赖云端算力的传统 AI 方案,HarmonyOS 的 AI 套件构建在 “本地计算 + 毫秒响应 + 模型复用” 三大核心优势之上:端侧推理让用户数据全程留在设备内,完美解决了 AI 应用的隐私焦虑;毫秒级的响应速度,让语音交互、实时识别等场景告别 “加载等待”;而系统级的模型复用机制,更是让开发者无需从头训练模型,仅通过标准化接口就能调用成熟的智能能力。那么本文就来以HarmonyOS开发中关于AI套件的技能调用功能的使用来详细聊聊,深入解析如何通过系统级AI接口、分布式协同框架与模型优化工具链,实现高效智能业务开发。
技能调用:端侧 AI 与应用的智能联动机制
核心应用场景拆解
典型的使用场景分为:功能服务类和信息交互类两种场景。1、信息交互类
2、功能服务类
技能调用接入全流程
1、接入方案概述

2、意图注册
{
"insightIntents": [
{
"intentName": "ViewTravelGuides",
"domain": "TravelDomain",
"intentVersion": "1.0.1",
"srcEntry": "./ets/entryability/InsightIntentExecutorImpl.ets",
"uiAbility": {
"ability": "EntryAbility",
"executeMode": [
"background",
"foreground"
]
},
"uiExtension": {
"ability": "insightIntentUIExtensionAbility"
}
}
]
}
技能调用实战:两类核心意图触发
1、前台 UIAbility 意图调用实践
(1)继承InsightIntentExecutor。
(2)重写对应方法,例如目标拉起前台页面,则可重写onExecuteInUIAbilityForegroundMode方法。
(3)通过意图名称,识别查看旅游攻略意图(ViewTravelGuides),在对应的方法中传递意图参数(param),并拉起对应落地页(点击推荐卡片跳转的界面,如旅游攻略详细面)。
具体的实现代码如下所示:import { insightIntent, InsightIntentExecutor } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';
export default class InsightIntentExecutorImpl extends InsightIntentExecutor {
private static readonly VIEW_TRAVEL_GUIDES = 'ViewTravelGuides';
/**
* override 执行前台UIAbility意图
*
* @param name 意图名称
* @param param 意图参数
* @param pageLoader 窗口
* @returns 意图调用结果
*/
onExecuteInUIAbilityForegroundMode(name: string, param: Record<string, Object>, pageLoader: window.WindowStage):
Promise<insightIntent.ExecuteResult> {
// 根据意图名称分发处理逻辑。接入方可根据实际业务实现页面跳转
switch (name) {
case InsightIntentExecutorImpl.VIEW_TRAVEL_GUIDES:
return this.viewTravelGuides(param, pageLoader);
default:
break;
}
return Promise.resolve({
code: -1,
result: {
message: 'unknown intent'
}
} as insightIntent.ExecuteResult)
}
/**
* 实现调用查看旅游攻略功能
*
* @param param 意图参数
* @param pageLoader 窗口
*/
private viewTravelGuides(param: Record<string, Object>, pageLoader: window.WindowStage): Promise<insightIntent.ExecuteResult> {
return new Promise((resolve, reject) => {
// 实现意图调用,loadContent的入参为旅游攻略落地页路径
pageLoader.loadContent('pages/TravelGuidePage')
.then(() => {
let entityId: string = (param.items as Array<object>)?.[0]?.['entityId'];
resolve({
code: 0,
result: {
message: 'Intent execute succeed'
}
});
})
.catch((err: BusinessError) => {
// 调用失败的情况
resolve({
code: -1,
result: {
message: 'Intent execute failed'
}
})
});
})
}
}2、前台 UIExtension 窗口意图调用实践
(1)继承InsightIntentExecutor。
(2)重写对应方法,例如目标拉起前台窗口化页面,则可重写onExecuteInUIExtensionAbility方法。
(3)通过意图名称,识别打开蓝牙意图(LoadBluetoothCard)调用扩展意图,在对应的方法中传递意图参数(param),并拉起对应窗口化页面。
具体的实现代码如下所示:import { insightIntent, InsightIntentExecutor, UIExtensionContentSession } from '@kit.AbilityKit';
export default class IntentExecutorImpl extends InsightIntentExecutor {
private static readonly TAG: string = 'IntentExecutorImpl';
private static readonly LOAD_BLUETOOTH_CARD: string = 'LoadBluetoothCard';
/**
* override 执行前台UI扩展意图
*
* @param name 意图名称
* @param param 意图参数
* @param pageLoader 窗口
* @returns 意图调用结果
*/
async onExecuteInUIExtensionAbility(name: string, param: Record<string, Object>,
pageLoader: UIExtensionContentSession):
Promise<insightIntent.ExecuteResult> {
console.info(IntentExecutorImpl.TAG, `onExecuteInUIExtensionAbility`);
switch (name) {
case IntentExecutorImpl.LOAD_BLUETOOTH_CARD:
return this.openLoadBluetoothCard(pageLoader);
default:
break;
}
let result: insightIntent.ExecuteResult = {
code: -1,
result: {
message: 'onExecuteInUIExtensionAbility failed'
}
};
return result;
}
/**
* 打开加载蓝牙卡片意图
*
* @param pageLoader 意图内容Session对象
* @returns 执行结果
*/
private async openLoadBluetoothCard(pageLoader: UIExtensionContentSession): Promise<insightIntent.ExecuteResult> {
pageLoader.loadContent('pages/UiExtensionPage');
let result: insightIntent.ExecuteResult = {
code: 0,
result: {
message: 'intent execute succeed'
}
}
return result;
}
}最后