当前位置: 首页 > news >正文

重塑应用搜索体验,系统级入口功能一步直达

面对设备上多个应用,用户常常面临搜索入口分散、结果精准度不足及操作步骤繁琐的问题。

传统模式下,用户需要在不同应用间频繁切换才能找到目标内容,例如搜索一首歌曲可能需要先打开音乐应用再手动输入关键词,而无法通过系统级统一入口直接触达。同时,搜索结果往往依赖关键词匹配,缺乏对用户行为数据的深度挖掘,导致推荐内容与真实需求脱节。从搜索到最终触达目标内容往往需要多次跳转,例如点击结果后需等待应用加载、页面切换等,体验割裂且效率低下。

对于开发者而言,连接第三方服务(如导航、支付)需逐一对接API,适配不同接口规范的开发工作量大,且难以调用系统级能力,导致开发效率低、维护成本高。

HarmonyOS SDK 意图框架服务(Intents Kit)提供技能调用方案中的功能一步达能力和功能搜索方案;技能调用是意图框架依托系统AI多模态大模型能力做深度用户输入理解,并通过解析的用户意图对接应用或元服务内的功能和内容。其中功能一步达可通过小艺帮助用户快捷打开应用内功能,实现一步直达,功能可由开发者自定义批量声明。开发者将应用/元服务内的功能和内容通过意图框架注册到HarmonyOS,即可实现"一步搜索,内容直达"。

开发者接入功能一步达和功能搜索方案后,可以降低开发成本,复用系统提供的卡片模板,无需重复开发搜索界面;提升应用曝光率,通过系统级搜索入口扩大应用内容的可见性。

典型场景

功能一步达

用户通过对小艺对话进行自然语言输入实现内容查询,知识问答,以及通过对图片选定识别问答进行服务获取。端侧意图调用直接进入应用功能页面,无需其他业务参数,可批量声明接入。开发者将应用内的功能声明接入意图框架后,用户可以通过小艺直接打开相应功能页面,比如"打开xx地图的查路线",实现一步直达。

image

功能搜索

开发者将应用内的功能声明接入意图框架后,在小艺搜索入口,搜索对应功能名或者应用名,可以将应用内功能直接搜出,比如地图应用声明"查路线"功能后,可通过搜索应用名或功能名搜出具体功能,点击后直接拉起应用中的功能页面。

image

接入方案

功能一步达方案概述

若应用中有"查找路线"和"扫一扫"两个功能想要注册到意图框架中,让用户通过小艺快速打开对应功能页面,比如"帮我打开XXX的查找路线"、"帮我打开XXX的扫一扫"或"帮我打开XXX的扫码",则需要在意图声明文件中声明JumpFunctionPage意图,以及上述两个功能,并实现对应意图调用。

意图注册

开发者需要编辑对应的意图配置insight_intent.json文件实现意图注册。insight_intent.json文件需要放置在module下面的指定目录:/src/main/resources/base/profile/insight_intent.json,并且整个工程中只能出现一个insight_intent.json文件。

{"insightIntents": [{"intentName": "JumpFunctionPage",    // 意图名称"domain": "ToolsDomain","intentVersion": "1.0.1", // 意图本身的版本号// 意图调用逻辑入口"srcEntry": "./ets/entryability/InsightIntentExecutorImpl.ets","uiAbility": {
// 意图所在module、ability,以及代码相对路径入口"ability": "EntryAbility",// UIAbility支持前后台两种执行模式"executeMode": ["foreground"]},"inputParams": [{ // 部分意图开放意图参数定义,格式整体参考JSON-Schema。 "properties": { // 描述参数列表,后续可以同级别增加其他描述节点"pageId": { // 具体功能的标识的key值"type": "string", // 参数类型"enum": [ {"value": "1", // 具体功能的标识的value值"displayName": "查找路线", // 功能名,用于匹配用户query"keywords": ["查路线"], // 参数枚举值别名,可以用于索引、过滤"displayDescription": "查找到达目的的路线", // 功能描述"icon": "https://abc.xx" // 功能图标},{"value": "2", // 具体功能的标识的value值"displayName": "扫一扫", // 功能名,用于匹配用户query"keywords": ["扫码"], // 参数枚举值别名,可以用于索引、过滤"displayDescription": "用于扫码", // 功能描述"icon": "https://abc.xx" // 功能图标}]}}}]}]
}

端侧前台意图调用

开发者需自己实现InsightIntentExecutor,并在对应回调实现打开落地页的能力。

步骤如下:

1)继承InsightIntentExecutor;

2)重写对应方法,例如目标拉起前台页面,则可重写onExecuteInUIAbilityForegroundMode方法;

