HarmonyOS学习路之开发篇—AI功能开发(IM类意图识别)

2023-10-15 08:53:24 浏览数 (2)

IM类意图识别概述

基本概念

IM类意图识别,是指利用机器学习技术,针对用户短信或聊天类APP等IM应用的文本消息进行内容分析,并识别出消息内容代表的用户意图。

运作机制

基于语义分析,利用机器学习的相关技术识别并理解用户消息的意图,通过IM意图识别,可以衍生出各种智能的应用场景,使智能设备更聪明,更懂用户。

基于IM意图识别接口,可以对文本消息中包含的用户意图进行自动分析识别。

目前仅开放支持通知消息类的三个意图的智能识别(称为“意图模块”),包括:

  • 还款提醒通知
  • 还款成功通知
  • 未接来电通知

约束与限制

  • 当前只支持中文语境。
  • 目前仅支持以下三个意图的智能识别:还款提醒通知、还款成功通知、未接来电通知。
  • IM类意图识别的输入文本限制在500个字符以内,字符数超出限制将返回参数错误,文本需要为UTF-8格式,格式错误不报错,但会导致分析结果错误。
  • Engine支持多用户同时接入,但是不支持同一用户并发调用同一个特性。如同一个特性被同一进程同一时间多次调用,则返回系统忙错误。不同进程调用同一特性,则同一时间只有一个进程业务在处理,其他进程进入队列排队。

IM类意图识别开发

场景介绍

  • 生成智能卡片 应用于生成智能卡片,例如:生成未接来电通知卡片。当来电未被用户接听(呼叫超时未接通或被用户主动拒绝接通),电信运营商或服务提供商会向用户发送短信提醒。当用户终端设备接收到短信提醒,即可由IM意图识别特性分析出未接来电通知短信的意图,并可以分析出呼叫方电话号码及呼叫时间,生成智能卡片,方便用户查看。
  • 开发下拉pad屏 应用于开发下拉pad屏。与生成智能卡片的场景类似,可识别用户消息文本的意图,在下拉pad屏生成并显示重要的信息,方便用户随时查看。
  • 文本消息意图识别 主要针对用户短信或聊天类文本消息进行意图识别,目前仅开放支持了通知消息类的三个意图,分别为:还款提醒通知、还款成功通知、未接来电通知。

接口说明

主要接口

IM类意图识别提供了初始化、同步、异步、解绑四个接口,如表1所示。

接口名

功能描述

void init(Context context, OnResultListener<Integer> listener, boolean isLoadModel)

初始化接口,传入当前context对象和结果回调对象,决定是否在初始化时加载模型。

ResponseResult getChatIntention(String requestData, int requestType)

同步接口,用于IM类场景下的用户意图分析。

ResponseResult getChatIntention(final String requestData, final int requestType, final OnResultListener<ResponseResult> listener)

异步接口,用于IM类场景下的用户意图分析。

void destroy(Context context)

解绑接口,释放当前上下文对象。

接口输入值说明

  • isLoadModel:是否在初始化时加载模型。
  • requestType:请求类型,取值可以从ohos.ai.nlu.NluRequestType选择。目前只支持端侧(REQUEST_TYPE_LOCAL)一种请求类型。

参数名

是否必选

类型

说明

text

true

String

待分析的文本,UTF-8编码,不超过500个字符,超过300个字符的只分析通知类意图。

timestamp

false

long

该文本的发送时间或接收时间,格式为时间戳,表示距离格林威治时间1970.1.1的毫秒数。默认为当前系统时间。

isSender

false

int

用来标示发送或接收,0表示接收,1表示发送。

category

false

String

需要分析的意图类别,默认分析所有类,多个用半角逗号“,”隔开,如需要分析出行类和通知类,传“notice”。

module

false

String

用来指定具体分析哪些意图模块,默认分析全部意图模块。 如指定分析特定意图模块,则多个意图模块间用半角逗号“,”隔开。 例如同时分析还款提醒通知和还款成功通知意图,传“repayNotice,repayedNotice”。

callPkg

false

String

调用者名称。

callType

false

int

调用者类型: 0:普通应用(默认)1:快应用

callVersion

false

String

调用者版本号。

callState

false

int

调用者状态: -1:未知(默认)0:前台1:后台

接口返回值说明

返回值ResponseResult中responseResult为JSON字符串,体现文本分词的结果:

键参数名

说明

是否必选

值类型

返回值解析

code

结果码

True

Int

实体识别的结果码。取值包括: 0:成功1:系统正在初始化2:参数错误3:系统忙4:系统异常5:任务超时6:其它错误

message

错误信息

True

String

错误信息描述。

intentions

意图列表

False

JSONArray

详细请参考表2。

  • 0:成功
  • 1:系统正在初始化
  • 2:参数错误
  • 3:系统忙
  • 4:系统异常
  • 5:任务超时
  • 6:其它错误

message 错误信息 True String 错误信息描述。 intentions 意图列表 False JSONArray 详细请参考表2。

