找回密码
 立即注册
首页 业界区 业界 深度解析用户意图,让设备真正听懂需求 ...

深度解析用户意图,让设备真正听懂需求

龙玮奇 2025-6-2 23:16:54
语音交互以其自然的沟通方式和直观的操作体验,让用户能够通过简单的语音指令迅速完成日常任务,如设定闹钟、查询天气或搜索信息,大幅提升了效率。然而,当系统无法准确捕捉和理解用户的语音意图时,这些便捷的操作就会受阻,迫使用户转而手动执行,从而降低了整体的效率和体验。在人工智能技术日新月异的当下,用户期望手机系统语音不仅能够听清他们的指令,更能听懂他们的意图,直接触发应用或元服务的相关功能,将所需信息即时呈现。
面对这样的挑战,HarmonyOS SDK意图框架服务(Intents Kit)提供技能调用方案,是意图框架依托系统AI多模态大模型能力做深度用户输入理解,并通过解析的用户意图对接应用或元服务内的功能和内容。用户通过对小艺对话进行自然语言输入实现内容查询,知识问答,以及通过对图片选定识别问答进行服务获取。
技能调用场景分为两种:
  1. 功能服务类:端侧意图调用直接进入应用或元服务对应意图功能服务页面。
  2. 信息交互类:云侧意图调用进行内容查询后展示,端侧用户点击进行意图调用闭环。
复制代码
1.png

典型场景

功能服务类


  • 跳转页面不带参数场景。例如打开付款码:语音对话输入"打开xx付款码",即可弹窗对应付款码。
  • 跳转页面带参数场景。例如搜索商品带关键词:语音对话输入"打开xx应用搜一下xx品牌39码",即可弹窗对应商品。
  • 功能执行并展示UIExtension。例如操控蓝牙开关:语音对话输入"打开蓝牙",即可弹窗蓝牙设置,并打开蓝牙开关。
信息交互类


  • 内容展示场景。例如查找菜谱:语音对话输入"鱼香肉丝怎么做",即可搜索到对应的菜谱。
  • 内容展示+AIGC(Artificial Intelligence Generated Content)生成场景。例如查公司:语音对话输入"xxx公司怎么样",即可生成并展示关于xxx公司的信息。
  • 功能履约场景。例如订电影票:语音对话输入"买两张今天的电影票,xxx电影",即可进行电影票购买选座。
接入方案

方案概述

开发者需要按照意图定义,进行意图注册并实现意图调用;用户通过对小艺对话进行自然语言输入,小艺理解语义转换成意图调用(含意图参数),执行意图调用实现对应交互体验。
2.png

端侧意图注册

以"搜索旅游攻略"特性为例,开发者首先要注册"查看旅游攻略"(ViewTravelGuides),其他意图见各垂域意图Schema。开发者需要编辑对应的意图配置PROJECT_HOME/entry/src/main/resources/base/profile/insight_intent.json文件,实现意图注册。
  1. {
  2.   "insightIntents": [
  3.     {
  4.       "intentName": "ViewTravelGuides",
  5.       "domain": "TravelDomain",
  6.       "intentVersion": "1.0.1",
  7.       "srcEntry": "./ets/entryability/InsightIntentExecutorImpl.ets",
  8.       "uiAbility": {
  9.         "ability": "EntryAbility",
  10.         "executeMode": [
  11.           "background",
  12.           "foreground"
  13.         ]
  14.       },
  15.       "uiExtension": {
  16.         "ability": "insightIntentUIExtensionAbility"
  17.       }
  18.     }
  19.   ]
  20. }
复制代码
端侧前台意图调用