3)通过意图名称,识别跳转功能页面意图(JumpFunctionPage),在对应的方法中传递意图参数(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 JUMP_FUCTION_PAGE = 'JumpFunctionPage';/*** 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.JUMP_FUNCTION_PAGE:return this.jumpFunctionPage(param, pageLoader);default:break;}return Promise.resolve({code: -1,result: {message: 'unknown intent'}} as insightIntent.ExecuteResult)}/*** 实现跳转目标页面的功能** @param param 意图参数* @param pageLoader 窗口*/private jumpFunctionPage(param: Record<string, Object>, pageLoader: window.WindowStage): Promise<insightIntent.ExecuteResult> {return new Promise((resolve, reject) => {let pageId: string = param?.pageId as string;pageLoader.loadContent('pages/'+ pageId).then(() => {resolve({code: 0,result: {message: 'Intent execute success'}});}).catch((err: BusinessError) => {// TODO 调用失败的情况resolve({code: -1,result: {message: 'Intent execute failed'}})});})}
}

功能搜索方案概述

开发者将应用内的功能在意图声明文件中声明接入,并实现对应的意图调用,即可实现用户在小艺搜索入口直接搜索到应用内功能,点击后可直接拉起应用,直达功能页面。
image

意图注册

开发者需要编辑对应的意图配置insight_intent.json文件实现意图注册。insight_intent.json文件需要放置在module下面的指定目
录:/src/main/resources/base/profile/insight_intent.json,并且整个工程中只能存在一个insight_intent.json文件。

{"insightIntents": [{"intentName": "JumpFunctionPage",    // 功能搜意图"domain": "ToolsDomain","intentVersion": "1.0.1", // 意图本身的版本号// 意图调用逻辑入口"srcEntry": "./ets/entryability/InsightIntentExecutorImpl.ets","uiAbility": {
// 意图所在module、ability,以及代码相对路径入口"ability": "EntryAbility",// UIAbility仅支持前台执行模式"executeMode": ["foreground"]},"inputParams": [{ // 部分意图开放意图参数定义,格式整体参考JSON-Schema。 "properties": { // 描述参数列表,后续可以同级别增加其他描述节点"pageId": { // 具体功能的标识的key值"type": "string", // 参数类型"enum": [ {"value": "1", // 具体功能的标识的value值"displayName": "查找路线", // 功能名,小艺搜索展示"keywords": ["查路线"], // 参数枚举值别名,可以用于索引、过滤"displayDescription": "查找到达目的的路线", // 功能描述,小艺搜索展示"icon": "https://abc.xx" // 功能图标,小艺搜索展示},{"value": "2", // 具体功能的标识的value值"displayName": "扫一扫", // 功能名,小艺搜索展示"keywords": ["扫码"], // 参数枚举值别名,可以用于索引、过滤"displayDescription": "用于扫码", // 功能描述,小艺搜索展示"icon": "https://abc.xx" // 功能图标,小艺搜索展示}]}}}]}]
}

端侧前台意图调用

开发者需自己实现InsightIntentExecutor,并在对应回调实现打开落地页的能力。步骤如下:

1)继承InsightIntentExecutor;

2)重写对应方法,例如目标拉起前台页面,则可重写onExecuteInUIAbilityForegroundMode方法;

3)通过意图名称,识别跳转功能页面意图(JumpFuctionPage),在对应的方法中传递意图参数(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 JUMP_FUCTION_PAGE = 'JumpFuctionPage';/*** override 执行前台UIAbility意图** @param intent name 意图名称* @param param 意图参数* @param pageLoader 窗口* @returns 意图调用结果*/onExecuteInUIAbilityForegroundMode(name: string, param: Record<string, Object>, pageLoader: window.WindowStage):Promise<insightIntent.ExecuteResult> {// 根据意图名称分发处理逻辑。接入方可根据实际业务实现页面跳转switch (name) {case InsightIntentExecutorImpl.JUMP_FUCTION_PAGE:return this.jumpFuctionPage(param, pageLoader);default:break;}return Promise.resolve({code: -1,result: {message: 'unknown intent'}} as insightIntent.ExecuteResult)}/*** 实现跳转目标页面的功能** @param param 意图参数* @param pageLoader 窗口*/private jumpFuctionPage(param: Record<string, Object>, pageLoader: window.WindowStage): Promise<insightIntent.ExecuteResult> {return new Promise((resolve, reject) => {let pageId: string = param?.pageId as string;pageLoader.loadContent('pages/'+ pageId).then(() => {resolve({code: 0,result: {message: 'Intent execute success'}});}).catch((err: BusinessError) => {// TODO 调用失败的情况resolve({code: -1,result: {message: 'Intent execute failed'}})});})}

了解更多详情>>

访问意图框架服务联盟官网

获取功能一步达开发指导文档

获取功能搜索开发指导文档

http://www.sczhlp.com/news/233.html

相关文章:

  • MATLAB实现不同型号飞机的红外图像识别
  • 我的手机微信开启了一个端口,虽然我不知道是做什么的
  • 构建之法读后感
  • UI总改版?这个自我修复的AI测试神器让团队告别深夜紧急回滚
  • 低分辨率显示器下的样式兼容
  • javascript的BOM对象的详细解析
  • 企业级知识管理系统的进化:从工具选择到效能提升
  • C/C++通过SQLiteSDK增删改查
  • 深入理解 LangGraph:构建复杂智能体的状态管理与执行流
  • ./build.sh:行1: g++: 未找到命令的错误问题在centos操作系统下面如何解决
  • java 连接 达梦数据库时报错 无法加载达梦数据库驱动: dm.jdbc.driver.DmDriver
  • 通过POSTMAN上传文件(入参IFromFile)
  • C++掌握函数重载、引用与内联函数的概念
  • pygame小游戏打飞机_3键盘事件
  • PDF.js特殊字体、水印加载不出来问题解决
  • 7.29
  • 《ESP32-S3使用指南—IDF版 V1.6》第三十一章 RNG实验
  • 第十八日
  • Windows安全实战:使用BloodHound进行Active Directory环境侦查
  • struct iovec 结构体
  • 概率期望杂记 25.7.29始
  • Avalonia treedatagrid使用杂记
  • 【汇总】接口自动化测试 + 持续集成(文末视频演示)
  • IBM SPSS Amos 29下载安装教程来了!从下载到激活一步不漏
  • 一文看懂开源Coze如何让测试效率飙升
  • word文档修改标记
  • 高压电线电力巡检六类图像识别数据集(2000张图片已划分、已标注)【数据集分享】
  • 零代码构建智能体!Dify插件打通AI Agent开发全链路
  • 酵母双杂交:解析蛋白质互作的经典工具
  • Java or Python?测试开发工程师如何选择合适的编程语言?