详细意图说明

  • 还款通知表示还款通知的意图分析时,“intentions”子参数描述见下表: 表2 意图详情 参数名 是否必选 类型 说明 name true String 意图名,值为“repayNotice” attributes false JSONArray 意图属性,用数组表示,数组里的类型为JSONObject deadline true JSONObject 还款截止时间,结构与实体“time”一致 moneyInfo fale JSONArray 还款额信息,可能存在多币种,以数组形式存在,数组里的类型为JSONObject amount true String 还款总额 miniAmount false String 最低还款金额 unit true int 单位,0(人民币元)、1(美元) bank false String 还款银行 cardSuffix false String 银行卡尾号 bankCode false String 银行简称代码 phoneNumber false String 客服电话 cardType true int 卡类型,其取值列表如下: 0:信用卡 1:借记卡 accountType true int 账户类型,其取值列表如下: 0:普通个人账户(默认) 1:车贷账户
  • 已还款通知 表示已经还款成功的通知,“intentions”子参数描述见下表: 参数名 是否必选 类型 说明 name true String 意图名,值为“repayedNotice” attributes false JSONArray 意图属性,用数组表示,数组里的类型为JSONObject time false JSONObject 还款的时间,结构与实体“time”一致 moneyInfo false JSONArray 还款额信息,可能存在多币种,以数组形式存在,数组里的类型为JSONObject amount true String 已还款额 unit true int 单位,0(人民币元)、1(美元) bank false String 还款银行,与“银行卡尾号”二者至少存在一个 cardSuffix false String 银行卡尾号,与“还款银行”二者至少存在一个 bankCode false String 银行简称代码(对照代码表) isPayOff false int 是否还清,只依据文本中出现的描述,“1”表示还清,否则无该字段 arrears false JSONArray 还欠款信息,可能存在多币种,以数组形式存在,数组里的类型为JSONObject amount true String 还欠款额 unit true int 单位,0(人民币元)、1(美元) cardType true int 卡类型,其取值列表如下: 0:信用卡 1:借记卡 accountType true int 账户类型,其取值列表如下: 0:普通个人账户(默认) 1:车贷账户 deadline false JSONObject 截止时间,结构与实体“time”一致
  • 未接来电通知 表示未接来电的意图,“intentions”子参数描述见下表: 参数名 是否必选 类型 说明 attributes true JSONArray 意图属性,用数组表示,数组里的类型为JSONObject number true String 未接来电号码 callTime true JSONObject 未接来电时间,结构与实体“time”一致 name false String 未接来电号码所属的人名

开发步骤

在使用IM类意图识别API时,将实现IM类意图识别的相关的类添加至工程。

代码语言:javascript复制
import ohos.ai.nlu.ResponseResult; // 接口返回的结果类
import ohos.ai.nlu.NluClient; // 接口客户端类
import ohos.ai.nlu.NluRequestType; // 接口请求类
import ohos.ai.nlu.OnResultListener; // 异步函数,执行成功的回调结果类
import ohos.ai.nlu.util.NluError; // 调用接口返回的成功/错误码信息

使用NluClient静态类进行初始化,通过异步方式获取服务的连接。

  • context:应用上下文信息,应为ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的实例或子类实例。
  • listener:初始化结果的回调,可以传null。
  • isLoadModel:是否加载模型,如果传true,则在初始化时加载模型;如果传false,则在初始化时不加载模型。
代码语言:javascript复制
NluClient.getInstance().init(context, new OnResultListener<Integer>(){
        @Override
        public void onResult(Integer result){
         // 初始化成功回调,在服务初始化成功调用该函数
        }
}, true);

确认第二步初始化接口调用成功后,调用获取IM类意图识别方法得到分析结果,调用实例。

同一个接口同时提供了同步和异步两种方法,开发者可根据自己需要进行选择。还款通知中的时间不应早于当前时间。

  • 同步接口:
代码语言:javascript复制
String requestJson = "{text:'您个人信用卡07月账单¥198.00,还款日07月27日【XX银行】'}";
ResponseResult responseResult = NluClient.getInstance().getChatIntention(requestJson, NluRequestType.REQUEST_TYPE_LOCAL);
if (responseResult != null) {
    // 获取接口返回结果
    String result = responseResult.getResponseResult();
}
  • 异步接口:
代码语言:javascript复制
String requestJson = "{text:'您个人信用卡07月账单¥198.00,还款日07月27日【XX银行】'}"; 
// 调用接口
NluClient.getInstance().getChatIntention(requestJson, NluRequestType.REQUEST_TYPE_LOCAL, new OnResultListener <ResponseResult> () {
    @Override
    public void onResult(ResponseResult respResult) {
        // 异步返回
        if (respResult != null && respResult.getCode() == NluError.SUCCESS_RESULT) {
            // 获取接口返回结果
            String result = respResult.getResponseResult();
        }
    }
});

解绑服务。

代码语言:javascript复制
/* 功能使用完毕,销毁上下文,释放资源。 */
NluClient.getInstance().destroy(context);

0 人点赞