开发者需自己实现InsightIntentExecutor,并在对应回调实现打开落地页(点击推荐卡片跳转的界面,如旅游攻略落页面)的能力,ViewTravelGuides的意图调用字段定义见查看旅游攻略 (ViewTravelGuides)。
步骤如下:

  • 继承InsightIntentExecutor。
  • 重写对应方法,例如目标拉起前台页面,则可重写onExecuteInUIAbilityForegroundMode方法。
  • 通过意图名称,识别查看旅游攻略意图(ViewTravelGuides),在对应的方法中传递意图参数(param),并拉起对应落地页(点击推荐卡片跳转的界面,如旅游攻略落页面)。
  1. import { insightIntent, InsightIntentExecutor } from '@kit.AbilityKit';
  2. import { window } from '@kit.ArkUI';
  3. import { BusinessError } from '@kit.BasicServicesKit';
  4. /**
  5. * 意图调用样例 */
  6. export default class InsightIntentExecutorImpl extends InsightIntentExecutor {
  7.   private static readonly VIEW_TRAVEL_GUIDES = 'ViewTravelGuides';
  8.   /**
  9.    * override 执行前台UIAbility意图
  10.    *
  11.    * @param name 意图名称
  12.    * @param param 意图参数
  13.    * @param pageLoader 窗口
  14.    * @returns 意图调用结果
  15.    */
  16.   onExecuteInUIAbilityForegroundMode(name: string, param: Record<string, Object>, pageLoader: window.WindowStage):
  17.     Promise<insightIntent.ExecuteResult> {
  18.     // 根据意图名称分发处理逻辑
  19.     switch (name) {
  20.       case InsightIntentExecutorImpl.VIEW_TRAVEL_GUIDES:
  21.         return this.viewTravelGuides(param, pageLoader);
  22.       default:
  23.         break;
  24.     }
  25.     return Promise.resolve({
  26.       code: -1,
  27.       result: {
  28.         message: 'unknown intent'
  29.       }
  30.     } as insightIntent.ExecuteResult)
  31.   }
  32.   /**
  33.    * 实现调用查看旅游攻略功能
  34.    *
  35.    * @param param 意图参数
  36.    * @param pageLoader 窗口
  37.    */
  38.   private viewTravelGuides(param: Record<string, Object>, pageLoader: window.WindowStage): Promise<insightIntent.ExecuteResult> {
  39.     return new Promise((resolve, reject) => {
  40.       // TODO 实现意图调用,loadContent的入参为旅游攻略落地页路径,例如:pages/TravelGuidePage
  41.       pageLoader.loadContent('pages/TravelGuidePage')
  42.         .then(() => {
  43.           let entityId: string = (param.items as Array<object>)?.[0]?.['entityId'];
  44.           // TODO 调用成功的情况,此处可以打印日志
  45.           resolve({
  46.             code: 0,
  47.             result: {
  48.               message: 'Intent execute succeed'
  49.             }
  50.           });
  51.         })
  52.         .catch((err: BusinessError) => {
  53.           // TODO 调用失败的情况
  54.           resolve({
  55.             code: -1,
  56.             result: {
  57.               message: 'Intent execute failed'
  58.             }
  59.           })
  60.         });
  61.     })
  62.   }
  63. }
复制代码
端侧前台窗口意图调用

开发者需自己实现InsightIntentExecutor,并在对应回调实现窗口页面内容加载的能力。
步骤如下:

  • 继承InsightIntentExecutor。
  • 重写对应方法,例如目标拉起前台窗口化页面,则可重写onExecuteInUIExtensionAbility方法。
  • 通过意图名称,识别打开蓝牙意图(LoadBluetoothCard)调用扩展意图,在对应的方法中传递意图参数(param),并拉起对应窗口化页面(如打开蓝牙窗口化页面)。
  1. import { insightIntent, InsightIntentExecutor, UIExtensionContentSession } from '@kit.AbilityKit';
  2. /**
  3. * 意图调用样例 */
  4. export default class IntentExecutorImpl extends InsightIntentExecutor {
  5.   private static readonly TAG: string = 'IntentExecutorImpl';
  6.   private static readonly LOAD_BLUETOOTH_CARD: string = 'LoadBluetoothCard';
  7.   /**
  8.    * override 执行前台UI扩展意图
  9.    *
  10.    * @param name 意图名称
  11.    * @param param 意图参数
  12.    * @param pageLoader 窗口
  13.    * @returns 意图调用结果
  14.    */
  15.   async onExecuteInUIExtensionAbility(name: string, param: Record<string, Object>,
  16.     pageLoader: UIExtensionContentSession):
  17.     Promise<insightIntent.ExecuteResult> {
  18.     console.info(IntentExecutorImpl.TAG, `onExecuteInUIExtensionAbility`);
  19.     switch (name) {
  20.       case IntentExecutorImpl.LOAD_BLUETOOTH_CARD:
  21.         console.info(IntentExecutorImpl.TAG, `onExecuteInUIAbilityForegroundMode::ForegroundUiAbility intent`);
  22.         return this.openLoadBluetoothCard(pageLoader);
  23.       default:
  24.         console.info(IntentExecutorImpl.TAG, `onExecuteInUIAbilityForegroundMode::invalid intent`);
  25.         break;
  26.     }
  27.     let result: insightIntent.ExecuteResult = {
  28.       code: -1,
  29.       result: {
  30.         message: 'onExecuteInUIExtensionAbility failed'
  31.       }
  32.     };
  33.     return result;
  34.   }
  35.   /**
  36.    * 打开加载蓝牙卡片意图
  37.    *
  38.    * @param pageLoader 意图内容Session对象
  39.    * @returns 执行结果
  40.    */
  41.   private async openLoadBluetoothCard(pageLoader: UIExtensionContentSession): Promise<insightIntent.ExecuteResult> {
  42.     pageLoader.loadContent('pages/UiExtensionPage');
  43.     let result: insightIntent.ExecuteResult = {
  44.       code: 0,
  45.       result: {
  46.         message: 'intent execute succeed'
  47.       }
  48.     }
  49.     return result;
  50.   }
  51. }
复制代码
了解更多详情>>
访问意图框架服务联盟官网
获取技能调用方案开发指导文档

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册