前言
在AI开启的新技术时代,HarmonyOS凭借其原生的分布式架构与端侧AI能力,正在重新定义智能终端开发范式。基于鸿蒙官方的信息来看,鸿蒙AI的三大核心优势:数据隐私性(本地计算)、毫秒级响应(端侧推理)与零边际成本(模型复用),为开发者提供了独特的创新土壤和开发新范式。那么本文就来以HarmonyOS开发中关于AI套件的技能调用功能的使用来详细聊聊,深入解析如何通过系统级AI接口、分布式协同框架与模型优化工具链,实现高效智能业务开发。
关于技能调用
技能调用是意图框架依托系统AI多模态大模型能力做深度用户输入理解,并通过解析的用户意图对接应用或元服务内的功能和内容。
使用场景描述
使用者通过对小艺对话进行自然语言输入实现内容查询,知识问答,以及通过对图片选定识别问答进行服务获取。技能调用场景分为两种:
- 功能服务类:端侧意图调用直接进入应用或元服务对应意图功能服务页面。
信息交互类:云侧意图调用进行内容查询后展示,端侧用户点击进行意图调用闭环。
典型的使用场景分为:功能服务类和信息交互类两种场景。1、信息交互类
信息交互类的场景分为三种情况,具体如下所示:
- 内容展示场景。例如查找菜谱:语音对话输入“鱼香肉丝怎么做”,即可搜索到对应的菜谱。
- 内容展示+AIGC生成场景。例如查公司:语音对话输入“某公司怎么样”,即可生成并展示关于某公司的信息。
功能履约场景。例如订电影票:语音对话输入“买两张今天的电影票,某电影”,即可进行电影票购买选座。
2、功能服务类
功能服务类的场景也分为三种情况,具体如下所示:
- 跳转页面不带参数场景。例如打开付款码:语音对话输入“打开xx付款码”,即可弹窗对应付款码。
- 跳转页面带参数场景。例如搜索商品带关键词:语音对话输入“打开xx应用搜一下xx品牌39码”,即可弹窗对应商品。
功能执行并展示UIExtension。例如操控蓝牙开关:语音对话输入“打开蓝牙”,即可弹窗蓝牙设置,并打开蓝牙开关。
使用接入方案
1、接入方案概述
关于使用接入方案的概述,开发者需要按照意图定义,进行意图注册并实现意图调用;用户通过对小艺对话进行自然语言输入,小艺理解语义转换成意图调用(含意图参数),执行意图调用实现对应交互体验。具体流程图如下所示:
![上传中...]()2、意图注册
这里以“搜索旅游攻略”特性为例,使用者需要首先注册“查看旅游攻略”(ViewTravelGuides),其他意图见各垂域意图Schema:https://developer.huawei.com/consumer/cn/doc/service/intents-...。开发者需要编辑对应的意图配置PROJECT_HOME/entry/src/main/resources/base/profile/insight_intent.json文件,实现意图注册,具体操作如下所示:
{
"insightIntents": [
{
"intentName": "ViewTravelGuides",
"domain": "TravelDomain",
"intentVersion": "1.0.1",
"srcEntry": "./ets/entryability/InsightIntentExecutorImpl.ets",
"uiAbility": {
"ability": "EntryAbility",
"executeMode": [
"background",
"foreground"
]
},
"uiExtension": {
"ability": "insightIntentUIExtensionAbility"
}
}
]
}
其中,配置参数信息如下所示:
![上传中...]()
具体使用
根据上面的接入方案,这里通过前台意图和前台窗口意图两个调用来介绍具体的使用。
1、前台意图调用
具体的使用的时候,需要开发者自己实现InsightIntentExecutor,并在对应回调实现打开详细页(点击推荐卡片跳转的界面,如旅游攻略详细页面)的能力,ViewTravelGuides的意图调用字段定义见查看旅游攻略 (ViewTravelGuides)。实际操作步骤如下:
(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、前台窗口意图调用
具体的使用的时候,开发者还需要自己实现InsightIntentExecutor,并在对应回调实现窗口页面内容加载的能力。实际操作步骤如下:
(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;
}
}
结束语
通过上文的介绍,HarmonyOS的AI套件不仅是一组工具集,更是构建"数智世界"的操作系统级基座,本质上构建了开发者与机器智能的"共生界面"。从"科技平权"视角看,本地化AI能力大幅降低了创新门槛,个人开发者凭数行代码即可实现过去需百人团队研发的智能特性。展望未来,随着多模态大模型与分布式硬件的深度融合,HarmonyOS或将成为首个实现"泛在智能"的操作系统。站在技术史维度回望,HarmonyOS或许正在复现Android初生时的颠覆性力量——只不过这次颠覆的不仅是交互方式,更是人机协作的本质。让我们以AI套件为笔,在这张无限延展的蓝图上,共同绘制下一代智能应用的瑰丽画卷!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。